diff options
1354 files changed, 94440 insertions, 61301 deletions
diff --git a/.appveyor.yml b/.appveyor.yml new file mode 100644 index 0000000000..dbd56ab7e0 --- /dev/null +++ b/.appveyor.yml @@ -0,0 +1,24 @@ +os: Visual Studio 2015 + +environment: + PYTHON: C:\Python27 + matrix: + - VS: C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat + GD_PLATFORM: windows + TOOLS: yes + TARGET: release_debug + ARCH: amd64 + +install: + - SET "PATH=%PYTHON%;%PYTHON%\\Scripts;%PATH%" + - pip install --egg scons # it will fail on AppVeyor without --egg flag + - if defined VS call "%VS%" %ARCH% # if defined - so we can also use mingw + +before_build: + - echo %GD_PLATFORM% + - python --version + - scons --version + - cl.exe + +build_script: +- scons platform=%GD_PLATFORM% target=%TARGET% tools=%TOOLS% progress=no diff --git a/.gitattributes b/.gitattributes index f8959dd2d1..03c6f96f80 100644 --- a/.gitattributes +++ b/.gitattributes @@ -8,3 +8,4 @@ drivers/* linguist-vendored *.h eol=lf *.py eol=lf *.hpp eol=lf +*.xml eol=lf diff --git a/.gitignore b/.gitignore index 315dc7950f..b347b348a5 100644 --- a/.gitignore +++ b/.gitignore @@ -53,6 +53,7 @@ gmon.out # Misc .DS_Store +logs/ # for projects that use SCons for building: http://http://www.scons.org/ .sconf_temp @@ -80,6 +81,8 @@ build/ bld/ [Bb]in/ [Oo]bj/ +*.debug +*.dSYM # MSTest test Results [Tt]est[Rr]esult*/ diff --git a/.travis.yml b/.travis.yml index 602152374a..a2c3417412 100644 --- a/.travis.yml +++ b/.travis.yml @@ -19,7 +19,7 @@ env: - GODOT_TARGET=osx - GODOT_TARGET=x11 #- GODOT_TARGET=android - - GODOT_TARGET=windows + #- GODOT_TARGET=windows matrix: include: @@ -66,13 +66,13 @@ addons: - libxrandr-dev # For cross-compiling to Windows. - - binutils-mingw-w64-i686 - - binutils-mingw-w64-x86-64 - - gcc-mingw-w64-i686 - - gcc-mingw-w64-x86-64 - - g++-mingw-w64-i686 - - g++-mingw-w64-x86-64 - - mingw-w64 + #- binutils-mingw-w64-i686 + #- binutils-mingw-w64-x86-64 + #- gcc-mingw-w64-i686 + #- gcc-mingw-w64-x86-64 + #- g++-mingw-w64-i686 + #- g++-mingw-w64-x86-64 + #- mingw-w64 # For style checks. - clang-format-3.9 @@ -92,5 +92,5 @@ script: - if [ "$STATIC_CHECKS" = "yes" ]; then sh ./misc/travis/clang-format.sh; else - scons -j 2 platform=$GODOT_TARGET progress=no verbose=yes CXX=$CXX builtin_openssl=yes; + scons -j 2 platform=$GODOT_TARGET progress=no verbose=yes CXX=$CXX; fi diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a9ada58e64..6cb52cf5ff 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -87,7 +87,7 @@ rebase -i`` and relevant help about rebasing or ammending commits on the Internet). This git style guide has some good practices to have in mind: -https://github.com/agis-/git-style-guide +[Git Style Guide](https://github.com/agis-/git-style-guide) #### Format your commit logs with readability in mind @@ -62,5 +62,6 @@ There are also a number of other learning resources provided by the community, such as text and video tutorials, demos, etc. Consult the [community channels](https://godotengine.org/community) for more info. -[](https://travis-ci.org/godotengine/godot) +[](https://travis-ci.org/godotengine/godot) +[](https://ci.appveyor.com/project/akien-mga/godot) [](https://www.codetriage.com/godotengine/godot) diff --git a/SConstruct b/SConstruct index f2f1ea57f3..c05a4332ab 100644 --- a/SConstruct +++ b/SConstruct @@ -1,7 +1,7 @@ #!/usr/bin/env python -EnsureSConsVersion(0, 14) +EnsureSConsVersion(0, 98, 1) import string @@ -72,6 +72,7 @@ env_base.AppendENVPath('PATH', os.getenv('PATH')) env_base.AppendENVPath('PKG_CONFIG_PATH', os.getenv('PKG_CONFIG_PATH')) env_base.global_defaults = global_defaults env_base.android_maven_repos = [] +env_base.android_flat_dirs = [] env_base.android_dependencies = [] env_base.android_gradle_plugins = [] env_base.android_gradle_classpath = [] @@ -96,6 +97,7 @@ env_base.SetOption('implicit_cache', 1) env_base.__class__.android_add_maven_repository = methods.android_add_maven_repository +env_base.__class__.android_add_flat_dir = methods.android_add_flat_dir env_base.__class__.android_add_dependency = methods.android_add_dependency env_base.__class__.android_add_java_dir = methods.android_add_java_dir env_base.__class__.android_add_res_dir = methods.android_add_res_dir @@ -132,45 +134,46 @@ opts = Variables(customs, ARGUMENTS) # Target build options opts.Add('arch', "Platform-dependent architecture (arm/arm64/x86/x64/mips/etc)", '') -opts.Add('bits', "Target platform bits (default/32/64/fat)", 'default') +opts.Add(EnumVariable('bits', "Target platform bits", 'default', ('default', '32', '64', 'fat'))) opts.Add('p', "Platform (alias for 'platform')", '') -opts.Add('platform', "Target platform: any in " + str(platform_list), '') -opts.Add('target', "Compilation target (debug/release_debug/release)", 'debug') -opts.Add('tools', "Build the tools a.k.a. the Godot editor (yes/no)", 'yes') +opts.Add('platform', "Target platform (%s)" % ('|'.join(platform_list), ), '') +opts.Add(EnumVariable('target', "Compilation target", 'debug', ('debug', 'release_debug', 'release'))) +opts.Add(BoolVariable('tools', "Build the tools a.k.a. the Godot editor", True)) # Components -opts.Add('deprecated', "Enable deprecated features (yes/no)", 'yes') -opts.Add('gdscript', "Build GDSCript support (yes/no)", 'yes') -opts.Add('minizip', "Build minizip archive support (yes/no)", 'yes') -opts.Add('xaudio2', "XAudio2 audio driver (yes/no)", 'no') -opts.Add('xml', "XML format support for resources (yes/no)", 'yes') +opts.Add(BoolVariable('deprecated', "Enable deprecated features", True)) +opts.Add(BoolVariable('gdscript', "Build GDSCript support", True)) +opts.Add(BoolVariable('minizip', "Build minizip archive support", True)) +opts.Add(BoolVariable('xaudio2', "XAudio2 audio driver", False)) +opts.Add(BoolVariable('xml', "XML format support for resources", True)) # Advanced options -opts.Add('disable_3d', "Disable 3D nodes for smaller executable (yes/no)", 'no') -opts.Add('disable_advanced_gui', "Disable advance 3D gui nodes and behaviors (yes/no)", 'no') +opts.Add(BoolVariable('disable_3d', "Disable 3D nodes for smaller executable", False)) +opts.Add(BoolVariable('disable_advanced_gui', "Disable advance 3D gui nodes and behaviors", False)) opts.Add('extra_suffix', "Custom extra suffix added to the base filename of all generated binary files", '') opts.Add('unix_global_settings_path', "UNIX-specific path to system-wide settings. Currently only used for templates", '') -opts.Add('verbose', "Enable verbose output for the compilation (yes/no)", 'no') -opts.Add('vsproj', "Generate Visual Studio Project. (yes/no)", 'no') -opts.Add('warnings', "Set the level of warnings emitted during compilation (extra/all/moderate/no)", 'no') -opts.Add('progress', "Show a progress indicator during build (yes/no)", 'yes') -opts.Add('dev', "If yes, alias for verbose=yes warnings=all (yes/no)", 'no') +opts.Add(BoolVariable('verbose', "Enable verbose output for the compilation", False)) +opts.Add(BoolVariable('vsproj', "Generate Visual Studio Project.", False)) +opts.Add(EnumVariable('warnings', "Set the level of warnings emitted during compilation", 'no', ('extra', 'all', 'moderate', 'no'))) +opts.Add(BoolVariable('progress', "Show a progress indicator during build", True)) +opts.Add(BoolVariable('dev', "If yes, alias for verbose=yes warnings=all", False)) # Thirdparty libraries -opts.Add('builtin_enet', "Use the builtin enet library (yes/no)", 'yes') -opts.Add('builtin_freetype', "Use the builtin freetype library (yes/no)", 'yes') -opts.Add('builtin_libogg', "Use the builtin libogg library (yes/no)", 'yes') -opts.Add('builtin_libpng', "Use the builtin libpng library (yes/no)", 'yes') -opts.Add('builtin_libtheora', "Use the builtin libtheora library (yes/no)", 'yes') -opts.Add('builtin_libvorbis', "Use the builtin libvorbis library (yes/no)", 'yes') -opts.Add('builtin_libvpx', "Use the builtin libvpx library (yes/no)", 'yes') -opts.Add('builtin_libwebp', "Use the builtin libwebp library (yes/no)", 'yes') -opts.Add('builtin_openssl', "Use the builtin openssl library (yes/no)", 'yes') -opts.Add('builtin_opus', "Use the builtin opus library (yes/no)", 'yes') -opts.Add('builtin_pcre2', "Use the builtin pcre2 library (yes/no)", 'yes') -opts.Add('builtin_recast', "Use the builtin recast library (yes/no)", 'yes') -opts.Add('builtin_squish', "Use the builtin squish library (yes/no)", 'yes') -opts.Add('builtin_zlib', "Use the builtin zlib library (yes/no)", 'yes') +opts.Add(BoolVariable('builtin_enet', "Use the builtin enet library", True)) +opts.Add(BoolVariable('builtin_freetype', "Use the builtin freetype library", True)) +opts.Add(BoolVariable('builtin_libogg', "Use the builtin libogg library", True)) +opts.Add(BoolVariable('builtin_libpng', "Use the builtin libpng library", True)) +opts.Add(BoolVariable('builtin_libtheora', "Use the builtin libtheora library", True)) +opts.Add(BoolVariable('builtin_libvorbis', "Use the builtin libvorbis library", True)) +opts.Add(BoolVariable('builtin_libvpx', "Use the builtin libvpx library", True)) +opts.Add(BoolVariable('builtin_libwebp', "Use the builtin libwebp library", True)) +opts.Add(BoolVariable('builtin_openssl', "Use the builtin openssl library", True)) +opts.Add(BoolVariable('builtin_opus', "Use the builtin opus library", True)) +opts.Add(BoolVariable('builtin_pcre2', "Use the builtin pcre2 library)", True)) +opts.Add(BoolVariable('builtin_recast', "Use the builtin recast library", True)) +opts.Add(BoolVariable('builtin_squish', "Use the builtin squish library", True)) +opts.Add(BoolVariable('builtin_zlib', "Use the builtin zlib library", True)) +opts.Add(BoolVariable('builtin_zstd', "Use the builtin zstd library", True)) # Environment setup opts.Add("CXX", "C++ compiler") @@ -185,10 +188,19 @@ opts.Add("LINKFLAGS", "Custom flags for the linker") for k in platform_opts.keys(): opt_list = platform_opts[k] for o in opt_list: - opts.Add(o[0], o[1], o[2]) + opts.Add(o) for x in module_list: - opts.Add('module_' + x + '_enabled', "Enable module '" + x + "' (yes/no)", "yes") + module_enabled = True + tmppath = "./modules/" + x + sys.path.append(tmppath) + import config + enabled_attr = getattr(config, "is_enabled", None) + if (callable(enabled_attr) and not config.is_enabled()): + module_enabled = False + sys.path.remove(tmppath) + sys.modules.pop('config') + opts.Add(BoolVariable('module_' + x + '_enabled', "Enable module '%s'" % (x, ), module_enabled)) opts.Update(env_base) # update environment Help(opts.GenerateHelpText(env_base)) # generate help @@ -212,7 +224,7 @@ if (env_base['target'] == 'debug'): env_base.Append(CPPFLAGS=['-DDEBUG_MEMORY_ALLOC']) env_base.Append(CPPFLAGS=['-DSCI_NAMESPACE']) -if (env_base['deprecated'] == 'no'): +if not env_base['deprecated']: env_base.Append(CPPFLAGS=['-DDISABLE_DEPRECATED']) env_base.platforms = {} @@ -235,12 +247,12 @@ if selected_platform in platform_list: env = detect.create(env_base) else: env = env_base.Clone() - - if (env["dev"] == "yes"): + + if env['dev']: env["warnings"] = "all" - env["verbose"] = "yes" + env['verbose'] = True - if env['vsproj'] == "yes": + if env['vsproj']: env.vs_incs = [] env.vs_srcs = [] @@ -318,19 +330,19 @@ if selected_platform in platform_list: suffix = "." + selected_platform if (env["target"] == "release"): - if (env["tools"] == "yes"): + if env["tools"]: print("Tools can only be built with targets 'debug' and 'release_debug'.") sys.exit(255) suffix += ".opt" env.Append(CCFLAGS=['-DNDEBUG']) elif (env["target"] == "release_debug"): - if (env["tools"] == "yes"): + if env["tools"]: suffix += ".opt.tools" else: suffix += ".opt.debug" else: - if (env["tools"] == "yes"): + if env["tools"]: suffix += ".tools" else: suffix += ".debug" @@ -358,7 +370,7 @@ if selected_platform in platform_list: env.doc_class_path={} for x in module_list: - if env['module_' + x + '_enabled'] != "yes": + if not env['module_' + x + '_enabled']: continue tmppath = "./modules/" + x sys.path.append(tmppath) @@ -385,22 +397,22 @@ if selected_platform in platform_list: # to test 64 bits compiltion # env.Append(CPPFLAGS=['-m64']) - if (env['tools'] == 'yes'): + if env['tools']: env.Append(CPPFLAGS=['-DTOOLS_ENABLED']) - if (env['disable_3d'] == 'yes'): + if env['disable_3d']: env.Append(CPPFLAGS=['-D_3D_DISABLED']) - if (env['gdscript'] == 'yes'): + if env['gdscript']: env.Append(CPPFLAGS=['-DGDSCRIPT_ENABLED']) - if (env['disable_advanced_gui'] == 'yes'): + if env['disable_advanced_gui']: env.Append(CPPFLAGS=['-DADVANCED_GUI_DISABLED']) - if (env['minizip'] == 'yes'): + if env['minizip']: env.Append(CPPFLAGS=['-DMINIZIP_ENABLED']) - if (env['xml'] == 'yes'): + if env['xml']: env.Append(CPPFLAGS=['-DXML_ENABLED']) - if (env['verbose'] == 'no'): + if not env['verbose']: methods.no_verbose(sys, env) if (True): # FIXME: detect GLES3 @@ -422,7 +434,8 @@ if selected_platform in platform_list: SConscript("platform/" + selected_platform + "/SCsub") # build selected platform # Microsoft Visual Studio Project Generation - if (env['vsproj']) == "yes": + if env['vsproj']: + env['CPPPATH'] = [Dir(path) for path in env['CPPPATH']] methods.generate_vs_project(env, GetOption("num_jobs")) # Check for the existence of headers @@ -469,7 +482,7 @@ def progress_finish(target, source, env): with open(node_count_fname, 'w') as f: f.write('%d\n' % node_count) -if ('env' in locals() and env["progress"] == "yes"): +if 'env' in locals() and env['progress']: try: with open(node_count_fname) as f: node_count_max = int(f.readline()) @@ -14,6 +14,17 @@ if sys.version_info < (3,): return x def iteritems(d): return d.iteritems() + def escape_string(s): + if isinstance(s, unicode): + s = s.encode('ascii') + result = '' + for c in s: + if not (32 <= ord(c) < 127) or c in ('\\', '"'): + result += '\\%03o' % ord(c) + else: + result += c + return result + else: def isbasestring(s): return isinstance(s, (str, bytes)) @@ -29,3 +40,21 @@ else: return codecs.utf_8_encode(x)[0] def iteritems(d): return iter(d.items()) + def charcode_to_c_escapes(c): + rev_result = [] + while c >= 256: + c, low = (c // 256, c % 256) + rev_result.append('\\%03o' % low) + rev_result.append('\\%03o' % c) + return ''.join(reversed(rev_result)) + def escape_string(s): + result = '' + if isinstance(s, str): + s = s.encode('utf-8') + for c in s: + if not(32 <= c < 127) or c in (ord('\\'), ord('"')): + result += charcode_to_c_escapes(c) + else: + result += chr(c) + return result + diff --git a/core/SCsub b/core/SCsub index c1e57f6840..e9b21bc71b 100644 --- a/core/SCsub +++ b/core/SCsub @@ -83,24 +83,8 @@ thirdparty_minizip_sources = [ thirdparty_minizip_sources = [thirdparty_minizip_dir + file for file in thirdparty_minizip_sources] env.add_source_files(env.core_sources, thirdparty_minizip_sources) -thirdparty_zstd_dir = "#thirdparty/zstd/" -thirdparty_zstd_sources = [ - "common/entropy_common.c", - "common/error_private.c", - "common/fse_decompress.c", - "common/pool.c", - "common/threading.c", - "common/xxhash.c", - "common/zstd_common.c", - "compress/fse_compress.c", - "compress/huf_compress.c", - "compress/zstd_compress.c", - "compress/zstdmt_compress.c", - "decompress/huf_decompress.c", - "decompress/zstd_decompress.c", -] -thirdparty_zstd_sources = [thirdparty_zstd_dir + file for file in thirdparty_zstd_sources] -env.add_source_files(env.core_sources, thirdparty_zstd_sources) +if 'builtin_zstd' in env and env['builtin_zstd']: + SConscript("#thirdparty/zstd/SCsub") # Godot's own sources @@ -123,5 +107,4 @@ SConscript('helper/SCsub') # Build it all as a library lib = env.Library("core", env.core_sources) env.Prepend(LIBS=[lib]) -env.Append(CPPPATH=["#thirdparty/zstd", "#thirdparty/zstd/common"]) Export('env') diff --git a/core/array.cpp b/core/array.cpp index 2e3fbf858d..171c11776c 100644 --- a/core/array.cpp +++ b/core/array.cpp @@ -47,11 +47,11 @@ void Array::_ref(const Array &p_from) const { ERR_FAIL_COND(!_fp); // should NOT happen. if (_fp == _p) - return; //wathever it is, nothing to do here move along + return; // whatever it is, nothing to do here move along bool success = _fp->refcount.ref(); - ERR_FAIL_COND(!success); //should really not happen either + ERR_FAIL_COND(!success); // should really not happen either _unref(); @@ -233,9 +233,10 @@ struct _ArrayVariantSort { } }; -void Array::sort() { +Array &Array::sort() { _p->array.sort_custom<_ArrayVariantSort>(); + return *this; } struct _ArrayVariantSortCustom { @@ -253,19 +254,21 @@ struct _ArrayVariantSortCustom { return res; } }; -void Array::sort_custom(Object *p_obj, const StringName &p_function) { +Array &Array::sort_custom(Object *p_obj, const StringName &p_function) { - ERR_FAIL_NULL(p_obj); + ERR_FAIL_NULL_V(p_obj, *this); SortArray<Variant, _ArrayVariantSortCustom> avs; avs.compare.obj = p_obj; avs.compare.func = p_function; avs.sort(_p->array.ptr(), _p->array.size()); + return *this; } -void Array::invert() { +Array &Array::invert() { _p->array.invert(); + return *this; } void Array::push_front(const Variant &p_value) { diff --git a/core/array.h b/core/array.h index 8a647dd13b..2c29103108 100644 --- a/core/array.h +++ b/core/array.h @@ -68,9 +68,9 @@ public: Variant front() const; Variant back() const; - void sort(); - void sort_custom(Object *p_obj, const StringName &p_function); - void invert(); + Array &sort(); + Array &sort_custom(Object *p_obj, const StringName &p_function); + Array &invert(); int find(const Variant &p_value, int p_from = 0) const; int rfind(const Variant &p_value, int p_from = -1) const; diff --git a/core/bind/core_bind.cpp b/core/bind/core_bind.cpp index cfd7677d6b..b47e611a51 100644 --- a/core/bind/core_bind.cpp +++ b/core/bind/core_bind.cpp @@ -453,6 +453,11 @@ int _OS::get_power_percent_left() { return OS::get_singleton()->get_power_percent_left(); } +bool _OS::has_feature(const String &p_feature) const { + + return OS::get_singleton()->has_feature(p_feature); +} + /* enum Weekday { DAY_SUNDAY, @@ -755,6 +760,11 @@ bool _OS::can_draw() const { return OS::get_singleton()->can_draw(); } +bool _OS::is_userfs_persistent() const { + + return OS::get_singleton()->is_userfs_persistent(); +} + int _OS::get_processor_count() const { return OS::get_singleton()->get_processor_count(); @@ -858,6 +868,10 @@ void _OS::hide_virtual_keyboard() { OS::get_singleton()->hide_virtual_keyboard(); } +int _OS::get_virtual_keyboard_height() { + return OS::get_singleton()->get_virtual_keyboard_height(); +} + void _OS::print_all_resources(const String &p_to_file) { OS::get_singleton()->print_all_resources(p_to_file); @@ -1033,10 +1047,8 @@ void _OS::_bind_methods() { ClassDB::bind_method(D_METHOD("get_time", "utc"), &_OS::get_time, DEFVAL(false)); ClassDB::bind_method(D_METHOD("get_time_zone_info"), &_OS::get_time_zone_info); ClassDB::bind_method(D_METHOD("get_unix_time"), &_OS::get_unix_time); - ClassDB::bind_method(D_METHOD("get_datetime_from_unix_time", "unix_time_val"), - &_OS::get_datetime_from_unix_time); - ClassDB::bind_method(D_METHOD("get_unix_time_from_datetime", "datetime"), - &_OS::get_unix_time_from_datetime); + ClassDB::bind_method(D_METHOD("get_datetime_from_unix_time", "unix_time_val"), &_OS::get_datetime_from_unix_time); + ClassDB::bind_method(D_METHOD("get_unix_time_from_datetime", "datetime"), &_OS::get_unix_time_from_datetime); ClassDB::bind_method(D_METHOD("get_system_time_secs"), &_OS::get_system_time_secs); ClassDB::bind_method(D_METHOD("set_icon", "icon"), &_OS::set_icon); @@ -1053,6 +1065,7 @@ void _OS::_bind_methods() { ClassDB::bind_method(D_METHOD("get_model_name"), &_OS::get_model_name); ClassDB::bind_method(D_METHOD("can_draw"), &_OS::can_draw); + ClassDB::bind_method(D_METHOD("is_userfs_persistent"), &_OS::is_userfs_persistent); ClassDB::bind_method(D_METHOD("is_stdout_verbose"), &_OS::is_stdout_verbose); ClassDB::bind_method(D_METHOD("can_use_threads"), &_OS::can_use_threads); @@ -1066,6 +1079,7 @@ void _OS::_bind_methods() { ClassDB::bind_method(D_METHOD("has_virtual_keyboard"), &_OS::has_virtual_keyboard); ClassDB::bind_method(D_METHOD("show_virtual_keyboard", "existing_text"), &_OS::show_virtual_keyboard, DEFVAL("")); ClassDB::bind_method(D_METHOD("hide_virtual_keyboard"), &_OS::hide_virtual_keyboard); + ClassDB::bind_method(D_METHOD("get_virtual_keyboard_height"), &_OS::get_virtual_keyboard_height); ClassDB::bind_method(D_METHOD("print_resources_in_use", "short"), &_OS::print_resources_in_use, DEFVAL(false)); ClassDB::bind_method(D_METHOD("print_all_resources", "tofile"), &_OS::print_all_resources, DEFVAL("")); @@ -1101,6 +1115,8 @@ void _OS::_bind_methods() { ClassDB::bind_method(D_METHOD("set_use_vsync", "enable"), &_OS::set_use_vsync); ClassDB::bind_method(D_METHOD("is_vsync_enabled"), &_OS::is_vsync_enabled); + ClassDB::bind_method(D_METHOD("has_feature", "tag_name"), &_OS::has_feature); + ClassDB::bind_method(D_METHOD("get_power_state"), &_OS::get_power_state); ClassDB::bind_method(D_METHOD("get_power_seconds_left"), &_OS::get_power_seconds_left); ClassDB::bind_method(D_METHOD("get_power_percent_left"), &_OS::get_power_percent_left); @@ -1337,7 +1353,7 @@ void _Geometry::_bind_methods() { ClassDB::bind_method(D_METHOD("build_box_planes", "extents"), &_Geometry::build_box_planes); ClassDB::bind_method(D_METHOD("build_cylinder_planes", "radius", "height", "sides", "axis"), &_Geometry::build_cylinder_planes, DEFVAL(Vector3::AXIS_Z)); ClassDB::bind_method(D_METHOD("build_capsule_planes", "radius", "height", "sides", "lats", "axis"), &_Geometry::build_capsule_planes, DEFVAL(Vector3::AXIS_Z)); - ClassDB::bind_method(D_METHOD("segment_intersects_circle", "segment_from", "segment_to", "circle_pos", "circle_radius"), &_Geometry::segment_intersects_circle); + ClassDB::bind_method(D_METHOD("segment_intersects_circle", "segment_from", "segment_to", "circle_position", "circle_radius"), &_Geometry::segment_intersects_circle); ClassDB::bind_method(D_METHOD("segment_intersects_segment_2d", "from_a", "to_a", "from_b", "to_b"), &_Geometry::segment_intersects_segment_2d); ClassDB::bind_method(D_METHOD("get_closest_points_between_segments_2d", "p1", "q1", "p2", "q2"), &_Geometry::get_closest_points_between_segments_2d); @@ -1353,7 +1369,7 @@ void _Geometry::_bind_methods() { ClassDB::bind_method(D_METHOD("ray_intersects_triangle", "from", "dir", "a", "b", "c"), &_Geometry::ray_intersects_triangle); ClassDB::bind_method(D_METHOD("segment_intersects_triangle", "from", "to", "a", "b", "c"), &_Geometry::segment_intersects_triangle); - ClassDB::bind_method(D_METHOD("segment_intersects_sphere", "from", "to", "spos", "sradius"), &_Geometry::segment_intersects_sphere); + ClassDB::bind_method(D_METHOD("segment_intersects_sphere", "from", "to", "sphere_position", "sphere_radius"), &_Geometry::segment_intersects_sphere); ClassDB::bind_method(D_METHOD("segment_intersects_cylinder", "from", "to", "height", "radius"), &_Geometry::segment_intersects_cylinder); ClassDB::bind_method(D_METHOD("segment_intersects_convex", "from", "to", "planes"), &_Geometry::segment_intersects_convex); ClassDB::bind_method(D_METHOD("point_is_inside_triangle", "point", "a", "b", "c"), &_Geometry::point_is_inside_triangle); @@ -1452,10 +1468,10 @@ void _File::seek_end(int64_t p_position) { ERR_FAIL_COND(!f); f->seek_end(p_position); } -int64_t _File::get_pos() const { +int64_t _File::get_position() const { ERR_FAIL_COND_V(!f, 0); - return f->get_pos(); + return f->get_position(); } int64_t _File::get_len() const { @@ -1534,7 +1550,7 @@ String _File::get_as_text() const { ERR_FAIL_COND_V(!f, String()); String text; - size_t original_pos = f->get_pos(); + size_t original_pos = f->get_position(); f->seek(0); String l = get_line(); @@ -1731,9 +1747,9 @@ void _File::_bind_methods() { ClassDB::bind_method(D_METHOD("open", "path", "flags"), &_File::open); ClassDB::bind_method(D_METHOD("close"), &_File::close); ClassDB::bind_method(D_METHOD("is_open"), &_File::is_open); - ClassDB::bind_method(D_METHOD("seek", "pos"), &_File::seek); - ClassDB::bind_method(D_METHOD("seek_end", "pos"), &_File::seek_end, DEFVAL(0)); - ClassDB::bind_method(D_METHOD("get_pos"), &_File::get_pos); + ClassDB::bind_method(D_METHOD("seek", "position"), &_File::seek); + ClassDB::bind_method(D_METHOD("seek_end", "position"), &_File::seek_end, DEFVAL(0)); + ClassDB::bind_method(D_METHOD("get_position"), &_File::get_position); ClassDB::bind_method(D_METHOD("get_len"), &_File::get_len); ClassDB::bind_method(D_METHOD("eof_reached"), &_File::eof_reached); ClassDB::bind_method(D_METHOD("get_8"), &_File::get_8); @@ -2559,8 +2575,8 @@ Dictionary _Engine::get_version_info() const { return Engine::get_singleton()->get_version_info(); } -bool _Engine::is_in_fixed_frame() const { - return Engine::get_singleton()->is_in_fixed_frame(); +bool _Engine::is_in_physics_frame() const { + return Engine::get_singleton()->is_in_physics_frame(); } void _Engine::set_editor_hint(bool p_enabled) { @@ -2590,7 +2606,7 @@ void _Engine::_bind_methods() { ClassDB::bind_method(D_METHOD("get_version_info"), &_Engine::get_version_info); - ClassDB::bind_method(D_METHOD("is_in_fixed_frame"), &_Engine::is_in_fixed_frame); + ClassDB::bind_method(D_METHOD("is_in_physics_frame"), &_Engine::is_in_physics_frame); ClassDB::bind_method(D_METHOD("set_editor_hint", "enabled"), &_Engine::set_editor_hint); ClassDB::bind_method(D_METHOD("is_editor_hint"), &_Engine::is_editor_hint); diff --git a/core/bind/core_bind.h b/core/bind/core_bind.h index 721acf657f..7f8c734e36 100644 --- a/core/bind/core_bind.h +++ b/core/bind/core_bind.h @@ -204,6 +204,7 @@ public: bool has_virtual_keyboard() const; void show_virtual_keyboard(const String &p_existing_text = ""); void hide_virtual_keyboard(); + int get_virtual_keyboard_height(); void print_resources_in_use(bool p_short = false); void print_all_resources(const String &p_to_file); @@ -266,6 +267,8 @@ public: bool can_draw() const; + bool is_userfs_persistent() const; + bool is_stdout_verbose() const; int get_processor_count() const; @@ -315,6 +318,8 @@ public: int get_power_seconds_left(); int get_power_percent_left(); + bool has_feature(const String &p_feature) const; + static _OS *get_singleton() { return singleton; } _OS(); @@ -399,7 +404,7 @@ public: void seek(int64_t p_position); ///< seek to a given position void seek_end(int64_t p_position = 0); ///< seek from the end of file - int64_t get_pos() const; ///< get position in the file + int64_t get_position() const; ///< get position in the file int64_t get_len() const; ///< get size of the file bool eof_reached() const; ///< reading passed EOF @@ -661,7 +666,7 @@ public: Dictionary get_version_info() const; - bool is_in_fixed_frame() const; + bool is_in_physics_frame() const; void set_editor_hint(bool p_enabled); bool is_editor_hint() const; diff --git a/core/class_db.cpp b/core/class_db.cpp index f5ddd9c761..57e88044b5 100644 --- a/core/class_db.cpp +++ b/core/class_db.cpp @@ -187,6 +187,25 @@ MethodDefinition D_METHOD(const char *p_name, const char *p_arg1, const char *p_ return md; } +MethodDefinition D_METHOD(const char *p_name, const char *p_arg1, const char *p_arg2, const char *p_arg3, const char *p_arg4, const char *p_arg5, const char *p_arg6, const char *p_arg7, const char *p_arg8, const char *p_arg9, const char *p_arg10, const char *p_arg11) { + + MethodDefinition md; + md.name = StaticCString::create(p_name); + md.args.resize(11); + md.args[0] = StaticCString::create(p_arg1); + md.args[1] = StaticCString::create(p_arg2); + md.args[2] = StaticCString::create(p_arg3); + md.args[3] = StaticCString::create(p_arg4); + md.args[4] = StaticCString::create(p_arg5); + md.args[5] = StaticCString::create(p_arg6); + md.args[6] = StaticCString::create(p_arg7); + md.args[7] = StaticCString::create(p_arg8); + md.args[8] = StaticCString::create(p_arg9); + md.args[9] = StaticCString::create(p_arg10); + md.args[10] = StaticCString::create(p_arg11); + return md; +} + #endif ClassDB::APIType ClassDB::current_api = API_CORE; @@ -205,6 +224,7 @@ ClassDB::ClassInfo::ClassInfo() { creation_func = NULL; inherits_ptr = NULL; disabled = false; + exposed = false; } ClassDB::ClassInfo::~ClassInfo() { } @@ -1284,6 +1304,15 @@ bool ClassDB::is_class_enabled(StringName p_class) { return !ti->disabled; } +bool ClassDB::is_class_exposed(StringName p_class) { + + OBJTYPE_RLOCK; + + ClassInfo *ti = classes.getptr(p_class); + ERR_FAIL_COND_V(!ti, false); + return ti->exposed; +} + StringName ClassDB::get_category(const StringName &p_node) { ERR_FAIL_COND_V(!classes.has(p_node), StringName()); diff --git a/core/class_db.h b/core/class_db.h index f6b97748b0..24db4c61bb 100644 --- a/core/class_db.h +++ b/core/class_db.h @@ -66,6 +66,7 @@ MethodDefinition D_METHOD(const char *p_name, const char *p_arg1, const char *p_ MethodDefinition D_METHOD(const char *p_name, const char *p_arg1, const char *p_arg2, const char *p_arg3, const char *p_arg4, const char *p_arg5, const char *p_arg6, const char *p_arg7, const char *p_arg8); MethodDefinition D_METHOD(const char *p_name, const char *p_arg1, const char *p_arg2, const char *p_arg3, const char *p_arg4, const char *p_arg5, const char *p_arg6, const char *p_arg7, const char *p_arg8, const char *p_arg9); MethodDefinition D_METHOD(const char *p_name, const char *p_arg1, const char *p_arg2, const char *p_arg3, const char *p_arg4, const char *p_arg5, const char *p_arg6, const char *p_arg7, const char *p_arg8, const char *p_arg9, const char *p_arg10); +MethodDefinition D_METHOD(const char *p_name, const char *p_arg1, const char *p_arg2, const char *p_arg3, const char *p_arg4, const char *p_arg5, const char *p_arg6, const char *p_arg7, const char *p_arg8, const char *p_arg9, const char *p_arg10, const char *p_arg11); #else @@ -127,6 +128,7 @@ public: StringName inherits; StringName name; bool disabled; + bool exposed; Object *(*creation_func)(); ClassInfo(); ~ClassInfo(); @@ -168,6 +170,7 @@ public: ClassInfo *t = classes.getptr(T::get_class_static()); ERR_FAIL_COND(!t); t->creation_func = &creator<T>; + t->exposed = true; T::register_custom_data_to_otdb(); } @@ -176,6 +179,9 @@ public: GLOBAL_LOCK_FUNCTION; T::initialize_class(); + ClassInfo *t = classes.getptr(T::get_class_static()); + ERR_FAIL_COND(!t); + t->exposed = true; //nothing } @@ -193,6 +199,7 @@ public: ClassInfo *t = classes.getptr(T::get_class_static()); ERR_FAIL_COND(!t); t->creation_func = &_create_ptr_func<T>; + t->exposed = true; T::register_custom_data_to_otdb(); } @@ -347,6 +354,8 @@ public: static void set_class_enabled(StringName p_class, bool p_enable); static bool is_class_enabled(StringName p_class); + static bool is_class_exposed(StringName p_class); + static void add_resource_base_extension(const StringName &p_extension, const StringName &p_class); static void get_resource_base_extensions(List<String> *p_extensions); static void get_extensions_for_type(const StringName &p_class, List<String> *p_extensions); diff --git a/core/core_string_names.cpp b/core/core_string_names.cpp index ef9346253f..feee39225f 100644 --- a/core/core_string_names.cpp +++ b/core/core_string_names.cpp @@ -47,4 +47,27 @@ CoreStringNames::CoreStringNames() _sections_unfolded(StaticCString::create("_sections_unfolded")), #endif _custom_features(StaticCString::create("_custom_features")) { + + x = StaticCString::create("x"); + y = StaticCString::create("y"); + z = StaticCString::create("z"); + w = StaticCString::create("w"); + r = StaticCString::create("r"); + g = StaticCString::create("g"); + b = StaticCString::create("b"); + a = StaticCString::create("a"); + position = StaticCString::create("position"); + size = StaticCString::create("size"); + end = StaticCString::create("end"); + basis = StaticCString::create("basis"); + origin = StaticCString::create("origin"); + normal = StaticCString::create("normal"); + d = StaticCString::create("d"); + h = StaticCString::create("h"); + s = StaticCString::create("s"); + v = StaticCString::create("v"); + r8 = StaticCString::create("r8"); + g8 = StaticCString::create("g8"); + b8 = StaticCString::create("b8"); + a8 = StaticCString::create("a8"); } diff --git a/core/core_string_names.h b/core/core_string_names.h index 2eb2b703ae..6fcc773169 100644 --- a/core/core_string_names.h +++ b/core/core_string_names.h @@ -37,8 +37,6 @@ class CoreStringNames { friend void register_core_types(); friend void unregister_core_types(); - static CoreStringNames *singleton; - static void create() { singleton = memnew(CoreStringNames); } static void free() { memdelete(singleton); @@ -50,6 +48,8 @@ class CoreStringNames { public: _FORCE_INLINE_ static CoreStringNames *get_singleton() { return singleton; } + static CoreStringNames *singleton; + StringName _free; StringName changed; StringName _meta; @@ -65,6 +65,29 @@ public: StringName _sections_unfolded; #endif StringName _custom_features; + + StringName x; + StringName y; + StringName z; + StringName w; + StringName r; + StringName g; + StringName b; + StringName a; + StringName position; + StringName size; + StringName end; + StringName basis; + StringName origin; + StringName normal; + StringName d; + StringName h; + StringName s; + StringName v; + StringName r8; + StringName g8; + StringName b8; + StringName a8; }; #endif // SCENE_STRING_NAMES_H diff --git a/core/engine.cpp b/core/engine.cpp index d73693dc12..c609ae9520 100644 --- a/core/engine.cpp +++ b/core/engine.cpp @@ -116,9 +116,9 @@ Engine::Engine() { _target_fps = 0; _time_scale = 1.0; _pixel_snap = false; - _fixed_frames = 0; + _physics_frames = 0; _idle_frames = 0; - _in_fixed = false; + _in_physics = false; _frame_ticks = 0; _frame_step = 0; editor_hint = false; diff --git a/core/engine.h b/core/engine.h index 6f46ec8923..3b4979582f 100644 --- a/core/engine.h +++ b/core/engine.h @@ -49,10 +49,10 @@ class Engine { int _target_fps; float _time_scale; bool _pixel_snap; - uint64_t _fixed_frames; + uint64_t _physics_frames; uint64_t _idle_frames; - bool _in_fixed; + bool _in_physics; bool editor_hint; @@ -71,9 +71,9 @@ public: uint64_t get_frames_drawn(); - uint64_t get_fixed_frames() const { return _fixed_frames; } + uint64_t get_physics_frames() const { return _physics_frames; } uint64_t get_idle_frames() const { return _idle_frames; } - bool is_in_fixed_frame() const { return _in_fixed; } + bool is_in_physics_frame() const { return _in_physics; } uint64_t get_idle_frame_ticks() const { return _frame_ticks; } float get_idle_frame_step() const { return _frame_step; } diff --git a/core/error_list.h b/core/error_list.h index bc65ad0ee4..50d248b3d0 100644 --- a/core/error_list.h +++ b/core/error_list.h @@ -66,7 +66,7 @@ enum Error { ERR_CANT_CONNECT, // (25) ERR_CANT_RESOLVE, ERR_CONNECTION_ERROR, - ERR_CANT_AQUIRE_RESOURCE, + ERR_CANT_ACQUIRE_RESOURCE, ERR_CANT_FORK, ERR_INVALID_DATA, ///< Data passed is invalid (30) ERR_INVALID_PARAMETER, ///< Parameter passed is invalid diff --git a/core/error_macros.cpp b/core/error_macros.cpp index 5919d38375..170a22e8dd 100644 --- a/core/error_macros.cpp +++ b/core/error_macros.cpp @@ -29,6 +29,7 @@ /*************************************************************************/ #include "error_macros.h" +#include "io/logger.h" #include "os/os.h" bool _err_error_exists = false; @@ -79,7 +80,7 @@ void remove_error_handler(ErrorHandlerList *p_handler) { void _err_print_error(const char *p_function, const char *p_file, int p_line, const char *p_error, ErrorHandlerType p_type) { - OS::get_singleton()->print_error(p_function, p_file, p_line, p_error, _err_error_exists ? OS::get_singleton()->get_last_error() : "", (OS::ErrorType)p_type); + OS::get_singleton()->print_error(p_function, p_file, p_line, p_error, _err_error_exists ? OS::get_singleton()->get_last_error() : "", (Logger::ErrorType)p_type); _global_lock(); ErrorHandlerList *l = error_handler_list; diff --git a/core/error_macros.h b/core/error_macros.h index 005b0e32a3..1fa7f2c134 100644 --- a/core/error_macros.h +++ b/core/error_macros.h @@ -30,6 +30,7 @@ #ifndef ERROR_MACROS_H #define ERROR_MACROS_H +#include "typedefs.h" /** * Error macros. Unlike exceptions and asserts, these macros try to mantain consistency and stability * inside the code. It is recommended to always return processable data, so in case of an error, the @@ -130,7 +131,7 @@ extern bool _err_error_exists; #define ERR_FAIL_INDEX(m_index, m_size) \ do { \ - if ((m_index) < 0 || (m_index) >= (m_size)) { \ + if (unlikely((m_index) < 0 || (m_index) >= (m_size))) { \ _err_print_error(FUNCTION_STR, __FILE__, __LINE__, "Index " _STR(m_index) " out of size (" _STR(m_size) ")."); \ return; \ } else \ @@ -144,7 +145,7 @@ extern bool _err_error_exists; #define ERR_FAIL_INDEX_V(m_index, m_size, m_retval) \ do { \ - if ((m_index) < 0 || (m_index) >= (m_size)) { \ + if (unlikely((m_index) < 0 || (m_index) >= (m_size))) { \ _err_print_error(FUNCTION_STR, __FILE__, __LINE__, "Index " _STR(m_index) " out of size (" _STR(m_size) ")."); \ return m_retval; \ } else \ @@ -156,7 +157,7 @@ extern bool _err_error_exists; */ #define CRASH_BAD_INDEX(m_index, m_size) \ do { \ - if ((m_index) < 0 || (m_index) >= (m_size)) { \ + if (unlikely((m_index) < 0 || (m_index) >= (m_size))) { \ _err_print_error(FUNCTION_STR, __FILE__, __LINE__, "FATAL: Index " _STR(m_index) " out of size (" _STR(m_size) ")."); \ GENERATE_TRAP \ } \ @@ -168,7 +169,7 @@ extern bool _err_error_exists; #define ERR_FAIL_NULL(m_param) \ { \ - if (!m_param) { \ + if (unlikely(!m_param)) { \ _err_print_error(FUNCTION_STR, __FILE__, __LINE__, "Parameter ' " _STR(m_param) " ' is null."); \ return; \ } else \ @@ -177,7 +178,7 @@ extern bool _err_error_exists; #define ERR_FAIL_NULL_V(m_param, m_retval) \ { \ - if (!m_param) { \ + if (unlikely(!m_param)) { \ _err_print_error(FUNCTION_STR, __FILE__, __LINE__, "Parameter ' " _STR(m_param) " ' is null."); \ return m_retval; \ } else \ @@ -190,7 +191,7 @@ extern bool _err_error_exists; #define ERR_FAIL_COND(m_cond) \ { \ - if (m_cond) { \ + if (unlikely(m_cond)) { \ _err_print_error(FUNCTION_STR, __FILE__, __LINE__, "Condition ' " _STR(m_cond) " ' is true."); \ return; \ } else \ @@ -202,7 +203,7 @@ extern bool _err_error_exists; #define CRASH_COND(m_cond) \ { \ - if (m_cond) { \ + if (unlikely(m_cond)) { \ _err_print_error(FUNCTION_STR, __FILE__, __LINE__, "FATAL: Condition ' " _STR(m_cond) " ' is true."); \ GENERATE_TRAP \ } \ @@ -216,7 +217,7 @@ extern bool _err_error_exists; #define ERR_FAIL_COND_V(m_cond, m_retval) \ { \ - if (m_cond) { \ + if (unlikely(m_cond)) { \ _err_print_error(FUNCTION_STR, __FILE__, __LINE__, "Condition ' " _STR(m_cond) " ' is true. returned: " _STR(m_retval)); \ return m_retval; \ } else \ @@ -229,7 +230,7 @@ extern bool _err_error_exists; #define ERR_CONTINUE(m_cond) \ { \ - if (m_cond) { \ + if (unlikely(m_cond)) { \ _err_print_error(FUNCTION_STR, __FILE__, __LINE__, "Condition ' " _STR(m_cond) " ' is true. Continuing..:"); \ continue; \ } else \ @@ -242,7 +243,7 @@ extern bool _err_error_exists; #define ERR_BREAK(m_cond) \ { \ - if (m_cond) { \ + if (unlikely(m_cond)) { \ _err_print_error(FUNCTION_STR, __FILE__, __LINE__, "Condition ' " _STR(m_cond) " ' is true. Breaking..:"); \ break; \ } else \ diff --git a/core/global_constants.cpp b/core/global_constants.cpp index 224ee0e0aa..6f58af2ccf 100644 --- a/core/global_constants.cpp +++ b/core/global_constants.cpp @@ -472,7 +472,7 @@ void register_global_constants() { BIND_GLOBAL_ENUM_CONSTANT(ERR_ALREADY_IN_USE); BIND_GLOBAL_ENUM_CONSTANT(ERR_LOCKED); ///< resource is locked BIND_GLOBAL_ENUM_CONSTANT(ERR_TIMEOUT); - BIND_GLOBAL_ENUM_CONSTANT(ERR_CANT_AQUIRE_RESOURCE); + BIND_GLOBAL_ENUM_CONSTANT(ERR_CANT_ACQUIRE_RESOURCE); BIND_GLOBAL_ENUM_CONSTANT(ERR_INVALID_DATA); ///< Data passed is invalid BIND_GLOBAL_ENUM_CONSTANT(ERR_INVALID_PARAMETER); ///< Parameter passed is invalid BIND_GLOBAL_ENUM_CONSTANT(ERR_ALREADY_EXISTS); ///< When adding ), item already exists diff --git a/core/image.cpp b/core/image.cpp index 4d1f32c360..42684e7ea7 100644 --- a/core/image.cpp +++ b/core/image.cpp @@ -530,7 +530,7 @@ static void _scale_cubic(const uint8_t *p_src, uint8_t *p_dst, uint32_t p_src_wi int height = p_src_height; double xfac = (double)width / p_dst_width; double yfac = (double)height / p_dst_height; - // coordinates of source points and cooefficiens + // coordinates of source points and coefficients double ox, oy, dx, dy, k1, k2; int ox1, oy1, ox2, oy2; // destination pixel values @@ -561,7 +561,7 @@ static void _scale_cubic(const uint8_t *p_src, uint8_t *p_dst, uint32_t p_src_wi } for (int n = -1; n < 3; n++) { - // get Y cooefficient + // get Y coefficient k1 = _bicubic_interp_kernel(dy - (double)n); oy2 = oy1 + n; @@ -571,7 +571,7 @@ static void _scale_cubic(const uint8_t *p_src, uint8_t *p_dst, uint32_t p_src_wi oy2 = ymax; for (int m = -1; m < 3; m++) { - // get X cooefficient + // get X coefficient k2 = k1 * _bicubic_interp_kernel((double)m - dx); ox2 = ox1 + m; @@ -1013,8 +1013,8 @@ void Image::shrink_x2() { copymem(w.ptr(), &r[ofs], new_size); } - width /= 2; - height /= 2; + width = MAX(width / 2, 1); + height = MAX(height / 2, 1); data = new_img; } else { @@ -1061,7 +1061,6 @@ Error Image::generate_mipmaps() { int size = _get_dst_image_size(width, height, format, mmcount); data.resize(size); - print_line("to gen mipmaps w " + itos(width) + " h " + itos(height) + " format " + get_format_name(format) + " mipmaps " + itos(mmcount) + " new size is: " + itos(size)); PoolVector<uint8_t>::Write wp = data.write(); @@ -2474,6 +2473,7 @@ void Image::fix_alpha_edges() { if (rp[3] < alpha_threshold) continue; + closest_dist = dist; closest_color[0] = rp[0]; closest_color[1] = rp[1]; closest_color[2] = rp[2]; diff --git a/core/io/compression.cpp b/core/io/compression.cpp index 44fa65e11d..fbe97e54c7 100644 --- a/core/io/compression.cpp +++ b/core/io/compression.cpp @@ -33,9 +33,9 @@ #include "zip_io.h" #include "thirdparty/misc/fastlz.h" -#include "thirdparty/zstd/zstd.h" #include <zlib.h> +#include <zstd.h> int Compression::compress(uint8_t *p_dst, const uint8_t *p_src, int p_src_size, Mode p_mode) { diff --git a/core/io/file_access_buffered.cpp b/core/io/file_access_buffered.cpp index 859f2e3f8c..9ec03bf32b 100644 --- a/core/io/file_access_buffered.cpp +++ b/core/io/file_access_buffered.cpp @@ -76,7 +76,7 @@ void FileAccessBuffered::seek_end(int64_t p_position) { file.offset = file.size + p_position; }; -size_t FileAccessBuffered::get_pos() const { +size_t FileAccessBuffered::get_position() const { return file.offset; }; diff --git a/core/io/file_access_buffered.h b/core/io/file_access_buffered.h index d3137058fb..70aaeb8ae0 100644 --- a/core/io/file_access_buffered.h +++ b/core/io/file_access_buffered.h @@ -72,7 +72,7 @@ protected: int get_cache_size(); public: - virtual size_t get_pos() const; ///< get position in the file + virtual size_t get_position() const; ///< get position in the file virtual size_t get_len() const; ///< get size of the file virtual void seek(size_t p_position); ///< seek to a given position diff --git a/core/io/file_access_buffered_fa.h b/core/io/file_access_buffered_fa.h index 9e41834561..309fc16d09 100644 --- a/core/io/file_access_buffered_fa.h +++ b/core/io/file_access_buffered_fa.h @@ -76,6 +76,11 @@ protected: }; public: + void flush() { + + f.flush(); + }; + void store_8(uint8_t p_dest) { f.store_8(p_dest); diff --git a/core/io/file_access_compressed.cpp b/core/io/file_access_compressed.cpp index 70430ca5d3..514e3c65f0 100644 --- a/core/io/file_access_compressed.cpp +++ b/core/io/file_access_compressed.cpp @@ -62,7 +62,7 @@ Error FileAccessCompressed::open_after_magic(FileAccess *p_base) { block_size = f->get_32(); read_total = f->get_32(); int bc = (read_total / block_size) + 1; - int acc_ofs = f->get_pos() + bc * 4; + int acc_ofs = f->get_position() + bc * 4; int max_bs = 0; for (int i = 0; i < bc; i++) { @@ -232,7 +232,7 @@ void FileAccessCompressed::seek_end(int64_t p_position) { seek(read_total + p_position); } } -size_t FileAccessCompressed::get_pos() const { +size_t FileAccessCompressed::get_position() const { ERR_FAIL_COND_V(!f, 0); if (writing) { @@ -338,6 +338,13 @@ Error FileAccessCompressed::get_error() const { return read_eof ? ERR_FILE_EOF : OK; } +void FileAccessCompressed::flush() { + ERR_FAIL_COND(!f); + ERR_FAIL_COND(!writing); + + // compressed files keep data in memory till close() +} + void FileAccessCompressed::store_8(uint8_t p_dest) { ERR_FAIL_COND(!f); diff --git a/core/io/file_access_compressed.h b/core/io/file_access_compressed.h index ba84c9767c..1d99e5bfd4 100644 --- a/core/io/file_access_compressed.h +++ b/core/io/file_access_compressed.h @@ -74,7 +74,7 @@ public: virtual void seek(size_t p_position); ///< seek to a given position virtual void seek_end(int64_t p_position = 0); ///< seek from the end of file - virtual size_t get_pos() const; ///< get position in the file + virtual size_t get_position() const; ///< get position in the file virtual size_t get_len() const; ///< get size of the file virtual bool eof_reached() const; ///< reading passed EOF @@ -84,6 +84,7 @@ public: virtual Error get_error() const; ///< get last error + virtual void flush(); virtual void store_8(uint8_t p_dest); ///< store a byte virtual bool file_exists(const String &p_name); ///< return true if a file exists diff --git a/core/io/file_access_encrypted.cpp b/core/io/file_access_encrypted.cpp index 12503f3be4..e5da307153 100644 --- a/core/io/file_access_encrypted.cpp +++ b/core/io/file_access_encrypted.cpp @@ -62,16 +62,16 @@ Error FileAccessEncrypted::open_and_parse(FileAccess *p_base, const Vector<uint8 writing = false; key = p_key; uint32_t magic = p_base->get_32(); - print_line("MAGIC: " + itos(magic)); ERR_FAIL_COND_V(magic != COMP_MAGIC, ERR_FILE_UNRECOGNIZED); + mode = Mode(p_base->get_32()); ERR_FAIL_INDEX_V(mode, MODE_MAX, ERR_FILE_CORRUPT); ERR_FAIL_COND_V(mode == 0, ERR_FILE_CORRUPT); - print_line("MODE: " + itos(mode)); + unsigned char md5d[16]; p_base->get_buffer(md5d, 16); length = p_base->get_64(); - base = p_base->get_pos(); + base = p_base->get_position(); ERR_FAIL_COND_V(p_base->get_len() < base + length, ERR_FILE_CORRUPT); uint32_t ds = length; if (ds % 16) { @@ -199,7 +199,7 @@ void FileAccessEncrypted::seek_end(int64_t p_position) { seek(data.size() + p_position); } -size_t FileAccessEncrypted::get_pos() const { +size_t FileAccessEncrypted::get_position() const { return pos; } @@ -268,6 +268,12 @@ void FileAccessEncrypted::store_buffer(const uint8_t *p_src, int p_length) { } } +void FileAccessEncrypted::flush() { + ERR_FAIL_COND(!writing); + + // encrypted files keep data in memory till close() +} + void FileAccessEncrypted::store_8(uint8_t p_dest) { ERR_FAIL_COND(!writing); diff --git a/core/io/file_access_encrypted.h b/core/io/file_access_encrypted.h index 74d00a5a8f..d83fed3e0e 100644 --- a/core/io/file_access_encrypted.h +++ b/core/io/file_access_encrypted.h @@ -61,7 +61,7 @@ public: virtual void seek(size_t p_position); ///< seek to a given position virtual void seek_end(int64_t p_position = 0); ///< seek from the end of file - virtual size_t get_pos() const; ///< get position in the file + virtual size_t get_position() const; ///< get position in the file virtual size_t get_len() const; ///< get size of the file virtual bool eof_reached() const; ///< reading passed EOF @@ -71,6 +71,7 @@ public: virtual Error get_error() const; ///< get last error + virtual void flush(); virtual void store_8(uint8_t p_dest); ///< store a byte virtual void store_buffer(const uint8_t *p_src, int p_length); ///< store an array of bytes diff --git a/core/io/file_access_memory.cpp b/core/io/file_access_memory.cpp index 5b186b7798..0a5815fca8 100644 --- a/core/io/file_access_memory.cpp +++ b/core/io/file_access_memory.cpp @@ -120,7 +120,7 @@ void FileAccessMemory::seek_end(int64_t p_position) { pos = length + p_position; } -size_t FileAccessMemory::get_pos() const { +size_t FileAccessMemory::get_position() const { ERR_FAIL_COND_V(!data, 0); return pos; @@ -170,6 +170,10 @@ Error FileAccessMemory::get_error() const { return pos >= length ? ERR_FILE_EOF : OK; } +void FileAccessMemory::flush() { + ERR_FAIL_COND(!data); +} + void FileAccessMemory::store_8(uint8_t p_byte) { ERR_FAIL_COND(!data); diff --git a/core/io/file_access_memory.h b/core/io/file_access_memory.h index 7feb16461b..23392719b4 100644 --- a/core/io/file_access_memory.h +++ b/core/io/file_access_memory.h @@ -51,7 +51,7 @@ public: virtual void seek(size_t p_position); ///< seek to a given position virtual void seek_end(int64_t p_position); ///< seek from the end of file - virtual size_t get_pos() const; ///< get position in the file + virtual size_t get_position() const; ///< get position in the file virtual size_t get_len() const; ///< get size of the file virtual bool eof_reached() const; ///< reading passed EOF @@ -62,6 +62,7 @@ public: virtual Error get_error() const; ///< get last error + virtual void flush(); virtual void store_8(uint8_t p_byte); ///< store a byte virtual void store_buffer(const uint8_t *p_src, int p_length); ///< store an array of bytes diff --git a/core/io/file_access_network.cpp b/core/io/file_access_network.cpp index 58ca2d4c58..a224abd9e7 100644 --- a/core/io/file_access_network.cpp +++ b/core/io/file_access_network.cpp @@ -350,7 +350,7 @@ void FileAccessNetwork::seek_end(int64_t p_position) { seek(total_size + p_position); } -size_t FileAccessNetwork::get_pos() const { +size_t FileAccessNetwork::get_position() const { ERR_FAIL_COND_V(!opened, 0); return pos; @@ -456,6 +456,10 @@ Error FileAccessNetwork::get_error() const { return pos == total_size ? ERR_FILE_EOF : OK; } +void FileAccessNetwork::flush() { + ERR_FAIL(); +} + void FileAccessNetwork::store_8(uint8_t p_dest) { ERR_FAIL(); diff --git a/core/io/file_access_network.h b/core/io/file_access_network.h index cd5046f007..20614476d0 100644 --- a/core/io/file_access_network.h +++ b/core/io/file_access_network.h @@ -145,7 +145,7 @@ public: virtual void seek(size_t p_position); ///< seek to a given position virtual void seek_end(int64_t p_position = 0); ///< seek from the end of file - virtual size_t get_pos() const; ///< get position in the file + virtual size_t get_position() const; ///< get position in the file virtual size_t get_len() const; ///< get size of the file virtual bool eof_reached() const; ///< reading passed EOF @@ -155,6 +155,7 @@ public: virtual Error get_error() const; ///< get last error + virtual void flush(); virtual void store_8(uint8_t p_dest); ///< store a byte virtual bool file_exists(const String &p_path); ///< return true if a file exists diff --git a/core/io/file_access_pack.cpp b/core/io/file_access_pack.cpp index e511085ac5..a7eb8ce6a9 100644 --- a/core/io/file_access_pack.cpp +++ b/core/io/file_access_pack.cpp @@ -140,17 +140,17 @@ bool PackedSourcePCK::try_open_pack(const String &p_path) { if (magic != 0x43504447) { //maybe at he end.... self contained exe f->seek_end(); - f->seek(f->get_pos() - 4); + f->seek(f->get_position() - 4); magic = f->get_32(); if (magic != 0x43504447) { memdelete(f); return false; } - f->seek(f->get_pos() - 12); + f->seek(f->get_position() - 12); uint64_t ds = f->get_64(); - f->seek(f->get_pos() - ds - 8); + f->seek(f->get_position() - ds - 8); magic = f->get_32(); if (magic != 0x43504447) { @@ -236,7 +236,7 @@ void FileAccessPack::seek_end(int64_t p_position) { seek(pf.size + p_position); } -size_t FileAccessPack::get_pos() const { +size_t FileAccessPack::get_position() const { return pos; } @@ -293,6 +293,11 @@ Error FileAccessPack::get_error() const { return OK; } +void FileAccessPack::flush() { + + ERR_FAIL(); +} + void FileAccessPack::store_8(uint8_t p_dest) { ERR_FAIL(); diff --git a/core/io/file_access_pack.h b/core/io/file_access_pack.h index 758e9afa8e..12187a353a 100644 --- a/core/io/file_access_pack.h +++ b/core/io/file_access_pack.h @@ -148,7 +148,7 @@ public: virtual void seek(size_t p_position); virtual void seek_end(int64_t p_position = 0); - virtual size_t get_pos() const; + virtual size_t get_position() const; virtual size_t get_len() const; virtual bool eof_reached() const; @@ -161,6 +161,7 @@ public: virtual Error get_error() const; + virtual void flush(); virtual void store_8(uint8_t p_dest); virtual void store_buffer(const uint8_t *p_src, int p_length); diff --git a/core/io/file_access_zip.cpp b/core/io/file_access_zip.cpp index 8c99ef2983..ec809011a9 100644 --- a/core/io/file_access_zip.cpp +++ b/core/io/file_access_zip.cpp @@ -65,7 +65,7 @@ static uLong godot_write(voidpf opaque, voidpf stream, const void *buf, uLong si static long godot_tell(voidpf opaque, voidpf stream) { FileAccess *f = (FileAccess *)opaque; - return f->get_pos(); + return f->get_position(); }; static long godot_seek(voidpf opaque, voidpf stream, uLong offset, int origin) { @@ -76,7 +76,7 @@ static long godot_seek(voidpf opaque, voidpf stream, uLong offset, int origin) { switch (origin) { case ZLIB_FILEFUNC_SEEK_CUR: - pos = f->get_pos() + offset; + pos = f->get_position() + offset; break; case ZLIB_FILEFUNC_SEEK_END: pos = f->get_len() + offset; @@ -301,7 +301,7 @@ void FileAccessZip::seek_end(int64_t p_position) { unzSeekCurrentFile(zfile, get_len() + p_position); }; -size_t FileAccessZip::get_pos() const { +size_t FileAccessZip::get_position() const { ERR_FAIL_COND_V(!zfile, 0); return unztell(zfile); @@ -353,6 +353,11 @@ Error FileAccessZip::get_error() const { return OK; }; +void FileAccessZip::flush() { + + ERR_FAIL(); +} + void FileAccessZip::store_8(uint8_t p_dest) { ERR_FAIL(); diff --git a/core/io/file_access_zip.h b/core/io/file_access_zip.h index 2a8ec3fca5..0977b241ee 100644 --- a/core/io/file_access_zip.h +++ b/core/io/file_access_zip.h @@ -98,7 +98,7 @@ public: virtual void seek(size_t p_position); ///< seek to a given position virtual void seek_end(int64_t p_position = 0); ///< seek from the end of file - virtual size_t get_pos() const; ///< get position in the file + virtual size_t get_position() const; ///< get position in the file virtual size_t get_len() const; ///< get size of the file virtual bool eof_reached() const; ///< reading passed EOF @@ -108,6 +108,7 @@ public: virtual Error get_error() const; ///< get last error + virtual void flush(); virtual void store_8(uint8_t p_dest); ///< store a byte virtual bool file_exists(const String &p_name); ///< return true if a file exists diff --git a/core/io/http_client.cpp b/core/io/http_client.cpp index dd56db9bf9..b8c0a2b616 100644 --- a/core/io/http_client.cpp +++ b/core/io/http_client.cpp @@ -297,7 +297,7 @@ Error HTTPClient::poll() { case StreamPeerTCP::STATUS_CONNECTED: { if (ssl) { Ref<StreamPeerSSL> ssl = StreamPeerSSL::create(); - Error err = ssl->connect_to_stream(tcp_connection, true, ssl_verify_host ? conn_host : String()); + Error err = ssl->connect_to_stream(tcp_connection, ssl_verify_host, ssl_verify_host ? conn_host : String()); if (err != OK) { close(); status = STATUS_SSL_HANDSHAKE_ERROR; diff --git a/core/io/logger.cpp b/core/io/logger.cpp new file mode 100644 index 0000000000..ce2ce44b1d --- /dev/null +++ b/core/io/logger.cpp @@ -0,0 +1,266 @@ +/*************************************************************************/ +/* logger.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 "logger.h" +#include "os/dir_access.h" +#include "os/os.h" +#include "print_string.h" + +// va_copy was defined in the C99, but not in C++ standards before C++11. +// When you compile C++ without --std=c++<XX> option, compilers still define +// va_copy, otherwise you have to use the internal version (__va_copy). +#if !defined(va_copy) +#if defined(__GNUC__) +#define va_copy(d, s) __va_copy(d, s) +#else +#define va_copy(d, s) ((d) = (s)) +#endif +#endif + +bool Logger::should_log(bool p_err) { + return (!p_err || _print_error_enabled) && (p_err || _print_line_enabled); +} + +void Logger::log_error(const char *p_function, const char *p_file, int p_line, const char *p_code, const char *p_rationale, ErrorType p_type) { + if (!should_log(true)) { + return; + } + + const char *err_type = "**ERROR**"; + switch (p_type) { + case ERR_ERROR: err_type = "**ERROR**"; break; + case ERR_WARNING: err_type = "**WARNING**"; break; + case ERR_SCRIPT: err_type = "**SCRIPT ERROR**"; break; + case ERR_SHADER: err_type = "**SHADER ERROR**"; break; + default: ERR_PRINT("Unknown error type"); break; + } + + const char *err_details; + if (p_rationale && *p_rationale) + err_details = p_rationale; + else + err_details = p_code; + + logf_error("%s: %s\n", err_type, err_details); + logf_error(" At: %s:%i:%s() - %s\n", p_file, p_line, p_function, p_code); +} + +void Logger::logf(const char *p_format, ...) { + if (!should_log(false)) { + return; + } + + va_list argp; + va_start(argp, p_format); + + logv(p_format, argp, false); + + va_end(argp); +} + +void Logger::logf_error(const char *p_format, ...) { + if (!should_log(true)) { + return; + } + + va_list argp; + va_start(argp, p_format); + + logv(p_format, argp, true); + + va_end(argp); +} + +Logger::~Logger() {} + +void RotatedFileLogger::close_file() { + if (file) { + memdelete(file); + file = NULL; + } +} + +void RotatedFileLogger::clear_old_backups() { + int max_backups = max_files - 1; // -1 for the current file + + String basename = base_path.get_file().get_basename(); + String extension = "." + base_path.get_extension(); + + DirAccess *da = DirAccess::open(base_path.get_base_dir()); + if (!da) { + return; + } + + da->list_dir_begin(); + String f = da->get_next(); + Set<String> backups; + while (f != String()) { + if (!da->current_is_dir() && f.begins_with(basename) && f.ends_with(extension) && f != base_path.get_file()) { + backups.insert(f); + } + f = da->get_next(); + } + da->list_dir_end(); + + if (backups.size() > max_backups) { + // since backups are appended with timestamp and Set iterates them in sorted order, + // first backups are the oldest + int to_delete = backups.size() - max_backups; + for (Set<String>::Element *E = backups.front(); E && to_delete > 0; E = E->next(), --to_delete) { + da->remove(E->get()); + } + } + + memdelete(da); +} + +void RotatedFileLogger::rotate_file() { + close_file(); + + if (FileAccess::exists(base_path)) { + if (max_files > 1) { + char timestamp[21]; + OS::Date date = OS::get_singleton()->get_date(); + OS::Time time = OS::get_singleton()->get_time(); + sprintf(timestamp, "-%04d-%02d-%02d-%02d-%02d-%02d", date.year, date.month, date.day, time.hour, time.min, time.sec); + + String backup_name = base_path.get_basename() + timestamp + "." + base_path.get_extension(); + + DirAccess *da = DirAccess::open(base_path.get_base_dir()); + if (da) { + da->copy(base_path, backup_name); + memdelete(da); + } + clear_old_backups(); + } + } else { + DirAccess *da = DirAccess::create(DirAccess::ACCESS_USERDATA); + if (da) { + da->make_dir_recursive(base_path.get_base_dir()); + memdelete(da); + } + } + + file = FileAccess::open(base_path, FileAccess::WRITE); +} + +RotatedFileLogger::RotatedFileLogger(const String &p_base_path, int p_max_files) { + file = NULL; + base_path = p_base_path.simplify_path(); + max_files = p_max_files > 0 ? p_max_files : 1; + + rotate_file(); +} + +void RotatedFileLogger::logv(const char *p_format, va_list p_list, bool p_err) { + if (!should_log(p_err)) { + return; + } + + if (file) { + const int static_buf_size = 512; + char static_buf[static_buf_size]; + char *buf = static_buf; + va_list list_copy; + va_copy(list_copy, p_list); + int len = vsnprintf(buf, static_buf_size, p_format, p_list); + if (len >= static_buf_size) { + buf = (char *)Memory::alloc_static(len + 1); + vsnprintf(buf, len + 1, p_format, list_copy); + } + va_end(list_copy); + file->store_buffer((uint8_t *)buf, len); + if (len >= static_buf_size) { + Memory::free_static(buf); + } +#ifdef DEBUG_ENABLED + const bool need_flush = true; +#else + bool need_flush = p_err; +#endif + if (need_flush) { + file->flush(); + } + } +} + +RotatedFileLogger::~RotatedFileLogger() { + close_file(); +} + +void StdLogger::logv(const char *p_format, va_list p_list, bool p_err) { + if (!should_log(p_err)) { + return; + } + + if (p_err) { + vfprintf(stderr, p_format, p_list); + } else { + vprintf(p_format, p_list); +#ifdef DEBUG_ENABLED + fflush(stdout); +#endif + } +} + +StdLogger::~StdLogger() {} + +CompositeLogger::CompositeLogger(Vector<Logger *> p_loggers) { + loggers = p_loggers; +} + +void CompositeLogger::logv(const char *p_format, va_list p_list, bool p_err) { + if (!should_log(p_err)) { + return; + } + + for (int i = 0; i < loggers.size(); ++i) { + va_list list_copy; + va_copy(list_copy, p_list); + loggers[i]->logv(p_format, list_copy, p_err); + va_end(list_copy); + } +} + +void CompositeLogger::log_error(const char *p_function, const char *p_file, int p_line, const char *p_code, const char *p_rationale, ErrorType p_type) { + if (!should_log(true)) { + return; + } + + for (int i = 0; i < loggers.size(); ++i) { + loggers[i]->log_error(p_function, p_file, p_line, p_code, p_rationale, p_type); + } +} + +CompositeLogger::~CompositeLogger() { + for (int i = 0; i < loggers.size(); ++i) { + memdelete(loggers[i]); + } +} diff --git a/core/io/logger.h b/core/io/logger.h new file mode 100644 index 0000000000..cf0cc7699f --- /dev/null +++ b/core/io/logger.h @@ -0,0 +1,107 @@ +/*************************************************************************/ +/* logger.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 LOGGER_H +#define LOGGER_H + +#include "os/file_access.h" +#include "ustring.h" +#include "vector.h" +#include <stdarg.h> + +class Logger { +protected: + bool should_log(bool p_err); + +public: + enum ErrorType { + ERR_ERROR, + ERR_WARNING, + ERR_SCRIPT, + ERR_SHADER + }; + + virtual void logv(const char *p_format, va_list p_list, bool p_err) = 0; + virtual void log_error(const char *p_function, const char *p_file, int p_line, const char *p_code, const char *p_rationale, ErrorType p_type = ERR_ERROR); + + void logf(const char *p_format, ...); + void logf_error(const char *p_format, ...); + + virtual ~Logger(); +}; + +/** + * Writes messages to stdout/stderr. + */ +class StdLogger : public Logger { + +public: + virtual void logv(const char *p_format, va_list p_list, bool p_err); + virtual ~StdLogger(); +}; + +/** + * Writes messages to the specified file. If the file already exists, creates a copy (backup) + * of it with timestamp appended to the file name. Maximum number of backups is configurable. + * When maximum is reached, the oldest backups are erased. With the maximum being equal to 1, + * it acts as a simple file logger. + */ +class RotatedFileLogger : public Logger { + String base_path; + int max_files; + + FileAccess *file; + + void rotate_file_without_closing(); + void close_file(); + void clear_old_backups(); + void rotate_file(); + +public: + RotatedFileLogger(const String &p_base_path, int p_max_files = 10); + + virtual void logv(const char *p_format, va_list p_list, bool p_err); + + virtual ~RotatedFileLogger(); +}; + +class CompositeLogger : public Logger { + Vector<Logger *> loggers; + +public: + CompositeLogger(Vector<Logger *> p_loggers); + + virtual void logv(const char *p_format, va_list p_list, bool p_err); + virtual void log_error(const char *p_function, const char *p_file, int p_line, const char *p_code, const char *p_rationale, ErrorType p_type = ERR_ERROR); + + virtual ~CompositeLogger(); +}; + +#endif
\ No newline at end of file diff --git a/core/io/marshalls.cpp b/core/io/marshalls.cpp index 0834d6c321..d388a622de 100644 --- a/core/io/marshalls.cpp +++ b/core/io/marshalls.cpp @@ -1140,8 +1140,9 @@ Error encode_variant(const Variant &p_variant, uint8_t *r_buffer, int &r_len, bo if (buf) { encode_uint32(0, buf); buf += 4; - r_len += 4; } + r_len += 4; + } else { _encode_string(obj->get_class(), buf, r_len); diff --git a/core/io/pck_packer.cpp b/core/io/pck_packer.cpp index f1f5b6f538..23e86580d1 100644 --- a/core/io/pck_packer.cpp +++ b/core/io/pck_packer.cpp @@ -119,7 +119,7 @@ Error PCKPacker::flush(bool p_verbose) { for (int i = 0; i < files.size(); i++) { file->store_pascal_string(files[i].path); - files[i].offset_offset = file->get_pos(); + files[i].offset_offset = file->get_position(); file->store_64(0); // offset file->store_64(files[i].size); // size @@ -130,10 +130,10 @@ Error PCKPacker::flush(bool p_verbose) { file->store_32(0); }; - uint64_t ofs = file->get_pos(); + uint64_t ofs = file->get_position(); ofs = _align(ofs, alignment); - _pad(file, ofs - file->get_pos()); + _pad(file, ofs - file->get_position()); const uint32_t buf_max = 65536; uint8_t *buf = memnew_arr(uint8_t, buf_max); @@ -150,7 +150,7 @@ Error PCKPacker::flush(bool p_verbose) { to_write -= read; }; - uint64_t pos = file->get_pos(); + uint64_t pos = file->get_position(); file->seek(files[i].offset_offset); // go back to store the file's offset file->store_64(ofs); file->seek(pos); diff --git a/core/io/resource_format_binary.cpp b/core/io/resource_format_binary.cpp index 16ec6cd3c5..03c3c5f615 100644 --- a/core/io/resource_format_binary.cpp +++ b/core/io/resource_format_binary.cpp @@ -282,7 +282,6 @@ Error ResourceInteractiveLoaderBinary::parse_variant(Variant &r_v) { property = _get_string(); NodePath np = NodePath(names, subnames, absolute, property); - //print_line("got path: "+String(np)); r_v = np; @@ -640,7 +639,6 @@ Error ResourceInteractiveLoaderBinary::poll() { String path = external_resources[s].path; - print_line("load external res: " + path); if (remaps.has(path)) { path = remaps[path]; } @@ -706,8 +704,6 @@ Error ResourceInteractiveLoaderBinary::poll() { String t = get_unicode_string(); - // print_line("loading resource of type "+t+" path is "+path); - Object *obj = ClassDB::instance(t); if (!obj) { error = ERR_FILE_CORRUPT; @@ -907,20 +903,6 @@ void ResourceInteractiveLoaderBinary::open(FileAccess *p_f) { external_resources.push_back(er); } - //see if the exporter has different set of external resources for more efficient loading - /* - String preload_depts = "deps/"+res_path.md5_text(); - if (Globals::get_singleton()->has(preload_depts)) { - external_resources.clear(); - //ignore external resources and use these - NodePath depts=Globals::get_singleton()->get(preload_depts); - external_resources.resize(depts.get_name_count()); - for(int i=0;i<depts.get_name_count();i++) { - external_resources[i].path=depts.get_name(i); - } - print_line(res_path+" - EXTERNAL RESOURCES: "+itos(external_resources.size())); - }*/ - print_bl("ext resources: " + itos(ext_resources_size)); uint32_t int_resources_size = f->get_32(); @@ -1179,7 +1161,7 @@ Error ResourceFormatLoaderBinary::rename_dependencies(const String &p_path, cons save_ustring(fw, get_ustring(f)); //type - size_t md_ofs = f->get_pos(); + size_t md_ofs = f->get_position(); size_t importmd_ofs = f->get_64(); fw->store_64(0); //metadata offset @@ -1227,7 +1209,7 @@ Error ResourceFormatLoaderBinary::rename_dependencies(const String &p_path, cons save_ustring(fw, path); } - int64_t size_diff = (int64_t)fw->get_pos() - (int64_t)f->get_pos(); + int64_t size_diff = (int64_t)fw->get_position() - (int64_t)f->get_position(); //internal resources uint32_t int_resources_size = f->get_32(); @@ -1880,7 +1862,7 @@ Error ResourceFormatSaverBinaryInstance::save(const String &p_path, const RES &p } else { save_unicode_string(r->get_path()); //actual external } - ofs_pos.push_back(f->get_pos()); + ofs_pos.push_back(f->get_position()); f->store_64(0); //offset in 64 bits } @@ -1891,7 +1873,7 @@ Error ResourceFormatSaverBinaryInstance::save(const String &p_path, const RES &p ResourceData &rd = E->get(); - ofs_table.push_back(f->get_pos()); + ofs_table.push_back(f->get_position()); save_unicode_string(rd.type); f->store_32(rd.properties.size()); diff --git a/core/io/resource_import.cpp b/core/io/resource_import.cpp index be486a86a3..401d704222 100644 --- a/core/io/resource_import.cpp +++ b/core/io/resource_import.cpp @@ -77,7 +77,7 @@ Error ResourceFormatImporter::_get_path_and_type(const String &p_path, PathAndTy if (assign != String()) { if (!path_found && assign.begins_with("path.") && r_path_and_type.path == String()) { String feature = assign.get_slicec('.', 1); - if (OS::get_singleton()->check_feature_support(feature)) { + if (OS::get_singleton()->has_feature(feature)) { r_path_and_type.path = value; path_found = true; //first match must have priority } @@ -87,6 +87,8 @@ Error ResourceFormatImporter::_get_path_and_type(const String &p_path, PathAndTy path_found = true; //first match must have priority } else if (assign == "type") { r_path_and_type.type = value; + } else if (assign == "importer") { + r_path_and_type.importer = value; } else if (assign == "valid") { if (r_valid) { *r_valid = value; @@ -184,6 +186,29 @@ bool ResourceFormatImporter::can_be_imported(const String &p_path) const { return ResourceFormatLoader::recognize_path(p_path); } +int ResourceFormatImporter::get_import_order(const String &p_path) const { + + Ref<ResourceImporter> importer; + + if (FileAccess::exists(p_path + ".import")) { + + PathAndType pat; + Error err = _get_path_and_type(p_path, pat); + + if (err == OK) { + importer = get_importer_by_name(pat.importer); + } + } else { + + importer = get_importer_by_extension(p_path.get_extension().to_lower()); + } + + if (importer.is_valid()) + return importer->get_import_order(); + + return 0; +} + bool ResourceFormatImporter::handles_type(const String &p_type) const { for (Set<Ref<ResourceImporter> >::Element *E = importers.front(); E; E = E->next()) { @@ -291,7 +316,7 @@ void ResourceFormatImporter::get_dependencies(const String &p_path, List<String> return ResourceLoader::get_dependencies(pat.path, p_dependencies, p_add_types); } -Ref<ResourceImporter> ResourceFormatImporter::get_importer_by_name(const String &p_name) { +Ref<ResourceImporter> ResourceFormatImporter::get_importer_by_name(const String &p_name) const { for (Set<Ref<ResourceImporter> >::Element *E = importers.front(); E; E = E->next()) { if (E->get()->get_importer_name() == p_name) { @@ -315,7 +340,7 @@ void ResourceFormatImporter::get_importers_for_extension(const String &p_extensi } } -Ref<ResourceImporter> ResourceFormatImporter::get_importer_by_extension(const String &p_extension) { +Ref<ResourceImporter> ResourceFormatImporter::get_importer_by_extension(const String &p_extension) const { Ref<ResourceImporter> importer; float priority = 0; diff --git a/core/io/resource_import.h b/core/io/resource_import.h index b10255fbab..28489b5d34 100644 --- a/core/io/resource_import.h +++ b/core/io/resource_import.h @@ -38,6 +38,7 @@ class ResourceFormatImporter : public ResourceFormatLoader { struct PathAndType { String path; String type; + String importer; }; Error _get_path_and_type(const String &p_path, PathAndType &r_path_and_type, bool *r_valid = NULL) const; @@ -58,14 +59,15 @@ public: virtual void get_dependencies(const String &p_path, List<String> *p_dependencies, bool p_add_types = false); virtual bool can_be_imported(const String &p_path) const; + virtual int get_import_order(const String &p_path) const; String get_internal_resource_path(const String &p_path) const; void get_internal_resource_path_list(const String &p_path, List<String> *r_paths); void add_importer(const Ref<ResourceImporter> &p_importer) { importers.insert(p_importer); } void remove_importer(const Ref<ResourceImporter> &p_importer) { importers.erase(p_importer); } - Ref<ResourceImporter> get_importer_by_name(const String &p_name); - Ref<ResourceImporter> get_importer_by_extension(const String &p_extension); + Ref<ResourceImporter> get_importer_by_name(const String &p_name) const; + Ref<ResourceImporter> get_importer_by_extension(const String &p_extension) const; void get_importers_for_extension(const String &p_extension, List<Ref<ResourceImporter> > *r_importers); String get_import_base_path(const String &p_for_file) const; @@ -82,6 +84,7 @@ public: virtual String get_save_extension() const = 0; virtual String get_resource_type() const = 0; virtual float get_priority() const { return 1.0; } + virtual int get_import_order() const { return 0; } struct ImportOption { PropertyInfo option; diff --git a/core/io/resource_loader.cpp b/core/io/resource_loader.cpp index 4f266df43e..ed0d491679 100644 --- a/core/io/resource_loader.cpp +++ b/core/io/resource_loader.cpp @@ -308,6 +308,31 @@ void ResourceLoader::add_resource_format_loader(ResourceFormatLoader *p_format_l } } +int ResourceLoader::get_import_order(const String &p_path) { + + String path = _path_remap(p_path); + + String local_path; + if (path.is_rel_path()) + local_path = "res://" + path; + else + local_path = ProjectSettings::get_singleton()->localize_path(path); + + for (int i = 0; i < loader_count; i++) { + + if (!loader[i]->recognize_path(local_path)) + continue; + /* + if (p_type_hint!="" && !loader[i]->handles_type(p_type_hint)) + continue; + */ + + return loader[i]->get_import_order(p_path); + } + + return 0; +} + bool ResourceLoader::is_import_valid(const String &p_path) { String path = _path_remap(p_path); @@ -467,7 +492,7 @@ void ResourceLoader::reload_translation_remaps() { void ResourceLoader::load_translation_remaps() { - if (!ProjectSettings::get_singleton()->has("locale/translation_remaps")) + if (!ProjectSettings::get_singleton()->has_setting("locale/translation_remaps")) return; Dictionary remaps = ProjectSettings::get_singleton()->get("locale/translation_remaps"); diff --git a/core/io/resource_loader.h b/core/io/resource_loader.h index a71a568569..5deffbca1a 100644 --- a/core/io/resource_loader.h +++ b/core/io/resource_loader.h @@ -67,6 +67,7 @@ public: virtual void get_dependencies(const String &p_path, List<String> *p_dependencies, bool p_add_types = false); virtual Error rename_dependencies(const String &p_path, const Map<String, String> &p_map) { return OK; } virtual bool is_import_valid(const String &p_path) const { return true; } + virtual int get_import_order(const String &p_path) const { return 0; } virtual ~ResourceFormatLoader() {} }; @@ -110,6 +111,7 @@ public: static void get_dependencies(const String &p_path, List<String> *p_dependencies, bool p_add_types = false); static Error rename_dependencies(const String &p_path, const Map<String, String> &p_map); static bool is_import_valid(const String &p_path); + static int get_import_order(const String &p_path); static void set_timestamp_on_load(bool p_timestamp) { timestamp_on_load = p_timestamp; } diff --git a/core/io/stream_peer.cpp b/core/io/stream_peer.cpp index f4f81f0807..2583eb369d 100644 --- a/core/io/stream_peer.cpp +++ b/core/io/stream_peer.cpp @@ -405,9 +405,9 @@ void StreamPeer::_bind_methods() { void StreamPeerBuffer::_bind_methods() { - ClassDB::bind_method(D_METHOD("seek", "pos"), &StreamPeerBuffer::seek); + ClassDB::bind_method(D_METHOD("seek", "position"), &StreamPeerBuffer::seek); ClassDB::bind_method(D_METHOD("get_size"), &StreamPeerBuffer::get_size); - ClassDB::bind_method(D_METHOD("get_pos"), &StreamPeerBuffer::get_pos); + ClassDB::bind_method(D_METHOD("get_position"), &StreamPeerBuffer::get_position); ClassDB::bind_method(D_METHOD("resize", "size"), &StreamPeerBuffer::resize); ClassDB::bind_method(D_METHOD("set_data_array", "data"), &StreamPeerBuffer::set_data_array); ClassDB::bind_method(D_METHOD("get_data_array"), &StreamPeerBuffer::get_data_array); @@ -484,7 +484,7 @@ int StreamPeerBuffer::get_size() const { return data.size(); } -int StreamPeerBuffer::get_pos() const { +int StreamPeerBuffer::get_position() const { return pointer; } diff --git a/core/io/stream_peer.h b/core/io/stream_peer.h index 1ee997c123..b120d18501 100644 --- a/core/io/stream_peer.h +++ b/core/io/stream_peer.h @@ -111,7 +111,7 @@ public: void seek(int p_pos); int get_size() const; - int get_pos() const; + int get_position() const; void resize(int p_size); void set_data_array(const PoolVector<uint8_t> &p_data); diff --git a/core/io/xml_parser.cpp b/core/io/xml_parser.cpp index 3a4be7cd13..8ae68183d7 100644 --- a/core/io/xml_parser.cpp +++ b/core/io/xml_parser.cpp @@ -369,7 +369,7 @@ void XMLParser::_bind_methods() { ClassDB::bind_method(D_METHOD("is_empty"), &XMLParser::is_empty); ClassDB::bind_method(D_METHOD("get_current_line"), &XMLParser::get_current_line); ClassDB::bind_method(D_METHOD("skip_section"), &XMLParser::skip_section); - ClassDB::bind_method(D_METHOD("seek", "pos"), &XMLParser::seek); + ClassDB::bind_method(D_METHOD("seek", "position"), &XMLParser::seek); ClassDB::bind_method(D_METHOD("open", "file"), &XMLParser::open); ClassDB::bind_method(D_METHOD("open_buffer", "buffer"), &XMLParser::open_buffer); diff --git a/core/io/zip_io.h b/core/io/zip_io.h index 8cf971ee08..ce3c919b77 100644 --- a/core/io/zip_io.h +++ b/core/io/zip_io.h @@ -72,7 +72,7 @@ static uLong zipio_write(voidpf opaque, voidpf stream, const void *buf, uLong si static long zipio_tell(voidpf opaque, voidpf stream) { FileAccess *f = *(FileAccess **)opaque; - return f->get_pos(); + return f->get_position(); }; static long zipio_seek(voidpf opaque, voidpf stream, uLong offset, int origin) { @@ -83,7 +83,7 @@ static long zipio_seek(voidpf opaque, voidpf stream, uLong offset, int origin) { switch (origin) { case ZLIB_FILEFUNC_SEEK_CUR: - pos = f->get_pos() + offset; + pos = f->get_position() + offset; break; case ZLIB_FILEFUNC_SEEK_END: pos = f->get_len() + offset; diff --git a/core/make_binders.py b/core/make_binders.py index 6468c029f0..6f42c6e8eb 100644 --- a/core/make_binders.py +++ b/core/make_binders.py @@ -244,7 +244,7 @@ def make_version(template, nargs, argmax, const, ret): def run(target, source, env): - versions = 10 + versions = 11 versions_ext = 6 text = "" text_ext = "" diff --git a/core/map.h b/core/map.h index a37d898a9c..f01062ebed 100644 --- a/core/map.h +++ b/core/map.h @@ -31,6 +31,7 @@ #define MAP_H #include "set.h" + /** @author Juan Linietsky <reduzio@gmail.com> */ @@ -52,7 +53,6 @@ public: private: friend class Map<K, V, C, A>; - //Color color; int color; Element *right; Element *left; @@ -61,7 +61,6 @@ public: Element *_prev; K _key; V _value; - //_Data *data; public: @@ -147,7 +146,6 @@ private: #ifdef GLOBALNIL_DISABLED memdelete_allocator<Element, A>(_nil); #endif - //memdelete_allocator<Element,A>(_root); } }; @@ -158,6 +156,7 @@ private: ERR_FAIL_COND(p_node == _data._nil && p_color == RED); p_node->color = p_color; } + inline void _rotate_left(Element *p_node) { Element *r = p_node->right; @@ -206,8 +205,9 @@ private: while (node == node->parent->right) { node = node->parent; } + if (node->parent == _data._root) - return NULL; + return NULL; // No successor, as p_node = last node return node->parent; } } @@ -225,10 +225,11 @@ private: } else { while (node == node->parent->left) { - if (node->parent == _data._root) - return NULL; node = node->parent; } + + if (node == _data._root) + return NULL; // No predecessor, as p_node = first node return node->parent; } } @@ -239,16 +240,15 @@ private: C less; while (node != _data._nil) { - if (less(p_key, node->_key)) node = node->left; else if (less(node->_key, p_key)) node = node->right; else - break; // found + return node; // found } - return (node != _data._nil) ? node : NULL; + return NULL; } Element *_find_closest(const K &p_key) const { @@ -265,24 +265,68 @@ private: else if (less(node->_key, p_key)) node = node->right; else - break; // found + return node; // found } - if (node == _data._nil) { - if (prev == NULL) - return NULL; - if (less(p_key, prev->_key)) { + if (prev == NULL) + return NULL; // tree empty - prev = prev->_prev; - } + if (less(p_key, prev->_key)) + prev = prev->_prev; - return prev; + return prev; + } - } else - return node; + void _insert_rb_fix(Element *p_new_node) { + + Element *node = p_new_node; + Element *nparent = node->parent; + Element *ngrand_parent; + + while (nparent->color == RED) { + ngrand_parent = nparent->parent; + + if (nparent == ngrand_parent->left) { + if (ngrand_parent->right->color == RED) { + _set_color(nparent, BLACK); + _set_color(ngrand_parent->right, BLACK); + _set_color(ngrand_parent, RED); + node = ngrand_parent; + nparent = node->parent; + } else { + if (node == nparent->right) { + _rotate_left(nparent); + node = nparent; + nparent = node->parent; + } + _set_color(nparent, BLACK); + _set_color(ngrand_parent, RED); + _rotate_right(ngrand_parent); + } + } else { + if (ngrand_parent->left->color == RED) { + _set_color(nparent, BLACK); + _set_color(ngrand_parent->left, BLACK); + _set_color(ngrand_parent, RED); + node = ngrand_parent; + nparent = node->parent; + } else { + if (node == nparent->left) { + _rotate_right(nparent); + node = nparent; + nparent = node->parent; + } + _set_color(nparent, BLACK); + _set_color(ngrand_parent, RED); + _rotate_left(ngrand_parent); + } + } + } + + _set_color(_data._root->left, BLACK); } - Element *_insert(const K &p_key, bool &r_exists) { + Element *_insert(const K &p_key, const V &p_value) { Element *new_parent = _data._root; Element *node = _data._root->left; @@ -297,27 +341,25 @@ private: else if (less(node->_key, p_key)) node = node->right; else { - r_exists = true; - return node; + node->_value = p_value; + return node; // Return existing node with new value } } Element *new_node = memnew_allocator(Element, A); - new_node->parent = new_parent; new_node->right = _data._nil; new_node->left = _data._nil; new_node->_key = p_key; + new_node->_value = p_value; //new_node->data=_data; - if (new_parent == _data._root || less(p_key, new_parent->_key)) { + if (new_parent == _data._root || less(p_key, new_parent->_key)) { new_parent->left = new_node; } else { new_parent->right = new_node; } - r_exists = false; - new_node->_next = _successor(new_node); new_node->_prev = _predecessor(new_node); if (new_node->_next) @@ -325,168 +367,113 @@ private: if (new_node->_prev) new_node->_prev->_next = new_node; - return new_node; - } - - Element *_insert_rb(const K &p_key, const V &p_value) { - - bool exists = false; - Element *new_node = _insert(p_key, exists); - - if (new_node) { - new_node->_value = p_value; - } - if (exists) - return new_node; - - Element *node = new_node; _data.size_cache++; - - while (node->parent->color == RED) { - - if (node->parent == node->parent->parent->left) { - - Element *aux = node->parent->parent->right; - - if (aux->color == RED) { - _set_color(node->parent, BLACK); - _set_color(aux, BLACK); - _set_color(node->parent->parent, RED); - node = node->parent->parent; - } else { - if (node == node->parent->right) { - node = node->parent; - _rotate_left(node); - } - _set_color(node->parent, BLACK); - _set_color(node->parent->parent, RED); - _rotate_right(node->parent->parent); - } - } else { - Element *aux = node->parent->parent->left; - - if (aux->color == RED) { - _set_color(node->parent, BLACK); - _set_color(aux, BLACK); - _set_color(node->parent->parent, RED); - node = node->parent->parent; - } else { - if (node == node->parent->left) { - node = node->parent; - _rotate_right(node); - } - _set_color(node->parent, BLACK); - _set_color(node->parent->parent, RED); - _rotate_left(node->parent->parent); - } - } - } - _set_color(_data._root->left, BLACK); + _insert_rb_fix(new_node); return new_node; } - void _erase_fix(Element *p_node) { + void _erase_fix_rb(Element *p_node) { Element *root = _data._root->left; - Element *node = p_node; - - while ((node->color == BLACK) && (root != node)) { - if (node == node->parent->left) { - Element *aux = node->parent->right; - if (aux->color == RED) { - _set_color(aux, BLACK); - _set_color(node->parent, RED); - _rotate_left(node->parent); - aux = node->parent->right; - } - if ((aux->right->color == BLACK) && (aux->left->color == BLACK)) { - _set_color(aux, RED); - node = node->parent; + Element *node = _data._nil; + Element *sibling = p_node; + Element *parent = sibling->parent; + + while (node != root) { // If red node found, will exit at a break + if (sibling->color == RED) { + _set_color(sibling, BLACK); + _set_color(parent, RED); + if (sibling == parent->right) { + sibling = sibling->left; + _rotate_left(parent); } else { - if (aux->right->color == BLACK) { - _set_color(aux->left, BLACK); - _set_color(aux, RED); - _rotate_right(aux); - aux = node->parent->right; - } - _set_color(aux, node->parent->color); - _set_color(node->parent, BLACK); - _set_color(aux->right, BLACK); - _rotate_left(node->parent); - node = root; /* this is to exit while loop */ + sibling = sibling->right; + _rotate_right(parent); } - } else { /* the code below is has left and right switched from above */ - Element *aux = node->parent->left; - if (aux->color == RED) { - _set_color(aux, BLACK); - _set_color(node->parent, RED); - _rotate_right(node->parent); - aux = node->parent->left; + } + if ((sibling->left->color == BLACK) && (sibling->right->color == BLACK)) { + _set_color(sibling, RED); + if (parent->color == RED) { + _set_color(parent, BLACK); + break; + } else { // loop: haven't found any red nodes yet + node = parent; + parent = node->parent; + sibling = (node == parent->left) ? parent->right : parent->left; } - if ((aux->right->color == BLACK) && (aux->left->color == BLACK)) { - _set_color(aux, RED); - node = node->parent; + } else { + if (sibling == parent->right) { + if (sibling->right->color == BLACK) { + _set_color(sibling->left, BLACK); + _set_color(sibling, RED); + _rotate_right(sibling); + sibling = sibling->parent; + } + _set_color(sibling, parent->color); + _set_color(parent, BLACK); + _set_color(sibling->right, BLACK); + _rotate_left(parent); + break; } else { - if (aux->left->color == BLACK) { - _set_color(aux->right, BLACK); - _set_color(aux, RED); - _rotate_left(aux); - aux = node->parent->left; + if (sibling->left->color == BLACK) { + _set_color(sibling->right, BLACK); + _set_color(sibling, RED); + _rotate_left(sibling); + sibling = sibling->parent; } - _set_color(aux, node->parent->color); - _set_color(node->parent, BLACK); - _set_color(aux->left, BLACK); - _rotate_right(node->parent); - node = root; + + _set_color(sibling, parent->color); + _set_color(parent, BLACK); + _set_color(sibling->left, BLACK); + _rotate_right(parent); + break; } } } - _set_color(node, BLACK); - ERR_FAIL_COND(_data._nil->color != BLACK); } void _erase(Element *p_node) { - Element *rp = ((p_node->left == _data._nil) || (p_node->right == _data._nil)) ? p_node : _successor(p_node); - if (!rp) - rp = _data._nil; + Element *rp = ((p_node->left == _data._nil) || (p_node->right == _data._nil)) ? p_node : p_node->_next; Element *node = (rp->left == _data._nil) ? rp->right : rp->left; node->parent = rp->parent; - if (_data._root == node->parent) { - _data._root->left = node; + Element *sibling; + if (rp == rp->parent->left) { + rp->parent->left = node; + sibling = rp->parent->right; } else { - if (rp == rp->parent->left) { - rp->parent->left = node; - } else { - rp->parent->right = node; - } + rp->parent->right = node; + sibling = rp->parent->left; + } + + if (node->color == RED) { + node->parent = rp->parent; + _set_color(node, BLACK); + } else if (rp->color == BLACK && rp->parent != _data._root) { + _erase_fix_rb(sibling); } if (rp != p_node) { ERR_FAIL_COND(rp == _data._nil); - if (rp->color == BLACK) - _erase_fix(node); - rp->left = p_node->left; rp->right = p_node->right; rp->parent = p_node->parent; rp->color = p_node->color; - p_node->left->parent = rp; - p_node->right->parent = rp; + if (p_node->left != _data._nil) + p_node->left->parent = rp; + if (p_node->right != _data._nil) + p_node->right->parent = rp; if (p_node == p_node->parent->left) { p_node->parent->left = rp; } else { p_node->parent->right = rp; } - } else { - if (p_node->color == BLACK) - _erase_fix(node); } if (p_node->_next) @@ -501,11 +488,12 @@ private: void _calculate_depth(Element *p_element, int &max_d, int d) const { - if (p_element == _data._nil) { + if (p_element == _data._nil) return; - } + _calculate_depth(p_element->left, max_d, d + 1); _calculate_depth(p_element->right, max_d, d + 1); + if (d > max_d) max_d = d; } @@ -544,6 +532,7 @@ public: if (!_data._root) return NULL; + Element *res = _find(p_key); return res; } @@ -552,6 +541,7 @@ public: if (!_data._root) return NULL; + const Element *res = _find_closest(p_key); return res; } @@ -560,21 +550,28 @@ public: if (!_data._root) return NULL; + Element *res = _find_closest(p_key); return res; } + bool has(const K &p_key) const { + + return find(p_key) != NULL; + } + Element *insert(const K &p_key, const V &p_value) { if (!_data._root) _data._create_root(); - return _insert_rb(p_key, p_value); + return _insert(p_key, p_value); } void erase(Element *p_element) { - if (!_data._root) + if (!_data._root || !p_element) return; + _erase(p_element); if (_data.size_cache == 0 && _data._root) _data._free_root(); @@ -584,20 +581,17 @@ public: if (!_data._root) return false; + Element *e = find(p_key); if (!e) return false; + _erase(e); + if (_data.size_cache == 0 && _data._root) + _data._free_root(); return true; } - bool has(const K &p_key) const { - - if (!_data._root) - return false; - return find(p_key) != NULL; - } - const V &operator[](const K &p_key) const { CRASH_COND(!_data._root); @@ -605,6 +599,7 @@ public: CRASH_COND(!e); return e->_value; } + V &operator[](const K &p_key) { if (!_data._root) @@ -614,7 +609,6 @@ public: if (!e) e = insert(p_key, V()); - CRASH_COND(!e); return e->_value; } @@ -637,6 +631,7 @@ public: if (!_data._root) return NULL; + Element *e = _data._root->left; if (e == _data._nil) return NULL; @@ -649,10 +644,12 @@ public: inline bool empty() const { return _data.size_cache == 0; } inline int size() const { return _data.size_cache; } + int calculate_depth() const { // used for debug mostly if (!_data._root) return 0; + int max_d = 0; _calculate_depth(_data._root->left, max_d, 0); return max_d; @@ -662,10 +659,10 @@ public: if (!_data._root) return; + _cleanup_tree(_data._root->left); _data._root->left = _data._nil; _data.size_cache = 0; - _data._nil->parent = _data._nil; _data._free_root(); } diff --git a/core/math/a_star.cpp b/core/math/a_star.cpp index d1afcec18f..4f80fb2491 100644 --- a/core/math/a_star.cpp +++ b/core/math/a_star.cpp @@ -58,7 +58,7 @@ void AStar::add_point(int p_id, const Vector3 &p_pos, real_t p_weight_scale) { } } -Vector3 AStar::get_point_pos(int p_id) const { +Vector3 AStar::get_point_position(int p_id) const { ERR_FAIL_COND_V(!points.has(p_id), Vector3()); @@ -171,7 +171,7 @@ int AStar::get_closest_point(const Vector3 &p_point) const { return closest_id; } -Vector3 AStar::get_closest_pos_in_segment(const Vector3 &p_point) const { +Vector3 AStar::get_closest_position_in_segment(const Vector3 &p_point) const { real_t closest_dist = 1e20; bool found = false; @@ -412,8 +412,8 @@ PoolVector<int> AStar::get_id_path(int p_from_id, int p_to_id) { void AStar::_bind_methods() { ClassDB::bind_method(D_METHOD("get_available_point_id"), &AStar::get_available_point_id); - ClassDB::bind_method(D_METHOD("add_point", "id", "pos", "weight_scale"), &AStar::add_point, DEFVAL(1.0)); - ClassDB::bind_method(D_METHOD("get_point_pos", "id"), &AStar::get_point_pos); + ClassDB::bind_method(D_METHOD("add_point", "id", "position", "weight_scale"), &AStar::add_point, DEFVAL(1.0)); + ClassDB::bind_method(D_METHOD("get_point_position", "id"), &AStar::get_point_position); ClassDB::bind_method(D_METHOD("get_point_weight_scale", "id"), &AStar::get_point_weight_scale); ClassDB::bind_method(D_METHOD("remove_point", "id"), &AStar::remove_point); ClassDB::bind_method(D_METHOD("has_point", "id"), &AStar::has_point); @@ -425,8 +425,8 @@ void AStar::_bind_methods() { ClassDB::bind_method(D_METHOD("clear"), &AStar::clear); - ClassDB::bind_method(D_METHOD("get_closest_point", "to_pos"), &AStar::get_closest_point); - ClassDB::bind_method(D_METHOD("get_closest_pos_in_segment", "to_pos"), &AStar::get_closest_pos_in_segment); + ClassDB::bind_method(D_METHOD("get_closest_point", "to_position"), &AStar::get_closest_point); + ClassDB::bind_method(D_METHOD("get_closest_position_in_segment", "to_position"), &AStar::get_closest_position_in_segment); ClassDB::bind_method(D_METHOD("get_point_path", "from_id", "to_id"), &AStar::get_point_path); ClassDB::bind_method(D_METHOD("get_id_path", "from_id", "to_id"), &AStar::get_id_path); diff --git a/core/math/a_star.h b/core/math/a_star.h index 38d13d510b..2c1e2e2cf7 100644 --- a/core/math/a_star.h +++ b/core/math/a_star.h @@ -101,7 +101,7 @@ public: int get_available_point_id() const; void add_point(int p_id, const Vector3 &p_pos, real_t p_weight_scale = 1); - Vector3 get_point_pos(int p_id) const; + Vector3 get_point_position(int p_id) const; real_t get_point_weight_scale(int p_id) const; void remove_point(int p_id); bool has_point(int p_id) const; @@ -114,7 +114,7 @@ public: void clear(); int get_closest_point(const Vector3 &p_point) const; - Vector3 get_closest_pos_in_segment(const Vector3 &p_point) const; + Vector3 get_closest_position_in_segment(const Vector3 &p_point) const; PoolVector<Vector3> get_point_path(int p_from_id, int p_to_id); PoolVector<int> get_id_path(int p_from_id, int p_to_id); diff --git a/core/math/math_funcs.h b/core/math/math_funcs.h index 0bba662dac..65b2ffb0df 100644 --- a/core/math/math_funcs.h +++ b/core/math/math_funcs.h @@ -104,8 +104,44 @@ public: static _ALWAYS_INLINE_ double exp(double p_x) { return ::exp(p_x); } static _ALWAYS_INLINE_ float exp(float p_x) { return ::expf(p_x); } - static _ALWAYS_INLINE_ bool is_nan(double p_val) { return (p_val != p_val); } - static _ALWAYS_INLINE_ bool is_nan(float p_val) { return (p_val != p_val); } + static _ALWAYS_INLINE_ bool is_nan(double p_val) { +#ifdef _MSC_VER + return _isnan(p_val); +#elif defined(__GNUC__) && __GNUC__ < 6 + union { + uint64_t u; + double f; + } ieee754; + ieee754.f = p_val; + // (unsigned)(0x7ff0000000000001 >> 32) : 0x7ff00000 + return ((((unsigned)(ieee754.u >> 32) & 0x7fffffff) + ((unsigned)ieee754.u != 0)) > 0x7ff00000); +#else + return isnan(p_val); +#endif + } + + static _ALWAYS_INLINE_ bool is_nan(float p_val) { +#ifdef _MSC_VER + return _isnan(p_val); +#elif defined(__GNUC__) && __GNUC__ < 6 + union { + uint32_t u; + float f; + } ieee754; + ieee754.f = p_val; + // ----------------------------------- + // (single-precision floating-point) + // NaN : s111 1111 1xxx xxxx xxxx xxxx xxxx xxxx + // : (> 0x7f800000) + // where, + // s : sign + // x : non-zero number + // ----------------------------------- + return ((ieee754.u & 0x7fffffff) > 0x7f800000); +#else + return isnan(p_val); +#endif + } static _ALWAYS_INLINE_ bool is_inf(double p_val) { #ifdef _MSC_VER diff --git a/core/math/matrix3.cpp b/core/math/matrix3.cpp index 4051de7afb..85421c074b 100644 --- a/core/math/matrix3.cpp +++ b/core/math/matrix3.cpp @@ -538,7 +538,7 @@ Basis::operator String() const { return mtx; } -Basis::operator Quat() const { +Quat Basis::get_quat() const { //commenting this check because precision issues cause it to fail when it shouldn't //#ifdef MATH_CHECKS //ERR_FAIL_COND_V(is_rotation() == false, Quat()); @@ -710,12 +710,7 @@ void Basis::get_axis_angle(Vector3 &r_axis, real_t &r_angle) const { r_angle = angle; } -Basis::Basis(const Vector3 &p_euler) { - - set_euler(p_euler); -} - -Basis::Basis(const Quat &p_quat) { +void Basis::set_quat(const Quat &p_quat) { real_t d = p_quat.length_squared(); real_t s = 2.0 / d; @@ -750,7 +745,3 @@ void Basis::set_axis_angle(const Vector3 &p_axis, real_t p_phi) { elements[2][1] = p_axis.y * p_axis.z * (1.0 - cosine) + p_axis.x * sine; elements[2][2] = axis_sq.z + cosine * (1.0 - axis_sq.z); } - -Basis::Basis(const Vector3 &p_axis, real_t p_phi) { - set_axis_angle(p_axis, p_phi); -} diff --git a/core/math/matrix3.h b/core/math/matrix3.h index 23429888e0..9a33b8203d 100644 --- a/core/math/matrix3.h +++ b/core/math/matrix3.h @@ -88,8 +88,11 @@ public: Vector3 get_euler_yxz() const; void set_euler_yxz(const Vector3 &p_euler); - Vector3 get_euler() const { return get_euler_yxz(); }; - void set_euler(const Vector3 &p_euler) { set_euler_yxz(p_euler); }; + Quat get_quat() const; + void set_quat(const Quat &p_quat); + + Vector3 get_euler() const { return get_euler_yxz(); } + void set_euler(const Vector3 &p_euler) { set_euler_yxz(p_euler); } void get_axis_angle(Vector3 &r_axis, real_t &r_angle) const; void set_axis_angle(const Vector3 &p_axis, real_t p_phi); @@ -205,11 +208,11 @@ public: bool is_symmetric() const; Basis diagonalize(); - operator Quat() const; + operator Quat() const { return get_quat(); } - Basis(const Quat &p_quat); // euler - Basis(const Vector3 &p_euler); // euler - Basis(const Vector3 &p_axis, real_t p_phi); + Basis(const Quat &p_quat) { set_quat(p_quat); }; + Basis(const Vector3 &p_euler) { set_euler(p_euler); } + Basis(const Vector3 &p_axis, real_t p_phi) { set_axis_angle(p_axis, p_phi); } _FORCE_INLINE_ Basis(const Vector3 &row0, const Vector3 &row1, const Vector3 &row2) { elements[0] = row0; diff --git a/core/object.cpp b/core/object.cpp index b1770f1d7a..823cbe14d4 100644 --- a/core/object.cpp +++ b/core/object.cpp @@ -1052,7 +1052,7 @@ Variant Object::_emit_signal(const Variant **p_args, int p_argcount, Variant::Ca Error Object::emit_signal(const StringName &p_name, const Variant **p_args, int p_argcount) { if (_block_signals) - return ERR_CANT_AQUIRE_RESOURCE; //no emit, signals blocked + return ERR_CANT_ACQUIRE_RESOURCE; //no emit, signals blocked Signal *s = signal_map.getptr(p_name); if (!s) { diff --git a/core/object.h b/core/object.h index 3070439138..7af2c78fc3 100644 --- a/core/object.h +++ b/core/object.h @@ -64,9 +64,9 @@ enum PropertyHint { PROPERTY_HINT_LAYERS_3D_RENDER, PROPERTY_HINT_LAYERS_3D_PHYSICS, PROPERTY_HINT_FILE, ///< a file path must be passed, hint_text (optionally) is a filter "*.png,*.wav,*.doc," - PROPERTY_HINT_DIR, ///< a directort path must be passed + PROPERTY_HINT_DIR, ///< a directory path must be passed PROPERTY_HINT_GLOBAL_FILE, ///< a file path must be passed, hint_text (optionally) is a filter "*.png,*.wav,*.doc," - PROPERTY_HINT_GLOBAL_DIR, ///< a directort path must be passed + PROPERTY_HINT_GLOBAL_DIR, ///< a directory path must be passed PROPERTY_HINT_RESOURCE_TYPE, ///< a resource object type PROPERTY_HINT_MULTILINE_TEXT, ///< used for string properties that can contain multiple lines PROPERTY_HINT_COLOR_NO_ALPHA, ///< used for ignoring alpha component when editing a color @@ -221,7 +221,7 @@ struct MethodInfo { //return NULL; /* - the following is an uncomprehensible blob of hacks and workarounds to compensate for many of the fallencies in C++. As a plus, this macro pretty much alone defines the object model. + the following is an incomprehensible blob of hacks and workarounds to compensate for many of the fallencies in C++. As a plus, this macro pretty much alone defines the object model. */ #define REVERSE_GET_PROPERTY_LIST \ diff --git a/core/os/dir_access.cpp b/core/os/dir_access.cpp index 1437e7cdfc..0875f78478 100644 --- a/core/os/dir_access.cpp +++ b/core/os/dir_access.cpp @@ -312,7 +312,7 @@ Error DirAccess::copy(String p_from, String p_to, int chmod_flags) { } fsrc->seek_end(0); - int size = fsrc->get_pos(); + int size = fsrc->get_position(); fsrc->seek(0); err = OK; while (size--) { diff --git a/core/os/file_access.cpp b/core/os/file_access.cpp index b969b58bfb..fcb3b58fed 100644 --- a/core/os/file_access.cpp +++ b/core/os/file_access.cpp @@ -55,7 +55,7 @@ FileAccess *FileAccess::create(AccessType p_access) { bool FileAccess::exists(const String &p_name) { - if (PackedData::get_singleton()->has_path(p_name)) + if (PackedData::get_singleton() && PackedData::get_singleton()->has_path(p_name)) return true; FileAccess *f = open(p_name, READ); diff --git a/core/os/file_access.h b/core/os/file_access.h index 63692cb290..455dd1ea99 100644 --- a/core/os/file_access.h +++ b/core/os/file_access.h @@ -90,7 +90,7 @@ public: virtual void seek(size_t p_position) = 0; ///< seek to a given position virtual void seek_end(int64_t p_position = 0) = 0; ///< seek from the end of file - virtual size_t get_pos() const = 0; ///< get position in the file + virtual size_t get_position() const = 0; ///< get position in the file virtual size_t get_len() const = 0; ///< get size of the file virtual bool eof_reached() const = 0; ///< reading passed EOF @@ -119,6 +119,7 @@ public: virtual Error get_error() const = 0; ///< get last error + virtual void flush() = 0; virtual void store_8(uint8_t p_dest) = 0; ///< store a byte virtual void store_16(uint16_t p_dest); ///< store 16 bits uint virtual void store_32(uint32_t p_dest); ///< store 32 bits uint diff --git a/core/os/input.cpp b/core/os/input.cpp index 65752662d7..848b003d5e 100644 --- a/core/os/input.cpp +++ b/core/os/input.cpp @@ -58,6 +58,7 @@ void Input::_bind_methods() { ClassDB::bind_method(D_METHOD("is_action_just_released", "action"), &Input::is_action_just_released); ClassDB::bind_method(D_METHOD("add_joy_mapping", "mapping", "update_existing"), &Input::add_joy_mapping, DEFVAL(false)); ClassDB::bind_method(D_METHOD("remove_joy_mapping", "guid"), &Input::remove_joy_mapping); + ClassDB::bind_method(D_METHOD("joy_connection_changed", "device", "connected", "name", "guid"), &Input::joy_connection_changed); ClassDB::bind_method(D_METHOD("is_joy_known", "device"), &Input::is_joy_known); ClassDB::bind_method(D_METHOD("get_joy_axis", "device", "axis"), &Input::get_joy_axis); ClassDB::bind_method(D_METHOD("get_joy_name", "device"), &Input::get_joy_name); @@ -80,7 +81,7 @@ void Input::_bind_methods() { ClassDB::bind_method(D_METHOD("get_mouse_button_mask"), &Input::get_mouse_button_mask); ClassDB::bind_method(D_METHOD("set_mouse_mode", "mode"), &Input::set_mouse_mode); ClassDB::bind_method(D_METHOD("get_mouse_mode"), &Input::get_mouse_mode); - ClassDB::bind_method(D_METHOD("warp_mouse_pos", "to"), &Input::warp_mouse_pos); + ClassDB::bind_method(D_METHOD("warp_mouse_position", "to"), &Input::warp_mouse_position); ClassDB::bind_method(D_METHOD("action_press", "action"), &Input::action_press); ClassDB::bind_method(D_METHOD("action_release", "action"), &Input::action_release); ClassDB::bind_method(D_METHOD("set_custom_mouse_cursor", "image", "hotspot"), &Input::set_custom_mouse_cursor, DEFVAL(Vector2())); diff --git a/core/os/input.h b/core/os/input.h index f98b97e647..97d3bef4f9 100644 --- a/core/os/input.h +++ b/core/os/input.h @@ -81,7 +81,7 @@ public: virtual Point2 get_last_mouse_speed() const = 0; virtual int get_mouse_button_mask() const = 0; - virtual void warp_mouse_pos(const Vector2 &p_to) = 0; + virtual void warp_mouse_position(const Vector2 &p_to) = 0; virtual Point2i warp_mouse_motion(const Ref<InputEventMouseMotion> &p_motion, const Rect2 &p_rect) = 0; virtual Vector3 get_gravity() const = 0; diff --git a/core/os/input_event.cpp b/core/os/input_event.cpp index 88037859aa..6b43f2c63b 100644 --- a/core/os/input_event.cpp +++ b/core/os/input_event.cpp @@ -637,7 +637,7 @@ bool InputEventJoypadMotion::action_match(const Ref<InputEvent> &p_event) const if (jm.is_null()) return false; - return (axis == jm->axis && (axis_value < 0) == (jm->axis_value < 0)); + return (axis == jm->axis && ((axis_value < 0) == (jm->axis_value < 0) || jm->axis_value == 0)); } String InputEventJoypadMotion::as_text() const { @@ -781,7 +781,7 @@ void InputEventScreenTouch::_bind_methods() { ClassDB::bind_method(D_METHOD("set_index", "index"), &InputEventScreenTouch::set_index); ClassDB::bind_method(D_METHOD("get_index"), &InputEventScreenTouch::get_index); - ClassDB::bind_method(D_METHOD("set_position", "pos"), &InputEventScreenTouch::set_position); + ClassDB::bind_method(D_METHOD("set_position", "position"), &InputEventScreenTouch::set_position); ClassDB::bind_method(D_METHOD("get_position"), &InputEventScreenTouch::get_position); ClassDB::bind_method(D_METHOD("set_pressed", "pressed"), &InputEventScreenTouch::set_pressed); diff --git a/core/os/main_loop.cpp b/core/os/main_loop.cpp index b146d370f1..8b4449586b 100644 --- a/core/os/main_loop.cpp +++ b/core/os/main_loop.cpp @@ -52,6 +52,7 @@ void MainLoop::_bind_methods() { BIND_CONSTANT(NOTIFICATION_WM_FOCUS_IN); BIND_CONSTANT(NOTIFICATION_WM_FOCUS_OUT); BIND_CONSTANT(NOTIFICATION_WM_QUIT_REQUEST); + BIND_CONSTANT(NOTIFICATION_WM_GO_BACK_REQUEST); BIND_CONSTANT(NOTIFICATION_WM_UNFOCUS_REQUEST); BIND_CONSTANT(NOTIFICATION_OS_MEMORY_WARNING); BIND_CONSTANT(NOTIFICATION_TRANSLATION_CHANGED); diff --git a/core/os/os.cpp b/core/os/os.cpp index 437ce01a5e..eb5d5be33d 100644 --- a/core/os/os.cpp +++ b/core/os/os.cpp @@ -62,20 +62,20 @@ void OS::debug_break(){ // something }; -void OS::print_error(const char *p_function, const char *p_file, int p_line, const char *p_code, const char *p_rationale, ErrorType p_type) { - - const char *err_type = "**ERROR**"; - switch (p_type) { - case ERR_ERROR: err_type = "**ERROR**"; break; - case ERR_WARNING: err_type = "**WARNING**"; break; - case ERR_SCRIPT: err_type = "**SCRIPT ERROR**"; break; - case ERR_SHADER: err_type = "**SHADER ERROR**"; break; - default: ERR_PRINT("Unknown error type"); break; +void OS::_set_logger(Logger *p_logger) { + if (_logger) { + memdelete(_logger); } + _logger = p_logger; +} + +void OS::initialize_logger() { + _set_logger(memnew(StdLogger)); +} + +void OS::print_error(const char *p_function, const char *p_file, int p_line, const char *p_code, const char *p_rationale, Logger::ErrorType p_type) { - if (p_rationale && *p_rationale) - print("%s: %s\n ", err_type, p_rationale); - print("%s: At: %s:%i:%s() - %s\n", err_type, p_file, p_line, p_function, p_code); + _logger->log_error(p_function, p_file, p_line, p_code, p_rationale, p_type); } void OS::print(const char *p_format, ...) { @@ -83,17 +83,16 @@ void OS::print(const char *p_format, ...) { va_list argp; va_start(argp, p_format); - vprint(p_format, argp); + _logger->logv(p_format, argp, false); va_end(argp); }; void OS::printerr(const char *p_format, ...) { - va_list argp; va_start(argp, p_format); - vprint(p_format, argp, true); + _logger->logv(p_format, argp, true); va_end(argp); }; @@ -194,6 +193,10 @@ void OS::show_virtual_keyboard(const String &p_existing_text, const Rect2 &p_scr void OS::hide_virtual_keyboard() { } +int OS::get_virtual_keyboard_height() const { + return 0; +} + void OS::print_all_resources(String p_to_file) { ERR_FAIL_COND(p_to_file != "" && _OSPRF); @@ -495,7 +498,7 @@ int OS::get_power_percent_left() { return -1; } -bool OS::check_feature_support(const String &p_feature) { +bool OS::has_feature(const String &p_feature) { if (p_feature == get_name()) return true; @@ -507,6 +510,13 @@ bool OS::check_feature_support(const String &p_feature) { return true; #endif + if (sizeof(void *) == 8 && p_feature == "64") { + return true; + } + if (sizeof(void *) == 4 && p_feature == "32") { + return true; + } + if (_check_internal_feature_support(p_feature)) return true; @@ -531,11 +541,14 @@ OS::OS() { _render_thread_mode = RENDER_THREAD_SAFE; - _allow_hidpi = true; + _allow_hidpi = false; _stack_bottom = (void *)(&stack_bottom); + + _logger = NULL; + _set_logger(memnew(StdLogger)); } OS::~OS() { - + memdelete(_logger); singleton = NULL; } diff --git a/core/os/os.h b/core/os/os.h index 2fc87e44a0..48effe99da 100644 --- a/core/os/os.h +++ b/core/os/os.h @@ -32,6 +32,7 @@ #include "engine.h" #include "image.h" +#include "io/logger.h" #include "list.h" #include "os/main_loop.h" #include "ustring.h" @@ -61,6 +62,11 @@ class OS { void *_stack_bottom; + Logger *_logger; + +protected: + void _set_logger(Logger *p_logger); + public: typedef void (*ImeCallback)(void *p_inp, String p_text, Point2 p_selection); @@ -108,6 +114,7 @@ protected: virtual int get_audio_driver_count() const = 0; virtual const char *get_audio_driver_name(int p_driver) const = 0; + virtual void initialize_logger(); virtual void initialize_core() = 0; virtual void initialize(const VideoMode &p_desired, int p_video_driver, int p_audio_driver) = 0; @@ -127,18 +134,10 @@ public: static OS *get_singleton(); - enum ErrorType { - ERR_ERROR, - ERR_WARNING, - ERR_SCRIPT, - ERR_SHADER - }; - - virtual 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 = ERR_ERROR); + void print_error(const char *p_function, const char *p_file, int p_line, const char *p_code, const char *p_rationale, Logger::ErrorType p_type = Logger::ERR_ERROR); + void print(const char *p_format, ...); + void printerr(const char *p_format, ...); - virtual void print(const char *p_format, ...); - virtual void printerr(const char *p_format, ...); - virtual void vprint(const char *p_format, va_list p_list, bool p_stderr = false) = 0; virtual void alert(const String &p_alert, const String &p_title = "ALERT!") = 0; virtual String get_stdin_string(bool p_block = true) = 0; @@ -156,7 +155,7 @@ public: virtual void set_mouse_mode(MouseMode p_mode); virtual MouseMode get_mouse_mode() const; - virtual void warp_mouse_pos(const Point2 &p_to) {} + virtual void warp_mouse_position(const Point2 &p_to) {} virtual Point2 get_mouse_position() const = 0; virtual int get_mouse_button_state() const = 0; virtual void set_window_title(const String &p_title) = 0; @@ -205,7 +204,7 @@ public: virtual String get_installed_templates_path() const { return ""; } virtual String get_executable_path() const; - virtual Error execute(const String &p_path, const List<String> &p_arguments, bool p_blocking, ProcessID *r_child_id = NULL, String *r_pipe = NULL, int *r_exitcode = NULL) = 0; + virtual Error execute(const String &p_path, const List<String> &p_arguments, bool p_blocking, ProcessID *r_child_id = NULL, String *r_pipe = NULL, int *r_exitcode = NULL, bool read_stderr = false) = 0; virtual Error kill(const ProcessID &p_pid) = 0; virtual int get_process_id() const; @@ -284,6 +283,8 @@ public: virtual bool can_draw() const = 0; + virtual bool is_userfs_persistent() const { return true; } + bool is_stdout_verbose() const; virtual void disable_crash_handler() {} @@ -314,6 +315,9 @@ public: virtual void show_virtual_keyboard(const String &p_existing_text, const Rect2 &p_screen_rect = Rect2()); virtual void hide_virtual_keyboard(); + // returns height of the currently shown virtual keyboard (0 if keyboard is hidden) + virtual int get_virtual_keyboard_height() const; + virtual void set_cursor_shape(CursorShape p_shape) = 0; virtual bool get_swap_ok_cancel() { return false; } @@ -335,6 +339,8 @@ public: virtual String get_data_dir() const; virtual String get_resource_dir() const; + virtual Error move_to_trash(const String &p_path) { return FAILED; } + enum SystemDir { SYSTEM_DIR_DESKTOP, SYSTEM_DIR_DCIM, @@ -424,7 +430,7 @@ public: virtual int get_power_seconds_left(); virtual int get_power_percent_left(); - bool check_feature_support(const String &p_feature); + bool has_feature(const String &p_feature); /** * Returns the stack bottom of the main thread of the application. diff --git a/core/project_settings.cpp b/core/project_settings.cpp index 7ea0d563a6..c4d1b199a0 100644 --- a/core/project_settings.cpp +++ b/core/project_settings.cpp @@ -152,7 +152,7 @@ bool ProjectSettings::_set(const StringName &p_name, const Variant &p_value) { bool override_valid = false; for (int i = 1; i < s.size(); i++) { String feature = s[i].strip_edges(); - if (OS::get_singleton()->check_feature_support(feature) || custom_features.has(feature)) { + if (OS::get_singleton()->has_feature(feature) || custom_features.has(feature)) { override_valid = true; break; } @@ -261,7 +261,7 @@ bool ProjectSettings::_load_resource_pack(const String &p_pack) { return true; } -Error ProjectSettings::setup(const String &p_path, const String &p_main_pack) { +Error ProjectSettings::setup(const String &p_path, const String &p_main_pack, bool p_upwards) { //If looking for files in network, just use network! @@ -270,11 +270,6 @@ Error ProjectSettings::setup(const String &p_path, const String &p_main_pack) { if (_load_settings("res://project.godot") == OK || _load_settings_binary("res://project.binary") == OK) { _load_settings("res://override.cfg"); -#ifdef DEBUG_ENABLED - } else { - // when debug version of godot is used, provide some feedback to the developer - print_line("Couldn't open project over network"); -#endif } return OK; @@ -292,12 +287,6 @@ Error ProjectSettings::setup(const String &p_path, const String &p_main_pack) { if (_load_settings("res://project.godot") == OK || _load_settings_binary("res://project.binary") == OK) { //load override from location of the main pack _load_settings(p_main_pack.get_base_dir().plus_file("override.cfg")); -#ifdef DEBUG_ENABLED - // when debug version of godot is used, provide some feedback to the developer - print_line("Successfully loaded " + p_main_pack + "/project.godot or project.binary"); - } else { - print_line("Couldn't load/find " + p_main_pack + "/project.godot or project.binary"); -#endif } return OK; @@ -315,18 +304,9 @@ Error ProjectSettings::setup(const String &p_path, const String &p_main_pack) { if (_load_resource_pack(datapack_name)) { found = true; } else { -#ifdef DEBUG_ENABLED - // when debug version of godot is used, provide some feedback to the developer - print_line("Couldn't open " + datapack_name); -#endif datapack_name = filebase_name + ".pck"; if (_load_resource_pack(datapack_name)) { found = true; -#ifdef DEBUG_ENABLED - } else { - // when debug version of godot is used, provide some feedback to the developer - print_line("Couldn't open " + datapack_name); -#endif } } @@ -335,13 +315,6 @@ Error ProjectSettings::setup(const String &p_path, const String &p_main_pack) { if (_load_settings("res://project.godot") == OK || _load_settings_binary("res://project.binary") == OK) { // load override from location of executable _load_settings(exec_path.get_base_dir().plus_file("override.cfg")); - -#ifdef DEBUG_ENABLED - // when debug version of godot is used, provide some feedback to the developer - print_line("Successfully loaded " + datapack_name + "/project.godot or project.binary"); - } else { - print_line("Couldn't load/find " + datapack_name + "/project.godot or project.binary"); -#endif } return OK; @@ -362,12 +335,6 @@ Error ProjectSettings::setup(const String &p_path, const String &p_main_pack) { if (_load_settings("res://project.godot") == OK || _load_settings_binary("res://project.binary") == OK) { _load_settings("res://override.cfg"); -#ifdef DEBUG_ENABLED - // when debug version of godot is used, provide some feedback to the developer - print_line("Successfully loaded " + resource_path + "/project.godot or project.binary"); - } else { - print_line("Couldn't load/find " + resource_path + "/project.godot or project.binary"); -#endif } return OK; @@ -393,18 +360,16 @@ Error ProjectSettings::setup(const String &p_path, const String &p_main_pack) { candidate = current_dir; found = true; break; -#ifdef DEBUG_ENABLED - // when debug version of godot is used, provide some feedback to the developer - print_line("Successfully loaded " + current_dir + "/project.godot or project.binary"); - } else { - print_line("Couldn't load/find " + current_dir + "/project.godot or project.binary"); -#endif } - d->change_dir(".."); - if (d->get_current_dir() == current_dir) - break; //not doing anything useful - current_dir = d->get_current_dir(); + if (p_upwards) { + d->change_dir(".."); + if (d->get_current_dir() == current_dir) + break; //not doing anything useful + current_dir = d->get_current_dir(); + } else { + break; + } } resource_path = candidate; @@ -420,7 +385,7 @@ Error ProjectSettings::setup(const String &p_path, const String &p_main_pack) { return OK; } -bool ProjectSettings::has(String p_var) const { +bool ProjectSettings::has_setting(String p_var) const { _THREAD_SAFE_METHOD_ @@ -667,8 +632,8 @@ Error ProjectSettings::_save_settings_text(const String &p_file, const Map<Strin file->store_line("; Engine configuration file."); file->store_line("; It's best edited using the editor UI and not directly,"); file->store_line("; since the parameters that go here are not all obvious."); - file->store_line("; "); - file->store_line("; Format: "); + file->store_line(";"); + file->store_line("; Format:"); file->store_line("; [section] ; section goes between []"); file->store_line("; param=value ; assign values to parameters"); file->store_line(""); @@ -800,7 +765,7 @@ Error ProjectSettings::save_custom(const String &p_path, const CustomMap &p_cust Variant _GLOBAL_DEF(const String &p_var, const Variant &p_default) { Variant ret; - if (ProjectSettings::get_singleton()->has(p_var)) { + if (ProjectSettings::get_singleton()->has_setting(p_var)) { ret = ProjectSettings::get_singleton()->get(p_var); } else { ProjectSettings::get_singleton()->set(p_var, p_default); @@ -907,10 +872,20 @@ Variant ProjectSettings::property_get_revert(const String &p_name) { return props[p_name].initial; } +void ProjectSettings::set_setting(const String &p_setting, const Variant &p_value) { + set(p_setting, p_value); +} + +Variant ProjectSettings::get_setting(const String &p_setting) const { + return get(p_setting); +} + void ProjectSettings::_bind_methods() { - ClassDB::bind_method(D_METHOD("has", "name"), &ProjectSettings::has); - ClassDB::bind_method(D_METHOD("set_order", "name", "pos"), &ProjectSettings::set_order); + ClassDB::bind_method(D_METHOD("has_setting", "name"), &ProjectSettings::has_setting); + ClassDB::bind_method(D_METHOD("set_setting", "name", "value"), &ProjectSettings::set_setting); + ClassDB::bind_method(D_METHOD("get_setting", "name"), &ProjectSettings::get_setting); + ClassDB::bind_method(D_METHOD("set_order", "name", "position"), &ProjectSettings::set_order); ClassDB::bind_method(D_METHOD("get_order", "name"), &ProjectSettings::get_order); ClassDB::bind_method(D_METHOD("set_initial_value", "name", "value"), &ProjectSettings::set_initial_value); ClassDB::bind_method(D_METHOD("add_property_info", "hint"), &ProjectSettings::_add_property_info_bind); diff --git a/core/project_settings.h b/core/project_settings.h index 718ab2a011..f75cad815f 100644 --- a/core/project_settings.h +++ b/core/project_settings.h @@ -119,7 +119,10 @@ protected: static void _bind_methods(); public: - bool has(String p_var) const; + void set_setting(const String &p_setting, const Variant &p_value); + Variant get_setting(const String &p_setting) const; + + bool has_setting(String p_var) const; String localize_path(const String &p_path) const; String globalize_path(const String &p_path) const; @@ -136,7 +139,7 @@ public: void set_order(const String &p_name, int p_order); void set_builtin_order(const String &p_name); - Error setup(const String &p_path, const String &p_main_pack); + Error setup(const String &p_path, const String &p_main_pack, bool p_upwards = false); Error save_custom(const String &p_path = "", const CustomMap &p_custom = CustomMap(), const Vector<String> &p_custom_features = Vector<String>(), bool p_merge_with_current = true); Error save(); diff --git a/core/register_core_types.cpp b/core/register_core_types.cpp index 0e34a3eea5..c6d7cd44e8 100644 --- a/core/register_core_types.cpp +++ b/core/register_core_types.cpp @@ -40,6 +40,7 @@ #include "io/config_file.h" #include "io/http_client.h" #include "io/marshalls.h" +#include "io/networked_multiplayer_peer.h" #include "io/packet_peer.h" #include "io/packet_peer_udp.h" #include "io/pck_packer.h" @@ -109,6 +110,8 @@ void register_core_types() { ClassDB::register_class<Object>(); + ClassDB::register_virtual_class<Script>(); + ClassDB::register_class<Reference>(); ClassDB::register_class<WeakRef>(); ClassDB::register_class<Resource>(); @@ -136,6 +139,7 @@ void register_core_types() { ClassDB::register_virtual_class<IP>(); ClassDB::register_virtual_class<PacketPeer>(); ClassDB::register_class<PacketPeerStream>(); + ClassDB::register_virtual_class<NetworkedMultiplayerPeer>(); ClassDB::register_class<MainLoop>(); //ClassDB::register_type<OptimizedSaver>(); ClassDB::register_class<Translation>(); @@ -185,6 +189,20 @@ void register_core_settings() { void register_core_singletons() { + ClassDB::register_class<ProjectSettings>(); + ClassDB::register_virtual_class<IP>(); + ClassDB::register_class<_Geometry>(); + ClassDB::register_class<_ResourceLoader>(); + ClassDB::register_class<_ResourceSaver>(); + ClassDB::register_class<_OS>(); + ClassDB::register_class<_Engine>(); + ClassDB::register_class<_ClassDB>(); + ClassDB::register_class<_Marshalls>(); + ClassDB::register_class<TranslationServer>(); + ClassDB::register_virtual_class<Input>(); + ClassDB::register_class<InputMap>(); + ClassDB::register_class<_JSON>(); + ProjectSettings::get_singleton()->add_singleton(ProjectSettings::Singleton("ProjectSettings", ProjectSettings::get_singleton())); ProjectSettings::get_singleton()->add_singleton(ProjectSettings::Singleton("IP", IP::get_singleton())); ProjectSettings::get_singleton()->add_singleton(ProjectSettings::Singleton("Geometry", _Geometry::get_singleton())); diff --git a/core/safe_refcount.cpp b/core/safe_refcount.cpp index c330a983a7..c9acdb7970 100644 --- a/core/safe_refcount.cpp +++ b/core/safe_refcount.cpp @@ -27,122 +27,10 @@ /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ -#include "safe_refcount.h" - -// Atomic functions, these are used for multithread safe reference counters! - -#ifdef NO_THREADS - -/* Bogus implementation unaware of multiprocessing */ - -template <class T> -static _ALWAYS_INLINE_ T _atomic_conditional_increment_impl(register T *pw) { - - if (*pw == 0) - return 0; - - (*pw)++; - - return *pw; -} - -template <class T> -static _ALWAYS_INLINE_ T _atomic_decrement_impl(register T *pw) { - - (*pw)--; - - return *pw; -} - -template <class T> -static _ALWAYS_INLINE_ T _atomic_increment_impl(register T *pw) { - - (*pw)++; - - return *pw; -} - -template <class T> -static _ALWAYS_INLINE_ T _atomic_sub_impl(register T *pw, register T val) { - - (*pw) -= val; - - return *pw; -} - -template <class T> -static _ALWAYS_INLINE_ T _atomic_add_impl(register T *pw, register T val) { - - (*pw) += val; - - return *pw; -} - -template <class T> -static _ALWAYS_INLINE_ T _atomic_exchange_if_greater_impl(register T *pw, register T val) { - - if (val > *pw) - *pw = val; - - return *pw; -} -#elif defined(__GNUC__) - -/* Implementation for GCC & Clang */ - -// GCC guarantees atomic intrinsics for sizes of 1, 2, 4 and 8 bytes. -// Clang states it supports GCC atomic builtins. - -template <class T> -static _ALWAYS_INLINE_ T _atomic_conditional_increment_impl(register T *pw) { - - while (true) { - T tmp = static_cast<T const volatile &>(*pw); - if (tmp == 0) - return 0; // if zero, can't add to it anymore - if (__sync_val_compare_and_swap(pw, tmp, tmp + 1) == tmp) - return tmp + 1; - } -} - -template <class T> -static _ALWAYS_INLINE_ T _atomic_decrement_impl(register T *pw) { - - return __sync_sub_and_fetch(pw, 1); -} - -template <class T> -static _ALWAYS_INLINE_ T _atomic_increment_impl(register T *pw) { - - return __sync_add_and_fetch(pw, 1); -} - -template <class T> -static _ALWAYS_INLINE_ T _atomic_sub_impl(register T *pw, register T val) { - - return __sync_sub_and_fetch(pw, val); -} - -template <class T> -static _ALWAYS_INLINE_ T _atomic_add_impl(register T *pw, register T val) { - - return __sync_add_and_fetch(pw, val); -} - -template <class T> -static _ALWAYS_INLINE_ T _atomic_exchange_if_greater_impl(register T *pw, register T val) { - - while (true) { - T tmp = static_cast<T const volatile &>(*pw); - if (tmp >= val) - return tmp; // already greater, or equal - if (__sync_val_compare_and_swap(pw, tmp, val) == tmp) - return val; - } -} +#include "safe_refcount.h" -#elif defined(_MSC_VER) +#if defined(_MSC_VER) /* Implementation for MSVC-Windows */ @@ -169,73 +57,66 @@ static _ALWAYS_INLINE_ T _atomic_exchange_if_greater_impl(register T *pw, regist return m_val; \ } -static _ALWAYS_INLINE_ uint32_t _atomic_conditional_increment_impl(register uint32_t *pw) { +_ALWAYS_INLINE_ uint32_t _atomic_conditional_increment_impl(register uint32_t *pw) { ATOMIC_CONDITIONAL_INCREMENT_BODY(pw, LONG, InterlockedCompareExchange, uint32_t) } -static _ALWAYS_INLINE_ uint32_t _atomic_decrement_impl(register uint32_t *pw) { +_ALWAYS_INLINE_ uint32_t _atomic_decrement_impl(register uint32_t *pw) { return InterlockedDecrement((LONG volatile *)pw); } -static _ALWAYS_INLINE_ uint32_t _atomic_increment_impl(register uint32_t *pw) { +_ALWAYS_INLINE_ uint32_t _atomic_increment_impl(register uint32_t *pw) { return InterlockedIncrement((LONG volatile *)pw); } -static _ALWAYS_INLINE_ uint32_t _atomic_sub_impl(register uint32_t *pw, register uint32_t val) { +_ALWAYS_INLINE_ uint32_t _atomic_sub_impl(register uint32_t *pw, register uint32_t val) { return InterlockedExchangeAdd((LONG volatile *)pw, -(int32_t)val) - val; } -static _ALWAYS_INLINE_ uint32_t _atomic_add_impl(register uint32_t *pw, register uint32_t val) { +_ALWAYS_INLINE_ uint32_t _atomic_add_impl(register uint32_t *pw, register uint32_t val) { return InterlockedAdd((LONG volatile *)pw, val); } -static _ALWAYS_INLINE_ uint32_t _atomic_exchange_if_greater_impl(register uint32_t *pw, register uint32_t val) { +_ALWAYS_INLINE_ uint32_t _atomic_exchange_if_greater_impl(register uint32_t *pw, register uint32_t val) { ATOMIC_EXCHANGE_IF_GREATER_BODY(pw, val, LONG, InterlockedCompareExchange, uint32_t) } -static _ALWAYS_INLINE_ uint64_t _atomic_conditional_increment_impl(register uint64_t *pw) { +_ALWAYS_INLINE_ uint64_t _atomic_conditional_increment_impl(register uint64_t *pw) { ATOMIC_CONDITIONAL_INCREMENT_BODY(pw, LONGLONG, InterlockedCompareExchange64, uint64_t) } -static _ALWAYS_INLINE_ uint64_t _atomic_decrement_impl(register uint64_t *pw) { +_ALWAYS_INLINE_ uint64_t _atomic_decrement_impl(register uint64_t *pw) { return InterlockedDecrement64((LONGLONG volatile *)pw); } -static _ALWAYS_INLINE_ uint64_t _atomic_increment_impl(register uint64_t *pw) { +_ALWAYS_INLINE_ uint64_t _atomic_increment_impl(register uint64_t *pw) { return InterlockedIncrement64((LONGLONG volatile *)pw); } -static _ALWAYS_INLINE_ uint64_t _atomic_sub_impl(register uint64_t *pw, register uint64_t val) { +_ALWAYS_INLINE_ uint64_t _atomic_sub_impl(register uint64_t *pw, register uint64_t val) { return InterlockedExchangeAdd64((LONGLONG volatile *)pw, -(int64_t)val) - val; } -static _ALWAYS_INLINE_ uint64_t _atomic_add_impl(register uint64_t *pw, register uint64_t val) { +_ALWAYS_INLINE_ uint64_t _atomic_add_impl(register uint64_t *pw, register uint64_t val) { return InterlockedAdd64((LONGLONG volatile *)pw, val); } -static _ALWAYS_INLINE_ uint64_t _atomic_exchange_if_greater_impl(register uint64_t *pw, register uint64_t val) { +_ALWAYS_INLINE_ uint64_t _atomic_exchange_if_greater_impl(register uint64_t *pw, register uint64_t val) { ATOMIC_EXCHANGE_IF_GREATER_BODY(pw, val, LONGLONG, InterlockedCompareExchange64, uint64_t) } -#else - -//no threads supported? -#error Must provide atomic functions for this platform or compiler! - -#endif - // The actual advertised functions; they'll call the right implementation uint32_t atomic_conditional_increment(register uint32_t *counter) { @@ -285,3 +166,4 @@ uint64_t atomic_add(register uint64_t *pw, register uint64_t val) { uint64_t atomic_exchange_if_greater(register uint64_t *pw, register uint64_t val) { return _atomic_exchange_if_greater_impl(pw, val); } +#endif diff --git a/core/safe_refcount.h b/core/safe_refcount.h index 802d84cccc..39967d5ac4 100644 --- a/core/safe_refcount.h +++ b/core/safe_refcount.h @@ -36,20 +36,141 @@ #include "platform_config.h" #include "typedefs.h" -uint32_t atomic_conditional_increment(register uint32_t *counter); +// Atomic functions, these are used for multithread safe reference counters! + +#ifdef NO_THREADS + +/* Bogus implementation unaware of multiprocessing */ + +template <class T> +static _ALWAYS_INLINE_ T atomic_conditional_increment(register T *pw) { + + if (*pw == 0) + return 0; + + (*pw)++; + + return *pw; +} + +template <class T> +static _ALWAYS_INLINE_ T atomic_decrement(register T *pw) { + + (*pw)--; + + return *pw; +} + +template <class T> +static _ALWAYS_INLINE_ T atomic_increment(register T *pw) { + + (*pw)++; + + return *pw; +} + +template <class T, class V> +static _ALWAYS_INLINE_ T atomic_sub(register T *pw, register V val) { + + (*pw) -= val; + + return *pw; +} + +template <class T, class V> +static _ALWAYS_INLINE_ T atomic_add(register T *pw, register V val) { + + (*pw) += val; + + return *pw; +} + +template <class T, class V> +static _ALWAYS_INLINE_ T atomic_exchange_if_greater(register T *pw, register V val) { + + if (val > *pw) + *pw = val; + + return *pw; +} + +#elif defined(__GNUC__) + +/* Implementation for GCC & Clang */ + +// GCC guarantees atomic intrinsics for sizes of 1, 2, 4 and 8 bytes. +// Clang states it supports GCC atomic builtins. + +template <class T> +static _ALWAYS_INLINE_ T atomic_conditional_increment(register T *pw) { + + while (true) { + T tmp = static_cast<T const volatile &>(*pw); + if (tmp == 0) + return 0; // if zero, can't add to it anymore + if (__sync_val_compare_and_swap(pw, tmp, tmp + 1) == tmp) + return tmp + 1; + } +} + +template <class T> +static _ALWAYS_INLINE_ T atomic_decrement(register T *pw) { + + return __sync_sub_and_fetch(pw, 1); +} + +template <class T> +static _ALWAYS_INLINE_ T atomic_increment(register T *pw) { + + return __sync_add_and_fetch(pw, 1); +} + +template <class T, class V> +static _ALWAYS_INLINE_ T atomic_sub(register T *pw, register V val) { + + return __sync_sub_and_fetch(pw, val); +} + +template <class T, class V> +static _ALWAYS_INLINE_ T atomic_add(register T *pw, register V val) { + + return __sync_add_and_fetch(pw, val); +} + +template <class T, class V> +static _ALWAYS_INLINE_ T atomic_exchange_if_greater(register T *pw, register V val) { + + while (true) { + T tmp = static_cast<T const volatile &>(*pw); + if (tmp >= val) + return tmp; // already greater, or equal + if (__sync_val_compare_and_swap(pw, tmp, val) == tmp) + return val; + } +} + +#elif defined(_MSC_VER) +// For MSVC use a separate compilation unit to prevent windows.h from polluting +// the global namespace. +uint32_t atomic_conditional_increment(register uint32_t *pw); uint32_t atomic_decrement(register uint32_t *pw); uint32_t atomic_increment(register uint32_t *pw); uint32_t atomic_sub(register uint32_t *pw, register uint32_t val); uint32_t atomic_add(register uint32_t *pw, register uint32_t val); uint32_t atomic_exchange_if_greater(register uint32_t *pw, register uint32_t val); -uint64_t atomic_conditional_increment(register uint64_t *counter); +uint64_t atomic_conditional_increment(register uint64_t *pw); uint64_t atomic_decrement(register uint64_t *pw); uint64_t atomic_increment(register uint64_t *pw); uint64_t atomic_sub(register uint64_t *pw, register uint64_t val); uint64_t atomic_add(register uint64_t *pw, register uint64_t val); uint64_t atomic_exchange_if_greater(register uint64_t *pw, register uint64_t val); +#else +//no threads supported? +#error Must provide atomic functions for this platform or compiler! +#endif + struct SafeRefCount { uint32_t count; @@ -57,17 +178,17 @@ struct SafeRefCount { public: // destroy() is called when weak_count_ drops to zero. - bool ref() { //true on success + _ALWAYS_INLINE_ bool ref() { //true on success return atomic_conditional_increment(&count) != 0; } - uint32_t refval() { //true on success + _ALWAYS_INLINE_ uint32_t refval() { //true on success return atomic_conditional_increment(&count); } - bool unref() { // true if must be disposed of + _ALWAYS_INLINE_ bool unref() { // true if must be disposed of if (atomic_decrement(&count) == 0) { return true; @@ -76,12 +197,12 @@ public: return false; } - uint32_t get() const { // nothrow + _ALWAYS_INLINE_ uint32_t get() const { // nothrow return count; } - void init(uint32_t p_value = 1) { + _ALWAYS_INLINE_ void init(uint32_t p_value = 1) { count = p_value; } diff --git a/core/script_debugger_local.cpp b/core/script_debugger_local.cpp index c2632da38b..8d2600e52d 100644 --- a/core/script_debugger_local.cpp +++ b/core/script_debugger_local.cpp @@ -186,12 +186,12 @@ struct _ScriptDebuggerLocalProfileInfoSort { } }; -void ScriptDebuggerLocal::profiling_set_frame_times(float p_frame_time, float p_idle_time, float p_fixed_time, float p_fixed_frame_time) { +void ScriptDebuggerLocal::profiling_set_frame_times(float p_frame_time, float p_idle_time, float p_physics_time, float p_physics_frame_time) { frame_time = p_frame_time; idle_time = p_idle_time; - fixed_time = p_fixed_time; - fixed_frame_time = p_fixed_frame_time; + physics_time = p_physics_time; + physics_frame_time = p_physics_frame_time; } void ScriptDebuggerLocal::idle_poll() { @@ -250,9 +250,9 @@ void ScriptDebuggerLocal::profiling_start() { profiling = true; pinfo.resize(32768); frame_time = 0; - fixed_time = 0; + physics_time = 0; idle_time = 0; - fixed_frame_time = 0; + physics_frame_time = 0; } void ScriptDebuggerLocal::profiling_end() { diff --git a/core/script_debugger_local.h b/core/script_debugger_local.h index 097c7c41f3..91f787052c 100644 --- a/core/script_debugger_local.h +++ b/core/script_debugger_local.h @@ -35,7 +35,7 @@ class ScriptDebuggerLocal : public ScriptDebugger { bool profiling; - float frame_time, idle_time, fixed_time, fixed_frame_time; + float frame_time, idle_time, physics_time, physics_frame_time; uint64_t idle_accum; Vector<ScriptLanguage::ProfilingInfo> pinfo; @@ -51,7 +51,7 @@ public: virtual void profiling_start(); virtual void profiling_end(); - virtual void profiling_set_frame_times(float p_frame_time, float p_idle_time, float p_fixed_time, float p_fixed_frame_time); + virtual void profiling_set_frame_times(float p_frame_time, float p_idle_time, float p_physics_time, float p_physics_frame_time); ScriptDebuggerLocal(); }; diff --git a/core/script_debugger_remote.cpp b/core/script_debugger_remote.cpp index f0097054b1..2feb068ecb 100644 --- a/core/script_debugger_remote.cpp +++ b/core/script_debugger_remote.cpp @@ -647,8 +647,8 @@ void ScriptDebuggerRemote::_poll_events() { profiling = true; frame_time = 0; idle_time = 0; - fixed_time = 0; - fixed_frame_time = 0; + physics_time = 0; + physics_frame_time = 0; print_line("PROFILING ALRIGHT!"); @@ -727,8 +727,8 @@ void ScriptDebuggerRemote::_send_profiling_data(bool p_for_frame) { packet_peer_stream->put_var(Engine::get_singleton()->get_frames_drawn()); //total frame time packet_peer_stream->put_var(frame_time); //total frame time packet_peer_stream->put_var(idle_time); //idle frame time - packet_peer_stream->put_var(fixed_time); //fixed frame time - packet_peer_stream->put_var(fixed_frame_time); //fixed frame time + packet_peer_stream->put_var(physics_time); //fixed frame time + packet_peer_stream->put_var(physics_frame_time); //fixed frame time packet_peer_stream->put_var(USEC_TO_SEC(total_script_time)); //total script execution time @@ -855,15 +855,19 @@ void ScriptDebuggerRemote::_print_handler(void *p_this, const String &p_string) } sdr->char_count += allowed_chars; - - if (sdr->char_count >= sdr->max_cps) { - s += "\n[output overflow, print less text!]\n"; - } + bool overflowed = sdr->char_count >= sdr->max_cps; sdr->mutex->lock(); if (!sdr->locking && sdr->tcp_client->is_connected_to_host()) { + if (overflowed) + s += "[...]"; + sdr->output_strings.push_back(s); + + if (overflowed) { + sdr->output_strings.push_back("[output overflow, print less text!]"); + } } sdr->mutex->unlock(); } @@ -917,12 +921,12 @@ void ScriptDebuggerRemote::profiling_end() { //ignores this, uses it via connnection } -void ScriptDebuggerRemote::profiling_set_frame_times(float p_frame_time, float p_idle_time, float p_fixed_time, float p_fixed_frame_time) { +void ScriptDebuggerRemote::profiling_set_frame_times(float p_frame_time, float p_idle_time, float p_physics_time, float p_physics_frame_time) { frame_time = p_frame_time; idle_time = p_idle_time; - fixed_time = p_fixed_time; - fixed_frame_time = p_fixed_frame_time; + physics_time = p_physics_time; + physics_frame_time = p_physics_frame_time; } ScriptDebuggerRemote::ResourceUsageFunc ScriptDebuggerRemote::resource_usage_func = NULL; diff --git a/core/script_debugger_remote.h b/core/script_debugger_remote.h index b1ef88b812..22137d1350 100644 --- a/core/script_debugger_remote.h +++ b/core/script_debugger_remote.h @@ -54,7 +54,7 @@ class ScriptDebuggerRemote : public ScriptDebugger { Vector<ScriptLanguage::ProfilingInfo *> profile_info_ptrs; Map<StringName, int> profiler_function_signature_map; - float frame_time, idle_time, fixed_time, fixed_frame_time; + float frame_time, idle_time, physics_time, physics_frame_time; bool profiling; int max_frame_functions; @@ -161,7 +161,7 @@ public: virtual void profiling_start(); virtual void profiling_end(); - virtual void profiling_set_frame_times(float p_frame_time, float p_idle_time, float p_fixed_time, float p_fixed_frame_time); + virtual void profiling_set_frame_times(float p_frame_time, float p_idle_time, float p_physics_time, float p_physics_frame_time); ScriptDebuggerRemote(); ~ScriptDebuggerRemote(); diff --git a/core/script_language.h b/core/script_language.h index 2261737f9a..25767a2f7a 100644 --- a/core/script_language.h +++ b/core/script_language.h @@ -397,7 +397,7 @@ public: virtual void add_profiling_frame_data(const StringName &p_name, const Array &p_data) = 0; virtual void profiling_start() = 0; virtual void profiling_end() = 0; - virtual void profiling_set_frame_times(float p_frame_time, float p_idle_time, float p_fixed_time, float p_fixed_frame_time) = 0; + virtual void profiling_set_frame_times(float p_frame_time, float p_idle_time, float p_physics_time, float p_physics_frame_time) = 0; ScriptDebugger(); virtual ~ScriptDebugger() { singleton = NULL; } diff --git a/core/set.h b/core/set.h index d91dd9b3ea..0f48e07520 100644 --- a/core/set.h +++ b/core/set.h @@ -100,17 +100,15 @@ private: Element *_nil; int size_cache; - _Data() { + _FORCE_INLINE_ _Data() { #ifdef GLOBALNIL_DISABLED _nil = memnew_allocator(Element, A); _nil->parent = _nil->left = _nil->right = _nil; _nil->color = BLACK; #else - _nil = (Element *)&_GlobalNilClass::_nil; #endif _root = NULL; - size_cache = 0; } @@ -132,6 +130,7 @@ private: ~_Data() { _free_root(); + #ifdef GLOBALNIL_DISABLED memdelete_allocator<Element, A>(_nil); #endif @@ -196,7 +195,7 @@ private: } if (node->parent == _data._root) - return NULL; // No successor, as p_node is the last node. + return NULL; // No successor, as p_node = last node return node->parent; } } @@ -218,7 +217,7 @@ private: } if (node == _data._root) - return NULL; // No predecessor, as p_node is the first node. + return NULL; // No predecessor, as p_node = first node. return node->parent; } } @@ -266,65 +265,13 @@ private: return prev; } - Element *_insert(const T &p_value, bool &r_exists) { - - Element *new_parent = _data._root; - Element *node = _data._root->left; - C less; - - while (node != _data._nil) { - - new_parent = node; - - if (less(p_value, node->value)) - node = node->left; - else if (less(node->value, p_value)) - node = node->right; - else { - r_exists = true; - return node; - } - } - - r_exists = false; + void _insert_rb_fix(Element *p_new_node) { - Element *new_node = memnew_allocator(Element, A); - new_node->parent = new_parent; - new_node->right = _data._nil; - new_node->left = _data._nil; - new_node->value = p_value; - //new_node->data=_data; - - if (new_parent == _data._root || less(p_value, new_parent->value)) { - new_parent->left = new_node; - } else { - new_parent->right = new_node; - } - - new_node->_next = _successor(new_node); - new_node->_prev = _predecessor(new_node); - if (new_node->_next) - new_node->_next->_prev = new_node; - if (new_node->_prev) - new_node->_prev->_next = new_node; - - return new_node; - } - - Element *_insert_rb(const T &p_value) { - - bool exists = false; - Element *new_node = _insert(p_value, exists); - if (exists) - return new_node; - - _data.size_cache++; - Element *node = new_node; + Element *node = p_new_node; Element *nparent = node->parent; Element *ngrand_parent; while (nparent->color == RED) { - ngrand_parent = nparent->parent; if (nparent == ngrand_parent->left) { @@ -365,11 +312,53 @@ private: } _set_color(_data._root->left, BLACK); + } + + Element *_insert(const T &p_value) { + + Element *new_parent = _data._root; + Element *node = _data._root->left; + C less; + + while (node != _data._nil) { + + new_parent = node; + + if (less(p_value, node->value)) + node = node->left; + else if (less(node->value, p_value)) + node = node->right; + else { + return node; // Return existing node + } + } + Element *new_node = memnew_allocator(Element, A); + new_node->parent = new_parent; + new_node->right = _data._nil; + new_node->left = _data._nil; + new_node->value = p_value; + //new_node->data=_data; + + if (new_parent == _data._root || less(p_value, new_parent->value)) { + new_parent->left = new_node; + } else { + new_parent->right = new_node; + } + + new_node->_next = _successor(new_node); + new_node->_prev = _predecessor(new_node); + if (new_node->_next) + new_node->_next->_prev = new_node; + if (new_node->_prev) + new_node->_prev->_next = new_node; + + _data.size_cache++; + _insert_rb_fix(new_node); return new_node; } - void _erase_fix(Element *p_node) { + void _erase_fix_rb(Element *p_node) { Element *root = _data._root->left; Element *node = _data._nil; @@ -450,7 +439,7 @@ private: node->parent = rp->parent; _set_color(node, BLACK); } else if (rp->color == BLACK && rp->parent != _data._root) { - _erase_fix(sibling); + _erase_fix_rb(sibling); } if (rp != p_node) { @@ -485,11 +474,12 @@ private: void _calculate_depth(Element *p_element, int &max_d, int d) const { - if (p_element == _data._nil) { + if (p_element == _data._nil) return; - } + _calculate_depth(p_element->left, max_d, d + 1); _calculate_depth(p_element->right, max_d, d + 1); + if (d > max_d) max_d = d; } @@ -533,10 +523,13 @@ public: return res; } + Element *lower_bound(const T &p_value) const { + + return _lower_bound(p_value); + } + bool has(const T &p_value) const { - if (!_data._root) - return false; return find(p_value) != NULL; } @@ -544,7 +537,7 @@ public: if (!_data._root) _data._create_root(); - return _insert_rb(p_value); + return _insert(p_value); } void erase(Element *p_element) { @@ -602,11 +595,6 @@ public: return e; } - Element *lower_bound(const T &p_value) const { - - return _lower_bound(p_value); - } - inline int size() const { return _data.size_cache; } int calculate_depth() const { diff --git a/core/string_db.h b/core/string_db.h index 2bef29fab8..de91e2abd8 100644 --- a/core/string_db.h +++ b/core/string_db.h @@ -113,6 +113,9 @@ public: else return 0; } + _FORCE_INLINE_ const void *data_unique_pointer() const { + return (void *)_data; + } bool operator!=(const StringName &p_name) const; _FORCE_INLINE_ operator String() const { diff --git a/core/translation.cpp b/core/translation.cpp index f1f9c72b85..27e3b202d0 100644 --- a/core/translation.cpp +++ b/core/translation.cpp @@ -1052,7 +1052,7 @@ TranslationServer *TranslationServer::singleton = NULL; bool TranslationServer::_load_translations(const String &p_from) { - if (ProjectSettings::get_singleton()->has(p_from)) { + if (ProjectSettings::get_singleton()->has_setting(p_from)) { PoolVector<String> translations = ProjectSettings::get_singleton()->get(p_from); int tcount = translations.size(); diff --git a/core/typedefs.h b/core/typedefs.h index 565e28020b..bf5c8b0f75 100644 --- a/core/typedefs.h +++ b/core/typedefs.h @@ -290,4 +290,12 @@ struct _GlobalLock { #define __STRX(m_index) #m_index #define __STR(m_index) __STRX(m_index) +#ifdef __GNUC__ +#define likely(x) __builtin_expect(!!(x), 1) +#define unlikely(x) __builtin_expect(!!(x), 0) +#else +#define likely(x) x +#define unlikely(x) x +#endif + #endif /* typedefs.h */ diff --git a/core/ustring.cpp b/core/ustring.cpp index 8273ed144b..b85996e3d1 100644 --- a/core/ustring.cpp +++ b/core/ustring.cpp @@ -1755,7 +1755,7 @@ static double built_in_strtod(const C *string, /* A decimal ASCII floating-point register int c; int exp = 0; /* Exponent read from "EX" field. */ int fracExp = 0; /* Exponent that derives from the fractional - * part. Under normal circumstatnces, it is + * part. Under normal circumstances, it is * the negative of the number of digits in F. * However, if I is very long, the last digits * of I get dropped (otherwise a long I with a @@ -2332,12 +2332,12 @@ int String::findn(String p_str, int p_from) const { int String::rfind(String p_str, int p_from) const { - //stabilish a limit + // establish a limit int limit = length() - p_str.length(); if (limit < 0) return -1; - //stabilish a starting point + // establish a starting point if (p_from < 0) p_from = limit; else if (p_from > limit) @@ -2347,7 +2347,7 @@ int String::rfind(String p_str, int p_from) const { int len = length(); if (src_len == 0 || len == 0) - return -1; //wont find anything! + return -1; // won't find anything! const CharType *src = c_str(); @@ -2378,12 +2378,12 @@ int String::rfind(String p_str, int p_from) const { } int String::rfindn(String p_str, int p_from) const { - //stabilish a limit + // establish a limit int limit = length() - p_str.length(); if (limit < 0) return -1; - //stabilish a starting point + // establish a starting point if (p_from < 0) p_from = limit; else if (p_from > limit) diff --git a/core/variant.cpp b/core/variant.cpp index 52bdd4e22d..f70e4a5218 100644 --- a/core/variant.cpp +++ b/core/variant.cpp @@ -2469,10 +2469,10 @@ Variant::Variant(const Vector<Color> &p_array) { void Variant::operator=(const Variant &p_variant) { - if (this == &p_variant) + if (unlikely(this == &p_variant)) return; - if (type != p_variant.type) { + if (unlikely(type != p_variant.type)) { reference(p_variant); return; } diff --git a/core/variant.h b/core/variant.h index 5ea540a63f..45066af401 100644 --- a/core/variant.h +++ b/core/variant.h @@ -99,15 +99,15 @@ public: _RID, OBJECT, DICTIONARY, - ARRAY, // 20 + ARRAY, // arrays - POOL_BYTE_ARRAY, + POOL_BYTE_ARRAY, // 20 POOL_INT_ARRAY, POOL_REAL_ARRAY, POOL_STRING_ARRAY, - POOL_VECTOR2_ARRAY, // 25 - POOL_VECTOR3_ARRAY, + POOL_VECTOR2_ARRAY, + POOL_VECTOR3_ARRAY, // 25 POOL_COLOR_ARRAY, VARIANT_MAX @@ -368,6 +368,7 @@ public: 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); + static bool is_method_const(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; diff --git a/core/variant_call.cpp b/core/variant_call.cpp index 19d9b0297f..d141621fbb 100644 --- a/core/variant_call.cpp +++ b/core/variant_call.cpp @@ -53,6 +53,7 @@ struct _VariantCall { Vector<StringName> arg_names; Variant::Type return_type; + bool _const; #ifdef DEBUG_ENABLED bool returns; #endif @@ -145,11 +146,12 @@ struct _VariantCall { #endif } - static void addfunc(Variant::Type p_type, Variant::Type p_return, const StringName &p_name, VariantFunc p_func, const Vector<Variant> &p_defaultarg, const Arg &p_argtype1 = Arg(), const Arg &p_argtype2 = Arg(), const Arg &p_argtype3 = Arg(), const Arg &p_argtype4 = Arg(), const Arg &p_argtype5 = Arg()) { + static void addfunc(bool p_const, Variant::Type p_type, Variant::Type p_return, const StringName &p_name, VariantFunc p_func, const Vector<Variant> &p_defaultarg, const Arg &p_argtype1 = Arg(), const Arg &p_argtype2 = Arg(), const Arg &p_argtype3 = Arg(), const Arg &p_argtype4 = Arg(), const Arg &p_argtype5 = Arg()) { FuncData funcdata; funcdata.func = p_func; funcdata.default_args = p_defaultarg; + funcdata._const = p_const; #ifdef DEBUG_ENABLED funcdata.return_type = p_return; funcdata.returns = p_return != Variant::NIL; @@ -1201,6 +1203,17 @@ Vector<Variant::Type> Variant::get_method_argument_types(Variant::Type p_type, c return E->get().arg_types; } +bool Variant::is_method_const(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 false; + + return E->get()._const; +} + Vector<StringName> Variant::get_method_argument_names(Variant::Type p_type, const StringName &p_method) { const _VariantCall::TypeFunc &fd = _VariantCall::type_funcs[p_type]; @@ -1248,6 +1261,10 @@ void Variant::get_method_list(List<MethodInfo> *p_list) const { MethodInfo mi; mi.name = E->key(); + if (fd._const) { + mi.flags |= METHOD_FLAG_CONST; + } + for (int i = 0; i < fd.arg_types.size(); i++) { PropertyInfo pi; @@ -1360,15 +1377,26 @@ void register_variant_methods() { _VariantCall::constant_data = memnew_arr(_VariantCall::ConstantData, Variant::VARIANT_MAX); #define ADDFUNC0(m_vtype, m_ret, m_class, m_method, m_defarg) \ - _VariantCall::addfunc(Variant::m_vtype, Variant::m_ret, _scs_create(#m_method), VCALL(m_class, m_method), m_defarg); + _VariantCall::addfunc(true, Variant::m_vtype, Variant::m_ret, _scs_create(#m_method), VCALL(m_class, m_method), m_defarg); #define ADDFUNC1(m_vtype, m_ret, m_class, m_method, m_arg1, m_argname1, m_defarg) \ - _VariantCall::addfunc(Variant::m_vtype, Variant::m_ret, _scs_create(#m_method), VCALL(m_class, m_method), m_defarg, _VariantCall::Arg(Variant::m_arg1, _scs_create(m_argname1))); + _VariantCall::addfunc(true, Variant::m_vtype, Variant::m_ret, _scs_create(#m_method), VCALL(m_class, m_method), m_defarg, _VariantCall::Arg(Variant::m_arg1, _scs_create(m_argname1))); #define ADDFUNC2(m_vtype, m_ret, m_class, m_method, m_arg1, m_argname1, m_arg2, m_argname2, m_defarg) \ - _VariantCall::addfunc(Variant::m_vtype, Variant::m_ret, _scs_create(#m_method), VCALL(m_class, m_method), m_defarg, _VariantCall::Arg(Variant::m_arg1, _scs_create(m_argname1)), _VariantCall::Arg(Variant::m_arg2, _scs_create(m_argname2))); + _VariantCall::addfunc(true, Variant::m_vtype, Variant::m_ret, _scs_create(#m_method), VCALL(m_class, m_method), m_defarg, _VariantCall::Arg(Variant::m_arg1, _scs_create(m_argname1)), _VariantCall::Arg(Variant::m_arg2, _scs_create(m_argname2))); #define ADDFUNC3(m_vtype, m_ret, m_class, m_method, m_arg1, m_argname1, m_arg2, m_argname2, m_arg3, m_argname3, m_defarg) \ - _VariantCall::addfunc(Variant::m_vtype, Variant::m_ret, _scs_create(#m_method), VCALL(m_class, m_method), m_defarg, _VariantCall::Arg(Variant::m_arg1, _scs_create(m_argname1)), _VariantCall::Arg(Variant::m_arg2, _scs_create(m_argname2)), _VariantCall::Arg(Variant::m_arg3, _scs_create(m_argname3))); + _VariantCall::addfunc(true, Variant::m_vtype, Variant::m_ret, _scs_create(#m_method), VCALL(m_class, m_method), m_defarg, _VariantCall::Arg(Variant::m_arg1, _scs_create(m_argname1)), _VariantCall::Arg(Variant::m_arg2, _scs_create(m_argname2)), _VariantCall::Arg(Variant::m_arg3, _scs_create(m_argname3))); #define ADDFUNC4(m_vtype, m_ret, m_class, m_method, m_arg1, m_argname1, m_arg2, m_argname2, m_arg3, m_argname3, m_arg4, m_argname4, m_defarg) \ - _VariantCall::addfunc(Variant::m_vtype, Variant::m_ret, _scs_create(#m_method), VCALL(m_class, m_method), m_defarg, _VariantCall::Arg(Variant::m_arg1, _scs_create(m_argname1)), _VariantCall::Arg(Variant::m_arg2, _scs_create(m_argname2)), _VariantCall::Arg(Variant::m_arg3, _scs_create(m_argname3)), _VariantCall::Arg(Variant::m_arg4, _scs_create(m_argname4))); + _VariantCall::addfunc(true, Variant::m_vtype, Variant::m_ret, _scs_create(#m_method), VCALL(m_class, m_method), m_defarg, _VariantCall::Arg(Variant::m_arg1, _scs_create(m_argname1)), _VariantCall::Arg(Variant::m_arg2, _scs_create(m_argname2)), _VariantCall::Arg(Variant::m_arg3, _scs_create(m_argname3)), _VariantCall::Arg(Variant::m_arg4, _scs_create(m_argname4))); + +#define ADDFUNC0NC(m_vtype, m_ret, m_class, m_method, m_defarg) \ + _VariantCall::addfunc(false, Variant::m_vtype, Variant::m_ret, _scs_create(#m_method), VCALL(m_class, m_method), m_defarg); +#define ADDFUNC1NC(m_vtype, m_ret, m_class, m_method, m_arg1, m_argname1, m_defarg) \ + _VariantCall::addfunc(false, Variant::m_vtype, Variant::m_ret, _scs_create(#m_method), VCALL(m_class, m_method), m_defarg, _VariantCall::Arg(Variant::m_arg1, _scs_create(m_argname1))); +#define ADDFUNC2NC(m_vtype, m_ret, m_class, m_method, m_arg1, m_argname1, m_arg2, m_argname2, m_defarg) \ + _VariantCall::addfunc(false, Variant::m_vtype, Variant::m_ret, _scs_create(#m_method), VCALL(m_class, m_method), m_defarg, _VariantCall::Arg(Variant::m_arg1, _scs_create(m_argname1)), _VariantCall::Arg(Variant::m_arg2, _scs_create(m_argname2))); +#define ADDFUNC3NC(m_vtype, m_ret, m_class, m_method, m_arg1, m_argname1, m_arg2, m_argname2, m_arg3, m_argname3, m_defarg) \ + _VariantCall::addfunc(false, Variant::m_vtype, Variant::m_ret, _scs_create(#m_method), VCALL(m_class, m_method), m_defarg, _VariantCall::Arg(Variant::m_arg1, _scs_create(m_argname1)), _VariantCall::Arg(Variant::m_arg2, _scs_create(m_argname2)), _VariantCall::Arg(Variant::m_arg3, _scs_create(m_argname3))); +#define ADDFUNC4NC(m_vtype, m_ret, m_class, m_method, m_arg1, m_argname1, m_arg2, m_argname2, m_arg3, m_argname3, m_arg4, m_argname4, m_defarg) \ + _VariantCall::addfunc(false, Variant::m_vtype, Variant::m_ret, _scs_create(#m_method), VCALL(m_class, m_method), m_defarg, _VariantCall::Arg(Variant::m_arg1, _scs_create(m_argname1)), _VariantCall::Arg(Variant::m_arg2, _scs_create(m_argname2)), _VariantCall::Arg(Variant::m_arg3, _scs_create(m_argname3)), _VariantCall::Arg(Variant::m_arg4, _scs_create(m_argname4))); /* STRING */ ADDFUNC1(STRING, INT, String, casecmp_to, STRING, "to", varray()); @@ -1394,7 +1422,7 @@ void register_variant_methods() { ADDFUNC2(STRING, STRING, String, format, NIL, "values", STRING, "placeholder", varray("{_}")); ADDFUNC2(STRING, STRING, String, replace, STRING, "what", STRING, "forwhat", varray()); ADDFUNC2(STRING, STRING, String, replacen, STRING, "what", STRING, "forwhat", varray()); - ADDFUNC2(STRING, STRING, String, insert, INT, "pos", STRING, "what", varray()); + ADDFUNC2(STRING, STRING, String, insert, INT, "position", STRING, "what", varray()); ADDFUNC0(STRING, STRING, String, capitalize, varray()); ADDFUNC2(STRING, POOL_STRING_ARRAY, String, split, STRING, "divisor", BOOL, "allow_empty", varray(true)); ADDFUNC2(STRING, POOL_REAL_ARRAY, String, split_floats, STRING, "divisor", BOOL, "allow_empty", varray(true)); @@ -1402,14 +1430,14 @@ void register_variant_methods() { ADDFUNC0(STRING, STRING, String, to_upper, varray()); ADDFUNC0(STRING, STRING, String, to_lower, varray()); - ADDFUNC1(STRING, STRING, String, left, INT, "pos", varray()); - ADDFUNC1(STRING, STRING, String, right, INT, "pos", varray()); + ADDFUNC1(STRING, STRING, String, left, INT, "position", varray()); + ADDFUNC1(STRING, STRING, String, right, INT, "position", varray()); ADDFUNC2(STRING, STRING, String, strip_edges, BOOL, "left", BOOL, "right", varray(true, true)); ADDFUNC0(STRING, STRING, String, get_extension, varray()); ADDFUNC0(STRING, STRING, String, get_basename, varray()); ADDFUNC1(STRING, STRING, String, plus_file, STRING, "file", varray()); ADDFUNC1(STRING, INT, String, ord_at, INT, "at", varray()); - ADDFUNC2(STRING, NIL, String, erase, INT, "pos", INT, "chars", varray()); + ADDFUNC2(STRING, NIL, String, erase, INT, "position", INT, "chars", varray()); ADDFUNC0(STRING, INT, String, hash, varray()); ADDFUNC0(STRING, STRING, String, md5_text, varray()); ADDFUNC0(STRING, STRING, String, sha256_text, varray()); @@ -1545,7 +1573,7 @@ void register_variant_methods() { ADDFUNC0(DICTIONARY, INT, Dictionary, size, varray()); ADDFUNC0(DICTIONARY, BOOL, Dictionary, empty, varray()); - ADDFUNC0(DICTIONARY, NIL, Dictionary, clear, varray()); + ADDFUNC0NC(DICTIONARY, NIL, Dictionary, clear, varray()); ADDFUNC1(DICTIONARY, BOOL, Dictionary, has, NIL, "key", varray()); ADDFUNC1(DICTIONARY, BOOL, Dictionary, has_all, ARRAY, "keys", varray()); ADDFUNC1(DICTIONARY, NIL, Dictionary, erase, NIL, "key", varray()); @@ -1555,15 +1583,15 @@ void register_variant_methods() { ADDFUNC0(ARRAY, INT, Array, size, varray()); ADDFUNC0(ARRAY, BOOL, Array, empty, varray()); - ADDFUNC0(ARRAY, NIL, Array, clear, varray()); + ADDFUNC0NC(ARRAY, NIL, Array, clear, varray()); ADDFUNC0(ARRAY, INT, Array, hash, varray()); - ADDFUNC1(ARRAY, NIL, Array, push_back, NIL, "value", varray()); - ADDFUNC1(ARRAY, NIL, Array, push_front, NIL, "value", varray()); - ADDFUNC1(ARRAY, NIL, Array, append, NIL, "value", varray()); - ADDFUNC1(ARRAY, NIL, Array, resize, INT, "pos", varray()); - ADDFUNC2(ARRAY, NIL, Array, insert, INT, "pos", NIL, "value", varray()); - ADDFUNC1(ARRAY, NIL, Array, remove, INT, "pos", varray()); - ADDFUNC1(ARRAY, NIL, Array, erase, NIL, "value", varray()); + ADDFUNC1NC(ARRAY, NIL, Array, push_back, NIL, "value", varray()); + ADDFUNC1NC(ARRAY, NIL, Array, push_front, NIL, "value", varray()); + ADDFUNC1NC(ARRAY, NIL, Array, append, NIL, "value", varray()); + ADDFUNC1NC(ARRAY, NIL, Array, resize, INT, "size", varray()); + ADDFUNC2NC(ARRAY, NIL, Array, insert, INT, "position", NIL, "value", varray()); + ADDFUNC1NC(ARRAY, NIL, Array, remove, INT, "position", varray()); + ADDFUNC1NC(ARRAY, NIL, Array, erase, NIL, "value", varray()); ADDFUNC0(ARRAY, NIL, Array, front, varray()); ADDFUNC0(ARRAY, NIL, Array, back, varray()); ADDFUNC2(ARRAY, INT, Array, find, NIL, "what", INT, "from", varray(0)); @@ -1571,12 +1599,12 @@ void register_variant_methods() { 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()); - ADDFUNC2(ARRAY, NIL, Array, sort_custom, OBJECT, "obj", STRING, "func", varray()); - ADDFUNC0(ARRAY, NIL, Array, invert, varray()); - ADDFUNC0(ARRAY, ARRAY, Array, duplicate, varray()); + ADDFUNC0NC(ARRAY, NIL, Array, pop_back, varray()); + ADDFUNC0NC(ARRAY, NIL, Array, pop_front, varray()); + ADDFUNC0NC(ARRAY, NIL, Array, sort, varray()); + ADDFUNC2NC(ARRAY, NIL, Array, sort_custom, OBJECT, "obj", STRING, "func", varray()); + ADDFUNC0NC(ARRAY, NIL, Array, invert, varray()); + ADDFUNC0NC(ARRAY, ARRAY, Array, duplicate, varray()); ADDFUNC0(POOL_BYTE_ARRAY, INT, PoolByteArray, size, varray()); ADDFUNC2(POOL_BYTE_ARRAY, NIL, PoolByteArray, set, INT, "idx", INT, "byte", varray()); @@ -1728,10 +1756,10 @@ void register_variant_methods() { _VariantCall::add_constructor(_VariantCall::Vector2_init1, Variant::VECTOR2, "x", Variant::REAL, "y", Variant::REAL); - _VariantCall::add_constructor(_VariantCall::Rect2_init1, Variant::RECT2, "pos", Variant::VECTOR2, "size", Variant::VECTOR2); + _VariantCall::add_constructor(_VariantCall::Rect2_init1, Variant::RECT2, "position", Variant::VECTOR2, "size", Variant::VECTOR2); _VariantCall::add_constructor(_VariantCall::Rect2_init2, Variant::RECT2, "x", Variant::REAL, "y", Variant::REAL, "width", Variant::REAL, "height", Variant::REAL); - _VariantCall::add_constructor(_VariantCall::Transform2D_init2, Variant::TRANSFORM2D, "rot", Variant::REAL, "pos", Variant::VECTOR2); + _VariantCall::add_constructor(_VariantCall::Transform2D_init2, Variant::TRANSFORM2D, "rotation", Variant::REAL, "position", Variant::VECTOR2); _VariantCall::add_constructor(_VariantCall::Transform2D_init3, Variant::TRANSFORM2D, "x_axis", Variant::VECTOR2, "y_axis", Variant::VECTOR2, "origin", Variant::VECTOR2); _VariantCall::add_constructor(_VariantCall::Vector3_init1, Variant::VECTOR3, "x", Variant::REAL, "y", Variant::REAL, "z", Variant::REAL); @@ -1746,7 +1774,7 @@ void register_variant_methods() { _VariantCall::add_constructor(_VariantCall::Color_init1, Variant::COLOR, "r", Variant::REAL, "g", Variant::REAL, "b", Variant::REAL, "a", Variant::REAL); _VariantCall::add_constructor(_VariantCall::Color_init2, Variant::COLOR, "r", Variant::REAL, "g", Variant::REAL, "b", Variant::REAL); - _VariantCall::add_constructor(_VariantCall::Rect3_init1, Variant::RECT3, "pos", Variant::VECTOR3, "size", Variant::VECTOR3); + _VariantCall::add_constructor(_VariantCall::Rect3_init1, Variant::RECT3, "position", Variant::VECTOR3, "size", Variant::VECTOR3); _VariantCall::add_constructor(_VariantCall::Basis_init1, Variant::BASIS, "x_axis", Variant::VECTOR3, "y_axis", Variant::VECTOR3, "z_axis", Variant::VECTOR3); _VariantCall::add_constructor(_VariantCall::Basis_init2, Variant::BASIS, "axis", Variant::VECTOR3, "phi", Variant::REAL); diff --git a/core/variant_op.cpp b/core/variant_op.cpp index 5d47936679..6362090902 100644 --- a/core/variant_op.cpp +++ b/core/variant_op.cpp @@ -100,32 +100,32 @@ } /* clang-format on */ -#define CASES(PREFIX) static void *switch_table_##PREFIX[25][27] = { \ - TYPES(PREFIX, OP_EQUAL), \ - TYPES(PREFIX, OP_NOT_EQUAL), \ - TYPES(PREFIX, OP_LESS), \ - TYPES(PREFIX, OP_LESS_EQUAL), \ - TYPES(PREFIX, OP_GREATER), \ - TYPES(PREFIX, OP_GREATER_EQUAL), \ - TYPES(PREFIX, OP_ADD), \ - TYPES(PREFIX, OP_SUBTRACT), \ - TYPES(PREFIX, OP_MULTIPLY), \ - TYPES(PREFIX, OP_DIVIDE), \ - TYPES(PREFIX, OP_NEGATE), \ - TYPES(PREFIX, OP_POSITIVE), \ - TYPES(PREFIX, OP_MODULE), \ - TYPES(PREFIX, OP_STRING_CONCAT), \ - TYPES(PREFIX, OP_SHIFT_LEFT), \ - TYPES(PREFIX, OP_SHIFT_RIGHT), \ - TYPES(PREFIX, OP_BIT_AND), \ - TYPES(PREFIX, OP_BIT_OR), \ - TYPES(PREFIX, OP_BIT_XOR), \ - TYPES(PREFIX, OP_BIT_NEGATE), \ - TYPES(PREFIX, OP_AND), \ - TYPES(PREFIX, OP_OR), \ - TYPES(PREFIX, OP_XOR), \ - TYPES(PREFIX, OP_NOT), \ - TYPES(PREFIX, OP_IN), \ +#define CASES(PREFIX) static const void *switch_table_##PREFIX[25][27] = { \ + TYPES(PREFIX, OP_EQUAL), \ + TYPES(PREFIX, OP_NOT_EQUAL), \ + TYPES(PREFIX, OP_LESS), \ + TYPES(PREFIX, OP_LESS_EQUAL), \ + TYPES(PREFIX, OP_GREATER), \ + TYPES(PREFIX, OP_GREATER_EQUAL), \ + TYPES(PREFIX, OP_ADD), \ + TYPES(PREFIX, OP_SUBTRACT), \ + TYPES(PREFIX, OP_MULTIPLY), \ + TYPES(PREFIX, OP_DIVIDE), \ + TYPES(PREFIX, OP_NEGATE), \ + TYPES(PREFIX, OP_POSITIVE), \ + TYPES(PREFIX, OP_MODULE), \ + TYPES(PREFIX, OP_STRING_CONCAT), \ + TYPES(PREFIX, OP_SHIFT_LEFT), \ + TYPES(PREFIX, OP_SHIFT_RIGHT), \ + TYPES(PREFIX, OP_BIT_AND), \ + TYPES(PREFIX, OP_BIT_OR), \ + TYPES(PREFIX, OP_BIT_XOR), \ + TYPES(PREFIX, OP_BIT_NEGATE), \ + TYPES(PREFIX, OP_AND), \ + TYPES(PREFIX, OP_OR), \ + TYPES(PREFIX, OP_XOR), \ + TYPES(PREFIX, OP_NOT), \ + TYPES(PREFIX, OP_IN), \ } #define SWITCH(PREFIX, op, val) goto *switch_table_##PREFIX[op][val]; @@ -164,50 +164,50 @@ bool Variant::booleanize() const { return; \ } -#define DEFAULT_OP_NUM(m_prefix, m_op_name, m_name, m_op, m_type) \ - CASE_TYPE(m_prefix, m_op_name, m_name) { \ - switch (p_b.type) { \ - case INT: _RETURN(p_a._data.m_type m_op p_b._data._int); \ - case REAL: _RETURN(p_a._data.m_type m_op p_b._data._real); \ - default: {} \ - } \ - r_valid = false; \ - return; \ +#define DEFAULT_OP_NUM(m_prefix, m_op_name, m_name, m_op, m_type) \ + CASE_TYPE(m_prefix, m_op_name, m_name) { \ + if (p_b.type == INT) _RETURN(p_a._data.m_type m_op p_b._data._int); \ + if (p_b.type == REAL) _RETURN(p_a._data.m_type m_op p_b._data._real); \ + \ + _RETURN_FAIL \ + }; + +#define DEFAULT_OP_NUM_NULL(m_prefix, m_op_name, m_name, m_op, m_type) \ + CASE_TYPE(m_prefix, m_op_name, m_name) { \ + if (p_b.type == INT) _RETURN(p_a._data.m_type m_op p_b._data._int); \ + if (p_b.type == REAL) _RETURN(p_a._data.m_type m_op p_b._data._real); \ + if (p_b.type == NIL) _RETURN(!p_b.type m_op NIL); \ + \ + _RETURN_FAIL \ }; #ifdef DEBUG_ENABLED #define DEFAULT_OP_NUM_DIV(m_prefix, m_op_name, m_name, m_type) \ CASE_TYPE(m_prefix, m_op_name, m_name) { \ - switch (p_b.type) { \ - case INT: { \ - if (p_b._data._int == 0) { \ - r_valid = false; \ - _RETURN("Division By Zero"); \ - } \ - _RETURN(p_a._data.m_type / p_b._data._int); \ + if (p_b.type == INT) { \ + if (p_b._data._int == 0) { \ + r_valid = false; \ + _RETURN("Division By Zero"); \ } \ - case REAL: { \ - if (p_b._data._real == 0) { \ - r_valid = false; \ - _RETURN("Division By Zero"); \ - } \ - _RETURN(p_a._data.m_type / p_b._data._real); \ + _RETURN(p_a._data.m_type / p_b._data._int); \ + } \ + if (p_b.type == REAL) { \ + if (p_b._data._real == 0) { \ + r_valid = false; \ + _RETURN("Division By Zero"); \ } \ - default: {} \ + _RETURN(p_a._data.m_type / p_b._data._real); \ } \ - r_valid = false; \ - return; \ + \ + _RETURN_FAIL \ }; #else -#define DEFAULT_OP_NUM_DIV(m_prefix, m_op_name, m_name, m_type) \ - CASE_TYPE(m_prefix, m_op_name, m_name) { \ - switch (p_b.type) { \ - case INT: _RETURN(p_a._data.m_type / p_b._data._int); \ - case REAL: _RETURN(p_a._data.m_type / p_b._data._real); \ - default: {} \ - } \ - r_valid = false; \ - return; \ +#define DEFAULT_OP_NUM_DIV(m_prefix, m_op_name, m_name, m_type) \ + CASE_TYPE(m_prefix, m_op_name, m_name) { \ + if (p_b.type == INT) _RETURN(p_a._data.m_type / p_b._data._int); \ + if (p_b.type == REAL) _RETURN(p_a._data.m_type / p_b._data._real); \ + \ + _RETURN_FAIL \ }; #endif @@ -221,55 +221,65 @@ bool Variant::booleanize() const { _RETURN(p_a._data.m_type); \ }; -#define DEFAULT_OP_NUM_VEC(m_prefix, m_op_name, m_name, m_op, m_type) \ - CASE_TYPE(m_prefix, m_op_name, m_name) { \ - switch (p_b.type) { \ - case INT: _RETURN(p_a._data.m_type m_op p_b._data._int); \ - case REAL: _RETURN(p_a._data.m_type m_op p_b._data._real); \ - case VECTOR2: _RETURN(p_a._data.m_type m_op *reinterpret_cast<const Vector2 *>(p_b._data._mem)); \ - case VECTOR3: _RETURN(p_a._data.m_type m_op *reinterpret_cast<const Vector3 *>(p_b._data._mem)); \ - default: {} \ - } \ - r_valid = false; \ - return; \ +#define DEFAULT_OP_NUM_VEC(m_prefix, m_op_name, m_name, m_op, m_type) \ + CASE_TYPE(m_prefix, m_op_name, m_name) { \ + if (p_b.type == INT) _RETURN(p_a._data.m_type m_op p_b._data._int); \ + if (p_b.type == REAL) _RETURN(p_a._data.m_type m_op p_b._data._real); \ + if (p_b.type == VECTOR2) _RETURN(p_a._data.m_type m_op *reinterpret_cast<const Vector2 *>(p_b._data._mem)); \ + if (p_b.type == VECTOR3) _RETURN(p_a._data.m_type m_op *reinterpret_cast<const Vector3 *>(p_b._data._mem)); \ + \ + _RETURN_FAIL \ }; -#define DEFAULT_OP_STR_REV(m_prefix, m_op_name, m_name, m_op, m_type) \ - CASE_TYPE(m_prefix, m_op_name, m_name) { \ - switch (p_b.type) { \ - case STRING: _RETURN(*reinterpret_cast<const m_type *>(p_b._data._mem) m_op *reinterpret_cast<const String *>(p_a._data._mem)); \ - case NODE_PATH: _RETURN(*reinterpret_cast<const m_type *>(p_b._data._mem) m_op *reinterpret_cast<const NodePath *>(p_a._data._mem)); \ - default: {} \ - } \ - r_valid = false; \ - return; \ +#define DEFAULT_OP_STR_REV(m_prefix, m_op_name, m_name, m_op, m_type) \ + CASE_TYPE(m_prefix, m_op_name, m_name) { \ + if (p_b.type == STRING) _RETURN(*reinterpret_cast<const m_type *>(p_b._data._mem) m_op *reinterpret_cast<const String *>(p_a._data._mem)); \ + if (p_b.type == NODE_PATH) _RETURN(*reinterpret_cast<const m_type *>(p_b._data._mem) m_op *reinterpret_cast<const NodePath *>(p_a._data._mem)); \ + \ + _RETURN_FAIL \ }; -#define DEFAULT_OP_STR(m_prefix, m_op_name, m_name, m_op, m_type) \ - CASE_TYPE(m_prefix, m_op_name, m_name) { \ - switch (p_b.type) { \ - case STRING: _RETURN(*reinterpret_cast<const m_type *>(p_a._data._mem) m_op *reinterpret_cast<const String *>(p_b._data._mem)); \ - case NODE_PATH: _RETURN(*reinterpret_cast<const m_type *>(p_a._data._mem) m_op *reinterpret_cast<const NodePath *>(p_b._data._mem)); \ - default: {} \ - } \ - r_valid = false; \ - return; \ +#define DEFAULT_OP_STR(m_prefix, m_op_name, m_name, m_op, m_type) \ + CASE_TYPE(m_prefix, m_op_name, m_name) { \ + if (p_b.type == STRING) _RETURN(*reinterpret_cast<const m_type *>(p_a._data._mem) m_op *reinterpret_cast<const String *>(p_b._data._mem)); \ + if (p_b.type == NODE_PATH) _RETURN(*reinterpret_cast<const m_type *>(p_a._data._mem) m_op *reinterpret_cast<const NodePath *>(p_b._data._mem)); \ + \ + _RETURN_FAIL \ + }; + +#define DEFAULT_OP_STR_NULL(m_prefix, m_op_name, m_name, m_op, m_type) \ + CASE_TYPE(m_prefix, m_op_name, m_name) { \ + if (p_b.type == STRING) _RETURN(*reinterpret_cast<const m_type *>(p_a._data._mem) m_op *reinterpret_cast<const String *>(p_b._data._mem)); \ + if (p_b.type == NODE_PATH) _RETURN(*reinterpret_cast<const m_type *>(p_a._data._mem) m_op *reinterpret_cast<const NodePath *>(p_b._data._mem)); \ + if (p_b.type == NIL) _RETURN(!p_b.type m_op NIL); \ + \ + _RETURN_FAIL \ }; #define DEFAULT_OP_LOCALMEM_REV(m_prefix, m_op_name, m_name, m_op, m_type) \ CASE_TYPE(m_prefix, m_op_name, m_name) { \ if (p_b.type == m_name) \ _RETURN(*reinterpret_cast<const m_type *>(p_b._data._mem) m_op *reinterpret_cast<const m_type *>(p_a._data._mem)); \ - r_valid = false; \ - return; \ + \ + _RETURN_FAIL \ }; #define DEFAULT_OP_LOCALMEM(m_prefix, m_op_name, m_name, m_op, m_type) \ CASE_TYPE(m_prefix, m_op_name, m_name) { \ if (p_b.type == m_name) \ _RETURN(*reinterpret_cast<const m_type *>(p_a._data._mem) m_op *reinterpret_cast<const m_type *>(p_b._data._mem)); \ - r_valid = false; \ - return; \ + \ + _RETURN_FAIL \ + }; + +#define DEFAULT_OP_LOCALMEM_NULL(m_prefix, m_op_name, m_name, m_op, m_type) \ + CASE_TYPE(m_prefix, m_op_name, m_name) { \ + if (p_b.type == m_name) \ + _RETURN(*reinterpret_cast<const m_type *>(p_a._data._mem) m_op *reinterpret_cast<const m_type *>(p_b._data._mem)); \ + if (p_b.type == NIL) \ + _RETURN(!p_b.type m_op NIL); \ + \ + _RETURN_FAIL \ }; #define DEFAULT_OP_LOCALMEM_NEG(m_prefix, m_op_name, m_name, m_type) \ @@ -282,38 +292,54 @@ bool Variant::booleanize() const { _RETURN(*reinterpret_cast<const m_type *>(p_a._data._mem)); \ } -#define DEFAULT_OP_LOCALMEM_NUM(m_prefix, m_op_name, m_name, m_op, m_type) \ - CASE_TYPE(m_prefix, m_op_name, m_name) { \ - switch (p_b.type) { \ - case m_name: _RETURN(*reinterpret_cast<const m_type *>(p_a._data._mem) m_op *reinterpret_cast<const m_type *>(p_b._data._mem)); \ - case INT: _RETURN(*reinterpret_cast<const m_type *>(p_a._data._mem) m_op p_b._data._int); \ - case REAL: _RETURN(*reinterpret_cast<const m_type *>(p_a._data._mem) m_op p_b._data._real); \ - default: {} \ - } \ - r_valid = false; \ - return; \ +#define DEFAULT_OP_LOCALMEM_NUM(m_prefix, m_op_name, m_name, m_op, m_type) \ + CASE_TYPE(m_prefix, m_op_name, m_name) { \ + if (p_b.type == m_name) _RETURN(*reinterpret_cast<const m_type *>(p_a._data._mem) m_op *reinterpret_cast<const m_type *>(p_b._data._mem)); \ + if (p_b.type == INT) _RETURN(*reinterpret_cast<const m_type *>(p_a._data._mem) m_op p_b._data._int); \ + if (p_b.type == REAL) _RETURN(*reinterpret_cast<const m_type *>(p_a._data._mem) m_op p_b._data._real); \ + \ + _RETURN_FAIL \ } -#define DEFAULT_OP_PTR(m_op, m_name, m_sub) \ - case m_name: { \ - switch (p_b.type) { \ - case m_name: _RETURN(p_a._data.m_sub m_op p_b._data.m_sub); \ - default: {} \ - } \ - r_valid = false; \ - return; \ +#define DEFAULT_OP_PTR(m_op, m_name, m_sub) \ + CASE_TYPE(m_prefix, m_op_name, m_name) { \ + if (p_b.type == m_name) \ + _RETURN(p_a._data.m_sub m_op p_b._data.m_sub); \ + \ + _RETURN_FAIL \ } #define DEFAULT_OP_PTRREF(m_prefix, m_op_name, m_name, m_op, m_sub) \ CASE_TYPE(m_prefix, m_op_name, m_name) { \ if (p_b.type == m_name) \ _RETURN(*p_a._data.m_sub m_op *p_b._data.m_sub); \ - r_valid = false; \ - return; \ + \ + _RETURN_FAIL \ + } + +#define DEFAULT_OP_PTRREF_NULL(m_prefix, m_op_name, m_name, m_op, m_sub) \ + CASE_TYPE(m_prefix, m_op_name, m_name) { \ + if (p_b.type == m_name) \ + _RETURN(*p_a._data.m_sub m_op *p_b._data.m_sub); \ + if (p_b.type == NIL) \ + _RETURN(!p_b.type m_op NIL); \ + \ + _RETURN_FAIL \ } -#define DEFAULT_OP_ARRAY_EQ(m_prefix, m_op_name, m_name, m_type) \ - DEFAULT_OP_ARRAY_OP(m_prefix, m_op_name, m_name, m_type, !=, !=, true, false, false) +#define DEFAULT_OP_ARRAY_EQ(m_prefix, m_op_name, m_name, m_type) \ + CASE_TYPE(m_prefix, m_op_name, m_name) { \ + if (p_b.type == NIL) \ + _RETURN(false) \ + DEFAULT_OP_ARRAY_OP_BODY(m_prefix, m_op_name, m_name, m_type, !=, !=, true, false, false) \ + } + +#define DEFAULT_OP_ARRAY_NEQ(m_prefix, m_op_name, m_name, m_type) \ + CASE_TYPE(m_prefix, m_op_name, m_name) { \ + if (p_b.type == NIL) \ + _RETURN(true) \ + DEFAULT_OP_ARRAY_OP_BODY(m_prefix, m_op_name, m_name, m_type, !=, ==, true, true, false) \ + } #define DEFAULT_OP_ARRAY_LT(m_prefix, m_op_name, m_name, m_type) \ DEFAULT_OP_ARRAY_OP(m_prefix, m_op_name, m_name, m_type, <, !=, false, a_len < array_b.size(), true) @@ -321,38 +347,39 @@ bool Variant::booleanize() const { #define DEFAULT_OP_ARRAY_GT(m_prefix, m_op_name, m_name, m_type) \ DEFAULT_OP_ARRAY_OP(m_prefix, m_op_name, m_name, m_type, >, !=, false, a_len < array_b.size(), true) -#define DEFAULT_OP_ARRAY_OP(m_prefix, m_op_name, m_name, m_type, m_opa, m_opb, m_ret_def, m_ret_s, m_ret_f) \ - CASE_TYPE(m_prefix, m_op_name, m_name) { \ - if (p_a.type != p_b.type) { \ - r_valid = false; \ - return; \ - } \ - const PoolVector<m_type> &array_a = *reinterpret_cast<const PoolVector<m_type> *>(p_a._data._mem); \ - const PoolVector<m_type> &array_b = *reinterpret_cast<const PoolVector<m_type> *>(p_b._data._mem); \ - \ - int a_len = array_a.size(); \ - if (a_len m_opa array_b.size()) { \ - _RETURN(m_ret_s); \ - } else { \ - \ - PoolVector<m_type>::Read ra = array_a.read(); \ - PoolVector<m_type>::Read rb = array_b.read(); \ - \ - for (int i = 0; i < a_len; i++) { \ - if (ra[i] m_opb rb[i]) \ - _RETURN(m_ret_f); \ - } \ - \ - _RETURN(m_ret_def); \ - } \ +#define DEFAULT_OP_ARRAY_OP(m_prefix, m_op_name, m_name, m_type, m_opa, m_opb, m_ret_def, m_ret_s, m_ret_f) \ + CASE_TYPE(m_prefix, m_op_name, m_name) { \ + DEFAULT_OP_ARRAY_OP_BODY(m_prefix, m_op_name, m_name, m_type, m_opa, m_opb, m_ret_def, m_ret_s, m_ret_f) \ + } + +#define DEFAULT_OP_ARRAY_OP_BODY(m_prefix, m_op_name, m_name, m_type, m_opa, m_opb, m_ret_def, m_ret_s, m_ret_f) \ + if (p_a.type != p_b.type) \ + _RETURN_FAIL \ + \ + const PoolVector<m_type> &array_a = *reinterpret_cast<const PoolVector<m_type> *>(p_a._data._mem); \ + const PoolVector<m_type> &array_b = *reinterpret_cast<const PoolVector<m_type> *>(p_b._data._mem); \ + \ + int a_len = array_a.size(); \ + if (a_len m_opa array_b.size()) { \ + _RETURN(m_ret_s); \ + } else { \ + \ + PoolVector<m_type>::Read ra = array_a.read(); \ + PoolVector<m_type>::Read rb = array_b.read(); \ + \ + for (int i = 0; i < a_len; i++) { \ + if (ra[i] m_opb rb[i]) \ + _RETURN(m_ret_f); \ + } \ + \ + _RETURN(m_ret_def); \ } #define DEFAULT_OP_ARRAY_ADD(m_prefix, m_op_name, m_name, m_type) \ CASE_TYPE(m_prefix, m_op_name, m_name) { \ - if (p_a.type != p_b.type) { \ - r_valid = false; \ - _RETURN(NIL); \ - } \ + if (p_a.type != p_b.type) \ + _RETURN_FAIL; \ + \ const PoolVector<m_type> &array_a = *reinterpret_cast<const PoolVector<m_type> *>(p_a._data._mem); \ const PoolVector<m_type> &array_b = *reinterpret_cast<const PoolVector<m_type> *>(p_b._data._mem); \ PoolVector<m_type> sum = array_a; \ @@ -372,12 +399,17 @@ void Variant::evaluate(const Operator &p_op, const Variant &p_a, if (p_b.type == NIL) _RETURN(true); if (p_b.type == OBJECT) _RETURN(p_b._get_obj().obj == NULL); - _RETURN_FAIL; + + _RETURN(false); } CASE_TYPE(math, OP_EQUAL, BOOL) { - if (p_b.type != BOOL) + if (p_b.type != BOOL) { + if (p_b.type == NIL) + _RETURN(false); _RETURN_FAIL; + } + _RETURN(p_a._data._bool == p_b._data._bool); } @@ -386,12 +418,16 @@ void Variant::evaluate(const Operator &p_op, const Variant &p_a, _RETURN((p_a._get_obj().obj == p_b._get_obj().obj)); if (p_b.type == NIL) _RETURN(p_a._get_obj().obj == NULL); + _RETURN_FAIL; } CASE_TYPE(math, OP_EQUAL, DICTIONARY) { - if (p_b.type != DICTIONARY) + if (p_b.type != DICTIONARY) { + if (p_b.type == NIL) + _RETURN(false); _RETURN_FAIL; + } const Dictionary *arr_a = reinterpret_cast<const Dictionary *>(p_a._data._mem); const Dictionary *arr_b = reinterpret_cast<const Dictionary *>(p_b._data._mem); @@ -400,9 +436,11 @@ void Variant::evaluate(const Operator &p_op, const Variant &p_a, } CASE_TYPE(math, OP_EQUAL, ARRAY) { - if (p_b.type != ARRAY) + if (p_b.type != ARRAY) { + if (p_b.type == NIL) + _RETURN(false); _RETURN_FAIL; - + } const Array *arr_a = reinterpret_cast<const Array *>(p_a._data._mem); const Array *arr_b = reinterpret_cast<const Array *>(p_b._data._mem); @@ -418,21 +456,21 @@ void Variant::evaluate(const Operator &p_op, const Variant &p_a, _RETURN(true); } - DEFAULT_OP_NUM(math, OP_EQUAL, INT, ==, _int); - DEFAULT_OP_NUM(math, OP_EQUAL, REAL, ==, _real); - DEFAULT_OP_STR(math, OP_EQUAL, STRING, ==, String); - DEFAULT_OP_LOCALMEM(math, OP_EQUAL, VECTOR2, ==, Vector2); - DEFAULT_OP_LOCALMEM(math, OP_EQUAL, RECT2, ==, Rect2); - DEFAULT_OP_PTRREF(math, OP_EQUAL, TRANSFORM2D, ==, _transform2d); - DEFAULT_OP_LOCALMEM(math, OP_EQUAL, VECTOR3, ==, Vector3); - DEFAULT_OP_LOCALMEM(math, OP_EQUAL, PLANE, ==, Plane); - DEFAULT_OP_LOCALMEM(math, OP_EQUAL, QUAT, ==, Quat); - DEFAULT_OP_PTRREF(math, OP_EQUAL, RECT3, ==, _rect3); - DEFAULT_OP_PTRREF(math, OP_EQUAL, BASIS, ==, _basis); - DEFAULT_OP_PTRREF(math, OP_EQUAL, TRANSFORM, ==, _transform); - DEFAULT_OP_LOCALMEM(math, OP_EQUAL, COLOR, ==, Color); - DEFAULT_OP_STR(math, OP_EQUAL, NODE_PATH, ==, NodePath); - DEFAULT_OP_LOCALMEM(math, OP_EQUAL, _RID, ==, RID); + DEFAULT_OP_NUM_NULL(math, OP_EQUAL, INT, ==, _int); + DEFAULT_OP_NUM_NULL(math, OP_EQUAL, REAL, ==, _real); + DEFAULT_OP_STR_NULL(math, OP_EQUAL, STRING, ==, String); + DEFAULT_OP_LOCALMEM_NULL(math, OP_EQUAL, VECTOR2, ==, Vector2); + DEFAULT_OP_LOCALMEM_NULL(math, OP_EQUAL, RECT2, ==, Rect2); + DEFAULT_OP_PTRREF_NULL(math, OP_EQUAL, TRANSFORM2D, ==, _transform2d); + DEFAULT_OP_LOCALMEM_NULL(math, OP_EQUAL, VECTOR3, ==, Vector3); + DEFAULT_OP_LOCALMEM_NULL(math, OP_EQUAL, PLANE, ==, Plane); + DEFAULT_OP_LOCALMEM_NULL(math, OP_EQUAL, QUAT, ==, Quat); + DEFAULT_OP_PTRREF_NULL(math, OP_EQUAL, RECT3, ==, _rect3); + DEFAULT_OP_PTRREF_NULL(math, OP_EQUAL, BASIS, ==, _basis); + DEFAULT_OP_PTRREF_NULL(math, OP_EQUAL, TRANSFORM, ==, _transform); + DEFAULT_OP_LOCALMEM_NULL(math, OP_EQUAL, COLOR, ==, Color); + DEFAULT_OP_STR_NULL(math, OP_EQUAL, NODE_PATH, ==, NodePath); + DEFAULT_OP_LOCALMEM_NULL(math, OP_EQUAL, _RID, ==, RID); DEFAULT_OP_ARRAY_EQ(math, OP_EQUAL, POOL_BYTE_ARRAY, uint8_t); DEFAULT_OP_ARRAY_EQ(math, OP_EQUAL, POOL_INT_ARRAY, int); @@ -448,12 +486,18 @@ void Variant::evaluate(const Operator &p_op, const Variant &p_a, if (p_b.type == NIL) _RETURN(false); if (p_b.type == OBJECT) _RETURN(p_b._get_obj().obj != NULL); - _RETURN_FAIL; + + _RETURN(true); } CASE_TYPE(math, OP_NOT_EQUAL, BOOL) { - if (p_b.type != BOOL) + if (p_b.type != BOOL) { + if (p_b.type == NIL) + _RETURN(true); + _RETURN_FAIL; + } + _RETURN(p_a._data._bool != p_b._data._bool); } @@ -462,12 +506,16 @@ void Variant::evaluate(const Operator &p_op, const Variant &p_a, _RETURN((p_a._get_obj().obj != p_b._get_obj().obj)); if (p_b.type == NIL) _RETURN(p_a._get_obj().obj != NULL); + _RETURN_FAIL; } CASE_TYPE(math, OP_NOT_EQUAL, DICTIONARY) { - if (p_b.type != DICTIONARY) + if (p_b.type != DICTIONARY) { + if (p_b.type == NIL) + _RETURN(true); _RETURN_FAIL; + } const Dictionary *arr_a = reinterpret_cast<const Dictionary *>(p_a._data._mem); const Dictionary *arr_b = reinterpret_cast<const Dictionary *>(p_b._data._mem); @@ -476,8 +524,12 @@ void Variant::evaluate(const Operator &p_op, const Variant &p_a, } CASE_TYPE(math, OP_NOT_EQUAL, ARRAY) { - if (p_b.type != ARRAY) + if (p_b.type != ARRAY) { + if (p_b.type == NIL) + _RETURN(true); + _RETURN_FAIL; + } const Array *arr_a = reinterpret_cast<const Array *>(p_a._data._mem); const Array *arr_b = reinterpret_cast<const Array *>(p_b._data._mem); @@ -494,30 +546,29 @@ void Variant::evaluate(const Operator &p_op, const Variant &p_a, _RETURN(true); } - DEFAULT_OP_NUM(math, OP_NOT_EQUAL, INT, !=, _int); - DEFAULT_OP_NUM(math, OP_NOT_EQUAL, REAL, !=, _real); - DEFAULT_OP_STR(math, OP_NOT_EQUAL, STRING, !=, String); - DEFAULT_OP_LOCALMEM(math, OP_NOT_EQUAL, VECTOR2, !=, Vector2); - DEFAULT_OP_LOCALMEM(math, OP_NOT_EQUAL, RECT2, !=, Rect2); - DEFAULT_OP_PTRREF(math, OP_NOT_EQUAL, TRANSFORM2D, !=, _transform2d); - DEFAULT_OP_LOCALMEM(math, OP_NOT_EQUAL, VECTOR3, !=, Vector3); - DEFAULT_OP_LOCALMEM(math, OP_NOT_EQUAL, PLANE, !=, Plane); - DEFAULT_OP_LOCALMEM(math, OP_NOT_EQUAL, QUAT, !=, Quat); - DEFAULT_OP_PTRREF(math, OP_NOT_EQUAL, RECT3, !=, _rect3); - DEFAULT_OP_PTRREF(math, OP_NOT_EQUAL, BASIS, !=, _basis); - DEFAULT_OP_PTRREF(math, OP_NOT_EQUAL, TRANSFORM, !=, _transform); - DEFAULT_OP_LOCALMEM(math, OP_NOT_EQUAL, COLOR, !=, Color); - DEFAULT_OP_STR(math, OP_NOT_EQUAL, NODE_PATH, !=, NodePath); - DEFAULT_OP_LOCALMEM(math, OP_NOT_EQUAL, _RID, !=, RID); - - CASE_TYPE(math, OP_NOT_EQUAL, POOL_BYTE_ARRAY); - CASE_TYPE(math, OP_NOT_EQUAL, POOL_INT_ARRAY); - CASE_TYPE(math, OP_NOT_EQUAL, POOL_REAL_ARRAY); - CASE_TYPE(math, OP_NOT_EQUAL, POOL_STRING_ARRAY); - CASE_TYPE(math, OP_NOT_EQUAL, POOL_VECTOR2_ARRAY); - CASE_TYPE(math, OP_NOT_EQUAL, POOL_VECTOR3_ARRAY); - CASE_TYPE(math, OP_NOT_EQUAL, POOL_COLOR_ARRAY); - _RETURN_FAIL; + DEFAULT_OP_NUM_NULL(math, OP_NOT_EQUAL, INT, !=, _int); + DEFAULT_OP_NUM_NULL(math, OP_NOT_EQUAL, REAL, !=, _real); + DEFAULT_OP_STR_NULL(math, OP_NOT_EQUAL, STRING, !=, String); + DEFAULT_OP_LOCALMEM_NULL(math, OP_NOT_EQUAL, VECTOR2, !=, Vector2); + DEFAULT_OP_LOCALMEM_NULL(math, OP_NOT_EQUAL, RECT2, !=, Rect2); + DEFAULT_OP_PTRREF_NULL(math, OP_NOT_EQUAL, TRANSFORM2D, !=, _transform2d); + DEFAULT_OP_LOCALMEM_NULL(math, OP_NOT_EQUAL, VECTOR3, !=, Vector3); + DEFAULT_OP_LOCALMEM_NULL(math, OP_NOT_EQUAL, PLANE, !=, Plane); + DEFAULT_OP_LOCALMEM_NULL(math, OP_NOT_EQUAL, QUAT, !=, Quat); + DEFAULT_OP_PTRREF_NULL(math, OP_NOT_EQUAL, RECT3, !=, _rect3); + DEFAULT_OP_PTRREF_NULL(math, OP_NOT_EQUAL, BASIS, !=, _basis); + DEFAULT_OP_PTRREF_NULL(math, OP_NOT_EQUAL, TRANSFORM, !=, _transform); + DEFAULT_OP_LOCALMEM_NULL(math, OP_NOT_EQUAL, COLOR, !=, Color); + DEFAULT_OP_STR_NULL(math, OP_NOT_EQUAL, NODE_PATH, !=, NodePath); + DEFAULT_OP_LOCALMEM_NULL(math, OP_NOT_EQUAL, _RID, !=, RID); + + DEFAULT_OP_ARRAY_NEQ(math, OP_NOT_EQUAL, POOL_BYTE_ARRAY, uint8_t); + DEFAULT_OP_ARRAY_NEQ(math, OP_NOT_EQUAL, POOL_INT_ARRAY, int); + DEFAULT_OP_ARRAY_NEQ(math, OP_NOT_EQUAL, POOL_REAL_ARRAY, real_t); + DEFAULT_OP_ARRAY_NEQ(math, OP_NOT_EQUAL, POOL_STRING_ARRAY, String); + DEFAULT_OP_ARRAY_NEQ(math, OP_NOT_EQUAL, POOL_VECTOR2_ARRAY, Vector2); + DEFAULT_OP_ARRAY_NEQ(math, OP_NOT_EQUAL, POOL_VECTOR3_ARRAY, Vector3); + DEFAULT_OP_ARRAY_NEQ(math, OP_NOT_EQUAL, POOL_COLOR_ARRAY, Color); } SWITCH_OP(math, OP_LESS, p_a.type) { @@ -1169,54 +1220,486 @@ void Variant::evaluate(const Operator &p_op, const Variant &p_a, void Variant::set_named(const StringName &p_index, const Variant &p_value, bool *r_valid) { - if (type == OBJECT) { + bool valid = false; + switch (type) { + case VECTOR2: { + if (p_value.type == Variant::INT) { + Vector2 *v = reinterpret_cast<Vector2 *>(_data._mem); + if (p_index == CoreStringNames::singleton->x) { + v->x = p_value._data._int; + valid = true; + } else if (p_index == CoreStringNames::singleton->y) { + v->y = p_value._data._int; + valid = true; + } + } else if (p_value.type == Variant::REAL) { + Vector2 *v = reinterpret_cast<Vector2 *>(_data._mem); + if (p_index == CoreStringNames::singleton->x) { + v->x = p_value._data._real; + valid = true; + } else if (p_index == CoreStringNames::singleton->y) { + v->y = p_value._data._real; + valid = true; + } + } -#ifdef DEBUG_ENABLED - if (!_get_obj().obj) { - if (r_valid) - *r_valid = false; - return; - } else { + } break; + case RECT2: { - if (ScriptDebugger::get_singleton() && _get_obj().ref.is_null() && !ObjectDB::instance_validate(_get_obj().obj)) { - if (r_valid) - *r_valid = false; - return; + if (p_value.type == Variant::VECTOR2) { + Rect2 *v = reinterpret_cast<Rect2 *>(_data._mem); + //scalar name + if (p_index == CoreStringNames::singleton->position) { + v->position = *reinterpret_cast<const Vector2 *>(p_value._data._mem); + valid = true; + } else if (p_index == CoreStringNames::singleton->size) { + v->size = *reinterpret_cast<const Vector2 *>(p_value._data._mem); + valid = true; + } else if (p_index == CoreStringNames::singleton->end) { + v->size = *reinterpret_cast<const Vector2 *>(p_value._data._mem) - v->position; + valid = true; + } + } + } break; + case TRANSFORM2D: { + + if (p_value.type == Variant::VECTOR2) { + Transform2D *v = _data._transform2d; + if (p_index == CoreStringNames::singleton->x) { + v->elements[0] = *reinterpret_cast<const Vector2 *>(p_value._data._mem); + valid = true; + } else if (p_index == CoreStringNames::singleton->y) { + v->elements[1] = *reinterpret_cast<const Vector2 *>(p_value._data._mem); + valid = true; + } else if (p_index == CoreStringNames::singleton->origin) { + v->elements[2] = *reinterpret_cast<const Vector2 *>(p_value._data._mem); + valid = true; + } + } + + } break; + case VECTOR3: { + + if (p_value.type == Variant::INT) { + Vector3 *v = reinterpret_cast<Vector3 *>(_data._mem); + if (p_index == CoreStringNames::singleton->x) { + v->x = p_value._data._int; + valid = true; + } else if (p_index == CoreStringNames::singleton->y) { + v->y = p_value._data._int; + valid = true; + } else if (p_index == CoreStringNames::singleton->z) { + v->z = p_value._data._int; + valid = true; + } + } else if (p_value.type == Variant::REAL) { + Vector3 *v = reinterpret_cast<Vector3 *>(_data._mem); + if (p_index == CoreStringNames::singleton->x) { + v->x = p_value._data._real; + valid = true; + } else if (p_index == CoreStringNames::singleton->y) { + v->y = p_value._data._real; + valid = true; + } else if (p_index == CoreStringNames::singleton->z) { + v->z = p_value._data._real; + valid = true; + } + } + + } break; + case PLANE: { + + if (p_value.type == Variant::INT) { + Plane *v = reinterpret_cast<Plane *>(_data._mem); + if (p_index == CoreStringNames::singleton->x) { + v->normal.x = p_value._data._int; + valid = true; + } else if (p_index == CoreStringNames::singleton->y) { + v->normal.y = p_value._data._int; + valid = true; + } else if (p_index == CoreStringNames::singleton->z) { + v->normal.z = p_value._data._int; + valid = true; + } else if (p_index == CoreStringNames::singleton->d) { + v->d = p_value._data._int; + valid = true; + } + } else if (p_value.type == Variant::REAL) { + Plane *v = reinterpret_cast<Plane *>(_data._mem); + if (p_index == CoreStringNames::singleton->x) { + v->normal.x = p_value._data._real; + valid = true; + } else if (p_index == CoreStringNames::singleton->y) { + v->normal.y = p_value._data._real; + valid = true; + } else if (p_index == CoreStringNames::singleton->z) { + v->normal.z = p_value._data._real; + valid = true; + } else if (p_index == CoreStringNames::singleton->d) { + v->d = p_value._data._real; + valid = true; + } + + } else if (p_value.type == Variant::VECTOR3) { + Plane *v = reinterpret_cast<Plane *>(_data._mem); + if (p_index == CoreStringNames::singleton->normal) { + v->normal = *reinterpret_cast<const Vector3 *>(p_value._data._mem); + valid = true; + } + } + + } break; + case QUAT: { + + if (p_value.type == Variant::INT) { + Quat *v = reinterpret_cast<Quat *>(_data._mem); + if (p_index == CoreStringNames::singleton->x) { + v->x = p_value._data._int; + valid = true; + } else if (p_index == CoreStringNames::singleton->y) { + v->y = p_value._data._int; + valid = true; + } else if (p_index == CoreStringNames::singleton->z) { + v->z = p_value._data._int; + valid = true; + } else if (p_index == CoreStringNames::singleton->w) { + v->w = p_value._data._int; + valid = true; + } + } else if (p_value.type == Variant::REAL) { + Quat *v = reinterpret_cast<Quat *>(_data._mem); + if (p_index == CoreStringNames::singleton->x) { + v->x = p_value._data._real; + valid = true; + } else if (p_index == CoreStringNames::singleton->y) { + v->y = p_value._data._real; + valid = true; + } else if (p_index == CoreStringNames::singleton->z) { + v->z = p_value._data._real; + valid = true; + } else if (p_index == CoreStringNames::singleton->w) { + v->w = p_value._data._real; + valid = true; + } + } + + } break; // 10 + case RECT3: { + + if (p_value.type == Variant::VECTOR3) { + Rect3 *v = _data._rect3; + //scalar name + if (p_index == CoreStringNames::singleton->position) { + v->position = *reinterpret_cast<const Vector3 *>(p_value._data._mem); + valid = true; + } else if (p_index == CoreStringNames::singleton->size) { + v->size = *reinterpret_cast<const Vector3 *>(p_value._data._mem); + valid = true; + } else if (p_index == CoreStringNames::singleton->end) { + v->size = *reinterpret_cast<const Vector3 *>(p_value._data._mem) - v->position; + valid = true; + } + } + } break; + case BASIS: { + + if (p_value.type == Variant::VECTOR3) { + Basis *v = _data._basis; + //scalar name + if (p_index == CoreStringNames::singleton->x) { + v->set_axis(0, *reinterpret_cast<const Vector3 *>(p_value._data._mem)); + valid = true; + } else if (p_index == CoreStringNames::singleton->y) { + v->set_axis(1, *reinterpret_cast<const Vector3 *>(p_value._data._mem)); + valid = true; + } else if (p_index == CoreStringNames::singleton->z) { + v->set_axis(2, *reinterpret_cast<const Vector3 *>(p_value._data._mem)); + valid = true; + } + } + } break; + case TRANSFORM: { + + if (p_value.type == Variant::BASIS && p_index == CoreStringNames::singleton->basis) { + _data._transform->basis = *p_value._data._basis; + valid = true; + } else if (p_value.type == Variant::VECTOR3 && p_index == CoreStringNames::singleton->origin) { + _data._transform->origin = *reinterpret_cast<const Vector3 *>(p_value._data._mem); + valid = true; + } + + } break; + case COLOR: { + + if (p_value.type == Variant::INT) { + Color *v = reinterpret_cast<Color *>(_data._mem); + if (p_index == CoreStringNames::singleton->r) { + v->r = p_value._data._int; + valid = true; + } else if (p_index == CoreStringNames::singleton->g) { + v->g = p_value._data._int; + valid = true; + } else if (p_index == CoreStringNames::singleton->b) { + v->b = p_value._data._int; + valid = true; + } else if (p_index == CoreStringNames::singleton->a) { + v->a = p_value._data._int; + valid = true; + } else if (p_index == CoreStringNames::singleton->r8) { + v->r = p_value._data._int / 255.0; + valid = true; + } else if (p_index == CoreStringNames::singleton->g8) { + v->g = p_value._data._int / 255.0; + valid = true; + } else if (p_index == CoreStringNames::singleton->b8) { + v->b = p_value._data._int / 255.0; + valid = true; + } else if (p_index == CoreStringNames::singleton->a8) { + v->a = p_value._data._int / 255.0; + valid = true; + } else if (p_index == CoreStringNames::singleton->h) { + v->set_hsv(p_value._data._int, v->get_s(), v->get_v()); + valid = true; + } else if (p_index == CoreStringNames::singleton->s) { + v->set_hsv(v->get_h(), p_value._data._int, v->get_v()); + valid = true; + } else if (p_index == CoreStringNames::singleton->v) { + v->set_hsv(v->get_h(), v->get_v(), p_value._data._int); + valid = true; + } + } else if (p_value.type == Variant::REAL) { + Color *v = reinterpret_cast<Color *>(_data._mem); + if (p_index == CoreStringNames::singleton->r) { + v->r = p_value._data._real; + valid = true; + } else if (p_index == CoreStringNames::singleton->g) { + v->g = p_value._data._real; + valid = true; + } else if (p_index == CoreStringNames::singleton->b) { + v->b = p_value._data._real; + valid = true; + } else if (p_index == CoreStringNames::singleton->a) { + v->a = p_value._data._real; + valid = true; + } else if (p_index == CoreStringNames::singleton->r8) { + v->r = p_value._data._real / 255.0; + valid = true; + } else if (p_index == CoreStringNames::singleton->g8) { + v->g = p_value._data._real / 255.0; + valid = true; + } else if (p_index == CoreStringNames::singleton->b8) { + v->b = p_value._data._real / 255.0; + valid = true; + } else if (p_index == CoreStringNames::singleton->a8) { + v->a = p_value._data._real / 255.0; + valid = true; + } else if (p_index == CoreStringNames::singleton->h) { + v->set_hsv(p_value._data._real, v->get_s(), v->get_v()); + valid = true; + } else if (p_index == CoreStringNames::singleton->s) { + v->set_hsv(v->get_h(), p_value._data._real, v->get_v()); + valid = true; + } else if (p_index == CoreStringNames::singleton->v) { + v->set_hsv(v->get_h(), v->get_v(), p_value._data._real); + valid = true; + } + } + } break; + case OBJECT: { + +#ifdef DEBUG_ENABLED + if (!_get_obj().obj) { + break; + } else if (ScriptDebugger::get_singleton() && _get_obj().ref.is_null() && !ObjectDB::instance_validate(_get_obj().obj)) { + break; } - } #endif - _get_obj().obj->set(p_index, p_value, r_valid); - return; + _get_obj().obj->set(p_index, p_value, &valid); + + } break; + default: { + set(p_index.operator String(), p_value, &valid); + } break; } - set(p_index.operator String(), p_value, r_valid); + if (r_valid) { + *r_valid = valid; + } } Variant Variant::get_named(const StringName &p_index, bool *r_valid) const { - if (type == OBJECT) { + if (r_valid) { + *r_valid = true; + } + switch (type) { + case VECTOR2: { + const Vector2 *v = reinterpret_cast<const Vector2 *>(_data._mem); + if (p_index == CoreStringNames::singleton->x) { + return v->x; + } else if (p_index == CoreStringNames::singleton->y) { + return v->y; + } -#ifdef DEBUG_ENABLED - if (!_get_obj().obj) { - if (r_valid) - *r_valid = false; - return "Instance base is null."; - } else { + } break; + case RECT2: { - if (ScriptDebugger::get_singleton() && _get_obj().ref.is_null() && !ObjectDB::instance_validate(_get_obj().obj)) { + const Rect2 *v = reinterpret_cast<const Rect2 *>(_data._mem); + //scalar name + if (p_index == CoreStringNames::singleton->position) { + return v->position; + } else if (p_index == CoreStringNames::singleton->size) { + return v->size; + } else if (p_index == CoreStringNames::singleton->end) { + return v->size + v->position; + } + } break; + case TRANSFORM2D: { + + const Transform2D *v = _data._transform2d; + if (p_index == CoreStringNames::singleton->x) { + return v->elements[0]; + } else if (p_index == CoreStringNames::singleton->y) { + return v->elements[1]; + } else if (p_index == CoreStringNames::singleton->origin) { + return v->elements[2]; + } + + } break; + case VECTOR3: { + + const Vector3 *v = reinterpret_cast<const Vector3 *>(_data._mem); + if (p_index == CoreStringNames::singleton->x) { + return v->x; + } else if (p_index == CoreStringNames::singleton->y) { + return v->y; + } else if (p_index == CoreStringNames::singleton->z) { + return v->z; + } + + } break; + case PLANE: { + + const Plane *v = reinterpret_cast<const Plane *>(_data._mem); + if (p_index == CoreStringNames::singleton->x) { + return v->normal.x; + } else if (p_index == CoreStringNames::singleton->y) { + return v->normal.y; + } else if (p_index == CoreStringNames::singleton->z) { + return v->normal.z; + } else if (p_index == CoreStringNames::singleton->d) { + return v->d; + } else if (p_index == CoreStringNames::singleton->normal) { + return v->normal; + } + + } break; + case QUAT: { + + const Quat *v = reinterpret_cast<const Quat *>(_data._mem); + if (p_index == CoreStringNames::singleton->x) { + return v->x; + } else if (p_index == CoreStringNames::singleton->y) { + return v->y; + } else if (p_index == CoreStringNames::singleton->z) { + return v->z; + } else if (p_index == CoreStringNames::singleton->w) { + return v->w; + } + + } break; // 10 + case RECT3: { + + const Rect3 *v = _data._rect3; + //scalar name + if (p_index == CoreStringNames::singleton->position) { + return v->position; + } else if (p_index == CoreStringNames::singleton->size) { + return v->size; + } else if (p_index == CoreStringNames::singleton->end) { + return v->size + v->position; + } + } break; + case BASIS: { + + const Basis *v = _data._basis; + //scalar name + if (p_index == CoreStringNames::singleton->x) { + return v->get_axis(0); + } else if (p_index == CoreStringNames::singleton->y) { + return v->get_axis(1); + } else if (p_index == CoreStringNames::singleton->z) { + return v->get_axis(2); + } + + } break; + case TRANSFORM: { + + if (p_index == CoreStringNames::singleton->basis) { + return _data._transform->basis; + } else if (p_index == CoreStringNames::singleton->origin) { + return _data._transform->origin; + } + + } break; + case COLOR: { + + const Color *v = reinterpret_cast<const Color *>(_data._mem); + if (p_index == CoreStringNames::singleton->r) { + return v->r; + } else if (p_index == CoreStringNames::singleton->g) { + return v->g; + } else if (p_index == CoreStringNames::singleton->b) { + return v->b; + } else if (p_index == CoreStringNames::singleton->a) { + return v->a; + } else if (p_index == CoreStringNames::singleton->r8) { + return int(v->r * 255.0); + } else if (p_index == CoreStringNames::singleton->g8) { + return int(v->g * 255.0); + } else if (p_index == CoreStringNames::singleton->b8) { + return int(v->b * 255.0); + } else if (p_index == CoreStringNames::singleton->a8) { + return int(v->a * 255.0); + } else if (p_index == CoreStringNames::singleton->h) { + return v->get_h(); + } else if (p_index == CoreStringNames::singleton->s) { + return v->get_s(); + } else if (p_index == CoreStringNames::singleton->v) { + return v->get_v(); + } + } break; + case OBJECT: { + +#ifdef DEBUG_ENABLED + if (!_get_obj().obj) { if (r_valid) *r_valid = false; - return "Attempted use of stray pointer object."; + return "Instance base is null."; + } else { + + if (ScriptDebugger::get_singleton() && _get_obj().ref.is_null() && !ObjectDB::instance_validate(_get_obj().obj)) { + if (r_valid) + *r_valid = false; + return "Attempted use of stray pointer object."; + } } - } #endif - return _get_obj().obj->get(p_index, r_valid); + return _get_obj().obj->get(p_index, r_valid); + + } break; + default: { + return get(p_index.operator String(), r_valid); + } } - return get(p_index.operator String(), r_valid); + if (r_valid) { + *r_valid = false; + } + return Variant(); } #define DEFAULT_OP_ARRAY_CMD(m_name, m_type, skip_test, cmd) \ diff --git a/doc/Makefile b/doc/Makefile index 4914c657d2..2f9fefe794 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -1,5 +1,5 @@ BASEDIR = $(CURDIR) -CLASSES = $(BASEDIR)/base/classes.xml +CLASSES = $(BASEDIR)/classes/ $(BASEDIR)/../modules/ OUTPUTDIR = $(BASEDIR)/_build TOOLSDIR = $(BASEDIR)/tools @@ -24,5 +24,5 @@ rst: rm -rf $(OUTPUTDIR)/rst mkdir -p $(OUTPUTDIR)/rst pushd $(OUTPUTDIR)/rst - python2 $(TOOLSDIR)/makerst.py $(CLASSES) + python $(TOOLSDIR)/makerst.py $(CLASSES) popd diff --git a/doc/classes/@Global Scope.xml b/doc/classes/@Global Scope.xml index a8fd377ecf..0d509e6e51 100644 --- a/doc/classes/@Global Scope.xml +++ b/doc/classes/@Global Scope.xml @@ -29,6 +29,8 @@ <member name="Geometry" type="Geometry" setter="" getter=""> [Geometry] singleton </member> + <member name="GodotSharp" type="GodotSharp" setter="" getter=""> + </member> <member name="IP" type="IP" setter="" getter=""> [IP] singleton </member> @@ -1013,7 +1015,7 @@ </constant> <constant name="ERR_TIMEOUT" value="24"> </constant> - <constant name="ERR_CANT_AQUIRE_RESOURCE" value="28"> + <constant name="ERR_CANT_ACQUIRE_RESOURCE" value="28"> </constant> <constant name="ERR_INVALID_DATA" value="30"> </constant> diff --git a/doc/classes/@VisualScript.xml b/doc/classes/@VisualScript.xml index 2392e3ecca..fe40bc45e9 100644 --- a/doc/classes/@VisualScript.xml +++ b/doc/classes/@VisualScript.xml @@ -1,8 +1,10 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="@VisualScript" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Built-in visual script functions. </brief_description> <description> + A list of built-in visual script functions, see [VisualScriptBuiltinFunc] and [VisualScript]. </description> <tutorials> </tutorials> diff --git a/doc/classes/ARVRAnchor.xml b/doc/classes/ARVRAnchor.xml index 4ff39390b2..6e11034073 100644 --- a/doc/classes/ARVRAnchor.xml +++ b/doc/classes/ARVRAnchor.xml @@ -34,6 +34,13 @@ Returns true if the anchor is being tracked and false if no anchor with this id is currently known. </description> </method> + <method name="get_plane" qualifiers="const"> + <return type="Plane"> + </return> + <description> + Returns a plane aligned with our anchor, handy for intersection testing + </description> + </method> <method name="get_size" qualifiers="const"> <return type="Vector3"> </return> diff --git a/doc/classes/ARVRInterface.xml b/doc/classes/ARVRInterface.xml index fad9571628..9aed6c96ef 100644 --- a/doc/classes/ARVRInterface.xml +++ b/doc/classes/ARVRInterface.xml @@ -12,6 +12,20 @@ <demos> </demos> <methods> + <method name="get_anchor_detection_is_enabled" qualifiers="const"> + <return type="bool"> + </return> + <description> + Returns true if achor detection is enabled (AR only). + </description> + </method> + <method name="get_capabilities" qualifiers="const"> + <return type="int"> + </return> + <description> + Returns a combination of flags providing information about the capabilities of this interface. + </description> + </method> <method name="get_name" qualifiers="const"> <return type="String"> </return> @@ -26,11 +40,11 @@ Returns the resolution at which we should render our intermediate results before things like lens distortion are applied by the VR platform. </description> </method> - <method name="hmd_is_present"> - <return type="bool"> + <method name="get_tracking_status" qualifiers="const"> + <return type="int" enum="ARVRInterface.Tracking_status"> </return> <description> - Returns true if an HMD is available for this interface. + If supported, returns the status of our tracking. This will allow you to provide feedback to the user whether there are issues with positional tracking. </description> </method> <method name="initialize"> @@ -51,34 +65,45 @@ Returns true if this interface is active. </description> </method> - <method name="is_installed"> + <method name="is_primary"> <return type="bool"> </return> <description> - Returns true if this interface has been installed. Say your game is designed to work with OpenVR so you are using the OpenVR interface but the user hasn't installed SteamVR, this would return false. + Returns true if this interface is currently the primary interface (the interface responsible for showing the output). </description> </method> - <method name="is_primary"> + <method name="is_stereo"> <return type="bool"> </return> <description> - Returns true if this interface is currently the primary interface (the interface responsible for showing the output). + Returns true if the current output of this interface is in stereo. </description> </method> - <method name="set_is_primary"> + <method name="set_anchor_detection_is_enabled"> <return type="void"> </return> <argument index="0" name="enable" type="bool"> </argument> <description> - Set this interface to the primary interface (unset the old one). + Enables anchor detection, this is used on AR interfaces and enables the extra logic that will detect planes, features, objects, etc. and adds/modifies anchor points. </description> </method> - <method name="supports_hmd"> - <return type="bool"> + <method name="set_is_initialized"> + <return type="void"> + </return> + <argument index="0" name="initialized" type="bool"> + </argument> + <description> + Initialize/uninitialize this interface (same effect as calling initialize/uninitialize). + </description> + </method> + <method name="set_is_primary"> + <return type="void"> </return> + <argument index="0" name="enable" type="bool"> + </argument> <description> - Returns true if this interface supports HMDs and by extension uses stereo scopic rendering. + Set this interface to the primary interface (unset the old one). </description> </method> <method name="uninitialize"> @@ -90,10 +115,32 @@ </method> </methods> <members> - <member name="primary" type="bool" setter="set_is_primary" getter="is_primary"> + <member name="ar_is_anchor_detection_enabled" type="bool" setter="set_anchor_detection_is_enabled" getter="get_anchor_detection_is_enabled"> + On an AR interface, is our anchor detection enabled? + </member> + <member name="interface_is_initialized" type="bool" setter="set_is_initialized" getter="is_initialized"> + Has this interface been initialized? + </member> + <member name="interface_is_primary" type="bool" setter="set_is_primary" getter="is_primary"> + Is this our primary interface? </member> </members> <constants> + <constant name="ARVR_NONE" value="0"> + No ARVR capabilities. + </constant> + <constant name="ARVR_MONO" value="1"> + This interface can work with normal rendering output (non-HMD based AR). + </constant> + <constant name="ARVR_STEREO" value="2"> + This interface supports stereoscopic rendering. + </constant> + <constant name="ARVR_AR" value="4"> + This interface support AR (video background and real world tracking). + </constant> + <constant name="ARVR_EXTERNAL" value="8"> + This interface outputs to an external device, if the main viewport is used the on screen output is an unmodified buffer of either the left or right eye (stretched if the viewport size is not changed to the same aspect ratio of get_recommended_render_targetsize. Using a seperate viewport node frees up the main viewport for other purposes. + </constant> <constant name="EYE_MONO" value="0"> Mono output, this is mostly used internally when retrieving positioning information for our camera node or when stereo scopic rendering is not supported. </constant> @@ -103,5 +150,20 @@ <constant name="EYE_RIGHT" value="2"> Right eye output, this is mostly used internally when rendering the image for the right eye and obtaining positioning and projection information. </constant> + <constant name="ARVR_NORMAL_TRACKING" value="0"> + Tracking is behaving as expected. + </constant> + <constant name="ARVR_EXCESSIVE_MOTION" value="1"> + Tracking is hindered by excessive motion, player is moving faster then tracking can keep up. + </constant> + <constant name="ARVR_INSUFFICIENT_FEATURES" value="2"> + Tracking is hindered by insufficient features, it's too dark (for camera based tracking), player is blocked, etc. + </constant> + <constant name="ARVR_UNKNOWN_TRACKING" value="3"> + We don't know the status of the tracking or this interface does not provide feedback. + </constant> + <constant name="ARVR_NOT_TRACKING" value="4"> + Tracking is not functional (camera not plugged in or obscured, lighthouses turned off, etc.) + </constant> </constants> </class> diff --git a/doc/classes/ARVRScriptInterface.xml b/doc/classes/ARVRScriptInterface.xml deleted file mode 100644 index 54415539e0..0000000000 --- a/doc/classes/ARVRScriptInterface.xml +++ /dev/null @@ -1,109 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" ?> -<class name="ARVRScriptInterface" inherits="ARVRInterface" category="Core" version="3.0.alpha.custom_build"> - <brief_description> - Base class for GDNative based ARVR interfaces. - </brief_description> - <description> - This class is used as a base class/interface class for implementing GDNative based ARVR interfaces and as a result exposes more of the internals of the ARVR server. - </description> - <tutorials> - </tutorials> - <demos> - </demos> - <methods> - <method name="_get_projection_for_eye" qualifiers="virtual"> - <return type="void"> - </return> - <description> - Should return the projection 4x4 matrix for the requested eye. - </description> - </method> - <method name="commit_for_eye" qualifiers="virtual"> - <return type="void"> - </return> - <argument index="0" name="eye" type="int"> - </argument> - <argument index="1" name="render_target" type="RID"> - </argument> - <description> - Outputs a finished render buffer to the AR/VR device for the given eye. - </description> - </method> - <method name="get_recommended_render_targetsize" qualifiers="virtual"> - <return type="Vector2"> - </return> - <description> - Returns the size at which we should render our scene to get optimal quality on the output device. - </description> - </method> - <method name="get_transform_for_eye" qualifiers="virtual"> - <return type="Transform"> - </return> - <argument index="0" name="eye" type="int"> - </argument> - <argument index="1" name="cam_transform" type="Transform"> - </argument> - <description> - Get the location and orientation transform used when rendering a specific eye. - </description> - </method> - <method name="hmd_is_present" qualifiers="virtual"> - <return type="bool"> - </return> - <description> - Return true is an HMD is available. - </description> - </method> - <method name="initialize" qualifiers="virtual"> - <return type="bool"> - </return> - <description> - Initialize this interface. - </description> - </method> - <method name="is_initialized" qualifiers="virtual"> - <return type="bool"> - </return> - <description> - Returns true if this interface has been initialized and is active. - </description> - </method> - <method name="is_installed" qualifiers="virtual"> - <return type="bool"> - </return> - <description> - Returns true if the required middleware is installed. - </description> - </method> - <method name="is_stereo" qualifiers="virtual"> - <return type="bool"> - </return> - <description> - Returns true if we require stereoscopic rendering for this interface. - </description> - </method> - <method name="process" qualifiers="virtual"> - <return type="void"> - </return> - <description> - Gets called before rendering each frame so tracking data gets updated in time. - </description> - </method> - <method name="supports_hmd" qualifiers="virtual"> - <return type="bool"> - </return> - <description> - Returns true if this interface supports HMDs. - </description> - </method> - <method name="uninitialize" qualifiers="virtual"> - <return type="void"> - </return> - <description> - Turn this interface off. - </description> - </method> - </methods> - <constants> - </constants> -</class> diff --git a/doc/classes/ARVRServer.xml b/doc/classes/ARVRServer.xml index 282f25bec9..5e1055d568 100644 --- a/doc/classes/ARVRServer.xml +++ b/doc/classes/ARVRServer.xml @@ -14,12 +14,28 @@ <method name="add_interface"> <return type="void"> </return> - <argument index="0" name="arg0" type="ARVRInterface"> + <argument index="0" name="interface" type="ARVRInterface"> </argument> <description> Mostly exposed for GDNative based interfaces, this is called to register an available interface with the AR/VR server. </description> </method> + <method name="center_on_hmd"> + <return type="void"> + </return> + <argument index="0" name="ignore_tilt" type="bool"> + </argument> + <argument index="1" name="keep_height" type="bool"> + </argument> + <description> + This is a really important function to understand correctly. AR and VR platforms all handle positioning slightly differently. + For platforms that do not offer spatial tracking our origin point (0,0,0) is the location of our HMD but you have little control over the direction the player is facing in the real world. + For platforms that do offer spatial tracking our origin point depends very much on the system. For OpenVR our origin point is usually the center of the tracking space, on the ground. For other platforms its often the location of the tracking camera. + This method allows you to center our tracker on the location of the HMD, it will take the current location of the HMD and use that to adjust all our tracking data in essence realigning the real world to your players current position in your game world. + For this method to produce usable results tracking information should be available and this often takes a few frames after starting your game. + You should call this method after a few seconds have passed, when the user requests a realignment of the display holding a designated button on a controller for a short period of time, and when implementing a teleport mechanism. + </description> + </method> <method name="find_interface" qualifiers="const"> <return type="ARVRInterface"> </return> @@ -78,32 +94,16 @@ <method name="remove_interface"> <return type="void"> </return> - <argument index="0" name="arg0" type="ARVRInterface"> + <argument index="0" name="interface" type="ARVRInterface"> </argument> <description> Removes a registered interface, again exposed mostly for GDNative based interfaces. </description> </method> - <method name="request_reference_frame"> - <return type="void"> - </return> - <argument index="0" name="ignore_tilt" type="bool"> - </argument> - <argument index="1" name="keep_height" type="bool"> - </argument> - <description> - This is a really important function to understand correctly. AR and VR platforms all handle positioning slightly differently. - For platforms that do not offer spatial tracking our origin point (0,0,0) is the location of our HMD but you have little control over the direction the player is facing in the real world. - For platforms that do offer spatial tracking our origin point depends very much on the system. For OpenVR our origin point is usually the center of the tracking space, on the ground. For other platforms its often the location of the tracking camera. - This method allows you to create a reference frame, it will take the current location of the HMD and use that to adjust all our tracking data in essence realigning the real world to your players current position in your game world. - For this method to produce usable results tracking information should be available and this often takes a few frames after starting your game. - You should call this method after a few seconds have passed, when the user requests a realignment of the display holding a designated button on a controller for a short period of time, and when implementing a teleport mechanism. - </description> - </method> <method name="set_primary_interface"> <return type="void"> </return> - <argument index="0" name="arg0" type="ARVRInterface"> + <argument index="0" name="interface" type="ARVRInterface"> </argument> <description> Changes the primary interface to the specified interface. Again mostly exposed for GDNative interfaces. @@ -178,7 +178,7 @@ Used internally to filter trackers of any known type. </constant> <constant name="TRACKER_ANY" value="255"> - Used interally to select all trackers. + Used internally to select all trackers. </constant> </constants> </class> diff --git a/doc/classes/AStar.xml b/doc/classes/AStar.xml index d94b8355ba..9b15afbbd4 100644 --- a/doc/classes/AStar.xml +++ b/doc/classes/AStar.xml @@ -39,7 +39,7 @@ </return> <argument index="0" name="id" type="int"> </argument> - <argument index="1" name="pos" type="Vector3"> + <argument index="1" name="position" type="Vector3"> </argument> <argument index="2" name="weight_scale" type="float" default="1.0"> </argument> @@ -113,19 +113,19 @@ <method name="get_closest_point" qualifiers="const"> <return type="int"> </return> - <argument index="0" name="to_pos" type="Vector3"> + <argument index="0" name="to_position" type="Vector3"> </argument> <description> - Returns the id of the closest point to [code]to_pos[/code]. Returns -1 if there are no points in the points pool. + Returns the id of the closest point to [code]to_position[/code]. Returns -1 if there are no points in the points pool. </description> </method> - <method name="get_closest_pos_in_segment" qualifiers="const"> + <method name="get_closest_position_in_segment" qualifiers="const"> <return type="Vector3"> </return> - <argument index="0" name="to_pos" type="Vector3"> + <argument index="0" name="to_position" type="Vector3"> </argument> <description> - Returns the closest position to [code]to_pos[/code] that resides inside a segment between two connected points. + Returns the closest position to [code]to_position[/code] that resides inside a segment between two connected points. [codeblock] var as = AStar.new() @@ -134,7 +134,7 @@ as.connect_points(1, 2) - var res = as.get_closest_pos_in_segment(Vector3(3,3,0)) # returns (0, 3, 0) + var res = as.get_closest_position_in_segment(Vector3(3,3,0)) # returns (0, 3, 0) [/codeblock] The result is in the segment that goes from [code]y=0[/code] to [code]y=5[/code]. It's the closest position in the segment to the given point. </description> @@ -178,7 +178,7 @@ Returns an array with the points that are in the path found by AStar between the given points. The array is ordered from the starting point to the ending point of the path. </description> </method> - <method name="get_point_pos" qualifiers="const"> + <method name="get_point_position" qualifiers="const"> <return type="Vector3"> </return> <argument index="0" name="id" type="int"> diff --git a/doc/classes/AcceptDialog.xml b/doc/classes/AcceptDialog.xml index 4244e66a35..f87a40b8aa 100644 --- a/doc/classes/AcceptDialog.xml +++ b/doc/classes/AcceptDialog.xml @@ -92,8 +92,10 @@ </methods> <members> <member name="dialog_hide_on_ok" type="bool" setter="set_hide_on_ok" getter="get_hide_on_ok"> + If [code]true[/code] the dialog is hidden when accepted. Default value: [code]true[/code]. </member> <member name="dialog_text" type="String" setter="set_text" getter="get_text"> + The text displayed by this dialog. </member> </members> <signals> diff --git a/doc/classes/AnimatedSprite.xml b/doc/classes/AnimatedSprite.xml index f8663e90e0..dce7bf283a 100644 --- a/doc/classes/AnimatedSprite.xml +++ b/doc/classes/AnimatedSprite.xml @@ -4,7 +4,7 @@ Sprite node that can use multiple textures for animation. </brief_description> <description> - Sprite node that can use multiple textures for animation. + Animations are created using a [SpriteFrames] resource, which can be configured in the editor via the SpriteFrames panel. </description> <tutorials> </tutorials> @@ -149,31 +149,39 @@ </methods> <members> <member name="animation" type="String" setter="set_animation" getter="get_animation"> + The current animation from the [code]frames[/code] resource. If this value changes, the [code]frame[/code] counter is reset. </member> <member name="centered" type="bool" setter="set_centered" getter="is_centered"> + If [code]true[/code] texture will be centered. Default value: [code]true[/code]. </member> <member name="flip_h" type="bool" setter="set_flip_h" getter="is_flipped_h"> + If [code]true[/code] texture is flipped horizontally. Default value: [code]false[/code]. </member> <member name="flip_v" type="bool" setter="set_flip_v" getter="is_flipped_v"> + If [code]true[/code] texture is flipped vertically. Default value: [code]false[/code]. </member> <member name="frame" type="int" setter="set_frame" getter="get_frame"> + The displayed animation frame's index. </member> <member name="frames" type="SpriteFrames" setter="set_sprite_frames" getter="get_sprite_frames"> + The [SpriteFrames] resource containing the animation(s). </member> <member name="offset" type="Vector2" setter="set_offset" getter="get_offset"> + The texture's drawing offset. </member> <member name="playing" type="bool" setter="_set_playing" getter="_is_playing"> + If [code]true[/code] the [member animation] is currently playing. </member> </members> <signals> <signal name="animation_finished"> <description> - Emitted when the animation is finished (when it plays the last frame). If the animation is looping, this signal is emitted every time the last frame is drawn, before looping. + Emitted when the animation is finished (when it plays the last frame). If the animation is looping, this signal is emitted every time the last frame is drawn. </description> </signal> <signal name="frame_changed"> <description> - Emitted when frame is changed. + Emitted when [member frame] changed. </description> </signal> </signals> diff --git a/doc/classes/AnimatedSprite3D.xml b/doc/classes/AnimatedSprite3D.xml index 4e28f7de8d..b0bb7bb6ab 100644 --- a/doc/classes/AnimatedSprite3D.xml +++ b/doc/classes/AnimatedSprite3D.xml @@ -1,8 +1,10 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="AnimatedSprite3D" inherits="SpriteBase3D" category="Core" version="3.0.alpha.custom_build"> <brief_description> + 2D sprite node in 3D world, that can use multiple 2D textures for animation. </brief_description> <description> + Animations are created using a [SpriteFrames] resource, which can be configured in the editor via the SpriteFrames panel. </description> <tutorials> </tutorials> @@ -83,18 +85,22 @@ </methods> <members> <member name="animation" type="String" setter="set_animation" getter="get_animation"> + The current animation from the [code]frames[/code] resource. If this value changes, the [code]frame[/code] counter is reset. </member> <member name="frame" type="int" setter="set_frame" getter="get_frame"> + The displayed animation frame's index. </member> <member name="frames" type="SpriteFrames" setter="set_sprite_frames" getter="get_sprite_frames"> + The [SpriteFrames] resource containing the animation(s). </member> <member name="playing" type="bool" setter="_set_playing" getter="_is_playing"> + If [code]true[/code] the [member animation] is currently playing. </member> </members> <signals> <signal name="frame_changed"> <description> - Emitted when frame is changed. + Emitted when [member frame] changed. </description> </signal> </signals> diff --git a/doc/classes/Animation.xml b/doc/classes/Animation.xml index b80edb24da..d853345268 100644 --- a/doc/classes/Animation.xml +++ b/doc/classes/Animation.xml @@ -17,7 +17,7 @@ </return> <argument index="0" name="type" type="int" enum="Animation.TrackType"> </argument> - <argument index="1" name="at_pos" type="int" default="-1"> + <argument index="1" name="at_position" type="int" default="-1"> </argument> <description> Add a track to the Animation. The track type must be specified as any of the values in the TYPE_* enumeration. @@ -281,12 +281,12 @@ Remove a key by index in a given track. </description> </method> - <method name="track_remove_key_at_pos"> + <method name="track_remove_key_at_position"> <return type="void"> </return> <argument index="0" name="idx" type="int"> </argument> - <argument index="1" name="pos" type="float"> + <argument index="1" name="position" type="float"> </argument> <description> Remove a key by position (seconds) in a given track. @@ -368,9 +368,9 @@ </argument> <argument index="1" name="time" type="float"> </argument> - <argument index="2" name="loc" type="Vector3"> + <argument index="2" name="location" type="Vector3"> </argument> - <argument index="3" name="rot" type="Quat"> + <argument index="3" name="rotation" type="Quat"> </argument> <argument index="4" name="scale" type="Vector3"> </argument> diff --git a/doc/classes/AnimationPlayer.xml b/doc/classes/AnimationPlayer.xml index 746462380b..70b880eb43 100644 --- a/doc/classes/AnimationPlayer.xml +++ b/doc/classes/AnimationPlayer.xml @@ -129,7 +129,7 @@ Get the length (in seconds) of the currently being played animation. </description> </method> - <method name="get_current_animation_pos" qualifiers="const"> + <method name="get_current_animation_position" qualifiers="const"> <return type="float"> </return> <description> @@ -143,7 +143,7 @@ Return the default blend time between animations. </description> </method> - <method name="get_pos" qualifiers="const"> + <method name="get_position" qualifiers="const"> <return type="float"> </return> <description> @@ -245,7 +245,7 @@ <method name="seek"> <return type="void"> </return> - <argument index="0" name="pos_sec" type="float"> + <argument index="0" name="seconds" type="float"> </argument> <argument index="1" name="update" type="bool" default="false"> </argument> @@ -380,11 +380,11 @@ </signal> </signals> <constants> - <constant name="ANIMATION_PROCESS_FIXED" value="0"> - Process animation on fixed process. This is specially useful when animating kinematic bodies. + <constant name="ANIMATION_PROCESS_PHYSICS" value="0"> + Process animation during the physics process. This is specially useful when animating physics bodies. </constant> <constant name="ANIMATION_PROCESS_IDLE" value="1"> - Process animation on idle process. + Process animation during the idle process. </constant> </constants> </class> diff --git a/doc/classes/AnimationTreePlayer.xml b/doc/classes/AnimationTreePlayer.xml index e128b4d865..b92e59b902 100644 --- a/doc/classes/AnimationTreePlayer.xml +++ b/doc/classes/AnimationTreePlayer.xml @@ -271,7 +271,7 @@ Return the input source for a given node input. </description> </method> - <method name="node_get_pos" qualifiers="const"> + <method name="node_get_position" qualifiers="const"> <return type="Vector2"> </return> <argument index="0" name="id" type="String"> @@ -300,12 +300,12 @@ Rename a node in the graph. </description> </method> - <method name="node_set_pos"> + <method name="node_set_position"> <return type="void"> </return> <argument index="0" name="id" type="String"> </argument> - <argument index="1" name="screen_pos" type="Vector2"> + <argument index="1" name="screen_position" type="Vector2"> </argument> <description> Sets position of a node in the graph given its name and position. @@ -531,7 +531,7 @@ </return> <argument index="0" name="id" type="String"> </argument> - <argument index="1" name="pos_sec" type="float"> + <argument index="1" name="seconds" type="float"> </argument> <description> Sets time seek value of a TimeSeek node given its name and value. @@ -659,7 +659,7 @@ <constant name="NODE_TRANSITION" value="9"> Transition node. </constant> - <constant name="ANIMATION_PROCESS_FIXED" value="0"> + <constant name="ANIMATION_PROCESS_PHYSICS" value="0"> </constant> <constant name="ANIMATION_PROCESS_IDLE" value="1"> </constant> diff --git a/doc/classes/Area.xml b/doc/classes/Area.xml index c59bbee084..bbab7a5547 100644 --- a/doc/classes/Area.xml +++ b/doc/classes/Area.xml @@ -1,10 +1,10 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="Area" inherits="CollisionObject" category="Core" version="3.0.alpha.custom_build"> <brief_description> - General purpose area detection and influence for 3D physics. + General purpose area node for detection and 3D physics influence. </brief_description> <description> - General purpose area detection for 3D physics. Areas can be used for detection of objects that enter/exit them, as well as overriding space parameters (changing gravity, damping, etc). For this, use any space override different from AREA_SPACE_OVERRIDE_DISABLE and point gravity at the center of mass. + 3D area that detects [CollisionObject] nodes overlapping, entering, or exiting. Can also alter or override local physics parameters (gravity, damping). </description> <tutorials> </tutorials> @@ -88,14 +88,14 @@ <return type="Array"> </return> <description> - Return a list of the areas that are totally or partially inside this area. + Returns a list of intersecting [Area]s. </description> </method> <method name="get_overlapping_bodies" qualifiers="const"> <return type="Array"> </return> <description> - Return a list of the bodies ([PhysicsBody]) that are totally or partially inside this area. + Returns a list of intersecting [PhysicsBody]s. </description> </method> <method name="get_priority" qualifiers="const"> @@ -169,7 +169,7 @@ <argument index="0" name="area" type="Node"> </argument> <description> - Return whether the area passed is totally or partially inside this area. + If [code]true[/code] the given area overlaps the Area. </description> </method> <method name="overlaps_body" qualifiers="const"> @@ -178,7 +178,7 @@ <argument index="0" name="body" type="Node"> </argument> <description> - Return whether the body passed is totally or partially inside this area. + If [code]true[/code] the given body overlaps the Area. </description> </method> <method name="set_angular_damp"> @@ -374,30 +374,43 @@ </methods> <members> <member name="angular_damp" type="float" setter="set_angular_damp" getter="get_angular_damp"> + The rate at which objects stop spinning in this area. Represents the angular velocity lost per second. Values range from [code]0[/code] (no damping) to [code]1[/code] (full damping). </member> <member name="audio_bus_name" type="String" setter="set_audio_bus" getter="get_audio_bus"> + The name of the area's audio bus. </member> <member name="audio_bus_override" type="bool" setter="set_audio_bus_override" getter="is_overriding_audio_bus"> + If [code]true[/code] the area's audio bus overrides the default audio bus. Default value: [code]false[/code]. </member> <member name="collision_layer" type="int" setter="set_collision_layer" getter="get_collision_layer"> + The area's physics layer(s). Collidable objects can exist in any of 32 different layers. A contact is detected if object A is in any of the layers that object B scans, or object B is in any layers that object A scans. See also [code]collision_mask[/code]. </member> <member name="collision_mask" type="int" setter="set_collision_mask" getter="get_collision_mask"> + The physics layers this area scans to determine collision detection. </member> <member name="gravity" type="float" setter="set_gravity" getter="get_gravity"> + The area's gravity intensity (ranges from -1024 to 1024). This value multiplies the gravity vector. This is useful to alter the force of gravity without altering its direction. </member> <member name="gravity_distance_scale" type="float" setter="set_gravity_distance_scale" getter="get_gravity_distance_scale"> + The falloff factor for point gravity. The greater the value, the faster gravity decreases with distance. </member> <member name="gravity_point" type="bool" setter="set_gravity_is_point" getter="is_gravity_a_point"> + If [code]true[/code] gravity is calculated from a point (set via [code]gravity_vec[/code]). Also see [code]space_override[/code]. Default value: [code]false[/code]. </member> <member name="gravity_vec" type="Vector3" setter="set_gravity_vector" getter="get_gravity_vector"> + The area's gravity vector (not normalized). If gravity is a point (see [method is_gravity_a_point]), this will be the point of attraction. </member> <member name="linear_damp" type="float" setter="set_linear_damp" getter="get_linear_damp"> + The rate at which objects stop moving in this area. Represents the linear velocity lost per second. Values range from [code]0[/code] (no damping) to [code]1[/code] (full damping). </member> <member name="monitorable" type="bool" setter="set_monitorable" getter="is_monitorable"> + If [code]true[/code] other monitoring areas can detect this area. Default value: [code]true[/code]. </member> <member name="monitoring" type="bool" setter="set_monitoring" getter="is_monitoring"> + If [code]true[/code] the area detects bodies or areas entering and exiting it. Default value: [code]true[/code]. </member> <member name="priority" type="float" setter="set_priority" getter="get_priority"> + The area's priority. Higher priority areas are processed first. Default value: 0. </member> <member name="reverb_bus_amount" type="float" setter="set_reverb_amount" getter="get_reverb_amount"> </member> @@ -408,6 +421,7 @@ <member name="reverb_bus_uniformity" type="float" setter="set_reverb_uniformity" getter="get_reverb_uniformity"> </member> <member name="space_override" type="int" setter="set_space_override_mode" getter="get_space_override_mode" enum="Area.SpaceOverride"> + Override mode for gravity and damping calculations within this area. See the SPACE_OVERRIDE_* constants for values. </member> </members> <signals> @@ -415,14 +429,14 @@ <argument index="0" name="area" type="Object"> </argument> <description> - This signal is triggered only once when an area enters this area. The only parameter passed is the area that entered this area. + Emitted when another area enters. </description> </signal> <signal name="area_exited"> <argument index="0" name="area" type="Object"> </argument> <description> - This signal is triggered only once when an area exits this area. The only parameter passed is the area that exited this area. + Emitted when another area exits. </description> </signal> <signal name="area_shape_entered"> @@ -435,7 +449,7 @@ <argument index="3" name="self_shape" type="int"> </argument> <description> - This signal triggers only once when an area enters this area. The first parameter is the area's [RID]. The second one is the area as an object. The third one is the index of the shape entering this area, and the fourth one is the index of the shape in this area that reported the entering. + Emitted when another area enters, reporting which areas overlapped. </description> </signal> <signal name="area_shape_exited"> @@ -448,21 +462,21 @@ <argument index="3" name="self_shape" type="int"> </argument> <description> - This signal triggers only once when an area exits this area. The first parameter is the area's [RID]. The second one is the area as an object. The third one is the index of the shape entering this area, and the fourth one is the index of the shape in this area that reported the entering. + Emitted when another area exits, reporting which areas were overlapping. </description> </signal> <signal name="body_entered"> <argument index="0" name="body" type="Object"> </argument> <description> - This signal is triggered only once when a body enters this area. The only parameter passed is the body that entered this area. + Emitted when a [PhysicsBody] object enters. </description> </signal> <signal name="body_exited"> <argument index="0" name="body" type="Object"> </argument> <description> - This signal is triggered only once when a body exits this area. The only parameter passed is the body that exited this area. + Emitted when a [PhysicsBody2D] object exits. </description> </signal> <signal name="body_shape_entered"> @@ -475,7 +489,7 @@ <argument index="3" name="area_shape" type="int"> </argument> <description> - This signal triggers only once when a body enters this area. The first parameter is the body's [RID]. The second one is the body as an object. The third one is the index of the shape of the body that entered this area, and the fourth one is the index of the shape in this area that reported the entering. + Emitted when a [PhysicsBody2D] object enters, reporting which shapes overlapped. </description> </signal> <signal name="body_shape_exited"> @@ -488,20 +502,25 @@ <argument index="3" name="area_shape" type="int"> </argument> <description> - This signal triggers only once when a body exits this area. The first parameter is the body's [RID]. The second one is the body as an object. The third one is the index of the shape exiting this area, and the fourth one is the index of the shape in this area that reported the exit. + Emitted when a [PhysicsBody2D] object exits, reporting which shapes were overlapping. </description> </signal> </signals> <constants> <constant name="SPACE_OVERRIDE_DISABLED" value="0"> + This area does not affect gravity/damping. </constant> <constant name="SPACE_OVERRIDE_COMBINE" value="1"> + This area adds its gravity/damping values to whatever has been calculated so far (in [code]priority[/code] order). </constant> <constant name="SPACE_OVERRIDE_COMBINE_REPLACE" value="2"> + This area adds its gravity/damping values to whatever has been calculated so far (in [code]priority[/code] order), ignoring any lower priority areas. </constant> <constant name="SPACE_OVERRIDE_REPLACE" value="3"> + This area replaces any gravity/damping, even the defaults, ignoring any lower priority areas. </constant> <constant name="SPACE_OVERRIDE_REPLACE_COMBINE" value="4"> + This area replaces any gravity/damping calculated so far (in [code]priority[/code] order), but keeps calculating the rest of the areas. </constant> </constants> </class> diff --git a/doc/classes/Area2D.xml b/doc/classes/Area2D.xml index e093b5cb49..883f952a2a 100644 --- a/doc/classes/Area2D.xml +++ b/doc/classes/Area2D.xml @@ -1,10 +1,10 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="Area2D" inherits="CollisionObject2D" category="Core" version="3.0.alpha.custom_build"> <brief_description> - 2D area that detects nodes that enter or exit it. Can override 2D physics properties within range. + 2D area for detection and 2D physics influence. </brief_description> <description> - 2D area that detects nodes that enter or exit it. Change the 'space_override' property SPACE_OVERRIDE_* to override physics parameters for nodes like [Rigidbody2D]. E.g. gravity, damping... See [CollisionObject2D] for usage. + 2D area that detects [CollisionObject2D] nodes overlapping, entering, or exiting. Can also alter or override local physics parameters (gravity, damping). </description> <tutorials> </tutorials> @@ -18,7 +18,7 @@ Return the angular damp rate. </description> </method> - <method name="get_audio_bus" qualifiers="const"> + <method name="get_audio_bus_name" qualifiers="const"> <return type="String"> </return> <description> @@ -88,14 +88,14 @@ <return type="Array"> </return> <description> - Returns a list of the [Area2D]s that intersect with this area. + Returns a list of intersecting [Area2D]s. </description> </method> <method name="get_overlapping_bodies" qualifiers="const"> <return type="Array"> </return> <description> - Return a list of the [PhysicsBody2D]s that intersect with this area. + Returns a list of intersecting [PhysicsBody2D]s. </description> </method> <method name="get_priority" qualifiers="const"> @@ -145,7 +145,7 @@ <argument index="0" name="area" type="Node"> </argument> <description> - Return whether the area passed is totally or partially inside this area. + If [code]true[/code] the given area overlaps the Area2D. </description> </method> <method name="overlaps_body" qualifiers="const"> @@ -154,7 +154,7 @@ <argument index="0" name="body" type="Node"> </argument> <description> - Return whether the body passed is totally or partially inside this area. + If [code]true[/code] the given body overlaps the Area2D. </description> </method> <method name="set_angular_damp"> @@ -167,7 +167,7 @@ In practice, as the fraction of speed lost gets smaller with each frame, a value of 1.0 does not mean the object will stop in exactly one second. Only when the physics calculations are done at 1 frame per second, it does stop in a second. </description> </method> - <method name="set_audio_bus"> + <method name="set_audio_bus_name"> <return type="void"> </return> <argument index="0" name="name" type="String"> @@ -318,49 +318,46 @@ </methods> <members> <member name="angular_damp" type="float" setter="set_angular_damp" getter="get_angular_damp"> - The rate at which objects stop spinning in this area. Represents the amount of speed lost per second. If 1.0, physics bodies in the area stop rotating immediately. If 0.0, they never slow down. Does not incorporate external forces. The physics-update's rate affects 'angular_damp'. + The rate at which objects stop spinning in this area. Represents the angular velocity lost per second. Values range from [code]0[/code] (no damping) to [code]1[/code] (full damping). </member> - <member name="audio_bus_name" type="String" setter="set_audio_bus" getter="get_audio_bus"> - The name of the Area2D's audio bus. + <member name="audio_bus_name" type="String" setter="set_audio_bus_name" getter="get_audio_bus_name"> + The name of the area's audio bus. </member> <member name="audio_bus_override" type="bool" setter="set_audio_bus_override" getter="is_overriding_audio_bus"> - If [code]true[/code], overrides the default audio bus with the Area2D's. Defaults to [code]false[/code]. + If [code]true[/code] the area's audio bus overrides the default audio bus. Default value: [code]false[/code]. </member> <member name="collision_layer" type="int" setter="set_collision_layer" getter="get_collision_layer"> - The physics layer this Area2D is in. - Collidable objects can exist in any of 32 different layers. These layers are not visual, but more of a tagging system instead. A collidable can use these layers/tags to select with which objects it can collide, using [method set_collision_mask]. - A contact is detected if object A is in any of the layers that object B scans, or object B is in any layers that object A scans. + The area's physics layer(s). Collidable objects can exist in any of 32 different layers. A contact is detected if object A is in any of the layers that object B scans, or object B is in any layers that object A scans. See also [code]collision_mask[/code]. </member> <member name="collision_mask" type="int" setter="set_collision_mask" getter="get_collision_mask"> - The physics layers this Area2D scans to determine collision detections. + The physics layers this area scans to determine collision detection. </member> <member name="gravity" type="float" setter="set_gravity" getter="get_gravity"> - The gravity intensity within the Area2D (ranges -1024 to 1024). This is useful to alter the force of gravity without altering its direction. - This value multiplies the gravity vector, whether it is the given vector ([method set_gravity_vector]), or a calculated one (when using a center of gravity). + The area's gravity intensity (ranges from -1024 to 1024). This value multiplies the gravity vector. This is useful to alter the force of gravity without altering its direction. </member> <member name="gravity_distance_scale" type="float" setter="set_gravity_distance_scale" getter="get_gravity_distance_scale"> - The falloff factor for point gravity. The greater this value is, the faster the strength of gravity decreases with the square of distance. + The falloff factor for point gravity. The greater the value, the faster gravity decreases with distance. </member> <member name="gravity_point" type="bool" setter="set_gravity_is_point" getter="is_gravity_a_point"> - If [code]true[/code], calculates gravity from a particular point during a space override (see [method set_space_override_mode]). If a point, [Vector2] position is set with [method set_gravity_vector]. Defaults to [code]false[/code]. + If [code]true[/code] gravity is calculated from a point (set via [code]gravity_vec[/code]). Also see [code]space_override[/code]. Default value: [code]false[/code]. </member> <member name="gravity_vec" type="Vector2" setter="set_gravity_vector" getter="get_gravity_vector"> - The gravitational direction/strength as a vector (not normalized). If gravity is a point (see [method is_gravity_a_point]), this will be the attraction center. + The area's gravity vector (not normalized). If gravity is a point (see [method is_gravity_a_point]), this will be the point of attraction. </member> <member name="linear_damp" type="float" setter="set_linear_damp" getter="get_linear_damp"> - The rate at which objects stop spinning in this area. Represents the amount of speed lost per second. If 1.0, physics bodies in the area stop rotating immediately. If 0.0, they never slow down. Does not incorporate external forces. The physics-update's rate affects 'angular_damp'. + The rate at which objects stop moving in this area. Represents the linear velocity lost per second. Values range from [code]0[/code] (no damping) to [code]1[/code] (full damping). </member> <member name="monitorable" type="bool" setter="set_monitorable" getter="is_monitorable"> - If [code]true[/code], other monitoring areas can detect this Area2D (is it undetectable at the moment?). Defaults to [code]true[/code]. + If [code]true[/code] other monitoring areas can detect this area. Default value: [code]true[/code]. </member> <member name="monitoring" type="bool" setter="set_monitoring" getter="is_monitoring"> - If [code]true[/code], this detects bodies/areas entering/exiting it (can it detect others at the moment?). Defaults to [code]true[/code]. + If [code]true[/code] the area detects bodies or areas entering and exiting it. Default value: [code]true[/code]. </member> <member name="priority" type="float" setter="set_priority" getter="get_priority"> - The processing order for this priority. Ranges from 0 to 128. Defaults to 0. Higher priorities are processed first. + The area's priority. Higher priority areas are processed first. Default value: 0. </member> <member name="space_override" type="int" setter="set_space_override_mode" getter="get_space_override_mode" enum="Area2D.SpaceOverride"> - How to override gravity and damping calculations within this Area2D, if at all. Consult the SPACE_OVERRIDE_* constants for available options. + Override mode for gravity and damping calculations within this area. See the SPACE_OVERRIDE_* constants for values. </member> </members> <signals> @@ -368,14 +365,14 @@ <argument index="0" name="area" type="Object"> </argument> <description> - This signal is triggered only once when an area enters this area. The only parameter passed is the area that entered this area. + Emitted when another area enters. </description> </signal> <signal name="area_exited"> <argument index="0" name="area" type="Object"> </argument> <description> - This signal is triggered only once when an area exits this area. The only parameter passed is the area that exited this area. + Emitted when another area exits. </description> </signal> <signal name="area_shape_entered"> @@ -388,7 +385,7 @@ <argument index="3" name="self_shape" type="int"> </argument> <description> - This signal triggers only once when an area enters this area. The first parameter is the area's [RID]. The second one is the area as an object. The third one is the index of the shape entering this area, and the fourth one is the index of the shape in this area that reported the entering. + Emitted when another area enters, reporting which shapes overlapped. </description> </signal> <signal name="area_shape_exited"> @@ -401,21 +398,21 @@ <argument index="3" name="self_shape" type="int"> </argument> <description> - This signal triggers only once when an area exits this area. The first parameter is the area's [RID]. The second one is the area as an object. The third one is the index of the shape entering this area, and the fourth one is the index of the shape in this area that reported the entering. + Emitted when another area exits, reporting which shapes were overlapping. </description> </signal> <signal name="body_entered"> <argument index="0" name="body" type="Object"> </argument> <description> - This signal is triggered only once when a body enters this area. The only parameter passed is the body that entered this area. + Emitted when a [PhysicsBody2D] object enters. </description> </signal> <signal name="body_exited"> <argument index="0" name="body" type="Object"> </argument> <description> - This signal is triggered only once when a body exits this area. The only parameter passed is the body that exited this area. + Emitted when a [PhysicsBody2D] object exits. </description> </signal> <signal name="body_shape_entered"> @@ -428,7 +425,7 @@ <argument index="3" name="area_shape" type="int"> </argument> <description> - This signal triggers only once when a body enters this area. The first parameter is the body's [RID]. The second one is the body as an object. The third one is the index of the shape of the body that entered this area, and the fourth one is the index of the shape in this area that reported the entering. + Emitted when a [PhysicsBody2D] object enters, reporting which shapes overlapped. </description> </signal> <signal name="body_shape_exited"> @@ -441,25 +438,25 @@ <argument index="3" name="area_shape" type="int"> </argument> <description> - This signal triggers only once when a body exits this area. The first parameter is the body's [RID]. The second one is the body as an object. The third one is the index of the shape exiting this area, and the fourth one is the index of the shape in this area that reported the exit. + Emitted when a [PhysicsBody2D] object exits, reporting which shapes were overlapping. </description> </signal> </signals> <constants> <constant name="SPACE_OVERRIDE_DISABLED" value="0"> - This area does not affect gravity/damp. These are areas that exist only to detect collisions and objects entering or exiting them. + This area does not affect gravity/damping. </constant> <constant name="SPACE_OVERRIDE_COMBINE" value="1"> - This area adds its gravity/damp values to whatever has been calculated so far. This way, many overlapping areas can combine their physics to make interesting effects. + This area adds its gravity/damping values to whatever has been calculated so far (in [code]priority[/code] order). </constant> <constant name="SPACE_OVERRIDE_COMBINE_REPLACE" value="2"> - This area adds its gravity/damp values to whatever has been calculated so far. Then stops taking into account the rest of the areas, even the default one. + This area adds its gravity/damping values to whatever has been calculated so far (in [code]priority[/code] order), ignoring any lower priority areas. </constant> <constant name="SPACE_OVERRIDE_REPLACE" value="3"> - This area replaces any gravity/damp, even the default one, and stops taking into account the rest of the areas. + This area replaces any gravity/damping, even the defaults, ignoring any lower priority areas. </constant> <constant name="SPACE_OVERRIDE_REPLACE_COMBINE" value="4"> - This area replaces any gravity/damp calculated so far, but keeps calculating the rest of the areas, down to the default one. + This area replaces any gravity/damping calculated so far (in [code]priority[/code] order), but keeps calculating the rest of the areas. </constant> </constants> </class> diff --git a/doc/classes/Array.xml b/doc/classes/Array.xml index 042dfb3e12..7c1d72333b 100644 --- a/doc/classes/Array.xml +++ b/doc/classes/Array.xml @@ -104,6 +104,7 @@ <return type="Array"> </return> <description> + Returns a copy of this [code]Array[/code]. </description> </method> <method name="empty"> @@ -168,7 +169,7 @@ </description> </method> <method name="insert"> - <argument index="0" name="pos" type="int"> + <argument index="0" name="position" type="int"> </argument> <argument index="1" name="value" type="var"> </argument> @@ -178,7 +179,7 @@ </method> <method name="invert"> <description> - Reverse the order of the elements in the array (so first element will now be the last). + Reverse the order of the elements in the array (so first element will now be the last) and return reference to the array. </description> </method> <method name="pop_back"> @@ -206,14 +207,14 @@ </description> </method> <method name="remove"> - <argument index="0" name="pos" type="int"> + <argument index="0" name="position" type="int"> </argument> <description> Remove an element from the array by index. </description> </method> <method name="resize"> - <argument index="0" name="pos" type="int"> + <argument index="0" name="size" type="int"> </argument> <description> Resize the array to contain a different number of elements. If the array size is smaller, elements are cleared, if bigger, new elements are Null. @@ -239,7 +240,7 @@ </method> <method name="sort"> <description> - Sort the array using natural order. + Sort the array using natural order and return reference to the array. </description> </method> <method name="sort_custom"> @@ -248,7 +249,7 @@ <argument index="1" name="func" type="String"> </argument> <description> - Sort the array using a custom method. The arguments are an object that holds the method and the name of such method. The custom method receives two arguments (a pair of elements from the array) and must return true if the first argument is less than the second, and return false otherwise. Note: you cannot randomize the return value as the heapsort algorithm expects a deterministic result. Doing so will result in unexpected behavior. + Sort the array using a custom method and return reference to the array. The arguments are an object that holds the method and the name of such method. The custom method receives two arguments (a pair of elements from the array) and must return true if the first argument is less than the second, and return false otherwise. Note: you cannot randomize the return value as the heapsort algorithm expects a deterministic result. Doing so will result in unexpected behavior. </description> </method> </methods> diff --git a/doc/classes/AudioBusLayout.xml b/doc/classes/AudioBusLayout.xml index e5b17b8dfb..045c6c2bf9 100644 --- a/doc/classes/AudioBusLayout.xml +++ b/doc/classes/AudioBusLayout.xml @@ -1,8 +1,10 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="AudioBusLayout" inherits="Resource" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Stores information about the audiobusses. </brief_description> <description> + Stores position, muting, solo, bypass, effects, effect position, volume, and the connections between busses. See [AudioServer] for usage. </description> <tutorials> </tutorials> diff --git a/doc/classes/AudioEffectAmplify.xml b/doc/classes/AudioEffectAmplify.xml index 8497042b53..35d7991833 100644 --- a/doc/classes/AudioEffectAmplify.xml +++ b/doc/classes/AudioEffectAmplify.xml @@ -1,10 +1,11 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="AudioEffectAmplify" inherits="AudioEffect" category="Core" version="3.0.alpha.custom_build"> <brief_description> - Amplifies the volume of an audio source. + Adds a Amplify audio effect to an Audio bus. + Increases or decreases the volume of the selected audio bus. </brief_description> <description> - Amplifies the volume of an audio source. Increase gain of the audio being routed through the bus. + Increases or decreases the volume being routed through the audio bus. </description> <tutorials> </tutorials> @@ -15,7 +16,6 @@ <return type="float"> </return> <description> - Returns the set maximum volume. </description> </method> <method name="set_volume_db"> @@ -24,13 +24,12 @@ <argument index="0" name="volume" type="float"> </argument> <description> - Sets the maximum volume. </description> </method> </methods> <members> <member name="volume_db" type="float" setter="set_volume_db" getter="get_volume_db"> - The effect's volume limit. + Amount of amplification. Positive values make the sound louder, negative values make it quieter. Value can range from -80 to 24. Default value: [code]0[/code]. </member> </members> <constants> diff --git a/doc/classes/AudioEffectBandLimitFilter.xml b/doc/classes/AudioEffectBandLimitFilter.xml index 96f95fbffd..d4b251fc8e 100644 --- a/doc/classes/AudioEffectBandLimitFilter.xml +++ b/doc/classes/AudioEffectBandLimitFilter.xml @@ -1,8 +1,10 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="AudioEffectBandLimitFilter" inherits="AudioEffectFilter" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Adds a band limit filter to the Audio Bus. </brief_description> <description> + Limits the frequencies in a range around the [member cutoff_hz] and allows frequencies outside of this range to pass. </description> <tutorials> </tutorials> diff --git a/doc/classes/AudioEffectBandPassFilter.xml b/doc/classes/AudioEffectBandPassFilter.xml index 4437961cc6..b5c6ae3c20 100644 --- a/doc/classes/AudioEffectBandPassFilter.xml +++ b/doc/classes/AudioEffectBandPassFilter.xml @@ -1,8 +1,10 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="AudioEffectBandPassFilter" inherits="AudioEffectFilter" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Adds a band pass filter to the Audio Bus. </brief_description> <description> + Attenuates the frequencies inside of a range around the [member cutoff_hz] and cuts frequencies outside of this band. </description> <tutorials> </tutorials> diff --git a/doc/classes/AudioEffectCompressor.xml b/doc/classes/AudioEffectCompressor.xml index 5a7a91ede0..9d7e25dbf2 100644 --- a/doc/classes/AudioEffectCompressor.xml +++ b/doc/classes/AudioEffectCompressor.xml @@ -1,8 +1,16 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="AudioEffectCompressor" inherits="AudioEffect" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Adds a Compressor audio effect to an Audio bus. + Reduces sounds that exceed a certain threshold level, smooths out the dynamics and increases the overall volume. </brief_description> <description> + Dynamic range compressor reduces the level of the sound when the amplitude goes over a certain threshold in Decibels. One of the main uses of a compressor is to increase the dynamic range by clipping as little as possible (when sound goes over 0dB). + Compressor has many uses in the mix: + - In the Master bus to compress the whole output (Although a [AudioEffectLimiter] is probably better) + - In voice channels to ensure they sound as balanced as possible. + - Sidechained. Sidechained, which can reduce the sound level sidechained with another audio bus for threshold detection.. This technique is very common in video game mixing to download the level of Music/SFX while voices are being heard. + - Accentuates transients by using a wider attack, making effects sound more punchy. </description> <tutorials> </tutorials> @@ -110,18 +118,25 @@ </methods> <members> <member name="attack_us" type="float" setter="set_attack_us" getter="get_attack_us"> + Compressor's reaction time when the signal exceeds the threshold. Value can range from 20 to 2000. Default value: [code]20ms[/code]. </member> <member name="gain" type="float" setter="set_gain" getter="get_gain"> + Gain applied to the output signal. </member> <member name="mix" type="float" setter="set_mix" getter="get_mix"> + Balance between original signal and effect signal. Value can range from 0 (totally dry) to 1 (totally wet). Default value: [code]1[/code]. </member> <member name="ratio" type="float" setter="set_ratio" getter="get_ratio"> + Amount of compression applied to the audio once it passes the threshold level. The higher the ratio the more the loud parts of the audio will be compressed. Value can range from 1 to 48. Default value: [code]4[/code]. </member> <member name="release_ms" type="float" setter="set_release_ms" getter="get_release_ms"> + Compressor's delay time to stop reducing the signal after the signal level falls below the threshold. Value can range from 20 to 2000. Default value: [code]250ms[/code]. </member> <member name="sidechain" type="String" setter="set_sidechain" getter="get_sidechain"> + Reduce the sound level using another audio bus for threshold detection. </member> <member name="threshold" type="float" setter="set_threshold" getter="get_threshold"> + The level above which compression is applied to the audio. Value can range from -60 to 0. Default value: [code]0[/code]. </member> </members> <constants> diff --git a/doc/classes/AudioEffectDelay.xml b/doc/classes/AudioEffectDelay.xml index 8d317b3c46..9dc61883ab 100644 --- a/doc/classes/AudioEffectDelay.xml +++ b/doc/classes/AudioEffectDelay.xml @@ -1,8 +1,11 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="AudioEffectDelay" inherits="AudioEffect" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Adds a Delay audio effect to an Audio bus. Plays input signal back after a period of time. + Two tap delay and feedback options. </brief_description> <description> + Plays input signal back after a period of time. The delayed signal may be played back multiple times to create the sound of a repeating, decaying echo. Delay effects range from a subtle echo effect to a pronounced blending of previous sounds with new sounds. </description> <tutorials> </tutorials> @@ -194,30 +197,43 @@ </methods> <members> <member name="dry" type="float" setter="set_dry" getter="get_dry"> + Output percent of original sound. At 0, only delayed sounds are output. Value can range from 0 to 1. Default value: [code]1[/code]. </member> <member name="feedback/active" type="bool" setter="set_feedback_active" getter="is_feedback_active"> + If [code]true[/code] feedback is enabled. Default value: [code]false[/code]. </member> <member name="feedback/delay_ms" type="float" setter="set_feedback_delay_ms" getter="get_feedback_delay_ms"> + Feedback delay time in milliseconds. Default value: [code]340[/code]. </member> <member name="feedback/level_db" type="float" setter="set_feedback_level_db" getter="get_feedback_level_db"> + Sound level for [code]tap1[/code]. Default value: [code]-6 dB[/code]. </member> <member name="feedback/lowpass" type="float" setter="set_feedback_lowpass" getter="get_feedback_lowpass"> + Low-pass filter for feedback. Frequencies below the Low Cut value are filtered out of the source signal. Default value: [code]16000[/code]. </member> <member name="tap1/active" type="bool" setter="set_tap1_active" getter="is_tap1_active"> + If [code]true[/code], [code]tap1[/code] will be enabled. Default value: [code]true[/code]. </member> <member name="tap1/delay_ms" type="float" setter="set_tap1_delay_ms" getter="get_tap1_delay_ms"> + [b]Tap1[/b] delay time in milliseconds. Default value: [code]250ms[/code]. </member> <member name="tap1/level_db" type="float" setter="set_tap1_level_db" getter="get_tap1_level_db"> + Sound level for [code]tap1[/code]. Default value: [code]-6 dB[/code]. </member> <member name="tap1/pan" type="float" setter="set_tap1_pan" getter="get_tap1_pan"> + Pan position for [code]tap1[/code]. Value can range from -1 (fully left) to 1 (fully right). Default value: [code]0.2[/code]. </member> <member name="tap2/active" type="bool" setter="set_tap2_active" getter="is_tap2_active"> + If [code]true[/code], [code]tap2[/code] will be enabled. Default value: [code]true[/code]. </member> <member name="tap2/delay_ms" type="float" setter="set_tap2_delay_ms" getter="get_tap2_delay_ms"> + [b]Tap2[/b] delay time in milliseconds. Default value: [code]500ms[/code]. </member> <member name="tap2/level_db" type="float" setter="set_tap2_level_db" getter="get_tap2_level_db"> + Sound level for [code]tap2[/code]. Default value: [code]-12 dB[/code]. </member> <member name="tap2/pan" type="float" setter="set_tap2_pan" getter="get_tap2_pan"> + Pan position for [code]tap2[/code]. Value can range from -1 (fully left) to 1 (fully right). Default value: [code]-0.4[/code]. </member> </members> <constants> diff --git a/doc/classes/AudioEffectDistortion.xml b/doc/classes/AudioEffectDistortion.xml index e5c5a3b50e..8b970e675e 100644 --- a/doc/classes/AudioEffectDistortion.xml +++ b/doc/classes/AudioEffectDistortion.xml @@ -1,8 +1,12 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="AudioEffectDistortion" inherits="AudioEffect" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Adds a Distortion audio effect to an Audio bus. + Modify the sound to make it dirty. </brief_description> <description> + Modify the sound and make it dirty. Different types are available : clip, tan, lofi (bit crushing), overdrive, or waveshape. + By distorting the waveform the frequency content change, which will often make the sound "crunchy" or "abrasive". For games, it can simulate sound coming from some saturated device or speaker very efficiently. </description> <tutorials> </tutorials> @@ -82,26 +86,35 @@ </methods> <members> <member name="drive" type="float" setter="set_drive" getter="get_drive"> + Distortion power. Value can range from 0 to 1. Default value: [code]0[/code]. </member> <member name="keep_hf_hz" type="float" setter="set_keep_hf_hz" getter="get_keep_hf_hz"> + High-pass filter. Frequencies higher than this value will not be affected by the distortion. Value can range from 1 to 20000. Default value: [code]16000[/code]. </member> <member name="mode" type="int" setter="set_mode" getter="get_mode" enum="AudioEffectDistortion.Mode"> + Distortion type. Default value: [code]MODE_CLIP[/code]. </member> <member name="post_gain" type="float" setter="set_post_gain" getter="get_post_gain"> + Increases or decreases the volume after the effect. Value can range from -80 to 24. Default value: [code]0[/code]. </member> <member name="pre_gain" type="float" setter="set_pre_gain" getter="get_pre_gain"> + Increases or decreases the volume before the effect. Value can range from -60 to 60. Default value: [code]0[/code]. </member> </members> <constants> <constant name="MODE_CLIP" value="0"> + Digital distortion effect which cuts off peaks at the top and bottom of the waveform. </constant> <constant name="MODE_ATAN" value="1"> </constant> <constant name="MODE_LOFI" value="2"> + Low-resolution digital distortion effect. You can use it to emulate the sound of early digital audio devices. </constant> <constant name="MODE_OVERDRIVE" value="3"> + Emulates the warm distortion produced by a field effect transistor, which is commonly used in solid-state musical instrument amplifiers. </constant> <constant name="MODE_WAVESHAPE" value="4"> + Waveshaper distortions are used mainly by electronic musicians to achieve an extra-abrasive sound. </constant> </constants> </class> diff --git a/doc/classes/AudioEffectEQ.xml b/doc/classes/AudioEffectEQ.xml index 94d5c696c3..246f6b882e 100644 --- a/doc/classes/AudioEffectEQ.xml +++ b/doc/classes/AudioEffectEQ.xml @@ -1,8 +1,11 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="AudioEffectEQ" inherits="AudioEffect" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Base class for audio equalizers. Gives you control over frequencies. + Use it to create a custom equalizer if [AudioEffectEQ6], [AudioEffectEQ10] or [AudioEffectEQ21] don't fit your needs. </brief_description> <description> + AudioEffectEQ gives you control over frequencies. Use it to compensate for existing deficiencies in audio. AudioEffectEQ are very useful on the Master Bus to completely master a mix and give it character. They are also very useful when a game is run on a mobile device, to adjust the mix to that kind of speakers (it can be added but disabled when headphones are plugged). </description> <tutorials> </tutorials> @@ -13,6 +16,7 @@ <return type="int"> </return> <description> + Returns the number of bands of the equalizer. </description> </method> <method name="get_band_gain_db" qualifiers="const"> @@ -21,6 +25,7 @@ <argument index="0" name="band_idx" type="int"> </argument> <description> + Returns the band's gain at the specified index, in dB. </description> </method> <method name="set_band_gain_db"> @@ -31,6 +36,7 @@ <argument index="1" name="volume_db" type="float"> </argument> <description> + Sets band's gain at the specified index, in dB. </description> </method> </methods> diff --git a/doc/classes/AudioEffectEQ10.xml b/doc/classes/AudioEffectEQ10.xml index 004236dfde..7a29f4cc0b 100644 --- a/doc/classes/AudioEffectEQ10.xml +++ b/doc/classes/AudioEffectEQ10.xml @@ -1,8 +1,23 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="AudioEffectEQ10" inherits="AudioEffectEQ" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Adds a 10-band equalizer audio effect to an Audio bus. Gives you control over frequencies from 31 Hz to 16000 Hz. + Each frequency can be modulated between -60/+24 dB. </brief_description> <description> + Frequency bands : + Band 1 : 31 Hz + Band 2 : 62 Hz + Band 3 : 125 Hz + Band 4 : 250 Hz + Band 5 : 500 Hz + Band 6 : 1000 Hz + Band 7 : 2000 Hz + Band 8 : 4000 Hz + Band 9 : 8000 Hz + Band 10 : 16000 Hz + + See also [AudioEffectEQ], [AudioEffectEQ6], [AudioEffectEQ21]. </description> <tutorials> </tutorials> diff --git a/doc/classes/AudioEffectEQ21.xml b/doc/classes/AudioEffectEQ21.xml index e4faa9bb0c..327f5a291a 100644 --- a/doc/classes/AudioEffectEQ21.xml +++ b/doc/classes/AudioEffectEQ21.xml @@ -1,8 +1,34 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="AudioEffectEQ21" inherits="AudioEffectEQ" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Adds a 21-band equalizer audio effect to an Audio bus. Gives you control over frequencies from 22 Hz to 22000 Hz. + Each frequency can be modulated between -60/+24 dB. </brief_description> <description> + Frequency bands : + Band 1 : 22 Hz + Band 2 : 32 Hz + Band 3 : 44 Hz + Band 4 : 63 Hz + Band 5 : 90 Hz + Band 6 : 125 Hz + Band 7 : 175 Hz + Band 8 : 250 Hz + Band 9 : 350 Hz + Band 10 : 500 Hz + Band 11 : 700 Hz + Band 12 : 1000 Hz + Band 13 : 1400 Hz + Band 14 : 2000 Hz + Band 15 : 2800 Hz + Band 16 : 4000 Hz + Band 17 : 5600 Hz + Band 18 : 8000 Hz + Band 19 : 11000 Hz + Band 20 : 16000 Hz + Band 21 : 22000 Hz + + See also [AudioEffectEQ], [AudioEffectEQ6], [AudioEffectEQ10]. </description> <tutorials> </tutorials> diff --git a/doc/classes/AudioEffectEQ6.xml b/doc/classes/AudioEffectEQ6.xml index b74cc5d285..bc05535041 100644 --- a/doc/classes/AudioEffectEQ6.xml +++ b/doc/classes/AudioEffectEQ6.xml @@ -1,8 +1,19 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="AudioEffectEQ6" inherits="AudioEffectEQ" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Adds a 6-band equalizer audio effect to an Audio bus. Gives you control over frequencies from 32 Hz to 10000 Hz. + Each frequency can be modulated between -60/+24 dB. </brief_description> <description> + Frequency bands : + Band 1 : 32 Hz + Band 2 : 100 Hz + Band 3 : 320 Hz + Band 4 : 1000 Hz + Band 5 : 3200 Hz + Band 6 : 10000 Hz + + See also [AudioEffectEQ], [AudioEffectEQ10], [AudioEffectEQ21]. </description> <tutorials> </tutorials> diff --git a/doc/classes/AudioEffectFilter.xml b/doc/classes/AudioEffectFilter.xml index 17aa01d60a..dc547c9fe5 100644 --- a/doc/classes/AudioEffectFilter.xml +++ b/doc/classes/AudioEffectFilter.xml @@ -1,8 +1,10 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="AudioEffectFilter" inherits="AudioEffect" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Adds a filter to the Audio Bus. </brief_description> <description> + Allows frequencies other than the [member cutoff_hz] to pass. </description> <tutorials> </tutorials> @@ -68,12 +70,16 @@ </methods> <members> <member name="cutoff_hz" type="float" setter="set_cutoff" getter="get_cutoff"> + Threshold frequency for the filter. </member> <member name="dB" type="int" setter="set_db" getter="get_db" enum="AudioEffectFilter.FilterDB"> + The volume in decibels of the filter. </member> <member name="gain" type="float" setter="set_gain" getter="get_gain"> + Gain amount of the frequences after the filter. </member> <member name="resonance" type="float" setter="set_resonance" getter="get_resonance"> + Amount of boost in the overtones near the cutoff frequency. </member> </members> <constants> diff --git a/doc/classes/AudioEffectHighPassFilter.xml b/doc/classes/AudioEffectHighPassFilter.xml index 641f7cfee2..c5e24af510 100644 --- a/doc/classes/AudioEffectHighPassFilter.xml +++ b/doc/classes/AudioEffectHighPassFilter.xml @@ -1,8 +1,10 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="AudioEffectHighPassFilter" inherits="AudioEffectFilter" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Adds a high pass filter to the Audio Bus. </brief_description> <description> + Cuts frequencies lower than the [member cutoff_hz] and allows higher frequencies to pass. </description> <tutorials> </tutorials> diff --git a/doc/classes/AudioEffectLimiter.xml b/doc/classes/AudioEffectLimiter.xml index e52fb57c70..5209f290b1 100644 --- a/doc/classes/AudioEffectLimiter.xml +++ b/doc/classes/AudioEffectLimiter.xml @@ -1,8 +1,11 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="AudioEffectLimiter" inherits="AudioEffect" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Adds a soft clip Limiter audio effect to an Audio bus. </brief_description> <description> + A limiter is similar to a compressor, but it’s less flexible and designed to disallow sound going over a given dB threshold. Adding one in the Master Bus is always recommended to reduce the effects of clipping. + Soft clipping starts to reduce the peaks a little below the threshold level and progressively increases its effect as the input level increases such that the threshold is never exceeded. </description> <tutorials> </tutorials> @@ -68,12 +71,15 @@ </methods> <members> <member name="ceiling_db" type="float" setter="set_ceiling_db" getter="get_ceiling_db"> + The waveform's maximum allowed value. Value can range from -20 to -0.1. Default value: [code]-0.1dB[/code]. </member> <member name="soft_clip_db" type="float" setter="set_soft_clip_db" getter="get_soft_clip_db"> + Applies a gain to the limited waves. Value can range from 0 to 6. Default value: [code]2dB[/code]. </member> <member name="soft_clip_ratio" type="float" setter="set_soft_clip_ratio" getter="get_soft_clip_ratio"> </member> <member name="threshold_db" type="float" setter="set_threshold_db" getter="get_threshold_db"> + Threshold from which the limiter begins to be active. Value can range from -30 to 0. Default value: [code]0dB[/code]. </member> </members> <constants> diff --git a/doc/classes/AudioEffectLowPassFilter.xml b/doc/classes/AudioEffectLowPassFilter.xml index fcaf32d761..f102dda03e 100644 --- a/doc/classes/AudioEffectLowPassFilter.xml +++ b/doc/classes/AudioEffectLowPassFilter.xml @@ -1,8 +1,10 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="AudioEffectLowPassFilter" inherits="AudioEffectFilter" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Adds a low pass filter to the Audio Bus. </brief_description> <description> + Cuts frequencies higher than the [member cutoff_hz] and allows lower frequencies to pass. </description> <tutorials> </tutorials> diff --git a/doc/classes/AudioEffectNotchFilter.xml b/doc/classes/AudioEffectNotchFilter.xml index f90577fa5a..8ec9a4bc7c 100644 --- a/doc/classes/AudioEffectNotchFilter.xml +++ b/doc/classes/AudioEffectNotchFilter.xml @@ -1,8 +1,10 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="AudioEffectNotchFilter" inherits="AudioEffectFilter" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Adds a notch filter to the Audio Bus. </brief_description> <description> + Attenuates frequencies in a narrow band around the [member cutoff_hz] and cuts frequencies outside of this range. </description> <tutorials> </tutorials> diff --git a/doc/classes/AudioEffectPanner.xml b/doc/classes/AudioEffectPanner.xml index b55d7f91c1..56b39a36c6 100644 --- a/doc/classes/AudioEffectPanner.xml +++ b/doc/classes/AudioEffectPanner.xml @@ -1,8 +1,10 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="AudioEffectPanner" inherits="AudioEffect" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Adds a Panner audio effect to an Audio bus. Pans sound left or right. </brief_description> <description> + Determines how much of an audio signal is sent to the left and right buses. </description> <tutorials> </tutorials> @@ -26,6 +28,7 @@ </methods> <members> <member name="pan" type="float" setter="set_pan" getter="get_pan"> + Pan position. Value can range from -1 (fully left) to 1 (fully right). </member> </members> <constants> diff --git a/doc/classes/AudioEffectPhaser.xml b/doc/classes/AudioEffectPhaser.xml index 7e9cd27a47..bd9067471b 100644 --- a/doc/classes/AudioEffectPhaser.xml +++ b/doc/classes/AudioEffectPhaser.xml @@ -1,8 +1,11 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="AudioEffectPhaser" inherits="AudioEffect" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Adds a Phaser audio effect to an Audio bus. + Combines the original signal with a copy that is slightly out of phase with the original. </brief_description> <description> + Combines phase-shifted signals with the original signal. The movement of the phase-shifted signals is controlled using a Low Frequency Oscillator. </description> <tutorials> </tutorials> @@ -82,14 +85,19 @@ </methods> <members> <member name="depth" type="float" setter="set_depth" getter="get_depth"> + Governs how high the filter frequencies sweep. Low value will primarily affect bass frequencies. High value can sweep high into the treble. Value can range from 0.1 to 4. Default value: [code]1[/code]. </member> <member name="feedback" type="float" setter="set_feedback" getter="get_feedback"> + Output percent of modified sound. Value can range from 0.1 to 0.9. Default value: [code]0.7[/code]. </member> <member name="range_max_hz" type="float" setter="set_range_max_hz" getter="get_range_max_hz"> + Determines the maximum frequency affected by the LFO modulations. Value can range from 10 to 10000. Default value: [code]1600hz[/code]. </member> <member name="range_min_hz" type="float" setter="set_range_min_hz" getter="get_range_min_hz"> + Determines the minimum frequency affected by the LFO modulations. Value can range from 10 to 10000. Default value: [code]440hz[/code]. </member> <member name="rate_hz" type="float" setter="set_rate_hz" getter="get_rate_hz"> + Adjusts the rate at which the effect sweeps up and down across the frequency range. </member> </members> <constants> diff --git a/doc/classes/AudioEffectPitchShift.xml b/doc/classes/AudioEffectPitchShift.xml index 6fc3acdc20..edcb54e09e 100644 --- a/doc/classes/AudioEffectPitchShift.xml +++ b/doc/classes/AudioEffectPitchShift.xml @@ -1,8 +1,11 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="AudioEffectPitchShift" inherits="AudioEffect" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Adds a Pitch shift audio effect to an Audio bus. + Raises or lowers the pitch of original sound. </brief_description> <description> + Allows modulation of pitch independently of tempo. All frequencies can be increased/decreased with minimal effect on transients. </description> <tutorials> </tutorials> @@ -26,6 +29,7 @@ </methods> <members> <member name="pitch_scale" type="float" setter="set_pitch_scale" getter="get_pitch_scale"> + Pitch value. Can range from 0 (-1 octave) to 16 (+16 octaves). </member> </members> <constants> diff --git a/doc/classes/AudioEffectReverb.xml b/doc/classes/AudioEffectReverb.xml index b390fa239c..f399f9f07a 100644 --- a/doc/classes/AudioEffectReverb.xml +++ b/doc/classes/AudioEffectReverb.xml @@ -1,8 +1,11 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="AudioEffectReverb" inherits="AudioEffect" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Adds a Reverb audio effect to an Audio bus. + Simulates the sound of acoustic environments such as rooms, concert halls, caverns, or an open spaces. </brief_description> <description> + Simulates rooms of different sizes. Its parameters can be adjusted to simulate the sound of a specific room. </description> <tutorials> </tutorials> @@ -124,20 +127,28 @@ </methods> <members> <member name="damping" type="float" setter="set_damping" getter="get_damping"> + Widens or narrows the stereo image of the reverb tail. 1 means fully widens. Value can range from 0 to 1. Default value: [code]1[/code]. </member> <member name="dry" type="float" setter="set_dry" getter="get_dry"> + Output percent of original sound. At 0, only modified sound is outputted. Value can range from 0 to 1. Default value: [code]1[/code]. </member> <member name="hipass" type="float" setter="set_hpf" getter="get_hpf"> + High-pass filter passes signals with a frequency higher than a certain cutoff frequency and attenuates signals with frequencies lower than the cutoff frequency. Value can range from 0 to 1. Default value: [code]0[/code]. </member> <member name="predelay_feedback" type="float" setter="set_predelay_msec" getter="get_predelay_msec"> + Output percent of predelay. Value can range from 0 to 1. Default value: [code]1[/code]. </member> <member name="predelay_msec" type="float" setter="set_predelay_msec" getter="get_predelay_msec"> + Time between the original signal and the early reflections of the reverb signal. Default value: [code]150ms[/code]. </member> <member name="room_size" type="float" setter="set_room_size" getter="get_room_size"> + Dimensions of simulated room. Bigger means more echoes. Value can range from 0 to 1. Default value: [code]0.8[/code]. </member> <member name="spread" type="float" setter="set_spread" getter="get_spread"> + Defines how reflective the imaginary room's walls are. Value can range from 0 to 1. Default value: [code]1[/code]. </member> <member name="wet" type="float" setter="set_wet" getter="get_wet"> + Output percent of modified sound. At 0, only original sound is outputted. Value can range from 0 to 1. Default value: [code]0.5[/code]. </member> </members> <constants> diff --git a/doc/classes/AudioServer.xml b/doc/classes/AudioServer.xml index dc30c0c5f9..f8320c23af 100644 --- a/doc/classes/AudioServer.xml +++ b/doc/classes/AudioServer.xml @@ -14,9 +14,10 @@ <method name="add_bus"> <return type="void"> </return> - <argument index="0" name="at_pos" type="int" default="-1"> + <argument index="0" name="at_position" type="int" default="-1"> </argument> <description> + Adds a bus at [code]at_position[/code]. </description> </method> <method name="add_bus_effect"> @@ -26,21 +27,24 @@ </argument> <argument index="1" name="effect" type="AudioEffect"> </argument> - <argument index="2" name="at_pos" type="int" default="-1"> + <argument index="2" name="at_position" type="int" default="-1"> </argument> <description> + Adds an [AudioEffect] effect to the bus [code]bus_idx[/code] at [code]at_position[/code]. </description> </method> <method name="generate_bus_layout" qualifiers="const"> <return type="AudioBusLayout"> </return> <description> + Generates an [AudioBusLayout] using the available busses and effects. </description> </method> <method name="get_bus_count" qualifiers="const"> <return type="int"> </return> <description> + Returns the number of available busses. </description> </method> <method name="get_bus_effect"> @@ -51,6 +55,7 @@ <argument index="1" name="effect_idx" type="int"> </argument> <description> + Returns the [AudioEffect] at position [code]effect_idx[/code] in bus [code]bus_idx[/code]. </description> </method> <method name="get_bus_effect_count"> @@ -59,6 +64,7 @@ <argument index="0" name="bus_idx" type="int"> </argument> <description> + Returns the number of effects on the bus at [code]bus_idx[/code]. </description> </method> <method name="get_bus_index" qualifiers="const"> @@ -67,6 +73,7 @@ <argument index="0" name="bus_name" type="String"> </argument> <description> + Returns the index of the bus with the name [code]bus_name[/code]. </description> </method> <method name="get_bus_name" qualifiers="const"> @@ -75,6 +82,7 @@ <argument index="0" name="bus_idx" type="int"> </argument> <description> + Returns the name of the bus with the index [code]bus_idx[/code]. </description> </method> <method name="get_bus_peak_volume_left_db" qualifiers="const"> @@ -85,6 +93,7 @@ <argument index="1" name="channel" type="int"> </argument> <description> + Returns the peak volume of the left speaker at bus index [code]bus_idx[/code] and channel index [code]channel[/code]. </description> </method> <method name="get_bus_peak_volume_right_db" qualifiers="const"> @@ -95,6 +104,7 @@ <argument index="1" name="channel" type="int"> </argument> <description> + Returns the peak volume of the right speaker at bus index [code]bus_idx[/code] and channel index [code]channel[/code]. </description> </method> <method name="get_bus_send" qualifiers="const"> @@ -103,6 +113,7 @@ <argument index="0" name="bus_idx" type="int"> </argument> <description> + Returns the name of the bus that the bus at index [code]bus_idx[/code] sends to. </description> </method> <method name="get_bus_volume_db" qualifiers="const"> @@ -111,18 +122,21 @@ <argument index="0" name="bus_idx" type="int"> </argument> <description> + Returns the volume of the bus at index [code]bus_idx[/code] in dB. </description> </method> <method name="get_mix_rate" qualifiers="const"> <return type="float"> </return> <description> + Returns the sample rate at the output of the audioserver. </description> </method> <method name="get_speaker_mode" qualifiers="const"> <return type="int" enum="AudioServer.SpeakerMode"> </return> <description> + Returns the speaker configuration. </description> </method> <method name="is_bus_bypassing_effects" qualifiers="const"> @@ -131,6 +145,7 @@ <argument index="0" name="bus_idx" type="int"> </argument> <description> + If [code]true[/code] the bus at index [code]bus_idx[/code] is bypassing effects. </description> </method> <method name="is_bus_effect_enabled" qualifiers="const"> @@ -141,6 +156,7 @@ <argument index="1" name="effect_idx" type="int"> </argument> <description> + If [code]true[/code] the effect at index [code]effect_idx[/code] on the bus at index [code]bus_idx[/code] is enabled. </description> </method> <method name="is_bus_mute" qualifiers="const"> @@ -149,6 +165,7 @@ <argument index="0" name="bus_idx" type="int"> </argument> <description> + If [code]true[/code] the bus at index [code]bus_idx[/code] is muted. </description> </method> <method name="is_bus_solo" qualifiers="const"> @@ -157,12 +174,14 @@ <argument index="0" name="bus_idx" type="int"> </argument> <description> + If [code]true[/code] the bus at index [code]bus_idx[/code] is in solo mode. </description> </method> <method name="lock"> <return type="void"> </return> <description> + Locks the audio drivers mainloop. Remember to unlock it afterwards. </description> </method> <method name="move_bus"> @@ -173,6 +192,7 @@ <argument index="1" name="to_index" type="int"> </argument> <description> + Moves the bus from index [code]index[/code] to index [code]to_index[/code]. </description> </method> <method name="remove_bus"> @@ -181,6 +201,7 @@ <argument index="0" name="index" type="int"> </argument> <description> + Removes the bus at index [code]index[/code]. </description> </method> <method name="remove_bus_effect"> @@ -191,6 +212,7 @@ <argument index="1" name="effect_idx" type="int"> </argument> <description> + Removes the effect at index [code]effect_idx[/code] from the bus at index [code]bus_idx[/code]. </description> </method> <method name="set_bus_bypass_effects"> @@ -201,6 +223,7 @@ <argument index="1" name="enable" type="bool"> </argument> <description> + If [code]true[/code] the bus at index [code]bus_idx[/code] is bypassing effects. </description> </method> <method name="set_bus_count"> @@ -209,6 +232,7 @@ <argument index="0" name="amount" type="int"> </argument> <description> + Adds and removes busses to make the number of busses match [code]amount[/code]. </description> </method> <method name="set_bus_effect_enabled"> @@ -221,6 +245,7 @@ <argument index="2" name="enabled" type="bool"> </argument> <description> + If [code]true[/code] the effect at index [code]effect_idx[/code] on the bus at index [code]bus_idx[/code] is enabled. </description> </method> <method name="set_bus_layout"> @@ -229,6 +254,7 @@ <argument index="0" name="bus_layout" type="AudioBusLayout"> </argument> <description> + Overwrites the currently used [AudioBusLayout]. </description> </method> <method name="set_bus_mute"> @@ -239,6 +265,7 @@ <argument index="1" name="enable" type="bool"> </argument> <description> + If [code]true[/code] the bus at index [code]bus_idx[/code] is muted. </description> </method> <method name="set_bus_name"> @@ -249,6 +276,7 @@ <argument index="1" name="name" type="String"> </argument> <description> + Sets the name of the bus at index [code]bus_idx[/code] to [code]name[/code]. </description> </method> <method name="set_bus_send"> @@ -259,6 +287,7 @@ <argument index="1" name="send" type="String"> </argument> <description> + Connects the output of the bus at [code]bus_idx[/code] to the bus named [code]send[/send]. </description> </method> <method name="set_bus_solo"> @@ -269,6 +298,7 @@ <argument index="1" name="enable" type="bool"> </argument> <description> + If [code]true[/code] the bus at index [code]bus_idx[/code] is in solo mode. </description> </method> <method name="set_bus_volume_db"> @@ -279,6 +309,7 @@ <argument index="1" name="volume_db" type="float"> </argument> <description> + Sets the volume of the bus at index [code]bus_idx[/code] to [code]volume_db[/code]. </description> </method> <method name="swap_bus_effects"> @@ -291,27 +322,33 @@ <argument index="2" name="by_effect_idx" type="int"> </argument> <description> + Swaps the position of two effects in bus [code]bus_idx[/code]. </description> </method> <method name="unlock"> <return type="void"> </return> <description> + Unlocks the audiodriver's main loop. After locking it always unlock it. </description> </method> </methods> <signals> <signal name="bus_layout_changed"> <description> + Emitted when the [AudioBusLayout] changes. </description> </signal> </signals> <constants> <constant name="SPEAKER_MODE_STEREO" value="0"> + Two or fewer speakers are detected. </constant> <constant name="SPEAKER_SURROUND_51" value="2"> + A 5.1 channel surround setup detected. </constant> <constant name="SPEAKER_SURROUND_71" value="3"> + A 7.1 channel surround setup detected. </constant> </constants> </class> diff --git a/doc/classes/AudioStreamPlayback.xml b/doc/classes/AudioStreamPlayback.xml index 30a9a8f070..f45beec42c 100644 --- a/doc/classes/AudioStreamPlayback.xml +++ b/doc/classes/AudioStreamPlayback.xml @@ -1,8 +1,10 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="AudioStreamPlayback" inherits="Reference" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Meta class for playing back audio. </brief_description> <description> + Can play, loop, pause a scroll through Audio. See [AudioStream] and [AudioStreamOGGVorbis] for usage. </description> <tutorials> </tutorials> diff --git a/doc/classes/AudioStreamPlayer.xml b/doc/classes/AudioStreamPlayer.xml index edf5dd619b..1a9ad85565 100644 --- a/doc/classes/AudioStreamPlayer.xml +++ b/doc/classes/AudioStreamPlayer.xml @@ -7,6 +7,7 @@ Plays background audio. </description> <tutorials> + http://docs.godotengine.org/en/latest/learning/features/audio/index.html </tutorials> <demos> </demos> @@ -23,10 +24,11 @@ <description> </description> </method> - <method name="get_pos"> + <method name="get_playback_position"> <return type="float"> </return> <description> + Returns the position in the [AudioStream]. </description> </method> <method name="get_stream" qualifiers="const"> @@ -56,16 +58,16 @@ <method name="play"> <return type="void"> </return> - <argument index="0" name="from_pos" type="float" default="0.0"> + <argument index="0" name="from_position" type="float" default="0.0"> </argument> <description> - Plays the audio from the given position 'from_pos', in seconds. + Plays the audio from the given position 'from_position', in seconds. </description> </method> <method name="seek"> <return type="void"> </return> - <argument index="0" name="to_pos" type="float"> + <argument index="0" name="to_position" type="float"> </argument> <description> Sets the position from which audio will be played, in seconds. @@ -121,15 +123,16 @@ </methods> <members> <member name="autoplay" type="bool" setter="set_autoplay" getter="is_autoplay_enabled"> - If [code]true[/code], audio plays when added to scene tree. Default value: [code]false[/code]. + If [code]true[/code] audio plays when added to scene tree. Default value: [code]false[/code]. </member> <member name="bus" type="String" setter="set_bus" getter="get_bus"> Bus on which this audio is playing. </member> <member name="mix_target" type="int" setter="set_mix_target" getter="get_mix_target" enum="AudioStreamPlayer.MixTarget"> + If the audio configuration has more than two speakers, this sets the target channels. See [code]MIX_TARGET_*[/code] constants. </member> <member name="playing" type="bool" setter="_set_playing" getter="is_playing"> - If [code]true[/code], audio is playing. + If [code]true[/code] audio is playing. </member> <member name="stream" type="AudioStream" setter="set_stream" getter="get_stream"> The [AudioStream] object to be played. @@ -147,10 +150,13 @@ </signals> <constants> <constant name="MIX_TARGET_STEREO" value="0"> + The audio will be played only on the first channel. </constant> <constant name="MIX_TARGET_SURROUND" value="1"> + The audio will be played on all surround channels. </constant> <constant name="MIX_TARGET_CENTER" value="2"> + The audio will be played on the second channel, which is usually the center. </constant> </constants> </class> diff --git a/doc/classes/AudioStreamPlayer2D.xml b/doc/classes/AudioStreamPlayer2D.xml index e31f2dd941..c6fd8ff54f 100644 --- a/doc/classes/AudioStreamPlayer2D.xml +++ b/doc/classes/AudioStreamPlayer2D.xml @@ -36,10 +36,11 @@ <description> </description> </method> - <method name="get_pos"> + <method name="get_playback_position"> <return type="float"> </return> <description> + Returns the position in the [AudioStream]. </description> </method> <method name="get_stream" qualifiers="const"> @@ -69,16 +70,16 @@ <method name="play"> <return type="void"> </return> - <argument index="0" name="from_pos" type="float" default="0.0"> + <argument index="0" name="from_position" type="float" default="0.0"> </argument> <description> - Plays the audio from the given position 'from_pos', in seconds. + Plays the audio from the given position 'from_position', in seconds. </description> </method> <method name="seek"> <return type="void"> </return> - <argument index="0" name="to_pos" type="float"> + <argument index="0" name="to_position" type="float"> </argument> <description> Sets the position from which audio will be played, in seconds. @@ -156,7 +157,7 @@ Dampens audio over distance with this as an exponent. </member> <member name="autoplay" type="bool" setter="set_autoplay" getter="is_autoplay_enabled"> - If [code]true[/code], audio plays when added to scene tree. Default value: [code]false[/code]. + If [code]true[/code] audio plays when added to scene tree. Default value: [code]false[/code]. </member> <member name="bus" type="String" setter="set_bus" getter="get_bus"> Bus on which this audio is playing. @@ -165,7 +166,7 @@ Maximum distance from which audio is still hearable. </member> <member name="playing" type="bool" setter="_set_playing" getter="is_playing"> - If [code]true[/code], audio is playing. + If [code]true[/code] audio is playing. </member> <member name="stream" type="AudioStream" setter="set_stream" getter="get_stream"> The [AudioStream] object to be played. diff --git a/doc/classes/AudioStreamPlayer3D.xml b/doc/classes/AudioStreamPlayer3D.xml index 3aad0ea87a..84f6792ef0 100644 --- a/doc/classes/AudioStreamPlayer3D.xml +++ b/doc/classes/AudioStreamPlayer3D.xml @@ -78,10 +78,11 @@ <description> </description> </method> - <method name="get_pos"> + <method name="get_playback_position"> <return type="float"> </return> <description> + Returns the position in the [AudioStream]. </description> </method> <method name="get_stream" qualifiers="const"> @@ -123,16 +124,16 @@ <method name="play"> <return type="void"> </return> - <argument index="0" name="from_pos" type="float" default="0.0"> + <argument index="0" name="from_position" type="float" default="0.0"> </argument> <description> - Plays the audio from the given position 'from_pos', in seconds. + Plays the audio from the given position 'from_position', in seconds. </description> </method> <method name="seek"> <return type="void"> </return> - <argument index="0" name="to_pos" type="float"> + <argument index="0" name="to_position" type="float"> </argument> <description> Sets the position from which audio will be played, in seconds. @@ -288,7 +289,7 @@ Decides if audio should get quieter with distance linearly, quadratically or logarithmically. </member> <member name="autoplay" type="bool" setter="set_autoplay" getter="is_autoplay_enabled"> - If [code]true[/code], audio plays audio plays when added to scene tree. Default value: [code]false[/code]. + If [code]true[/code] audio plays when added to scene tree. Default value: [code]false[/code]. </member> <member name="bus" type="String" setter="set_bus" getter="get_bus"> Bus on which this audio is playing. @@ -300,7 +301,7 @@ The angle in which the audio reaches cameras undampened. </member> <member name="emission_angle_enabled" type="bool" setter="set_emission_angle_enabled" getter="is_emission_angle_enabled"> - If [code]true[/code], the audio should be dampened according to the direction of the sound. + If [code]true[/code] the audio should be dampened according to the direction of the sound. </member> <member name="emission_angle_filter_attenuation_db" type="float" setter="set_emission_angle_filter_attenuation_db" getter="get_emission_angle_filter_attenuation_db"> dampens audio if camera is outside of 'emission_angle_degrees' and 'emission_angle_enabled' is set by this factor, in dB. @@ -309,7 +310,7 @@ Sets the absolute maximum of the soundlevel, in dB. </member> <member name="max_distance" type="float" setter="set_max_distance" getter="get_max_distance"> - Sets the distance from wich the 'out_of_range_mode' takes effect. Has no effect if set to 0. + Sets the distance from which the 'out_of_range_mode' takes effect. Has no effect if set to 0. </member> <member name="out_of_range_mode" type="int" setter="set_out_of_range_mode" getter="get_out_of_range_mode" enum="AudioStreamPlayer3D.OutOfRangeMode"> Decides if audio should pause when source is outside of 'max_distance' range. @@ -354,10 +355,10 @@ Disables doppler tracking. </constant> <constant name="DOPPLER_TRACKING_IDLE_STEP" value="1"> - Executes doppler trackin in idle step. + Executes doppler tracking in idle step. </constant> - <constant name="DOPPLER_TRACKING_FIXED_STEP" value="2"> - Executes doppler tracking in fixed step. + <constant name="DOPPLER_TRACKING_PHYSICS_STEP" value="2"> + Executes doppler tracking in physics step. </constant> </constants> </class> diff --git a/doc/classes/BackBufferCopy.xml b/doc/classes/BackBufferCopy.xml index 091bd3fa73..6c44430949 100644 --- a/doc/classes/BackBufferCopy.xml +++ b/doc/classes/BackBufferCopy.xml @@ -15,7 +15,7 @@ <return type="int" enum="BackBufferCopy.CopyMode"> </return> <description> - Return the copy mode currently applied to the BackBufferCopy (refer to constants section). + Return the copy mode currently applied to the BackBufferCopy. See [code]COPY_MODE_*[/code] constants. </description> </method> <method name="get_rect" qualifiers="const"> @@ -31,7 +31,7 @@ <argument index="0" name="copy_mode" type="int" enum="BackBufferCopy.CopyMode"> </argument> <description> - Set the copy mode of the BackBufferCopy (refer to constants section). + Set the copy mode of the BackBufferCopy. See [code]COPY_MODE_*[/code] constants. </description> </method> <method name="set_rect"> @@ -46,8 +46,10 @@ </methods> <members> <member name="copy_mode" type="int" setter="set_copy_mode" getter="get_copy_mode" enum="BackBufferCopy.CopyMode"> + Buffer mode. See [code]COPY_MODE_*[/code] constants. </member> <member name="rect" type="Rect2" setter="set_rect" getter="get_rect"> + The area covered by the BackBufferCopy. Only used if [code]copy_mode[/code] is [code]COPY_MODE_RECT[/code]. </member> </members> <constants> @@ -55,10 +57,10 @@ Disables the buffering mode. This means the BackBufferCopy node will directly use the portion of screen it covers. </constant> <constant name="COPY_MODE_RECT" value="1"> - Sets the copy mode to a region. + BackBufferCopy buffers a rectangular region. </constant> <constant name="COPY_MODE_VIEWPORT" value="2"> - Sets the copy mode to the entire screen. + BackBufferCopy buffers the entire screen. </constant> </constants> </class> diff --git a/doc/classes/BitMap.xml b/doc/classes/BitMap.xml index 62b1c9ff4f..63e6a5f682 100644 --- a/doc/classes/BitMap.xml +++ b/doc/classes/BitMap.xml @@ -32,7 +32,7 @@ <method name="get_bit" qualifiers="const"> <return type="bool"> </return> - <argument index="0" name="pos" type="Vector2"> + <argument index="0" name="position" type="Vector2"> </argument> <description> Returns bitmap's value at the specified position. @@ -55,7 +55,7 @@ <method name="set_bit"> <return type="void"> </return> - <argument index="0" name="pos" type="Vector2"> + <argument index="0" name="position" type="Vector2"> </argument> <argument index="1" name="bit" type="bool"> </argument> @@ -77,6 +77,9 @@ </methods> <members> <member name="data" type="Dictionary" setter="_set_data" getter="_get_data"> + Returns a [Dictionary] with two keys : + [code]data[/code] : [PoolByteArray] with [code]true[/code]/[code]false[/code] [code]BitMap[/code] data. + [code]size[/code] : The [code]Bitmap[/code]'s size. </member> </members> <constants> diff --git a/doc/classes/BitmapFont.xml b/doc/classes/BitmapFont.xml index e983c59782..48e5798008 100644 --- a/doc/classes/BitmapFont.xml +++ b/doc/classes/BitmapFont.xml @@ -1,8 +1,10 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="BitmapFont" inherits="Font" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Renders text using [code]*.fnt[/code] fonts. </brief_description> <description> + Renders text using [code]*.fnt[/code] fonts containing texture atlases. Supports distance fields. For using vector font files like TTF directly, see [DynamicFont]. </description> <tutorials> </tutorials> @@ -23,7 +25,7 @@ <argument index="4" name="advance" type="float" default="-1"> </argument> <description> - Add a character to the font, where [i]character[/i] is the unicode value, [i]texture[/i] is the texture index, [i]rect[/i] is the region in the texture (in pixels!), [i]align[/i] is the (optional) alignment for the character and [i]advance[/i] is the (optional) advance. + Adds a character to the font, where [code]character[/code] is the unicode value, [code]texture[/code] is the texture index, [code]rect[/code] is the region in the texture (in pixels!), [code]align[/code] is the (optional) alignment for the character and [code]advance[/code] is the (optional) advance. </description> </method> <method name="add_kerning_pair"> @@ -36,7 +38,7 @@ <argument index="2" name="kerning" type="int"> </argument> <description> - Add a kerning pair to the [BitmapFont] as a difference. Kerning pairs are special cases where a typeface advance is determined by the next character. + Adds a kerning pair to the [BitmapFont] as a difference. Kerning pairs are special cases where a typeface advance is determined by the next character. </description> </method> <method name="add_texture"> @@ -45,14 +47,14 @@ <argument index="0" name="texture" type="Texture"> </argument> <description> - Add a texture to the [BitmapFont]. + Adds a texture to the [BitmapFont]. </description> </method> <method name="clear"> <return type="void"> </return> <description> - Clear all the font data. + Clears all the font data and settings. </description> </method> <method name="create_from_fnt"> @@ -61,6 +63,7 @@ <argument index="0" name="path" type="String"> </argument> <description> + Creates a BitmapFont from the [code]*.fnt[/code] file at [code]path[/code]. </description> </method> <method name="get_char_size" qualifiers="const"> @@ -71,13 +74,14 @@ <argument index="1" name="next" type="int" default="0"> </argument> <description> - Return the size of a character, optionally taking kerning into account if the next character is provided. + Returns the size of a character, optionally taking kerning into account if the next character is provided. </description> </method> <method name="get_fallback" qualifiers="const"> <return type="BitmapFont"> </return> <description> + Returns the fallback BitmapFont. </description> </method> <method name="get_kerning_pair" qualifiers="const"> @@ -88,7 +92,7 @@ <argument index="1" name="char_b" type="int"> </argument> <description> - Return a kerning pair as a difference. + Returns a kerning pair as a difference. </description> </method> <method name="get_texture" qualifiers="const"> @@ -97,12 +101,14 @@ <argument index="0" name="idx" type="int"> </argument> <description> + Returns the font atlas texture at index [code]idx[/code]. </description> </method> <method name="get_texture_count" qualifiers="const"> <return type="int"> </return> <description> + Returns the number of textures in the BitmapFont atlas. </description> </method> <method name="set_ascent"> @@ -111,7 +117,7 @@ <argument index="0" name="px" type="float"> </argument> <description> - Set the font ascent (number of pixels above the baseline). + Sets the font ascent (number of pixels above the baseline). </description> </method> <method name="set_distance_field_hint"> @@ -120,6 +126,7 @@ <argument index="0" name="enable" type="bool"> </argument> <description> + If [code]true[/code] distance field hint is enabled. </description> </method> <method name="set_fallback"> @@ -128,6 +135,7 @@ <argument index="0" name="fallback" type="BitmapFont"> </argument> <description> + Sets the fallback BitmapFont. </description> </method> <method name="set_height"> @@ -136,24 +144,31 @@ <argument index="0" name="px" type="float"> </argument> <description> - Set the total font height (ascent plus descent) in pixels. + Sets the total font height (ascent plus descent) in pixels. </description> </method> </methods> <members> <member name="ascent" type="float" setter="set_ascent" getter="get_ascent"> + Ascent (number of pixels above the baseline). </member> <member name="chars" type="PoolIntArray" setter="_set_chars" getter="_get_chars"> + The characters in the BitmapFont. </member> <member name="distance_field" type="bool" setter="set_distance_field_hint" getter="is_distance_field_hint"> + If [code]true[/code] distance field hint is enabled. </member> <member name="fallback" type="BitmapFont" setter="set_fallback" getter="get_fallback"> + The fallback font. </member> <member name="height" type="float" setter="set_height" getter="get_height"> + Total font height (ascent plus descent) in pixels. </member> <member name="kernings" type="PoolIntArray" setter="_set_kernings" getter="_get_kernings"> + The font's kernings as [PoolIntArray]. </member> <member name="textures" type="Array" setter="_set_textures" getter="_get_textures"> + The font's [Texture]s. </member> </members> <constants> diff --git a/doc/classes/Camera.xml b/doc/classes/Camera.xml index 2302c39e35..aeebcf9c87 100644 --- a/doc/classes/Camera.xml +++ b/doc/classes/Camera.xml @@ -15,6 +15,7 @@ <return type="void"> </return> <description> + If this is the current Camera, remove it from being current. If it is inside the node tree, request to make the next Camera current, if any. </description> </method> <method name="get_camera_transform" qualifiers="const"> @@ -28,6 +29,7 @@ <return type="int"> </return> <description> + Returns the culling mask, describing which 3D render layers are rendered by this Camera. </description> </method> <method name="get_doppler_tracking" qualifiers="const"> @@ -40,30 +42,35 @@ <return type="Environment"> </return> <description> + Returns the [Environment] used by this Camera. </description> </method> <method name="get_fov" qualifiers="const"> <return type="float"> </return> <description> + Returns the [i]FOV[/i] Y angle in degrees (FOV means Field of View). </description> </method> <method name="get_h_offset" qualifiers="const"> <return type="float"> </return> <description> + Returns the horizontal (X) offset of the Camera viewport. </description> </method> <method name="get_keep_aspect_mode" qualifiers="const"> <return type="int" enum="Camera.KeepAspect"> </return> <description> + Returns the current mode for keeping the aspect ratio. See [code]KEEP_*[/code] constants. </description> </method> <method name="get_projection" qualifiers="const"> <return type="int" enum="Camera.Projection"> </return> <description> + Returns the Camera's projection. See PROJECTION_* constants. </description> </method> <method name="get_size" qualifiers="const"> @@ -76,25 +83,28 @@ <return type="float"> </return> <description> + Returns the vertical (Y) offset of the Camera viewport. </description> </method> <method name="get_zfar" qualifiers="const"> <return type="float"> </return> <description> + Returns the far clip plane in world space units. </description> </method> <method name="get_znear" qualifiers="const"> <return type="float"> </return> <description> + Returns the near clip plane in world space units. </description> </method> <method name="is_current" qualifiers="const"> <return type="bool"> </return> <description> - Return whether the Camera is the current one in the [Viewport], or plans to become current (if outside the scene tree). + Returns [code]true[/code] if the Camera is the current one in the [Viewport], or plans to become current (if outside the scene tree). </description> </method> <method name="is_position_behind" qualifiers="const"> @@ -103,6 +113,7 @@ <argument index="0" name="world_point" type="Vector3"> </argument> <description> + Returns [code]true[/code] if the given position is behind the Camera. </description> </method> <method name="make_current"> @@ -126,6 +137,7 @@ <argument index="0" name="screen_point" type="Vector2"> </argument> <description> + Returns how a 2D coordinate in the Viewport rectangle maps to a 3D point in worldspace. </description> </method> <method name="project_ray_normal" qualifiers="const"> @@ -134,7 +146,7 @@ <argument index="0" name="screen_point" type="Vector2"> </argument> <description> - Return a normal vector in worldspace, that is the result of projecting a point on the [Viewport] rectangle by the camera projection. This is useful for casting rays in the form of (origin,normal) for object intersection or picking. + Returns a normal vector in worldspace, that is the result of projecting a point on the [Viewport] rectangle by the camera projection. This is useful for casting rays in the form of (origin, normal) for object intersection or picking. </description> </method> <method name="project_ray_origin" qualifiers="const"> @@ -143,7 +155,7 @@ <argument index="0" name="screen_point" type="Vector2"> </argument> <description> - Return a 3D position in worldspace, that is the result of projecting a point on the [Viewport] rectangle by the camera projection. This is useful for casting rays in the form of (origin,normal) for object intersection or picking. + Returns a 3D position in worldspace, that is the result of projecting a point on the [Viewport] rectangle by the camera projection. This is useful for casting rays in the form of (origin, normal) for object intersection or picking. </description> </method> <method name="set_cull_mask"> @@ -152,6 +164,7 @@ <argument index="0" name="mask" type="int"> </argument> <description> + Sets the cull mask, describing which 3D render layers are rendered by this Camera. </description> </method> <method name="set_doppler_tracking"> @@ -160,6 +173,7 @@ <argument index="0" name="mode" type="int" enum="Camera.DopplerTracking"> </argument> <description> + Changes Doppler effect tracking. See [code]DOPPLER_*[/code] constants. </description> </method> <method name="set_environment"> @@ -168,6 +182,7 @@ <argument index="0" name="env" type="Environment"> </argument> <description> + Sets the [Environment] to use for this Camera. </description> </method> <method name="set_h_offset"> @@ -176,6 +191,7 @@ <argument index="0" name="ofs" type="float"> </argument> <description> + Sets the horizontal (X) offset of the Camera viewport. </description> </method> <method name="set_keep_aspect_mode"> @@ -184,6 +200,7 @@ <argument index="0" name="mode" type="int" enum="Camera.KeepAspect"> </argument> <description> + Sets the mode for keeping the aspect ratio. See [code]KEEP_*[/code] constants. </description> </method> <method name="set_orthogonal"> @@ -218,6 +235,7 @@ <argument index="0" name="ofs" type="float"> </argument> <description> + Sets the vertical (Y) offset of the Camera viewport. </description> </method> <method name="unproject_position" qualifiers="const"> @@ -226,7 +244,7 @@ <argument index="0" name="world_point" type="Vector3"> </argument> <description> - Return how a 3D point in worldspace maps to a 2D coordinate in the [Viewport] rectangle. + Returns how a 3D point in worldspace maps to a 2D coordinate in the [Viewport] rectangle. </description> </method> </methods> @@ -238,14 +256,19 @@ Orthogonal Projection (objects remain the same size on the screen no matter how far away they are). </constant> <constant name="KEEP_WIDTH" value="0"> + Try to keep the aspect ratio when scaling the Camera's viewport to the screen. If not possible, preserve the viewport's width by changing the height. Height is [code]sizey[/code] for orthographic projection, [code]fovy[/code] for perspective projection. </constant> <constant name="KEEP_HEIGHT" value="1"> + Try to keep the aspect ratio when scaling the Camera's viewport to the screen. If not possible, preserve the viewport's height by changing the width. Width is [code]sizex[/code] for orthographic projection, [code]fovx[/code] for perspective projection. </constant> <constant name="DOPPLER_TRACKING_DISABLED" value="0"> + Disable Doppler effect simulation (default). </constant> <constant name="DOPPLER_TRACKING_IDLE_STEP" value="1"> + Simulate Doppler effect by tracking positions of objects that are changed in [code]_process[/code]. Changes in the relative velocity of this Camera compared to those objects affect how Audio is perceived (changing the Audio's [code]pitch shift[/code]). </constant> - <constant name="DOPPLER_TRACKING_FIXED_STEP" value="2"> + <constant name="DOPPLER_TRACKING_PHYSICS_STEP" value="2"> + Simulate Doppler effect by tracking positions of objects that are changed in [code]_physics_process[/code]. Changes in the relative velocity of this Camera compared to those objects affect how Audio is perceived (changing the Audio's [code]pitch shift[/code]). </constant> </constants> </class> diff --git a/doc/classes/Camera2D.xml b/doc/classes/Camera2D.xml index 659efa860d..8d0c07acd9 100644 --- a/doc/classes/Camera2D.xml +++ b/doc/classes/Camera2D.xml @@ -5,7 +5,7 @@ </brief_description> <description> Camera node for 2D scenes. It forces the screen (current layer) to scroll following this node. This makes it easier (and faster) to program scrollable scenes than manually changing the position of [CanvasItem] based nodes. - This node is intended to be a simple helper get get things going quickly and it may happen often that more functionality is desired to change how the camera works. To make your own custom camera node, simply inherit from [Node2D] and change the transform of the canvas by calling get_viewport().set_canvas_transform(m) in [Viewport]. + This node is intended to be a simple helper to get things going quickly and it may happen often that more functionality is desired to change how the camera works. To make your own custom camera node, simply inherit from [Node2D] and change the transform of the canvas by calling get_viewport().set_canvas_transform(m) in [Viewport]. </description> <tutorials> </tutorials> @@ -38,7 +38,7 @@ <description> </description> </method> - <method name="get_camera_pos" qualifiers="const"> + <method name="get_camera_position" qualifiers="const"> <return type="Vector2"> </return> <description> @@ -324,20 +324,28 @@ </methods> <members> <member name="anchor_mode" type="int" setter="set_anchor_mode" getter="get_anchor_mode" enum="Camera2D.AnchorMode"> + The Camera2D's anchor point. See [code]ANCHOR_MODE_*[/code] constants. </member> <member name="current" type="bool" setter="_set_current" getter="is_current"> + If [code]true[/code] the camera is the active camera for the current scene. Only one camera can be current, so setting a different camera [code]current[/code] will disable this one. </member> <member name="drag_margin_bottom" type="float" setter="set_drag_margin" getter="get_drag_margin"> + Bottom margin needed to drag the camera. A value of [code]1[/code] makes the camera move only when reaching the edge of the screen. </member> <member name="drag_margin_h_enabled" type="bool" setter="set_h_drag_enabled" getter="is_h_drag_enabled"> + If [code]true[/code] the camera only moves when reaching the horizontal drag margins. If [code]false[/code] the camera moves horizontally regardless of margins. Default value: [code]true[/code]. </member> <member name="drag_margin_left" type="float" setter="set_drag_margin" getter="get_drag_margin"> + Left margin needed to drag the camera. A value of [code]1[/code] makes the camera move only when reaching the edge of the screen. </member> <member name="drag_margin_right" type="float" setter="set_drag_margin" getter="get_drag_margin"> + Right margin needed to drag the camera. A value of [code]1[/code] makes the camera move only when reaching the edge of the screen. </member> <member name="drag_margin_top" type="float" setter="set_drag_margin" getter="get_drag_margin"> + Top margin needed to drag the camera. A value of [code]1[/code] makes the camera move only when reaching the edge of the screen. </member> <member name="drag_margin_v_enabled" type="bool" setter="set_v_drag_enabled" getter="is_v_drag_enabled"> + If [code]true[/code] the camera only moves when reaching the vertical drag margins. If [code]false[/code] the camera moves vertically regardless of margins. Default value: [code]true[/code]. </member> <member name="editor_draw_drag_margin" type="bool" setter="set_margin_drawing_enabled" getter="is_margin_drawing_enabled"> </member> @@ -346,24 +354,33 @@ <member name="editor_draw_screen" type="bool" setter="set_screen_drawing_enabled" getter="is_screen_drawing_enabled"> </member> <member name="limit_bottom" type="int" setter="set_limit" getter="get_limit"> + Bottom scroll limit in pixels. The camera stops moving when reaching this value. </member> <member name="limit_left" type="int" setter="set_limit" getter="get_limit"> + Left scroll limit in pixels. The camera stops moving when reaching this value. </member> <member name="limit_right" type="int" setter="set_limit" getter="get_limit"> + Right scroll limit in pixels. The camera stops moving when reaching this value. </member> <member name="limit_smoothed" type="bool" setter="set_limit_smoothing_enabled" getter="is_limit_smoothing_enabled"> </member> <member name="limit_top" type="int" setter="set_limit" getter="get_limit"> + Top scroll limit in pixels. The camera stops moving when reaching this value. </member> <member name="offset" type="Vector2" setter="set_offset" getter="get_offset"> + The camera's offset, useful for looking around or camera shake animations. </member> <member name="rotating" type="bool" setter="set_rotating" getter="is_rotating"> + If [code]true[/code] the camera can rotate during gameplay. Default value: [code]false[/code]. </member> <member name="smoothing_enabled" type="bool" setter="set_enable_follow_smoothing" getter="is_follow_smoothing_enabled"> + If [code]true[/code] the camera's velocity changes gradually, preventing sudden starts and stops. Default value: [code]false[/code]. </member> <member name="smoothing_speed" type="float" setter="set_follow_smoothing" getter="get_follow_smoothing"> + How fast the camera's velocity changes if smoothing is enabled. </member> <member name="zoom" type="Vector2" setter="set_zoom" getter="get_zoom"> + The camera's zoom relative to the viewport. Values larger than [code]Vector2(1, 1)[/code] zoom out and smaller values zoom in. For an example, use [code]Vector2(0.5, 0.5)[/code] for a 2x zoom in, and [code]Vector2(4, 4)[/code] for a 4x zoom out. </member> </members> <constants> diff --git a/doc/classes/CanvasItem.xml b/doc/classes/CanvasItem.xml index 26a9e1519b..4a9890ea18 100644 --- a/doc/classes/CanvasItem.xml +++ b/doc/classes/CanvasItem.xml @@ -27,7 +27,7 @@ </return> <argument index="0" name="font" type="Font"> </argument> - <argument index="1" name="pos" type="Vector2"> + <argument index="1" name="position" type="Vector2"> </argument> <argument index="2" name="char" type="String"> </argument> @@ -42,7 +42,7 @@ <method name="draw_circle"> <return type="void"> </return> - <argument index="0" name="pos" type="Vector2"> + <argument index="0" name="position" type="Vector2"> </argument> <argument index="1" name="radius" type="float"> </argument> @@ -170,9 +170,9 @@ <method name="draw_set_transform"> <return type="void"> </return> - <argument index="0" name="pos" type="Vector2"> + <argument index="0" name="position" type="Vector2"> </argument> - <argument index="1" name="rot" type="float"> + <argument index="1" name="rotation" type="float"> </argument> <argument index="2" name="scale" type="Vector2"> </argument> @@ -193,7 +193,7 @@ </return> <argument index="0" name="font" type="Font"> </argument> - <argument index="1" name="pos" type="Vector2"> + <argument index="1" name="position" type="Vector2"> </argument> <argument index="2" name="text" type="String"> </argument> @@ -221,7 +221,7 @@ </return> <argument index="0" name="texture" type="Texture"> </argument> - <argument index="1" name="pos" type="Vector2"> + <argument index="1" name="position" type="Vector2"> </argument> <argument index="2" name="modulate" type="Color" default="Color( 1, 1, 1, 1 )"> </argument> @@ -367,7 +367,7 @@ Get this item's light mask number. </description> </method> - <method name="get_local_mouse_pos" qualifiers="const"> + <method name="get_local_mouse_position" qualifiers="const"> <return type="Vector2"> </return> <description> @@ -476,7 +476,7 @@ <description> </description> </method> - <method name="make_canvas_pos_local" qualifiers="const"> + <method name="make_canvas_position_local" qualifiers="const"> <return type="Vector2"> </return> <argument index="0" name="screen_point" type="Vector2"> diff --git a/doc/classes/CanvasModulate.xml b/doc/classes/CanvasModulate.xml index f0e3132da5..b4b20e29f9 100644 --- a/doc/classes/CanvasModulate.xml +++ b/doc/classes/CanvasModulate.xml @@ -1,10 +1,10 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="CanvasModulate" inherits="Node2D" category="Core" version="3.0.alpha.custom_build"> <brief_description> - Tint the entire canvas + Tint the entire canvas. </brief_description> <description> - CanvasModulate tints the canvas elements using its assigned color + [code]CanvasModulate[/code] tints the canvas elements using its assigned [code]color[/code]. </description> <tutorials> </tutorials> @@ -30,6 +30,7 @@ </methods> <members> <member name="color" type="Color" setter="set_color" getter="get_color"> + The tint color to apply. </member> </members> <constants> diff --git a/doc/classes/CheckBox.xml b/doc/classes/CheckBox.xml index 6258eb503f..50b431e00c 100644 --- a/doc/classes/CheckBox.xml +++ b/doc/classes/CheckBox.xml @@ -4,7 +4,7 @@ Binary choice user interface widget </brief_description> <description> - A checkbox allows the user to make a binary choice (choosing only one of two posible options), for example Answer 'yes' or 'no'. + A checkbox allows the user to make a binary choice (choosing only one of two possible options), for example Answer 'yes' or 'no'. </description> <tutorials> </tutorials> diff --git a/doc/classes/CollisionObject.xml b/doc/classes/CollisionObject.xml index 791978993c..71b0c5fa7c 100644 --- a/doc/classes/CollisionObject.xml +++ b/doc/classes/CollisionObject.xml @@ -1,8 +1,10 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="CollisionObject" inherits="Spatial" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Base node for collision objects. </brief_description> <description> + CollisionObject is the base class for physics objects. It can hold any number of collision [Shape]s. Each shape must be assigned to a [i]shape owner[/i]. The CollisionObject can have any number of shape owners. Shape owners are not nodes and do not appear in the editor, but are accessible through code using the [code]shape_owner_*[/code] methods. </description> <tutorials> </tutorials> @@ -16,7 +18,7 @@ </argument> <argument index="1" name="event" type="InputEvent"> </argument> - <argument index="2" name="click_pos" type="Vector3"> + <argument index="2" name="click_position" type="Vector3"> </argument> <argument index="3" name="click_normal" type="Vector3"> </argument> @@ -31,7 +33,7 @@ <argument index="0" name="owner" type="Object"> </argument> <description> - Creates new holder for the shapes. Argument is a [CollisionShape] node. It will return owner_id which usually you will want to save for later use. + Creates a new shape owner for the given object. Returns [code]owner_id[/code] of the new owner for future reference. </description> </method> <method name="get_capture_input_on_drag" qualifiers="const"> @@ -44,13 +46,14 @@ <return type="RID"> </return> <description> + Returns the object's [RID]. </description> </method> <method name="get_shape_owners"> <return type="Array"> </return> <description> - Shape owner is a node which is holding concrete shape resources. This method will return an array which is holding an integer numbers that are representing unique ID of each owner. You can use those ids when you are using others shape_owner methods. + Returns an [Array] of [code]owner_id[/code] identifiers. You can use these ids in other methods that take [code]owner_id[/code] as an argument. </description> </method> <method name="is_ray_pickable" qualifiers="const"> @@ -65,6 +68,7 @@ <argument index="0" name="owner_id" type="int"> </argument> <description> + If [code]true[/code] the shape owner and its shapes are disabled. </description> </method> <method name="remove_shape_owner"> @@ -73,6 +77,7 @@ <argument index="0" name="owner_id" type="int"> </argument> <description> + Removes the given shape owner. </description> </method> <method name="set_capture_input_on_drag"> @@ -97,6 +102,7 @@ <argument index="0" name="shape_index" type="int"> </argument> <description> + Returns the [code]owner_id[/code] of the given shape. </description> </method> <method name="shape_owner_add_shape"> @@ -107,6 +113,7 @@ <argument index="1" name="shape" type="Shape"> </argument> <description> + Adds a [Shape] to the shape owner. </description> </method> <method name="shape_owner_clear_shapes"> @@ -115,7 +122,7 @@ <argument index="0" name="owner_id" type="int"> </argument> <description> - Will remove all the shapes associated with given owner. + Removes all shapes from the shape owner. </description> </method> <method name="shape_owner_get_owner" qualifiers="const"> @@ -124,6 +131,7 @@ <argument index="0" name="owner_id" type="int"> </argument> <description> + Returns the parent object of the given shape owner. </description> </method> <method name="shape_owner_get_shape" qualifiers="const"> @@ -134,7 +142,7 @@ <argument index="1" name="shape_id" type="int"> </argument> <description> - Will return a [Shape]. First argument owner_id is an integer that can be obtained from [method get_shape_owners]. Shape_id is a position of the shape inside owner; it's a value in range from 0 to [method shape_owner_get_shape_count]. + Returns the [Shape] with the given id from the given shape owner. </description> </method> <method name="shape_owner_get_shape_count" qualifiers="const"> @@ -143,7 +151,7 @@ <argument index="0" name="owner_id" type="int"> </argument> <description> - Returns number of shapes to which given owner is associated to. + Returns the number of shapes the given shape owner contains. </description> </method> <method name="shape_owner_get_shape_index" qualifiers="const"> @@ -162,7 +170,7 @@ <argument index="0" name="owner_id" type="int"> </argument> <description> - Will return [Transform] of an owner node. + Returns the shape owner's [Transform]. </description> </method> <method name="shape_owner_remove_shape"> @@ -173,7 +181,7 @@ <argument index="1" name="shape_id" type="int"> </argument> <description> - Removes related shape from the owner. + Removes a shape from the given shape owner. </description> </method> <method name="shape_owner_set_disabled"> @@ -184,6 +192,7 @@ <argument index="1" name="disabled" type="bool"> </argument> <description> + If [code]true[/code] disables the given shape owner. </description> </method> <method name="shape_owner_set_transform"> @@ -194,6 +203,7 @@ <argument index="1" name="transform" type="Transform"> </argument> <description> + Sets the [Transform] of the given shape owner. </description> </method> </methods> @@ -209,7 +219,7 @@ </argument> <argument index="1" name="event" type="Object"> </argument> - <argument index="2" name="click_pos" type="Vector3"> + <argument index="2" name="click_position" type="Vector3"> </argument> <argument index="3" name="click_normal" type="Vector3"> </argument> @@ -220,10 +230,12 @@ </signal> <signal name="mouse_entered"> <description> + Emitted when the mouse pointer enters any of this object's shapes. </description> </signal> <signal name="mouse_exited"> <description> + Emitted when the mouse pointer exits all this object's shapes. </description> </signal> </signals> diff --git a/doc/classes/CollisionObject2D.xml b/doc/classes/CollisionObject2D.xml index db1412805f..ec0554d51f 100644 --- a/doc/classes/CollisionObject2D.xml +++ b/doc/classes/CollisionObject2D.xml @@ -1,10 +1,10 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="CollisionObject2D" inherits="Node2D" category="Core" version="3.0.alpha.custom_build"> <brief_description> - Base node for 2D collisionables. + Base node for 2D collision objects. </brief_description> <description> - CollisionObject2D is the base class for 2D physics collisionables. They can hold any number of 2D collision shapes. Usually, they are edited by placing [CollisionShape2D] and/or [CollisionPolygon2D] nodes as children. Such nodes are for reference and not present outside the editor, so code should use the regular shape API. + CollisionObject2D is the base class for 2D physics objects. It can hold any number of 2D collision [Shape2D]s. Each shape must be assigned to a [i]shape owner[/i]. The CollisionObject2D can have any number of shape owners. Shape owners are not nodes and do not appear in the editor, but are accessible through code using the [code]shape_owner_*[/code] methods. </description> <tutorials> </tutorials> @@ -29,21 +29,21 @@ <argument index="0" name="owner" type="Object"> </argument> <description> - Creates new holder for the shapes. Argument is a [CollisionShape2D] node. It will return owner_id which usually you will want to save for later use. + Creates a new shape owner for the given object. Returns [code]owner_id[/code] of the new owner for future reference. </description> </method> <method name="get_rid" qualifiers="const"> <return type="RID"> </return> <description> - Return the RID of this object. + Returns the object's [RID]. </description> </method> <method name="get_shape_owners"> <return type="Array"> </return> <description> - Shape owner is a node which is holding concrete shape resources. This method will return an array which is holding an integer numbers that are representing unique ID of each owner. You can use those ids when you are using others shape_owner methods. + Returns an [Array] of [code]owner_id[/code] identifiers. You can use these ids in other methods that take [code]owner_id[/code] as an argument. </description> </method> <method name="is_pickable" qualifiers="const"> @@ -59,6 +59,7 @@ <argument index="0" name="owner_id" type="int"> </argument> <description> + If [code]true[/code] the shape owner and its shapes are disabled. </description> </method> <method name="is_shape_owner_one_way_collision_enabled" qualifiers="const"> @@ -75,6 +76,7 @@ <argument index="0" name="owner_id" type="int"> </argument> <description> + Removes the given shape owner. </description> </method> <method name="set_pickable"> @@ -92,6 +94,7 @@ <argument index="0" name="shape_index" type="int"> </argument> <description> + Returns the [code]owner_id[/code] of the given shape. </description> </method> <method name="shape_owner_add_shape"> @@ -102,6 +105,7 @@ <argument index="1" name="shape" type="Shape2D"> </argument> <description> + Adds a [Shape2D] to the shape owner. </description> </method> <method name="shape_owner_clear_shapes"> @@ -110,7 +114,7 @@ <argument index="0" name="owner_id" type="int"> </argument> <description> - Will remove all the shapes associated with given owner. + Removes all shapes from the shape owner. </description> </method> <method name="shape_owner_get_owner" qualifiers="const"> @@ -119,6 +123,7 @@ <argument index="0" name="owner_id" type="int"> </argument> <description> + Returns the parent object of the given shape owner. </description> </method> <method name="shape_owner_get_shape" qualifiers="const"> @@ -129,7 +134,7 @@ <argument index="1" name="shape_id" type="int"> </argument> <description> - Will return a [Shape2D]. First argument owner_id is an integer that can be obtained from [method get_shape_owners]. Shape_id is a position of the shape inside owner; it's a value in range from 0 to [method shape_owner_get_shape_count]. + Returns the [Shape2D] with the given id from the given shape owner. </description> </method> <method name="shape_owner_get_shape_count" qualifiers="const"> @@ -138,7 +143,7 @@ <argument index="0" name="owner_id" type="int"> </argument> <description> - Returns number of shapes to which given owner is associated to. + Returns the number of shapes the given shape owner contains. </description> </method> <method name="shape_owner_get_shape_index" qualifiers="const"> @@ -157,7 +162,7 @@ <argument index="0" name="owner_id" type="int"> </argument> <description> - Will return [Transform2D] of an owner node. + Returns the shape owner's [Transform2D]. </description> </method> <method name="shape_owner_remove_shape"> @@ -168,7 +173,7 @@ <argument index="1" name="shape_id" type="int"> </argument> <description> - Removes related shape from the owner. + Removes a shape from the given shape owner. </description> </method> <method name="shape_owner_set_disabled"> @@ -179,6 +184,7 @@ <argument index="1" name="disabled" type="bool"> </argument> <description> + If [code]true[/code] disables the given shape owner. </description> </method> <method name="shape_owner_set_one_way_collision"> @@ -199,11 +205,13 @@ <argument index="1" name="transform" type="Transform2D"> </argument> <description> + Sets the [Transform2D] of the given shape owner. </description> </method> </methods> <members> <member name="input_pickable" type="bool" setter="set_pickable" getter="is_pickable"> + If [code]true[/code] this object is pickable. A pickable object can detect the mouse pointer entering/leaving, and if the mouse is inside it, report input events. </member> </members> <signals> @@ -215,16 +223,17 @@ <argument index="2" name="shape_idx" type="int"> </argument> <description> + Emitted when an input event occurs and [code]input_pickable[/code] is [code]true[/code]. </description> </signal> <signal name="mouse_entered"> <description> - This event fires only once when the mouse pointer enters any shape of this object. + Emitted when the mouse pointer enters any of this object's shapes. </description> </signal> <signal name="mouse_exited"> <description> - This event fires only once when the mouse pointer exits all shapes of this object. + Emitted when the mouse pointer exits all this object's shapes. </description> </signal> </signals> diff --git a/doc/classes/CollisionPolygon2D.xml b/doc/classes/CollisionPolygon2D.xml index d3dee1e9bb..7f30e8e83e 100644 --- a/doc/classes/CollisionPolygon2D.xml +++ b/doc/classes/CollisionPolygon2D.xml @@ -1,10 +1,10 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="CollisionPolygon2D" inherits="Node2D" category="Core" version="3.0.alpha.custom_build"> <brief_description> - Editor-only class for defining a collision polygon in 2D space. + Defines a 2D collision polygon. </brief_description> <description> - Allows editing a collision polygon's vertices. This class is only available in the editor. It will not appear in the scene tree at runtime. Creates a [Shape2D] for gameplay. Properties modified during gameplay will have no effect. + Provides a 2D collision polygon to a [CollisionObject2D] parent. Polygon can be drawn in the editor or specified by a list of vertices. </description> <tutorials> </tutorials> @@ -75,22 +75,24 @@ </methods> <members> <member name="build_mode" type="int" setter="set_build_mode" getter="get_build_mode" enum="CollisionPolygon2D.BuildMode"> - If BUILD_SOLIDS, the polygon and the area within it will have collision. If BUILD_SEGMENTS, only the edges of the polygon will have collision. + Collision build mode. Use one of the [code]BUILD_*[/code] constants. Default value: [code]BUILD_SOLIDS[/code]. </member> <member name="disabled" type="bool" setter="set_disabled" getter="is_disabled"> - If true, no collision will be produced. + If [code]true[/code] no collisions will be detected. </member> <member name="one_way_collision" type="bool" setter="set_one_way_collision" getter="is_one_way_collision_enabled"> - If true, only edges that face up, relative to CollisionPolygon2D's rotation, will collide with other objects. + If [code]true[/code] only edges that face up, relative to CollisionPolygon2D's rotation, will collide with other objects. </member> <member name="polygon" type="PoolVector2Array" setter="set_polygon" getter="get_polygon"> - Array of vertices which define the polygon. + The polygon's list of vertices. The final point will be connected to the first. </member> </members> <constants> <constant name="BUILD_SOLIDS" value="0"> + Collisions will include the polygon and its contained area. </constant> <constant name="BUILD_SEGMENTS" value="1"> + Collisions will only include the polygon edges. </constant> </constants> </class> diff --git a/doc/classes/ColorPicker.xml b/doc/classes/ColorPicker.xml index 87414eb03a..74c12cb9b2 100644 --- a/doc/classes/ColorPicker.xml +++ b/doc/classes/ColorPicker.xml @@ -93,6 +93,8 @@ </theme_item> <theme_item name="margin" type="int"> </theme_item> + <theme_item name="preset_bg" type="Texture"> + </theme_item> <theme_item name="screen_picker" type="Texture"> </theme_item> <theme_item name="sv_height" type="int"> diff --git a/doc/classes/ColorPickerButton.xml b/doc/classes/ColorPickerButton.xml index 59b74edd77..7b54be36c9 100644 --- a/doc/classes/ColorPickerButton.xml +++ b/doc/classes/ColorPickerButton.xml @@ -72,6 +72,8 @@ <constants> </constants> <theme_items> + <theme_item name="bg" type="Texture"> + </theme_item> <theme_item name="disabled" type="StyleBox"> </theme_item> <theme_item name="focus" type="StyleBox"> diff --git a/doc/classes/ColorRect.xml b/doc/classes/ColorRect.xml index 90e88603b0..6e70a1e8b7 100644 --- a/doc/classes/ColorRect.xml +++ b/doc/classes/ColorRect.xml @@ -38,6 +38,10 @@ </methods> <members> <member name="color" type="Color" setter="set_frame_color" getter="get_frame_color"> + The color to fill the [code]ColorRect[/code]. + [codeblock] + $ColorRect.color = Color(1, 0, 0, 1) # Set ColorRect node's color to red + [/codeblock] </member> </members> <constants> diff --git a/doc/classes/ConeTwistJoint.xml b/doc/classes/ConeTwistJoint.xml index 67c7cc4cfe..78655c496d 100644 --- a/doc/classes/ConeTwistJoint.xml +++ b/doc/classes/ConeTwistJoint.xml @@ -1,8 +1,12 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="ConeTwistJoint" inherits="Joint" category="Core" version="3.0.alpha.custom_build"> <brief_description> + A twist joint between two 3D bodies </brief_description> <description> + The joint can rotate the bodies across an axis defined by the local x-axes of the [Joint]. + The twist axis is initiated as the x-axis of the [Joint]. + Once the Bodies swing, the twist axis is calculated as the middle of the x-axes of the Joint in the local space of the two Bodies. </description> <tutorials> </tutorials> @@ -30,28 +34,49 @@ </methods> <members> <member name="bias" type="float" setter="set_param" getter="get_param"> + The speed with which the swing or twist will take place. + The higher, the faster. </member> <member name="relaxation" type="float" setter="set_param" getter="get_param"> + Defines, how fast the swing- and twist-speed-difference on both sides gets synced. </member> <member name="softness" type="float" setter="set_param" getter="get_param"> + The ease with which the joint starts to twist. If it's too low, it takes more force to start twisting the joint. </member> <member name="swing_span" type="float" setter="_set_swing_span" getter="_get_swing_span"> + Swing is rotation from side to side, around the axis perpendicular to the twist axis. + The swing span defines, how much rotation will not get corrected allong the swing axis. + Could be defined as looseness in the [ConeTwistJoint]. + If below 0.05, this behaviour is locked. Default value: [code]PI/4[/code]. </member> <member name="twist_span" type="float" setter="_set_twist_span" getter="_get_twist_span"> + Twist is the rotation around the twist axis, this value defined how far the joint can twist. + Twist is locked if below 0.05. </member> </members> <constants> <constant name="PARAM_SWING_SPAN" value="0"> + Swing is rotation from side to side, around the axis perpendicular to the twist axis. + The swing span defines, how much rotation will not get corrected allong the swing axis. + Could be defined as looseness in the [ConeTwistJoint]. + If below 0.05, this behaviour is locked. Default value: [code]PI/4[/code]. </constant> <constant name="PARAM_TWIST_SPAN" value="1"> + Twist is the rotation around the twist axis, this value defined how far the joint can twist. + Twist is locked if below 0.05. </constant> <constant name="PARAM_BIAS" value="2"> + The speed with which the swing or twist will take place. + The higher, the faster. </constant> <constant name="PARAM_SOFTNESS" value="3"> + The ease with which the joint starts to twist. If it's too low, it takes more force to start twisting the joint. </constant> <constant name="PARAM_RELAXATION" value="4"> + Defines, how fast the swing- and twist-speed-difference on both sides gets synced. </constant> <constant name="PARAM_MAX" value="5"> + End flag of PARAM_* constants, used internally. </constant> </constants> </class> diff --git a/doc/classes/ConfigFile.xml b/doc/classes/ConfigFile.xml index c2d1ec1355..846a100f3c 100644 --- a/doc/classes/ConfigFile.xml +++ b/doc/classes/ConfigFile.xml @@ -4,15 +4,22 @@ Helper class to handle INI-style files. </brief_description> <description> - This helper class can be used to store [Variant] values on the filesystem using an INI-style formatting. The stored values as referenced by a section and a key. The stored data can be saved to or parsed from a file, though ConfigFile objects can also be used directly with accessing the filesystem. - The following example shows how to parse a INI-style file from the system, read its contents and store new values in it: + This helper class can be used to store [Variant] values on the filesystem using INI-style formatting. The stored values are indentified by a section and a key: + [codeblock] + [section] + some_key=42 + string_example="Hello World!" + a_vector=Vector3( 1, 0, 2 ) + [/codeblock] + The stored data can be saved to or parsed from a file, though ConfigFile objects can also be used directly without accessing the filesystem. + The following example shows how to parse an INI-style file from the system, read its contents and store new values in it: [codeblock] var config = ConfigFile.new() var err = config.load("user://settings.cfg") if err == OK: # if not, something went wrong with the file loading # Look for the display/width pair, and default to 1024 if missing var screen_width = get_value("display", "width", 1024) - # Store a variable if and only it hasn't been defined yet + # Store a variable if and only if it hasn't been defined yet if not config.has_section_key("audio", "mute"): config.set_value("audio", "mute", false) # Save the changes by overwriting the previous file @@ -30,6 +37,7 @@ <argument index="0" name="section" type="String"> </argument> <description> + Deletes the specified section along with all the key-value pairs inside. </description> </method> <method name="get_section_keys" qualifiers="const"> @@ -38,14 +46,14 @@ <argument index="0" name="section" type="String"> </argument> <description> - Return an array of all defined key identifiers in the specified section. + Returns an array of all defined key identifiers in the specified section. </description> </method> <method name="get_sections" qualifiers="const"> <return type="PoolStringArray"> </return> <description> - Return an array of all defined section identifiers. + Returns an array of all defined section identifiers. </description> </method> <method name="get_value" qualifiers="const"> @@ -58,7 +66,7 @@ <argument index="2" name="default" type="Variant" default="null"> </argument> <description> - Return the current value for the specified section and key. If the section and/or the key do not exist, the method returns the value of the optional [i]default[/i] argument (and thus [code]NULL[/code] if not specified). + Returns the current value for the specified section and key. If the section and/or the key do not exist, the method returns the value of the optional [code]default[/code] argument, or [code]null[/code] if it is omitted. </description> </method> <method name="has_section" qualifiers="const"> @@ -67,7 +75,7 @@ <argument index="0" name="section" type="String"> </argument> <description> - Check if the specified section exists. + Returns [code]true[/code] if the specified section exists. </description> </method> <method name="has_section_key" qualifiers="const"> @@ -78,7 +86,7 @@ <argument index="1" name="key" type="String"> </argument> <description> - Check if the specified section-key pair exists. + Returns [code]true[/code] if the specified section-key pair exists. </description> </method> <method name="load"> @@ -87,7 +95,7 @@ <argument index="0" name="path" type="String"> </argument> <description> - Load the config file specified as a parameter. The file's contents are parsed and loaded in the ConfigFile object from which the method was called. The return value is one of the OK, FAILED or ERR_* constants listed in [@Global Scope] (if the load was successful, it returns OK). + Loads the config file specified as a parameter. The file's contents are parsed and loaded in the ConfigFile object which the method was called on. Returns one of the [code]OK[/code], [code]FAILED[/code] or [code]ERR_*[/code] constants listed in [@Global Scope]. If the load was successful, the return value is [code]OK[/code]. </description> </method> <method name="save"> @@ -96,8 +104,7 @@ <argument index="0" name="path" type="String"> </argument> <description> - Save the contents of the ConfigFile object to the file specified as a parameter. The output file uses an INI-style structure. - The return value is one of the OK, FAILED or ERR_* constants listed in [@Global Scope] (if the save was successful, it returns OK). + Saves the contents of the ConfigFile object to the file specified as a parameter. The output file uses an INI-style structure. Returns one of the [code]OK[/code], [code]FAILED[/code] or [code]ERR_*[/code] constants listed in [@Global Scope]. If the load was successful, the return value is [code]OK[/code]. </description> </method> <method name="set_value"> @@ -110,7 +117,7 @@ <argument index="2" name="value" type="Variant"> </argument> <description> - Assign a value to the specified key of the the specified section. If the section and/or the key do not exist, they are created. Passing a [code]NULL[/code] value deletes the specified key if it exists (and deletes the section if it ends up empty once the key has been removed). + Assigns a value to the specified key of the the specified section. If the section and/or the key do not exist, they are created. Passing a [code]null[/code] value deletes the specified key if it exists, and deletes the section if it ends up empty once the key has been removed. </description> </method> </methods> diff --git a/doc/classes/Control.xml b/doc/classes/Control.xml index 5d77f3a450..77bbfa186b 100644 --- a/doc/classes/Control.xml +++ b/doc/classes/Control.xml @@ -1,16 +1,16 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="Control" inherits="CanvasItem" category="Core" version="3.0.alpha.custom_build"> <brief_description> - Base node for all User Interface components. + All User Interface nodes inherit from Control. Features anchors and margins to adapt its position and size to its parent. </brief_description> <description> - The base class Node for all User Interface components. Every UI node inherits from it. Any scene or portion of a scene tree composed of Control nodes is a User Interface. - Controls use anchors and margins to place themselves relative to their parent. They adapt automatically when their parent or the screen size changes. To build flexible UIs, use built-in [Container] nodes or create your own. - Anchors work by defining which margin do they follow, and a value relative to it. Allowed anchoring modes are ANCHOR_BEGIN, where the margin is relative to the top or left margins of the parent (in pixels), ANCHOR_END for the right and bottom margins of the parent and ANCHOR_RATIO, which is a ratio from 0 to 1 in the parent range. - Godot sends Input events to the root node first, via [method Node._input]. The method distributes it through the node tree and delivers the input events to the node under the mouse cursor or on focus with the keyboard. To do so, it calls [method MainLoop._input_event]. No need to enable [method Node.set_process_input] on Controls to receive input events. Call [method accept_event] to ensure no other node receives the event, not even [method Node._unhandled_input]. - Only the one Control node in focus receives keyboard events. To do so, the Control must get the focus mode with [method set_focus_mode]. It loses focus when another Control gets it, or if the current Control in focus is hidden. - You'll sometimes want Controls to ignore mouse or touch events. For example, if you place an icon on top of a button. Call [method set_ignore_mouse] for that. - [Theme] resources change the Control's appearance. If you change the [Theme] on a parent Control node, it will propagate to all of its children. You can override parts of the theme on each Control with the add_*_override methods, like [method add_font_override]. You can also override the theme from the editor. + Base class for all User Interface or [i]UI[/i] related nodes. [code]Control[/code] features a bounding rectangle that defines its extents, an anchor position relative to its parent and margins that represent an offset to the anchor. The margins update automatically when the node, any of its parents, or the screen size change. + For more information on Godot's UI system, anchors, margins, and containers, see the related tutorials in the manual. To build flexible UIs, you'll need a mix of UI elements that inherit from [code]Control[/code] and [Container] nodes. + [b]User Interface nodes and input[/b] + Godot sends input events to the scene's root node first, by calling [method Node._input]. [method Node._input] forwards the event down the node tree to the nodes under the mouse cursor, or on keyboard focus. To do so, it calls [method MainLoop._input_event]. Call [method accept_event] so no other node receives the event. Once you accepted an input, it becomes handled so [method Node._unhandled_input] will not process it. + Only one [code]Control[/code] node can be in keyboard focus. Only the node in focus will receive keyboard events. To get the foucs, call [method set_focus_mode]. [code]Control[/code] nodes lose focus when another node grabs it, or if you hide the node in focus. + Call [method set_ignore_mouse] to tell a [code]Control[/code] node to ignore mouse or touch events. You'll need it if you place an icon on top of a button. + [Theme] resources change the Control's appearance. If you change the [Theme] on a [code]Control[/code] node, it affects all of its children. To override some of the theme's parameters, call one of the [code]add_*_override[/code] methods, like [method add_font_override]. You can override the theme with the inspector. </description> <tutorials> </tutorials> @@ -21,7 +21,7 @@ <return type="Vector2"> </return> <description> - Returns the minimum size this Control can shrink to. A control will never be displayed or resized smaller than its minimum size. + Returns the minimum size this Control can shrink to. The node can never be smaller than this minimum size. </description> </method> <method name="_gui_input" qualifiers="virtual"> @@ -30,13 +30,15 @@ <argument index="0" name="event" type="InputEvent"> </argument> <description> + The node's parent forwards input events to this method. Use it to process and accept inputs on UI elements. See [method accept_event]. + Replaces Godot 2's [code]_input_event[/code]. </description> </method> <method name="accept_event"> <return type="void"> </return> <description> - Marks the input event as handled. No other Control will receive it, and the input event will not propagate. Not even to nodes listening to [method Node._unhandled_input] or [method Node._unhandled_key_input]. + Marks an input event as handled. Once you accept an input event, it stops propagating, even to nodes listening to [method Node._unhandled_input] or [method Node._unhandled_key_input]. </description> </method> <method name="add_color_override"> @@ -47,6 +49,7 @@ <argument index="1" name="color" type="Color"> </argument> <description> + Overrides the color in the [theme] resource the node uses. </description> </method> <method name="add_constant_override"> @@ -57,7 +60,7 @@ <argument index="1" name="constant" type="int"> </argument> <description> - Override a single constant (integer) in the theme of this Control. If constant equals Theme.INVALID_CONSTANT, override is cleared. + Overrides an integer constant in the [theme] resource the node uses. If the [code]constant[code] is invalid, Godot clears the override. See [member Theme.INVALID_CONSTANT] for more information. </description> </method> <method name="add_font_override"> @@ -68,7 +71,7 @@ <argument index="1" name="font" type="Font"> </argument> <description> - Override a single font (font) in the theme of this Control. If font is empty, override is cleared. + Overrides the [code]name[/code] font in the [theme] resource the node uses. If [code]font[/code] is empty, Godot clears the override. </description> </method> <method name="add_icon_override"> @@ -79,7 +82,7 @@ <argument index="1" name="texture" type="Texture"> </argument> <description> - Override a single icon ([Texture]) in the theme of this Control. If texture is empty, override is cleared. + Overrides the [code]name[/code] icon in the [theme] resource the node uses. If [code]icon[/code] is empty, Godot clears the override. </description> </method> <method name="add_shader_override"> @@ -90,6 +93,7 @@ <argument index="1" name="shader" type="Shader"> </argument> <description> + Overrides the [code]name[/code] shader in the [theme] resource the node uses. If [code]shader[/code] is empty, Godot clears the override. </description> </method> <method name="add_style_override"> @@ -100,13 +104,13 @@ <argument index="1" name="stylebox" type="StyleBox"> </argument> <description> - Override a single stylebox ([Stylebox]) in the theme of this Control. If stylebox is empty, override is cleared. + Overrides the [code]name[/code] [Stylebox] in the [theme] resource the node uses. If [code]stylebox[/code] is empty, Godot clears the override. </description> </method> <method name="can_drop_data" qualifiers="virtual"> <return type="bool"> </return> - <argument index="0" name="pos" type="Vector2"> + <argument index="0" name="position" type="Vector2"> </argument> <argument index="1" name="data" type="Variant"> </argument> @@ -116,7 +120,7 @@ <method name="drop_data" qualifiers="virtual"> <return type="void"> </return> - <argument index="0" name="pos" type="Vector2"> + <argument index="0" name="position" type="Vector2"> </argument> <argument index="1" name="data" type="Variant"> </argument> @@ -177,10 +181,10 @@ <method name="get_cursor_shape" qualifiers="const"> <return type="int" enum="Control.CursorShape"> </return> - <argument index="0" name="pos" type="Vector2" default="Vector2( 0, 0 )"> + <argument index="0" name="position" type="Vector2" default="Vector2( 0, 0 )"> </argument> <description> - Return the cursor shape at a certain position in the control. + Returns the mouse cursor shape the control displays on mouse hover, one of the [code]CURSOR_*[/code] constants. </description> </method> <method name="get_custom_minimum_size" qualifiers="const"> @@ -193,13 +197,13 @@ <return type="int" enum="Control.CursorShape"> </return> <description> - Return the default cursor shape for this control. See enum CURSOR_* for the list of shapes. + Returns the default cursor shape for this control. See enum [code]CURSOR_*[/code] for the list of shapes. </description> </method> <method name="get_drag_data" qualifiers="virtual"> <return type="Object"> </return> - <argument index="0" name="pos" type="Vector2"> + <argument index="0" name="position" type="Vector2"> </argument> <description> </description> @@ -390,7 +394,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="at_position" type="Vector2" default="Vector2( 0, 0 )"> </argument> <description> Return the tooltip, which will appear when the cursor is resting over this control. @@ -574,29 +578,32 @@ <description> </description> </method> - <method name="set_anchors_preset"> + <method name="set_anchors_and_margins_preset"> <return type="void"> </return> <argument index="0" name="preset" type="int" enum="Control.LayoutPreset"> </argument> - <argument index="1" name="keep_margin" type="bool" default="false"> + <argument index="1" name="resize_mode" type="int" enum="Control.LayoutPresetMode" default="0"> + </argument> + <argument index="2" name="margin" type="int" default="0"> </argument> <description> </description> </method> - <method name="set_area_as_parent_rect"> + <method name="set_anchors_preset"> <return type="void"> </return> - <argument index="0" name="margin" type="int" default="0"> + <argument index="0" name="preset" type="int" enum="Control.LayoutPreset"> + </argument> + <argument index="1" name="keep_margin" type="bool" default="false"> </argument> <description> - Change all margins and anchors, so this Control always takes up the same area as the parent Control. This is a helper (see [method set_anchor], [method set_margin]). </description> </method> <method name="set_begin"> <return type="void"> </return> - <argument index="0" name="pos" type="Vector2"> + <argument index="0" name="position" type="Vector2"> </argument> <description> Sets MARGIN_LEFT and MARGIN_TOP at the same time. This is a helper (see [method set_margin]). @@ -624,7 +631,7 @@ <argument index="0" name="shape" type="int" enum="Control.CursorShape"> </argument> <description> - Set the default cursor shape for this control. See enum CURSOR_* for the list of shapes. + Sets the default cursor shape for this control. See [code]CURSOR_*[/code] for the list of available cursor shapes. Useful for Godot plugins and applications or games that use the system's mouse cursors. </description> </method> <method name="set_drag_forwarding"> @@ -646,7 +653,7 @@ <method name="set_end"> <return type="void"> </return> - <argument index="0" name="pos" type="Vector2"> + <argument index="0" name="position" type="Vector2"> </argument> <description> Sets MARGIN_RIGHT and MARGIN_BOTTOM at the same time. This is a helper (see [method set_margin]). @@ -675,7 +682,7 @@ <method name="set_global_position"> <return type="void"> </return> - <argument index="0" name="pos" type="Vector2"> + <argument index="0" name="position" type="Vector2"> </argument> <description> Move the Control to a new position, relative to the top-left corner of the [i]window[/i] Control, and without changing current anchor mode. (see [method set_margin]). @@ -709,6 +716,18 @@ Set a margin offset. Margin can be one of (MARGIN_LEFT, MARGIN_TOP, MARGIN_RIGHT, MARGIN_BOTTOM). Offset value being set depends on the anchor mode. </description> </method> + <method name="set_margins_preset"> + <return type="void"> + </return> + <argument index="0" name="preset" type="int" enum="Control.LayoutPreset"> + </argument> + <argument index="1" name="resize_mode" type="int" enum="Control.LayoutPresetMode" default="0"> + </argument> + <argument index="2" name="margin" type="int" default="0"> + </argument> + <description> + </description> + </method> <method name="set_mouse_filter"> <return type="void"> </return> @@ -729,7 +748,7 @@ <method name="set_position"> <return type="void"> </return> - <argument index="0" name="pos" type="Vector2"> + <argument index="0" name="position" type="Vector2"> </argument> <description> Move the Control to a new position, relative to the top-left corner of the parent Control, changing all margins if needed and without changing current anchor mode. This is a helper (see [method set_margin]). @@ -785,7 +804,7 @@ <argument index="0" name="theme" type="Theme"> </argument> <description> - Override whole the [Theme] for this Control and all its children controls. + Overrides the whole [Theme] for this node and all its [code]Control[/code] children. </description> </method> <method name="set_tooltip"> @@ -794,7 +813,7 @@ <argument index="0" name="tooltip" type="String"> </argument> <description> - Set a tooltip, which will appear when the cursor is resting over this control. + Changes the tooltip text. The tooltip appears when the user's mouse cursor stays idle over this control for a few moments. </description> </method> <method name="set_v_grow_direction"> @@ -826,7 +845,7 @@ <method name="warp_mouse"> <return type="void"> </return> - <argument index="0" name="to_pos" type="Vector2"> + <argument index="0" name="to_position" type="Vector2"> </argument> <description> </description> @@ -834,58 +853,83 @@ </methods> <members> <member name="anchor_bottom" type="float" setter="_set_anchor" getter="get_anchor"> + Anchors the bottom edge of the node to the origin, the center, or the end of its parent container. It changes how the bottom margin updates when the node moves or changes size. Use one of the [code]ANCHOR_*[/code] constants. Default value: [code]ANCHOR_BEGIN[/code]. </member> <member name="anchor_left" type="float" setter="_set_anchor" getter="get_anchor"> + Anchors the left edge of the node to the origin, the center or the end of its parent container. It changes how the left margin updates when the node moves or changes size. Use one of the [code]ANCHOR_*[/code] constants. Default value: [code]ANCHOR_BEGIN[/code]. </member> <member name="anchor_right" type="float" setter="_set_anchor" getter="get_anchor"> + Anchors the right edge of the node to the origin, the center or the end of its parent container. It changes how the right margin updates when the node moves or changes size. Use one of the [code]ANCHOR_*[/code] constants. Default value: [code]ANCHOR_BEGIN[/code]. </member> <member name="anchor_top" type="float" setter="_set_anchor" getter="get_anchor"> + Anchors the top edge of the node to the origin, the center or the end of its parent container. It changes how the top margin updates when the node moves or changes size. Use one of the [code]ANCHOR_*[/code] constants. Default value: [code]ANCHOR_BEGIN[/code]. </member> <member name="focus_neighbour_bottom" type="NodePath" setter="set_focus_neighbour" getter="get_focus_neighbour"> + Tells Godot which node it should give keyboard focus to if the user presses Tab, the down arrow on the keyboard, or down on a gamepad. The node must be a [code]Control[/code]. If this property is not set, Godot will give focus to the closest [code]Control[/code] to the bottom of this one. + If the user presses Tab, Godot will give focus to the closest node to the right first, then to the bottom. If the user presses Shift+Tab, Godot will look to the left of the node, then above it. </member> <member name="focus_neighbour_left" type="NodePath" setter="set_focus_neighbour" getter="get_focus_neighbour"> + Tells Godot which node it should give keyboard focus to if the user presses Shift+Tab, the left arrow on the keyboard or left on a gamepad. The node must be a [code]Control[/code]. If this property is not set, Godot will give focus to the closest [code]Control[/code] to the left of this one. </member> <member name="focus_neighbour_right" type="NodePath" setter="set_focus_neighbour" getter="get_focus_neighbour"> + Tells Godot which node it should give keyboard focus to if the user presses Tab, the right arrow on the keyboard or right on a gamepad. The node must be a [code]Control[/code]. If this property is not set, Godot will give focus to the closest [code]Control[/code] to the bottom of this one. </member> <member name="focus_neighbour_top" type="NodePath" setter="set_focus_neighbour" getter="get_focus_neighbour"> + Tells Godot which node it should give keyboard focus to if the user presses Shift+Tab, the top arrow on the keyboard or top on a gamepad. The node must be a [code]Control[/code]. If this property is not set, Godot will give focus to the closest [code]Control[/code] to the bottom of this one. </member> <member name="grow_horizontal" type="int" setter="set_h_grow_direction" getter="get_h_grow_direction" enum="Control.GrowDirection"> </member> <member name="grow_vertical" type="int" setter="set_v_grow_direction" getter="get_v_grow_direction" enum="Control.GrowDirection"> </member> <member name="hint_tooltip" type="String" setter="set_tooltip" getter="_get_tooltip"> + Changes the tooltip text. The tooltip appears when the user's mouse cursor stays idle over this control for a few moments. </member> <member name="margin_bottom" type="float" setter="set_margin" getter="get_margin"> + Distance between the node's bottom edge and its parent container, based on [member anchor_bottom]. + Margins are often controlled by one or multiple parent [Container] nodes. Margins update automatically when you move or resize the node. </member> <member name="margin_left" type="float" setter="set_margin" getter="get_margin"> + Distance between the node's left edge and its parent container, based on [member anchor_left]. </member> <member name="margin_right" type="float" setter="set_margin" getter="get_margin"> + Distance between the node's right edge and its parent container, based on [member anchor_right]. </member> <member name="margin_top" type="float" setter="set_margin" getter="get_margin"> + Distance between the node's top edge and its parent container, based on [member anchor_top]. </member> <member name="mouse_filter" type="int" setter="set_mouse_filter" getter="get_mouse_filter" enum="Control.MouseFilter"> </member> <member name="rect_clip_content" type="bool" setter="set_clip_contents" getter="is_clipping_contents"> </member> <member name="rect_min_size" type="Vector2" setter="set_custom_minimum_size" getter="get_custom_minimum_size"> + The minimum size of the node's bounding rectangle. If you set it to a value greater than (0, 0), the node's bounding rectangle will always have at least this size, even if its content is smaller. If it's set to (0, 0), the node sizes automatically to fit its content, be it a texture or child nodes. </member> <member name="rect_pivot_offset" type="Vector2" setter="set_pivot_offset" getter="get_pivot_offset"> + By default, the node's pivot is its top-left corner. When you change its [member rect_scale], it will scale around this pivot. Set this property to [member rect_size] / 2 to center the pivot in the node's rectangle. </member> <member name="rect_position" type="Vector2" setter="set_position" getter="get_position"> + The node's position, relative to its parent. It corresponds to the rectangle's top-left corner. The property is not affected by [member rect_pivot_offset]. </member> <member name="rect_rotation" type="float" setter="set_rotation_deg" getter="get_rotation_deg"> + The node's rotation around its pivot, in degrees. See [member rect_pivot_offset] to change the pivot's position. </member> <member name="rect_scale" type="Vector2" setter="set_scale" getter="get_scale"> + The node's scale, relative to its [member rect_size]. Change this property to scale the node around its [member rect_pivot_offset]. </member> <member name="rect_size" type="Vector2" setter="set_size" getter="get_size"> + The size of the node's bounding rectangle, in pixels. [Container] nodes update this property automatically. </member> <member name="size_flags_horizontal" type="int" setter="set_h_size_flags" getter="get_h_size_flags"> + Tells the parent [Container] nodes how they should resize and place the node on the X axis. Use one of the [code]SIZE_*[/code] constants to change the flags. See the constants to learn what each does. </member> <member name="size_flags_stretch_ratio" type="float" setter="set_stretch_ratio" getter="get_stretch_ratio"> + If the node and at least one of its neighbours uses the [code]SIZE_EXPAND[/code] size flag, the parent [Container] will let it take more or less space depending on this property. If this node has a stretch ratio of 2 and its neighbour a ratio of 1, this node will take two thirds of the available space. </member> <member name="size_flags_vertical" type="int" setter="set_v_size_flags" getter="get_v_size_flags"> + Tells the parent [Container] nodes how they should resize and place the node on the Y axis. Use one of the [code]SIZE_*[/code] constants to change the flags. See the constants to learn what each does. </member> <member name="theme" type="Theme" setter="set_theme" getter="get_theme"> + Changing this property replaces the current [Theme] resource this node and all its [code]Control[/code] children use. </member> </members> <signals> @@ -903,6 +947,7 @@ <argument index="0" name="ev" type="Object"> </argument> <description> + Emitted when the node receives an [InputEvent]. </description> </signal> <signal name="minimum_size_changed"> @@ -912,16 +957,17 @@ </signal> <signal name="modal_closed"> <description> + Emitted when a modal [code]Control[/code] is closed. See [method show_modal]. </description> </signal> <signal name="mouse_entered"> <description> - Emitted when the mouse enters the control's area. + Emitted when the mouse enters the control's [code]Rect[/code] area. </description> </signal> <signal name="mouse_exited"> <description> - Emitted when the mouse leaves the control's area. + Emitted when the mouse leaves the control's [code]Rect[/code] area. </description> </signal> <signal name="resized"> @@ -931,116 +977,162 @@ </signal> <signal name="size_flags_changed"> <description> - Emitted when the size flags change. + Emitted when one of the size flags changes. See [member size_flags_horizontal] and [member size_flags_vertical]. </description> </signal> </signals> <constants> <constant name="FOCUS_NONE" value="0"> - Control can't acquire focus. + The node cannot grab focus. Use with [member set_focus_mode]. </constant> <constant name="FOCUS_CLICK" value="1"> - Control can acquire focus only if clicked. + The node can only grab focus on mouse clicks. Use with [member set_focus_mode]. </constant> <constant name="FOCUS_ALL" value="2"> - Control can acquire focus if clicked, or by pressing TAB/Directionals in the keyboard from another Control. + The node can grab focus on mouse click or using the arrows and the Tab keys on the keyboard. Use with [member set_focus_mode]. </constant> <constant name="NOTIFICATION_RESIZED" value="40" enum=""> - Control changed size (get_size() reports the new size). + Sent when the node changes size. Use [member rect_size] to get the new size. </constant> <constant name="NOTIFICATION_MOUSE_ENTER" value="41" enum=""> - Mouse pointer entered the area of the Control. + Sent when the mouse pointer enters the node's [code]Rect[/code] area. </constant> <constant name="NOTIFICATION_MOUSE_EXIT" value="42" enum=""> - Mouse pointer exited the area of the Control. + Sent when the mouse pointer exits the node's [code]Rect[/code] area. </constant> <constant name="NOTIFICATION_FOCUS_ENTER" value="43" enum=""> - Control gained focus. + Sent when the node grabs focus. </constant> <constant name="NOTIFICATION_FOCUS_EXIT" value="44" enum=""> - Control lost focus. + Sent when the node loses focus. </constant> <constant name="NOTIFICATION_THEME_CHANGED" value="45" enum=""> - Theme changed. Redrawing is desired. + Sent when the node's [member theme] changes, right before Godot redraws the [code]Control[/code]. Happens when you call one of the [code]add_*_override[/code] </constant> <constant name="NOTIFICATION_MODAL_CLOSE" value="46" enum=""> - Modal control was closed. + Sent when an open modal dialog closes. See [member show_modal]. </constant> <constant name="CURSOR_ARROW" value="0"> + Show the system's arrow mouse cursor when the user hovers the node. Use with [method set_default_cursor_shape]. </constant> <constant name="CURSOR_IBEAM" value="1"> + Show the system's I-beam mouse cursor when the user hovers the node. The I-beam pointer has a shape similar to "I". It tells the user they can highlight or insert text. </constant> <constant name="CURSOR_POINTING_HAND" value="2"> + Show the system's pointing hand mouse cursor when the user hovers the node. </constant> <constant name="CURSOR_CROSS" value="3"> + Show the system's cross mouse cursor when the user hovers the node. </constant> <constant name="CURSOR_WAIT" value="4"> + Show the system's wait mouse cursor, often an hourglass, when the user hovers the node. </constant> <constant name="CURSOR_BUSY" value="5"> + Show the system's busy mouse cursor when the user hovers the node. Often an hourglass. </constant> <constant name="CURSOR_DRAG" value="6"> + Show the system's drag mouse cursor, often a closed fist or a cross symbol, when the user hovers the node. It tells the user they're currently dragging an item, like a node in the Scene dock. </constant> <constant name="CURSOR_CAN_DROP" value="7"> + Show the system's drop mouse cursor when the user hovers the node. It can be an open hand. It tells the user they can drop an item they're currently grabbing, like a node in the Scene dock. </constant> <constant name="CURSOR_FORBIDDEN" value="8"> + Show the system's forbidden mouse cursor when the user hovers the node. Often a crossed circle. </constant> <constant name="CURSOR_VSIZE" value="9"> + Show the system's vertical resize mouse cursor when the user hovers the node. A double headed vertical arrow. It tells the user they can resize the window or the panel vertically. </constant> <constant name="CURSOR_HSIZE" value="10"> + Show the system's horizontal resize mouse cursor when the user hovers the node. A double headed horizontal arrow. It tells the user they can resize the window or the panel horizontally. </constant> <constant name="CURSOR_BDIAGSIZE" value="11"> + Show the system's window resize mouse cursor when the user hovers the node. The cursor is a double headed arrow that goes from the bottom left to the top right. It tells the user they can resize the window or the panel both horizontally and vertically. </constant> <constant name="CURSOR_FDIAGSIZE" value="12"> + Show the system's window resize mouse cursor when the user hovers the node. The cursor is a double headed arrow that goes from the top left to the bottom right, the opposite of [code]CURSOR_BDIAGSIZE[/code]. It tells the user they can resize the window or the panel both horizontally and vertically. </constant> <constant name="CURSOR_MOVE" value="13"> + Show the system's move mouse cursor when the user hovers the node. It shows 2 double-headed arrows at a 90 degree angle. It tells the user they can move a UI element freely. </constant> <constant name="CURSOR_VSPLIT" value="14"> + Show the system's vertical split mouse cursor when the user hovers the node. On Windows, it's the same as [code]CURSOR_VSIZE[/code]. </constant> <constant name="CURSOR_HSPLIT" value="15"> + Show the system's horizontal split mouse cursor when the user hovers the node. On Windows, it's the same as [code]CURSOR_HSIZE[/code]. </constant> <constant name="CURSOR_HELP" value="16"> + Show the system's help mouse cursor when the user hovers the node, a question mark. </constant> <constant name="PRESET_TOP_LEFT" value="0"> + Snap all 4 anchors to the top-left of the parent container's bounds. Use with [method set_anchors_preset]. </constant> <constant name="PRESET_TOP_RIGHT" value="1"> + Snap all 4 anchors to the top-right of the parent container's bounds. Use with [method set_anchors_preset]. </constant> <constant name="PRESET_BOTTOM_LEFT" value="2"> + Snap all 4 anchors to the bottom-left of the parent container's bounds. Use with [method set_anchors_preset]. </constant> <constant name="PRESET_BOTTOM_RIGHT" value="3"> + Snap all 4 anchors to the bottom-right of the parent container's bounds. Use with [method set_anchors_preset]. </constant> <constant name="PRESET_CENTER_LEFT" value="4"> + Snap all 4 anchors to the center of the left edge of the parent container's bounds. Use with [method set_anchors_preset]. </constant> <constant name="PRESET_CENTER_TOP" value="5"> + Snap all 4 anchors to the center of the top edge of the parent container's bounds. Use with [method set_anchors_preset]. </constant> <constant name="PRESET_CENTER_RIGHT" value="6"> + Snap all 4 anchors to the center of the right edge of the parent container's bounds. Use with [method set_anchors_preset]. </constant> <constant name="PRESET_CENTER_BOTTOM" value="7"> + Snap all 4 anchors to the center of the bottom edge of the parent container's bounds. Use with [method set_anchors_preset]. </constant> <constant name="PRESET_CENTER" value="8"> + Snap all 4 anchors to the center of the parent container's bounds. Use with [method set_anchors_preset]. </constant> <constant name="PRESET_LEFT_WIDE" value="9"> + Snap all 4 anchors to the left edge of the parent container. The left margin becomes relative to the left edge and the top margin relative to the top left corner of the node's parent. Use with [method set_anchors_preset]. </constant> <constant name="PRESET_TOP_WIDE" value="10"> + Snap all 4 anchors to the top edge of the parent container. The left margin becomes relative to the top left corner, the top margin relative to the top edge, and the right margin relative to the top right corner of the node's parent. Use with [method set_anchors_preset]. </constant> <constant name="PRESET_RIGHT_WIDE" value="11"> + Snap all 4 anchors to the right edge of the parent container. The right margin becomes relative to the right edge and the top margin relative to the top right corner of the node's parent. Use with [method set_anchors_preset]. </constant> <constant name="PRESET_BOTTOM_WIDE" value="12"> + Snap all 4 anchors to the bottom edge of the parent container. The left margin becomes relative to the bottom left corner, the bottom margin relative to the bottom edge, and the right margin relative to the bottom right corner of the node's parent. Use with [method set_anchors_preset]. </constant> <constant name="PRESET_VCENTER_WIDE" value="13"> + Snap all 4 anchors to a vertical line that cuts the parent container in half. Use with [method set_anchors_preset]. </constant> <constant name="PRESET_HCENTER_WIDE" value="14"> + Snap all 4 anchors to a horizontal line that cuts the parent container in half. Use with [method set_anchors_preset]. </constant> <constant name="PRESET_WIDE" value="15"> + Snap all 4 anchors to the respective corners of the parent container. Set all 4 margins to 0 after you applied this preset and the [code]Control[/code] will fit its parent container. Use with [method set_anchors_preset]. + </constant> + <constant name="PRESET_MODE_MINSIZE" value="0"> + </constant> + <constant name="PRESET_MODE_KEEP_HEIGHT" value="2"> + </constant> + <constant name="PRESET_MODE_KEEP_WIDTH" value="1"> + </constant> + <constant name="PRESET_MODE_KEEP_SIZE" value="3"> </constant> <constant name="SIZE_EXPAND" value="2"> + Tells the parent [Container] to let this node take all the available space on the axis you flag. If multiple neighboring nodes are set to expand, they'll share the space based on their stretch ratio. See [member size_flags_stretch_ratio]. Use with [member size_flags_horizontal] and [member size_flags_vertical]. </constant> <constant name="SIZE_FILL" value="1"> + Tells the parent [Container] to expand the bounds of this node to fill all the available space without pushing any other node. Use with [member size_flags_horizontal] and [member size_flags_vertical]. </constant> <constant name="SIZE_EXPAND_FILL" value="3"> + Sets the node's size flags to both fill and expand. See the 2 constants above for more information. </constant> <constant name="SIZE_SHRINK_CENTER" value="4"> + Tells the parent [Container] to center the node in itself. It centers the [code]Control[/code] based on its bounding box, so it doesn't work with the fill or expand size flags. Use with [member size_flags_horizontal] and [member size_flags_vertical]. </constant> <constant name="SIZE_SHRINK_END" value="8"> + Tells the parent [Container] to align the node with its end, either the bottom or the right edge. It doesn't work with the fill or expand size flags. Use with [member size_flags_horizontal] and [member size_flags_vertical]. </constant> <constant name="MOUSE_FILTER_STOP" value="0"> </constant> @@ -1053,10 +1145,10 @@ <constant name="GROW_DIRECTION_END" value="1"> </constant> <constant name="ANCHOR_BEGIN" value="0"> - X is relative to MARGIN_LEFT, Y is relative to MARGIN_TOP. + Snaps one of the 4 anchor's sides to the origin of the node's [code]Rect[/code], in the top left. Use it with one of the [code]anchor_*[/code] member variables, like [member anchor_left]. To change all 4 anchors at once, use [method set_anchors_preset]. </constant> <constant name="ANCHOR_END" value="1"> - X is relative to -MARGIN_RIGHT, Y is relative to -MARGIN_BOTTOM. + Snaps one of the 4 anchor's sides to the end of the node's [code]Rect[/code], in the bottom right. Use it with one of the [code]anchor_*[/code] member variables, like [member anchor_left]. To change all 4 anchors at once, use [method set_anchors_preset]. </constant> </constants> </class> diff --git a/doc/classes/ConvexPolygonShape.xml b/doc/classes/ConvexPolygonShape.xml index 9a7cb0d475..822b99547e 100644 --- a/doc/classes/ConvexPolygonShape.xml +++ b/doc/classes/ConvexPolygonShape.xml @@ -1,10 +1,10 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="ConvexPolygonShape" inherits="Shape" category="Core" version="3.0.alpha.custom_build"> <brief_description> - Convex Polygon Shape. + Convex polygon shape for 3D physics. </brief_description> <description> - Convex polygon shape resource, which can be set into a [PhysicsBody] or area. + Convex polygon shape resource, which can be added to a [PhysicsBody] or area. </description> <tutorials> </tutorials> @@ -28,6 +28,7 @@ </methods> <members> <member name="points" type="PoolVector3Array" setter="set_points" getter="get_points"> + The list of 3D points forming the convex polygon shape. </member> </members> <constants> diff --git a/doc/classes/ConvexPolygonShape2D.xml b/doc/classes/ConvexPolygonShape2D.xml index c5b6d90041..0cb4f4045b 100644 --- a/doc/classes/ConvexPolygonShape2D.xml +++ b/doc/classes/ConvexPolygonShape2D.xml @@ -16,7 +16,7 @@ <return type="PoolVector2Array"> </return> <description> - Return a list of points in either clockwise or counter clockwise order, forming a convex polygon. + Returns a list of points in either clockwise or counter clockwise order, forming a convex polygon. </description> </method> <method name="set_point_cloud"> @@ -34,12 +34,13 @@ <argument index="0" name="points" type="PoolVector2Array"> </argument> <description> - Set a list of points in either clockwise or counter clockwise order, forming a convex polygon. + Sets a list of points in either clockwise or counter clockwise order, forming a convex polygon. </description> </method> </methods> <members> <member name="points" type="PoolVector2Array" setter="set_points" getter="get_points"> + The polygon's list of vertices. Can be in either clockwise or counterclockwise order. </member> </members> <constants> diff --git a/doc/classes/Curve.xml b/doc/classes/Curve.xml index d676f635c9..c89ab6fb9b 100644 --- a/doc/classes/Curve.xml +++ b/doc/classes/Curve.xml @@ -12,7 +12,7 @@ <method name="add_point"> <return type="int"> </return> - <argument index="0" name="pos" type="Vector2"> + <argument index="0" name="position" type="Vector2"> </argument> <argument index="1" name="left_tangent" type="float" default="0"> </argument> @@ -77,7 +77,7 @@ <description> </description> </method> - <method name="get_point_pos" qualifiers="const"> + <method name="get_point_position" qualifiers="const"> <return type="Vector2"> </return> <argument index="0" name="index" type="int"> @@ -170,7 +170,7 @@ </description> </method> <method name="set_point_offset"> - <return type="void"> + <return type="int"> </return> <argument index="0" name="index" type="int"> </argument> diff --git a/doc/classes/Curve2D.xml b/doc/classes/Curve2D.xml index ccf6101829..4362887be3 100644 --- a/doc/classes/Curve2D.xml +++ b/doc/classes/Curve2D.xml @@ -15,17 +15,17 @@ <method name="add_point"> <return type="void"> </return> - <argument index="0" name="pos" type="Vector2"> + <argument index="0" name="position" type="Vector2"> </argument> <argument index="1" name="in" type="Vector2" default="Vector2( 0, 0 )"> </argument> <argument index="2" name="out" type="Vector2" default="Vector2( 0, 0 )"> </argument> - <argument index="3" name="atpos" type="int" default="-1"> + <argument index="3" name="at_position" type="int" default="-1"> </argument> <description> - Adds a point to a curve, at position "pos", with control points "in" and "out". - If "atpos" is given, the point is inserted before the point number "atpos", moving that point (and every point after) after the inserted point. If "atpos" is not given, or is an illegal value (atpos <0 or atpos >= [method get_point_count]), the point will be appended at the end of the point list. + Adds a point to a curve, at "position", with control points "in" and "out". + If "at_position" is given, the point is inserted before the point number "at_position", moving that point (and every point after) after the inserted point. If "at_position" is not given, or is an illegal value (at_position <0 or at_position >= [method get_point_count]), the point will be appended at the end of the point list. </description> </method> <method name="clear_points"> @@ -80,7 +80,7 @@ Returns the position of the control point leading out of the vertex "idx". If the index is out of bounds, the function sends an error to the console, and returns (0, 0). </description> </method> - <method name="get_point_pos" qualifiers="const"> + <method name="get_point_position" qualifiers="const"> <return type="Vector2"> </return> <argument index="0" name="idx" type="int"> @@ -146,7 +146,7 @@ </return> <argument index="0" name="idx" type="int"> </argument> - <argument index="1" name="pos" type="Vector2"> + <argument index="1" name="position" type="Vector2"> </argument> <description> Sets the position of the control point leading to the vertex "idx". If the index is out of bounds, the function sends an error to the console. @@ -157,18 +157,18 @@ </return> <argument index="0" name="idx" type="int"> </argument> - <argument index="1" name="pos" type="Vector2"> + <argument index="1" name="position" type="Vector2"> </argument> <description> Sets the position of the control point leading out of the vertex "idx". If the index is out of bounds, the function sends an error to the console. </description> </method> - <method name="set_point_pos"> + <method name="set_point_position"> <return type="void"> </return> <argument index="0" name="idx" type="int"> </argument> - <argument index="1" name="pos" type="Vector2"> + <argument index="1" name="position" type="Vector2"> </argument> <description> Sets the position for the vertex "idx". If the index is out of bounds, the function sends an error to the console. diff --git a/doc/classes/Curve3D.xml b/doc/classes/Curve3D.xml index 8ea0e04b14..02299753cf 100644 --- a/doc/classes/Curve3D.xml +++ b/doc/classes/Curve3D.xml @@ -15,17 +15,17 @@ <method name="add_point"> <return type="void"> </return> - <argument index="0" name="pos" type="Vector3"> + <argument index="0" name="position" type="Vector3"> </argument> <argument index="1" name="in" type="Vector3" default="Vector3( 0, 0, 0 )"> </argument> <argument index="2" name="out" type="Vector3" default="Vector3( 0, 0, 0 )"> </argument> - <argument index="3" name="atpos" type="int" default="-1"> + <argument index="3" name="at_position" type="int" default="-1"> </argument> <description> - Adds a point to a curve, at position "pos", with control points "in" and "out". - If "atpos" is given, the point is inserted before the point number "atpos", moving that point (and every point after) after the inserted point. If "atpos" is not given, or is an illegal value (atpos <0 or atpos >= [method get_point_count]), the point will be appended at the end of the point list. + Adds a point to a curve, at "position", with control points "in" and "out". + If "at_position" is given, the point is inserted before the point number "at_position", moving that point (and every point after) after the inserted point. If "at_position" is not given, or is an illegal value (at_position <0 or at_position >= [method get_point_count]), the point will be appended at the end of the point list. </description> </method> <method name="clear_points"> @@ -87,7 +87,7 @@ Returns the position of the control point leading out of the vertex "idx". If the index is out of bounds, the function sends an error to the console, and returns (0, 0, 0). </description> </method> - <method name="get_point_pos" qualifiers="const"> + <method name="get_point_position" qualifiers="const"> <return type="Vector3"> </return> <argument index="0" name="idx" type="int"> @@ -162,7 +162,7 @@ </return> <argument index="0" name="idx" type="int"> </argument> - <argument index="1" name="pos" type="Vector3"> + <argument index="1" name="position" type="Vector3"> </argument> <description> Sets the position of the control point leading to the vertex "idx". If the index is out of bounds, the function sends an error to the console. @@ -173,18 +173,18 @@ </return> <argument index="0" name="idx" type="int"> </argument> - <argument index="1" name="pos" type="Vector3"> + <argument index="1" name="position" type="Vector3"> </argument> <description> Sets the position of the control point leading out of the vertex "idx". If the index is out of bounds, the function sends an error to the console. </description> </method> - <method name="set_point_pos"> + <method name="set_point_position"> <return type="void"> </return> <argument index="0" name="idx" type="int"> </argument> - <argument index="1" name="pos" type="Vector3"> + <argument index="1" name="position" type="Vector3"> </argument> <description> Sets the position for the vertex "idx". If the index is out of bounds, the function sends an error to the console. diff --git a/doc/classes/Directory.xml b/doc/classes/Directory.xml index ee0b873084..c3c4c7a8ac 100644 --- a/doc/classes/Directory.xml +++ b/doc/classes/Directory.xml @@ -85,6 +85,7 @@ <return type="int"> </return> <description> + Returns the currently opened directory's drive index. See [method get_drive] to convert returned index to the name of the drive. </description> </method> <method name="get_drive"> diff --git a/doc/classes/DynamicFont.xml b/doc/classes/DynamicFont.xml index e4ce2ff3f0..d7f08c85a1 100644 --- a/doc/classes/DynamicFont.xml +++ b/doc/classes/DynamicFont.xml @@ -1,8 +1,10 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="DynamicFont" inherits="Font" category="Core" version="3.0.alpha.custom_build"> <brief_description> + DynamicFont renders vector font files at runtime. </brief_description> <description> + DynamicFont renders vector font files (such as TTF or OTF) dynamically at runtime instead of using a prerendered texture atlas like [BitmapFont]. This trades the faster loading time of [BitmapFont]s for the ability to change font parameters like size and spacing during runtime. [DynamicFontData] is used for referencing the font file paths. </description> <tutorials> </tutorials> @@ -15,6 +17,7 @@ <argument index="0" name="data" type="DynamicFontData"> </argument> <description> + Adds a fallback font. </description> </method> <method name="get_fallback" qualifiers="const"> @@ -23,12 +26,14 @@ <argument index="0" name="idx" type="int"> </argument> <description> + Returns the fallback font at index [code]idx[/code]. </description> </method> <method name="get_fallback_count" qualifiers="const"> <return type="int"> </return> <description> + Returns the number of fallback fonts. </description> </method> <method name="get_font_data" qualifiers="const"> @@ -41,6 +46,7 @@ <return type="int"> </return> <description> + Returns the font size in pixels. </description> </method> <method name="get_spacing" qualifiers="const"> @@ -49,18 +55,21 @@ <argument index="0" name="type" type="int"> </argument> <description> + Returns the given type of spacing in pixels. See [code]SPACING_*[/code] constants. </description> </method> <method name="get_use_filter" qualifiers="const"> <return type="bool"> </return> <description> + Returns [code]true[/code] if filtering is used. </description> </method> <method name="get_use_mipmaps" qualifiers="const"> <return type="bool"> </return> <description> + Returns [code]true[/code] if mipmapping is used. </description> </method> <method name="remove_fallback"> @@ -69,6 +78,7 @@ <argument index="0" name="idx" type="int"> </argument> <description> + Removes the fallback font at index [code]idx[/code]. </description> </method> <method name="set_fallback"> @@ -79,6 +89,7 @@ <argument index="1" name="data" type="DynamicFontData"> </argument> <description> + Sets the fallback font at index [code]idx[/code]. </description> </method> <method name="set_font_data"> @@ -87,6 +98,7 @@ <argument index="0" name="data" type="DynamicFontData"> </argument> <description> + Sets the [DynamicFontData]. </description> </method> <method name="set_size"> @@ -95,6 +107,7 @@ <argument index="0" name="data" type="int"> </argument> <description> + Sets the font size. </description> </method> <method name="set_spacing"> @@ -105,6 +118,7 @@ <argument index="1" name="value" type="int"> </argument> <description> + Sets the spacing of the given type. See [code]SPACING_*[/code] constants. </description> </method> <method name="set_use_filter"> @@ -113,6 +127,7 @@ <argument index="0" name="enable" type="bool"> </argument> <description> + Set to [code]true[/code] to use filtering. </description> </method> <method name="set_use_mipmaps"> @@ -121,35 +136,48 @@ <argument index="0" name="enable" type="bool"> </argument> <description> + Set to [code]true[/code] to use mipmapping. </description> </method> </methods> <members> <member name="extra_spacing_bottom" type="int" setter="set_spacing" getter="get_spacing"> + Extra spacing at the bottom in pixels. </member> <member name="extra_spacing_char" type="int" setter="set_spacing" getter="get_spacing"> + Extra character spacing in pixels. </member> <member name="extra_spacing_space" type="int" setter="set_spacing" getter="get_spacing"> + Extra space spacing in pixels. </member> <member name="extra_spacing_top" type="int" setter="set_spacing" getter="get_spacing"> + Extra spacing at the top in pixels. </member> <member name="font_data" type="DynamicFontData" setter="set_font_data" getter="get_font_data"> + The font data. </member> <member name="size" type="int" setter="set_size" getter="get_size"> + The font size. </member> <member name="use_filter" type="bool" setter="set_use_filter" getter="get_use_filter"> + If [code]true[/code] filtering is used. </member> <member name="use_mipmaps" type="bool" setter="set_use_mipmaps" getter="get_use_mipmaps"> + If [code]true[/code] mipmapping is used. </member> </members> <constants> <constant name="SPACING_TOP" value="0"> + Spacing at the top. </constant> <constant name="SPACING_BOTTOM" value="1"> + Spacing at the bottom. </constant> <constant name="SPACING_CHAR" value="2"> + Character spacing. </constant> <constant name="SPACING_SPACE" value="3"> + Space spacing. </constant> </constants> </class> diff --git a/doc/classes/DynamicFontData.xml b/doc/classes/DynamicFontData.xml index 51e4e0d231..9012b46e08 100644 --- a/doc/classes/DynamicFontData.xml +++ b/doc/classes/DynamicFontData.xml @@ -1,8 +1,10 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="DynamicFontData" inherits="Resource" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Used with [DynamicFont] to describe the location of a font file. </brief_description> <description> + Used with [DynamicFont] to describe the location of a vector font file for dynamic rendering at runtime. </description> <tutorials> </tutorials> @@ -13,6 +15,7 @@ <return type="String"> </return> <description> + Returns the font path. </description> </method> <method name="set_font_path"> @@ -21,11 +24,13 @@ <argument index="0" name="path" type="String"> </argument> <description> + Sets the font path. </description> </method> </methods> <members> <member name="font_path" type="String" setter="set_font_path" getter="get_font_path"> + The path to the vector font file. </member> </members> <constants> diff --git a/doc/classes/EditorImportPlugin.xml b/doc/classes/EditorImportPlugin.xml index 0ced30bda6..da8f0f235b 100644 --- a/doc/classes/EditorImportPlugin.xml +++ b/doc/classes/EditorImportPlugin.xml @@ -1,8 +1,54 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="EditorImportPlugin" inherits="Reference" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Registers a custom resource importer in the editor. Use the class to parse any file and import it as a new resource type. </brief_description> <description> + EditorImportPlugins provide a way to extend the editor's resource import functionality. Use them to import resources from custom files or to provide alternatives to the editor's existing importers. Register your [EditorPlugin] with [method EditorPlugin.add_import_plugin]. + + EditorImportPlugins work by associating with specific file extensions and a resource type. See [method get_recognized_extension] and [method get_resource_type]). They may optionally specify some import presets that affect the import process. EditorImportPlugins are responsible for creating the resources and saving them in the [code].import[/code] directory. + + + Below is an example EditorImportPlugin that imports a [Mesh] from a file with the extension ".special" or ".spec": + [codeblock] + tool + extends EditorImportPlugin + + func get_importer_name(): + return "my.special.plugin" + + func get_visible_name(): + return "Special Mesh Importer" + + func get_recognized_extensions(): + return ["special", "spec"] + + func get_save_extension(): + return "mesh" + + func get_resource_type(): + return "Mesh" + + func get_preset_count(): + return 1 + + func get_preset_name(i): + return "Default" + + func get_import_options(i): + return [{"name": "my_option", "default_value": false}] + + func load(src, dst, opts, r_platform_variants, r_gen_files): + var f = File.new() + if f.open(src, File.READ) != OK: + return FAILED + + var mesh = Mesh.new() + + var save = dst + "." + get_save_extension() + ResourceSaver.save(file, mesh) + return OK + [/codeblock] </description> <tutorials> </tutorials> @@ -15,12 +61,14 @@ <argument index="0" name="preset" type="int"> </argument> <description> + Get the options and default values for the preset at this index. Returns an Array of Dictionaries with the following keys: "name", "default_value", "property_hint" (optional), "hint_string" (optional), "usage" (optional). </description> </method> <method name="get_importer_name" qualifiers="virtual"> <return type="String"> </return> <description> + Get the unique name of the importer. </description> </method> <method name="get_option_visibility" qualifiers="virtual"> @@ -37,6 +85,7 @@ <return type="int"> </return> <description> + Get the number of initial presets defined by the plugin. Use [method get_import_options] to get the default options for the preset and [method get_preset_name] to get the name of the preset. </description> </method> <method name="get_preset_name" qualifiers="virtual"> @@ -45,30 +94,35 @@ <argument index="0" name="preset" type="int"> </argument> <description> + Get the name of the options preset at this index. </description> </method> <method name="get_recognized_extensions" qualifiers="virtual"> <return type="Array"> </return> <description> + Get the list of file extensions to associate with this loader (case insensitive). e.g. ["obj"]. </description> </method> <method name="get_resource_type" qualifiers="virtual"> <return type="String"> </return> <description> + Get the godot resource type associated with this loader. e.g. "Mesh" or "Animation". </description> </method> <method name="get_save_extension" qualifiers="virtual"> <return type="String"> </return> <description> + Get the extension used to save this resource in the [code].import[/code] directory. </description> </method> <method name="get_visible_name" qualifiers="virtual"> <return type="String"> </return> <description> + Get the name to display in the import window. </description> </method> <method name="import" qualifiers="virtual"> diff --git a/doc/classes/EditorInterface.xml b/doc/classes/EditorInterface.xml index 0422e9a64e..3a3fd43b15 100644 --- a/doc/classes/EditorInterface.xml +++ b/doc/classes/EditorInterface.xml @@ -1,8 +1,10 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="EditorInterface" inherits="Node" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Editor interface and main components. </brief_description> <description> + Editor interface. Allows saving and (re-)loading scenes, rendering mesh previews, inspecting and editing resources and objects and provides access to [EditorSettings], [EditorFileSystem], [EditorResourcePreview]\ er, [ScriptEditor], the editor viewport, as well as information about scenes. Also see [EditorPlugin] and [EditorScript]. </description> <tutorials> </tutorials> @@ -15,60 +17,70 @@ <argument index="0" name="resource" type="Resource"> </argument> <description> + Edits the given [Resource]. </description> </method> <method name="get_base_control"> <return type="Control"> </return> <description> + Returns the base [Control]. </description> </method> <method name="get_edited_scene_root"> <return type="Node"> </return> <description> + Returns the edited scene's root [Node]. </description> </method> <method name="get_editor_settings"> <return type="EditorSettings"> </return> <description> + Returns the [EditorSettings]. </description> </method> <method name="get_editor_viewport"> <return type="Control"> </return> <description> + Returns the editor [Viewport]. </description> </method> <method name="get_open_scenes" qualifiers="const"> <return type="Array"> </return> <description> + Returns an [Array] of the currently opened scenes. </description> </method> <method name="get_resource_filesystem"> <return type="EditorFileSystem"> </return> <description> + Returns the [EditorFileSystem]. </description> </method> <method name="get_resource_previewer"> <return type="EditorResourcePreview"> </return> <description> + Returns the [EditorResourcePreview]\ er. </description> </method> <method name="get_script_editor"> <return type="ScriptEditor"> </return> <description> + Returns the [ScriptEditor]. </description> </method> <method name="get_selection"> <return type="EditorSelection"> </return> <description> + Returns the [EditorSelection]. </description> </method> <method name="inspect_object"> @@ -79,16 +91,18 @@ <argument index="1" name="for_property" type="String" default=""""> </argument> <description> + Shows the given property on the given [code]object[/code] in the Editor's Inspector dock. </description> </method> <method name="make_mesh_previews"> <return type="Array"> </return> - <argument index="0" name="arg0" type="Array"> + <argument index="0" name="meshes" type="Array"> </argument> - <argument index="1" name="arg1" type="int"> + <argument index="1" name="preview_size" type="int"> </argument> <description> + Returns mesh previews rendered at the given size as an [Array] of [Texture]s. </description> </method> <method name="open_scene_from_path"> @@ -97,6 +111,7 @@ <argument index="0" name="scene_filepath" type="String"> </argument> <description> + Opens the scene at the given path. </description> </method> <method name="reload_scene_from_path"> @@ -105,12 +120,14 @@ <argument index="0" name="scene_filepath" type="String"> </argument> <description> + Reloads the scene at the given path. </description> </method> <method name="save_scene"> <return type="int" enum="Error"> </return> <description> + Saves the scene. Returns either OK or ERR_CANT_CREATE. See [@Global Scope] constants. </description> </method> <method name="save_scene_as"> @@ -121,6 +138,7 @@ <argument index="1" name="with_preview" type="bool" default="true"> </argument> <description> + Saves the scene as a file at [code]path[/code]. </description> </method> </methods> diff --git a/doc/classes/EditorResourceConversionPlugin.xml b/doc/classes/EditorResourceConversionPlugin.xml new file mode 100644 index 0000000000..e165ae376b --- /dev/null +++ b/doc/classes/EditorResourceConversionPlugin.xml @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<class name="EditorResourceConversionPlugin" inherits="Reference" category="Core" version="3.0.alpha.custom_build"> + <brief_description> + </brief_description> + <description> + </description> + <tutorials> + </tutorials> + <demos> + </demos> + <methods> + <method name="_convert" qualifiers="virtual"> + <return type="Resource"> + </return> + <argument index="0" name="resource" type="Resource"> + </argument> + <description> + </description> + </method> + <method name="_converts_to" qualifiers="virtual"> + <return type="bool"> + </return> + <description> + </description> + </method> + </methods> + <constants> + </constants> +</class> diff --git a/doc/classes/EditorResourcePreview.xml b/doc/classes/EditorResourcePreview.xml index e530557a23..5174d9243b 100644 --- a/doc/classes/EditorResourcePreview.xml +++ b/doc/classes/EditorResourcePreview.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="EditorResourcePreview" inherits="Node" category="Core" version="3.0.alpha.custom_build"> <brief_description> - Helper to generate previews of reources or files. + Helper to generate previews of resources or files. </brief_description> <description> This object is used to generate previews for resources of files. @@ -41,7 +41,7 @@ <argument index="3" name="userdata" type="Variant"> </argument> <description> - Queue a resource being edited for preview (using an instance). Once the preview is ready, your receiver.receiver_func will be called either containing the preview texture or an empty texure (if no preview was possible). Callback must have the format: (path,texture,userdata). Userdata can be anything. + Queue a resource being edited for preview (using an instance). Once the preview is ready, your receiver.receiver_func will be called either containing the preview texture or an empty texture (if no preview was possible). Callback must have the format: (path,texture,userdata). Userdata can be anything. </description> </method> <method name="queue_resource_preview"> @@ -56,7 +56,7 @@ <argument index="3" name="userdata" type="Variant"> </argument> <description> - Queue a resource file for preview (using a path). Once the preview is ready, your receiver.receiver_func will be called either containing the preview texture or an empty texure (if no preview was possible). Callback must have the format: (path,texture,userdata). Userdata can be anything. + Queue a resource file for preview (using a path). Once the preview is ready, your receiver.receiver_func will be called either containing the preview texture or an empty texture (if no preview was possible). Callback must have the format: (path,texture,userdata). Userdata can be anything. </description> </method> <method name="remove_preview_generator"> diff --git a/doc/classes/EditorScript.xml b/doc/classes/EditorScript.xml index 48cf3e9843..8856e3362a 100644 --- a/doc/classes/EditorScript.xml +++ b/doc/classes/EditorScript.xml @@ -1,10 +1,19 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="EditorScript" inherits="Reference" category="Core" version="3.0.alpha.custom_build"> <brief_description> - Simple script to perform changes in the currently edited scene. + Base script that can be used to add extension functions to the editor. </brief_description> <description> - This script can be run from the Scene -> Run Script menu option. + Scripts extending this class and implementing its [code]_run()[/code] method can be executed from the Script Editor's [code]File -> Run[/code] menu option (or by pressing [code]CTRL+Shift+X[/code]) while the editor is running. This is useful for adding custom in-editor functionality to Godot. For more complex additions, consider using [EditorPlugin]s instead. Note that extending scripts need to have [code]tool mode[/code] enabled. + Example script: + [codeblock] + tool + extends EditorScript + + func _run(): + print("Hello from the Godot Editor!") + [/codeblock] + Note that the script is run in the Editor context, which means the output is visible in the console window started with the Editor (STDOUT) instead of the usual Godot *Output* dock. </description> <tutorials> </tutorials> @@ -15,6 +24,7 @@ <return type="void"> </return> <description> + This method is executed by the Editor when [code]File -> Run[/code] is used. </description> </method> <method name="add_root_node"> @@ -29,12 +39,14 @@ <return type="EditorInterface"> </return> <description> + Returns the [EditorInterface] singleton instance. </description> </method> <method name="get_scene"> <return type="Node"> </return> <description> + Returns the Editor's currently active scene. </description> </method> </methods> diff --git a/doc/classes/EditorSelection.xml b/doc/classes/EditorSelection.xml index 8d9bdd2c05..a6dc60ee7b 100644 --- a/doc/classes/EditorSelection.xml +++ b/doc/classes/EditorSelection.xml @@ -31,7 +31,7 @@ <return type="Array"> </return> <description> - Get the list of selectes nodes. + Get the list of selected nodes. </description> </method> <method name="get_transformable_selected_nodes"> diff --git a/doc/classes/EditorSettings.xml b/doc/classes/EditorSettings.xml index 37c7a47a51..17a4d2fe4b 100644 --- a/doc/classes/EditorSettings.xml +++ b/doc/classes/EditorSettings.xml @@ -69,6 +69,14 @@ Get the list of recently visited folders in the file dialog for this project. </description> </method> + <method name="get_setting" qualifiers="const"> + <return type="Variant"> + </return> + <argument index="0" name="name" type="String"> + </argument> + <description> + </description> + </method> <method name="get_settings_path" qualifiers="const"> <return type="String"> </return> @@ -78,6 +86,30 @@ settings/templates - where export templates are located </description> </method> + <method name="has_setting" qualifiers="const"> + <return type="bool"> + </return> + <argument index="0" name="name" type="String"> + </argument> + <description> + </description> + </method> + <method name="property_can_revert"> + <return type="bool"> + </return> + <argument index="0" name="name" type="String"> + </argument> + <description> + </description> + </method> + <method name="property_get_revert"> + <return type="Variant"> + </return> + <argument index="0" name="name" type="String"> + </argument> + <description> + </description> + </method> <method name="set_favorite_dirs"> <return type="void"> </return> @@ -87,6 +119,16 @@ Set the list of favorite directories for this project. </description> </method> + <method name="set_initial_value"> + <return type="void"> + </return> + <argument index="0" name="name" type="String"> + </argument> + <argument index="1" name="value" type="Variant"> + </argument> + <description> + </description> + </method> <method name="set_recent_dirs"> <return type="void"> </return> @@ -96,6 +138,16 @@ Set the list of recently visited folders in the file dialog for this project. </description> </method> + <method name="set_setting"> + <return type="void"> + </return> + <argument index="0" name="name" type="String"> + </argument> + <argument index="1" name="value" type="Variant"> + </argument> + <description> + </description> + </method> </methods> <signals> <signal name="settings_changed"> diff --git a/doc/classes/EditorSpatialGizmo.xml b/doc/classes/EditorSpatialGizmo.xml index de9ea5282a..545eadeed2 100644 --- a/doc/classes/EditorSpatialGizmo.xml +++ b/doc/classes/EditorSpatialGizmo.xml @@ -24,6 +24,8 @@ </return> <argument index="0" name="triangles" type="TriangleMesh"> </argument> + <argument index="1" name="bounds" type="Rect3"> + </argument> <description> Add collision triangles to the gizmo for picking. A [TriangleMesh] can be generated from a regular [Mesh] too. Call this function during [method redraw]. </description> @@ -94,7 +96,7 @@ <argument index="2" name="cancel" type="bool" default="false"> </argument> <description> - Commit a handle being edited (handles must have been prevously added by [method add_handles]). + Commit a handle being edited (handles must have been previously added by [method add_handles]). If the cancel parameter is true, an option to restore the edited value to the original is provided. </description> </method> diff --git a/doc/classes/Engine.xml b/doc/classes/Engine.xml index 2372c619f5..5bb0810296 100644 --- a/doc/classes/Engine.xml +++ b/doc/classes/Engine.xml @@ -1,8 +1,10 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="Engine" inherits="Object" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Access to basic engine properties. </brief_description> <description> + The [Engine] class allows you to query and modify the game's run-time parameters, such as frames per second, time scale, and others. </description> <tutorials> </tutorials> @@ -13,7 +15,7 @@ <return type="int"> </return> <description> - Return the total amount of frames drawn. + Returns the total number of frames drawn. </description> </method> <method name="get_frames_per_second" qualifiers="const"> @@ -27,26 +29,28 @@ <return type="int"> </return> <description> - Return the amount of fixed iterations per second (for fixed process and physics). + Returns the number of fixed iterations per second (for fixed process and physics). </description> </method> <method name="get_main_loop" qualifiers="const"> <return type="MainLoop"> </return> <description> - Return the main loop object (see [MainLoop] and [SceneTree]). + Returns the main loop object (see [MainLoop] and [SceneTree]). </description> </method> <method name="get_target_fps" qualifiers="const"> <return type="float"> </return> <description> + Returns the desired frames per second. If the hardware cannot keep up, this setting may not be respected. It defaults to 0, which indicates no limit. </description> </method> <method name="get_time_scale"> <return type="float"> </return> <description> + Returns how fast or slow the in-game clock ticks versus the real life one. It defaults to 1.0. A value of 2.0 means the game moves twice as fast as real life, whilst a value of 0.5 means the game moves at half the regular speed. </description> </method> <method name="get_version_info" qualifiers="const"> @@ -67,12 +71,14 @@ <return type="bool"> </return> <description> + Returns [code]true[/code] if the editor is running. </description> </method> - <method name="is_in_fixed_frame" qualifiers="const"> + <method name="is_in_physics_frame" qualifiers="const"> <return type="bool"> </return> <description> + Returns [code]true[/code] if the game is inside the fixed process and physics phase of the game loop. </description> </method> <method name="set_editor_hint"> @@ -81,6 +87,7 @@ <argument index="0" name="enabled" type="bool"> </argument> <description> + Sets the running inside the editor hint if [code]enabled[/code] is [code]true[/code]. </description> </method> <method name="set_iterations_per_second"> @@ -89,7 +96,7 @@ <argument index="0" name="iterations_per_second" type="int"> </argument> <description> - Set the amount of fixed iterations per second (for fixed process and physics). + Sets the number of fixed iterations per second (for fixed process and physics). </description> </method> <method name="set_target_fps"> @@ -98,6 +105,7 @@ <argument index="0" name="target_fps" type="int"> </argument> <description> + Sets the target frames per second. </description> </method> <method name="set_time_scale"> @@ -106,6 +114,7 @@ <argument index="0" name="time_scale" type="float"> </argument> <description> + Sets the time scale. </description> </method> </methods> diff --git a/doc/classes/Environment.xml b/doc/classes/Environment.xml index 4338b188a6..2918200633 100644 --- a/doc/classes/Environment.xml +++ b/doc/classes/Environment.xml @@ -1,8 +1,15 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="Environment" inherits="Resource" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Resource for environment nodes (like [WorldEnvironment]) that define multiple rendering options. </brief_description> <description> + Resource for environment nodes (like [WorldEnvironment]) that define multiple environment operations (such as background [Sky] or [Color], ambient light, fog, depth-of-field...). These parameters affect the final render of the scene. The order of these operations is: + - DOF Blur + - Motion Blur + - Bloom + - Tonemap (auto exposure) + - Adjustments </description> <tutorials> </tutorials> @@ -219,7 +226,7 @@ <description> </description> </method> - <method name="get_sky_scale" qualifiers="const"> + <method name="get_sky_custom_fov" qualifiers="const"> <return type="float"> </return> <description> @@ -787,7 +794,7 @@ <description> </description> </method> - <method name="set_sky_scale"> + <method name="set_sky_custom_fov"> <return type="void"> </return> <argument index="0" name="scale" type="float"> @@ -982,118 +989,174 @@ </methods> <members> <member name="adjustment_brightness" type="float" setter="set_adjustment_brightness" getter="get_adjustment_brightness"> + Global brightness value of the rendered scene (default value is 1). </member> <member name="adjustment_color_correction" type="Texture" setter="set_adjustment_color_correction" getter="get_adjustment_color_correction"> + Applies the provided [Texture] resource to affect the global color aspect of the rendered scene. </member> <member name="adjustment_contrast" type="float" setter="set_adjustment_contrast" getter="get_adjustment_contrast"> + Global contrast value of the rendered scene (default value is 1). </member> <member name="adjustment_enabled" type="bool" setter="set_adjustment_enable" getter="is_adjustment_enabled"> + Enables the adjustment_* options provided by this resource. If false, adjustments modifications will have no effect on the rendered scene. </member> <member name="adjustment_saturation" type="float" setter="set_adjustment_saturation" getter="get_adjustment_saturation"> + Global color saturation value of the rendered scene (default value is 1). </member> <member name="ambient_light_color" type="Color" setter="set_ambient_light_color" getter="get_ambient_light_color"> + [Color] of the ambient light. </member> <member name="ambient_light_energy" type="float" setter="set_ambient_light_energy" getter="get_ambient_light_energy"> + Energy of the ambient light. The higher the value, the stronger the light. </member> <member name="ambient_light_sky_contribution" type="float" setter="set_ambient_light_sky_contribution" getter="get_ambient_light_sky_contribution"> + Defines the amount of light that the sky brings on the scene. A value of 0 means that the sky's light emission has no effect on the scene illumination, thus all ambient illumination is provided by the ambient light. On the contrary, a value of 1 means that all the light that affects the scene is provided by the sky, thus the ambient light parameter has no effect on the scene. </member> <member name="auto_exposure_enabled" type="bool" setter="set_tonemap_auto_exposure" getter="get_tonemap_auto_exposure"> + Enables the tonemapping auto exposure mode of the scene renderer. If activated, the renderer will automatically determine the exposure setting to adapt to the illumination of the scene and the observed light. </member> <member name="auto_exposure_max_luma" type="float" setter="set_tonemap_auto_exposure_max" getter="get_tonemap_auto_exposure_max"> + Maximum luminance value for the auto exposure. </member> <member name="auto_exposure_min_luma" type="float" setter="set_tonemap_auto_exposure_min" getter="get_tonemap_auto_exposure_min"> + Minimum luminance value for the auto exposure. </member> <member name="auto_exposure_scale" type="float" setter="set_tonemap_auto_exposure_grey" getter="get_tonemap_auto_exposure_grey"> + Scale of the auto exposure effect. Affects the intensity of auto exposure. </member> <member name="auto_exposure_speed" type="float" setter="set_tonemap_auto_exposure_speed" getter="get_tonemap_auto_exposure_speed"> + Speed of the auto exposure effect. Affects the time needed for the camera to perform auto exposure. </member> <member name="background_canvas_max_layer" type="int" setter="set_canvas_max_layer" getter="get_canvas_max_layer"> + Maximum layer id (if using Layer background mode). </member> <member name="background_color" type="Color" setter="set_bg_color" getter="get_bg_color"> + Color displayed for clear areas of the scene (if using Custom color or Color+Sky background modes). </member> <member name="background_energy" type="float" setter="set_bg_energy" getter="get_bg_energy"> + Power of light emitted by the background. </member> <member name="background_mode" type="int" setter="set_background" getter="get_background" enum="Environment.BGMode"> + Defines the mode of background. </member> <member name="background_sky" type="Sky" setter="set_sky" getter="get_sky"> + [Sky] resource defined as background. </member> - <member name="background_sky_scale" type="float" setter="set_sky_scale" getter="get_sky_scale"> + <member name="background_sky_custom_fov" type="float" setter="set_sky_custom_fov" getter="get_sky_custom_fov"> + [Sky] resource's custom field of view. </member> <member name="dof_blur_far_amount" type="float" setter="set_dof_blur_far_amount" getter="get_dof_blur_far_amount"> + Amount of far blur. </member> <member name="dof_blur_far_distance" type="float" setter="set_dof_blur_far_distance" getter="get_dof_blur_far_distance"> + Distance from the camera where the far blur effect affects the rendering. </member> <member name="dof_blur_far_enabled" type="bool" setter="set_dof_blur_far_enabled" getter="is_dof_blur_far_enabled"> + Enables the far blur effect. </member> <member name="dof_blur_far_quality" type="int" setter="set_dof_blur_far_quality" getter="get_dof_blur_far_quality" enum="Environment.DOFBlurQuality"> + Quality of the far blur quality. </member> <member name="dof_blur_far_transition" type="float" setter="set_dof_blur_far_transition" getter="get_dof_blur_far_transition"> + Transition between no-blur area and far blur. </member> <member name="dof_blur_near_amount" type="float" setter="set_dof_blur_near_amount" getter="get_dof_blur_near_amount"> + Amount of near blur. </member> <member name="dof_blur_near_distance" type="float" setter="set_dof_blur_near_distance" getter="get_dof_blur_near_distance"> + Distance from the camera where the near blur effect affects the rendering. </member> <member name="dof_blur_near_enabled" type="bool" setter="set_dof_blur_near_enabled" getter="is_dof_blur_near_enabled"> + Enables the near blur effect. </member> <member name="dof_blur_near_quality" type="int" setter="set_dof_blur_near_quality" getter="get_dof_blur_near_quality" enum="Environment.DOFBlurQuality"> + Quality of the near blur quality. </member> <member name="dof_blur_near_transition" type="float" setter="set_dof_blur_near_transition" getter="get_dof_blur_near_transition"> + Transition between near blur and no-blur area. </member> <member name="fog_color" type="Color" setter="set_fog_color" getter="get_fog_color"> + Fog's [Color]. </member> <member name="fog_depth_begin" type="float" setter="set_fog_depth_begin" getter="get_fog_depth_begin"> + Fog's depth starting distance from the camera. </member> <member name="fog_depth_curve" type="float" setter="set_fog_depth_curve" getter="get_fog_depth_curve"> + Value defining the fog depth intensity. </member> <member name="fog_depth_enabled" type="bool" setter="set_fog_depth_enabled" getter="is_fog_depth_enabled"> + Enables the fog depth. </member> <member name="fog_enabled" type="bool" setter="set_fog_enabled" getter="is_fog_enabled"> + Enables the fog. Needs fog_height_enabled and/or for_depth_enabled to actually display fog. </member> <member name="fog_height_curve" type="float" setter="set_fog_height_curve" getter="get_fog_height_curve"> + Value defining the fog height intensity. </member> <member name="fog_height_enabled" type="bool" setter="set_fog_height_enabled" getter="is_fog_height_enabled"> + Enables the fog height. </member> <member name="fog_height_max" type="float" setter="set_fog_height_max" getter="get_fog_height_max"> + Maximum height of fog. </member> <member name="fog_height_min" type="float" setter="set_fog_height_min" getter="get_fog_height_min"> + Minimum height of fog. </member> <member name="fog_sun_amount" type="float" setter="set_fog_sun_amount" getter="get_fog_sun_amount"> + Amount of sun that affects the fog rendering. </member> <member name="fog_sun_color" type="Color" setter="set_fog_sun_color" getter="get_fog_sun_color"> + Sun [Color]. </member> <member name="fog_transmit_curve" type="float" setter="set_fog_transmit_curve" getter="get_fog_transmit_curve"> + Amount of light that the fog transmits. </member> <member name="fog_transmit_enabled" type="bool" setter="set_fog_transmit_enabled" getter="is_fog_transmit_enabled"> + Enables fog's light transmission. If enabled, lets reflections light to be transmitted by the fog. </member> <member name="glow_bicubic_upscale" type="bool" setter="set_glow_bicubic_upscale" getter="is_glow_bicubic_upscale_enabled"> </member> <member name="glow_blend_mode" type="int" setter="set_glow_blend_mode" getter="get_glow_blend_mode" enum="Environment.GlowBlendMode"> + Glow blending mode. </member> <member name="glow_bloom" type="float" setter="set_glow_bloom" getter="get_glow_bloom"> + Bloom value (global glow). </member> <member name="glow_enabled" type="bool" setter="set_glow_enabled" getter="is_glow_enabled"> + Enables glow rendering. </member> <member name="glow_hdr_scale" type="float" setter="set_glow_hdr_bleed_scale" getter="get_glow_hdr_bleed_scale"> + Bleed scale of the HDR glow. </member> <member name="glow_hdr_threshold" type="float" setter="set_glow_hdr_bleed_threshold" getter="get_glow_hdr_bleed_threshold"> + Bleed threshold of the HDR glow. </member> <member name="glow_intensity" type="float" setter="set_glow_intensity" getter="get_glow_intensity"> + Glow intensity. </member> <member name="glow_levels/1" type="bool" setter="set_glow_level" getter="is_glow_level_enabled"> + First level of glow (most local). </member> <member name="glow_levels/2" type="bool" setter="set_glow_level" getter="is_glow_level_enabled"> + Second level of glow. </member> <member name="glow_levels/3" type="bool" setter="set_glow_level" getter="is_glow_level_enabled"> + Third level of glow. </member> <member name="glow_levels/4" type="bool" setter="set_glow_level" getter="is_glow_level_enabled"> + Fourth level of glow. </member> <member name="glow_levels/5" type="bool" setter="set_glow_level" getter="is_glow_level_enabled"> + Fifth level of glow. </member> <member name="glow_levels/6" type="bool" setter="set_glow_level" getter="is_glow_level_enabled"> + Sixth level of glow. </member> <member name="glow_levels/7" type="bool" setter="set_glow_level" getter="is_glow_level_enabled"> + Seventh level of glow (most global). </member> <member name="glow_strength" type="float" setter="set_glow_strength" getter="get_glow_strength"> + Glow strength. </member> <member name="ss_reflections_depth_tolerance" type="float" setter="set_ssr_depth_tolerance" getter="get_ssr_depth_tolerance"> </member> @@ -1126,48 +1189,69 @@ <member name="ssao_radius2" type="float" setter="set_ssao_radius2" getter="get_ssao_radius2"> </member> <member name="tonemap_exposure" type="float" setter="set_tonemap_exposure" getter="get_tonemap_exposure"> + Default exposure for tonemap. </member> <member name="tonemap_mode" type="int" setter="set_tonemapper" getter="get_tonemapper" enum="Environment.ToneMapper"> + Tonemapping mode. </member> <member name="tonemap_white" type="float" setter="set_tonemap_white" getter="get_tonemap_white"> + White reference value for tonemap. </member> </members> <constants> <constant name="BG_KEEP" value="5"> + Keep on screen every pixel drawn in the background. </constant> <constant name="BG_CLEAR_COLOR" value="0"> + Clear the background using the project's clear color. </constant> <constant name="BG_COLOR" value="1"> + Clear the background using a custom clear color. </constant> <constant name="BG_SKY" value="2"> + Display a user-defined sky in the background. </constant> <constant name="BG_COLOR_SKY" value="3"> + Clear the background using a custom clear color and allows defining a sky for shading and reflection. </constant> <constant name="BG_CANVAS" value="4"> + Display a [CanvasLayer] in the background. </constant> <constant name="BG_MAX" value="6"> + Helper constant keeping track of the enum's size, has no direct usage in API calls. </constant> <constant name="GLOW_BLEND_MODE_ADDITIVE" value="0"> + Additive glow blending mode. Mostly used for particles, glows (bloom), lens flare, bright sources. </constant> <constant name="GLOW_BLEND_MODE_SCREEN" value="1"> + Screen glow blending mode. Increases brightness, used frequently with bloom. </constant> <constant name="GLOW_BLEND_MODE_SOFTLIGHT" value="2"> + Softlight glow blending mode. Modifies contrast, exposes shadows and highlights, vivid bloom. </constant> <constant name="GLOW_BLEND_MODE_REPLACE" value="3"> + Replace glow blending mode. Replaces all pixels' color by the glow value. </constant> <constant name="TONE_MAPPER_LINEAR" value="0"> + Linear tonemapper operator. Reads the linear data and performs an exposure adjustment. </constant> <constant name="TONE_MAPPER_REINHARDT" value="1"> + Reinhardt tonemapper operator. Performs a variation on rendered pixels' colors by this formula: color = color / (1 + color). </constant> <constant name="TONE_MAPPER_FILMIC" value="2"> + Filmic tonemapper operator. </constant> <constant name="TONE_MAPPER_ACES" value="3"> + Academy Color Encoding System tonemapper operator. </constant> <constant name="DOF_BLUR_QUALITY_LOW" value="0"> + Low depth-of-field blur quality. </constant> <constant name="DOF_BLUR_QUALITY_MEDIUM" value="1"> + Medium depth-of-field blur quality. </constant> <constant name="DOF_BLUR_QUALITY_HIGH" value="2"> + High depth-of-field blur quality. </constant> </constants> </class> diff --git a/doc/classes/File.xml b/doc/classes/File.xml index 4e73cd8ae2..6272d4105c 100644 --- a/doc/classes/File.xml +++ b/doc/classes/File.xml @@ -30,14 +30,14 @@ <return type="void"> </return> <description> - Close the currently opened file. + Closes the currently opened file. </description> </method> <method name="eof_reached" qualifiers="const"> <return type="bool"> </return> <description> - Return whether the file cursor reached the end of the file. + Returns [code]true[/code] if the file cursor has reached the end of the file. </description> </method> <method name="file_exists" qualifiers="const"> @@ -46,42 +46,42 @@ <argument index="0" name="path" type="String"> </argument> <description> - Get whether or not the file in the specified path exists. + Returns [code]true[/code] if the file exists in the given path. </description> </method> <method name="get_16" qualifiers="const"> <return type="int"> </return> <description> - Get the next 16 bits from the file as an integer. + Returns the next 16 bits from the file as an integer. </description> </method> <method name="get_32" qualifiers="const"> <return type="int"> </return> <description> - Get the next 32 bits from the file as an integer. + Returns the next 32 bits from the file as an integer. </description> </method> <method name="get_64" qualifiers="const"> <return type="int"> </return> <description> - Get the next 64 bits from the file as an integer. + Returns the next 64 bits from the file as an integer. </description> </method> <method name="get_8" qualifiers="const"> <return type="int"> </return> <description> - Get the next 8 bits from the file as an integer. + Returns the next 8 bits from the file as an integer. </description> </method> <method name="get_as_text" qualifiers="const"> <return type="String"> </return> <description> - Get the whole file as a [String]. + Returns the whole file as a [String]. </description> </method> <method name="get_buffer" qualifiers="const"> @@ -90,7 +90,7 @@ <argument index="0" name="len" type="int"> </argument> <description> - Get next len bytes of the file as a [PoolByteArray]. + Returns next [code]len[/code] bytes of the file as a [PoolByteArray]. </description> </method> <method name="get_csv_line" qualifiers="const"> @@ -99,49 +99,49 @@ <argument index="0" name="delim" type="String" default="",""> </argument> <description> - Get the next value of the file in CSV (Comma Separated Values) format. You can pass a different delimiter to use other than the default "," (comma). + Returns the next value of the file in CSV (Comma Separated Values) format. You can pass a different delimiter to use other than the default "," (comma). </description> </method> <method name="get_double" qualifiers="const"> <return type="float"> </return> <description> - Get the next 64 bits from the file as a floating point number. + Returns the next 64 bits from the file as a floating point number. </description> </method> <method name="get_endian_swap"> <return type="bool"> </return> <description> - Get whether endian swap is enabled for this file. + Returns [code]true[/code] if endian swap is enabled for this file. </description> </method> <method name="get_error" qualifiers="const"> <return type="int" enum="Error"> </return> <description> - Get the last error that happened when trying to perform operations. Compare with the [code]ERR_FILE_*[/code] constants from [@Global Scope]. + Returns the last error that happened when trying to perform operations. Compare with the [code]ERR_FILE_*[/code] constants from [@Global Scope]. </description> </method> <method name="get_float" qualifiers="const"> <return type="float"> </return> <description> - Get the next 32 bits from the file as a floating point number. + Returns the next 32 bits from the file as a floating point number. </description> </method> <method name="get_len" qualifiers="const"> <return type="int"> </return> <description> - Return the size of the file in bytes. + Returns the size of the file in bytes. </description> </method> <method name="get_line" qualifiers="const"> <return type="String"> </return> <description> - Get the next line of the file as a [String]. + Returns the next line of the file as a [String]. </description> </method> <method name="get_md5" qualifiers="const"> @@ -150,7 +150,7 @@ <argument index="0" name="path" type="String"> </argument> <description> - Return a md5 String representing the file at the given path or an empty [String] on failure. + Returns an MD5 String representing the file at the given path or an empty [String] on failure. </description> </method> <method name="get_modified_time" qualifiers="const"> @@ -159,27 +159,28 @@ <argument index="0" name="file" type="String"> </argument> <description> + Returns the last time the [code]file[/code] was modified in unix timestamp format or returns a [String] "ERROR IN [code]file[/code]". This unix timestamp can be converted to datetime by using [method OS.get_datetime_from_unix_time]. </description> </method> <method name="get_pascal_string"> <return type="String"> </return> <description> - Get a [String] saved in Pascal format from the file. + Returns a [String] saved in Pascal format from the file. </description> </method> - <method name="get_pos" qualifiers="const"> + <method name="get_position" qualifiers="const"> <return type="int"> </return> <description> - Return the file cursor position. + Returns the file cursor's position. </description> </method> <method name="get_real" qualifiers="const"> <return type="float"> </return> <description> - Get the next bits from the file as a floating point number. + Returns the next bits from the file as a floating point number. </description> </method> <method name="get_sha256" qualifiers="const"> @@ -188,21 +189,21 @@ <argument index="0" name="path" type="String"> </argument> <description> - Return a sha256 String representing the file at the given path or an empty [String] on failure. + Returns a SHA-256 [String] representing the file at the given path or an empty [String] on failure. </description> </method> <method name="get_var" qualifiers="const"> <return type="Variant"> </return> <description> - Get the next Variant value from the file. + Returns the next [Variant] value from the file. </description> </method> <method name="is_open" qualifiers="const"> <return type="bool"> </return> <description> - Return whether the file is currently opened. + Returns [code]true[/code] if the file is currently opened. </description> </method> <method name="open"> @@ -213,7 +214,7 @@ <argument index="1" name="flags" type="int"> </argument> <description> - Open the file for writing or reading, depending on the flags. + Opens the file for writing or reading, depending on the flags. </description> </method> <method name="open_compressed"> @@ -226,7 +227,7 @@ <argument index="2" name="compression_mode" type="int" default="0"> </argument> <description> - Open a compressed file for reading or writing. The compression_mode can be set as one of the COMPRESSION_* constants. + Opens a compressed file for reading or writing. Use COMPRESSION_* constants to set [code]compression_mode[/code]. </description> </method> <method name="open_encrypted"> @@ -239,7 +240,7 @@ <argument index="2" name="key" type="PoolByteArray"> </argument> <description> - Open an encrypted file in write or read mode. You need to pass a binary key to encrypt/decrypt it. + Opens an encrypted file in write or read mode. You need to pass a binary key to encrypt/decrypt it. </description> </method> <method name="open_encrypted_with_pass"> @@ -252,13 +253,13 @@ <argument index="2" name="pass" type="String"> </argument> <description> - Open an encrypted file in write or read mode. You need to pass a password to encrypt/decrypt it. + Opens an encrypted file in write or read mode. You need to pass a password to encrypt/decrypt it. </description> </method> <method name="seek"> <return type="void"> </return> - <argument index="0" name="pos" type="int"> + <argument index="0" name="position" type="int"> </argument> <description> Change the file reading/writing cursor to the specified position (in bytes from the beginning of the file). @@ -267,10 +268,10 @@ <method name="seek_end"> <return type="void"> </return> - <argument index="0" name="pos" type="int" default="0"> + <argument index="0" name="position" type="int" default="0"> </argument> <description> - Change the file reading/writing cursor to the specified position (in bytes from the end of the file). Note that this is an offset, so you should use negative numbers or the cursor will be at the end of the file. + Changes the file reading/writing cursor to the specified position (in bytes from the end of the file). Note that this is an offset, so you should use negative numbers or the cursor will be at the end of the file. </description> </method> <method name="set_endian_swap"> @@ -279,7 +280,7 @@ <argument index="0" name="enable" type="bool"> </argument> <description> - Set whether to swap the endianness of the file. Enable this if you're dealing with files written in big endian machines. + If [code]true[/code] the file's endianness is swapped. Use this if you're dealing with files written in big endian machines. Note that this is about the file format, not CPU type. This is always reseted to [code]false[/code] whenever you open the file. </description> </method> @@ -289,7 +290,7 @@ <argument index="0" name="value" type="int"> </argument> <description> - Store an integer as 16 bits in the file. + Stores an integer as 16 bits in the file. </description> </method> <method name="store_32"> @@ -298,7 +299,7 @@ <argument index="0" name="value" type="int"> </argument> <description> - Store an integer as 32 bits in the file. + Stores an integer as 32 bits in the file. </description> </method> <method name="store_64"> @@ -307,7 +308,7 @@ <argument index="0" name="value" type="int"> </argument> <description> - Store an integer as 64 bits in the file. + Stores an integer as 64 bits in the file. </description> </method> <method name="store_8"> @@ -316,7 +317,7 @@ <argument index="0" name="value" type="int"> </argument> <description> - Store an integer as 8 bits in the file. + Stores an integer as 8 bits in the file. </description> </method> <method name="store_buffer"> @@ -325,7 +326,7 @@ <argument index="0" name="buffer" type="PoolByteArray"> </argument> <description> - Store the given array of bytes in the file. + Stores the given array of bytes in the file. </description> </method> <method name="store_double"> @@ -334,7 +335,7 @@ <argument index="0" name="value" type="float"> </argument> <description> - Store a floating point number as 64 bits in the file. + Stores a floating point number as 64 bits in the file. </description> </method> <method name="store_float"> @@ -343,7 +344,7 @@ <argument index="0" name="value" type="float"> </argument> <description> - Store a floating point number as 32 bits in the file. + Stores a floating point number as 32 bits in the file. </description> </method> <method name="store_line"> @@ -352,7 +353,7 @@ <argument index="0" name="line" type="String"> </argument> <description> - Store the given [String] as a line in the file. + Stores the given [String] as a line in the file. </description> </method> <method name="store_pascal_string"> @@ -361,7 +362,7 @@ <argument index="0" name="string" type="String"> </argument> <description> - Store the given [String] as a line in the file in Pascal format (i.e. also store the length of the string). + Stores the given [String] as a line in the file in Pascal format (i.e. also store the length of the string). </description> </method> <method name="store_real"> @@ -370,7 +371,7 @@ <argument index="0" name="value" type="float"> </argument> <description> - Store a floating point number in the file. + Stores a floating point number in the file. </description> </method> <method name="store_string"> @@ -379,7 +380,7 @@ <argument index="0" name="string" type="String"> </argument> <description> - Store the given [String] in the file. + Stores the given [String] in the file. </description> </method> <method name="store_var"> @@ -388,33 +389,34 @@ <argument index="0" name="value" type="Variant"> </argument> <description> - Store any Variant value in the file. + Stores any Variant value in the file. </description> </method> </methods> <constants> <constant name="READ" value="1"> - Open the file for reading. + Opens the file for read operations. </constant> <constant name="WRITE" value="2"> - Open the file for writing. Create it if the file not exists and truncate if it exists. + Opens the file for write operations. Create it if the file does not exist and truncate if it exists. </constant> <constant name="READ_WRITE" value="3"> - Open the file for reading and writing, without truncating the file. + Opens the file for read and write operations. Does not truncate the file. </constant> <constant name="WRITE_READ" value="7"> - Open the file for reading and writing. Create it if the file not exists and truncate if it exists. + Opens the file for read and write operations. Create it if the file does not exist and truncate if it exists. </constant> <constant name="COMPRESSION_FASTLZ" value="0"> - Use the FastLZ compression method. + Uses the FastLZ compression method. </constant> <constant name="COMPRESSION_DEFLATE" value="1"> - Use the Deflate compression method. + Uses the Deflate compression method. </constant> <constant name="COMPRESSION_ZSTD" value="2"> - Use the Zstd compression method. + Uses the Zstd compression method. </constant> <constant name="COMPRESSION_GZIP" value="3"> + Uses the gzip compression method. </constant> </constants> </class> diff --git a/doc/classes/FileDialog.xml b/doc/classes/FileDialog.xml index d7a08368a5..b3d131ca40 100644 --- a/doc/classes/FileDialog.xml +++ b/doc/classes/FileDialog.xml @@ -86,7 +86,7 @@ <return type="bool"> </return> <description> - Return true if the diaog allows show hidden files. + Return true if the dialog allows show hidden files. </description> </method> <method name="set_access"> @@ -205,10 +205,10 @@ The dialog allows the selection of file and directory. </constant> <constant name="ACCESS_USERDATA" value="1"> - The dialog allows ascess files under [Resource] path(res://) . + The dialog allows access files under [Resource] path(res://) . </constant> <constant name="ACCESS_FILESYSTEM" value="2"> - The dialog allows ascess files in whole file system. + The dialog allows access files in whole file system. </constant> </constants> <theme_items> diff --git a/doc/classes/Font.xml b/doc/classes/Font.xml index 420756975f..2e2124cbd6 100644 --- a/doc/classes/Font.xml +++ b/doc/classes/Font.xml @@ -16,7 +16,7 @@ </return> <argument index="0" name="canvas_item" type="RID"> </argument> - <argument index="1" name="pos" type="Vector2"> + <argument index="1" name="position" type="Vector2"> </argument> <argument index="2" name="string" type="String"> </argument> @@ -25,7 +25,7 @@ <argument index="4" name="clip_w" type="int" default="-1"> </argument> <description> - Draw "string" into a canvas item using the font at a given "pos" position, with "modulate" color, and optionally clipping the width. "pos" specifies the baseline, not the top. To draw from the top, [i]ascent[/i] must be added to the Y axis. + Draw "string" into a canvas item using the font at a given position, with "modulate" color, and optionally clipping the width. "position" specifies the baseline, not the top. To draw from the top, [i]ascent[/i] must be added to the Y axis. </description> </method> <method name="draw_char" qualifiers="const"> @@ -33,7 +33,7 @@ </return> <argument index="0" name="canvas_item" type="RID"> </argument> - <argument index="1" name="pos" type="Vector2"> + <argument index="1" name="position" type="Vector2"> </argument> <argument index="2" name="char" type="int"> </argument> @@ -42,7 +42,7 @@ <argument index="4" name="modulate" type="Color" default="Color( 1, 1, 1, 1 )"> </argument> <description> - Draw character "char" into a canvas item using the font at a given "pos" position, with "modulate" color, and optionally kerning if "next" is passed. clipping the width. "pos" specifies the baseline, not the top. To draw from the top, [i]ascent[/i] must be added to the Y axis. The width used by the character is returned, making this function useful for drawing strings character by character. + Draw character "char" into a canvas item using the font at a given position, with "modulate" color, and optionally kerning if "next" is passed. clipping the width. "position" specifies the baseline, not the top. To draw from the top, [i]ascent[/i] must be added to the Y axis. The width used by the character is returned, making this function useful for drawing strings character by character. </description> </method> <method name="get_ascent" qualifiers="const"> diff --git a/doc/classes/FuncRef.xml b/doc/classes/FuncRef.xml index a7593dc2a1..1277cef77d 100644 --- a/doc/classes/FuncRef.xml +++ b/doc/classes/FuncRef.xml @@ -16,6 +16,7 @@ <return type="Variant"> </return> <description> + Calls the referenced function previously set by [method set_function] or [method @GDScript.funcref]. </description> </method> <method name="set_function"> @@ -24,7 +25,7 @@ <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. + The name of the referenced function to call on the object, without parentheses or any parameters. </description> </method> <method name="set_instance"> @@ -33,7 +34,7 @@ <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]. + The object containing 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> diff --git a/doc/classes/Generic6DOFJoint.xml b/doc/classes/Generic6DOFJoint.xml index 4b782e994a..89ec1fd836 100644 --- a/doc/classes/Generic6DOFJoint.xml +++ b/doc/classes/Generic6DOFJoint.xml @@ -1,8 +1,10 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="Generic6DOFJoint" inherits="Joint" category="Core" version="3.0.alpha.custom_build"> <brief_description> + The generic 6 degrees of freedom joint can implement a variety of joint-types by locking certain axes' rotation or translation. </brief_description> <description> + The first 3 dof axes are linear axes, which represent translation of Bodies, and the latter 3 dof axes represent the angular motion. Each axis can be either locked, or limited. </description> <tutorials> </tutorials> @@ -120,146 +122,217 @@ </methods> <members> <member name="angular_limit_x/damping" type="float" setter="set_param_x" getter="get_param_x"> + The amount of rotational damping across the x-axis. + The lower, the longer an impulse from one side takes to travel to the other side. </member> <member name="angular_limit_x/enabled" type="bool" setter="set_flag_x" getter="get_flag_x"> + If [code]true[/code] rotation across the x-axis is enabled. </member> <member name="angular_limit_x/erp" type="float" setter="set_param_x" getter="get_param_x"> + When rotating across x-axis, this error tolerance factor defines how much the correction gets slowed down. The lower, the slower. </member> <member name="angular_limit_x/force_limit" type="float" setter="set_param_x" getter="get_param_x"> + The maximum amount of force that can occur, when rotating arround x-axis. </member> <member name="angular_limit_x/lower_angle" type="float" setter="_set_angular_lo_limit_x" getter="_get_angular_lo_limit_x"> + The minimum rotation in negative direction to break loose and rotate arround the x-axis. </member> <member name="angular_limit_x/restitution" type="float" setter="set_param_x" getter="get_param_x"> + The amount of rotational restitution across the x-axis. The lower, the more restitution occurs. </member> <member name="angular_limit_x/softness" type="float" setter="set_param_x" getter="get_param_x"> + The speed of all rotations across the x-axis. </member> <member name="angular_limit_x/upper_angle" type="float" setter="_set_angular_hi_limit_x" getter="_get_angular_hi_limit_x"> + The minimum rotation in positive direction to break loose and rotate arround the x-axis. </member> <member name="angular_limit_y/damping" type="float" setter="set_param_y" getter="get_param_y"> + The amount of rotational damping across the y-axis. The lower, the more dampening occurs. </member> <member name="angular_limit_y/enabled" type="bool" setter="set_flag_y" getter="get_flag_y"> + If [code]true[/code] rotation across the y-axis is enabled. </member> <member name="angular_limit_y/erp" type="float" setter="set_param_y" getter="get_param_y"> + When rotating across y-axis, this error tolerance factor defines how much the correction gets slowed down. The lower, the slower. </member> <member name="angular_limit_y/force_limit" type="float" setter="set_param_y" getter="get_param_y"> + The maximum amount of force that can occur, when rotating arround y-axis. </member> <member name="angular_limit_y/lower_angle" type="float" setter="_set_angular_lo_limit_y" getter="_get_angular_lo_limit_y"> + The minimum rotation in negative direction to break loose and rotate arround the y-axis. </member> <member name="angular_limit_y/restitution" type="float" setter="set_param_y" getter="get_param_y"> + The amount of rotational restitution across the y-axis. The lower, the more restitution occurs. </member> <member name="angular_limit_y/softness" type="float" setter="set_param_y" getter="get_param_y"> + The speed of all rotations across the y-axis. </member> <member name="angular_limit_y/upper_angle" type="float" setter="_set_angular_hi_limit_y" getter="_get_angular_hi_limit_y"> + The minimum rotation in positive direction to break loose and rotate arround the y-axis. </member> <member name="angular_limit_z/damping" type="float" setter="set_param_z" getter="get_param_z"> + The amount of rotational damping across the z-axis. The lower, the more dampening occurs. </member> <member name="angular_limit_z/enabled" type="bool" setter="set_flag_z" getter="get_flag_z"> + If [code]true[/code] rotation across the z-axis is enabled. </member> <member name="angular_limit_z/erp" type="float" setter="set_param_z" getter="get_param_z"> + When rotating across z-axis, this error tolerance factor defines how much the correction gets slowed down. The lower, the slower. </member> <member name="angular_limit_z/force_limit" type="float" setter="set_param_z" getter="get_param_z"> + The maximum amount of force that can occur, when rotating arround z-axis. </member> <member name="angular_limit_z/lower_angle" type="float" setter="_set_angular_lo_limit_z" getter="_get_angular_lo_limit_z"> + The minimum rotation in negative direction to break loose and rotate arround the z-axis. </member> <member name="angular_limit_z/restitution" type="float" setter="set_param_z" getter="get_param_z"> + The amount of rotational restitution across the z-axis. The lower, the more restitution occurs. </member> <member name="angular_limit_z/softness" type="float" setter="set_param_z" getter="get_param_z"> + The speed of all rotations across the z-axis. </member> <member name="angular_limit_z/upper_angle" type="float" setter="_set_angular_hi_limit_z" getter="_get_angular_hi_limit_z"> + The minimum rotation in positive direction to break loose and rotate arround the z-axis. </member> <member name="angular_motor_x/enabled" type="bool" setter="set_flag_x" getter="get_flag_x"> + If [code]true[/code] a rotating motor at the x-axis is enabled. </member> <member name="angular_motor_x/force_limit" type="float" setter="set_param_x" getter="get_param_x"> + Maximum acceleration for the motor at the x-axis. </member> <member name="angular_motor_x/target_velocity" type="float" setter="set_param_x" getter="get_param_x"> + Target speed for the motor at the x-axis. </member> <member name="angular_motor_y/enabled" type="bool" setter="set_flag_y" getter="get_flag_y"> + If [code]true[/code] a rotating motor at the y-axis is enabled. </member> <member name="angular_motor_y/force_limit" type="float" setter="set_param_y" getter="get_param_y"> + Maximum acceleration for the motor at the y-axis. </member> <member name="angular_motor_y/target_velocity" type="float" setter="set_param_y" getter="get_param_y"> + Target speed for the motor at the y-axis. </member> <member name="angular_motor_z/enabled" type="bool" setter="set_flag_z" getter="get_flag_z"> + If [code]true[/code] a rotating motor at the z-axis is enabled. </member> <member name="angular_motor_z/force_limit" type="float" setter="set_param_z" getter="get_param_z"> + Maximum acceleration for the motor at the z-axis. </member> <member name="angular_motor_z/target_velocity" type="float" setter="set_param_z" getter="get_param_z"> + Target speed for the motor at the z-axis. </member> <member name="linear_limit_x/damping" type="float" setter="set_param_x" getter="get_param_x"> + The amount of damping that happens at the x-motion. </member> <member name="linear_limit_x/enabled" type="bool" setter="set_flag_x" getter="get_flag_x"> + If [code]true[/code] the linear motion across the x-axis is enabled. </member> <member name="linear_limit_x/lower_distance" type="float" setter="set_param_x" getter="get_param_x"> + The minimum difference between the pivot points' x-axis. </member> <member name="linear_limit_x/restitution" type="float" setter="set_param_x" getter="get_param_x"> + The amount of restitution on the x-axis movement The lower, the more momentum gets lost. </member> <member name="linear_limit_x/softness" type="float" setter="set_param_x" getter="get_param_x"> + A factor applied to the movement across the x-axis The lower, the slower the movement. </member> <member name="linear_limit_x/upper_distance" type="float" setter="set_param_x" getter="get_param_x"> + The maximum difference between the pivot points' x-axis. </member> <member name="linear_limit_y/damping" type="float" setter="set_param_y" getter="get_param_y"> + The amount of damping that happens at the y-motion. </member> <member name="linear_limit_y/enabled" type="bool" setter="set_flag_y" getter="get_flag_y"> + If [code]true[/code] the linear motion across the y-axis is enabled. </member> <member name="linear_limit_y/lower_distance" type="float" setter="set_param_y" getter="get_param_y"> + The minimum difference between the pivot points' y-axis. </member> <member name="linear_limit_y/restitution" type="float" setter="set_param_y" getter="get_param_y"> + The amount of restitution on the y-axis movement The lower, the more momentum gets lost. </member> <member name="linear_limit_y/softness" type="float" setter="set_param_y" getter="get_param_y"> + A factor applied to the movement across the y-axis The lower, the slower the movement. </member> <member name="linear_limit_y/upper_distance" type="float" setter="set_param_y" getter="get_param_y"> + The maximum difference between the pivot points' y-axis. </member> <member name="linear_limit_z/damping" type="float" setter="set_param_z" getter="get_param_z"> + The amount of damping that happens at the z-motion. </member> <member name="linear_limit_z/enabled" type="bool" setter="set_flag_z" getter="get_flag_z"> + If [code]true[/code] the linear motion across the z-axis is enabled. </member> <member name="linear_limit_z/lower_distance" type="float" setter="set_param_z" getter="get_param_z"> + The minimum difference between the pivot points' z-axis. </member> <member name="linear_limit_z/restitution" type="float" setter="set_param_z" getter="get_param_z"> + The amount of restitution on the z-axis movement The lower, the more momentum gets lost. </member> <member name="linear_limit_z/softness" type="float" setter="set_param_z" getter="get_param_z"> + A factor applied to the movement across the z-axis The lower, the slower the movement. </member> <member name="linear_limit_z/upper_distance" type="float" setter="set_param_z" getter="get_param_z"> + The maximum difference between the pivot points' z-axis. </member> </members> <constants> <constant name="PARAM_LINEAR_LOWER_LIMIT" value="0"> + The minimum difference between the pivot points' axes. </constant> <constant name="PARAM_LINEAR_UPPER_LIMIT" value="1"> + The maximum difference between the pivot points' axes. </constant> <constant name="PARAM_LINEAR_LIMIT_SOFTNESS" value="2"> + A factor applied to the movement across the axes The lower, the slower the movement. </constant> <constant name="PARAM_LINEAR_RESTITUTION" value="3"> + The amount of restitution on the axes movement The lower, the more momentum gets lost. </constant> <constant name="PARAM_LINEAR_DAMPING" value="4"> + The amount of damping that happens at the linear motion across the axes. </constant> <constant name="PARAM_ANGULAR_LOWER_LIMIT" value="5"> + The minimum rotation in negative direction to break loose and rotate arround the axes. </constant> <constant name="PARAM_ANGULAR_UPPER_LIMIT" value="6"> + The minimum rotation in positive direction to break loose and rotate arround the axes. </constant> <constant name="PARAM_ANGULAR_LIMIT_SOFTNESS" value="7"> + The speed of all rotations across the axes. </constant> <constant name="PARAM_ANGULAR_DAMPING" value="8"> + The amount of rotational damping across the axes. The lower, the more dampening occurs. </constant> <constant name="PARAM_ANGULAR_RESTITUTION" value="9"> + The amount of rotational restitution across the axes. The lower, the more restitution occurs. </constant> <constant name="PARAM_ANGULAR_FORCE_LIMIT" value="10"> + The maximum amount of force that can occur, when rotating arround the axes. </constant> <constant name="PARAM_ANGULAR_ERP" value="11"> + When rotating across the axes, this error tolerance factor defines how much the correction gets slowed down. The lower, the slower. </constant> <constant name="PARAM_ANGULAR_MOTOR_TARGET_VELOCITY" value="12"> + Target speed for the motor at the axes. </constant> <constant name="PARAM_ANGULAR_MOTOR_FORCE_LIMIT" value="13"> + Maximum acceleration for the motor at the axes. </constant> <constant name="PARAM_MAX" value="14"> + End flag of PARAM_* constants, used internally. </constant> <constant name="FLAG_ENABLE_LINEAR_LIMIT" value="0"> + If [code]set[/code] there is linear motion possible within the given limits. </constant> <constant name="FLAG_ENABLE_ANGULAR_LIMIT" value="1"> + If [code]set[/code] there is rotational motion possible. </constant> <constant name="FLAG_ENABLE_MOTOR" value="2"> + If [code]set[/code] there is a rotational motor across these axes. </constant> <constant name="FLAG_MAX" value="3"> + End flag of FLAG_* constants, used internally. </constant> </constants> </class> diff --git a/doc/classes/Geometry.xml b/doc/classes/Geometry.xml index 6c301cb928..49f32bc68f 100644 --- a/doc/classes/Geometry.xml +++ b/doc/classes/Geometry.xml @@ -176,7 +176,7 @@ </argument> <argument index="1" name="segment_to" type="Vector2"> </argument> - <argument index="2" name="circle_pos" type="Vector2"> + <argument index="2" name="circle_position" type="Vector2"> </argument> <argument index="3" name="circle_radius" type="float"> </argument> @@ -230,9 +230,9 @@ </argument> <argument index="1" name="to" type="Vector3"> </argument> - <argument index="2" name="spos" type="Vector3"> + <argument index="2" name="sphere_position" type="Vector3"> </argument> - <argument index="3" name="sradius" type="float"> + <argument index="3" name="sphere_radius" type="float"> </argument> <description> </description> diff --git a/doc/classes/Gradient.xml b/doc/classes/Gradient.xml index f97908b0a2..e086ae86b1 100644 --- a/doc/classes/Gradient.xml +++ b/doc/classes/Gradient.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="Gradient" inherits="Resource" category="Core" version="3.0.alpha.custom_build"> <brief_description> - Color interpolator node + Color interpolator node. </brief_description> <description> Given a set of colors, this node will interpolate them in order, meaning, that if you have color 1, color 2 and color3, the ramp will interpolate (generate the colors between two colors) from color 1 to color 2 and from color 2 to color 3. Initially the ramp will have 2 colors (black and white), one (black) at ramp lower offset offset 0 and the other (white) at the ramp higher offset 1. @@ -122,8 +122,10 @@ </methods> <members> <member name="colors" type="PoolColorArray" setter="set_colors" getter="get_colors"> + Gradient's colors returned as a [PoolColorArray]. </member> <member name="offsets" type="PoolRealArray" setter="set_offsets" getter="get_offsets"> + Gradient's offsets returned as a [PoolRealArray]. </member> </members> <constants> diff --git a/doc/classes/GraphEdit.xml b/doc/classes/GraphEdit.xml index bd594033ee..01d578be5e 100644 --- a/doc/classes/GraphEdit.xml +++ b/doc/classes/GraphEdit.xml @@ -177,7 +177,7 @@ </argument> <argument index="1" name="from_slot" type="int"> </argument> - <argument index="2" name="release_pos" type="Vector2"> + <argument index="2" name="release_position" type="Vector2"> </argument> <description> </description> diff --git a/doc/classes/GraphNode.xml b/doc/classes/GraphNode.xml index de1d9c1194..e230390882 100644 --- a/doc/classes/GraphNode.xml +++ b/doc/classes/GraphNode.xml @@ -43,7 +43,7 @@ Return the number of enabled input slots (connections) to the GraphNode. </description> </method> - <method name="get_connection_input_pos"> + <method name="get_connection_input_position"> <return type="Vector2"> </return> <argument index="0" name="idx" type="int"> @@ -77,7 +77,7 @@ Return the number of enabled output slots (connections) of the GraphNode. </description> </method> - <method name="get_connection_output_pos"> + <method name="get_connection_output_position"> <return type="Vector2"> </return> <argument index="0" name="idx" type="int"> diff --git a/doc/classes/GridContainer.xml b/doc/classes/GridContainer.xml index ca7b868cd8..30976eff99 100644 --- a/doc/classes/GridContainer.xml +++ b/doc/classes/GridContainer.xml @@ -30,6 +30,7 @@ </methods> <members> <member name="columns" type="int" setter="set_columns" getter="get_columns"> + The number of columns in the [code]GridContainer[/code]. If modified, [code]GridContainer[/code] reorders its children to accommodate the new layout. </member> </members> <constants> diff --git a/doc/classes/HSlider.xml b/doc/classes/HSlider.xml index 91f95d1548..25e62b90e3 100644 --- a/doc/classes/HSlider.xml +++ b/doc/classes/HSlider.xml @@ -19,6 +19,8 @@ </theme_item> <theme_item name="grabber" type="Texture"> </theme_item> + <theme_item name="grabber_area" type="StyleBox"> + </theme_item> <theme_item name="grabber_disabled" type="Texture"> </theme_item> <theme_item name="grabber_disabled" type="StyleBox"> diff --git a/doc/classes/HTTPRequest.xml b/doc/classes/HTTPRequest.xml index c2839890cf..b780d29d0e 100644 --- a/doc/classes/HTTPRequest.xml +++ b/doc/classes/HTTPRequest.xml @@ -166,7 +166,7 @@ Request does not have a response(yet). </constant> <constant name="RESULT_BODY_SIZE_LIMIT_EXCEEDED" value="7"> - Request exceded its maximum size limit, see [method set_body_size_limit]. + Request exceeded its maximum size limit, see [method set_body_size_limit]. </constant> <constant name="RESULT_REQUEST_FAILED" value="8"> Request failed. (unused) diff --git a/doc/classes/HingeJoint.xml b/doc/classes/HingeJoint.xml index ae3693c3a4..d18e63f8a3 100644 --- a/doc/classes/HingeJoint.xml +++ b/doc/classes/HingeJoint.xml @@ -1,8 +1,10 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="HingeJoint" inherits="Joint" category="Core" version="3.0.alpha.custom_build"> <brief_description> + A hinge between two 3D bodies. </brief_description> <description> + Normaly uses the z-axis of body A as the hinge axis, another axis can be specified when adding it manually though. </description> <tutorials> </tutorials> @@ -48,50 +50,70 @@ </methods> <members> <member name="angular_limit/bias" type="float" setter="set_param" getter="get_param"> + The speed with which the rotation across the axis perpendicular to the hinge gets corrected. </member> <member name="angular_limit/enable" type="bool" setter="set_flag" getter="get_flag"> + If [code]true[/code] the hinges maximum and minimum rotation, defined by [member angular_limit/lower] and [member angular_limit/upper] has effects. </member> <member name="angular_limit/lower" type="float" setter="_set_lower_limit" getter="_get_lower_limit"> + The minimum rotation. only active if [member angular_limit/enable] is [code]true[/code]. </member> <member name="angular_limit/relaxation" type="float" setter="set_param" getter="get_param"> + The lower this value, the more the rotation gets slowed down. </member> <member name="angular_limit/softness" type="float" setter="set_param" getter="get_param"> </member> <member name="angular_limit/upper" type="float" setter="_set_upper_limit" getter="_get_upper_limit"> + The maximum rotation. only active if [member angular_limit/enable] is [code]true[/code]. </member> <member name="motor/enable" type="bool" setter="set_flag" getter="get_flag"> + When activated, a motor turns the hinge. </member> <member name="motor/max_impulse" type="float" setter="set_param" getter="get_param"> + Maximum acceleration for the motor. </member> <member name="motor/target_velocity" type="float" setter="set_param" getter="get_param"> + Target speed for the motor. </member> <member name="params/bias" type="float" setter="set_param" getter="get_param"> + The speed with wich the two bodies get pulled together when they move in different directions. </member> </members> <constants> <constant name="PARAM_BIAS" value="0"> + The speed with wich the two bodies get pulled together when they move in different directions. </constant> <constant name="PARAM_LIMIT_UPPER" value="1"> + The maximum rotation. only active if [member angular_limit/enable] is [code]true[/code]. </constant> <constant name="PARAM_LIMIT_LOWER" value="2"> + The minimum rotation. only active if [member angular_limit/enable] is [code]true[/code]. </constant> <constant name="PARAM_LIMIT_BIAS" value="3"> + The speed with which the rotation across the axis perpendicular to the hinge gets corrected. </constant> <constant name="PARAM_LIMIT_SOFTNESS" value="4"> </constant> <constant name="PARAM_LIMIT_RELAXATION" value="5"> + The lower this value, the more the rotation gets slowed down. </constant> <constant name="PARAM_MOTOR_TARGET_VELOCITY" value="6"> + Target speed for the motor. </constant> <constant name="PARAM_MOTOR_MAX_IMPULSE" value="7"> + Maximum acceleration for the motor. </constant> <constant name="PARAM_MAX" value="8"> + End flag of PARAM_* constants, used internally. </constant> <constant name="FLAG_USE_LIMIT" value="0"> + If [code]true[/code] the hinges maximum and minimum rotation, defined by [member angular_limit/lower] and [member angular_limit/upper] has effects. </constant> <constant name="FLAG_ENABLE_MOTOR" value="1"> + When activated, a motor turns the hinge. </constant> <constant name="FLAG_MAX" value="2"> + End flag of FLAG_* constants, used internally. </constant> </constants> </class> diff --git a/doc/classes/ImageTexture.xml b/doc/classes/ImageTexture.xml index 2b74a15fd5..fdaee798db 100644 --- a/doc/classes/ImageTexture.xml +++ b/doc/classes/ImageTexture.xml @@ -4,7 +4,7 @@ A [Texture] based on an [Image]. </brief_description> <description> - A [Texture] based on an [Image]. Can be created from an [Image]. + A [Texture] based on an [Image]. Can be created from an [Image] with [method create_from_image]. </description> <tutorials> </tutorials> @@ -66,7 +66,7 @@ <argument index="0" name="path" type="String"> </argument> <description> - Load an [ImageTexure]. + Load an [ImageTexture]. </description> </method> <method name="set_data"> @@ -93,6 +93,7 @@ <argument index="0" name="size" type="Vector2"> </argument> <description> + Resizes the [code]ImageTexture[/code] to the specified dimensions. </description> </method> <method name="set_storage"> diff --git a/doc/classes/ImmediateGeometry.xml b/doc/classes/ImmediateGeometry.xml index 7b45c0c678..cd7074aeaf 100644 --- a/doc/classes/ImmediateGeometry.xml +++ b/doc/classes/ImmediateGeometry.xml @@ -1,9 +1,10 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="ImmediateGeometry" inherits="GeometryInstance" category="Core" version="3.0.alpha.custom_build"> <brief_description> - Node to draw simple geometry from code, ala OpenGL 1.x + Draws simple geometry from code. </brief_description> <description> + Draws simple geometry from code. Uses a drawing mode similar to OpenGL 1.x. </description> <tutorials> </tutorials> @@ -28,10 +29,10 @@ <method name="add_vertex"> <return type="void"> </return> - <argument index="0" name="pos" type="Vector3"> + <argument index="0" name="position" type="Vector3"> </argument> <description> - Add a vertex with the currently set color/uv/etc. + Adds a vertex with the currently set color/uv/etc. </description> </method> <method name="begin"> @@ -50,14 +51,14 @@ <return type="void"> </return> <description> - Clear everything that was drawn using begin/end. + Clears everything that was drawn using begin/end. </description> </method> <method name="end"> <return type="void"> </return> <description> - Call this when done adding a batch of geometry, otherwise it can't be displayed. + Ends a drawing context and displays the results. </description> </method> <method name="set_color"> @@ -66,7 +67,7 @@ <argument index="0" name="color" type="Color"> </argument> <description> - Set the color that the next vertex will use to be drawn. + The current drawing color. </description> </method> <method name="set_normal"> @@ -75,7 +76,7 @@ <argument index="0" name="normal" type="Vector3"> </argument> <description> - Set the normal that the next vertex will use to be drawn. + The next vertex's normal. </description> </method> <method name="set_tangent"> @@ -84,7 +85,7 @@ <argument index="0" name="tangent" type="Plane"> </argument> <description> - Set the tangent (and binormal facing) that the next vertex will use to be drawn. + The next vertex's tangent (and binormal facing). </description> </method> <method name="set_uv"> @@ -93,7 +94,7 @@ <argument index="0" name="uv" type="Vector2"> </argument> <description> - Set the UV that the next vertex will use to be drawn. + The next vertex's UV. </description> </method> <method name="set_uv2"> @@ -102,7 +103,7 @@ <argument index="0" name="uv" type="Vector2"> </argument> <description> - Set the second layer of UV that the next vertex will use to be drawn. + The next vertex's second layer UV. </description> </method> </methods> diff --git a/doc/classes/Input.xml b/doc/classes/Input.xml index f636000242..d2d01dacb4 100644 --- a/doc/classes/Input.xml +++ b/doc/classes/Input.xml @@ -4,7 +4,7 @@ A Singleton that deals with inputs. </brief_description> <description> - A Singleton that deals with inputs. This includes key presses, mouse buttons and movement, joypads, and input actions. + A Singleton that deals with inputs. This includes key presses, mouse buttons and movement, joypads, and input actions. Actions and their events can be set in the Project Settings / Input Map tab. Or be set with [InputMap]. </description> <tutorials> </tutorials> @@ -75,7 +75,7 @@ <argument index="1" name="axis" type="int"> </argument> <description> - Returns the current value of the joypad axis at given index (see JOY_* constants in [@Global Scope]) + Returns the current value of the joypad axis at given index (see [code]JOY_*[/code] constants in [@Global Scope]) </description> </method> <method name="get_joy_axis_index_from_string"> @@ -180,6 +180,7 @@ <argument index="0" name="action" type="String"> </argument> <description> + Returns [code]true[/code] when you start pressing the action event. </description> </method> <method name="is_action_just_released" qualifiers="const"> @@ -188,6 +189,7 @@ <argument index="0" name="action" type="String"> </argument> <description> + Returns [code]true[/code] when you stop pressing the action event. </description> </method> <method name="is_action_pressed" qualifiers="const"> @@ -196,7 +198,7 @@ <argument index="0" name="action" type="String"> </argument> <description> - 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]. + Returns [code]true[/code] if you are pressing the action event. </description> </method> <method name="is_joy_button_pressed" qualifiers="const"> @@ -207,7 +209,7 @@ <argument index="1" name="button" type="int"> </argument> <description> - Returns if the joypad button at the given index is currently pressed. (see JOY_* constants in [@Global Scope]) + Returns [code]true[/code] if you are pressing the joypad button. (see [code]JOY_*[/code] constants in [@Global Scope]) </description> </method> <method name="is_joy_known"> @@ -216,7 +218,7 @@ <argument index="0" name="device" type="int"> </argument> <description> - 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 joypads are not expected to match these constants, but you can still retrieve events from them. + Returns [code]true[/code] if the system knows the specified device. This means that it sets all button and axis indices exactly as defined in the [code]JOY_*[/code] constants (see [@Global Scope]). Unknown joypads are not expected to match these constants, but you can still retrieve events from them. </description> </method> <method name="is_key_pressed" qualifiers="const"> @@ -225,7 +227,7 @@ <argument index="0" name="scancode" type="int"> </argument> <description> - 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]. + Returns [code]true[/code] if you are pressing the key. You can pass [code]KEY_*[/code], which are pre-defined constants listed in [@Global Scope]. </description> </method> <method name="is_mouse_button_pressed" qualifiers="const"> @@ -234,7 +236,21 @@ <argument index="0" name="button" type="int"> </argument> <description> - Returns true or false depending on whether mouse button is pressed or not. You can pass BUTTON_*, which are pre-defined constants listed in [@Global Scope]. + Returns [code]true[/code] if you are pressing the mouse button. You can pass [code]BUTTON_*[/code], which are pre-defined constants listed in [@Global Scope]. + </description> + </method> + <method name="joy_connection_changed"> + <return type="void"> + </return> + <argument index="0" name="device" type="int"> + </argument> + <argument index="1" name="connected" type="bool"> + </argument> + <argument index="2" name="name" type="String"> + </argument> + <argument index="3" name="guid" type="String"> + </argument> + <description> </description> </method> <method name="parse_input_event"> @@ -298,7 +314,7 @@ Stops the vibration of the joypad. </description> </method> - <method name="warp_mouse_pos"> + <method name="warp_mouse_position"> <return type="void"> </return> <argument index="0" name="to" type="Vector2"> diff --git a/doc/classes/InputEvent.xml b/doc/classes/InputEvent.xml index 392ee25ad6..c6abf2fee5 100644 --- a/doc/classes/InputEvent.xml +++ b/doc/classes/InputEvent.xml @@ -4,8 +4,10 @@ Generic input event </brief_description> <description> + Base class of all sort of input event. See [method Node._input]. </description> <tutorials> + http://docs.godotengine.org/en/stable/learning/features/inputs/inputevent.html </tutorials> <demos> </demos> @@ -16,7 +18,7 @@ <argument index="0" name="event" type="InputEvent"> </argument> <description> - Returns true if this input event matches the event passed. + Returns [code]true[/code] if this event matches [code]event[event]. </description> </method> <method name="as_text" qualifiers="const"> @@ -30,14 +32,14 @@ <return type="int"> </return> <description> - Returns the id of the device that generated the event. + Returns the device's id that generated the event. </description> </method> <method name="get_id" qualifiers="const"> <return type="int"> </return> <description> - Returns the id of the event. + Returns the event's ID. </description> </method> <method name="is_action" qualifiers="const"> @@ -46,7 +48,7 @@ <argument index="0" name="action" type="String"> </argument> <description> - Returns true if this input event matches a pre-defined action, no matter the type. + Returns [code]true[/code] if this input event matches a pre-defined action of any type. </description> </method> <method name="is_action_pressed" qualifiers="const"> @@ -55,7 +57,7 @@ <argument index="0" name="action" type="String"> </argument> <description> - Returns true if the given action is being pressed (and is not an echo event for KEY events). Not relevant for the event types MOUSE_MOTION, SCREEN_DRAG and NONE. + Returns [code]true[/code] if the given action is being pressed (and is not an echo event for KEY events). Not relevant for the event types [code]MOUSE_MOTION[/code], [code]SCREEN_DRAG[/code] or [code]NONE[/code]. </description> </method> <method name="is_action_released" qualifiers="const"> @@ -64,27 +66,28 @@ <argument index="0" name="action" type="String"> </argument> <description> - Returns true if the given action is released (i.e. not pressed). Not relevant for the event types MOUSE_MOTION, SCREEN_DRAG and NONE. + Returns [code]true[/code] if the given action is released (i.e. not pressed). Not relevant for the event types [code]MOUSE_MOTION[/code], [code]SCREEN_DRAG[/code] or [code]NONE[/code]. </description> </method> <method name="is_action_type" qualifiers="const"> <return type="bool"> </return> <description> + Returns [code]true[/code] if this input event's type is one of the [code]InputEvent[/code] constants. </description> </method> <method name="is_echo" qualifiers="const"> <return type="bool"> </return> <description> - Returns true if this input event is an echo event (only for events of type KEY, it will return false for other types). + Returns [code]true[/code] if this input event is an echo event (only for events of type KEY). </description> </method> <method name="is_pressed" qualifiers="const"> <return type="bool"> </return> <description> - Returns true if this input event is pressed. Not relevant for the event types MOUSE_MOTION, SCREEN_DRAG and NONE. + Returns [code]true[/code] if this input event is pressed. Not relevant for the event types [code]MOUSE_MOTION[/code], [code]SCREEN_DRAG[/code] or [code]NONE[/code]. </description> </method> <method name="set_device"> @@ -124,6 +127,7 @@ </methods> <members> <member name="device" type="int" setter="set_device" getter="get_device"> + The event's device ID. </member> </members> <constants> diff --git a/doc/classes/InputEventAction.xml b/doc/classes/InputEventAction.xml index 2617ea4dfa..a2f4c9b9d3 100644 --- a/doc/classes/InputEventAction.xml +++ b/doc/classes/InputEventAction.xml @@ -4,8 +4,10 @@ Input event type for actions. </brief_description> <description> + Contains a generic action which can be targeted from several type of inputs. Actions can be created from the project settings menu [code]Project > Project Settings > Input Map[/Code]. See [method Node._input]. </description> <tutorials> + http://docs.godotengine.org/en/stable/learning/features/inputs/inputevent.html#actions </tutorials> <demos> </demos> @@ -35,8 +37,10 @@ </methods> <members> <member name="action" type="String" setter="set_action" getter="get_action"> + The action's name. Actions are accessed via this [String]. </member> <member name="pressed" type="bool" setter="set_pressed" getter="is_pressed"> + If [code]true[/code] the action's state is pressed. If [code]false[/code] the action's state is released. </member> </members> <constants> diff --git a/doc/classes/InputEventJoypadButton.xml b/doc/classes/InputEventJoypadButton.xml index 2784b06442..f13a1102b7 100644 --- a/doc/classes/InputEventJoypadButton.xml +++ b/doc/classes/InputEventJoypadButton.xml @@ -1,11 +1,13 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="InputEventJoypadButton" inherits="InputEvent" category="Core" version="3.0.alpha.custom_build"> <brief_description> - Input event type for joypad button events. + Input event for gamepad buttons. </brief_description> <description> + Input event type for gamepad buttons. For joysticks see [InputEventJoypadMotion]. </description> <tutorials> + http://docs.godotengine.org/en/stable/learning/features/inputs/inputevent.html </tutorials> <demos> </demos> @@ -49,13 +51,13 @@ </methods> <members> <member name="button_index" type="int" setter="set_button_index" getter="get_button_index"> - Joypad button identifier, one of the JOY_BUTTON_* constants in [@Global Scope]. + Button identifier. One of the [code]JOY_BUTTON_*[/code] constants from [@global Scope]. </member> <member name="pressed" type="bool" setter="set_pressed" getter="is_pressed"> - Pressed state of the joypad button. + If [code]true[/code] the button's state is pressed. If [code]false[/code] the button's state is released. </member> <member name="pressure" type="float" setter="set_pressure" getter="get_pressure"> - Intensity of the button pressure, ranges from 0 to 1.0. + Represents the pressure the user puts on the button with his finger, if the controller supports it. Ranges from [code]0[/code] to [code]1[/code]. </member> </members> <constants> diff --git a/doc/classes/InputEventJoypadMotion.xml b/doc/classes/InputEventJoypadMotion.xml index 8a26007fc1..9e7edfb822 100644 --- a/doc/classes/InputEventJoypadMotion.xml +++ b/doc/classes/InputEventJoypadMotion.xml @@ -1,11 +1,13 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="InputEventJoypadMotion" inherits="InputEvent" category="Core" version="3.0.alpha.custom_build"> <brief_description> - Input event type for joypad motion/axis events. + Input event type for gamepad joysticks and other motions. For buttons see [InputEventJoypadMotion]. </brief_description> <description> + Stores information about joystick motions. One [code]InputEventJoypadMotion[/code] represents one axis at a time. </description> <tutorials> + http://docs.godotengine.org/en/stable/learning/features/inputs/inputevent.html </tutorials> <demos> </demos> @@ -41,10 +43,10 @@ </methods> <members> <member name="axis" type="int" setter="set_axis" getter="get_axis"> - Joypad axis identifier, one of the JOY_AXIS_* constants in [@Global Scope]. + Axis identifier. Use one of the [code]JOY_AXIS_*[/code] constants in [@global Scope]. </member> <member name="axis_value" type="float" setter="set_axis_value" getter="get_axis_value"> - Position of the axis, ranging from -1.0 to 1.0. A value of 0 means that the axis is in its neutral position. + Current position of the joystick on the given axis. The value ranges from [code]-1.0[/code] to [code]1.0[/code]. A value of [code]0[/code] means the axis is in its resting position. </member> </members> <constants> diff --git a/doc/classes/InputEventKey.xml b/doc/classes/InputEventKey.xml index 151e19d25d..9565584a4f 100644 --- a/doc/classes/InputEventKey.xml +++ b/doc/classes/InputEventKey.xml @@ -4,8 +4,10 @@ Input event type for keyboard events. </brief_description> <description> + Stores key presses on the keyboard. Supports key presses, key releases and [member echo] events. </description> <tutorials> + http://docs.godotengine.org/en/stable/learning/features/inputs/inputevent.html </tutorials> <demos> </demos> @@ -63,16 +65,16 @@ </methods> <members> <member name="echo" type="bool" setter="set_echo" getter="is_echo"> - Echo state of the key, i.e. whether it's a repeat event or not. + If [code]true[/code] the key was already pressed before this event. It means the user is holding the key down. </member> <member name="pressed" type="bool" setter="set_pressed" getter="is_pressed"> - Pressed state of the key. + If [code]true[/code] the key's state is pressed. If [code]false[/code] the key's state is released. </member> <member name="scancode" type="int" setter="set_scancode" getter="get_scancode"> - Scancode of the key, one of the KEY_* constants in [@Global Scope]. + Key scancode, one of the [code]KEY_*[/code] constants in [@global Scope]. </member> <member name="unicode" type="int" setter="set_unicode" getter="get_unicode"> - Unicode identifier of the key (when relevant). + Key unicode identifier when relevant. </member> </members> <constants> diff --git a/doc/classes/InputEventMouse.xml b/doc/classes/InputEventMouse.xml index 57f0acbf30..38eec74ffa 100644 --- a/doc/classes/InputEventMouse.xml +++ b/doc/classes/InputEventMouse.xml @@ -4,8 +4,10 @@ Base input event type for mouse events. </brief_description> <description> + Stores general mouse events informations. </description> <tutorials> + http://docs.godotengine.org/en/stable/learning/features/inputs/inputevent.html </tutorials> <demos> </demos> @@ -58,10 +60,10 @@ Mouse button mask identifier, one of or a bitwise combination of the BUTTON_MASK_* constants in [@Global Scope]. </member> <member name="global_position" type="Vector2" setter="set_global_position" getter="get_global_position"> - Global position of the mouse click. + Mouse position relative to the current [Viewport] when used in [method Control._gui_input], otherwise is at 0,0. </member> <member name="position" type="Vector2" setter="set_position" getter="get_position"> - Local position of the mouse click. + Mouse local position relative to the [Viewport]. If used in [method Control._gui_input] the position is relative to the current [Control] wich is under the mouse. </member> </members> <constants> diff --git a/doc/classes/InputEventMouseButton.xml b/doc/classes/InputEventMouseButton.xml index 63e31eb61c..afc0c331c8 100644 --- a/doc/classes/InputEventMouseButton.xml +++ b/doc/classes/InputEventMouseButton.xml @@ -4,8 +4,10 @@ Input event type for mouse button events. </brief_description> <description> + Contains mouse click informations. See [method Node._input]. </description> <tutorials> + http://docs.godotengine.org/en/stable/learning/features/inputs/inputevent.html </tutorials> <demos> </demos> @@ -66,12 +68,13 @@ Mouse button identifier, one of the BUTTON_* or BUTTON_WHEEL_* constants in [@Global Scope]. </member> <member name="doubleclick" type="bool" setter="set_doubleclick" getter="is_doubleclick"> - Whether the event is a double-click. + If [code]true[/code] the mouse button's state is a double-click. If [code]false[/code] the mouse button's state is released. </member> <member name="factor" type="float" setter="set_factor" getter="get_factor"> + TO TALK in PR, reduz said : i think it's used for apple touch but i don't remember what it does </member> <member name="pressed" type="bool" setter="set_pressed" getter="is_pressed"> - Pressed state of the mouse button. + If [code]true[/code] the mouse button's state is pressed. If [code]false[/code] the mouse button's state is released. </member> </members> <constants> diff --git a/doc/classes/InputEventMouseMotion.xml b/doc/classes/InputEventMouseMotion.xml index 59fe8d2e58..5be82e1ffa 100644 --- a/doc/classes/InputEventMouseMotion.xml +++ b/doc/classes/InputEventMouseMotion.xml @@ -4,8 +4,10 @@ Input event type for mouse motion events. </brief_description> <description> + Contains mouse motion informations. Supports relative, absolute positions and speed. See [method Node._input]. </description> <tutorials> + http://docs.godotengine.org/en/stable/learning/features/inputs/inputevent.html </tutorials> <demos> </demos> @@ -41,10 +43,10 @@ </methods> <members> <member name="relative" type="Vector2" setter="set_relative" getter="get_relative"> - Position of the mouse pointer relative to the previous mouse position. + Mouse position relative to the previous position (position at the last frame). </member> <member name="speed" type="Vector2" setter="set_speed" getter="get_speed"> - Speed of the mouse pointer. + Mouse speed. </member> </members> <constants> diff --git a/doc/classes/InputEventScreenDrag.xml b/doc/classes/InputEventScreenDrag.xml index 0b0ecc17bc..0c92ad5f70 100644 --- a/doc/classes/InputEventScreenDrag.xml +++ b/doc/classes/InputEventScreenDrag.xml @@ -2,10 +2,13 @@ <class name="InputEventScreenDrag" inherits="InputEvent" category="Core" version="3.0.alpha.custom_build"> <brief_description> Input event type for screen drag events. + (only available on mobile devices) </brief_description> <description> + Contains screen drag informations. See [method Node._input]. </description> <tutorials> + http://docs.godotengine.org/en/stable/learning/features/inputs/inputevent.html </tutorials> <demos> </demos> @@ -72,13 +75,13 @@ Drag event index in the case of a multi-drag event. </member> <member name="position" type="Vector2" setter="set_position" getter="get_position"> - Position of the drag event. + Drag position. </member> <member name="relative" type="Vector2" setter="set_relative" getter="get_relative"> - Position of the drag event relative to its start position. + Drag position relative to its start position. </member> <member name="speed" type="Vector2" setter="set_speed" getter="get_speed"> - Speed of the drag event. + Drag speed. </member> </members> <constants> diff --git a/doc/classes/InputEventScreenTouch.xml b/doc/classes/InputEventScreenTouch.xml index 97c3537364..01ba9f1285 100644 --- a/doc/classes/InputEventScreenTouch.xml +++ b/doc/classes/InputEventScreenTouch.xml @@ -2,10 +2,13 @@ <class name="InputEventScreenTouch" inherits="InputEvent" category="Core" version="3.0.alpha.custom_build"> <brief_description> Input event type for screen touch events. + (only available on mobile devices) </brief_description> <description> + Stores multi-touch press/release information. Supports touch press, touch release and [member index] for multi-touch count and order. </description> <tutorials> + http://docs.godotengine.org/en/stable/learning/features/inputs/inputevent.html </tutorials> <demos> </demos> @@ -33,7 +36,7 @@ <method name="set_position"> <return type="void"> </return> - <argument index="0" name="pos" type="Vector2"> + <argument index="0" name="position" type="Vector2"> </argument> <description> </description> @@ -49,13 +52,13 @@ </methods> <members> <member name="index" type="int" setter="set_index" getter="get_index"> - Touch event index in the case of a multi-touch event. + Touch index in the case of a multi-touch event. One index = one finger. </member> <member name="position" type="Vector2" setter="set_position" getter="get_position"> - Position of the touch event. + Touch position. </member> <member name="pressed" type="bool" setter="set_pressed" getter="is_pressed"> - Pressed state of the touch event. + If [code]true[/code] the touch's state is pressed. If [code]false[/code] the touch's state is released. </member> </members> <constants> diff --git a/doc/classes/InputEventWithModifiers.xml b/doc/classes/InputEventWithModifiers.xml index 7bbdf0a441..46107a4ab8 100644 --- a/doc/classes/InputEventWithModifiers.xml +++ b/doc/classes/InputEventWithModifiers.xml @@ -1,11 +1,13 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="InputEventWithModifiers" inherits="InputEvent" category="Core" version="3.0.alpha.custom_build"> <brief_description> - Base class for input events with modifiers. + Base class for keys events with modifiers. </brief_description> <description> + Contains keys events informations with modifiers support like [code]SHIFT[/code] or [code]ALT[/code]. See [method Node._input]. </description> <tutorials> + http://docs.godotengine.org/en/stable/learning/features/inputs/inputevent.html </tutorials> <demos> </demos> diff --git a/doc/classes/InputMap.xml b/doc/classes/InputMap.xml index bf72ba05e7..333edf02b5 100644 --- a/doc/classes/InputMap.xml +++ b/doc/classes/InputMap.xml @@ -1,11 +1,13 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="InputMap" inherits="Object" category="Core" version="3.0.alpha.custom_build"> <brief_description> - Singleton that manages actions. + Singleton that manages [InputEventAction]. </brief_description> <description> + Manages all [InputEventAction] which can be created/modified from the project settings menu [code]Project > Project Settings > Input Map[/Code] or in code with [method add_action] and [method action_add_event]. See [method Node._input]. </description> <tutorials> + http://docs.godotengine.org/en/stable/learning/features/inputs/inputevent.html#inputmap </tutorials> <demos> </demos> @@ -18,7 +20,7 @@ <argument index="1" name="event" type="InputEvent"> </argument> <description> - Add an [InputEvent] to an action. This [InputEvent] will trigger the action. + Adds an [InputEvent] to an action. This [InputEvent] will trigger the action. </description> </method> <method name="action_erase_event"> @@ -29,7 +31,7 @@ <argument index="1" name="event" type="InputEvent"> </argument> <description> - Remove an [InputEvent] from an action. + Removes an [InputEvent] from an action. </description> </method> <method name="action_has_event"> @@ -40,7 +42,7 @@ <argument index="1" name="event" type="InputEvent"> </argument> <description> - Whether an action has an [InputEvent] associated with it. + Returns [true] if an action has an [InputEvent] associated with it. </description> </method> <method name="add_action"> @@ -49,7 +51,7 @@ <argument index="0" name="action" type="String"> </argument> <description> - Add an (empty) action to the [InputMap]. An [InputEvent] can then be added to this action with [method action_add_event]. + Adds an (empty) action to the [InputMap]. An [InputEvent] can then be added to this action with [method action_add_event]. </description> </method> <method name="erase_action"> @@ -58,7 +60,7 @@ <argument index="0" name="action" type="String"> </argument> <description> - Remove an action from the [InputMap]. + Removes an action from the [code]InputMap[/code]. </description> </method> <method name="event_is_action" qualifiers="const"> @@ -69,7 +71,7 @@ <argument index="1" name="action" type="String"> </argument> <description> - Return whether the given event is part of an existing action. This method ignores keyboard modifiers if the given [InputEvent] is not pressed (for proper release detection). See [method action_has_event] if you don't want this behavior. + Returns [true] if the given event is part of an existing action. This method ignores keyboard modifiers if the given [InputEvent] is not pressed (for proper release detection). See [method action_has_event] if you don't want this behavior. </description> </method> <method name="get_action_list"> @@ -78,14 +80,14 @@ <argument index="0" name="action" type="String"> </argument> <description> - Return an array of InputEvents associated with a given action. + Returns an array of [InputEvent]s associated with a given action. </description> </method> <method name="get_actions"> <return type="Array"> </return> <description> - Return an array of all actions in the [InputMap]. + Returns an array of all actions in the [code]InputMap[/code]. </description> </method> <method name="has_action" qualifiers="const"> @@ -94,14 +96,14 @@ <argument index="0" name="action" type="String"> </argument> <description> - Whether this InputMap has a registered action with the given name. + Returns [code]true[/code] if the [code]InputMap[/code] has a registered action with the given name. </description> </method> <method name="load_from_globals"> <return type="void"> </return> <description> - Clear the [InputMap] and load it anew from [ProjectSettings]. + Clears all [InputEventAction] in the [code]InputMap[/code] and load it anew from [ProjectSettings]. </description> </method> </methods> diff --git a/doc/classes/ItemList.xml b/doc/classes/ItemList.xml index 3423b8fb9c..37c1db51f5 100644 --- a/doc/classes/ItemList.xml +++ b/doc/classes/ItemList.xml @@ -85,10 +85,10 @@ <description> </description> </method> - <method name="get_item_at_pos" qualifiers="const"> + <method name="get_item_at_position" qualifiers="const"> <return type="int"> </return> - <argument index="0" name="pos" type="Vector2"> + <argument index="0" name="position" type="Vector2"> </argument> <argument index="1" name="exact" type="bool" default="false"> </argument> @@ -217,7 +217,7 @@ <argument index="0" name="idx" type="int"> </argument> <description> - Returns whether the tooptip is enabled for specified item index. + Returns whether the tooltip is enabled for specified item index. </description> </method> <method name="is_same_column_width" qualifiers="const"> @@ -490,7 +490,7 @@ <signal name="item_rmb_selected"> <argument index="0" name="index" type="int"> </argument> - <argument index="1" name="atpos" type="Vector2"> + <argument index="1" name="at_position" type="Vector2"> </argument> <description> Fired when specified list item has been selected via right mouse clicking. @@ -511,7 +511,7 @@ <argument index="1" name="selected" type="bool"> </argument> <description> - Fired when a multiple selection is altered on a list allowing mutliple selection. + Fired when a multiple selection is altered on a list allowing multiple selection. </description> </signal> </signals> diff --git a/doc/classes/JSON.xml b/doc/classes/JSON.xml index a38b2f61cf..8bff140bb4 100644 --- a/doc/classes/JSON.xml +++ b/doc/classes/JSON.xml @@ -1,8 +1,10 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="JSON" inherits="Object" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Helper class for parsing JSON data. </brief_description> <description> + Helper class for parsing JSON data. </description> <tutorials> </tutorials> @@ -15,6 +17,7 @@ <argument index="0" name="json" type="String"> </argument> <description> + Parses a JSON encoded string and returns a [JSONParseResult] containing the result. </description> </method> <method name="print"> @@ -23,6 +26,7 @@ <argument index="0" name="value" type="Variant"> </argument> <description> + Converts a Variant var to JSON text and returns the result. Useful for serializing data to store or send over the network. </description> </method> </methods> diff --git a/doc/classes/JSONParseResult.xml b/doc/classes/JSONParseResult.xml index 6aeb614508..db9a681896 100644 --- a/doc/classes/JSONParseResult.xml +++ b/doc/classes/JSONParseResult.xml @@ -1,8 +1,10 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="JSONParseResult" inherits="Reference" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Data class wrapper for decoded JSON. </brief_description> <description> + Returned by [method JSON.parse], [JSONParseResult] contains decoded JSON or error information if JSON source not successfully parsed. You can check if JSON source was successfully parsed with [code]if json_result.error == 0[/code]. </description> <tutorials> </tutorials> @@ -68,12 +70,24 @@ </methods> <members> <member name="error" type="int" setter="set_error" getter="get_error" enum="Error"> + The error type if JSON source was not successfully parsed. See [@Global Scope]ERR_* constants. </member> <member name="error_line" type="int" setter="set_error_line" getter="get_error_line"> + The line number where the error occurred if JSON source was not successfully parsed. </member> <member name="error_string" type="String" setter="set_error_string" getter="get_error_string"> + The error message if JSON source was not successfully parsed. See [@Global Scope]ERR_* constants. </member> <member name="result" type="Variant" setter="set_result" getter="get_result"> + A [Variant] containing the parsed JSON. Use typeof() to check if it is what you expect. For example, if JSON source starts with braces [code]{}[/code] a [Dictionary] will be returned, if JSON source starts with array braces [code][][/code] an [Array] will be returned. + [i]Be aware that the JSON specification does not define integer or float types, but only a number type. Therefore, parsing a JSON text will convert all numerical values to float types.[/i] + [codeblock] + p = JSON.parse('["hello", "world", "!"]') + if typeof(p) == TYPE_ARRAY: + print(p[0]) # prints 'hello' + else: + print("unexpected results") + [/codeblock] </member> </members> <constants> diff --git a/doc/classes/Joint.xml b/doc/classes/Joint.xml index 2e7d24aac1..901f84fe5e 100644 --- a/doc/classes/Joint.xml +++ b/doc/classes/Joint.xml @@ -1,8 +1,10 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="Joint" inherits="Spatial" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Base class for all 3D joints </brief_description> <description> + All 3D joints link two nodes, has a priority, and can decide if the two bodies of the nodes should be able to collide with each other </description> <tutorials> </tutorials> @@ -68,12 +70,16 @@ </methods> <members> <member name="collision/exclude_nodes" type="bool" setter="set_exclude_nodes_from_collision" getter="get_exclude_nodes_from_collision"> + If [code]true[/code] the two bodies of the nodes are not able to collide with each other. </member> <member name="nodes/node_a" type="NodePath" setter="set_node_a" getter="get_node_a"> + The [Node], the first side of the Joint attaches to. </member> <member name="nodes/node_b" type="NodePath" setter="set_node_b" getter="get_node_b"> + The [Node], the second side of the Joint attaches to. </member> <member name="solver/priority" type="int" setter="set_solver_priority" getter="get_solver_priority"> + The order in wich the solver is executed compared to the other [Joints], the lower, the earlier. </member> </members> <constants> diff --git a/doc/classes/KinematicBody.xml b/doc/classes/KinematicBody.xml index 8f242c5187..86354548cd 100644 --- a/doc/classes/KinematicBody.xml +++ b/doc/classes/KinematicBody.xml @@ -6,7 +6,7 @@ <description> Kinematic bodies are special types of bodies that are meant to be user-controlled. They are not affected by physics at all (to other types of bodies, such a character or a rigid body, these are the same as a static body). They have however, two main uses: Simulated Motion: When these bodies are moved manually, either from code or from an AnimationPlayer (with process mode set to fixed), the physics will automatically compute an estimate of their linear and angular velocity. This makes them very useful for moving platforms or other AnimationPlayer-controlled objects (like a door, a bridge that opens, etc). - Kinematic Characters: KinematicBody also has an api for moving objects (the [method move] method) while performing collision tests. This makes them really useful to implement characters that collide against a world, but that don't require advanced physics. + Kinematic Characters: KinematicBody also has an API for moving objects (the [method move_and_collide] and [method move_and_slide] methods) while performing collision tests. This makes them really useful to implement characters that collide against a world, but that don't require advanced physics. </description> <tutorials> </tutorials> @@ -17,6 +17,7 @@ <return type="Vector3"> </return> <description> + Returns the velocity of the floor. Only updates when calling [method move_and_slide]. </description> </method> <method name="get_safe_margin" qualifiers="const"> @@ -31,30 +32,35 @@ <argument index="0" name="slide_idx" type="int"> </argument> <description> + Returns a [KinematicCollision], which contains information about a collision that occured during the last [method move_and_slide] call. Since the body can collide several times in a single call to [method move_and_slide], you must specify the index of the collision in the range 0 to ([method get_slide_count]()-1). </description> </method> <method name="get_slide_count" qualifiers="const"> <return type="int"> </return> <description> + Returns the number of times the body collided and changed direction during the last call to [method move_and_slide]. </description> </method> <method name="is_on_ceiling" qualifiers="const"> <return type="bool"> </return> <description> + Returns [code]true[/code] if the body is on the ceiling. Only updates when calling [method move_and_slide]. </description> </method> <method name="is_on_floor" qualifiers="const"> <return type="bool"> </return> <description> + Returns [code]true[/code] if the body is on the floor. Only updates when calling [method move_and_slide]. </description> </method> <method name="is_on_wall" qualifiers="const"> <return type="bool"> </return> <description> + Returns [code]true[/code] if the body is on a wall. Only updates when calling [method move_and_slide]. </description> </method> <method name="move_and_collide"> @@ -63,6 +69,7 @@ <argument index="0" name="rel_vec" type="Vector3"> </argument> <description> + Moves the body along the vector [code]rel_vec[/code]. The body will stop if it collides. Returns a [KinematicCollision], which contains information about the collision. </description> </method> <method name="move_and_slide"> @@ -79,6 +86,13 @@ <argument index="4" name="floor_max_angle" type="float" default="0.785398"> </argument> <description> + Moves the body along a vector. If the body collides with another, it will slide along the other body rather than stop immediately. If the other body is a [KinematicBody] or [RigidBody], it will also be affected by the motion of the other body. You can use this to make moving or rotating platforms, or to make nodes push other nodes. + [code]linear_velocity[/code] is a value in pixels per second. Unlike in for example [method move_and_collide], you should [i]not[/i] multiply it with [code]delta[/code] — this is done by the method. + [code]floor_normal[/code] is the up direction, used to determine what is a wall and what is a floor or a ceiling. If set to the default value of [code]Vector2(0, 0)[/code], everything is considered a wall. This is useful for topdown games. + If the body is standing on a slope and the horizontal speed (relative to the floor's speed) goes below [code]slope_stop_min_velocity[/code], the body will stop completely. This prevents the body from sliding down slopes when you include gravity in [code]linear_velocity[/code]. When set to lower values, the body will not be able to stand still on steep slopes. + If the body collides, it will change direction a maximum of [code]max_bounces[/code] times before it stops. + [code]floor_max_angle[/code] is the maximum angle (in radians) where a slope is still considered a floor (or a ceiling), rather than a wall. The default value equals 45 degrees. + Returns the movement that remained when the body stopped. To get more detailed information about collisions that occured, use [method get_slide_collision]. </description> </method> <method name="set_safe_margin"> @@ -97,11 +111,13 @@ <argument index="1" name="rel_vec" type="Vector3"> </argument> <description> + Checks for collisions without moving the body. Virtually sets the node's position, scale and rotation to that of the given [Transform], then tries to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/code] if a collision would occur. </description> </method> </methods> <members> <member name="collision/safe_margin" type="float" setter="set_safe_margin" getter="get_safe_margin"> + If the body is at least this close to another body, this body will consider them to be colliding. </member> </members> <constants> diff --git a/doc/classes/KinematicBody2D.xml b/doc/classes/KinematicBody2D.xml index dddae2c0fc..badc098494 100644 --- a/doc/classes/KinematicBody2D.xml +++ b/doc/classes/KinematicBody2D.xml @@ -6,7 +6,7 @@ <description> Kinematic bodies are special types of bodies that are meant to be user-controlled. They are not affected by physics at all (to other types of bodies, such a character or a rigid body, these are the same as a static body). They have however, two main uses: Simulated Motion: When these bodies are moved manually, either from code or from an AnimationPlayer (with process mode set to fixed), the physics will automatically compute an estimate of their linear and angular velocity. This makes them very useful for moving platforms or other AnimationPlayer-controlled objects (like a door, a bridge that opens, etc). - Kinematic Characters: KinematicBody2D also has an api for moving objects (the [method move] method) while performing collision tests. This makes them really useful to implement characters that collide against a world, but that don't require advanced physics. + Kinematic Characters: KinematicBody2D also has an API for moving objects (the [method move_and_collide] and [method move_and_slide] methods) while performing collision tests. This makes them really useful to implement characters that collide against a world, but that don't require advanced physics. </description> <tutorials> </tutorials> @@ -17,6 +17,7 @@ <return type="Vector2"> </return> <description> + Returns the velocity of the floor. Only updates when calling [method move_and_slide]. </description> </method> <method name="get_safe_margin" qualifiers="const"> @@ -31,30 +32,35 @@ <argument index="0" name="slide_idx" type="int"> </argument> <description> + Returns a [KinematicCollision2D], which contains information about a collision that occured during the last [method move_and_slide] call. Since the body can collide several times in a single call to [method move_and_slide], you must specify the index of the collision in the range 0 to ([method get_slide_count]()-1). </description> </method> <method name="get_slide_count" qualifiers="const"> <return type="int"> </return> <description> + Returns the number of times the body collided and changed direction during the last call to [method move_and_slide]. </description> </method> <method name="is_on_ceiling" qualifiers="const"> <return type="bool"> </return> <description> + Returns [code]true[/code] if the body is on the ceiling. Only updates when calling [method move_and_slide]. </description> </method> <method name="is_on_floor" qualifiers="const"> <return type="bool"> </return> <description> + Returns [code]true[/code] if the body is on the floor. Only updates when calling [method move_and_slide]. </description> </method> <method name="is_on_wall" qualifiers="const"> <return type="bool"> </return> <description> + Returns [code]true[/code] if the body is on a wall. Only updates when calling [method move_and_slide]. </description> </method> <method name="move_and_collide"> @@ -63,7 +69,7 @@ <argument index="0" name="rel_vec" type="Vector2"> </argument> <description> - Moves the body along the given vector. The body will stop if it collides. Returns a [KinematicCollision2D], which contains information about the colliding body. + Moves the body along the vector [code]rel_vec[/code]. The body will stop if it collides. Returns a [KinematicCollision2D], which contains information about the collision. </description> </method> <method name="move_and_slide"> @@ -80,6 +86,13 @@ <argument index="4" name="floor_max_angle" type="float" default="0.785398"> </argument> <description> + Moves the body along a vector. If the body collides with another, it will slide along the other body rather than stop immediately. If the other body is a [KinematicBody2D] or [RigidBody2D], it will also be affected by the motion of the other body. You can use this to make moving or rotating platforms, or to make nodes push other nodes. + [code]linear_velocity[/code] is a value in pixels per second. Unlike in for example [method move_and_collide], you should [i]not[/i] multiply it with [code]delta[/code] — this is done by the method. + [code]floor_normal[/code] is the up direction, used to determine what is a wall and what is a floor or a ceiling. If set to the default value of [code]Vector2(0, 0)[/code], everything is considered a wall. This is useful for topdown games. + If the body is standing on a slope and the horizontal speed (relative to the floor's speed) goes below [code]slope_stop_min_velocity[/code], the body will stop completely. This prevents the body from sliding down slopes when you include gravity in [code]linear_velocity[/code]. When set to lower values, the body will not be able to stand still on steep slopes. + If the body collides, it will change direction a maximum of [code]max_bounces[/code] times before it stops. + [code]floor_max_angle[/code] is the maximum angle (in radians) where a slope is still considered a floor (or a ceiling), rather than a wall. The default value equals 45 degrees. + Returns the movement that remained when the body stopped. To get more detailed information about collisions that occured, use [method get_slide_collision]. </description> </method> <method name="set_safe_margin"> @@ -98,12 +111,13 @@ <argument index="1" name="rel_vec" type="Vector2"> </argument> <description> - Returns true if there would be a collision if the body moved from the given point in the given direction. + Checks for collisions without moving the body. Virtually sets the node's position, scale and rotation to that of the given [Transform2D], then tries to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/code] if a collision would occur. </description> </method> </methods> <members> <member name="collision/safe_margin" type="float" setter="set_safe_margin" getter="get_safe_margin"> + If the body is at least this close to another body, this body will consider them to be colliding. </member> </members> <constants> diff --git a/doc/classes/Label.xml b/doc/classes/Label.xml index 8c5e69b407..1d1ce63a58 100644 --- a/doc/classes/Label.xml +++ b/doc/classes/Label.xml @@ -15,7 +15,7 @@ <return type="int" enum="Label.Align"> </return> <description> - Return the alignment mode (any of the ALIGN_* enumeration values). + Returns the alignment mode (any of the ALIGN_* enumeration values). </description> </method> <method name="get_line_count" qualifiers="const"> @@ -36,76 +36,77 @@ <return type="int"> </return> <description> - Return the the number of lines to skipped before displaying. + Returns the the number of lines to skip before displaying. </description> </method> <method name="get_max_lines_visible" qualifiers="const"> <return type="int"> </return> <description> - Return the restricted number of lines to display. Returns -1 if unrestricted. + Returns the maximum number of lines to display. Returns -1 if unrestricted. </description> </method> <method name="get_percent_visible" qualifiers="const"> <return type="float"> </return> <description> - Return the restricted number of characters to display (as a percentage of the total text). + Returns the maximum number of characters to display as a percentage of the total text. </description> </method> <method name="get_text" qualifiers="const"> <return type="String"> </return> <description> - Return the label text. Text can contain newlines. + Returns the label text. Text can contain newlines. </description> </method> <method name="get_total_character_count" qualifiers="const"> <return type="int"> </return> <description> - Return the total length of the text. + Returns the total length of the text. </description> </method> <method name="get_valign" qualifiers="const"> <return type="int" enum="Label.VAlign"> </return> <description> - Return the vertical alignment mode (any of the VALIGN_* enumeration values). + Returns the vertical alignment mode (any of the VALIGN_* enumeration values). </description> </method> <method name="get_visible_characters" qualifiers="const"> <return type="int"> </return> <description> - Return the restricted number of characters to display. Returns -1 if unrestricted. + Returns the restricted number of characters to display. Returns -1 if unrestricted. </description> </method> <method name="get_visible_line_count" qualifiers="const"> <return type="int"> </return> <description> + Returns the number of lines shown. Useful if the [code]Label[/code] 's height cannot currently display all lines. </description> </method> <method name="has_autowrap" qualifiers="const"> <return type="bool"> </return> <description> - Return the state of the [i]autowrap[/i] mode (see [method set_autowrap]). + Returns [code]true[/code] if [i]autowrap[/i] mode (see [method set_autowrap]). </description> </method> <method name="is_clipping_text" qualifiers="const"> <return type="bool"> </return> <description> - Return [code]true[/code] if text would be cut off if it is too wide. + Returns [code]true[/code] if text would be cut off if it is too wide. </description> </method> <method name="is_uppercase" qualifiers="const"> <return type="bool"> </return> <description> - Return [code]true[/code] if text is displayed in all capitals. + Returns [code]true[/code] if text is displayed in all capitals. </description> </method> <method name="set_align"> diff --git a/doc/classes/LargeTexture.xml b/doc/classes/LargeTexture.xml index e4cabdc556..f5416488f6 100644 --- a/doc/classes/LargeTexture.xml +++ b/doc/classes/LargeTexture.xml @@ -5,7 +5,7 @@ </brief_description> <description> A Texture capable of storing many smaller Textures with offsets. - You can dynamically add pieces(Textures) to this fLargeTexture] using different offsets. + You can dynamically add pieces([Texture]) to this [code]LargeTexture[/code] using different offsets. </description> <tutorials> </tutorials> @@ -20,21 +20,21 @@ <argument index="1" name="texture" type="Texture"> </argument> <description> - Add another [Texture] to this [LargeTexture], starting on offset "ofs". + Add another [Texture] to this [code]LargeTexture[/code], starting on offset "ofs". </description> </method> <method name="clear"> <return type="void"> </return> <description> - Clear the [LargeTexture]. + Clears the [code]LargeTexture[/code]. </description> </method> <method name="get_piece_count" qualifiers="const"> <return type="int"> </return> <description> - Return the number of pieces currently in this [LargeTexture]. + Returns the number of pieces currently in this [code]LargeTexture[/code]. </description> </method> <method name="get_piece_offset" qualifiers="const"> @@ -43,7 +43,7 @@ <argument index="0" name="idx" type="int"> </argument> <description> - Return the offset of the piece with index "idx". + Returns the offset of the piece with index "idx". </description> </method> <method name="get_piece_texture" qualifiers="const"> @@ -52,7 +52,7 @@ <argument index="0" name="idx" type="int"> </argument> <description> - Return the [Texture] of the piece with index "idx". + Returns the [Texture] of the piece with index "idx". </description> </method> <method name="set_piece_offset"> @@ -63,7 +63,7 @@ <argument index="1" name="ofs" type="Vector2"> </argument> <description> - Set the offset of the piece with index "idx" to "ofs". + Sets the offset of the piece with index "idx" to "ofs". </description> </method> <method name="set_piece_texture"> @@ -74,7 +74,7 @@ <argument index="1" name="texture" type="Texture"> </argument> <description> - Set the [Texture] of the piece with index "idx" to "ofs". + Sets the [Texture] of the piece with index "idx" to "ofs". </description> </method> <method name="set_size"> @@ -83,12 +83,16 @@ <argument index="0" name="size" type="Vector2"> </argument> <description> - Set the size of this [LargeTexture]. + Sets the size of this [code]LargeTexture[/code]. </description> </method> </methods> <members> <member name="_data" type="Array" setter="_set_data" getter="_get_data"> + Returns an [Array] with offsets and textures data of each added piece. Schema is [offsets1, texture1, offsets2, texture2, large_texture_size]. + [code]offsets[/code] : [Vector2] offsets of the texture piece. + [code]second[/code] : [StreamTexture] data of the texture piece. + [code]last entry[/code] : [Vector2] size of the entire large texture. </member> </members> <constants> diff --git a/doc/classes/Light2D.xml b/doc/classes/Light2D.xml index 7ce7cef7c1..05054e06fd 100644 --- a/doc/classes/Light2D.xml +++ b/doc/classes/Light2D.xml @@ -1,10 +1,10 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="Light2D" inherits="Node2D" category="Core" version="3.0.alpha.custom_build"> <brief_description> - Node that casts light in a 2D environment. + Casts light in a 2D environment. </brief_description> <description> - Node that casts light in a 2D environment. Light is defined by a (usually grayscale) texture, a color, an energy value, a mode (see constants), and various other parameters (range and shadows-related). Note that Light2D can be used as a mask. + Casts light in a 2D environment. Light is defined by a (usually grayscale) texture, a color, an energy value, a mode (see constants), and various other parameters (range and shadows-related). Note that Light2D can be used as a mask. </description> <tutorials> </tutorials> @@ -385,7 +385,7 @@ If [code]true[/code] the Light2D will cast shadows. Default value: [code]false[/code]. </member> <member name="shadow_filter" type="int" setter="set_shadow_filter" getter="get_shadow_filter" enum="Light2D.ShadowFilter"> - Shadow filter type. May be one of [code][None, PCF5, PCF9, PCF13][/code]. Default value: [code]None[/code]. + Shadow filter type. Use SHADOW_FILTER_* constants to set [code]shadow_filter[/code]. Default value: [code]None[/code]. </member> <member name="shadow_filter_smooth" type="float" setter="set_shadow_smooth" getter="get_shadow_smooth"> Smoothing value for shadows. @@ -408,7 +408,7 @@ Adds the value of pixels corresponding to the Light2D to the values of pixels under it. This is the common behaviour of a light. </constant> <constant name="MODE_SUB" value="1"> - Subtract the value of pixels corresponding to the Light2D to the values of pixels under it, resulting in inversed light effect. + Subtracts the value of pixels corresponding to the Light2D to the values of pixels under it, resulting in inversed light effect. </constant> <constant name="MODE_MIX" value="2"> Mix the value of pixels corresponding to the Light2D to the values of pixels under it by linear interpolation. @@ -417,16 +417,22 @@ The light texture of the Light2D is used as a mask, hiding or revealing parts of the screen underneath depending on the value of each pixel of the light (mask) texture. </constant> <constant name="SHADOW_FILTER_NONE" value="0"> + No filter applies to the shadow map. See [method shadow_filter]. </constant> <constant name="SHADOW_FILTER_PCF3" value="1"> + Percentage closer filtering (3 samples) applies to the shadow map. See [method shadow_filter]. </constant> <constant name="SHADOW_FILTER_PCF5" value="2"> + Percentage closer filtering (5 samples) applies to the shadow map. See [method shadow_filter]. </constant> <constant name="SHADOW_FILTER_PCF7" value="3"> + Percentage closer filtering (7 samples) applies to the shadow map. See [method shadow_filter]. </constant> <constant name="SHADOW_FILTER_PCF9" value="4"> + Percentage closer filtering (9 samples) applies to the shadow map. See [method shadow_filter]. </constant> <constant name="SHADOW_FILTER_PCF13" value="5"> + Percentage closer filtering (13 samples) applies to the shadow map. See [method shadow_filter]. </constant> </constants> </class> diff --git a/doc/classes/Line2D.xml b/doc/classes/Line2D.xml index 81fd255781..3cca256a5d 100644 --- a/doc/classes/Line2D.xml +++ b/doc/classes/Line2D.xml @@ -14,10 +14,10 @@ <method name="add_point"> <return type="void"> </return> - <argument index="0" name="pos" type="Vector2"> + <argument index="0" name="position" type="Vector2"> </argument> <description> - Add a point at the x/y position in the supplied [Vector2] + Add a point at the [code]position[/code]. Appends the point at the end of the line. </description> </method> <method name="get_begin_cap_mode" qualifiers="const"> @@ -54,14 +54,16 @@ <return type="int"> </return> <description> + Returns the Line2D's amount of points. </description> </method> - <method name="get_point_pos" qualifiers="const"> + <method name="get_point_position" qualifiers="const"> <return type="Vector2"> </return> <argument index="0" name="i" type="int"> </argument> <description> + Returns point [code]i[code]'s position. </description> </method> <method name="get_points" qualifiers="const"> @@ -106,7 +108,7 @@ <argument index="0" name="i" type="int"> </argument> <description> - Remove the point at index 'i' from the line. + Remove the point at index [code]i[/code] from the line. </description> </method> <method name="set_begin_cap_mode"> @@ -149,14 +151,15 @@ <description> </description> </method> - <method name="set_point_pos"> + <method name="set_point_position"> <return type="void"> </return> <argument index="0" name="i" type="int"> </argument> - <argument index="1" name="pos" type="Vector2"> + <argument index="1" name="position" type="Vector2"> </argument> <description> + Overwites the position in point [code]i[/code] with the supplied [code]position[/code]. </description> </method> <method name="set_points"> @@ -210,44 +213,63 @@ </methods> <members> <member name="begin_cap_mode" type="int" setter="set_begin_cap_mode" getter="get_begin_cap_mode" enum="Line2D.LineCapMode"> + Controls the style of the line's first point. Use [code]LINE_CAP_*[/code] constants. Default value: [code]LINE_CAP_NONE[/code]. </member> <member name="default_color" type="Color" setter="set_default_color" getter="get_default_color"> + The line's color. Will not be used if a gradient is set. </member> <member name="end_cap_mode" type="int" setter="set_end_cap_mode" getter="get_end_cap_mode" enum="Line2D.LineCapMode"> + Controls the style of the line's last point. Use [code]LINE_CAP_*[/code] constants. Default value: [code]LINE_CAP_NONE[/code]. </member> <member name="gradient" type="Gradient" setter="set_gradient" getter="get_gradient"> + The gradient is drawn through the whole line from start to finish. The default color will not be used if a gradient is set. </member> <member name="joint_mode" type="int" setter="set_joint_mode" getter="get_joint_mode" enum="Line2D.LineJointMode"> + The style for the points inbetween the start and the end. </member> <member name="points" type="PoolVector2Array" setter="set_points" getter="get_points"> + The points that form the lines. The line is drawn between every point set in this array. </member> <member name="round_precision" type="int" setter="set_round_precision" getter="get_round_precision"> + The smoothness of the rounded joints and caps. This is only used if a cap or joint is set as round. </member> <member name="sharp_limit" type="float" setter="set_sharp_limit" getter="get_sharp_limit"> + The direction difference in radians between vector points. This value is only used if [code]joint mode[/code] is set to [code]LINE_JOINT_SHARP[/code]. </member> <member name="texture" type="Texture" setter="set_texture" getter="get_texture"> + The texture used for the line's texture. Uses [code]texture_mode[/code] for drawing style. </member> <member name="texture_mode" type="int" setter="set_texture_mode" getter="get_texture_mode" enum="Line2D.LineTextureMode"> + The style to render the [code]texture[/code] on the line. Use [code]LINE_TEXTURE_*[/code] constants. Default value: [code]LINE_TEXTURE_NONE[/code]. </member> <member name="width" type="float" setter="set_width" getter="get_width"> + The line's width. </member> </members> <constants> <constant name="LINE_JOINT_SHARP" value="0"> + The line's joints will be pointy. If [code]sharp_limit[/code] is greater than the rotation of a joint, it becomes a bevel joint instead. </constant> <constant name="LINE_JOINT_BEVEL" value="1"> + The line's joints will be bevelled/chamfered. </constant> <constant name="LINE_JOINT_ROUND" value="2"> + The line's joints will be rounded. </constant> <constant name="LINE_CAP_NONE" value="0"> + Don't have a line cap. </constant> <constant name="LINE_CAP_BOX" value="1"> + Draws the line cap as a box. </constant> <constant name="LINE_CAP_ROUND" value="2"> + Draws the line cap as a circle. </constant> <constant name="LINE_TEXTURE_NONE" value="0"> + Takes the left pixels of the texture and renders it over the whole line. </constant> <constant name="LINE_TEXTURE_TILE" value="1"> + Tiles the texture over the line. The texture need to be imported with Repeat Enabled for it to work properly. </constant> </constants> </class> diff --git a/doc/classes/LineEdit.xml b/doc/classes/LineEdit.xml index 0577e1ba37..e6c26e3248 100644 --- a/doc/classes/LineEdit.xml +++ b/doc/classes/LineEdit.xml @@ -66,7 +66,7 @@ Return the align mode of the [LineEdit]. </description> </method> - <method name="get_cursor_pos" qualifiers="const"> + <method name="get_cursor_position" qualifiers="const"> <return type="int"> </return> <description> @@ -169,10 +169,10 @@ Set text alignment of the [LineEdit]. </description> </method> - <method name="set_cursor_pos"> + <method name="set_cursor_position"> <return type="void"> </return> - <argument index="0" name="pos" type="int"> + <argument index="0" name="position" type="int"> </argument> <description> Set the cursor position inside the [LineEdit], causing it to scroll if needed. diff --git a/doc/classes/NinePatchRect.xml b/doc/classes/NinePatchRect.xml index 6829b36e14..c74f3c5a68 100644 --- a/doc/classes/NinePatchRect.xml +++ b/doc/classes/NinePatchRect.xml @@ -111,7 +111,7 @@ If [code]true[/code], draw the panel's center. Else, only draw the 9-slice's borders. Default value: [code]true[/code] </member> <member name="patch_margin_bottom" type="int" setter="set_patch_margin" getter="get_patch_margin"> - The height of the 9-slice's bottom row. A margin of 16 means the 9-slice's bottom corners and side will have a height of 16 pixels. You can set all 4 margin values indivually to create panels with non-uniform borders. + The height of the 9-slice's bottom row. A margin of 16 means the 9-slice's bottom corners and side will have a height of 16 pixels. You can set all 4 margin values individually to create panels with non-uniform borders. </member> <member name="patch_margin_left" type="int" setter="set_patch_margin" getter="get_patch_margin"> The height of the 9-slice's left column. diff --git a/doc/classes/Node.xml b/doc/classes/Node.xml index 5a99263f1e..a484556e69 100644 --- a/doc/classes/Node.xml +++ b/doc/classes/Node.xml @@ -9,7 +9,7 @@ [b]Scene tree:[/b] The [SceneTree] contains the active tree of nodes. When a node is added to the scene tree, it receives the NOTIFICATION_ENTER_TREE notification and its [method _enter_tree] callback is triggered. Children nodes are always added [i]after[/i] their parent node, i.e. the [method _enter_tree] callback of a parent node will be triggered before its child's. Once all nodes have been added in the scene tree, they receive the NOTIFICATION_READY notification and their respective [method _ready] callbacks are triggered. For groups of nodes, the [method _ready] callback is called in reverse order, from the children up to the parent nodes. It means that when adding a scene to the scene tree, the following order will be used for the callbacks: [method _enter_tree] of the parent, [method _enter_tree] of the children, [method _ready] of the children and finally [method _ready] of the parent (and that recursively for the whole scene). - [b]Processing:[/b] Nodes can be set to the "process" state, so that they receive a callback on each frame requesting them to process (do something). Normal processing (callback [method _process], toggled with [method set_process]) happens as fast as possible and is dependent on the frame rate, so the processing time [i]delta[/i] is variable. Fixed processing (callback [method _fixed_process], toggled with [method set_fixed_process]) happens a fixed amount of times per second (by default 60) and is useful to link itself to the physics. + [b]Processing:[/b] Nodes can be set to the "process" state, so that they receive a callback on each frame requesting them to process (do something). Normal processing (callback [method _process], toggled with [method set_process]) happens as fast as possible and is dependent on the frame rate, so the processing time [i]delta[/i] is variable. Physics processing (callback [method _physics_process], toggled with [method set_physics_process]) happens a fixed amount of times per second (by default 60) and is useful to link itself to the physics. Nodes can also process input events. When set, the [method _input] function will be called for each input that the program receives. In many cases, this can be overkill (unless used for simple projects), and the [method _unhandled_input] function might be preferred; it is called when the input event was not handled by anyone else (typically, GUI [Control] nodes), ensuring that the node only receives the events that were meant for it. To keep track of the scene hierarchy (especially when instancing scenes into other scenes), an "owner" can be set for the node with [method set_owner]. This keeps track of who instanced what. This is mostly useful when writing editors and tools, though. Finally, when a node is freed with [method free] or [method queue_free], it will also free all its children. @@ -36,24 +36,24 @@ Corresponds to the NOTIFICATION_EXIT_TREE notification in [method Object._notification]. </description> </method> - <method name="_fixed_process" qualifiers="virtual"> + <method name="_input" qualifiers="virtual"> <return type="void"> </return> - <argument index="0" name="delta" type="float"> + <argument index="0" name="event" type="InputEvent"> </argument> <description> - Called during the fixed processing step of the main loop. Fixed processing means that the frame rate is synced to the physics, i.e. the [code]delta[/code] variable should be constant. - It is only called if fixed processing has been enabled with [method set_fixed_process]. - Corresponds to the NOTIFICATION_FIXED_PROCESS notification in [method Object._notification]. + Called when there is a change to input devices. Propagated through the node tree until a Node consumes it. </description> </method> - <method name="_input" qualifiers="virtual"> + <method name="_physics_process" qualifiers="virtual"> <return type="void"> </return> - <argument index="0" name="event" type="InputEvent"> + <argument index="0" name="delta" type="float"> </argument> <description> - Called when there is a change to input devices. Propagated through the node tree until a Node consumes it. + Called during the physics processing step of the main loop. Physics processing means that the frame rate is synced to the physics, i.e. the [code]delta[/code] variable should be constant. + It is only called if physics processing has been enabled with [method set_physics_process]. + Corresponds to the NOTIFICATION_PHYSICS_PROCESS notification in [method Object._notification]. </description> </method> <method name="_process" qualifiers="virtual"> @@ -187,13 +187,6 @@ Return a filename that may be contained by the node. When a scene is instanced from a file, it topmost node contains the filename from where it was loaded (see [method set_filename]). </description> </method> - <method name="get_fixed_process_delta_time" qualifiers="const"> - <return type="float"> - </return> - <description> - Return the time elapsed since the last fixed frame (see [method _fixed_process]). This is always the same in fixed processing unless the frames per second is changed in [OS]. - </description> - </method> <method name="get_groups" qualifiers="const"> <return type="Array"> </return> @@ -294,6 +287,13 @@ Return the pause mode (PAUSE_MODE_*) of this Node. </description> </method> + <method name="get_physics_process_delta_time" qualifiers="const"> + <return type="float"> + </return> + <description> + Return the time elapsed since the last physics-bound frame (see [method _physics_process]). This is always a constant value in physics processing unless the frames per second is changed in [OS]. + </description> + </method> <method name="get_position_in_parent" qualifiers="const"> <return type="int"> </return> @@ -359,19 +359,6 @@ <description> </description> </method> - <method name="is_fixed_processing" qualifiers="const"> - <return type="bool"> - </return> - <description> - Return true if fixed processing is enabled (see [method set_fixed_process]). - </description> - </method> - <method name="is_fixed_processing_internal" qualifiers="const"> - <return type="bool"> - </return> - <description> - </description> - </method> <method name="is_greater_than" qualifiers="const"> <return type="bool"> </return> @@ -403,6 +390,19 @@ <description> </description> </method> + <method name="is_physics_processing" qualifiers="const"> + <return type="bool"> + </return> + <description> + Return true if physics processing is enabled (see [method set_physics_process]). + </description> + </method> + <method name="is_physics_processing_internal" qualifiers="const"> + <return type="bool"> + </return> + <description> + </description> + </method> <method name="is_processing" qualifiers="const"> <return type="bool"> </return> @@ -441,7 +441,7 @@ </return> <argument index="0" name="child_node" type="Node"> </argument> - <argument index="1" name="to_pos" type="int"> + <argument index="1" name="to_position" type="int"> </argument> <description> Move a child node to a different position (order) amongst the other children. Since calls, signals, etc are performed by tree order, changing the order of children nodes may be useful. @@ -666,23 +666,6 @@ A node can contain a filename. This filename should not be changed by the user, unless writing editors and tools. When a scene is instanced from a file, it topmost node contains the filename from where it was loaded. </description> </method> - <method name="set_fixed_process"> - <return type="void"> - </return> - <argument index="0" name="enable" type="bool"> - </argument> - <description> - Enables or disables node fixed framerate processing. When a node is being processed, it will receive a NOTIFICATION_PROCESS at a fixed (usually 60 fps, check [OS] to change that) interval (and the [method _fixed_process] callback will be called if exists). It is common to check how much time was elapsed since the previous frame by calling [method get_fixed_process_delta_time]. - </description> - </method> - <method name="set_fixed_process_internal"> - <return type="void"> - </return> - <argument index="0" name="enable" type="bool"> - </argument> - <description> - </description> - </method> <method name="set_name"> <return type="void"> </return> @@ -720,6 +703,23 @@ Set pause mode (PAUSE_MODE_*) of this Node. </description> </method> + <method name="set_physics_process"> + <return type="void"> + </return> + <argument index="0" name="enable" type="bool"> + </argument> + <description> + Enables or disables the node's physics (alias fixed framerate) processing. When a node is being processed, it will receive a NOTIFICATION_PHYSICS_PROCESS at a fixed (usually 60 fps, check [OS] to change that) interval (and the [method _physics_process] callback will be called if exists). It is common to check how much time was elapsed since the previous frame by calling [method get_physics_process_delta_time]. + </description> + </method> + <method name="set_physics_process_internal"> + <return type="void"> + </return> + <argument index="0" name="enable" type="bool"> + </argument> + <description> + </description> + </method> <method name="set_process"> <return type="void"> </return> @@ -806,7 +806,8 @@ </constant> <constant name="NOTIFICATION_READY" value="13" enum=""> </constant> - <constant name="NOTIFICATION_FIXED_PROCESS" value="16" enum=""> + <constant name="NOTIFICATION_PHYSICS_PROCESS" value="16" enum=""> + Notification received every frame when the physics process flag is set (see [method set_physics_process]). </constant> <constant name="NOTIFICATION_PROCESS" value="17" enum=""> Notification received every frame when the process flag is set (see [method set_process]). @@ -833,7 +834,7 @@ </constant> <constant name="NOTIFICATION_INTERNAL_PROCESS" value="25" enum=""> </constant> - <constant name="NOTIFICATION_INTERNAL_FIXED_PROCESS" value="26" enum=""> + <constant name="NOTIFICATION_INTERNAL_PHYSICS_PROCESS" value="26" enum=""> </constant> <constant name="RPC_MODE_DISABLED" value="0"> </constant> diff --git a/doc/classes/Node2D.xml b/doc/classes/Node2D.xml index 2ba312b301..084bee92df 100644 --- a/doc/classes/Node2D.xml +++ b/doc/classes/Node2D.xml @@ -169,7 +169,7 @@ <method name="set_global_position"> <return type="void"> </return> - <argument index="0" name="pos" type="Vector2"> + <argument index="0" name="position" type="Vector2"> </argument> <description> Set the node's global position. @@ -214,7 +214,7 @@ <method name="set_position"> <return type="void"> </return> - <argument index="0" name="pos" type="Vector2"> + <argument index="0" name="position" type="Vector2"> </argument> <description> Set the node's position. diff --git a/doc/classes/OS.xml b/doc/classes/OS.xml index 65200c4769..73b424eb12 100644 --- a/doc/classes/OS.xml +++ b/doc/classes/OS.xml @@ -26,14 +26,14 @@ <return type="bool"> </return> <description> - Return true if the host OS allows drawing. + Returns [code]true[/code] if the host OS allows drawing. </description> </method> <method name="can_use_threads" qualifiers="const"> <return type="bool"> </return> <description> - Returns if the current host platform is using multiple threads. + Returns [code]true[/code] if the current host platform is using multiple threads. </description> </method> <method name="delay_msec" qualifiers="const"> @@ -117,7 +117,7 @@ <return type="PoolStringArray"> </return> <description> - Return the commandline passed to the engine. + Returns the command line arguments passed to the engine. </description> </method> <method name="get_current_screen" qualifiers="const"> @@ -131,7 +131,7 @@ <return type="String"> </return> <description> - Return the absolute directory path of user data path([user://]). + Returns the absolute directory path of user data path([user://]). </description> </method> <method name="get_date" qualifiers="const"> @@ -166,7 +166,7 @@ <return type="int"> </return> <description> - Return the total amount of dynamic memory used (only works in debug). + Returns the total amount of dynamic memory used (only works in debug). </description> </method> <method name="get_environment" qualifiers="const"> @@ -175,14 +175,14 @@ <argument index="0" name="environment" type="String"> </argument> <description> - Return an environment variable. + Returns an environment variable. </description> </method> <method name="get_executable_path" qualifiers="const"> <return type="String"> </return> <description> - Return the path to the current engine executable. + Returns the path to the current engine executable. </description> </method> <method name="get_exit_code" qualifiers="const"> @@ -203,7 +203,7 @@ <return type="String"> </return> <description> - Return the host OS locale. + Returns the host OS locale. </description> </method> <method name="get_model_name" qualifiers="const"> @@ -217,25 +217,28 @@ <return type="String"> </return> <description> - Return the name of the host OS. Possible values are: "Android", "Haiku", "iOS", "HTML5", "OSX", "Server", "Windows", "UWP", "X11". + Returns the name of the host OS. Possible values are: "Android", "Haiku", "iOS", "HTML5", "OSX", "Server", "Windows", "UWP", "X11". </description> </method> <method name="get_power_percent_left"> <return type="int"> </return> <description> + Returns the amount of battery left in the device as a percentage. </description> </method> <method name="get_power_seconds_left"> <return type="int"> </return> <description> + Returns the time in seconds before the device runs out of battery. </description> </method> <method name="get_power_state"> <return type="int" enum="OS.PowerState"> </return> <description> + Returns the current state of the device regarding battery and power. See [code]POWERSTATE_*[/code] constants. </description> </method> <method name="get_process_id" qualifiers="const"> @@ -265,7 +268,7 @@ <return type="int"> </return> <description> - Returns the number of displays attached to the host machine + Returns the number of displays attached to the host machine. </description> </method> <method name="get_screen_dpi" qualifiers="const"> @@ -298,6 +301,7 @@ <argument index="0" name="screen" type="int" default="-1"> </argument> <description> + Returns the position of the specified screen by index. If no screen index is provided, the current screen will be used. </description> </method> <method name="get_screen_size" qualifiers="const"> @@ -319,13 +323,14 @@ <return type="int"> </return> <description> - Return the max amount of static memory used (only works in debug). + Returns the max amount of static memory used (only works in debug). </description> </method> <method name="get_static_memory_usage" qualifiers="const"> <return type="int"> </return> <description> + Returns the amount of static memory being used by the program in bytes. </description> </method> <method name="get_system_dir" qualifiers="const"> @@ -334,19 +339,21 @@ <argument index="0" name="dir" type="int" enum="OS.SystemDir"> </argument> <description> + Returns the actual path to commonly used folders across different platforms. Available locations are specified in [OS.SystemDir]. </description> </method> <method name="get_system_time_secs" qualifiers="const"> <return type="int"> </return> <description> + Returns the epoch time of the operating system in seconds. </description> </method> <method name="get_ticks_msec" qualifiers="const"> <return type="int"> </return> <description> - Return the amount of time passed in milliseconds since the engine started. + Returns the amount of time passed in milliseconds since the engine started. </description> </method> <method name="get_time" qualifiers="const"> @@ -355,19 +362,21 @@ <argument index="0" name="utc" type="bool" default="false"> </argument> <description> - Returns current time as a dictionary of keys: hour, minute, second + Returns current time as a dictionary of keys: hour, minute, second. </description> </method> <method name="get_time_zone_info" qualifiers="const"> <return type="Dictionary"> </return> <description> + Returns the current time zone as a dictionary with the keys: bias and name. </description> </method> <method name="get_unique_id" qualifiers="const"> <return type="String"> </return> <description> + Returns a unique string. </description> </method> <method name="get_unix_time" qualifiers="const"> @@ -388,6 +397,12 @@ You can pass the output from [method get_datetime_from_unix_time] directly into this function. Daylight savings time (dst), if present, is ignored. </description> </method> + <method name="get_virtual_keyboard_height"> + <return type="int"> + </return> + <description> + </description> + </method> <method name="get_window_position" qualifiers="const"> <return type="Vector2"> </return> @@ -408,20 +423,29 @@ <argument index="0" name="environment" type="String"> </argument> <description> - Return true if an environment variable exists. + Returns [code]true[/code] if an environment variable exists. + </description> + </method> + <method name="has_feature" qualifiers="const"> + <return type="bool"> + </return> + <argument index="0" name="tag_name" type="String"> + </argument> + <description> </description> </method> <method name="has_touchscreen_ui_hint" qualifiers="const"> <return type="bool"> </return> <description> + Returns [code]true[/code] if the device has a touchscreen or emulates one. </description> </method> <method name="has_virtual_keyboard" qualifiers="const"> <return type="bool"> </return> <description> - Returns true if the platform has a virtual keyboard, false otherwise. + Returns [code]true[/code] if the platform has a virtual keyboard, [code]false[/code] otherwise. </description> </method> <method name="hide_virtual_keyboard"> @@ -435,26 +459,30 @@ <return type="bool"> </return> <description> + Returns [code]true[/code] if the build is a debug build. + Returns [code]true[/code] when running in the editor. + Returns [code]false[/code] if the build is a release build. </description> </method> <method name="is_in_low_processor_usage_mode" qualifiers="const"> <return type="bool"> </return> <description> - Return true if low cpu usage mode is enabled. + Returns [code]true[/code] if low cpu usage mode is enabled. </description> </method> <method name="is_keep_screen_on" qualifiers="const"> <return type="bool"> </return> <description> - Returns whether the screen is being kept on or not. + Returns [code]true[/code] if the screen is being kept on. </description> </method> <method name="is_ok_left_and_cancel_right" qualifiers="const"> <return type="bool"> </return> <description> + Returns [code]true[/code] if the "Okay" button should appear on the left and "Cancel" on the right. </description> </method> <method name="is_scancode_unicode" qualifiers="const"> @@ -463,47 +491,56 @@ <argument index="0" name="code" type="int"> </argument> <description> + Returns [code]true[/code] if the input code has a unicode character. </description> </method> <method name="is_stdout_verbose" qualifiers="const"> <return type="bool"> </return> <description> - Return true if the engine was executed with -v (verbose stdout). + Returns [code]true[/code] if the engine was executed with -v (verbose stdout). + </description> + </method> + <method name="is_userfs_persistent" qualifiers="const"> + <return type="bool"> + </return> + <description> + If [code]true[/code], the [code]user://[/code] file system is persistent, so that its state is the same after a player quits and starts the game again. Relevant to the HTML5 platform, where this persistence may be unavailable. </description> </method> <method name="is_vsync_enabled" qualifiers="const"> <return type="bool"> </return> <description> + Returns [code]true[/code] if synchronizing the framerate to the monitor's refresh rate is enabled. </description> </method> <method name="is_window_fullscreen" qualifiers="const"> <return type="bool"> </return> <description> - Returns whether the window is in fullscreen mode or not. + Returns [code]true[/code] if the window is in fullscreen mode. </description> </method> <method name="is_window_maximized" qualifiers="const"> <return type="bool"> </return> <description> - Return true if the window is maximized. + Returns [code]true[/code] if the window is maximized. </description> </method> <method name="is_window_minimized" qualifiers="const"> <return type="bool"> </return> <description> - Return true if the window is minimized. + Returns [code]true[/code] if the window is minimized. </description> </method> <method name="is_window_resizable" qualifiers="const"> <return type="bool"> </return> <description> - Returns whether the window is resizable or not. + Returns [code]true[/code] if the window is resizable. </description> </method> <method name="kill"> @@ -519,12 +556,14 @@ <return type="bool"> </return> <description> + Returns [code]true[/code] if native video is playing. </description> </method> <method name="native_video_pause"> <return type="void"> </return> <description> + Pauses native video playback. </description> </method> <method name="native_video_play"> @@ -539,18 +578,21 @@ <argument index="3" name="subtitle_track" type="String"> </argument> <description> + Plays native video from the specified path, at the given volume and with audio and subtitle tracks. </description> </method> <method name="native_video_stop"> <return type="void"> </return> <description> + Stops native video playback. </description> </method> <method name="native_video_unpause"> <return type="void"> </return> <description> + Resumes native video playback. </description> </method> <method name="print_all_resources"> @@ -559,12 +601,14 @@ <argument index="0" name="tofile" type="String" default=""""> </argument> <description> + Shows all resources in the game. Optionally the list can be written to a file. </description> </method> <method name="print_all_textures_by_size"> <return type="void"> </return> <description> + Shows the list of loaded textures sorted by size in memory. </description> </method> <method name="print_resources_by_type"> @@ -573,6 +617,7 @@ <argument index="0" name="types" type="PoolStringArray"> </argument> <description> + Shows the number of resources loaded by the game of the given types. </description> </method> <method name="print_resources_in_use"> @@ -581,6 +626,7 @@ <argument index="0" name="short" type="bool" default="false"> </argument> <description> + Shows all resources currently used by the game. </description> </method> <method name="request_attention"> @@ -596,6 +642,7 @@ <argument index="0" name="borderless" type="bool"> </argument> <description> + Removes the window frame. </description> </method> <method name="set_clipboard"> @@ -604,7 +651,7 @@ <argument index="0" name="clipboard" type="String"> </argument> <description> - Set clipboard to the OS. + Sets clipboard to the OS. </description> </method> <method name="set_current_screen"> @@ -613,6 +660,7 @@ <argument index="0" name="screen" type="int"> </argument> <description> + Sets the current screen by index. </description> </method> <method name="set_exit_code"> @@ -621,6 +669,7 @@ <argument index="0" name="code" type="int"> </argument> <description> + Sets the exit code that will be returned by the game. </description> </method> <method name="set_icon"> @@ -629,6 +678,7 @@ <argument index="0" name="icon" type="Image"> </argument> <description> + Sets the game's icon. </description> </method> <method name="set_ime_position"> @@ -645,7 +695,7 @@ <argument index="0" name="enabled" type="bool"> </argument> <description> - Set keep screen on if true, or goes to sleep by device setting if false. (for Android/iOS) + Sets keep screen on if true, or goes to sleep by device setting if false. (for Android/iOS) </description> </method> <method name="set_low_processor_usage_mode"> @@ -654,7 +704,7 @@ <argument index="0" name="enable" type="bool"> </argument> <description> - Set to true to enable the low cpu usage mode. In this mode, the screen only redraws when there are changes, and a considerable sleep time is inserted between frames. This way, editors using the engine UI only use very little cpu. + Set to [code]true[/code] to enable the low cpu usage mode. In this mode, the screen only redraws when there are changes, and a considerable sleep time is inserted between frames. Use this in tool mode to reduce CPU usage. </description> </method> <method name="set_screen_orientation"> @@ -672,6 +722,7 @@ <argument index="0" name="name" type="String"> </argument> <description> + Sets the name of the current thread. </description> </method> <method name="set_use_file_access_save_and_swap"> @@ -680,6 +731,7 @@ <argument index="0" name="enabled" type="bool"> </argument> <description> + Enables backup saves if [code]enabled[/code] is [code]true[/code]. </description> </method> <method name="set_use_vsync"> @@ -688,6 +740,7 @@ <argument index="0" name="enable" type="bool"> </argument> <description> + If [code]true[/code] the framerate will synchronize to the monitor's refresh rate. </description> </method> <method name="set_window_fullscreen"> @@ -705,7 +758,7 @@ <argument index="0" name="enabled" type="bool"> </argument> <description> - Set the window size to maximized. + Set [code]true[/code] to maximize the window. </description> </method> <method name="set_window_minimized"> @@ -714,7 +767,7 @@ <argument index="0" name="enabled" type="bool"> </argument> <description> - Set whether the window is minimized. + Set [code]true[/code] to minimize the window. </description> </method> <method name="set_window_position"> @@ -732,7 +785,7 @@ <argument index="0" name="enabled" type="bool"> </argument> <description> - Set the window resizable state, if the window is not resizable it will preserve the dimensions specified in the project settings. + Sets the window resizable state, if the window is not resizable it will preserve the dimensions specified in the project settings. </description> </method> <method name="set_window_size"> @@ -759,6 +812,9 @@ <argument index="0" name="uri" type="String"> </argument> <description> + Requests the OS to open a resource with the most appropriate program. For example. + [code]OS.shell_open("C:\\Users\name\Downloads")[/code] on Windows opens the file explorer at the downloads folders of the user. + [code]OS.shell_open("http://godotengine.org")[/code] opens the default web browser on the official Godot website. </description> </method> <method name="show_virtual_keyboard"> diff --git a/doc/classes/Object.xml b/doc/classes/Object.xml index 67421487f1..d30ebfaef8 100644 --- a/doc/classes/Object.xml +++ b/doc/classes/Object.xml @@ -6,7 +6,7 @@ <description> Base class for all non built-in types. Everything not a built-in type starts the inheritance chain from this class. Objects do not manage memory, if inheriting from one the object will most likely have to be deleted manually (call the [method free] function from the script or delete from C++). - Some derivates add memory management, such as [Reference] (which keeps a reference count and deletes itself automatically when no longer referenced) and [Node], which deletes the children tree when deleted. + Some derivatives add memory management, such as [Reference] (which keeps a reference count and deletes itself automatically when no longer referenced) and [Node], which deletes the children tree when deleted. Objects export properties, which are mainly useful for storage and editing, but not really so much in programming. Properties are exported in [method _get_property_list] and handled in [method _get] and [method _set]. However, scripting languages and C++ have simpler means to export them. Objects also receive notifications ([method _notification]). Notifications are a simple way to notify the object about simple events, so they can all be handled together. </description> @@ -165,7 +165,7 @@ <return type="Array"> </return> <description> - Returns an [Array] of dictionaries with informations about signals that are connected to this object. + Returns an [Array] of dictionaries with information about signals that are connected to this object. Inside each [Dictionary] there are 3 fields: - "source" is a reference to signal emitter. - "signal_name" is name of connected signal. diff --git a/doc/classes/PacketPeerUDP.xml b/doc/classes/PacketPeerUDP.xml index 9bff0c9b5e..0453c16537 100644 --- a/doc/classes/PacketPeerUDP.xml +++ b/doc/classes/PacketPeerUDP.xml @@ -4,7 +4,7 @@ UDP packet peer. </brief_description> <description> - UDP packet peer. Can be used to send raw UDP packets as well as [Variant]\ s. + UDP packet peer. Can be used to send raw UDP packets as well as [Variant]s. </description> <tutorials> </tutorials> diff --git a/doc/classes/Particles.xml b/doc/classes/Particles.xml index e17e60f2bc..1e89d2194c 100644 --- a/doc/classes/Particles.xml +++ b/doc/classes/Particles.xml @@ -1,8 +1,11 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="Particles" inherits="GeometryInstance" category="Core" version="3.0.alpha.custom_build"> <brief_description> + 3D particle emitter. </brief_description> <description> + 3D particle node used to create a variety of particle systems and effects. [code]Particles[/code] features an emitter that generates some number of particles at a given rate. + Use the [code]process_material[/code] property to add a [ParticlesMaterial] to configure particle appearance and behavior. Alternatively, you can add a [ShaderMaterial] which will be applied to all particles. </description> <tutorials> </tutorials> @@ -252,8 +255,10 @@ </methods> <members> <member name="amount" type="int" setter="set_amount" getter="get_amount"> + Number of particles to emit. </member> <member name="draw_order" type="int" setter="set_draw_order" getter="get_draw_order" enum="Particles.DrawOrder"> + Particle draw order. Uses [code]DRAW_ORDER_*[/code] values. Default value: [code]DRAW_ORDER_INDEX[/code]. </member> <member name="draw_pass_1" type="Mesh" setter="set_draw_pass_mesh" getter="get_draw_pass_mesh"> </member> @@ -266,36 +271,47 @@ <member name="draw_passes" type="int" setter="set_draw_passes" getter="get_draw_passes"> </member> <member name="emitting" type="bool" setter="set_emitting" getter="is_emitting"> + If [code]true[/code] particles are being emitted. Default value: [code]true[/code]. </member> <member name="explosiveness" type="float" setter="set_explosiveness_ratio" getter="get_explosiveness_ratio"> + Time ratio between each emission. If [code]0[/code] particles are emitted continuously. If [code]1[/code] all particles are emitted simultaneously. Default value: [code]0[/code]. </member> <member name="fixed_fps" type="int" setter="set_fixed_fps" getter="get_fixed_fps"> </member> <member name="fract_delta" type="bool" setter="set_fractional_delta" getter="get_fractional_delta"> </member> <member name="lifetime" type="float" setter="set_lifetime" getter="get_lifetime"> + Amount of time each particle will exist. Default value: [code]1[/code]. </member> <member name="local_coords" type="bool" setter="set_use_local_coordinates" getter="get_use_local_coordinates"> + If [code]true[/code] particles use the parent node's coordinate space. If [code]false[/code] they use global coordinates. Default value: [code]true[/code]. </member> <member name="one_shot" type="bool" setter="set_one_shot" getter="get_one_shot"> + If [code]true[/code] only [code]amount[/code] particles will be emitted. Default value: [code]false[/code]. </member> <member name="preprocess" type="float" setter="set_pre_process_time" getter="get_pre_process_time"> </member> <member name="process_material" type="Material" setter="set_process_material" getter="get_process_material"> + [Material] for processing particles. Can be a [ParticlesMaterial] or a [ShaderMaterial]. </member> <member name="randomness" type="float" setter="set_randomness_ratio" getter="get_randomness_ratio"> + Emission randomness ratio. Default value: [code]0[/code]. </member> <member name="speed_scale" type="float" setter="set_speed_scale" getter="get_speed_scale"> + Speed scaling ratio. Default value: [code]1[/code]. </member> <member name="visibility_aabb" type="Rect3" setter="set_visibility_aabb" getter="get_visibility_aabb"> </member> </members> <constants> <constant name="DRAW_ORDER_INDEX" value="0"> + Particles are drawn in the order emitted. </constant> <constant name="DRAW_ORDER_LIFETIME" value="1"> + Particles are drawn in order of remaining lifetime. </constant> <constant name="DRAW_ORDER_VIEW_DEPTH" value="2"> + Particles are drawn in order of depth. </constant> <constant name="MAX_DRAW_PASSES" value="4" enum=""> </constant> diff --git a/doc/classes/Particles2D.xml b/doc/classes/Particles2D.xml index d837d6eb62..cfc907b727 100644 --- a/doc/classes/Particles2D.xml +++ b/doc/classes/Particles2D.xml @@ -1,10 +1,11 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="Particles2D" inherits="Node2D" category="Core" version="3.0.alpha.custom_build"> <brief_description> - 2D Particle emitter + 2D particle emitter. </brief_description> <description> - Particles2D is a particle system 2D [Node] that is used to simulate several types of particle effects, such as explosions, rain, snow, fireflies, or other magical-like shinny sparkles. Particles are drawn using impostors, and given their dynamic behavior, the user must provide a visibility bounding box (although helpers to create one automatically exist). + 2D particle node used to create a variety of particle systems and effects. [code]Particles2D[/code] features an emitter that generates some number of particles at a given rate. + Use the [code]process_material[/code] property to add a [ParticlesMaterial] to configure particle appearance and behavior. Alternatively, you can add a [ShaderMaterial] which will be applied to all particles. </description> <tutorials> </tutorials> @@ -285,46 +286,63 @@ </methods> <members> <member name="amount" type="int" setter="set_amount" getter="get_amount"> + Number of particles emitted in one emission cycle. </member> <member name="draw_order" type="int" setter="set_draw_order" getter="get_draw_order" enum="Particles2D.DrawOrder"> + Particle draw order. Uses [code]DRAW_ORDER_*[/code] values. Default value: [code]DRAW_ORDER_INDEX[/code]. </member> <member name="emitting" type="bool" setter="set_emitting" getter="is_emitting"> + If [code]true[/code] particles are being emitted. Default value: [code]true[/code]. </member> <member name="explosiveness" type="float" setter="set_explosiveness_ratio" getter="get_explosiveness_ratio"> + How rapidly particles in an emission cycle are emitted. If greater than [code]0[/code], there will be a gap in emissions before the next cycle begins. Default value: [code]0[/code]. </member> <member name="fixed_fps" type="int" setter="set_fixed_fps" getter="get_fixed_fps"> </member> <member name="fract_delta" type="bool" setter="set_fractional_delta" getter="get_fractional_delta"> </member> <member name="h_frames" type="int" setter="set_h_frames" getter="get_h_frames"> + Number of horizontal frames in [code]texture[/code]. </member> <member name="lifetime" type="float" setter="set_lifetime" getter="get_lifetime"> + Amount of time each particle will exist. Default value: [code]1[/code]. </member> <member name="local_coords" type="bool" setter="set_use_local_coordinates" getter="get_use_local_coordinates"> + If [code]true[/code] particles use the parent node's coordinate space. If [code]false[/code] they use global coordinates. Default value: [code]true[/code]. </member> <member name="normal_map" type="Texture" setter="set_normal_map" getter="get_normal_map"> </member> <member name="one_shot" type="bool" setter="set_one_shot" getter="get_one_shot"> + If [code]true[/code] only one emission cycle occurs. If set [code]true[/code] during a cycle, emission will stop at the cycle's end. Default value: [code]false[/code]. </member> <member name="preprocess" type="float" setter="set_pre_process_time" getter="get_pre_process_time"> + Particle system starts as if it had already run for this many seconds. </member> <member name="process_material" type="Material" setter="set_process_material" getter="get_process_material"> + [Material] for processing particles. Can be a [ParticlesMaterial] or a [ShaderMaterial]. </member> <member name="randomness" type="float" setter="set_randomness_ratio" getter="get_randomness_ratio"> + Emission lifetime randomness ratio. Default value: [code]0[/code]. </member> <member name="speed_scale" type="float" setter="set_speed_scale" getter="get_speed_scale"> + Particle system's running speed scaling ratio. Default value: [code]1[/code]. </member> <member name="texture" type="Texture" setter="set_texture" getter="get_texture"> + Particle texture. If [code]null[/code] particles will be squares. </member> <member name="v_frames" type="int" setter="set_v_frames" getter="get_v_frames"> + Number of vertical frames in [code]texture[/code]. </member> <member name="visibility_rect" type="Rect2" setter="set_visibility_rect" getter="get_visibility_rect"> + Editor visibility helper. </member> </members> <constants> <constant name="DRAW_ORDER_INDEX" value="0"> + Particles are drawn in the order emitted. </constant> <constant name="DRAW_ORDER_LIFETIME" value="1"> + Particles are drawn in order of remaining lifetime. </constant> </constants> </class> diff --git a/doc/classes/ParticlesMaterial.xml b/doc/classes/ParticlesMaterial.xml index 1767a19a9f..bebdc44b69 100644 --- a/doc/classes/ParticlesMaterial.xml +++ b/doc/classes/ParticlesMaterial.xml @@ -1,8 +1,11 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="ParticlesMaterial" inherits="Material" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Particle properties for [Particles] and [Particles2D] nodes. </brief_description> <description> + ParticlesMaterial defines particle properties and behavior. It is used in the [code]process_material[/code] of [Particles] and [Particles2D] emitter nodes. + Some of this material's properties are applied to each particle when emitted, while others can have a [CurveTexture] applied to vary values over the lifetime of the particle. </description> <tutorials> </tutorials> @@ -294,152 +297,217 @@ </methods> <members> <member name="angle" type="float" setter="set_param" getter="get_param"> + Initial rotation applied to each particle. </member> <member name="angle_curve" type="Texture" setter="set_param_texture" getter="get_param_texture"> + Each particle's rotation will be animated along this [CurveTexture]. </member> <member name="angle_random" type="float" setter="set_param_randomness" getter="get_param_randomness"> + Rotation randomness ratio. Default value: [code]0[/code]. </member> <member name="angular_velocity" type="float" setter="set_param" getter="get_param"> + Initial angular velocity applied to each particle. </member> <member name="angular_velocity_curve" type="Texture" setter="set_param_texture" getter="get_param_texture"> + Each particle's angular velocity will vary along this [CurveTexture]. </member> <member name="angular_velocity_random" type="float" setter="set_param_randomness" getter="get_param_randomness"> + Angular velocity randomness ratio. Default value: [code]0[/code]. </member> <member name="anim_loop" type="bool" setter="set_flag" getter="get_flag"> + If [code]true[/code] animation will loop. Default value: [code]false[/code]. </member> <member name="anim_offset" type="float" setter="set_param" getter="get_param"> + Particle animation offset. </member> <member name="anim_offset_curve" type="Texture" setter="set_param_texture" getter="get_param_texture"> + Each particle's animation offset will vary along this [CurveTexture]. </member> <member name="anim_offset_random" type="float" setter="set_param_randomness" getter="get_param_randomness"> + Animation offset randomness ratio. Default value: [code]0[/code]. </member> <member name="anim_speed" type="float" setter="set_param" getter="get_param"> + Particle animation speed. </member> <member name="anim_speed_curve" type="Texture" setter="set_param_texture" getter="get_param_texture"> + Each particle's animation speed will vary along this [CurveTexture]. </member> <member name="anim_speed_random" type="float" setter="set_param_randomness" getter="get_param_randomness"> + Animation speed randomness ratio. Default value: [code]0[/code]. </member> <member name="color" type="Color" setter="set_color" getter="get_color"> + Each particle's initial color. If the [Particle2D]'s [code]texture[/code] is defined, it will be multiplied by this color. </member> <member name="color_ramp" type="Texture" setter="set_color_ramp" getter="get_color_ramp"> + Each particle's color will vary along this [GradientTexture]. </member> <member name="damping" type="float" setter="set_param" getter="get_param"> + The rate at which particles lose velocity. </member> <member name="damping_curve" type="Texture" setter="set_param_texture" getter="get_param_texture"> + Damping will vary along this [CurveTexture]. </member> <member name="damping_random" type="float" setter="set_param_randomness" getter="get_param_randomness"> + Damping randomness ratio. Default value: [code]0[/code]. </member> <member name="emission_box_extents" type="Vector3" setter="set_emission_box_extents" getter="get_emission_box_extents"> + The box's extents if [code]emission_shape[/code] is set to [code]EMISSION_SHAPE_BOX[/code]. </member> <member name="emission_color_texture" type="Texture" setter="set_emission_color_texture" getter="get_emission_color_texture"> </member> <member name="emission_normal_texture" type="Texture" setter="set_emission_normal_texture" getter="get_emission_normal_texture"> </member> <member name="emission_point_count" type="int" setter="set_emission_point_count" getter="get_emission_point_count"> + The number of emission points if [code]emission_shape[/code] is set to [code]EMISSION_SHAPE_POINTS[/code] or [code]EMISSION_SHAPE_DIRECTED_POINTS[/code]. </member> <member name="emission_point_texture" type="Texture" setter="set_emission_point_texture" getter="get_emission_point_texture"> </member> <member name="emission_shape" type="int" setter="set_emission_shape" getter="get_emission_shape" enum="ParticlesMaterial.EmissionShape"> + Particles will be emitted inside this region. Use [code]EMISSION_SHAPE_*[/code] constants for values. Default value: [code]EMISSION_SHAPE_POINT[/code]. </member> <member name="emission_sphere_radius" type="float" setter="set_emission_sphere_radius" getter="get_emission_sphere_radius"> + The sphere's radius if [code]emission_shape[/code] is set to [code]EMISSION_SHAPE_SPHERE[/code]. </member> <member name="flag_align_y" type="bool" setter="set_flag" getter="get_flag"> </member> <member name="flag_disable_z" type="bool" setter="set_flag" getter="get_flag"> + If [code]true[/code] particles will not move on the z axis. Default value: [code]true[/code] for [Particles2D], [code]false[/code] for [Particles]. </member> <member name="flag_rotate_y" type="bool" setter="set_flag" getter="get_flag"> </member> <member name="flatness" type="float" setter="set_flatness" getter="get_flatness"> </member> <member name="gravity" type="Vector3" setter="set_gravity" getter="get_gravity"> + Gravity applied to every particle. Default value: [code](0, 98, 0)[/code]. </member> <member name="hue_variation" type="float" setter="set_param" getter="get_param"> + Initial hue variation applied to each particle. </member> <member name="hue_variation_curve" type="Texture" setter="set_param_texture" getter="get_param_texture"> + Each particle's hue will vary along this [CurveTexture]. </member> <member name="hue_variation_random" type="float" setter="set_param_randomness" getter="get_param_randomness"> + Hue variation randomness ratio. Default value: [code]0[/code]. </member> <member name="initial_velocity" type="float" setter="set_param" getter="get_param"> + Initial velocity for each particle. </member> <member name="initial_velocity_random" type="float" setter="set_param_randomness" getter="get_param_randomness"> + Initial velocity randomness ratio. Default value: [code]0[/code]. </member> <member name="linear_accel" type="float" setter="set_param" getter="get_param"> + Linear acceleration applied to each particle. </member> <member name="linear_accel_curve" type="Texture" setter="set_param_texture" getter="get_param_texture"> + Each particle's linear acceleration will vary along this [CurveTexture]. </member> <member name="linear_accel_random" type="float" setter="set_param_randomness" getter="get_param_randomness"> + Linear acceleration randomness ratio. Default value: [code]0[/code]. </member> <member name="orbit_velocity" type="float" setter="set_param" getter="get_param"> + Orbital velocity applied to each particle. </member> <member name="orbit_velocity_curve" type="Texture" setter="set_param_texture" getter="get_param_texture"> + Each particle's orbital velocity will vary along this [CurveTexture]. </member> <member name="orbit_velocity_random" type="float" setter="set_param_randomness" getter="get_param_randomness"> + Orbital velocity randomness ratio. Default value: [code]0[/code]. </member> <member name="radial_accel" type="float" setter="set_param" getter="get_param"> + Linear acceleration applied to each particle. </member> <member name="radial_accel_curve" type="Texture" setter="set_param_texture" getter="get_param_texture"> + Each particle's radial acceleration will vary along this [CurveTexture]. </member> <member name="radial_accel_random" type="float" setter="set_param_randomness" getter="get_param_randomness"> + Radial acceleration randomness ratio. Default value: [code]0[/code]. </member> <member name="scale" type="float" setter="set_param" getter="get_param"> + Initial scale applied to each particle. </member> <member name="scale_curve" type="Texture" setter="set_param_texture" getter="get_param_texture"> + Each particle's scale will vary along this [CurveTexture]. </member> <member name="scale_random" type="float" setter="set_param_randomness" getter="get_param_randomness"> + Scale randomness ratio. Default value: [code]0[/code]. </member> <member name="spread" type="float" setter="set_spread" getter="get_spread"> + Each particle's initial direction range from [code]+spread[/code] to [code]-spread[/code] degrees. Default value: [code]45[/code]. </member> <member name="tangential_accel" type="float" setter="set_param" getter="get_param"> + Tangential acceleration applied to each particle. Tangential acceleration is perpendicular to the particle's velocity. </member> <member name="tangential_accel_curve" type="Texture" setter="set_param_texture" getter="get_param_texture"> + Each particle's tangential acceleration will vary along this [CurveTexture]. </member> <member name="tangential_accel_random" type="float" setter="set_param_randomness" getter="get_param_randomness"> + Tangential acceleration randomness ratio. Default value: [code]0[/code]. </member> <member name="trail_color_modifier" type="GradientTexture" setter="set_trail_color_modifier" getter="get_trail_color_modifier"> + Trail particles' color will vary along this [GradientTexture]. </member> <member name="trail_divisor" type="int" setter="set_trail_divisor" getter="get_trail_divisor"> + Emitter will emit [code]amount[/code] divided by [code]trail_divisor[/code] particles. The remaining particles will be used as trail(s). </member> <member name="trail_size_modifier" type="CurveTexture" setter="set_trail_size_modifier" getter="get_trail_size_modifier"> + Trail particles' size will vary along this [CurveTexture]. </member> </members> <constants> <constant name="PARAM_INITIAL_LINEAR_VELOCITY" value="0"> + Use with [method set_param], [method set_param_randomness], and [method set_param_texture] to set initial velocity properties. </constant> <constant name="PARAM_ANGULAR_VELOCITY" value="1"> + Use with [method set_param], [method set_param_randomness], and [method set_param_texture] to set angular velocity properties. </constant> <constant name="PARAM_ORBIT_VELOCITY" value="2"> + Use with [method set_param], [method set_param_randomness], and [method set_param_texture] to set orbital_velocity properties. </constant> <constant name="PARAM_LINEAR_ACCEL" value="3"> + Use with [method set_param], [method set_param_randomness], and [method set_param_texture] to set linear acceleration properties. </constant> <constant name="PARAM_RADIAL_ACCEL" value="4"> + Use with [method set_param], [method set_param_randomness], and [method set_param_texture] to set radial acceleration properties. </constant> <constant name="PARAM_TANGENTIAL_ACCEL" value="5"> + Use with [method set_param], [method set_param_randomness], and [method set_param_texture] to set tangential acceleration properties. </constant> <constant name="PARAM_DAMPING" value="6"> + Use with [method set_param], [method set_param_randomness], and [method set_param_texture] to set damping properties. </constant> <constant name="PARAM_ANGLE" value="7"> + Use with [method set_param], [method set_param_randomness], and [method set_param_texture] to set angle properties. </constant> <constant name="PARAM_SCALE" value="8"> + Use with [method set_param], [method set_param_randomness], and [method set_param_texture] to set scale properties. </constant> <constant name="PARAM_HUE_VARIATION" value="9"> + Use with [method set_param], [method set_param_randomness], and [method set_param_texture] to set hue_variation properties. </constant> <constant name="PARAM_ANIM_SPEED" value="10"> + Use with [method set_param], [method set_param_randomness], and [method set_param_texture] to set animation speed properties. </constant> <constant name="PARAM_ANIM_OFFSET" value="11"> + Use with [method set_param], [method set_param_randomness], and [method set_param_texture] to set animation offset properties. </constant> <constant name="PARAM_MAX" value="12"> </constant> <constant name="FLAG_ALIGN_Y_TO_VELOCITY" value="0"> + Use with [method set_flag] to set [member flag_align_y]. </constant> <constant name="FLAG_ROTATE_Y" value="1"> + Use with [method set_flag] to set [member flag_rotate_y] </constant> <constant name="FLAG_MAX" value="4"> </constant> <constant name="EMISSION_SHAPE_POINT" value="0"> + All particles will be emitted from a single point. </constant> <constant name="EMISSION_SHAPE_SPHERE" value="1"> + Particles will be emitted in the volume of a sphere. </constant> <constant name="EMISSION_SHAPE_BOX" value="2"> + Particles will be emitted in the volume of a box. </constant> <constant name="EMISSION_SHAPE_POINTS" value="3"> </constant> diff --git a/doc/classes/Performance.xml b/doc/classes/Performance.xml index 71987ace9e..2dc3aa239b 100644 --- a/doc/classes/Performance.xml +++ b/doc/classes/Performance.xml @@ -1,8 +1,11 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="Performance" inherits="Object" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Exposes performance related data. </brief_description> <description> + This class provides access to a number of different monitors related to performance, such as memory usage, draw calls, and FPS. These are the same as the values displayed in the [i]Monitor[/i] tab in the editor's [i]Debugger[/i] panel. By using the [method get_monitor] method of this class, you can access this data from your code. Note that a few of these monitors are only available in debug mode and will always return 0 when used in a release build. + Many of these monitors are not updated in real-time, so there may be a short delay between changes. </description> <tutorials> </tutorials> @@ -15,63 +18,93 @@ <argument index="0" name="monitor" type="int" enum="Performance.Monitor"> </argument> <description> + Returns the value of one of the available monitors. You should provide one of this class's constants as the argument, like this: + [codeblock] + print(Performance.get_monitor(Performance.TIME_FPS)) # Prints the FPS to the console + [/codeblock] </description> </method> </methods> <constants> <constant name="TIME_FPS" value="0"> + Frames per second. </constant> <constant name="TIME_PROCESS" value="1"> + Time it took to complete one frame. </constant> - <constant name="TIME_FIXED_PROCESS" value="2"> + <constant name="TIME_PHYSICS_PROCESS" value="2"> + Time it took to complete one physics frame. </constant> <constant name="MEMORY_STATIC" value="3"> + Static memory currently used, in bytes. Not available in release builds. </constant> <constant name="MEMORY_DYNAMIC" value="4"> + Dynamic memory currently used, in bytes. Not available in release builds. </constant> <constant name="MEMORY_STATIC_MAX" value="5"> + Available static memory. Not available in release builds. </constant> <constant name="MEMORY_DYNAMIC_MAX" value="6"> + Available dynamic memory. Not available in release builds. </constant> <constant name="MEMORY_MESSAGE_BUFFER_MAX" value="7"> + Largest amount of memory the message queue buffer has used, in bytes. The message queue is used for deferred functions calls and notifications. </constant> <constant name="OBJECT_COUNT" value="8"> + Number of objects currently instanced (including nodes). </constant> <constant name="OBJECT_RESOURCE_COUNT" value="9"> + Number of resources currently used. </constant> <constant name="OBJECT_NODE_COUNT" value="10"> + Number of nodes currently instanced. This also includes the root node, as well as any nodes not in the scene tree. </constant> <constant name="RENDER_OBJECTS_IN_FRAME" value="11"> + 3D objects drawn per frame. </constant> <constant name="RENDER_VERTICES_IN_FRAME" value="12"> + Vertices drawn per frame. 3D only. </constant> <constant name="RENDER_MATERIAL_CHANGES_IN_FRAME" value="13"> + Material changes per frame. 3D only </constant> <constant name="RENDER_SHADER_CHANGES_IN_FRAME" value="14"> + Shader changes per frame. 3D only. </constant> <constant name="RENDER_SURFACE_CHANGES_IN_FRAME" value="15"> + Render surface changes per frame. 3D only. </constant> <constant name="RENDER_DRAW_CALLS_IN_FRAME" value="16"> + Draw calls per frame. 3D only. </constant> <constant name="RENDER_USAGE_VIDEO_MEM_TOTAL" value="20"> </constant> <constant name="RENDER_VIDEO_MEM_USED" value="17"> + Video memory used. Includes both texture and vertex memory. </constant> <constant name="RENDER_TEXTURE_MEM_USED" value="18"> + Texture memory used. </constant> <constant name="RENDER_VERTEX_MEM_USED" value="19"> + Vertex memory used. </constant> <constant name="PHYSICS_2D_ACTIVE_OBJECTS" value="21"> + Number of active [RigidBody2D] nodes in the game. </constant> <constant name="PHYSICS_2D_COLLISION_PAIRS" value="22"> + Number of collision pairs in the 2D physics engine. </constant> <constant name="PHYSICS_2D_ISLAND_COUNT" value="23"> + Number of islands in the 2D physics engine. </constant> <constant name="PHYSICS_3D_ACTIVE_OBJECTS" value="24"> + Number of active [RigidBody] and [VehicleBody] nodes in the game. </constant> <constant name="PHYSICS_3D_COLLISION_PAIRS" value="25"> + Number of collision pairs in the 3D physics engine. </constant> <constant name="PHYSICS_3D_ISLAND_COUNT" value="26"> + Number of islands in the 3D physics engine. </constant> <constant name="MONITOR_MAX" value="27"> </constant> diff --git a/doc/classes/Physics2DDirectBodyState.xml b/doc/classes/Physics2DDirectBodyState.xml index 9b6fe69b4a..cc68aaab1f 100644 --- a/doc/classes/Physics2DDirectBodyState.xml +++ b/doc/classes/Physics2DDirectBodyState.xml @@ -45,7 +45,7 @@ Return the collider object, this depends on how it was created (will return a scene node if such was used to create it). </description> </method> - <method name="get_contact_collider_pos" qualifiers="const"> + <method name="get_contact_collider_position" qualifiers="const"> <return type="Vector2"> </return> <argument index="0" name="contact_idx" type="int"> @@ -72,7 +72,7 @@ Return the metadata of the collided shape. This metadata is different from [method Object.get_meta], and is set with [method Physics2DServer.shape_set_data]. </description> </method> - <method name="get_contact_collider_velocity_at_pos" qualifiers="const"> + <method name="get_contact_collider_velocity_at_position" qualifiers="const"> <return type="Vector2"> </return> <argument index="0" name="contact_idx" type="int"> @@ -97,7 +97,7 @@ Return the local normal (of this body) of the contact point. </description> </method> - <method name="get_contact_local_pos" qualifiers="const"> + <method name="get_contact_local_position" qualifiers="const"> <return type="Vector2"> </return> <argument index="0" name="contact_idx" type="int"> diff --git a/doc/classes/Physics2DDirectSpaceState.xml b/doc/classes/Physics2DDirectSpaceState.xml index 9399227d27..5427ed1573 100644 --- a/doc/classes/Physics2DDirectSpaceState.xml +++ b/doc/classes/Physics2DDirectSpaceState.xml @@ -70,7 +70,7 @@ collider_id: Id of the object the point is in. collider: Object the point is inside of. rid: [RID] of the object the point is in. - Additionally, the method can take an array of objects or [RID]\ s that are to be excluded from collisions, a bitmask representing the physics layers to check in, and another bitmask for the types of objects to check (see TYPE_MASK_* constants). + Additionally, the method can take an array of objects or [RID]s that are to be excluded from collisions, a bitmask representing the physics layers to check in, and another bitmask for the types of objects to check (see TYPE_MASK_* constants). </description> </method> <method name="intersect_ray"> @@ -96,7 +96,7 @@ collider: Object against which the ray was stopped. rid: [RID] of the object against which the ray was stopped. If the ray did not intersect anything, then an empty dictionary (dir.empty()==true) is returned instead. - Additionally, the method can take an array of objects or [RID]\ s that are to be excluded from collisions, a bitmask representing the physics layers to check in, and another bitmask for the types of objects to check (see TYPE_MASK_* constants). + Additionally, the method can take an array of objects or [RID]s that are to be excluded from collisions, a bitmask representing the physics layers to check in, and another bitmask for the types of objects to check (see TYPE_MASK_* constants). </description> </method> <method name="intersect_shape"> diff --git a/doc/classes/Physics2DServer.xml b/doc/classes/Physics2DServer.xml index ab63089691..edc46a53d0 100644 --- a/doc/classes/Physics2DServer.xml +++ b/doc/classes/Physics2DServer.xml @@ -21,7 +21,7 @@ <argument index="2" name="transform" type="Transform2D" default="Transform2D( 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. + Adds 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. </description> </method> <method name="area_attach_object_instance_id"> @@ -32,7 +32,7 @@ <argument index="1" name="id" type="int"> </argument> <description> - Assign the area to a descendant of [Object], so it can exist in the node tree. + Assigns the area to a descendant of [Object], so it can exist in the node tree. </description> </method> <method name="area_clear_shapes"> @@ -41,14 +41,14 @@ <argument index="0" name="area" type="RID"> </argument> <description> - Remove all shapes from an area. It does not delete the shapes, so they can be reassigned later. + Removes all shapes from an area. It does not delete the shapes, so they can be reassigned later. </description> </method> <method name="area_create"> <return type="RID"> </return> <description> - Create an [Area2D]. + Creates an [Area2D]. </description> </method> <method name="area_get_object_instance_id" qualifiers="const"> @@ -57,7 +57,7 @@ <argument index="0" name="area" type="RID"> </argument> <description> - Get the instance ID of the object the area is assigned to. + Gets the instance ID of the object the area is assigned to. </description> </method> <method name="area_get_param" qualifiers="const"> @@ -68,7 +68,7 @@ <argument index="1" name="param" type="int" enum="Physics2DServer.AreaParameter"> </argument> <description> - Return an area parameter value. + Returns an area parameter value. A list of available parameters is on the AREA_PARAM_* constants. </description> </method> <method name="area_get_shape" qualifiers="const"> @@ -79,7 +79,7 @@ <argument index="1" name="shape_idx" type="int"> </argument> <description> - Return the [RID] of the nth shape of an area. + Returns the [RID] of the nth shape of an area. </description> </method> <method name="area_get_shape_count" qualifiers="const"> @@ -88,7 +88,7 @@ <argument index="0" name="area" type="RID"> </argument> <description> - Return the number of shapes assigned to an area. + Returns the number of shapes assigned to an area. </description> </method> <method name="area_get_shape_transform" qualifiers="const"> @@ -99,7 +99,7 @@ <argument index="1" name="shape_idx" type="int"> </argument> <description> - Return the transform matrix of a shape within an area. + Returns the transform matrix of a shape within an area. </description> </method> <method name="area_get_space" qualifiers="const"> @@ -108,7 +108,7 @@ <argument index="0" name="area" type="RID"> </argument> <description> - Return the space assigned to the area. + Returns the space assigned to the area. </description> </method> <method name="area_get_space_override_mode" qualifiers="const"> @@ -117,7 +117,7 @@ <argument index="0" name="area" type="RID"> </argument> <description> - Return the space override mode for the area. + Returns the space override mode for the area. </description> </method> <method name="area_get_transform" qualifiers="const"> @@ -126,7 +126,7 @@ <argument index="0" name="area" type="RID"> </argument> <description> - Return the transform matrix for an area. + Returns the transform matrix for an area. </description> </method> <method name="area_remove_shape"> @@ -137,7 +137,7 @@ <argument index="1" name="shape_idx" type="int"> </argument> <description> - Remove a shape from an area. It does not delete the shape, so it can be reassigned later. + Removes a shape from an area. It does not delete the shape, so it can be reassigned later. </description> </method> <method name="area_set_collision_layer"> @@ -148,7 +148,7 @@ <argument index="1" name="layer" type="int"> </argument> <description> - Assign the area to one or many physics layers. + Assigns the area to one or many physics layers. </description> </method> <method name="area_set_collision_mask"> @@ -159,7 +159,7 @@ <argument index="1" name="mask" type="int"> </argument> <description> - Set which physics layers the area will monitor. + Sets which physics layers the area will monitor. </description> </method> <method name="area_set_monitor_callback"> @@ -172,7 +172,7 @@ <argument index="2" name="method" type="String"> </argument> <description> - Set the function to call when any body/area enters or exits the area. This callback will be called for any object interacting with the area, and takes five parameters: + Sets the function to call when any body/area enters or exits the area. This callback will be called for any object interacting with the area, and takes five parameters: 1: AREA_BODY_ADDED or AREA_BODY_REMOVED, depending on whether the object entered or exited the area. 2: [RID] of the object that entered/exited the area. 3: Instance ID of the object that entered/exited the area. @@ -190,7 +190,7 @@ <argument index="2" name="value" type="Variant"> </argument> <description> - Set the value for an area parameter. A list of available parameters is on the AREA_PARAM_* constants. + Sets the value for an area parameter. A list of available parameters is on the AREA_PARAM_* constants. </description> </method> <method name="area_set_shape"> @@ -203,7 +203,7 @@ <argument index="2" name="shape" type="RID"> </argument> <description> - Substitute a given area shape by another. The old shape is selected by its index, the new one by its [RID]. + Substitutes a given area shape by another. The old shape is selected by its index, the new one by its [RID]. </description> </method> <method name="area_set_shape_disabled"> @@ -216,6 +216,7 @@ <argument index="2" name="disable" type="bool"> </argument> <description> + Disables a given shape in this area if [code]disable is true[/code] </description> </method> <method name="area_set_shape_transform"> @@ -228,7 +229,7 @@ <argument index="2" name="transform" type="Transform2D"> </argument> <description> - Set the transform matrix for an area shape. + Sets the transform matrix for an area shape. </description> </method> <method name="area_set_space"> @@ -239,7 +240,7 @@ <argument index="1" name="space" type="RID"> </argument> <description> - Assign a space to the area. + Assigns a space to the area. </description> </method> <method name="area_set_space_override_mode"> @@ -250,7 +251,7 @@ <argument index="1" name="mode" type="int" enum="Physics2DServer.AreaSpaceOverrideMode"> </argument> <description> - Set the space override mode for the area. The modes are described in the constants AREA_SPACE_OVERRIDE_*. + Sets the space override mode for the area. The modes are described in the constants AREA_SPACE_OVERRIDE_*. </description> </method> <method name="area_set_transform"> @@ -261,7 +262,7 @@ <argument index="1" name="transform" type="Transform2D"> </argument> <description> - Set the transform matrix for an area. + Sets the transform matrix for an area. </description> </method> <method name="body_add_collision_exception"> @@ -272,7 +273,7 @@ <argument index="1" name="excepted_body" type="RID"> </argument> <description> - Add a body to the list of bodies exempt from collisions. + Adds a body to the list of bodies exempt from collisions. </description> </method> <method name="body_add_force"> @@ -285,7 +286,7 @@ <argument index="2" name="force" type="Vector2"> </argument> <description> - Add a positioned force to the applied force and torque. As with [method body_apply_impulse], both the force and the offset from the body origin are in global coordinates. A force differs from an impulse in that, while the two are forces, the impulse clears itself after being applied. + Adds a positioned force to the applied force and torque. As with [method body_apply_impulse], both the force and the offset from the body origin are in global coordinates. A force differs from an impulse in that, while the two are forces, the impulse clears itself after being applied. </description> </method> <method name="body_add_shape"> @@ -298,7 +299,7 @@ <argument index="2" name="transform" type="Transform2D" default="Transform2D( 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. + Adds 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. </description> </method> <method name="body_apply_impulse"> @@ -306,12 +307,12 @@ </return> <argument index="0" name="body" type="RID"> </argument> - <argument index="1" name="pos" type="Vector2"> + <argument index="1" name="position" type="Vector2"> </argument> <argument index="2" name="impulse" type="Vector2"> </argument> <description> - Add a positioned impulse to the applied force and torque. Both the force and the offset from the body origin are in global coordinates. + Adds a positioned impulse to the applied force and torque. Both the force and the offset from the body origin are in global coordinates. </description> </method> <method name="body_attach_object_instance_id"> @@ -322,7 +323,7 @@ <argument index="1" name="id" type="int"> </argument> <description> - Assign the area to a descendant of [Object], so it can exist in the node tree. + Assigns the area to a descendant of [Object], so it can exist in the node tree. </description> </method> <method name="body_clear_shapes"> @@ -331,7 +332,7 @@ <argument index="0" name="body" type="RID"> </argument> <description> - Remove all shapes from a body. + Removes all shapes from a body. </description> </method> <method name="body_create"> @@ -342,7 +343,7 @@ <argument index="1" name="init_sleeping" type="bool" default="false"> </argument> <description> - Create a physics body. The first parameter can be any value from constants BODY_MODE*, for the type of body created. Additionally, the body can be created in sleeping state to save processing time. + Creates a physics body. The first parameter can be any value from constants BODY_MODE*, for the type of body created. Additionally, the body can be created in sleeping state to save processing time. </description> </method> <method name="body_get_collision_layer" qualifiers="const"> @@ -351,7 +352,7 @@ <argument index="0" name="body" type="RID"> </argument> <description> - Return the physics layer or layers a body belongs to. + Returns the physics layer or layers a body belongs to. </description> </method> <method name="body_get_collision_mask" qualifiers="const"> @@ -360,7 +361,7 @@ <argument index="0" name="body" type="RID"> </argument> <description> - Return the physics layer or layers a body can collide with. + Returns the physics layer or layers a body can collide with. </description> </method> <method name="body_get_continuous_collision_detection_mode" qualifiers="const"> @@ -369,7 +370,16 @@ <argument index="0" name="body" type="RID"> </argument> <description> - Return the continuous collision detection mode. + Returns the continuous collision detection mode. + </description> + </method> + <method name="body_get_direct_state"> + <return type="Physics2DDirectBodyState"> + </return> + <argument index="0" name="body" type="RID"> + </argument> + <description> + Returns the [Physics2DDirectBodyState] of the body. </description> </method> <method name="body_get_max_contacts_reported" qualifiers="const"> @@ -378,7 +388,7 @@ <argument index="0" name="body" type="RID"> </argument> <description> - Return the maximum contacts that can be reported. See [method body_set_max_contacts_reported]. + Returns the maximum contacts that can be reported. See [method body_set_max_contacts_reported]. </description> </method> <method name="body_get_mode" qualifiers="const"> @@ -387,7 +397,7 @@ <argument index="0" name="body" type="RID"> </argument> <description> - Return the body mode. + Returns the body mode. </description> </method> <method name="body_get_object_instance_id" qualifiers="const"> @@ -396,7 +406,7 @@ <argument index="0" name="body" type="RID"> </argument> <description> - Get the instance ID of the object the area is assigned to. + Gets the instance ID of the object the area is assigned to. </description> </method> <method name="body_get_param" qualifiers="const"> @@ -407,7 +417,7 @@ <argument index="1" name="param" type="int" enum="Physics2DServer.BodyParameter"> </argument> <description> - Return the value of a body parameter. + Returns the value of a body parameter. A list of available parameters is on the BODY_PARAM_* constants. </description> </method> <method name="body_get_shape" qualifiers="const"> @@ -418,7 +428,7 @@ <argument index="1" name="shape_idx" type="int"> </argument> <description> - Return the [RID] of the nth shape of a body. + Returns the [RID] of the nth shape of a body. </description> </method> <method name="body_get_shape_count" qualifiers="const"> @@ -427,7 +437,7 @@ <argument index="0" name="body" type="RID"> </argument> <description> - Return the number of shapes assigned to a body. + Returns the number of shapes assigned to a body. </description> </method> <method name="body_get_shape_metadata" qualifiers="const"> @@ -438,7 +448,7 @@ <argument index="1" name="shape_idx" type="int"> </argument> <description> - Return the metadata of a shape of a body. + Returns the metadata of a shape of a body. </description> </method> <method name="body_get_shape_transform" qualifiers="const"> @@ -449,7 +459,7 @@ <argument index="1" name="shape_idx" type="int"> </argument> <description> - Return the transform matrix of a body shape. + Returns the transform matrix of a body shape. </description> </method> <method name="body_get_space" qualifiers="const"> @@ -458,7 +468,7 @@ <argument index="0" name="body" type="RID"> </argument> <description> - Return the [RID] of the space assigned to a body. + Returns the [RID] of the space assigned to a body. </description> </method> <method name="body_get_state" qualifiers="const"> @@ -469,7 +479,7 @@ <argument index="1" name="state" type="int" enum="Physics2DServer.BodyState"> </argument> <description> - Return a body state. + Returns a body state. </description> </method> <method name="body_is_omitting_force_integration" qualifiers="const"> @@ -478,7 +488,7 @@ <argument index="0" name="body" type="RID"> </argument> <description> - Return whether a body uses a callback function to calculate its own physics (see [method body_set_force_integration_callback]). + Returns whether a body uses a callback function to calculate its own physics (see [method body_set_force_integration_callback]). </description> </method> <method name="body_remove_collision_exception"> @@ -489,7 +499,7 @@ <argument index="1" name="excepted_body" type="RID"> </argument> <description> - Remove a body from the list of bodies exempt from collisions. + Removes a body from the list of bodies exempt from collisions. </description> </method> <method name="body_remove_shape"> @@ -500,7 +510,7 @@ <argument index="1" name="shape_idx" type="int"> </argument> <description> - Remove a shape from a body. The shape is not deleted, so it can be reused afterwards. + Removes a shape from a body. The shape is not deleted, so it can be reused afterwards. </description> </method> <method name="body_set_axis_velocity"> @@ -511,7 +521,7 @@ <argument index="1" name="axis_velocity" type="Vector2"> </argument> <description> - Set an axis velocity. The velocity in the given vector axis will be set as the given vector length. This is useful for jumping behavior. + Sets an axis velocity. The velocity in the given vector axis will be set as the given vector length. This is useful for jumping behavior. </description> </method> <method name="body_set_collision_layer"> @@ -522,7 +532,7 @@ <argument index="1" name="layer" type="int"> </argument> <description> - Set the physics layer or layers a body belongs to. + Sets the physics layer or layers a body belongs to. </description> </method> <method name="body_set_collision_mask"> @@ -533,7 +543,7 @@ <argument index="1" name="mask" type="int"> </argument> <description> - Set the physics layer or layers a body can collide with. + Sets the physics layer or layers a body can collide with. </description> </method> <method name="body_set_continuous_collision_detection_mode"> @@ -544,7 +554,7 @@ <argument index="1" name="mode" type="int" enum="Physics2DServer.CCDMode"> </argument> <description> - Set the continuous collision detection mode from any of the CCD_MODE_* constants. + Sets the continuous collision detection mode from any of the CCD_MODE_* constants. Continuous collision detection tries to predict where a moving body will collide, instead of moving it and correcting its movement if it collided. </description> </method> @@ -560,7 +570,7 @@ <argument index="3" name="userdata" type="Variant" default="null"> </argument> <description> - Set the function used to calculate physics for an object, if that object allows it (see [method body_set_omit_force integration]). + Sets the function used to calculate physics for an object, if that object allows it (see [method body_set_omit_force integration]). </description> </method> <method name="body_set_max_contacts_reported"> @@ -571,7 +581,7 @@ <argument index="1" name="amount" type="int"> </argument> <description> - Set the maximum contacts to report. Bodies can keep a log of the contacts with other bodies, this is enabled by setting the maximum amount of contacts reported to a number greater than 0. + Sets the maximum contacts to report. Bodies can keep a log of the contacts with other bodies, this is enabled by setting the maximum amount of contacts reported to a number greater than 0. </description> </method> <method name="body_set_mode"> @@ -582,7 +592,7 @@ <argument index="1" name="mode" type="int" enum="Physics2DServer.BodyMode"> </argument> <description> - Set the body mode, from one of the constants BODY_MODE*. + Sets the body mode, from one of the constants BODY_MODE*. </description> </method> <method name="body_set_omit_force_integration"> @@ -593,7 +603,7 @@ <argument index="1" name="enable" type="bool"> </argument> <description> - Set whether a body uses a callback function to calculate its own physics (see [method body_set_force_integration_callback]). + Sets whether a body uses a callback function to calculate its own physics (see [method body_set_force_integration_callback]). </description> </method> <method name="body_set_param"> @@ -606,7 +616,7 @@ <argument index="2" name="value" type="float"> </argument> <description> - Set a body parameter (see BODY_PARAM* constants). + Sets a body parameter. A list of available parameters is on the BODY_PARAM_* constants. </description> </method> <method name="body_set_shape"> @@ -619,7 +629,7 @@ <argument index="2" name="shape" type="RID"> </argument> <description> - Substitute a given body shape by another. The old shape is selected by its index, the new one by its [RID]. + Substitutes a given body shape by another. The old shape is selected by its index, the new one by its [RID]. </description> </method> <method name="body_set_shape_as_one_way_collision"> @@ -632,6 +642,7 @@ <argument index="2" name="enable" type="bool"> </argument> <description> + Enables one way collision on body if [code]enable is true[/code]. </description> </method> <method name="body_set_shape_disabled"> @@ -644,6 +655,7 @@ <argument index="2" name="disable" type="bool"> </argument> <description> + Disables shape in body if [code]disable is true[/code]. </description> </method> <method name="body_set_shape_metadata"> @@ -656,7 +668,7 @@ <argument index="2" name="metadata" type="Variant"> </argument> <description> - Set metadata of a shape within a body. This metadata is different from [method Object.set_meta], and can be retrieved on shape queries. + Sets metadata of a shape within a body. This metadata is different from [method Object.set_meta], and can be retrieved on shape queries. </description> </method> <method name="body_set_shape_transform"> @@ -669,7 +681,7 @@ <argument index="2" name="transform" type="Transform2D"> </argument> <description> - Set the transform matrix for a body shape. + Sets the transform matrix for a body shape. </description> </method> <method name="body_set_space"> @@ -680,7 +692,7 @@ <argument index="1" name="space" type="RID"> </argument> <description> - Assign a space to the body (see [method create_space]). + Assigns a space to the body (see [method create_space]). </description> </method> <method name="body_set_state"> @@ -693,7 +705,7 @@ <argument index="2" name="value" type="Variant"> </argument> <description> - Set a body state (see BODY_STATE* constants). + Sets a body state (see BODY_STATE* constants). </description> </method> <method name="body_test_motion"> @@ -710,7 +722,7 @@ <argument index="4" name="result" type="Physics2DTestMotionResult" default="null"> </argument> <description> - 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. + Returns 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"> @@ -725,7 +737,7 @@ <argument index="3" name="body_b" type="RID"> </argument> <description> - Create a damped spring joint between two bodies. If not specified, the second body is assumed to be the joint itself. + Creates a damped spring joint between two bodies. If not specified, the second body is assumed to be the joint itself. </description> </method> <method name="damped_string_joint_get_param" qualifiers="const"> @@ -736,7 +748,7 @@ <argument index="1" name="param" type="int" enum="Physics2DServer.DampedStringParam"> </argument> <description> - Return the value of a damped spring joint parameter. + Returns the value of a damped spring joint parameter. </description> </method> <method name="damped_string_joint_set_param"> @@ -749,7 +761,7 @@ <argument index="2" name="value" type="float"> </argument> <description> - Set a damped spring joint parameter. Parameters are explained in the DAMPED_STRING* constants. + Sets a damped spring joint parameter. Parameters are explained in the DAMPED_STRING* constants. </description> </method> <method name="free_rid"> @@ -758,7 +770,7 @@ <argument index="0" name="rid" type="RID"> </argument> <description> - Destroy any of the objects created by Physics2DServer. If the [RID] passed is not one of the objects that can be created by Physics2DServer, an error will be sent to the console. + Destroys any of the objects created by Physics2DServer. If the [RID] passed is not one of the objects that can be created by Physics2DServer, an error will be sent to the console. </description> </method> <method name="get_process_info"> @@ -767,7 +779,7 @@ <argument index="0" name="process_info" type="int" enum="Physics2DServer.ProcessInfo"> </argument> <description> - Return information about the current state of the 2D physics engine. The states are listed under the INFO_* constants. + Returns information about the current state of the 2D physics engine. The states are listed under the INFO_* constants. </description> </method> <method name="groove_joint_create"> @@ -784,7 +796,7 @@ <argument index="4" name="body_b" type="RID"> </argument> <description> - Create a groove joint between two bodies. If not specified, the bodyies are assumed to be the joint itself. + Creates a groove joint between two bodies. If not specified, the bodyies are assumed to be the joint itself. </description> </method> <method name="joint_get_param" qualifiers="const"> @@ -795,7 +807,7 @@ <argument index="1" name="param" type="int" enum="Physics2DServer.JointParam"> </argument> <description> - Return the value of a joint parameter. + Returns the value of a joint parameter. </description> </method> <method name="joint_get_type" qualifiers="const"> @@ -804,7 +816,7 @@ <argument index="0" name="joint" type="RID"> </argument> <description> - Return the type of a joint (see JOINT_* constants). + Returns the type of a joint (see JOINT_* constants). </description> </method> <method name="joint_set_param"> @@ -817,7 +829,7 @@ <argument index="2" name="value" type="float"> </argument> <description> - Set a joint parameter. Parameters are explained in the JOINT_PARAM* constants. + Sets a joint parameter. Parameters are explained in the JOINT_PARAM* constants. </description> </method> <method name="pin_joint_create"> @@ -830,7 +842,7 @@ <argument index="2" name="body_b" type="RID"> </argument> <description> - Create a pin joint between two bodies. If not specified, the second body is assumed to be the joint itself. + Creates a pin joint between two bodies. If not specified, the second body is assumed to be the joint itself. </description> </method> <method name="set_active"> @@ -839,7 +851,7 @@ <argument index="0" name="active" type="bool"> </argument> <description> - Activate or deactivate the 2D physics engine. + Activates or deactivates the 2D physics engine. </description> </method> <method name="shape_create"> @@ -848,7 +860,7 @@ <argument index="0" name="type" type="int" enum="Physics2DServer.ShapeType"> </argument> <description> - Create a shape of type SHAPE_*. Does not assign it to a body or an area. To do so, you must use [method area_set_shape] or [method body_set_shape]. + Creates a shape of type SHAPE_*. Does not assign it to a body or an area. To do so, you must use [method area_set_shape] or [method body_set_shape]. </description> </method> <method name="shape_get_data" qualifiers="const"> @@ -857,7 +869,7 @@ <argument index="0" name="shape" type="RID"> </argument> <description> - Return the shape data. + Returns the shape data. </description> </method> <method name="shape_get_type" qualifiers="const"> @@ -866,7 +878,7 @@ <argument index="0" name="shape" type="RID"> </argument> <description> - Return the type of shape (see SHAPE_* constants). + Returns the type of shape (see SHAPE_* constants). </description> </method> <method name="shape_set_data"> @@ -877,14 +889,14 @@ <argument index="1" name="data" type="Variant"> </argument> <description> - Set the shape data that defines its shape and size. The data to be passed depends on the kind of shape created [method shape_get_type]. + Sets the shape data that defines its shape and size. The data to be passed depends on the kind of shape created [method shape_get_type]. </description> </method> <method name="space_create"> <return type="RID"> </return> <description> - Create a space. A space is a collection of parameters for the physics engine that can be assigned to an area or a body. It can be assigned to an area with [method area_set_space], or to a body with [method body_set_space]. + Creates a space. A space is a collection of parameters for the physics engine that can be assigned to an area or a body. It can be assigned to an area with [method area_set_space], or to a body with [method body_set_space]. </description> </method> <method name="space_get_direct_state"> @@ -893,7 +905,7 @@ <argument index="0" name="space" type="RID"> </argument> <description> - Return the state of a space, a [Physics2DDirectSpaceState]. This object can be used to make collision/intersection queries. + Returns the state of a space, a [Physics2DDirectSpaceState]. This object can be used to make collision/intersection queries. </description> </method> <method name="space_get_param" qualifiers="const"> @@ -904,7 +916,7 @@ <argument index="1" name="param" type="int" enum="Physics2DServer.SpaceParameter"> </argument> <description> - Return the value of a space parameter. + Returns the value of a space parameter. </description> </method> <method name="space_is_active" qualifiers="const"> @@ -913,7 +925,7 @@ <argument index="0" name="space" type="RID"> </argument> <description> - Return whether the space is active. + Returns whether the space is active. </description> </method> <method name="space_set_active"> @@ -924,7 +936,7 @@ <argument index="1" name="active" type="bool"> </argument> <description> - Mark a space as active. It will not have an effect, unless it is assigned to an area or body. + Marks a space as active. It will not have an effect, unless it is assigned to an area or body. </description> </method> <method name="space_set_param"> @@ -937,7 +949,7 @@ <argument index="2" name="value" type="float"> </argument> <description> - Set the value for a space parameter. A list of available parameters is on the SPACE_PARAM_* constants. + Sets the value for a space parameter. A list of available parameters is on the SPACE_PARAM_* constants. </description> </method> </methods> @@ -952,8 +964,10 @@ Constant to set/get the maximum distance a shape can penetrate another shape before it is considered a collision. </constant> <constant name="SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD" value="3"> + Constant to set/get the threshold linear velocity of activity. A body marked as potentially inactive for both linear and angular velocity will be put to sleep after the time given. </constant> <constant name="SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD" value="4"> + Constant to set/get the threshold angular velocity of activity. A body marked as potentially inactive for both linear and angular velocity will be put to sleep after the time given. </constant> <constant name="SPACE_PARAM_BODY_TIME_TO_SLEEP" value="5"> Constant to set/get the maximum time of activity. A body marked as potentially inactive for both linear and angular velocity will be put to sleep after this time. @@ -977,7 +991,7 @@ This is the constant for creating capsule shapes. A capsule shape is defined by a radius and a length. It can be used for intersections and inside/outside checks. </constant> <constant name="SHAPE_CONVEX_POLYGON" value="6"> - This is the constant for creating convex polygon shapes. A polygon is defined by a list of points. It can be used for intersections and inside/outside checks. Unlike the method [method CollisionPolygon2D.set_polygon], polygons modified with [method shape_set_data] do not verify that the points supplied form, in fact, a convex polygon. + This is the constant for creating convex polygon shapes. A polygon is defined by a list of points. It can be used for intersections and inside/outside checks. Unlike the method [method CollisionPolygon2D.set_polygon], polygons modified with [method shape_set_data] do not verify that the points supplied form is a convex polygon. </constant> <constant name="SHAPE_CONCAVE_POLYGON" value="7"> This is the constant for creating concave polygon shapes. A polygon is defined by a list of points. It can be used for intersections checks, but not for inside/outside checks. diff --git a/doc/classes/Physics2DServerSW.xml b/doc/classes/Physics2DServerSW.xml index a8645c0b96..67fd7a21d8 100644 --- a/doc/classes/Physics2DServerSW.xml +++ b/doc/classes/Physics2DServerSW.xml @@ -4,7 +4,7 @@ Software implementation of [Physics2DServer]. </brief_description> <description> - Software implementation of [Physics2DServer]. This class exposes no new methods or properties and should not be used, as [Physics2DServer] automatically selects the best implementation available. + This class exposes no new methods or properties and should not be used, as [Physics2DServer] automatically selects the best implementation available. </description> <tutorials> </tutorials> diff --git a/doc/classes/Physics2DShapeQueryParameters.xml b/doc/classes/Physics2DShapeQueryParameters.xml index 78d12e0b73..04fe12cc07 100644 --- a/doc/classes/Physics2DShapeQueryParameters.xml +++ b/doc/classes/Physics2DShapeQueryParameters.xml @@ -22,7 +22,7 @@ <return type="Array"> </return> <description> - Return the list of objects, or object [RID]\ s, that will be excluded from collisions. + Return the list of objects, or object [RID]s, that will be excluded from collisions. </description> </method> <method name="get_margin" qualifiers="const"> @@ -75,7 +75,7 @@ <argument index="0" name="exclude" type="Array"> </argument> <description> - Set the list of objects, or object [RID]\ s, that will be excluded from collisions. + Set the list of objects, or object [RID]s, that will be excluded from collisions. </description> </method> <method name="set_margin"> @@ -129,7 +129,7 @@ <argument index="0" name="transform" type="Transform2D"> </argument> <description> - Set the transormation matrix of the shape. This is necessary to set its position/rotation/scale. + Set the transformation matrix of the shape. This is necessary to set its position/rotation/scale. </description> </method> </methods> diff --git a/doc/classes/PhysicsDirectBodyState.xml b/doc/classes/PhysicsDirectBodyState.xml index de51d0e958..349b7e7c3f 100644 --- a/doc/classes/PhysicsDirectBodyState.xml +++ b/doc/classes/PhysicsDirectBodyState.xml @@ -14,7 +14,7 @@ </return> <argument index="0" name="force" type="Vector3"> </argument> - <argument index="1" name="pos" type="Vector3"> + <argument index="1" name="position" type="Vector3"> </argument> <description> </description> @@ -22,7 +22,7 @@ <method name="apply_impulse"> <return type="void"> </return> - <argument index="0" name="pos" type="Vector3"> + <argument index="0" name="position" type="Vector3"> </argument> <argument index="1" name="j" type="Vector3"> </argument> @@ -73,7 +73,7 @@ <description> </description> </method> - <method name="get_contact_collider_pos" qualifiers="const"> + <method name="get_contact_collider_position" qualifiers="const"> <return type="Vector3"> </return> <argument index="0" name="contact_idx" type="int"> @@ -89,7 +89,7 @@ <description> </description> </method> - <method name="get_contact_collider_velocity_at_pos" qualifiers="const"> + <method name="get_contact_collider_velocity_at_position" qualifiers="const"> <return type="Vector3"> </return> <argument index="0" name="contact_idx" type="int"> @@ -111,7 +111,7 @@ <description> </description> </method> - <method name="get_contact_local_pos" qualifiers="const"> + <method name="get_contact_local_position" qualifiers="const"> <return type="Vector3"> </return> <argument index="0" name="contact_idx" type="int"> diff --git a/doc/classes/PhysicsServer.xml b/doc/classes/PhysicsServer.xml index 0076625ebd..71cdd6f6df 100644 --- a/doc/classes/PhysicsServer.xml +++ b/doc/classes/PhysicsServer.xml @@ -1,8 +1,10 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="PhysicsServer" inherits="Object" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Server interface for low level physics access. </brief_description> <description> + Everything related to physics in 3D. </description> <tutorials> </tutorials> @@ -19,6 +21,7 @@ <argument index="2" name="transform" type="Transform" default="Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 )"> </argument> <description> + Adds 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. </description> </method> <method name="area_attach_object_instance_id"> @@ -29,6 +32,7 @@ <argument index="1" name="id" type="int"> </argument> <description> + Assigns the area to a descendant of [Object], so it can exist in the node tree. </description> </method> <method name="area_clear_shapes"> @@ -37,12 +41,14 @@ <argument index="0" name="area" type="RID"> </argument> <description> + Removes all shapes from an area. It does not delete the shapes, so they can be reassigned later. </description> </method> <method name="area_create"> <return type="RID"> </return> <description> + Creates an [Area]. </description> </method> <method name="area_get_object_instance_id" qualifiers="const"> @@ -51,6 +57,7 @@ <argument index="0" name="area" type="RID"> </argument> <description> + Gets the instance ID of the object the area is assigned to. </description> </method> <method name="area_get_param" qualifiers="const"> @@ -61,6 +68,7 @@ <argument index="1" name="param" type="int" enum="PhysicsServer.AreaParameter"> </argument> <description> + Returns an area parameter value. A list of available parameters is on the AREA_PARAM_* constants. </description> </method> <method name="area_get_shape" qualifiers="const"> @@ -71,6 +79,7 @@ <argument index="1" name="shape_idx" type="int"> </argument> <description> + Returns the [RID] of the nth shape of an area. </description> </method> <method name="area_get_shape_count" qualifiers="const"> @@ -79,6 +88,7 @@ <argument index="0" name="area" type="RID"> </argument> <description> + Returns the number of shapes assigned to an area. </description> </method> <method name="area_get_shape_transform" qualifiers="const"> @@ -89,6 +99,7 @@ <argument index="1" name="shape_idx" type="int"> </argument> <description> + Returns the transform matrix of a shape within an area. </description> </method> <method name="area_get_space" qualifiers="const"> @@ -97,6 +108,7 @@ <argument index="0" name="area" type="RID"> </argument> <description> + Returns the space assigned to the area. </description> </method> <method name="area_get_space_override_mode" qualifiers="const"> @@ -105,6 +117,7 @@ <argument index="0" name="area" type="RID"> </argument> <description> + Returns the space override mode for the area. </description> </method> <method name="area_get_transform" qualifiers="const"> @@ -113,6 +126,7 @@ <argument index="0" name="area" type="RID"> </argument> <description> + Returns the transform matrix for an area. </description> </method> <method name="area_is_ray_pickable" qualifiers="const"> @@ -121,6 +135,7 @@ <argument index="0" name="area" type="RID"> </argument> <description> + If [code]true[/code] area collides with rays. </description> </method> <method name="area_remove_shape"> @@ -131,6 +146,7 @@ <argument index="1" name="shape_idx" type="int"> </argument> <description> + Removes a shape from an area. It does not delete the shape, so it can be reassigned later. </description> </method> <method name="area_set_collision_layer"> @@ -141,6 +157,7 @@ <argument index="1" name="layer" type="int"> </argument> <description> + Assigns the area to one or many physics layers. </description> </method> <method name="area_set_collision_mask"> @@ -151,6 +168,7 @@ <argument index="1" name="mask" type="int"> </argument> <description> + Sets which physics layers the area will monitor. </description> </method> <method name="area_set_monitor_callback"> @@ -163,6 +181,12 @@ <argument index="2" name="method" type="String"> </argument> <description> + Sets the function to call when any body/area enters or exits the area. This callback will be called for any object interacting with the area, and takes five parameters: + 1: AREA_BODY_ADDED or AREA_BODY_REMOVED, depending on whether the object entered or exited the area. + 2: [RID] of the object that entered/exited the area. + 3: Instance ID of the object that entered/exited the area. + 4: The shape index of the object that entered/exited the area. + 5: The shape index of the area where the object entered/exited. </description> </method> <method name="area_set_param"> @@ -175,6 +199,7 @@ <argument index="2" name="value" type="Variant"> </argument> <description> + Sets the value for an area parameter. A list of available parameters is on the AREA_PARAM_* constants. </description> </method> <method name="area_set_ray_pickable"> @@ -185,6 +210,7 @@ <argument index="1" name="enable" type="bool"> </argument> <description> + Sets object pickable with rays. </description> </method> <method name="area_set_shape"> @@ -197,6 +223,7 @@ <argument index="2" name="shape" type="RID"> </argument> <description> + Substitutes a given area shape by another. The old shape is selected by its index, the new one by its [RID]. </description> </method> <method name="area_set_shape_transform"> @@ -209,6 +236,7 @@ <argument index="2" name="transform" type="Transform"> </argument> <description> + Sets the transform matrix for an area shape. </description> </method> <method name="area_set_space"> @@ -219,6 +247,7 @@ <argument index="1" name="space" type="RID"> </argument> <description> + Assigns a space to the area. </description> </method> <method name="area_set_space_override_mode"> @@ -229,6 +258,7 @@ <argument index="1" name="mode" type="int" enum="PhysicsServer.AreaSpaceOverrideMode"> </argument> <description> + Sets the space override mode for the area. The modes are described in the constants AREA_SPACE_OVERRIDE_*. </description> </method> <method name="area_set_transform"> @@ -239,6 +269,7 @@ <argument index="1" name="transform" type="Transform"> </argument> <description> + Sets the transform matrix for an area. </description> </method> <method name="body_add_collision_exception"> @@ -249,6 +280,7 @@ <argument index="1" name="excepted_body" type="RID"> </argument> <description> + Adds a body to the list of bodies exempt from collisions. </description> </method> <method name="body_add_shape"> @@ -261,6 +293,7 @@ <argument index="2" name="transform" type="Transform" default="Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 )"> </argument> <description> + Adds 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. </description> </method> <method name="body_apply_impulse"> @@ -268,11 +301,12 @@ </return> <argument index="0" name="body" type="RID"> </argument> - <argument index="1" name="pos" type="Vector3"> + <argument index="1" name="position" type="Vector3"> </argument> <argument index="2" name="impulse" type="Vector3"> </argument> <description> + Gives the body a push at a [code]position[/code] in the direction of the [code]impulse[/code]. </description> </method> <method name="body_apply_torque_impulse"> @@ -283,6 +317,7 @@ <argument index="1" name="impulse" type="Vector3"> </argument> <description> + Gives the body a push to rotate it. </description> </method> <method name="body_attach_object_instance_id"> @@ -293,6 +328,7 @@ <argument index="1" name="id" type="int"> </argument> <description> + Assigns the area to a descendant of [Object], so it can exist in the node tree. </description> </method> <method name="body_clear_shapes"> @@ -301,6 +337,7 @@ <argument index="0" name="body" type="RID"> </argument> <description> + Removes all shapes from a body. </description> </method> <method name="body_create"> @@ -311,6 +348,7 @@ <argument index="1" name="init_sleeping" type="bool" default="false"> </argument> <description> + Creates a physics body. The first parameter can be any value from constants BODY_MODE*, for the type of body created. Additionally, the body can be created in sleeping state to save processing time. </description> </method> <method name="body_get_axis_lock" qualifiers="const"> @@ -319,6 +357,7 @@ <argument index="0" name="body" type="RID"> </argument> <description> + Gets the information, which Axis is locked if any. The can be any calue from the constants BODY_AXIS_LOCK* </description> </method> <method name="body_get_collision_layer" qualifiers="const"> @@ -327,6 +366,7 @@ <argument index="0" name="body" type="RID"> </argument> <description> + Returns the physics layer or layers a body belongs to. </description> </method> <method name="body_get_collision_mask" qualifiers="const"> @@ -335,6 +375,17 @@ <argument index="0" name="body" type="RID"> </argument> <description> + Returns the physics layer or layers a body can collide with. +- + </description> + </method> + <method name="body_get_direct_state"> + <return type="PhysicsDirectBodyState"> + </return> + <argument index="0" name="body" type="RID"> + </argument> + <description> + Returns the [PhysicsDirectBodyState] of the body. </description> </method> <method name="body_get_max_contacts_reported" qualifiers="const"> @@ -343,6 +394,7 @@ <argument index="0" name="body" type="RID"> </argument> <description> + Returns the maximum contacts that can be reported. See [method body_set_max_contacts_reported]. </description> </method> <method name="body_get_mode" qualifiers="const"> @@ -351,6 +403,7 @@ <argument index="0" name="body" type="RID"> </argument> <description> + Returns the body mode. </description> </method> <method name="body_get_object_instance_id" qualifiers="const"> @@ -359,6 +412,7 @@ <argument index="0" name="body" type="RID"> </argument> <description> + Gets the instance ID of the object the area is assigned to. </description> </method> <method name="body_get_param" qualifiers="const"> @@ -369,6 +423,7 @@ <argument index="1" name="param" type="int" enum="PhysicsServer.BodyParameter"> </argument> <description> + Returns the value of a body parameter. A list of available parameters is on the BODY_PARAM_* constants. </description> </method> <method name="body_get_shape" qualifiers="const"> @@ -379,6 +434,7 @@ <argument index="1" name="shape_idx" type="int"> </argument> <description> + Returns the [RID] of the nth shape of a body. </description> </method> <method name="body_get_shape_count" qualifiers="const"> @@ -387,6 +443,7 @@ <argument index="0" name="body" type="RID"> </argument> <description> + Returns the number of shapes assigned to a body. </description> </method> <method name="body_get_shape_transform" qualifiers="const"> @@ -397,6 +454,7 @@ <argument index="1" name="shape_idx" type="int"> </argument> <description> + Returns the transform matrix of a body shape. </description> </method> <method name="body_get_space" qualifiers="const"> @@ -405,6 +463,7 @@ <argument index="0" name="body" type="RID"> </argument> <description> + Returns the [RID] of the space assigned to a body. </description> </method> <method name="body_get_state" qualifiers="const"> @@ -415,6 +474,7 @@ <argument index="1" name="state" type="int" enum="PhysicsServer.BodyState"> </argument> <description> + Returns a body state. </description> </method> <method name="body_is_continuous_collision_detection_enabled" qualifiers="const"> @@ -423,6 +483,7 @@ <argument index="0" name="body" type="RID"> </argument> <description> + If [code]true[/code] the continuous collision detection mode is enabled. </description> </method> <method name="body_is_omitting_force_integration" qualifiers="const"> @@ -431,6 +492,7 @@ <argument index="0" name="body" type="RID"> </argument> <description> + Returns whether a body uses a callback function to calculate its own physics (see [method body_set_force_integration_callback]). </description> </method> <method name="body_is_ray_pickable" qualifiers="const"> @@ -439,6 +501,7 @@ <argument index="0" name="body" type="RID"> </argument> <description> + If [code]true[/code] the body can be detected by rays </description> </method> <method name="body_remove_collision_exception"> @@ -449,6 +512,8 @@ <argument index="1" name="excepted_body" type="RID"> </argument> <description> + Removes a body from the list of bodies exempt from collisions. + Continuous collision detection tries to predict where a moving body will collide, instead of moving it and correcting its movement if it collided. </description> </method> <method name="body_remove_shape"> @@ -459,6 +524,7 @@ <argument index="1" name="shape_idx" type="int"> </argument> <description> + Removes a shape from a body. The shape is not deleted, so it can be reused afterwards. </description> </method> <method name="body_set_axis_lock"> @@ -469,6 +535,7 @@ <argument index="1" name="axis" type="int" enum="PhysicsServer.BodyAxisLock"> </argument> <description> + Locks velocity along one axis to 0 and only allows rotation along this axis, can also be set to disabled which disables this functionality. </description> </method> <method name="body_set_axis_velocity"> @@ -479,6 +546,7 @@ <argument index="1" name="axis_velocity" type="Vector3"> </argument> <description> + Sets an axis velocity. The velocity in the given vector axis will be set as the given vector length. This is useful for jumping behavior. </description> </method> <method name="body_set_collision_layer"> @@ -489,6 +557,7 @@ <argument index="1" name="layer" type="int"> </argument> <description> + Sets the physics layer or layers a body belongs to. </description> </method> <method name="body_set_collision_mask"> @@ -499,6 +568,7 @@ <argument index="1" name="mask" type="int"> </argument> <description> + Sets the physics layer or layers a body can collide with. </description> </method> <method name="body_set_enable_continuous_collision_detection"> @@ -509,6 +579,8 @@ <argument index="1" name="enable" type="bool"> </argument> <description> + If [code]true[/code] the continuous collision detection mode is enabled. + Continuous collision detection tries to predict where a moving body will collide, instead of moving it and correcting its movement if it collided. </description> </method> <method name="body_set_force_integration_callback"> @@ -523,6 +595,7 @@ <argument index="3" name="userdata" type="Variant" default="null"> </argument> <description> + Sets the function used to calculate physics for an object, if that object allows it (see [method body_set_omit_force integration]). </description> </method> <method name="body_set_max_contacts_reported"> @@ -533,6 +606,7 @@ <argument index="1" name="amount" type="int"> </argument> <description> + Sets the maximum contacts to report. Bodies can keep a log of the contacts with other bodies, this is enabled by setting the maximum amount of contacts reported to a number greater than 0. </description> </method> <method name="body_set_mode"> @@ -543,6 +617,7 @@ <argument index="1" name="mode" type="int" enum="PhysicsServer.BodyMode"> </argument> <description> + Sets the body mode, from one of the constants BODY_MODE*. </description> </method> <method name="body_set_omit_force_integration"> @@ -553,6 +628,7 @@ <argument index="1" name="enable" type="bool"> </argument> <description> + Sets whether a body uses a callback function to calculate its own physics (see [method body_set_force_integration_callback]). </description> </method> <method name="body_set_param"> @@ -565,6 +641,7 @@ <argument index="2" name="value" type="float"> </argument> <description> + Sets a body parameter. A list of available parameters is on the BODY_PARAM_* constants. </description> </method> <method name="body_set_ray_pickable"> @@ -575,6 +652,7 @@ <argument index="1" name="enable" type="bool"> </argument> <description> + Sets the body pickable with rays if [code]enabled[/code] is set. </description> </method> <method name="body_set_shape"> @@ -587,6 +665,7 @@ <argument index="2" name="shape" type="RID"> </argument> <description> + Substitutes a given body shape by another. The old shape is selected by its index, the new one by its [RID]. </description> </method> <method name="body_set_shape_transform"> @@ -599,6 +678,7 @@ <argument index="2" name="transform" type="Transform"> </argument> <description> + Sets the transform matrix for a body shape. </description> </method> <method name="body_set_space"> @@ -609,6 +689,7 @@ <argument index="1" name="space" type="RID"> </argument> <description> + Assigns a space to the body (see [method create_space]). </description> </method> <method name="body_set_state"> @@ -621,6 +702,7 @@ <argument index="2" name="value" type="Variant"> </argument> <description> + Sets a body state (see BODY_STATE* constants). </description> </method> <method name="cone_twist_joint_get_param" qualifiers="const"> @@ -631,6 +713,7 @@ <argument index="1" name="param" type="int" enum="PhysicsServer.ConeTwistJointParam"> </argument> <description> + Gets a cone_twist_joint parameter (see CONE_TWIST_JOINT* constants). </description> </method> <method name="cone_twist_joint_set_param"> @@ -643,6 +726,7 @@ <argument index="2" name="value" type="float"> </argument> <description> + Sets a cone_twist_joint parameter (see CONE_TWIST_JOINT* constants). </description> </method> <method name="free_rid"> @@ -651,6 +735,7 @@ <argument index="0" name="rid" type="RID"> </argument> <description> + Destroys any of the objects created by PhysicsServer. If the [RID] passed is not one of the objects that can be created by PhysicsServer, an error will be sent to the console. </description> </method> <method name="generic_6dof_joint_get_flag"> @@ -663,6 +748,7 @@ <argument index="2" name="flag" type="int" enum="PhysicsServer.G6DOFJointAxisFlag"> </argument> <description> + Gets a generic_6_DOF_joint flag (see G6DOF_JOINT_FLAG* constants). </description> </method> <method name="generic_6dof_joint_get_param"> @@ -675,6 +761,7 @@ <argument index="2" name="param" type="int" enum="PhysicsServer.G6DOFJointAxisParam"> </argument> <description> + Gets a generic_6_DOF_joint parameter (see G6DOF_JOINT* constants without the G6DOF_JOINT_FLAG*). </description> </method> <method name="generic_6dof_joint_set_flag"> @@ -689,6 +776,7 @@ <argument index="3" name="enable" type="bool"> </argument> <description> + Sets a generic_6_DOF_joint flag (see G6DOF_JOINT_FLAG* constants). </description> </method> <method name="generic_6dof_joint_set_param"> @@ -703,6 +791,7 @@ <argument index="3" name="value" type="float"> </argument> <description> + Sets a generic_6_DOF_joint parameter (see G6DOF_JOINT* constants without the G6DOF_JOINT_FLAG*). </description> </method> <method name="get_process_info"> @@ -711,6 +800,7 @@ <argument index="0" name="process_info" type="int" enum="PhysicsServer.ProcessInfo"> </argument> <description> + Returns an Info defined by the [ProcessInfo] input given. </description> </method> <method name="hinge_joint_get_flag" qualifiers="const"> @@ -721,6 +811,7 @@ <argument index="1" name="flag" type="int" enum="PhysicsServer.HingeJointFlag"> </argument> <description> + Gets a hinge_joint flag (see HINGE_JOINT_FLAG* constants). </description> </method> <method name="hinge_joint_get_param" qualifiers="const"> @@ -731,6 +822,7 @@ <argument index="1" name="param" type="int" enum="PhysicsServer.HingeJointParam"> </argument> <description> + Gets a hinge_joint parameter (see HINGE_JOINT* constants without the HINGE_JOINT_FLAG*). </description> </method> <method name="hinge_joint_set_flag"> @@ -743,6 +835,7 @@ <argument index="2" name="enabled" type="bool"> </argument> <description> + Sets a hinge_joint flag (see HINGE_JOINT_FLAG* constants). </description> </method> <method name="hinge_joint_set_param"> @@ -755,6 +848,7 @@ <argument index="2" name="value" type="float"> </argument> <description> + Sets a hinge_joint parameter (see HINGE_JOINT* constants without the HINGE_JOINT_FLAG*). </description> </method> <method name="joint_create_cone_twist"> @@ -769,6 +863,7 @@ <argument index="3" name="local_ref_B" type="Transform"> </argument> <description> + Creates a [ConeTwistJoint]. </description> </method> <method name="joint_create_generic_6dof"> @@ -783,6 +878,7 @@ <argument index="3" name="local_ref_B" type="Transform"> </argument> <description> + Creates a [Generic6DOFJoint]. </description> </method> <method name="joint_create_hinge"> @@ -797,6 +893,7 @@ <argument index="3" name="hinge_B" type="Transform"> </argument> <description> + Creates a [HingeJoint]. </description> </method> <method name="joint_create_pin"> @@ -811,6 +908,7 @@ <argument index="3" name="local_B" type="Vector3"> </argument> <description> + Creates a [PinJoint]. </description> </method> <method name="joint_create_slider"> @@ -825,6 +923,7 @@ <argument index="3" name="local_ref_B" type="Transform"> </argument> <description> + Creates a [SliderJoint]. </description> </method> <method name="joint_get_solver_priority" qualifiers="const"> @@ -833,6 +932,7 @@ <argument index="0" name="joint" type="RID"> </argument> <description> + Gets the priority value of the Joint. </description> </method> <method name="joint_get_type" qualifiers="const"> @@ -841,6 +941,7 @@ <argument index="0" name="joint" type="RID"> </argument> <description> + Returns the type of the Joint. </description> </method> <method name="joint_set_solver_priority"> @@ -851,6 +952,7 @@ <argument index="1" name="priority" type="int"> </argument> <description> + Sets the priority value of the Joint. </description> </method> <method name="pin_joint_get_local_a" qualifiers="const"> @@ -859,6 +961,7 @@ <argument index="0" name="joint" type="RID"> </argument> <description> + Returns position of the joint in the local space of body a of the joint. </description> </method> <method name="pin_joint_get_local_b" qualifiers="const"> @@ -867,6 +970,7 @@ <argument index="0" name="joint" type="RID"> </argument> <description> + Returns position of the joint in the local space of body b of the joint. </description> </method> <method name="pin_joint_get_param" qualifiers="const"> @@ -877,6 +981,7 @@ <argument index="1" name="param" type="int" enum="PhysicsServer.PinJointParam"> </argument> <description> + Gets a pin_joint parameter (see PIN_JOINT* constants). </description> </method> <method name="pin_joint_set_local_a"> @@ -887,6 +992,7 @@ <argument index="1" name="local_A" type="Vector3"> </argument> <description> + Sets position of the joint in the local space of body a of the joint. </description> </method> <method name="pin_joint_set_local_b"> @@ -897,6 +1003,7 @@ <argument index="1" name="local_B" type="Vector3"> </argument> <description> + Sets position of the joint in the local space of body b of the joint. </description> </method> <method name="pin_joint_set_param"> @@ -909,6 +1016,7 @@ <argument index="2" name="value" type="float"> </argument> <description> + Sets a pin_joint parameter (see PIN_JOINT* constants). </description> </method> <method name="set_active"> @@ -917,6 +1025,7 @@ <argument index="0" name="active" type="bool"> </argument> <description> + Activates or deactivates the 3D physics engine. </description> </method> <method name="shape_create"> @@ -925,6 +1034,7 @@ <argument index="0" name="type" type="int" enum="PhysicsServer.ShapeType"> </argument> <description> + Creates a shape of type SHAPE_*. Does not assign it to a body or an area. To do so, you must use [method area_set_shape] or [method body_set_shape]. </description> </method> <method name="shape_get_data" qualifiers="const"> @@ -933,6 +1043,7 @@ <argument index="0" name="shape" type="RID"> </argument> <description> + Returns the shape data. </description> </method> <method name="shape_get_type" qualifiers="const"> @@ -941,6 +1052,7 @@ <argument index="0" name="shape" type="RID"> </argument> <description> + Returns the type of shape (see SHAPE_* constants). </description> </method> <method name="shape_set_data"> @@ -951,6 +1063,7 @@ <argument index="1" name="data" type="Variant"> </argument> <description> + Sets the shape data that defines its shape and size. The data to be passed depends on the kind of shape created [method shape_get_type]. </description> </method> <method name="slider_joint_get_param" qualifiers="const"> @@ -961,6 +1074,7 @@ <argument index="1" name="param" type="int" enum="PhysicsServer.SliderJointParam"> </argument> <description> + Gets a slider_joint parameter (see SLIDER_JOINT* constants). </description> </method> <method name="slider_joint_set_param"> @@ -973,12 +1087,14 @@ <argument index="2" name="value" type="float"> </argument> <description> + Gets a slider_joint parameter (see SLIDER_JOINT* constants). </description> </method> <method name="space_create"> <return type="RID"> </return> <description> + Creates a space. A space is a collection of parameters for the physics engine that can be assigned to an area or a body. It can be assigned to an area with [method area_set_space], or to a body with [method body_set_space]. </description> </method> <method name="space_get_direct_state"> @@ -987,6 +1103,7 @@ <argument index="0" name="space" type="RID"> </argument> <description> + Returns the state of a space, a [PhysicsDirectSpaceState]. This object can be used to make collision/intersection queries. </description> </method> <method name="space_get_param" qualifiers="const"> @@ -997,6 +1114,7 @@ <argument index="1" name="param" type="int" enum="PhysicsServer.SpaceParameter"> </argument> <description> + Returns the value of a space parameter. </description> </method> <method name="space_is_active" qualifiers="const"> @@ -1005,6 +1123,7 @@ <argument index="0" name="space" type="RID"> </argument> <description> + Returns whether the space is active. </description> </method> <method name="space_set_active"> @@ -1015,6 +1134,7 @@ <argument index="1" name="active" type="bool"> </argument> <description> + Marks a space as active. It will not have an effect, unless it is assigned to an area or body. </description> </method> <method name="space_set_param"> @@ -1027,169 +1147,256 @@ <argument index="2" name="value" type="float"> </argument> <description> + Sets the value for a space parameter. A list of available parameters is on the SPACE_PARAM_* constants. </description> </method> </methods> <constants> <constant name="JOINT_PIN" value="0"> + The [Joint] is a [PinJoint]. </constant> <constant name="JOINT_HINGE" value="1"> + The [Joint] is a [HingeJoint]. </constant> <constant name="JOINT_SLIDER" value="2"> + The [Joint] is a [SliderJoint]. </constant> <constant name="JOINT_CONE_TWIST" value="3"> + The [Joint] is a [ConeTwistJoint]. </constant> <constant name="JOINT_6DOF" value="4"> + The [Joint] is a [Generic6DOFJoint]. </constant> <constant name="PIN_JOINT_BIAS" value="0"> + The strength with which the pinned objects try to stay in positional relation to each other. + The higher, the stronger. </constant> <constant name="PIN_JOINT_DAMPING" value="1"> + The strength with which the pinned objects try to stay in velocity relation to each other. + The higher, the stronger. </constant> <constant name="PIN_JOINT_IMPULSE_CLAMP" value="2"> + If above 0, this value is the maximum value for an impulse that this Joint puts on it's ends. </constant> <constant name="HINGE_JOINT_BIAS" value="0"> + The speed with wich the two bodies get pulled together when they move in different directions. </constant> <constant name="HINGE_JOINT_LIMIT_UPPER" value="1"> + The maximum rotation across the Hinge. </constant> <constant name="HINGE_JOINT_LIMIT_LOWER" value="2"> + The minimum rotation across the Hinge. </constant> <constant name="HINGE_JOINT_LIMIT_BIAS" value="3"> + The speed with which the rotation across the axis perpendicular to the hinge gets corrected. </constant> <constant name="HINGE_JOINT_LIMIT_SOFTNESS" value="4"> </constant> <constant name="HINGE_JOINT_LIMIT_RELAXATION" value="5"> + The lower this value, the more the rotation gets slowed down. </constant> <constant name="HINGE_JOINT_MOTOR_TARGET_VELOCITY" value="6"> + Target speed for the motor. </constant> <constant name="HINGE_JOINT_MOTOR_MAX_IMPULSE" value="7"> + Maximum acceleration for the motor. </constant> <constant name="HINGE_JOINT_FLAG_USE_LIMIT" value="0"> + If [code]true[/code] the Hinge has a maximum and a minimum rotation. </constant> <constant name="HINGE_JOINT_FLAG_ENABLE_MOTOR" value="1"> + If [code]true[/code] a motor turns the Hinge </constant> <constant name="SLIDER_JOINT_LINEAR_LIMIT_UPPER" value="0"> + The maximum difference between the pivot points on their x-axis before damping happens. </constant> <constant name="SLIDER_JOINT_LINEAR_LIMIT_LOWER" value="1"> + The minimum difference between the pivot points on their x-axis before damping happens. </constant> <constant name="SLIDER_JOINT_LINEAR_LIMIT_SOFTNESS" value="2"> + A factor applied to the movement accross the slider axis once the limits get surpassed. The lower, the slower the movement. </constant> <constant name="SLIDER_JOINT_LINEAR_LIMIT_RESTITUTION" value="3"> + The amount of restitution once the limits are surpassed. The lower, the more velocityenergy gets lost. </constant> <constant name="SLIDER_JOINT_LINEAR_LIMIT_DAMPING" value="4"> + The amount of damping once the slider limits are surpassed. </constant> <constant name="SLIDER_JOINT_LINEAR_MOTION_SOFTNESS" value="5"> + A factor applied to the movement accross the slider axis as long as the slider is in the limits. The lower, the slower the movement. </constant> <constant name="SLIDER_JOINT_LINEAR_MOTION_RESTITUTION" value="6"> + The amount of restitution inside the slider limits. </constant> <constant name="SLIDER_JOINT_LINEAR_MOTION_DAMPING" value="7"> + The amount of damping inside the slider limits. </constant> <constant name="SLIDER_JOINT_LINEAR_ORTHOGONAL_SOFTNESS" value="8"> + A factor applied to the movement accross axes orthogonal to the slider. </constant> <constant name="SLIDER_JOINT_LINEAR_ORTHOGONAL_RESTITUTION" value="9"> + The amount of restitution when movement is accross axes orthogonal to the slider. </constant> <constant name="SLIDER_JOINT_LINEAR_ORTHOGONAL_DAMPING" value="10"> + The amount of damping when movement is accross axes orthogonal to the slider. </constant> <constant name="SLIDER_JOINT_ANGULAR_LIMIT_UPPER" value="11"> + The upper limit of rotation in the slider. </constant> <constant name="SLIDER_JOINT_ANGULAR_LIMIT_LOWER" value="12"> + The lower limit of rotation in the slider. </constant> <constant name="SLIDER_JOINT_ANGULAR_LIMIT_SOFTNESS" value="13"> + A factor applied to the all rotation once the limit is surpassed. </constant> <constant name="SLIDER_JOINT_ANGULAR_LIMIT_RESTITUTION" value="14"> + The amount of restitution of the rotation when the limit is surpassed. </constant> <constant name="SLIDER_JOINT_ANGULAR_LIMIT_DAMPING" value="15"> + The amount of damping of the rotation when the limit is surpassed. </constant> <constant name="SLIDER_JOINT_ANGULAR_MOTION_SOFTNESS" value="16"> + A factor that gets applied to the all rotation in the limits. </constant> <constant name="SLIDER_JOINT_ANGULAR_MOTION_RESTITUTION" value="17"> + The amount of restitution of the rotation in the limits. </constant> <constant name="SLIDER_JOINT_ANGULAR_MOTION_DAMPING" value="18"> + The amount of damping of the rotation in the limits. </constant> <constant name="SLIDER_JOINT_ANGULAR_ORTHOGONAL_SOFTNESS" value="19"> + A factor that gets applied to the all rotation across axes orthogonal to the slider. </constant> <constant name="SLIDER_JOINT_ANGULAR_ORTHOGONAL_RESTITUTION" value="20"> + The amount of restitution of the rotation across axes orthogonal to the slider. </constant> <constant name="SLIDER_JOINT_ANGULAR_ORTHOGONAL_DAMPING" value="21"> + The amount of damping of the rotation across axes orthogonal to the slider. </constant> <constant name="SLIDER_JOINT_MAX" value="22"> + End flag of SLIDER_JOINT_* constants, used internally. </constant> <constant name="CONE_TWIST_JOINT_SWING_SPAN" value="0"> + Swing is rotation from side to side, around the axis perpendicular to the twist axis. + The swing span defines, how much rotation will not get corrected allong the swing axis. + Could be defined as looseness in the [ConeTwistJoint]. + If below 0.05, this behaviour is locked. Default value: [code]PI/4[/code]. </constant> <constant name="CONE_TWIST_JOINT_TWIST_SPAN" value="1"> + Twist is the rotation around the twist axis, this value defined how far the joint can twist. + Twist is locked if below 0.05. </constant> <constant name="CONE_TWIST_JOINT_BIAS" value="2"> + The speed with which the swing or twist will take place. + The higher, the faster. </constant> <constant name="CONE_TWIST_JOINT_SOFTNESS" value="3"> + The ease with which the Joint twists, if it's too low, it takes more force to twist the joint. </constant> <constant name="CONE_TWIST_JOINT_RELAXATION" value="4"> + Defines, how fast the swing- and twist-speed-difference on both sides gets synced. </constant> <constant name="G6DOF_JOINT_LINEAR_LOWER_LIMIT" value="0"> + The minimum difference between the pivot points' axes. </constant> <constant name="G6DOF_JOINT_LINEAR_UPPER_LIMIT" value="1"> + The maximum difference between the pivot points' axes. </constant> <constant name="G6DOF_JOINT_LINEAR_LIMIT_SOFTNESS" value="2"> + A factor that gets applied to the movement accross the axes. The lower, the slower the movement. </constant> <constant name="G6DOF_JOINT_LINEAR_RESTITUTION" value="3"> + The amount of restitution on the axes movement. The lower, the more velocity-energy gets lost. </constant> <constant name="G6DOF_JOINT_LINEAR_DAMPING" value="4"> + The amount of damping that happens at the linear motion across the axes. </constant> <constant name="G6DOF_JOINT_ANGULAR_LOWER_LIMIT" value="5"> + The minimum rotation in negative direction to break loose and rotate arround the axes. </constant> <constant name="G6DOF_JOINT_ANGULAR_UPPER_LIMIT" value="6"> + The minimum rotation in positive direction to break loose and rotate arround the axes. </constant> <constant name="G6DOF_JOINT_ANGULAR_LIMIT_SOFTNESS" value="7"> + A factor that gets multiplied onto all rotations accross the axes. </constant> <constant name="G6DOF_JOINT_ANGULAR_DAMPING" value="8"> + The amount of rotational damping accross the axes. The lower, the more dampening occurs. </constant> <constant name="G6DOF_JOINT_ANGULAR_RESTITUTION" value="9"> + The amount of rotational restitution accross the axes. The lower, the more restitution occurs. </constant> <constant name="G6DOF_JOINT_ANGULAR_FORCE_LIMIT" value="10"> + The maximum amount of force that can occur, when rotating arround the axes. </constant> <constant name="G6DOF_JOINT_ANGULAR_ERP" value="11"> + When correcting the crossing of limits in rotation accross the axes, this error tolerance factor defines how much the correction gets slowed down. The lower, the slower. </constant> <constant name="G6DOF_JOINT_ANGULAR_MOTOR_TARGET_VELOCITY" value="12"> + Target speed for the motor at the axes. </constant> <constant name="G6DOF_JOINT_ANGULAR_MOTOR_FORCE_LIMIT" value="13"> + Maximum acceleration for the motor at the axes. </constant> <constant name="G6DOF_JOINT_FLAG_ENABLE_LINEAR_LIMIT" value="0"> + If [code]set[/code] there is linear motion possible within the given limits. </constant> <constant name="G6DOF_JOINT_FLAG_ENABLE_ANGULAR_LIMIT" value="1"> + If [code]set[/code] there is rotational motion possible. </constant> <constant name="G6DOF_JOINT_FLAG_ENABLE_MOTOR" value="2"> + If [code]set[/code] there is a rotational motor across these axes. </constant> <constant name="SHAPE_PLANE" value="0"> + The [Shape] is a [PlaneShape]. </constant> <constant name="SHAPE_RAY" value="1"> + The [Shape] is a [RayShape]. </constant> <constant name="SHAPE_SPHERE" value="2"> + The [Shape] is a [SphereShape]. </constant> <constant name="SHAPE_BOX" value="3"> + The [Shape] is a [BoxShape]. </constant> <constant name="SHAPE_CAPSULE" value="4"> + The [Shape] is a [CapsuleShape]. </constant> <constant name="SHAPE_CONVEX_POLYGON" value="5"> + The [Shape] is a [ConvexPolygonShape]. </constant> <constant name="SHAPE_CONCAVE_POLYGON" value="6"> + The [Shape] is a [ConcavePolygonShape]. </constant> <constant name="SHAPE_HEIGHTMAP" value="7"> + The [Shape] is a [HeightMapShape]. </constant> <constant name="SHAPE_CUSTOM" value="8"> + This constant is used internally by the engine. Any attempt to create this kind of shape results in an error. </constant> <constant name="AREA_PARAM_GRAVITY" value="0"> + Constant to set/get gravity strength in an area. </constant> <constant name="AREA_PARAM_GRAVITY_VECTOR" value="1"> + Constant to set/get gravity vector/center in an area. </constant> <constant name="AREA_PARAM_GRAVITY_IS_POINT" value="2"> + Constant to set/get whether the gravity vector of an area is a direction, or a center point. </constant> <constant name="AREA_PARAM_GRAVITY_DISTANCE_SCALE" value="3"> + Constant to set/get the falloff factor for point gravity of an area. The greater this value is, the faster the strength of gravity decreases with the square of distance. </constant> <constant name="AREA_PARAM_GRAVITY_POINT_ATTENUATION" value="4"> + This constant was used to set/get the falloff factor for point gravity. It has been superseded by AREA_PARAM_GRAVITY_DISTANCE_SCALE. </constant> <constant name="AREA_PARAM_LINEAR_DAMP" value="5"> + Constant to set/get the linear dampening factor of an area. </constant> <constant name="AREA_PARAM_ANGULAR_DAMP" value="6"> + Constant to set/get the angular dampening factor of an area. </constant> <constant name="AREA_PARAM_PRIORITY" value="7"> + Constant to set/get the priority (order of processing) of an area. </constant> <constant name="AREA_SPACE_OVERRIDE_DISABLED" value="0"> This area does not affect gravity/damp. These are generally areas that exist only to detect collisions, and objects entering or exiting them. @@ -1207,70 +1414,102 @@ This area replaces any gravity/damp calculated so far, but keeps calculating the rest of the areas, down to the default one. </constant> <constant name="BODY_MODE_STATIC" value="0"> + Constant for static bodies. </constant> <constant name="BODY_MODE_KINEMATIC" value="1"> + Constant for kinematic bodies. </constant> <constant name="BODY_MODE_RIGID" value="2"> + Constant for rigid bodies. </constant> <constant name="BODY_MODE_CHARACTER" value="3"> + Constant for rigid bodies in character mode. In this mode, a body can not rotate, and only its linear velocity is affected by physics. </constant> <constant name="BODY_PARAM_BOUNCE" value="0"> + Constant to set/get a body's bounce factor. </constant> <constant name="BODY_PARAM_FRICTION" value="1"> + Constant to set/get a body's friction. </constant> <constant name="BODY_PARAM_MASS" value="2"> + Constant to set/get a body's mass. </constant> <constant name="BODY_PARAM_GRAVITY_SCALE" value="3"> + Constant to set/get a body's gravity multiplier. </constant> <constant name="BODY_PARAM_ANGULAR_DAMP" value="5"> + Constant to set/get a body's angular dampening factor. </constant> <constant name="BODY_PARAM_LINEAR_DAMP" value="4"> + Constant to set/get a body's linear dampening factor. </constant> <constant name="BODY_PARAM_MAX" value="6"> + This is the last ID for body parameters. Any attempt to set this property is ignored. Any attempt to get it returns 0. </constant> <constant name="BODY_STATE_TRANSFORM" value="0"> + Constant to set/get the current transform matrix of the body. </constant> <constant name="BODY_STATE_LINEAR_VELOCITY" value="1"> + Constant to set/get the current linear velocity of the body. </constant> <constant name="BODY_STATE_ANGULAR_VELOCITY" value="2"> + Constant to set/get the current angular velocity of the body. </constant> <constant name="BODY_STATE_SLEEPING" value="3"> + Constant to sleep/wake up a body, or to get whether it is sleeping. </constant> <constant name="BODY_STATE_CAN_SLEEP" value="4"> + Constant to set/get whether the body can sleep. </constant> <constant name="AREA_BODY_ADDED" value="0"> + The value of the first parameter and area callback function receives, when an object enters one of its shapes. </constant> <constant name="AREA_BODY_REMOVED" value="1"> + The value of the first parameter and area callback function receives, when an object exits one of its shapes. </constant> <constant name="INFO_ACTIVE_OBJECTS" value="0"> + Constant to get the number of objects that are not sleeping. </constant> <constant name="INFO_COLLISION_PAIRS" value="1"> + Constant to get the number of possible collisions. </constant> <constant name="INFO_ISLAND_COUNT" value="2"> + Constant to get the number of space regions where a collision could occur. </constant> <constant name="SPACE_PARAM_CONTACT_RECYCLE_RADIUS" value="0"> + Constant to set/get the maximum distance a pair of bodies has to move before their collision status has to be recalculated. </constant> <constant name="SPACE_PARAM_CONTACT_MAX_SEPARATION" value="1"> + Constant to set/get the maximum distance a shape can be from another before they are considered separated. </constant> <constant name="SPACE_PARAM_BODY_MAX_ALLOWED_PENETRATION" value="2"> + Constant to set/get the maximum distance a shape can penetrate another shape before it is considered a collision. </constant> <constant name="SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD" value="3"> + Constant to set/get the threshold linear velocity of activity. A body marked as potentially inactive for both linear and angular velocity will be put to sleep after the time given. </constant> <constant name="SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD" value="4"> + Constant to set/get the threshold angular velocity of activity. A body marked as potentially inactive for both linear and angular velocity will be put to sleep after the time given. </constant> <constant name="SPACE_PARAM_BODY_TIME_TO_SLEEP" value="5"> + Constant to set/get the maximum time of activity. A body marked as potentially inactive for both linear and angular velocity will be put to sleep after this time. </constant> <constant name="SPACE_PARAM_BODY_ANGULAR_VELOCITY_DAMP_RATIO" value="6"> </constant> <constant name="SPACE_PARAM_CONSTRAINT_DEFAULT_BIAS" value="7"> + Constant to set/get the default solver bias for all physics constraints. A solver bias is a factor controlling how much two objects "rebound", after violating a constraint, to avoid leaving them in that state because of numerical imprecision. </constant> <constant name="BODY_AXIS_LOCK_DISABLED" value="0"> + The [Body] can rotate and move freely. </constant> <constant name="BODY_AXIS_LOCK_X" value="1"> + The [Body] cannot move across x axis can only rotate across x axis. </constant> <constant name="BODY_AXIS_LOCK_Y" value="2"> + The [Body] cannot move across y axis can only rotate across y axis. </constant> <constant name="BODY_AXIS_LOCK_Z" value="3"> + The [Body] cannot move across z axis can only rotate across z axis. </constant> </constants> </class> diff --git a/doc/classes/PhysicsServerSW.xml b/doc/classes/PhysicsServerSW.xml index 7bffc23258..53e1c0057e 100644 --- a/doc/classes/PhysicsServerSW.xml +++ b/doc/classes/PhysicsServerSW.xml @@ -1,8 +1,10 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="PhysicsServerSW" inherits="PhysicsServer" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Software implementation of [PhysicsServer]. </brief_description> <description> + This class exposes no new methods or properties and should not be used, as [PhysicsServer] automatically selects the best implementation available. </description> <tutorials> </tutorials> diff --git a/doc/classes/PinJoint.xml b/doc/classes/PinJoint.xml index 22aa35a0a4..1cc381b1b3 100644 --- a/doc/classes/PinJoint.xml +++ b/doc/classes/PinJoint.xml @@ -1,8 +1,10 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="PinJoint" inherits="Joint" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Pin Joint for 3D Shapes. </brief_description> <description> + Pin Joint for 3D Rigid Bodies. It pins 2 bodies (rigid or static) together. </description> <tutorials> </tutorials> @@ -30,18 +32,28 @@ </methods> <members> <member name="params/bias" type="float" setter="set_param" getter="get_param"> + The force with wich the pinned objects stay in positional relation to each other. + The higher, the stronger. </member> <member name="params/damping" type="float" setter="set_param" getter="get_param"> + The force with wich the pinned objects stay in velocity relation to each other. + The higher, the stronger. </member> <member name="params/impulse_clamp" type="float" setter="set_param" getter="get_param"> + If above 0, this value is the maximum value for an impulse that this Joint produces. </member> </members> <constants> <constant name="PARAM_BIAS" value="0"> + The force with wich the pinned objects stay in positional relation to each other. + The higher, the stronger. </constant> <constant name="PARAM_DAMPING" value="1"> + The force with wich the pinned objects stay in velocity relation to each other. + The higher, the stronger. </constant> <constant name="PARAM_IMPULSE_CLAMP" value="2"> + If above 0, this value is the maximum value for an impulse that this Joint produces. </constant> </constants> </class> diff --git a/doc/classes/PinJoint2D.xml b/doc/classes/PinJoint2D.xml index 826a1684a4..009b0ec2f2 100644 --- a/doc/classes/PinJoint2D.xml +++ b/doc/classes/PinJoint2D.xml @@ -28,6 +28,7 @@ </methods> <members> <member name="softness" type="float" setter="set_softness" getter="get_softness"> + The higher this value, the more the bond to the pinned partner can flex. </member> </members> <constants> diff --git a/doc/classes/PluginScript.xml b/doc/classes/PluginScript.xml new file mode 100644 index 0000000000..334921016b --- /dev/null +++ b/doc/classes/PluginScript.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<class name="PluginScript" inherits="Script" category="Core" version="3.0.alpha.custom_build"> + <brief_description> + </brief_description> + <description> + </description> + <tutorials> + </tutorials> + <demos> + </demos> + <methods> + </methods> + <constants> + </constants> +</class> diff --git a/doc/classes/Polygon2D.xml b/doc/classes/Polygon2D.xml index 05869c514e..23cb9bd91b 100644 --- a/doc/classes/Polygon2D.xml +++ b/doc/classes/Polygon2D.xml @@ -1,10 +1,10 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="Polygon2D" inherits="Node2D" category="Core" version="3.0.alpha.custom_build"> <brief_description> - 2D polygon representation + A 2D polygon. </brief_description> <description> - A Polygon2D is defined by a set of n vertices connected together by line segments, meaning that the vertex 1 will be connected with vertex 2, vertex 2 with vertex 3 ..., vertex n-1 with vertex n and vertex n with vertex 1 in order to close the loop and define a polygon. + A Polygon2D is defined by a set of points. Each point is connected to the next, with the final point being connected to the first, resulting in a closed polygon. Polygon2Ds can be filled with color (solid or gradient) or filled with a given texture. </description> <tutorials> </tutorials> @@ -204,28 +204,40 @@ </methods> <members> <member name="antialiased" type="bool" setter="set_antialiased" getter="get_antialiased"> + If [code]true[/code] polygon edges will be anti-aliased. Default value: [code]false[/code]. </member> <member name="color" type="Color" setter="set_color" getter="get_color"> + The polygon's fill color. If [code]texture[/code] is defined, it will be multiplied by this color. It will also be the default color for vertices not set in [code]vertex_colors[/code]. </member> <member name="invert_border" type="float" setter="set_invert_border" getter="get_invert_border"> + Added padding applied to the bounding box when using [code]invert[/code]. Setting this value too small may result in a "Bad Polygon" error. Default value: [code]100[/code]. </member> <member name="invert_enable" type="bool" setter="set_invert" getter="get_invert"> + If [code]true[/code] polygon will be inverted, containing the area outside the defined points and extending to the [code]invert_border[/code]. Default value: [code]false[/code]. </member> <member name="offset" type="Vector2" setter="set_offset" getter="get_offset"> + The offset applied to each vertex. </member> <member name="polygon" type="PoolVector2Array" setter="set_polygon" getter="get_polygon"> + The polygon's list of vertices. The final point will be connected to the first. </member> <member name="texture" type="Texture" setter="set_texture" getter="get_texture"> + The polygon's fill texture. Use [code]uv[/code] to set texture coordinates. </member> <member name="texture_offset" type="Vector2" setter="set_texture_offset" getter="get_texture_offset"> + Amount to offset the polygon's [code]texture[/code]. If [code](0, 0)[/code] the texture's origin (its top-left corner) will be placed at the polygon's [code]position[/code]. </member> <member name="texture_rotation" type="float" setter="_set_texture_rotationd" getter="_get_texture_rotationd"> + The texture's rotation in degrees. </member> <member name="texture_scale" type="Vector2" setter="set_texture_scale" getter="get_texture_scale"> + Amount to multiply the [code]uv[/code] coordinates when using a [code]texture[/code]. Larger values make the texture smaller, and vice versa. </member> <member name="uv" type="PoolVector2Array" setter="set_uv" getter="get_uv"> + Texture coordinates for each vertex of the polygon. There should be one [code]uv[/code] per polygon vertex. If there are fewer, undefined vertices will use [code](0, 0)[/code]. </member> <member name="vertex_colors" type="PoolColorArray" setter="set_vertex_colors" getter="get_vertex_colors"> + Color for each vertex. Colors are interpolated between vertices, resulting in smooth gradients. There should be one per polygon vertex. If there are fewer, undefined vertices will use [code]color[/code]. </member> </members> <constants> diff --git a/doc/classes/ProjectSettings.xml b/doc/classes/ProjectSettings.xml index bec9525a45..bdf2cc0062 100644 --- a/doc/classes/ProjectSettings.xml +++ b/doc/classes/ProjectSettings.xml @@ -51,6 +51,14 @@ Return the order of a configuration value (influences when saved to the config file). </description> </method> + <method name="get_setting" qualifiers="const"> + <return type="Variant"> + </return> + <argument index="0" name="name" type="String"> + </argument> + <description> + </description> + </method> <method name="get_singleton" qualifiers="const"> <return type="Object"> </return> @@ -68,7 +76,7 @@ Convert a localized path (res://) to a full native OS path. </description> </method> - <method name="has" qualifiers="const"> + <method name="has_setting" qualifiers="const"> <return type="bool"> </return> <argument index="0" name="name" type="String"> @@ -147,12 +155,22 @@ </return> <argument index="0" name="name" type="String"> </argument> - <argument index="1" name="pos" type="int"> + <argument index="1" name="position" type="int"> </argument> <description> Set the order of a configuration value (influences when saved to the config file). </description> </method> + <method name="set_setting"> + <return type="void"> + </return> + <argument index="0" name="name" type="String"> + </argument> + <argument index="1" name="value" type="Variant"> + </argument> + <description> + </description> + </method> </methods> <constants> </constants> diff --git a/doc/classes/Range.xml b/doc/classes/Range.xml index 9af6abf7b8..cd75c2b658 100644 --- a/doc/classes/Range.xml +++ b/doc/classes/Range.xml @@ -138,29 +138,38 @@ <argument index="0" name="with" type="Node"> </argument> <description> + Binds two Ranges together along with any Ranges previously grouped with either of them. When any of Range's member variables change, it will share the new value with all other Ranges in its group. </description> </method> <method name="unshare"> <return type="void"> </return> <description> + Stop Range from sharing its member variables with any other Range. </description> </method> </methods> <members> <member name="exp_edit" type="bool" setter="set_exp_ratio" getter="is_ratio_exp"> + If [code]true[/code] and [code]min_value[/code] is greater than 0, [code]value[/code] will be represented exponentially rather than linearly. </member> <member name="max_value" type="float" setter="set_max" getter="get_max"> + Maximum value. Range is clamped if [code]value[/code] is greater than [code]max_value[/code]. Default value: 100. </member> <member name="min_value" type="float" setter="set_min" getter="get_min"> + Minimum value. Range is clamped if [code]value[/code] is less than [code]min_value[/code]. Default value: 0. </member> <member name="page" type="float" setter="set_page" getter="get_page"> + Page size. Used mainly for [ScrollBar]. ScrollBar's length is its size multiplied by [code]page[/code] over the difference between [code]min_value[/code] and [code]max_value[/code]. </member> <member name="rounded" type="bool" setter="set_use_rounded_values" getter="is_using_rounded_values"> + If [code]true[/code], [code]value[/code] will always be rounded to the nearest integer. </member> <member name="step" type="float" setter="set_step" getter="get_step"> + If greater than 0, [code]value[/code] will always be rounded to a multiple of [code]step[/code]. If [code]rounded[/code] is also [code]true[/code], [code]value[/code] will first be rounded to a multiple of [code]step[/code] then rounded to the nearest integer. </member> <member name="value" type="float" setter="set_value" getter="get_value"> + Range's current value. </member> </members> <signals> diff --git a/doc/classes/RayCast.xml b/doc/classes/RayCast.xml index 2e6efff769..fc96a183eb 100644 --- a/doc/classes/RayCast.xml +++ b/doc/classes/RayCast.xml @@ -5,12 +5,9 @@ </brief_description> <description> A RayCast represents a line from its origin to its destination position, [code]cast_to[/code]. It is used to query the 3D space in order to find the closest object along the path of the ray. - RayCast can ignore some objects by adding them to the exception list via [code]add_exception[/code], by setting proper filtering with collision layers, or by filtering object types with type masks. - Only enabled raycasts will be able to query the space and report collisions. - - RayCast calculates intersection every fixed frame (see [Node]), and the result is cached so it can be used later until the next frame. If multiple queries are required between fixed frames (or during the same frame) use [method force_raycast_update] after adjusting the raycast. + RayCast calculates intersection every physics frame (see [Node]), and the result is cached so it can be used later until the next frame. If multiple queries are required between physics frames (or during the same frame) use [method force_raycast_update] after adjusting the raycast. </description> <tutorials> </tutorials> @@ -47,7 +44,7 @@ </return> <description> Updates the collision information for the ray. - Use this method to update the collision information immediately instead of waiting for the next [code]_fixed_process[/code] call, for example if the ray or its parent has changed state. Note: [code]enabled == true[/code] is not required for this to work. + Use this method to update the collision information immediately instead of waiting for the next [code]_physics_process[/code] call, for example if the ray or its parent has changed state. Note: [code]enabled == true[/code] is not required for this to work. </description> </method> <method name="get_cast_to" qualifiers="const"> @@ -81,11 +78,11 @@ [/codeblock] </description> </method> - <method name="get_collision_layer" qualifiers="const"> + <method name="get_collision_mask" qualifiers="const"> <return type="int"> </return> <description> - Returns the collision layer for this ray. + Returns the collision mask for this ray. </description> </method> <method name="get_collision_normal" qualifiers="const"> @@ -150,13 +147,13 @@ Sets the ray destination point, so that the ray will test from the ray's origin to [code]local_point[/code]. </description> </method> - <method name="set_collision_layer"> + <method name="set_collision_mask"> <return type="void"> </return> - <argument index="0" name="layer" type="int"> + <argument index="0" name="mask" type="int"> </argument> <description> - Set the mask to filter objects. Only objects with at least the same mask element set will be detected. + Set the mask to filter objects. Only objects in at least one collision layer enabled in the mask will be detected. </description> </method> <method name="set_enabled"> @@ -182,8 +179,8 @@ <member name="cast_to" type="Vector3" setter="set_cast_to" getter="get_cast_to"> The ray's destination point, relative to the RayCast's [code]position[/code]. </member> - <member name="collision_layer" type="int" setter="set_collision_layer" getter="get_collision_layer"> - The RayCast's collison layer(s). Only bodies in the same collision layer(s) will be detected. + <member name="collision_mask" type="int" setter="set_collision_mask" getter="get_collision_mask"> + The ray's collision mask. Only objects in at least one collision layer enabled in the mask will be detected. </member> <member name="enabled" type="bool" setter="set_enabled" getter="is_enabled"> If [code]true[/code], collisions will be reported. Default value: [code]false[/code]. diff --git a/doc/classes/RayCast2D.xml b/doc/classes/RayCast2D.xml index 5520abe050..b6c657783d 100644 --- a/doc/classes/RayCast2D.xml +++ b/doc/classes/RayCast2D.xml @@ -7,7 +7,7 @@ A RayCast represents a line from its origin to its destination position, [code]cast_to[/code]. It is used to query the 2D space in order to find the closest object along the path of the ray. RayCast2D can ignore some objects by adding them to the exception list via [code]add_exception[/code], by setting proper filtering with collision layers, or by filtering object types with type masks. Only enabled raycasts will be able to query the space and report collisions. - RayCast2D calculates intersection every fixed frame (see [Node]), and the result is cached so it can be used later until the next frame. If multiple queries are required between fixed frames (or during the same frame) use [method force_raycast_update] after adjusting the raycast. + RayCast2D calculates intersection every physics frame (see [Node]), and the result is cached so it can be used later until the next frame. If multiple queries are required between physics frames (or during the same frame) use [method force_raycast_update] after adjusting the raycast. </description> <tutorials> </tutorials> @@ -43,7 +43,7 @@ <return type="void"> </return> <description> - Updates the collision information for the ray. Use this method to update the collision information immediately instead of waiting for the next [code]_fixed_process[/code] call, for example if the ray or its parent has changed state. Note: [code]enabled == true[/code] is not required for this to work. + Updates the collision information for the ray. Use this method to update the collision information immediately instead of waiting for the next [code]_physics_process[/code] call, for example if the ray or its parent has changed state. Note: [code]enabled == true[/code] is not required for this to work. </description> </method> <method name="get_cast_to" qualifiers="const"> @@ -77,11 +77,11 @@ [/codeblock] </description> </method> - <method name="get_collision_layer" qualifiers="const"> + <method name="get_collision_mask" qualifiers="const"> <return type="int"> </return> <description> - Returns the collision layer for this ray. + Returns the collision mask for this ray. </description> </method> <method name="get_collision_normal" qualifiers="const"> @@ -153,13 +153,13 @@ Sets the ray destination point, so that the ray will test from the ray's origin to [code]local_point[/code] </description> </method> - <method name="set_collision_layer"> + <method name="set_collision_mask"> <return type="void"> </return> <argument index="0" name="layer" type="int"> </argument> <description> - Set the mask to filter objects. Only objects with at least the same mask element set will be detected. + Set the mask to filter objects. Only objects in at least one collision layer enabled in the mask will be detected. </description> </method> <method name="set_enabled"> @@ -194,8 +194,8 @@ <member name="cast_to" type="Vector2" setter="set_cast_to" getter="get_cast_to"> The ray's destination point, relative to the RayCast's [code]position[/code]. </member> - <member name="collision_layer" type="int" setter="set_collision_layer" getter="get_collision_layer"> - The RayCast2D's collison layer(s). Only bodies in the same collision layer(s) will be detected. + <member name="collision_mask" type="int" setter="set_collision_mask" getter="get_collision_mask"> + The ray's collision mask. Only objects in at least one collision layer enabled in the mask will be detected. </member> <member name="enabled" type="bool" setter="set_enabled" getter="is_enabled"> If [code]true[/code], collisions will be reported. Default value: [code]false[/code]. diff --git a/doc/classes/RayShape.xml b/doc/classes/RayShape.xml index 7fab9c3949..d5d367a335 100644 --- a/doc/classes/RayShape.xml +++ b/doc/classes/RayShape.xml @@ -1,8 +1,10 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="RayShape" inherits="Shape" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Ray shape for 3D collisions. </brief_description> <description> + Ray shape for 3D collisions, which can be set into a [PhysicsBody] or [Area]. A ray is not really a collision body, instead it tries to separate itself from whatever is touching its far endpoint. It's often useful for characters. </description> <tutorials> </tutorials> @@ -26,6 +28,7 @@ </methods> <members> <member name="length" type="float" setter="set_length" getter="get_length"> + The ray's length. </member> </members> <constants> diff --git a/doc/classes/Rect2.xml b/doc/classes/Rect2.xml index 1a467861b3..80f7830a16 100644 --- a/doc/classes/Rect2.xml +++ b/doc/classes/Rect2.xml @@ -14,7 +14,7 @@ <method name="Rect2"> <return type="Rect2"> </return> - <argument index="0" name="pos" type="Vector2"> + <argument index="0" name="position" type="Vector2"> </argument> <argument index="1" name="size" type="Vector2"> </argument> diff --git a/doc/classes/Rect3.xml b/doc/classes/Rect3.xml index 8837b8f812..f41665db34 100644 --- a/doc/classes/Rect3.xml +++ b/doc/classes/Rect3.xml @@ -14,7 +14,7 @@ <method name="Rect3"> <return type="Rect3"> </return> - <argument index="0" name="pos" type="Vector3"> + <argument index="0" name="position" type="Vector3"> </argument> <argument index="1" name="size" type="Vector3"> </argument> diff --git a/doc/classes/RegEx.xml b/doc/classes/RegEx.xml index 626f8f1a93..4577672c72 100644 --- a/doc/classes/RegEx.xml +++ b/doc/classes/RegEx.xml @@ -5,7 +5,7 @@ </brief_description> <description> Class for finding text patterns in a string using regular expressions. It can not perform replacements. Regular expressions are a way to define patterns of text to be searched. Details on writing patterns are too long to explain here but the Internet is full of tutorials and detailed explanations. - Once created, the RegEx object needs to be compiled with the pattern before it can be used. The pattern must be escaped first for gdscript before it is escaped for the expression. For example: + Once created, the RegEx object needs to be compiled with the search pattern before it can be used. The search pattern must be escaped first for gdscript before it is escaped for the expression. For example: [code]var exp = RegEx.new()[/code] [code]exp.compile("\\d+")[/code] would be read by RegEx as [code]\d+[/code] @@ -47,7 +47,7 @@ <argument index="0" name="pattern" type="String"> </argument> <description> - Compiles and assign the regular expression pattern to use. + Compiles and assign the search pattern to use. </description> </method> <method name="get_group_count" qualifiers="const"> @@ -68,14 +68,14 @@ <return type="String"> </return> <description> - Returns the expression used to compile the code. + Returns the search pattern used to compile the code. </description> </method> <method name="is_valid" qualifiers="const"> <return type="bool"> </return> <description> - Returns whether this object has a valid regular expression assigned. + Returns whether this object has a valid search pattern assigned. </description> </method> <method name="search" qualifiers="const"> @@ -88,7 +88,7 @@ <argument index="2" name="end" type="int" default="-1"> </argument> <description> - Searches the text for the compiled pattern. Returns a [RegExMatch] container of the first matching reult if found, otherwise null. The region to search within can be specified without modifying where the start and end anchor would be. + Searches the text for the compiled pattern. Returns a [RegExMatch] container of the first matching result if found, otherwise null. The region to search within can be specified without modifying where the start and end anchor would be. </description> </method> <method name="sub" qualifiers="const"> diff --git a/doc/classes/RegExMatch.xml b/doc/classes/RegExMatch.xml index 9e021ed6c8..abf2e383d5 100644 --- a/doc/classes/RegExMatch.xml +++ b/doc/classes/RegExMatch.xml @@ -1,8 +1,10 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="RegExMatch" inherits="Reference" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Contains the results of a regex search. </brief_description> <description> + Contains the results of a regex search. [method RegEx.search] returns an instance of [code]RegExMatch[/code] if it finds the search pattern in the [source] string. </description> <tutorials> </tutorials> @@ -15,7 +17,7 @@ <argument index="0" name="name" type="Variant" default="0"> </argument> <description> - Returns the end position of the match in the string. An integer can be specified for numeric groups or a string for named groups. Returns -1 if that group wasn't found or doesn't exist. Defaults to 0 (whole pattern). + Returns the end position of the match in the [source] string. An integer can be specified for numeric groups or a string for named groups. Returns -1 if that group wasn't found or doesn't exist. Defaults to 0 (whole pattern). </description> </method> <method name="get_group_count" qualifiers="const"> @@ -38,7 +40,7 @@ <argument index="0" name="name" type="Variant" default="0"> </argument> <description> - Returns the starting position of the match in the string. An integer can be specified for numeric groups or a string for named groups. Returns -1 if that group wasn't found or doesn't exist. Defaults to 0 (whole pattern). + Returns the starting position of the match in the [source] string. An integer can be specified for numeric groups or a string for named groups. Returns -1 if that group wasn't found or doesn't exist. Defaults to 0 (whole pattern). </description> </method> <method name="get_string" qualifiers="const"> @@ -47,19 +49,21 @@ <argument index="0" name="name" type="Variant" default="0"> </argument> <description> - Returns the result of the match in the string. An integer can be specified for numeric groups or a string for named groups. Returns -1 if that group wasn't found or doesn't exist. Defaults to 0 (whole pattern). + Returns the result of the match in the [source] string. An integer can be specified for numeric groups or a string for named groups. Returns -1 if that group wasn't found or doesn't exist. Defaults to 0 (whole pattern). </description> </method> <method name="get_strings" qualifiers="const"> <return type="Array"> </return> <description> + Returns an [Array] of the matches in the [source] string. </description> </method> <method name="get_subject" qualifiers="const"> <return type="String"> </return> <description> + Returns the [source] string used with the search pattern to find this matching result. </description> </method> </methods> diff --git a/doc/classes/RichTextLabel.xml b/doc/classes/RichTextLabel.xml index 90ee76cb98..0e15785d0d 100644 --- a/doc/classes/RichTextLabel.xml +++ b/doc/classes/RichTextLabel.xml @@ -47,6 +47,12 @@ <description> </description> </method> + <method name="get_line_count" qualifiers="const"> + <return type="int"> + </return> + <description> + </description> + </method> <method name="get_percent_visible" qualifiers="const"> <return type="float"> </return> @@ -84,12 +90,24 @@ <description> </description> </method> + <method name="get_visible_line_count" qualifiers="const"> + <return type="int"> + </return> + <description> + </description> + </method> <method name="is_meta_underlined" qualifiers="const"> <return type="bool"> </return> <description> </description> </method> + <method name="is_overriding_selected_font_color" qualifiers="const"> + <return type="bool"> + </return> + <description> + </description> + </method> <method name="is_scroll_active" qualifiers="const"> <return type="bool"> </return> @@ -235,6 +253,14 @@ <description> </description> </method> + <method name="set_override_selected_font_color"> + <return type="void"> + </return> + <argument index="0" name="override" type="bool"> + </argument> + <description> + </description> + </method> <method name="set_percent_visible"> <return type="void"> </return> @@ -318,6 +344,8 @@ </member> <member name="bbcode_text" type="String" setter="set_bbcode" getter="get_bbcode"> </member> + <member name="override_selected_font_color" type="bool" setter="set_override_selected_font_color" getter="is_overriding_selected_font_color"> + </member> <member name="percent_visible" type="float" setter="set_percent_visible" getter="get_percent_visible"> </member> <member name="visible_characters" type="int" setter="set_visible_characters" getter="get_visible_characters"> diff --git a/doc/classes/RigidBody.xml b/doc/classes/RigidBody.xml index 8347597daf..76a93248fb 100644 --- a/doc/classes/RigidBody.xml +++ b/doc/classes/RigidBody.xml @@ -27,7 +27,7 @@ <method name="apply_impulse"> <return type="void"> </return> - <argument index="0" name="pos" type="Vector3"> + <argument index="0" name="position" type="Vector3"> </argument> <argument index="1" name="impulse" type="Vector3"> </argument> diff --git a/doc/classes/RigidBody2D.xml b/doc/classes/RigidBody2D.xml index a4faa697de..2bc3fd726b 100644 --- a/doc/classes/RigidBody2D.xml +++ b/doc/classes/RigidBody2D.xml @@ -1,14 +1,17 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="RigidBody2D" inherits="PhysicsBody2D" category="Core" version="3.0.alpha.custom_build"> <brief_description> - Physics Body whose position is determined through physics simulation in 2D space. + A body that is controlled by the 2D physics engine. </brief_description> <description> - This is the node that implements full 2D physics. This means that you do not control a RigidBody2D directly. Instead you can apply forces to it (gravity, impulses, etc.), and the physics simulation will calculate the resulting movement, collision, bouncing, rotating, etc. - This node can use custom force integration, for writing complex physics motion behavior per node. - This node can shift state between regular Rigid body, Kinematic, Character or Static. - Character mode forbids this node from being rotated. - As a warning, don't change RigidBody2D's position every frame or very often. Sporadic changes work fine, but physics runs at a different granularity (fixed hz) than usual rendering (process callback) and maybe even in a separate thread, so changing this from a process loop will yield strange behavior. + This node implements simulated 2D physics. You do not control a RigidBody2D directly. Instead you apply forces to it (gravity, impulses, etc.) and the physics simulation calculates the resulting movement based on its mass, friction, and other physical properties. + A RigidBody2D has 4 behavior modes (see [member mode]): + - [b]Rigid[/b]: The body behaves as a physical object. It collides with other bodies and responds to forces applied to it. This is the default mode. + - [b]Static[/b]: The body behaves like a [StaticBody2D] and does not move. + - [b]Character[/b]: Similar to [code]Rigid[/code] mode, but the body can not rotate. + - [b]Kinematic[/b]: The body behaves like a [KinematicBody2D], and must be moved by code. + [b]Note:[/b] You should not change a RigidBody2D's [code]position[/code] or [code]linear_velocity[/code] every frame or even very often. If you need to directly affect the body's state, use [method _integrate_forces], which allows you to directly access the physics state. + If you need to override the default physics behavior, you can write a custom force integration. See [member custom_integrator]. </description> <tutorials> </tutorials> @@ -21,7 +24,7 @@ <argument index="0" name="state" type="Physics2DDirectBodyState"> </argument> <description> - Called during physics processing, allowing you to read and safely modify the simulation state for the object. By default it works in addition to the usual physics behavior, but [method set_use_custom_integrator] allows you to disable the default behavior and do fully custom force integration for a body. + Allows you to read and safely modify the simulation state for the object. Use this instead of [Node._physics_process] if you need to directly change the body's [code]position[/code] or other physics properties. By default it works in addition to the usual physics behavior, but [member custom_integrator] allows you to disable the default behavior and write custom force integration for a body. </description> </method> <method name="add_force"> @@ -32,7 +35,7 @@ <argument index="1" name="force" type="Vector2"> </argument> <description> - Add a positioned force to the applied force and torque. As with [method apply_impulse], both the force and the offset from the body origin are in global coordinates. + Adds a positioned force to the body. Both the force and the offset from the body origin are in global coordinates. </description> </method> <method name="apply_impulse"> @@ -43,7 +46,7 @@ <argument index="1" name="impulse" type="Vector2"> </argument> <description> - Apply a positioned impulse (which will be affected by the body mass and shape). This is the equivalent of hitting a billiard ball with a cue: a force that is applied once, and only once. Both the impulse and the offset from the body origin are in global coordinates. + Applies a positioned impulse to the body (which will be affected by the body mass and shape). This is the equivalent of hitting a billiard ball with a cue: a force that is applied instantaneously. Both the impulse and the offset from the body origin are in global coordinates. </description> </method> <method name="get_angular_damp" qualifiers="const"> @@ -64,14 +67,14 @@ <return type="Vector2"> </return> <description> - Return the applied force vector. + Returns the body's total applied force. </description> </method> <method name="get_applied_torque" qualifiers="const"> <return type="float"> </return> <description> - Return the torque which is being applied to this body. + Returns the body's total applied torque. </description> </method> <method name="get_bounce" qualifiers="const"> @@ -85,7 +88,7 @@ <return type="Array"> </return> <description> - Return a list of the bodies colliding with this one. By default, number of max contacts reported is at 0 , see [method set_max_contacts_reported] to increase it. You must also enable contact monitor, see [method set_contact_monitor] + Returns a list of the bodies colliding with this one. Use [member contacts_reported] to set the maximum number reported. You must also set [member contact_monitor] to [code]true[/code]. </description> </method> <method name="get_continuous_collision_detection_mode" qualifiers="const"> @@ -113,7 +116,7 @@ <return type="float"> </return> <description> - Return the body's moment of inertia. This is usually automatically computed from the mass and the shapes. Note that this doesn't seem to work in a [code]_ready[/code] function: it apparently has not been auto-computed yet. + Returns the body's moment of inertia, which is computed automatically from the body's mass and assigned [Shape2D]s during the physics frame. Note that it will not yet have a value in the [code]_ready()[/code] function. </description> </method> <method name="get_linear_damp" qualifiers="const"> @@ -127,7 +130,7 @@ <return type="Vector2"> </return> <description> - Return the body linear velocity. This changes by physics granularity. See [method set_linear_velocity]. + Returns the body's linear velocity. This changes when a physics frame has passed, not during a normal update. See [method set_linear_velocity]. </description> </method> <method name="get_mass" qualifiers="const"> @@ -210,7 +213,7 @@ <argument index="0" name="force" type="Vector2"> </argument> <description> - Set the applied force vector. This is the equivalent of pushing a box over the ground: the force applied is applied constantly. + Sets the applied force vector. This is the equivalent of firing a rocket: the force is applied constantly. </description> </method> <method name="set_applied_torque"> @@ -219,7 +222,7 @@ <argument index="0" name="torque" type="float"> </argument> <description> - Set a constant torque which will be applied to this body. + Sets the applied torque. </description> </method> <method name="set_axis_velocity"> @@ -228,7 +231,7 @@ <argument index="0" name="axis_velocity" type="Vector2"> </argument> <description> - Set an axis velocity. The velocity in the given vector axis will be set as the given vector length. This is useful for jumping behavior. + Sets the body's velocity on the given axis. The velocity in the given vector axis will be set as the given vector length. This is useful for jumping behavior. </description> </method> <method name="set_bounce"> @@ -378,59 +381,59 @@ <argument index="2" name="result" type="Physics2DTestMotionResult" default="null"> </argument> <description> - Return whether the body would collide, if it tried to move in the given vector. This method allows two extra parameters: A margin, which increases slightly the size of the shapes involved in the collision detection, and an object of type [Physics2DTestMotionResult], which will store additional information about the collision (should there be one). + Returns [code]true[/code] if a collision would result from moving in the given vector. [code]margin[/code] increases the size of the shapes involved in the collision detection, and [code]result[/code] is an object of type [Physics2DTestMotionResult], which contains additional information about the collision (should there be one). </description> </method> </methods> <members> <member name="angular_damp" type="float" setter="set_angular_damp" getter="get_angular_damp"> - Damps RigidBody2D's rotational forces. + Damps the body's [member angular_velocity]. If [code]-1[/code] the body will use the "Default Angular Damp" in "Project > Project Settings > Physics > 2d". Default value: [code]-1[/code]. </member> <member name="angular_velocity" type="float" setter="set_angular_velocity" getter="get_angular_velocity"> - RigidBody2D's rotational velocity. + The body's rotational velocity. </member> <member name="bounce" type="float" setter="set_bounce" getter="get_bounce"> - RigidBody2D's bounciness. + The body's bounciness. Default value: [code]0[/code]. </member> <member name="can_sleep" type="bool" setter="set_can_sleep" getter="is_able_to_sleep"> - If [code]true[/code] RigidBody2D will not calculate forces and will act as a static body while there is no movement. It will wake up when other forces are applied through other collisions or when the [code]apply_impulse[/code] method is used. Default value: [code]true[/code] + If [code]true[/code] the body will not calculate forces and will act as a static body if there is no movement. The body will wake up when other forces are applied via collisions or by using [method apply_impulse] or [method add_force]. Default value: [code]true[/code]. </member> <member name="contact_monitor" type="bool" setter="set_contact_monitor" getter="is_contact_monitor_enabled"> - If [code]true[/code] RigidBody2D will emit signals when it collides with another RigidBody2D. + If [code]true[/code] the body will emit signals when it collides with another RigidBody2D. See also [member contacts_reported]. Default value: [code]false[/code]. </member> <member name="contacts_reported" type="int" setter="set_max_contacts_reported" getter="get_max_contacts_reported"> - The maximum contacts to report. Bodies can keep a log of the contacts with other bodies, this is enabled by setting the maximum amount of contacts reported to a number greater than 0. + The maximum number of contacts to report. Default value: [code]0[/code]. </member> <member name="continuous_cd" type="int" setter="set_continuous_collision_detection_mode" getter="get_continuous_collision_detection_mode" enum="RigidBody2D.CCDMode"> - If [code]true[/code] continuous collision detection is used. Default value: [code]false[/code] - Continuous collision detection tries to predict where a moving body will collide, instead of moving it and correcting its movement if it collided. Continuous collision detection is more precise, and misses less impacts by small, fast-moving objects. Not using continuous collision detection is faster to compute, but can miss small, fast-moving objects. + Continuous collision detection mode. Default value: [code]CCD_MODE_DISABLED[/code]. + Continuous collision detection tries to predict where a moving body will collide instead of moving it and correcting its movement after collision. Continuous collision detection is slower, but more precise and misses fewer collisions with small, fast-moving objects. Raycasting and shapecasting methods are available. See [code]CCD_MODE_[/code] constants for details. </member> <member name="custom_integrator" type="bool" setter="set_use_custom_integrator" getter="is_using_custom_integrator"> - If [code]true[/code] internal force integration will be disabled (like gravity or air friction) for this body. Other than collision response, the body will only move as determined by the [method _integrate_forces] function, if defined. + If [code]true[/code] internal force integration is disabled for this body. Aside from collision response, the body will only move as determined by the [method _integrate_forces] function. </member> <member name="friction" type="float" setter="set_friction" getter="get_friction"> - The body friction, from 0 (frictionless) to 1 (max friction). + The body's friction. Values range from [code]0[/code] (frictionless) to [code]1[/code] (maximum friction). Default value: [code]1[/code]. </member> <member name="gravity_scale" type="float" setter="set_gravity_scale" getter="get_gravity_scale"> - This is multiplied by the global 2D gravity setting found in "Project > Project Settings > Physics > 2d" to produce RigidBody2D's gravity. E.g. a value of 1 will be normal gravity, 2 will apply double gravity, and 0.5 will apply half gravity to this object. + Multiplies the gravity applied to the body. The body's gravity is calculated from the "Default Gravity" value in "Project > Project Settings > Physics > 2d" and/or any additional gravity vector applied by [Area2D]s. Default value: [code]1[/code]. </member> <member name="linear_damp" type="float" setter="set_linear_damp" getter="get_linear_damp"> - RigidBody2D's linear damp. Default of -1, cannot be less than -1. If this value is different from -1, any linear damp derived from the world or areas will be overridden. + Damps the body's [member linear_velocity]. If [code]-1[/code] the body will use the "Default Linear Damp" in "Project > Project Settings > Physics > 2d". Default value: [code]-1[/code]. </member> <member name="linear_velocity" type="Vector2" setter="set_linear_velocity" getter="get_linear_velocity"> - RigidBody2D's linear velocity. Can be used sporadically, but [b]DON'T SET THIS IN EVERY FRAME[/b], because physics may run in another thread and runs at a different granularity. Use [method _integrate_forces] as your process loop for precise control of the body state. + The body's linear velocity. </member> <member name="mass" type="float" setter="set_mass" getter="get_mass"> - RigidBody2D's mass. + The body's mass. Default value: [code]1[/code]. </member> <member name="mode" type="int" setter="set_mode" getter="get_mode" enum="RigidBody2D.Mode"> - The body mode from the MODE_* enum. Modes include: MODE_STATIC, MODE_KINEMATIC, MODE_RIGID, and MODE_CHARACTER. + The body's mode. See [code]MODE_*[/code] constants. Default value: [code]MODE_RIGID[/code]. </member> <member name="sleeping" type="bool" setter="set_sleeping" getter="is_sleeping"> - If [code]true[/code] RigidBody2D is sleeping and will not calculate forces until woken up by a collision or the [code]apply_impulse[/code] method. + If [code]true[/code] the body is sleeping and will not calculate forces until woken up by a collision or by using [method apply_impulse] or [method add_force]. </member> <member name="weight" type="float" setter="set_weight" getter="get_weight"> - RigidBody2D's weight based on its mass and the global 2D gravity. Global values are set in "Project > Project Settings > Physics > 2d". + The body's weight based on its mass and the "Default Gravity" value in "Project > Project Settings > Physics > 2d". </member> </members> <signals> @@ -438,14 +441,14 @@ <argument index="0" name="body" type="Object"> </argument> <description> - Emitted when a body enters into contact with this one. Contact monitor and contacts reported must be enabled for this to work. + Emitted when a body enters into contact with this one. [member contact_monitor] must be [code]true[/code] and [member contacts_reported] greater than [code]0[/code]. </description> </signal> <signal name="body_exited"> <argument index="0" name="body" type="Object"> </argument> <description> - Emitted when a body exits contact with this one. Contact monitor and contacts reported must be enabled for this to work. + Emitted when a body exits contact with this one. [member contact_monitor] must be [code]true[/code] and [member contacts_reported] greater than [code]0[/code]. </description> </signal> <signal name="body_shape_entered"> @@ -458,8 +461,7 @@ <argument index="3" name="local_shape" type="int"> </argument> <description> - Emitted when a body enters into contact with this one. Contact monitor and contacts reported must be enabled for this to work. - This signal not only receives the body that collided with this one, but also its [RID] (body_id), the shape index from the colliding body (body_shape), and the shape index from this body (local_shape) the other body collided with. + Emitted when a body enters into contact with this one. Reports colliding shape information. See [CollisionObject2D] for shape index information. [member contact_monitor] must be [code]true[/code] and [member contacts_reported] greater than [code]0[/code]. </description> </signal> <signal name="body_shape_exited"> @@ -472,37 +474,36 @@ <argument index="3" name="local_shape" type="int"> </argument> <description> - Emitted when a body shape exits contact with this one. Contact monitor and contacts reported must be enabled for this to work. - This signal not only receives the body that stopped colliding with this one, but also its [RID] (body_id), the shape index from the colliding body (body_shape), and the shape index from this body (local_shape) the other body stopped colliding with. + Emitted when a body shape exits contact with this one. Reports colliding shape information. See [CollisionObject2D] for shape index information. [member contact_monitor] must be [code]true[/code] and [member contacts_reported] greater than [code]0[/code]. </description> </signal> <signal name="sleeping_state_changed"> <description> - Emitted when the body changes its sleeping state. Either by sleeping or waking up. + Emitted when [member sleeping] changes. </description> </signal> </signals> <constants> <constant name="MODE_STATIC" value="1"> - Static mode. The body behaves like a [StaticBody2D], and can only move by user code. + Static mode. The body behaves like a [StaticBody2D] and does not move. </constant> <constant name="MODE_KINEMATIC" value="3"> - Kinematic body. The body behaves like a [KinematicBody2D], and can only move by user code. + Kinematic mode. The body behaves like a [KinematicBody2D], and must be moved by code. </constant> <constant name="MODE_RIGID" value="0"> - Rigid body. This is the "natural" state of a rigid body. It is affected by forces, and can move, rotate, and be affected by user code. + Rigid mode. The body behaves as a physical object. It collides with other bodies and responds to forces applied to it. This is the default mode. </constant> <constant name="MODE_CHARACTER" value="2"> - Character body. This behaves like a rigid body, but can not rotate. + Character mode. Similar to [code]MODE_RIGID[/code], but the body can not rotate. </constant> <constant name="CCD_MODE_DISABLED" value="0"> - Disables continuous collision detection. This is the fastest way to detect body collisions, but can miss small, fast-moving objects. + Continuous collision detection disabled. This is the fastest way to detect body collisions, but can miss small, fast-moving objects. </constant> <constant name="CCD_MODE_CAST_RAY" value="1"> - Enables continuous collision detection by raycasting. It is faster than shapecasting, but less precise. + Continuous collision detection enabled using raycasting. This is faster than shapecasting but less precise. </constant> <constant name="CCD_MODE_CAST_SHAPE" value="2"> - Enables continuous collision detection by shapecasting. It is the slowest CCD method, and the most precise. + Continuous collision detection enabled using shapecasting. This is the slowest CCD method and the most precise. </constant> </constants> </class> diff --git a/doc/classes/SceneTree.xml b/doc/classes/SceneTree.xml index c40d9339d1..f6a6ce36e3 100644 --- a/doc/classes/SceneTree.xml +++ b/doc/classes/SceneTree.xml @@ -313,7 +313,7 @@ </argument> <argument index="2" name="minsize" type="Vector2"> </argument> - <argument index="3" name="shrink" type="int" default="1"> + <argument index="3" name="shrink" type="float" default="1"> </argument> <description> </description> @@ -336,10 +336,6 @@ <description> </description> </signal> - <signal name="fixed_frame"> - <description> - </description> - </signal> <signal name="idle_frame"> <description> </description> @@ -356,6 +352,12 @@ <description> </description> </signal> + <signal name="node_added"> + <argument index="0" name="node" type="Object"> + </argument> + <description> + </description> + </signal> <signal name="node_configuration_warning_changed"> <argument index="0" name="node" type="Object"> </argument> @@ -368,6 +370,10 @@ <description> </description> </signal> + <signal name="physics_frame"> + <description> + </description> + </signal> <signal name="screen_resized"> <description> </description> @@ -404,5 +410,7 @@ </constant> <constant name="STRETCH_ASPECT_KEEP_HEIGHT" value="3"> </constant> + <constant name="STRETCH_ASPECT_EXPAND" value="4"> + </constant> </constants> </class> diff --git a/doc/classes/Shape.xml b/doc/classes/Shape.xml index 8e6e12a736..4d822a1705 100644 --- a/doc/classes/Shape.xml +++ b/doc/classes/Shape.xml @@ -1,8 +1,10 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="Shape" inherits="Resource" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Base class for all 3D shape resources. </brief_description> <description> + Base class for all 3D shape resources. All 3D shapes that inherit from this can be set into a [PhysicsBody] or [Area]. </description> <tutorials> </tutorials> diff --git a/doc/classes/SliderJoint.xml b/doc/classes/SliderJoint.xml index 617390b6a4..adea8658d1 100644 --- a/doc/classes/SliderJoint.xml +++ b/doc/classes/SliderJoint.xml @@ -1,8 +1,10 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="SliderJoint" inherits="Joint" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Piston kind of slider between two bodies in 3D. </brief_description> <description> + Slides across the x-axis of the [Pivot] object. </description> <tutorials> </tutorials> @@ -30,96 +32,144 @@ </methods> <members> <member name="angular_limit/damping" type="float" setter="set_param" getter="get_param"> + The amount of damping of the rotation when the limit is surpassed. + A lower damping value allows a rotation initiated by body A to travel to body B slower. </member> <member name="angular_limit/lower_angle" type="float" setter="_set_lower_limit_angular" getter="_get_lower_limit_angular"> + The lower limit of rotation in the slider. </member> <member name="angular_limit/restitution" type="float" setter="set_param" getter="get_param"> + The amount of restitution of the rotation when the limit is surpassed. + Does not affect damping. </member> <member name="angular_limit/softness" type="float" setter="set_param" getter="get_param"> + A factor applied to the all rotation once the limit is surpassed. + Makes all rotation slower when between 0 and 1. </member> <member name="angular_limit/upper_angle" type="float" setter="_set_upper_limit_angular" getter="_get_upper_limit_angular"> + The upper limit of rotation in the slider. </member> <member name="angular_motion/damping" type="float" setter="set_param" getter="get_param"> + The amount of damping of the rotation in the limits. </member> <member name="angular_motion/restitution" type="float" setter="set_param" getter="get_param"> + The amount of restitution of the rotation in the limits. </member> <member name="angular_motion/softness" type="float" setter="set_param" getter="get_param"> + A factor applied to the all rotation in the limits. </member> <member name="angular_ortho/damping" type="float" setter="set_param" getter="get_param"> + The amount of damping of the rotation across axes orthogonal to the slider. </member> <member name="angular_ortho/restitution" type="float" setter="set_param" getter="get_param"> + The amount of restitution of the rotation across axes orthogonal to the slider. </member> <member name="angular_ortho/softness" type="float" setter="set_param" getter="get_param"> + A factor applied to the all rotation across axes orthogonal to the slider. </member> <member name="linear_limit/damping" type="float" setter="set_param" getter="get_param"> + The amount of damping that happens once the limit defined by [member linear_limit/lower_distance] and [member linear_limit/upper_distance] is surpassed. </member> <member name="linear_limit/lower_distance" type="float" setter="set_param" getter="get_param"> + The minimum difference between the pivot points on their x-axis before damping happens. </member> <member name="linear_limit/restitution" type="float" setter="set_param" getter="get_param"> + The amount of restitution once the limits are surpassed. The lower, the more velocity-energy gets lost. </member> <member name="linear_limit/softness" type="float" setter="set_param" getter="get_param"> + A factor applied to the movement accross the slider axis once the limits get surpassed. The lower, the slower the movement. </member> <member name="linear_limit/upper_distance" type="float" setter="set_param" getter="get_param"> + The maximum difference between the pivot points on their x-axis before damping happens. </member> <member name="linear_motion/damping" type="float" setter="set_param" getter="get_param"> + The amount of damping inside the slider limits. </member> <member name="linear_motion/restitution" type="float" setter="set_param" getter="get_param"> + The amount of restitution inside the slider limits. </member> <member name="linear_motion/softness" type="float" setter="set_param" getter="get_param"> + A factor applied to the movement accross the slider axis as long as the slider is in the limits. The lower, the slower the movement. </member> <member name="linear_ortho/damping" type="float" setter="set_param" getter="get_param"> + The amount of damping when movement is accross axes orthogonal to the slider. </member> <member name="linear_ortho/restitution" type="float" setter="set_param" getter="get_param"> + The amount of restitution when movement is accross axes orthogonal to the slider. </member> <member name="linear_ortho/softness" type="float" setter="set_param" getter="get_param"> + A factor applied to the movement accross axes orthogonal to the slider. </member> </members> <constants> <constant name="PARAM_LINEAR_LIMIT_UPPER" value="0"> + The maximum difference between the pivot points on their x-axis before damping happens. </constant> <constant name="PARAM_LINEAR_LIMIT_LOWER" value="1"> + The minimum difference between the pivot points on their x-axis before damping happens. </constant> <constant name="PARAM_LINEAR_LIMIT_SOFTNESS" value="2"> + A factor applied to the movement accross the slider axis once the limits get surpassed. The lower, the slower the movement. </constant> <constant name="PARAM_LINEAR_LIMIT_RESTITUTION" value="3"> + The amount of restitution once the limits are surpassed. The lower, the more velocityenergy gets lost. </constant> <constant name="PARAM_LINEAR_LIMIT_DAMPING" value="4"> + The amount of damping once the slider limits are surpassed. </constant> <constant name="PARAM_LINEAR_MOTION_SOFTNESS" value="5"> + A factor applied to the movement accross the slider axis as long as the slider is in the limits. The lower, the slower the movement. </constant> <constant name="PARAM_LINEAR_MOTION_RESTITUTION" value="6"> + The amount of restitution inside the slider limits. </constant> <constant name="PARAM_LINEAR_MOTION_DAMPING" value="7"> + The amount of damping inside the slider limits. </constant> <constant name="PARAM_LINEAR_ORTHOGONAL_SOFTNESS" value="8"> + A factor applied to the movement accross axes orthogonal to the slider. </constant> <constant name="PARAM_LINEAR_ORTHOGONAL_RESTITUTION" value="9"> + The amount of restitution when movement is accross axes orthogonal to the slider. </constant> <constant name="PARAM_LINEAR_ORTHOGONAL_DAMPING" value="10"> + The amount of damping when movement is accross axes orthogonal to the slider. </constant> <constant name="PARAM_ANGULAR_LIMIT_UPPER" value="11"> + The upper limit of rotation in the slider. </constant> <constant name="PARAM_ANGULAR_LIMIT_LOWER" value="12"> + The lower limit of rotation in the slider. </constant> <constant name="PARAM_ANGULAR_LIMIT_SOFTNESS" value="13"> + A factor applied to the all rotation once the limit is surpassed. </constant> <constant name="PARAM_ANGULAR_LIMIT_RESTITUTION" value="14"> + The amount of restitution of the rotation when the limit is surpassed. </constant> <constant name="PARAM_ANGULAR_LIMIT_DAMPING" value="15"> + The amount of damping of the rotation when the limit is surpassed. </constant> <constant name="PARAM_ANGULAR_MOTION_SOFTNESS" value="16"> + A factor applied to the all rotation in the limits. </constant> <constant name="PARAM_ANGULAR_MOTION_RESTITUTION" value="17"> + The amount of restitution of the rotation in the limits. </constant> <constant name="PARAM_ANGULAR_MOTION_DAMPING" value="18"> + The amount of damping of the rotation in the limits. </constant> <constant name="PARAM_ANGULAR_ORTHOGONAL_SOFTNESS" value="19"> + A factor applied to the all rotation across axes orthogonal to the slider. </constant> <constant name="PARAM_ANGULAR_ORTHOGONAL_RESTITUTION" value="20"> + The amount of restitution of the rotation across axes orthogonal to the slider. </constant> <constant name="PARAM_ANGULAR_ORTHOGONAL_DAMPING" value="21"> + The amount of damping of the rotation across axes orthogonal to the slider. </constant> <constant name="PARAM_MAX" value="22"> + End flag of PARAM_* constants, used internally. </constant> </constants> </class> diff --git a/doc/classes/Spatial.xml b/doc/classes/Spatial.xml index e43e4dcc1b..abb0bfa246 100644 --- a/doc/classes/Spatial.xml +++ b/doc/classes/Spatial.xml @@ -145,10 +145,10 @@ Rotates itself to point into direction of target position. Operations take place in global space. </description> </method> - <method name="look_at_from_pos"> + <method name="look_at_from_position"> <return type="void"> </return> - <argument index="0" name="pos" type="Vector3"> + <argument index="0" name="position" type="Vector3"> </argument> <argument index="1" name="target" type="Vector3"> </argument> @@ -209,7 +209,7 @@ <argument index="0" name="enable" type="bool"> </argument> <description> - Makes the node ignore its parents tranformations. Node tranformations are only in global space. + Makes the node ignore its parents transformations. Node transformations are only in global space. </description> </method> <method name="set_gizmo"> @@ -234,7 +234,7 @@ <return type="void"> </return> <description> - Reset all tranformations for this node. Set its [Transform3D] to identity matrix. + Reset all transformations for this node. Set its [Transform3D] to identity matrix. </description> </method> <method name="set_ignore_transform_notification"> @@ -329,7 +329,7 @@ <argument index="0" name="local_point" type="Vector3"> </argument> <description> - Tranforms [Vector3] "local_point" from this node's local space to world space. + Transforms [Vector3] "local_point" from this node's local space to world space. </description> </method> <method name="to_local" qualifiers="const"> @@ -338,7 +338,7 @@ <argument index="0" name="global_point" type="Vector3"> </argument> <description> - Tranforms [Vector3] "global_point" from world space to this node's local space. + Transforms [Vector3] "global_point" from world space to this node's local space. </description> </method> <method name="translate"> diff --git a/doc/classes/SpatialMaterial.xml b/doc/classes/SpatialMaterial.xml index 0f1c57e85b..da89c37ff4 100644 --- a/doc/classes/SpatialMaterial.xml +++ b/doc/classes/SpatialMaterial.xml @@ -27,6 +27,12 @@ <description> </description> </method> + <method name="get_ao_light_affect" qualifiers="const"> + <return type="float"> + </return> + <description> + </description> + </method> <method name="get_ao_texture_channel" qualifiers="const"> <return type="int" enum="SpatialMaterial.TextureChannel"> </return> @@ -105,6 +111,18 @@ <description> </description> </method> + <method name="get_distance_fade_max_distance" qualifiers="const"> + <return type="float"> + </return> + <description> + </description> + </method> + <method name="get_distance_fade_min_distance" qualifiers="const"> + <return type="float"> + </return> + <description> + </description> + </method> <method name="get_emission" qualifiers="const"> <return type="Color"> </return> @@ -187,6 +205,12 @@ <description> </description> </method> + <method name="get_proximity_fade_distance" qualifiers="const"> + <return type="float"> + </return> + <description> + </description> + </method> <method name="get_refraction" qualifiers="const"> <return type="float"> </return> @@ -297,12 +321,24 @@ <description> </description> </method> + <method name="is_distance_fade_enabled" qualifiers="const"> + <return type="bool"> + </return> + <description> + </description> + </method> <method name="is_grow_enabled" qualifiers="const"> <return type="bool"> </return> <description> </description> </method> + <method name="is_proximity_fade_enabled" qualifiers="const"> + <return type="bool"> + </return> + <description> + </description> + </method> <method name="set_albedo"> <return type="void"> </return> @@ -327,6 +363,14 @@ <description> </description> </method> + <method name="set_ao_light_affect"> + <return type="void"> + </return> + <argument index="0" name="amount" type="float"> + </argument> + <description> + </description> + </method> <method name="set_ao_texture_channel"> <return type="void"> </return> @@ -439,6 +483,30 @@ <description> </description> </method> + <method name="set_distance_fade"> + <return type="void"> + </return> + <argument index="0" name="enabled" type="bool"> + </argument> + <description> + </description> + </method> + <method name="set_distance_fade_max_distance"> + <return type="void"> + </return> + <argument index="0" name="distance" type="float"> + </argument> + <description> + </description> + </method> + <method name="set_distance_fade_min_distance"> + <return type="void"> + </return> + <argument index="0" name="distance" type="float"> + </argument> + <description> + </description> + </method> <method name="set_emission"> <return type="void"> </return> @@ -555,6 +623,22 @@ <description> </description> </method> + <method name="set_proximity_fade"> + <return type="void"> + </return> + <argument index="0" name="enabled" type="bool"> + </argument> + <description> + </description> + </method> + <method name="set_proximity_fade_distance"> + <return type="void"> + </return> + <argument index="0" name="distance" type="float"> + </argument> + <description> + </description> + </method> <method name="set_refraction"> <return type="void"> </return> @@ -707,6 +791,8 @@ </member> <member name="ao_enabled" type="bool" setter="set_feature" getter="get_feature"> </member> + <member name="ao_light_affect" type="float" setter="set_ao_light_affect" getter="get_ao_light_affect"> + </member> <member name="ao_on_uv2" type="bool" setter="set_flag" getter="get_flag"> </member> <member name="ao_texture" type="Texture" setter="set_texture" getter="get_texture"> @@ -745,6 +831,12 @@ </member> <member name="detail_uv_layer" type="int" setter="set_detail_uv" getter="get_detail_uv" enum="SpatialMaterial.DetailUV"> </member> + <member name="distance_fade_enable" type="bool" setter="set_distance_fade" getter="is_distance_fade_enabled"> + </member> + <member name="distance_fade_max_distance" type="float" setter="set_distance_fade_max_distance" getter="get_distance_fade_max_distance"> + </member> + <member name="distance_fade_min_distance" type="float" setter="set_distance_fade_min_distance" getter="get_distance_fade_min_distance"> + </member> <member name="emission" type="Color" setter="set_emission" getter="get_emission"> </member> <member name="emission_enabled" type="bool" setter="set_feature" getter="get_feature"> @@ -811,6 +903,10 @@ </member> <member name="particles_anim_v_frames" type="int" setter="set_particles_anim_v_frames" getter="get_particles_anim_v_frames"> </member> + <member name="proximity_fade_distance" type="float" setter="set_proximity_fade_distance" getter="get_proximity_fade_distance"> + </member> + <member name="proximity_fade_enable" type="bool" setter="set_proximity_fade" getter="is_proximity_fade_enabled"> + </member> <member name="refraction_enabled" type="bool" setter="set_feature" getter="get_feature"> </member> <member name="refraction_scale" type="float" setter="set_refraction" getter="get_refraction"> @@ -979,17 +1075,17 @@ </constant> <constant name="FLAG_MAX" value="12"> </constant> - <constant name="DIFFUSE_LAMBERT" value="0"> + <constant name="DIFFUSE_BURLEY" value="0"> </constant> - <constant name="DIFFUSE_LAMBERT_WRAP" value="1"> + <constant name="DIFFUSE_LAMBERT" value="1"> </constant> - <constant name="DIFFUSE_OREN_NAYAR" value="2"> + <constant name="DIFFUSE_LAMBERT_WRAP" value="2"> </constant> - <constant name="DIFFUSE_BURLEY" value="3"> + <constant name="DIFFUSE_OREN_NAYAR" value="3"> </constant> <constant name="DIFFUSE_TOON" value="4"> </constant> - <constant name="SPECULAR_SCHLICK_GGX" value="0"> + <constant name="SPECULAR_GGX" value="0"> </constant> <constant name="SPECULAR_BLINN" value="1"> </constant> diff --git a/doc/classes/SpatialVelocityTracker.xml b/doc/classes/SpatialVelocityTracker.xml index 2cbc2b9739..95871c8cdc 100644 --- a/doc/classes/SpatialVelocityTracker.xml +++ b/doc/classes/SpatialVelocityTracker.xml @@ -15,7 +15,7 @@ <description> </description> </method> - <method name="is_tracking_fixed_step" qualifiers="const"> + <method name="is_tracking_physics_step" qualifiers="const"> <return type="bool"> </return> <description> @@ -29,7 +29,7 @@ <description> </description> </method> - <method name="set_track_fixed_step"> + <method name="set_track_physics_step"> <return type="void"> </return> <argument index="0" name="enable" type="bool"> diff --git a/doc/classes/SphereShape.xml b/doc/classes/SphereShape.xml index 120c7fcc25..7c6174f4e4 100644 --- a/doc/classes/SphereShape.xml +++ b/doc/classes/SphereShape.xml @@ -1,8 +1,10 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="SphereShape" inherits="Shape" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Sphere shape for 3D collisions. </brief_description> <description> + Sphere shape for 3D collisions, which can be set into a [PhysicsBody] or [Area]. This shape is useful for modeling sphere-like 3D objects. </description> <tutorials> </tutorials> @@ -26,6 +28,7 @@ </methods> <members> <member name="radius" type="float" setter="set_radius" getter="get_radius"> + The sphere's radius. The shape's diameter is double the radius. </member> </members> <constants> diff --git a/doc/classes/Sprite.xml b/doc/classes/Sprite.xml index 90ebe79666..0cdc8f7099 100644 --- a/doc/classes/Sprite.xml +++ b/doc/classes/Sprite.xml @@ -4,7 +4,7 @@ General purpose Sprite node. </brief_description> <description> - General purpose Sprite node. This Sprite node can show any texture as a sprite. The texture can be used as a spritesheet for animation, or only a region from a bigger texture can referenced, like an atlas. + A node that displays a 2D texture. The texture displayed can be a region from a larger atlas texture, or a frame from a sprite sheet animation. </description> <tutorials> </tutorials> @@ -202,37 +202,51 @@ </methods> <members> <member name="centered" type="bool" setter="set_centered" getter="is_centered"> + If [code]true[/code] texture is centered. Default value: [code]true[/code]. </member> <member name="flip_h" type="bool" setter="set_flip_h" getter="is_flipped_h"> + If [code]true[/code] texture is flipped horizontally. Default value: [code]false[/code]. </member> <member name="flip_v" type="bool" setter="set_flip_v" getter="is_flipped_v"> + If [code]true[/code] texture is flipped vertically. Default value: [code]false[/code]. </member> <member name="frame" type="int" setter="set_frame" getter="get_frame"> + Current frame to display from sprite sheet. [member vframes] or [member hframes] must be greater than 1. </member> <member name="hframes" type="int" setter="set_hframes" getter="get_hframes"> + The number of collumns in the sprite sheet. </member> <member name="normal_map" type="Texture" setter="set_normal_map" getter="get_normal_map"> + The normal map gives depth to the Sprite. </member> <member name="offset" type="Vector2" setter="set_offset" getter="get_offset"> + The texture's drawing offset. </member> <member name="region_enabled" type="bool" setter="set_region" getter="is_region"> + If [code]true[/code] texture is cut from a larger atlas texture. See [code]region_rect[/code]. Default value: [code]false[/code]. </member> <member name="region_filter_clip" type="bool" setter="set_region_filter_clip" getter="is_region_filter_clip_enabled"> + If [code]true[/code] the outermost pixels get blurred out. </member> <member name="region_rect" type="Rect2" setter="set_region_rect" getter="get_region_rect"> + The region of the atlas texture to display. [member region_enabled] must be [code]true[/code]. </member> <member name="texture" type="Texture" setter="set_texture" getter="get_texture"> + [Texture] object to draw. </member> <member name="vframes" type="int" setter="set_vframes" getter="get_vframes"> + The number of rows in the sprite sheet. </member> </members> <signals> <signal name="frame_changed"> <description> + Emitted when the [member frame] changes. </description> </signal> <signal name="texture_changed"> <description> + Emitted when the [member texture] changes. </description> </signal> </signals> diff --git a/doc/classes/Sprite3D.xml b/doc/classes/Sprite3D.xml index f6f2f8f00c..e51616a071 100644 --- a/doc/classes/Sprite3D.xml +++ b/doc/classes/Sprite3D.xml @@ -1,8 +1,10 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="Sprite3D" inherits="SpriteBase3D" category="Core" version="3.0.alpha.custom_build"> <brief_description> + 2D Sprite node in 3D world. </brief_description> <description> + A node that displays a 2D texture in a 3D environment. The texture displayed can be a region from a larger atlas texture, or a frame from a sprite sheet animation. </description> <tutorials> </tutorials> @@ -96,21 +98,28 @@ </methods> <members> <member name="frame" type="int" setter="set_frame" getter="get_frame"> + Current frame to display from sprite sheet. [member vframes] or [member hframes] must be greater than 1. </member> <member name="hframes" type="int" setter="set_hframes" getter="get_hframes"> + The number of columns in the sprite sheet. </member> <member name="region_enabled" type="bool" setter="set_region" getter="is_region"> + If [code]true[/code] texture will be cut from a larger atlas texture. See [member region_rect]. Default value: [code]false[/code]. </member> <member name="region_rect" type="Rect2" setter="set_region_rect" getter="get_region_rect"> + The region of the atlas texture to display. [member region_enabled] must be [code]true[/code]. </member> <member name="texture" type="Texture" setter="set_texture" getter="get_texture"> + [Texture] object to draw. </member> <member name="vframes" type="int" setter="set_vframes" getter="get_vframes"> + The number of rows in the sprite sheet. </member> </members> <signals> <signal name="frame_changed"> <description> + Emitted when the [member frame] changes. </description> </signal> </signals> diff --git a/doc/classes/SpriteBase3D.xml b/doc/classes/SpriteBase3D.xml index 1640e5dc9f..f6c3367704 100644 --- a/doc/classes/SpriteBase3D.xml +++ b/doc/classes/SpriteBase3D.xml @@ -1,8 +1,10 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="SpriteBase3D" inherits="GeometryInstance" category="Core" version="3.0.alpha.custom_build"> <brief_description> + 2D Sprite node in 3D environment. </brief_description> <description> + A node that displays 2D texture information in a 3D environment. </description> <tutorials> </tutorials> @@ -164,36 +166,51 @@ <member name="alpha_cut" type="int" setter="set_alpha_cut_mode" getter="get_alpha_cut_mode" enum="SpriteBase3D.AlphaCutMode"> </member> <member name="axis" type="int" setter="set_axis" getter="get_axis" enum="Vector3.Axis"> + The direction in which the front of the texture faces. </member> <member name="centered" type="bool" setter="set_centered" getter="is_centered"> + If [code]true[/code] texture will be centered. Default value: [code]true[/code]. </member> <member name="double_sided" type="bool" setter="set_draw_flag" getter="get_draw_flag"> + If [code]true[/code] texture can be seen from the back as well, if [code]false[/code], it is invisible when looking at it from behind. Default value: [code]true[/code]. </member> <member name="flip_h" type="bool" setter="set_flip_h" getter="is_flipped_h"> + If [code]true[/code] texture is flipped horizontally. Default value: [code]false[/code]. </member> <member name="flip_v" type="bool" setter="set_flip_v" getter="is_flipped_v"> + If [code]true[/code] texture is flipped vertically. Default value: [code]false[/code]. </member> <member name="modulate" type="Color" setter="set_modulate" getter="get_modulate"> + A color value that gets multiplied on, could be used for mood-coloring or to simulate the color of light. </member> <member name="offset" type="Vector2" setter="set_offset" getter="get_offset"> + The texture's drawing offset. </member> <member name="opacity" type="float" setter="set_opacity" getter="get_opacity"> + The objects visibility on a scale from [code]0[/code] fully invisible to [code]1[/code] fully visible. </member> <member name="pixel_size" type="float" setter="set_pixel_size" getter="get_pixel_size"> + The size of one pixel's width on the Sprite to scale it in 3D. </member> <member name="shaded" type="bool" setter="set_draw_flag" getter="get_draw_flag"> + If [code]true[/code] the [Light] in the [Environment] has effects on the Sprite. Default value: [code]false[/code]. </member> <member name="transparent" type="bool" setter="set_draw_flag" getter="get_draw_flag"> + If [code]true[/code] the texture's transparency and the opacity are used to make those parts of the Sprite invisible. Default value: [code]true[/code]. </member> </members> <constants> <constant name="FLAG_TRANSPARENT" value="0"> + If set, the texture's transparency and the opacity are used to make those parts of the Sprite invisible. </constant> <constant name="FLAG_SHADED" value="1"> + If set, the Light in the Environment has effects on the Sprite. </constant> <constant name="FLAG_DOUBLE_SIDED" value="2"> + If set, texture can be seen from the back as well, if not, it is invisible when looking at it from behind. </constant> <constant name="FLAG_MAX" value="3"> + Used internally to mark the end of the Flags section. </constant> <constant name="ALPHA_CUT_DISABLED" value="0"> </constant> diff --git a/doc/classes/SpriteFrames.xml b/doc/classes/SpriteFrames.xml index 1c5669b898..e46fdc80e0 100644 --- a/doc/classes/SpriteFrames.xml +++ b/doc/classes/SpriteFrames.xml @@ -4,7 +4,7 @@ Sprite frame library for AnimatedSprite. </brief_description> <description> - Sprite frame library for [AnimatedSprite]. + Sprite frame library for [AnimatedSprite]. Contains frames and animation data for playback. </description> <tutorials> </tutorials> @@ -17,6 +17,7 @@ <argument index="0" name="anim" type="String"> </argument> <description> + Adds a new animation to the the library. </description> </method> <method name="add_frame"> @@ -26,9 +27,10 @@ </argument> <argument index="1" name="frame" type="Texture"> </argument> - <argument index="2" name="atpos" type="int" default="-1"> + <argument index="2" name="at_position" type="int" default="-1"> </argument> <description> + Adds a frame to the given animation. </description> </method> <method name="clear"> @@ -37,12 +39,14 @@ <argument index="0" name="anim" type="String"> </argument> <description> + Removes all frames from the given animation. </description> </method> <method name="clear_all"> <return type="void"> </return> <description> + Removes all animations. A "default" animation will be created. </description> </method> <method name="get_animation_loop" qualifiers="const"> @@ -51,6 +55,7 @@ <argument index="0" name="anim" type="String"> </argument> <description> + If [code]true[/code] the given animation will loop. </description> </method> <method name="get_animation_speed" qualifiers="const"> @@ -59,6 +64,7 @@ <argument index="0" name="anim" type="String"> </argument> <description> + The animation's speed in frames per second. </description> </method> <method name="get_frame" qualifiers="const"> @@ -69,6 +75,7 @@ <argument index="1" name="idx" type="int"> </argument> <description> + Returns the animation's selected frame. </description> </method> <method name="get_frame_count" qualifiers="const"> @@ -77,6 +84,7 @@ <argument index="0" name="anim" type="String"> </argument> <description> + Returns the number of frames in the animation. </description> </method> <method name="has_animation" qualifiers="const"> @@ -85,6 +93,7 @@ <argument index="0" name="anim" type="String"> </argument> <description> + If [code]true[/code] the named animation exists. </description> </method> <method name="remove_animation"> @@ -93,6 +102,7 @@ <argument index="0" name="anim" type="String"> </argument> <description> + Removes the given animation. </description> </method> <method name="remove_frame"> @@ -103,6 +113,7 @@ <argument index="1" name="idx" type="int"> </argument> <description> + Removes the animation's selected frame. </description> </method> <method name="rename_animation"> @@ -113,6 +124,7 @@ <argument index="1" name="newname" type="String"> </argument> <description> + Changes the animation's name to [code]newname[/code]. </description> </method> <method name="set_animation_loop"> @@ -123,6 +135,7 @@ <argument index="1" name="loop" type="bool"> </argument> <description> + If [code]true[/code] the animation will loop. </description> </method> <method name="set_animation_speed"> @@ -133,6 +146,7 @@ <argument index="1" name="speed" type="float"> </argument> <description> + The animation's speed in frames per second. </description> </method> <method name="set_frame"> @@ -145,11 +159,13 @@ <argument index="2" name="txt" type="Texture"> </argument> <description> + Sets the texture of the given frame. </description> </method> </methods> <members> <member name="animations" type="Array" setter="_set_animations" getter="_get_animations"> + An [Array] containing the [code]name[/code], [code]speed[/code], [code]loop[/code], and [code]frames[/code] of each animation. </member> <member name="frames" type="Array" setter="_set_frames" getter="_get_frames"> </member> diff --git a/doc/classes/StaticBody2D.xml b/doc/classes/StaticBody2D.xml index 2f23ac588b..cff41074b8 100644 --- a/doc/classes/StaticBody2D.xml +++ b/doc/classes/StaticBody2D.xml @@ -4,9 +4,8 @@ Static body for 2D Physics. </brief_description> <description> - Static body for 2D Physics. A static body is a simple body that is not intended to move. They don't consume any CPU resources in contrast to a [RigidBody2D] so they are great for scenario collision. - A static body can also be animated by using simulated motion mode. This is useful for implementing functionalities such as moving platforms. When this mode is active the body can be animated and automatically computes linear and angular velocity to apply in that frame and to influence other bodies. - Alternatively, a constant linear or angular velocity can be set for the static body, so even if it doesn't move, it affects other bodies as if it was moving (this is useful for simulating conveyor belts or conveyor wheels). + Static body for 2D Physics. A StaticBody2D is a body that is not intended to move. It is ideal for implementing objects in the environment, such as walls or platforms. + Additionally, a constant linear or angular velocity can be set for the static body, which will affect colliding bodies as if it were moving (for example, a conveyor belt). </description> <tutorials> </tutorials> @@ -80,12 +79,16 @@ </methods> <members> <member name="bounce" type="float" setter="set_bounce" getter="get_bounce"> + The body's bounciness. Values range from [code]0[/code] (no bounce) to [code]1[/code] (full bounciness). </member> <member name="constant_angular_velocity" type="float" setter="set_constant_angular_velocity" getter="get_constant_angular_velocity"> + Constant angular velocity for the body. This does not rotate the body, but affects colliding bodies, as if it were rotating. </member> <member name="constant_linear_velocity" type="Vector2" setter="set_constant_linear_velocity" getter="get_constant_linear_velocity"> + Constant linear velocity for the body. This does not move the body, but affects colliding bodies, as if it were moving. </member> <member name="friction" type="float" setter="set_friction" getter="get_friction"> + The body's friction. Values range from [code]0[/code] (no friction) to [code]1[/code] (full friction). </member> </members> <constants> diff --git a/doc/classes/StreamPeerBuffer.xml b/doc/classes/StreamPeerBuffer.xml index 70a4c781c9..141d46564c 100644 --- a/doc/classes/StreamPeerBuffer.xml +++ b/doc/classes/StreamPeerBuffer.xml @@ -27,7 +27,7 @@ <description> </description> </method> - <method name="get_pos" qualifiers="const"> + <method name="get_position" qualifiers="const"> <return type="int"> </return> <description> @@ -50,7 +50,7 @@ <method name="seek"> <return type="void"> </return> - <argument index="0" name="pos" type="int"> + <argument index="0" name="position" type="int"> </argument> <description> </description> diff --git a/doc/classes/String.xml b/doc/classes/String.xml index ce3dc1db2f..c7c19997b9 100644 --- a/doc/classes/String.xml +++ b/doc/classes/String.xml @@ -266,12 +266,12 @@ </description> </method> <method name="erase"> - <argument index="0" name="pos" type="int"> + <argument index="0" name="position" type="int"> </argument> <argument index="1" name="chars" type="int"> </argument> <description> - Erase [code]chars[/code] characters from the string starting from [code]pos[/code]. + Erase [code]chars[/code] characters from the string starting from [code]position[/code]. </description> </method> <method name="find"> @@ -360,7 +360,7 @@ <method name="insert"> <return type="String"> </return> - <argument index="0" name="pos" type="int"> + <argument index="0" name="position" type="int"> </argument> <argument index="1" name="what" type="String"> </argument> @@ -445,7 +445,7 @@ <method name="left"> <return type="String"> </return> - <argument index="0" name="pos" type="int"> + <argument index="0" name="position" type="int"> </argument> <description> Return an amount of characters from the left of the string. @@ -596,7 +596,7 @@ <method name="right"> <return type="String"> </return> - <argument index="0" name="pos" type="int"> + <argument index="0" name="position" type="int"> </argument> <description> Return the right side of the string from a given position. diff --git a/doc/classes/StyleBoxFlat.xml b/doc/classes/StyleBoxFlat.xml index b09b9f0679..eb9f82af6c 100644 --- a/doc/classes/StyleBoxFlat.xml +++ b/doc/classes/StyleBoxFlat.xml @@ -14,12 +14,12 @@ [codeblock] height = 30 corner_radius_top_left = 50 - corner_raidus_bottom_left = 100 + corner_radius_bottom_left = 100 [/codeblock] The relative system now would take the 1:2 ratio of the two left corners to calculate the actual corner width. Both corners added will [b]never[/b] be more than the height. Result: [codeblock] corner_radius_top_left: 10 - corner_raidus_bottom_left: 20 + corner_radius_bottom_left: 20 [/codeblock] </description> <tutorials> @@ -202,7 +202,7 @@ </argument> <argument index="1" name="radius_top_right" type="int"> </argument> - <argument index="2" name="radius_botton_right" type="int"> + <argument index="2" name="radius_bottom_right" type="int"> </argument> <argument index="3" name="radius_bottom_left" type="int"> </argument> @@ -268,7 +268,7 @@ </methods> <members> <member name="anti_aliasing" type="bool" setter="set_anti_aliased" getter="is_anti_aliased"> - Anti Aliasing draws a small ring around edges. This ring fades to transparent. As a result edges look much smoother. This is only noticable when using rounded corners. + Anti Aliasing draws a small ring around edges. This ring fades to transparent. As a result edges look much smoother. This is only noticeable when using rounded corners. </member> <member name="anti_aliasing_size" type="int" setter="set_aa_size" getter="get_aa_size"> This changes the size of the faded ring. Higher values can be used to achieve a "blurry" effect. diff --git a/doc/classes/TabContainer.xml b/doc/classes/TabContainer.xml index ffe99eb82b..0d5db80086 100644 --- a/doc/classes/TabContainer.xml +++ b/doc/classes/TabContainer.xml @@ -4,8 +4,10 @@ Tabbed Container. </brief_description> <description> - Tabbed Container. Contains several children controls, but shows only one at the same time. Clicking on the top tabs allows to change the currently visible one. - Children controls of this one automatically. + Sets the active tab's [code]visible[/code] property to the value [code]true[/code]. Sets all other children's to [code]false[/code]. + Ignores non-[class Control] children. + Individual tabs are always visible unless you use [method set_tab_disabled] and [method set_tab_title] to hide it. + To hide only a tab's content, nest the content inside a child [class Control], so it receives the [class TabContainer]'s visibility setting instead. </description> <tutorials> </tutorials> @@ -16,40 +18,42 @@ <return type="bool"> </return> <description> - Return whether the tabs should be visible or hidden. + Returns [code]true[/code] if the tabs are visible. </description> </method> <method name="get_current_tab" qualifiers="const"> <return type="int"> </return> <description> - Return the current tab index that is being shown. + Returns the currently visible tab's index. </description> </method> <method name="get_current_tab_control" qualifiers="const"> <return type="Control"> </return> <description> + Returns the child [class Control] node located at the active tab index. </description> </method> <method name="get_popup" qualifiers="const"> <return type="Popup"> </return> <description> + Returns the [class Popup] node instance if one has been set already with [method set_popup]. </description> </method> <method name="get_previous_tab" qualifiers="const"> <return type="int"> </return> <description> - Return the previous tab index that was being shown. + Returns the previously active tab index. </description> </method> <method name="get_tab_align" qualifiers="const"> <return type="int" enum="TabContainer.TabAlign"> </return> <description> - Return tab alignment, from the ALIGN_* enum. + Returns the tab alignment. See the [code]ALIGN_*[/code] constants. </description> </method> <method name="get_tab_control" qualifiers="const"> @@ -58,14 +62,14 @@ <argument index="0" name="idx" type="int"> </argument> <description> - Return the current tab control that is being shown. + Returns the currently visible tab's [class Control] node. </description> </method> <method name="get_tab_count" qualifiers="const"> <return type="int"> </return> <description> - Return the amount of tabs. + Returns the number of tabs. </description> </method> <method name="get_tab_disabled" qualifiers="const"> @@ -74,6 +78,7 @@ <argument index="0" name="tab_idx" type="int"> </argument> <description> + Returns [code]true[/code] if the tab at index [code]tab_idx[/code] is disabled. </description> </method> <method name="get_tab_icon" qualifiers="const"> @@ -82,6 +87,7 @@ <argument index="0" name="tab_idx" type="int"> </argument> <description> + Returns the [Texture] for the tab at index [code]tab_idx[/code] or null if the tab has no [Texture]. </description> </method> <method name="get_tab_title" qualifiers="const"> @@ -90,7 +96,7 @@ <argument index="0" name="tab_idx" type="int"> </argument> <description> - Return the title for the tab. Tab titles are by default the children node name, but this can be overridden. + Returns the title of the tab at index [code]tab_idx[/code]. Tab titles default to the name of the indexed child node, but this can be overridden with [method set_tab_title]. </description> </method> <method name="set_current_tab"> @@ -99,7 +105,7 @@ <argument index="0" name="tab_idx" type="int"> </argument> <description> - Bring a tab (and the Control it represents) to the front, and hide the rest. + Sets to [code]false[/code] the [code]visible[/code] property for all [class Control] children except for the tab at [code]tab_idx[/code]. </description> </method> <method name="set_popup"> @@ -108,6 +114,7 @@ <argument index="0" name="popup" type="Node"> </argument> <description> + If set on a [class Popup] node instance, a popup menu icon appears in the top-right corner of the [class TabContainer]. Clicking it will expand the [class Popup] node. </description> </method> <method name="set_tab_align"> @@ -116,7 +123,7 @@ <argument index="0" name="align" type="int" enum="TabContainer.TabAlign"> </argument> <description> - Set tab alignment, from the ALIGN_* enum. Moves tabs to the left, right or center. + Sets tab alignment, from the [code]ALIGN_*[/code] constants. Moves tabs to the left, right, or center. </description> </method> <method name="set_tab_disabled"> @@ -127,6 +134,7 @@ <argument index="1" name="disabled" type="bool"> </argument> <description> + If [code]disabled[/code] is false, hides the tab at index [code]tab_idx[/code]. Note that its title text will remain, unless also removed with [method set_tab_title]. </description> </method> <method name="set_tab_icon"> @@ -137,7 +145,7 @@ <argument index="1" name="icon" type="Texture"> </argument> <description> - Set an icon for a tab. + Sets an icon for the tab at index [code]tab_idx[/code]. </description> </method> <method name="set_tab_title"> @@ -148,7 +156,7 @@ <argument index="1" name="title" type="String"> </argument> <description> - Set a title for the tab. Tab titles are by default the children node name, but this can be overridden. + Sets a title for the tab at index [code]tab_idx[/code]. Tab titles default to the name of the indexed child node, but this can be overridden with [method set_tab_title]. </description> </method> <method name="set_tabs_visible"> @@ -157,35 +165,39 @@ <argument index="0" name="visible" type="bool"> </argument> <description> - Set whether the tabs should be visible or hidden. + If [code]true[/code] tabs are visible. If [code]false[/code] tabs' content and titles are hidden. Default value: [code]true[/code]. </description> </method> </methods> <members> <member name="current_tab" type="int" setter="set_current_tab" getter="get_current_tab"> + The current tab index. When set, this index's [class Control] node's [code]visible[/code] property is set to [code]true[/code] and all others are set to [code]false[/code]. </member> <member name="tab_align" type="int" setter="set_tab_align" getter="get_tab_align" enum="TabContainer.TabAlign"> + The alignment of all tabs in the tab container. See the [code]ALIGN_*[/code] constants for details. </member> <member name="tabs_visible" type="bool" setter="set_tabs_visible" getter="are_tabs_visible"> + If [code]true[/code] tabs are visible. If [code]false[/code] tabs' content and titles are hidden. Default value: [code]true[/code]. </member> </members> <signals> <signal name="pre_popup_pressed"> <description> + Emitted when the [class TabContainer]'s [class Popup] button is clicked. See [method set_popup] for details. </description> </signal> <signal name="tab_changed"> <argument index="0" name="tab" type="int"> </argument> <description> - Emitted only when the current tab changes. + Emitted when switching to another tab. </description> </signal> <signal name="tab_selected"> <argument index="0" name="tab" type="int"> </argument> <description> - Emitted when a tab is being selected, even if it is the same tab. + Emitted when a tab is selected, even if it is the current tab. </description> </signal> </signals> diff --git a/doc/classes/TextEdit.xml b/doc/classes/TextEdit.xml index d77cb69eef..9a500af347 100644 --- a/doc/classes/TextEdit.xml +++ b/doc/classes/TextEdit.xml @@ -239,6 +239,12 @@ Returns true if highlight all occurrences is enabled. </description> </method> + <method name="is_overriding_selected_font_color" qualifiers="const"> + <return type="bool"> + </return> + <description> + </description> + </method> <method name="is_selection_active" qualifiers="const"> <return type="bool"> </return> @@ -343,6 +349,14 @@ Set the maximum amount of characters editable. </description> </method> + <method name="set_override_selected_font_color"> + <return type="void"> + </return> + <argument index="0" name="override" type="bool"> + </argument> + <description> + </description> + </method> <method name="set_readonly"> <return type="void"> </return> @@ -421,6 +435,8 @@ </member> <member name="highlight_all_occurrences" type="bool" setter="set_highlight_all_occurrences" getter="is_highlight_all_occurrences_enabled"> </member> + <member name="override_selected_font_color" type="bool" setter="set_override_selected_font_color" getter="is_overriding_selected_font_color"> + </member> <member name="show_line_numbers" type="bool" setter="set_show_line_numbers" getter="is_show_line_numbers_enabled"> </member> <member name="smooth_scrolling" type="bool" setter="set_smooth_scroll_enable" getter="is_smooth_scroll_enabled"> diff --git a/doc/classes/Texture.xml b/doc/classes/Texture.xml index d09236bbc9..cbf72eb991 100644 --- a/doc/classes/Texture.xml +++ b/doc/classes/Texture.xml @@ -16,7 +16,7 @@ </return> <argument index="0" name="canvas_item" type="RID"> </argument> - <argument index="1" name="pos" type="Vector2"> + <argument index="1" name="position" type="Vector2"> </argument> <argument index="2" name="modulate" type="Color" default="Color( 1, 1, 1, 1 )"> </argument> diff --git a/doc/classes/TextureButton.xml b/doc/classes/TextureButton.xml index e4f00555b3..8e51548c10 100644 --- a/doc/classes/TextureButton.xml +++ b/doc/classes/TextureButton.xml @@ -1,11 +1,11 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="TextureButton" inherits="BaseButton" category="Core" version="3.0.alpha.custom_build"> <brief_description> - Button that can be themed with textures. + Texture-based button. Supports Pressed, Hover, Disabled and Focused states. </brief_description> <description> - Button that can be themed with textures. This is like a regular [Button] but can be themed by assigning textures to it. This button is intended to be easy to theme, however a regular button can expand (that uses styleboxes) and still be better if the interface is expect to have internationalization of texts. - Only the normal texture is required, the others are optional. + [code]TextureButton[/code] has the same functionality as [Button], except it uses sprites instead of Godot's [Theme] resource. It is faster to create, but it doesn't support localization like more complex Controls. + The Normal state's texture is required. Others are optional. </description> <tutorials> </tutorials> @@ -127,36 +127,51 @@ </methods> <members> <member name="expand" type="bool" setter="set_expand" getter="get_expand"> + If [code]true[/code] the texture stretches to the edges of the node's bounding rectangle using the [member stretch_mode]. If [code]false[/code] the texture will not scale with the node. Default value: [code]false[/code]. </member> <member name="stretch_mode" type="int" setter="set_stretch_mode" getter="get_stretch_mode" enum="TextureButton.StretchMode"> + Controls the texture's behavior when you resize the node's bounding rectangle, [b]only if[/b] [member expand] is [code]true[/code]. Set it to one of the [code]STRETCH_*[/code] constants. See the constants to learn more. </member> <member name="texture_click_mask" type="BitMap" setter="set_click_mask" getter="get_click_mask"> + Pure black and white [Bitmap] image to use for click detection. On the mask, white pixels represent the button's clickable area. Use it to create buttons with curved shapes. </member> <member name="texture_disabled" type="Texture" setter="set_disabled_texture" getter="get_disabled_texture"> + Texture to display when the node is disabled. See [member BaseButton.disabled]. </member> <member name="texture_focused" type="Texture" setter="set_focused_texture" getter="get_focused_texture"> + Texture to display when the node has mouse or keyboard focus. </member> <member name="texture_hover" type="Texture" setter="set_hover_texture" getter="get_hover_texture"> + Texture to display when the mouse hovers the node. </member> <member name="texture_normal" type="Texture" setter="set_normal_texture" getter="get_normal_texture"> + Texture to display by default, when the node is [b]not[/b] in the disabled, focused, hover or pressed state. </member> <member name="texture_pressed" type="Texture" setter="set_pressed_texture" getter="get_pressed_texture"> + Texture to display on mouse down over the node, if the node has keyboard focus and the player presses the enter key or if the player presses the [member BaseButton.shortcut] key. </member> </members> <constants> <constant name="STRETCH_SCALE" value="0"> + Scale to fit the node's bounding rectangle. </constant> <constant name="STRETCH_TILE" value="1"> + Tile inside the node's bounding rectangle. </constant> <constant name="STRETCH_KEEP" value="2"> + The texture keeps its original size and stays in the bounding rectangle's top-left corner. </constant> <constant name="STRETCH_KEEP_CENTERED" value="3"> + The texture keeps its original size and stays centered in the node's bounding rectangle. </constant> <constant name="STRETCH_KEEP_ASPECT" value="4"> + Scale the texture to fit the node's bounding rectangle, but maintain the texture's aspect ratio. </constant> <constant name="STRETCH_KEEP_ASPECT_CENTERED" value="5"> + Scale the texture to fit the node's bounding rectangle, center it, and maintain its aspect ratio. </constant> <constant name="STRETCH_KEEP_ASPECT_COVERED" value="6"> + Scale the texture so that the shorter side fits the bounding rectangle. The other side clips to the node's limits. </constant> </constants> </class> diff --git a/doc/classes/TextureProgress.xml b/doc/classes/TextureProgress.xml index 0a6ffcdeb8..f8165753c6 100644 --- a/doc/classes/TextureProgress.xml +++ b/doc/classes/TextureProgress.xml @@ -1,10 +1,10 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="TextureProgress" inherits="Range" category="Core" version="3.0.alpha.custom_build"> <brief_description> - Textured progress bar. + Texture-based progress bar. Useful for loading screens and life or stamina bars. </brief_description> <description> - A [ProgressBar] that uses textures to display fill percentage. Can be set to linear or radial mode. + TextureProgress works like [ProgressBar] but it uses up to 3 textures instead of Godot's [Theme] resource. Works horizontally, vertically, and radially. </description> <tutorials> </tutorials> @@ -151,51 +151,59 @@ The fill direction. Uses FILL_* constants. </member> <member name="nine_patch_stretch" type="bool" setter="set_nine_patch_stretch" getter="get_nine_patch_stretch"> - If [code]true[/code] textures will be stretched as [NinePatchRect]. Uses [code]stretch_margin[/code] properties (see below). Default value: [code]false[/code] + If [code]true[/code] Godot treats the bar's textures like [NinePatchRect]. Use [code]stretch_margin_*[/code], like [member stretch_margin_bottom], to set up the nine patch's 3x3 grid. Default value: [code]false[/code]. </member> <member name="radial_center_offset" type="Vector2" setter="set_radial_center_offset" getter="get_radial_center_offset"> - The offset amount for radial mode. + Offsets [member texture_progress] if [member fill_mode] is [code]FILL_CLOCKWISE[/code] or [code]FILL_COUNTER_CLOCKWISE[/code]. </member> <member name="radial_fill_degrees" type="float" setter="set_fill_degrees" getter="get_fill_degrees"> - The amount of the texture to use for radial mode. + Upper limit for the fill of [member texture_progress] if [member fill_mode] is [code]FILL_CLOCKWISE[/code] or [code]FILL_COUNTER_CLOCKWISE[/code]. When the node's [code]value[/code] is equal to its [code]max_value[/code], the texture fills up to this angle. + See [member Range.value], [member Range.max_value]. </member> <member name="radial_initial_angle" type="float" setter="set_radial_initial_angle" getter="get_radial_initial_angle"> - Start angle for radial mode. + Starting angle for the fill of [member texture_progress] if [member fill_mode] is [code]FILL_CLOCKWISE[/code] or [code]FILL_COUNTER_CLOCKWISE[/code]. When the node's [code]value[/code] is equal to its [code]min_value[/code], the texture doesn't show up at all. When the [code]value[/code] increases, the texture fills and tends towards [member radial_fill_degrees]. </member> <member name="stretch_margin_bottom" type="int" setter="set_stretch_margin" getter="get_stretch_margin"> - Nine-patch texture offset for bottom margin. + The height of the 9-patch's bottom row. A margin of 16 means the 9-slice's bottom corners and side will have a height of 16 pixels. You can set all 4 margin values individually to create panels with non-uniform borders. </member> <member name="stretch_margin_left" type="int" setter="set_stretch_margin" getter="get_stretch_margin"> - Nine-patch texture offset for left margin. + The width of the 9-patch's left column. </member> <member name="stretch_margin_right" type="int" setter="set_stretch_margin" getter="get_stretch_margin"> - Nine-patch texture offset for right margin. + The width of the 9-patch's right column. </member> <member name="stretch_margin_top" type="int" setter="set_stretch_margin" getter="get_stretch_margin"> - Nine-patch texture offset for top margin. + The height of the 9-patch's top row. </member> <member name="texture_over" type="Texture" setter="set_over_texture" getter="get_over_texture"> - The [Texture] that will be drawn over the progress bar. + [Texture] that draws over the progress bar. Use it to add highlights or an upper-frame that hides part of [member texture_progress]. </member> <member name="texture_progress" type="Texture" setter="set_progress_texture" getter="get_progress_texture"> - The [Texture] used to display [code]value[/code]. + [Texture] that clips based on the node's [code]value[/code] and [member fill_mode]. As [code]value[/code] increased, the texture fills up. It shows entirely when [code]value[/code] reaches [code]max_value[/code]. It doesn't show at all if [code]value[/code] is equal to [code]min_value[/code]. + The [code]value[/code] property comes from [Range]. See [member Range.value], [member Range.min_value], [member Range.max_value]. </member> <member name="texture_under" type="Texture" setter="set_under_texture" getter="get_under_texture"> - The [Texture] that will be drawn under the progress bar. + [Texture] that draws under the progress bar. The bar's background. </member> </members> <constants> <constant name="FILL_LEFT_TO_RIGHT" value="0"> + The [member texture_progress] fills from left to right. </constant> <constant name="FILL_RIGHT_TO_LEFT" value="1"> + The [member texture_progress] fills from right to left. </constant> <constant name="FILL_TOP_TO_BOTTOM" value="2"> + The [member texture_progress] fills from top to bototm. </constant> <constant name="FILL_BOTTOM_TO_TOP" value="3"> + The [member texture_progress] fills from bottom to top. </constant> <constant name="FILL_CLOCKWISE" value="4"> + Turns the node into a radial bar. The [member texture_progress] fills clockwise. See [member radial_center_offset], [member radial_initial_angle] and [member radial_fill_degrees] to refine its behavior. </constant> <constant name="FILL_COUNTER_CLOCKWISE" value="5"> + Turns the node into a radial bar. The [member texture_progress] fills counter-clockwise. See [member radial_center_offset], [member radial_initial_angle] and [member radial_fill_degrees] to refine its behavior. </constant> </constants> </class> diff --git a/doc/classes/Thread.xml b/doc/classes/Thread.xml index 2156d04614..b2467bca7f 100644 --- a/doc/classes/Thread.xml +++ b/doc/classes/Thread.xml @@ -4,7 +4,7 @@ A unit of execution in a process. </brief_description> <description> - A unit of execution in a process. Can run methods on [Object]\ s simultaneously. The use of synchronization via [Mutex], [Semaphore] is advised if working with shared objects. + A unit of execution in a process. Can run methods on [Object]s simultaneously. The use of synchronization via [Mutex], [Semaphore] is advised if working with shared objects. </description> <tutorials> </tutorials> @@ -15,7 +15,7 @@ <return type="String"> </return> <description> - Returns the current [Thread]\ s id, uniquely identifying it among all threads. + Returns the current [Thread]s id, uniquely identifying it among all threads. </description> </method> <method name="is_active" qualifiers="const"> diff --git a/doc/classes/TileMap.xml b/doc/classes/TileMap.xml index e1a6c0b523..c44fa500cd 100644 --- a/doc/classes/TileMap.xml +++ b/doc/classes/TileMap.xml @@ -39,7 +39,7 @@ <method name="get_cellv" qualifiers="const"> <return type="int"> </return> - <argument index="0" name="pos" type="Vector2"> + <argument index="0" name="position" type="Vector2"> </argument> <description> Return the tile index of the cell referenced by a Vector2. @@ -222,7 +222,7 @@ <method name="map_to_world" qualifiers="const"> <return type="Vector2"> </return> - <argument index="0" name="mappos" type="Vector2"> + <argument index="0" name="map_position" type="Vector2"> </argument> <argument index="1" name="ignore_half_ofs" type="bool" default="false"> </argument> @@ -264,7 +264,7 @@ <method name="set_cellv"> <return type="void"> </return> - <argument index="0" name="pos" type="Vector2"> + <argument index="0" name="position" type="Vector2"> </argument> <argument index="1" name="tile" type="int"> </argument> @@ -442,7 +442,7 @@ <method name="world_to_map" qualifiers="const"> <return type="Vector2"> </return> - <argument index="0" name="worldpos" type="Vector2"> + <argument index="0" name="world_position" type="Vector2"> </argument> <description> Return the tilemap (grid-based) coordinates corresponding to the absolute world position given as an argument. diff --git a/doc/classes/Timer.xml b/doc/classes/Timer.xml index 35979bb1fc..035dec7980 100644 --- a/doc/classes/Timer.xml +++ b/doc/classes/Timer.xml @@ -141,8 +141,8 @@ </signal> </signals> <constants> - <constant name="TIMER_PROCESS_FIXED" value="0"> - Update the Timer at fixed intervals (framerate processing). + <constant name="TIMER_PROCESS_PHYSICS" value="0"> + Update the Timer during the physics step at each frame (fixed framerate processing). </constant> <constant name="TIMER_PROCESS_IDLE" value="1"> Update the Timer during the idle time at each frame. diff --git a/doc/classes/TouchScreenButton.xml b/doc/classes/TouchScreenButton.xml index 8a96fa1454..51cb7f86f2 100644 --- a/doc/classes/TouchScreenButton.xml +++ b/doc/classes/TouchScreenButton.xml @@ -1,8 +1,10 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="TouchScreenButton" inherits="Node2D" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Button for touch screen devices. </brief_description> <description> + Button for touch screen devices. You can set it to be visible on all screens, or only on touch devices. </description> <tutorials> </tutorials> @@ -13,36 +15,42 @@ <return type="String"> </return> <description> + Returns the button's action. </description> </method> <method name="get_bitmask" qualifiers="const"> <return type="BitMap"> </return> <description> + Returns the button's bitmask. </description> </method> <method name="get_shape" qualifiers="const"> <return type="Shape2D"> </return> <description> + Returns the button's shape. </description> </method> <method name="get_texture" qualifiers="const"> <return type="Texture"> </return> <description> + Returns the button's texture for the normal state. </description> </method> <method name="get_texture_pressed" qualifiers="const"> <return type="Texture"> </return> <description> + Returns the button's texture for the pressed state. </description> </method> <method name="get_visibility_mode" qualifiers="const"> <return type="int" enum="TouchScreenButton.VisibilityMode"> </return> <description> + Sets the button's visibility mode. See [code]VISIBILITY_*[/code] constants. </description> </method> <method name="is_passby_press_enabled" qualifiers="const"> @@ -55,6 +63,7 @@ <return type="bool"> </return> <description> + Returns [code]true[/code] if this button is currently pressed. </description> </method> <method name="is_shape_centered" qualifiers="const"> @@ -75,6 +84,7 @@ <argument index="0" name="action" type="String"> </argument> <description> + Sets the button's action. </description> </method> <method name="set_bitmask"> @@ -83,6 +93,7 @@ <argument index="0" name="bitmask" type="BitMap"> </argument> <description> + Sets the button's [BitMap] bitmask. </description> </method> <method name="set_passby_press"> @@ -91,6 +102,7 @@ <argument index="0" name="enabled" type="bool"> </argument> <description> + If [code]true[/code] passby presses are enabled for this button. </description> </method> <method name="set_shape"> @@ -99,6 +111,7 @@ <argument index="0" name="shape" type="Shape2D"> </argument> <description> + Sets the button's shape. </description> </method> <method name="set_shape_centered"> @@ -107,6 +120,7 @@ <argument index="0" name="bool" type="bool"> </argument> <description> + If [code]true[/code] the button's shape is centered. </description> </method> <method name="set_shape_visible"> @@ -115,6 +129,7 @@ <argument index="0" name="bool" type="bool"> </argument> <description> + If [code]true[/code] the button's shape is visible. </description> </method> <method name="set_texture"> @@ -123,6 +138,7 @@ <argument index="0" name="texture" type="Texture"> </argument> <description> + Sets the button's [Texture] for the normal state. </description> </method> <method name="set_texture_pressed"> @@ -131,6 +147,7 @@ <argument index="0" name="texture_pressed" type="Texture"> </argument> <description> + Sets the button's [Texture] for the pressed state. </description> </method> <method name="set_visibility_mode"> @@ -139,43 +156,57 @@ <argument index="0" name="mode" type="int" enum="TouchScreenButton.VisibilityMode"> </argument> <description> + Sets the button's visibility mode. See the [code]VISIBILITY_*[/code] constants. </description> </method> </methods> <members> <member name="action" type="String" setter="set_action" getter="get_action"> + The button's action. Actions can be handled with [InputEventAction]. </member> <member name="bitmask" type="BitMap" setter="set_bitmask" getter="get_bitmask"> + The button's bitmask. </member> <member name="normal" type="Texture" setter="set_texture" getter="get_texture"> + The button's texture for the normal state. </member> <member name="passby_press" type="bool" setter="set_passby_press" getter="is_passby_press_enabled"> + If [code]true[/code] passby presses are enabled. </member> <member name="pressed" type="Texture" setter="set_texture_pressed" getter="get_texture_pressed"> + The button's texture for the pressed state. </member> <member name="shape" type="Shape2D" setter="set_shape" getter="get_shape"> + The button's shape. </member> <member name="shape_centered" type="bool" setter="set_shape_centered" getter="is_shape_centered"> + If [code]true[/code] the button's shape is centered. </member> <member name="shape_visible" type="bool" setter="set_shape_visible" getter="is_shape_visible"> + If [code]true[/code] the button's shape is visible. </member> <member name="visibility_mode" type="int" setter="set_visibility_mode" getter="get_visibility_mode" enum="TouchScreenButton.VisibilityMode"> + The button's visibility mode. See [code]VISIBILITY_*[/code] constants. </member> </members> <signals> <signal name="pressed"> <description> + Emitted when the button is pressed (down). </description> </signal> <signal name="released"> <description> + Emitted when the button is released (up). </description> </signal> </signals> <constants> <constant name="VISIBILITY_ALWAYS" value="0"> + Always visible. </constant> <constant name="VISIBILITY_TOUCHSCREEN_ONLY" value="1"> + Visible on touch screens only. </constant> </constants> </class> diff --git a/doc/classes/Transform.xml b/doc/classes/Transform.xml index 6780de1943..cd80d568e7 100644 --- a/doc/classes/Transform.xml +++ b/doc/classes/Transform.xml @@ -68,7 +68,7 @@ <return type="Transform"> </return> <description> - Returns the inverse of the transfrom, under the assumption that the transformation is composed of rotation, scaling and translation. + Returns the inverse of the transform, under the assumption that the transformation is composed of rotation, scaling and translation. </description> </method> <method name="interpolate_with"> @@ -104,7 +104,7 @@ <return type="Transform"> </return> <description> - Returns the transfrom with the basis orthogonal (90 degrees), and normalized axis vectors. + Returns the transform with the basis orthogonal (90 degrees), and normalized axis vectors. </description> </method> <method name="rotated"> diff --git a/doc/classes/Transform2D.xml b/doc/classes/Transform2D.xml index 4cbe9123f1..76b9b0e845 100644 --- a/doc/classes/Transform2D.xml +++ b/doc/classes/Transform2D.xml @@ -36,9 +36,9 @@ <method name="Transform2D"> <return type="Transform2D"> </return> - <argument index="0" name="rot" type="float"> + <argument index="0" name="rotation" type="float"> </argument> - <argument index="1" name="pos" type="Vector2"> + <argument index="1" name="position" type="Vector2"> </argument> <description> Constructs the [Transform2D] from rotation angle in radians and position [Vector2]. @@ -112,7 +112,7 @@ <return type="Transform2D"> </return> <description> - Returns the transfrom with the basis orthogonal (90 degrees), and normalized axis vectors. + Returns the transform with the basis orthogonal (90 degrees), and normalized axis vectors. </description> </method> <method name="rotated"> diff --git a/doc/classes/Tree.xml b/doc/classes/Tree.xml index a92a51049b..bf9245d23a 100644 --- a/doc/classes/Tree.xml +++ b/doc/classes/Tree.xml @@ -4,8 +4,8 @@ Control to show a tree of items. </brief_description> <description> - This shows a tree of items that can be selected, expanded and collapsed. The tree can have multiple columns with custom controls like text editing, buttons and popups. It can be useful for structural displaying and interactions. - Trees are built via code, using [TreeItem] objects to create the structure. They have a single root but multiple root can be simulated if a dummy hidden root is added. + This shows a tree of items that can be selected, expanded and collapsed. The tree can have multiple columns with custom controls like text editing, buttons and popups. It can be useful for structured displays and interactions. + Trees are built via code, using [TreeItem] objects to create the structure. They have a single root but multiple roots can be simulated if a dummy hidden root is added. [codeblock] func _ready(): var tree = Tree.new() @@ -26,14 +26,14 @@ <return type="bool"> </return> <description> - Get whether the column titles are being shown. + Returns [code]true[/code] if the column titles are being shown. </description> </method> <method name="clear"> <return type="void"> </return> <description> - Clear the tree. This erases all of the items. + Clears the tree. This removes all items. </description> </method> <method name="create_item"> @@ -42,36 +42,37 @@ <argument index="0" name="parent" type="Object" default="null"> </argument> <description> - Create an item in the tree and add it as the last child of [code]parent[/code]. If parent is not given, it will be added as the last child of the root, or it'll the be the root itself if the tree is empty. + Create an item in the tree and add it as the last child of [code]parent[/code]. If parent is not given, it will be added as the root's last child, or it'll the be the root itself if the tree is empty. </description> </method> <method name="ensure_cursor_is_visible"> <return type="void"> </return> <description> - Make the current selected item visible. This will scroll the tree to make sure the selected item is in sight. + Makes the currently selected item visible. This will scroll the tree to make sure the selected item is visible. </description> </method> <method name="get_allow_reselect" qualifiers="const"> <return type="bool"> </return> <description> + Returns [code]true[/code] if a cell that is currently already selected may be selected again. </description> </method> <method name="get_allow_rmb_select" qualifiers="const"> <return type="bool"> </return> <description> - Get whether a right click can select items. + Returns [code]true[/code] if a right click can select items. </description> </method> - <method name="get_column_at_pos" qualifiers="const"> + <method name="get_column_at_position" qualifiers="const"> <return type="int"> </return> - <argument index="0" name="pos" type="Vector2"> + <argument index="0" name="position" type="Vector2"> </argument> <description> - Get the column index under the given point. + Returns the column index under the given point. </description> </method> <method name="get_column_title" qualifiers="const"> @@ -80,7 +81,7 @@ <argument index="0" name="column" type="int"> </argument> <description> - Get the title of the given column. + Returns the column's title. </description> </method> <method name="get_column_width" qualifiers="const"> @@ -89,34 +90,34 @@ <argument index="0" name="column" type="int"> </argument> <description> - Get the width of the given column in pixels. + Returns the column's width in pixels. </description> </method> <method name="get_columns" qualifiers="const"> <return type="int"> </return> <description> - Get the amount of columns. + Returns the amount of columns. </description> </method> <method name="get_custom_popup_rect" qualifiers="const"> <return type="Rect2"> </return> <description> - Get the rectangle for custom popups. Helper to create custom cell controls that display a popup. See [method TreeItem.set_cell_mode]. + Returns the rectangle for custom popups. Helper to create custom cell controls that display a popup. See [method TreeItem.set_cell_mode]. </description> </method> <method name="get_drop_mode_flags" qualifiers="const"> <return type="int"> </return> <description> - Get the flags of the current drop mode. + Returns the current drop mode's flags. </description> </method> - <method name="get_drop_section_at_pos" qualifiers="const"> + <method name="get_drop_section_at_position" qualifiers="const"> <return type="int"> </return> - <argument index="0" name="pos" type="Vector2"> + <argument index="0" name="position" type="Vector2"> </argument> <description> </description> @@ -125,14 +126,14 @@ <return type="TreeItem"> </return> <description> - Get the current edited item. This is only available for custom cell mode. + Returns the currently edited item. This is only available for custom cell mode. </description> </method> <method name="get_edited_column" qualifiers="const"> <return type="int"> </return> <description> - Get the column of the cell for the current edited icon. This is only available for custom cell mode. + Returns the column for the currently edited item. This is only available for custom cell mode. </description> </method> <method name="get_item_area_rect" qualifiers="const"> @@ -143,16 +144,16 @@ <argument index="1" name="column" type="int" default="-1"> </argument> <description> - Get the rectangle area of the the specified item. If column is specified, only get the position and size of that column, otherwise get the rectangle containing all columns. + Returns the rectangle area for the specified item. If column is specified, only get the position and size of that column, otherwise get the rectangle containing all columns. </description> </method> - <method name="get_item_at_pos" qualifiers="const"> + <method name="get_item_at_position" qualifiers="const"> <return type="TreeItem"> </return> - <argument index="0" name="pos" type="Vector2"> + <argument index="0" name="position" type="Vector2"> </argument> <description> - Get the tree item at the specified position (relative to the tree origin position). + Returns the tree item at the specified position (relative to the tree origin position). </description> </method> <method name="get_next_selected"> @@ -161,49 +162,49 @@ <argument index="0" name="from" type="Object"> </argument> <description> - Get the next selected item after the given one. + Returns the next selected item after the given one. </description> </method> <method name="get_pressed_button" qualifiers="const"> <return type="int"> </return> <description> - Get the index of the last pressed button. + Returns the last pressed button's index. </description> </method> <method name="get_root"> <return type="TreeItem"> </return> <description> - Get the root item of the tree. + Returns the tree's root item. </description> </method> <method name="get_scroll" qualifiers="const"> <return type="Vector2"> </return> <description> - Get the current scrolling position. + Returns the current scrolling position. </description> </method> <method name="get_selected" qualifiers="const"> <return type="TreeItem"> </return> <description> - Get the currently selected item. + Returns the currently selected item. </description> </method> <method name="get_selected_column" qualifiers="const"> <return type="int"> </return> <description> - Get the column number of the current selection. + Returns the current selection's column. </description> </method> <method name="is_folding_hidden" qualifiers="const"> <return type="bool"> </return> <description> - Get whether the folding arrow is hidden. + Returns [code]true[/code] if the folding arrow is hidden. </description> </method> <method name="set_allow_reselect"> @@ -212,6 +213,7 @@ <argument index="0" name="allow" type="bool"> </argument> <description> + If [code]true[/code] the currently selected cell may be selected again. </description> </method> <method name="set_allow_rmb_select"> @@ -220,7 +222,7 @@ <argument index="0" name="allow" type="bool"> </argument> <description> - Set whether or not a right mouse button click can select items. + If [code]true[/code] a right mouse button click can select items. </description> </method> <method name="set_column_expand"> @@ -231,7 +233,7 @@ <argument index="1" name="expand" type="bool"> </argument> <description> - Set whether a column will have the "Expand" flag of [Control]. + If [code]true[/code] the column will have the "Expand" flag of [Control]. </description> </method> <method name="set_column_min_width"> @@ -262,7 +264,7 @@ <argument index="0" name="visible" type="bool"> </argument> <description> - Set whether the column titles visibility. + If [code]true[/code] column titles are visible. </description> </method> <method name="set_columns"> @@ -289,7 +291,7 @@ <argument index="0" name="hide" type="bool"> </argument> <description> - Set whether the folding arrow should be hidden. + If [code]true[/code] the folding arrow is hidden. </description> </method> <method name="set_hide_root"> @@ -298,7 +300,7 @@ <argument index="0" name="enable" type="bool"> </argument> <description> - Set whether the root of the tree should be hidden. + If [code]true[/code] the tree's root is hidden. </description> </method> <method name="set_select_mode"> @@ -307,7 +309,7 @@ <argument index="0" name="mode" type="int" enum="Tree.SelectMode"> </argument> <description> - Set the selection mode. Use one of the [code]SELECT_*[/code] constants. + Allow single or multiple selection. See the [code]SELECT_*[/code] constants. </description> </method> </methods> @@ -332,6 +334,7 @@ <argument index="0" name="column" type="int"> </argument> <description> + Emitted when a column's title is pressed. </description> </signal> <signal name="custom_popup_edited"> @@ -342,7 +345,7 @@ </description> </signal> <signal name="empty_tree_rmb_selected"> - <argument index="0" name="pos" type="Vector2"> + <argument index="0" name="position" type="Vector2"> </argument> <description> Emitted when the right mouse button is pressed if RMB selection is active and the tree is empty. @@ -366,19 +369,21 @@ </signal> <signal name="item_double_clicked"> <description> + Emitted when an item is double clicked. </description> </signal> <signal name="item_edited"> <description> - Emitted when an item is editted. + Emitted when an item is edited. </description> </signal> <signal name="item_rmb_edited"> <description> + Emitted when an item is edited using the right mouse button. </description> </signal> <signal name="item_rmb_selected"> - <argument index="0" name="pos" type="Vector2"> + <argument index="0" name="position" type="Vector2"> </argument> <description> Emitted when an item is selected with right mouse button. @@ -397,15 +402,18 @@ <argument index="2" name="selected" type="bool"> </argument> <description> + Emitted instead of [code]item_selected[/code] when [code]select_mode[/code] is [code]SELECT_MULTI[/code]. </description> </signal> </signals> <constants> <constant name="SELECT_SINGLE" value="0"> + Allow selection of a single item at a time. </constant> <constant name="SELECT_ROW" value="1"> </constant> <constant name="SELECT_MULTI" value="2"> + Allow selection of multiple items at the same time. </constant> <constant name="DROP_MODE_DISABLED" value="0"> </constant> diff --git a/doc/classes/TreeItem.xml b/doc/classes/TreeItem.xml index d1e45bd10f..47292ec200 100644 --- a/doc/classes/TreeItem.xml +++ b/doc/classes/TreeItem.xml @@ -1,8 +1,10 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="TreeItem" inherits="Object" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Control for a single item inside a [Tree]. </brief_description> <description> + Control for a single item inside a [Tree]. May have child [TreeItem]s and be styled as well as contain buttons. </description> <tutorials> </tutorials> @@ -23,6 +25,7 @@ <argument index="4" name="tooltip" type="String" default=""""> </argument> <description> + Adds a button with [Texture] [code]button[/code] at column [code]column[/code]. The [code]button_idx[/code] index is used to identify the button when calling other methods. If not specified, the next available index is used, which may be retrieved by calling [code]get_buton_count()[/code] immediately after this method. Optionally, the button can be [code]disabled[/code] and have a [code]tooltip[/code]. </description> </method> <method name="clear_custom_bg_color"> @@ -31,6 +34,7 @@ <argument index="0" name="column" type="int"> </argument> <description> + Resets the background color for the given column to default. </description> </method> <method name="clear_custom_color"> @@ -39,6 +43,7 @@ <argument index="0" name="column" type="int"> </argument> <description> + Resets the color for the given column to default. </description> </method> <method name="deselect"> @@ -47,6 +52,7 @@ <argument index="0" name="column" type="int"> </argument> <description> + Deselects the given column. </description> </method> <method name="erase_button"> @@ -57,6 +63,7 @@ <argument index="1" name="button_idx" type="int"> </argument> <description> + Removes the button at index [code]button_idx[/code] in column [code]column[/code]. </description> </method> <method name="get_button" qualifiers="const"> @@ -67,6 +74,7 @@ <argument index="1" name="button_idx" type="int"> </argument> <description> + Returns the [Texture] of the button at index [code]button_idx[/code] in column [code]column[/code]. </description> </method> <method name="get_button_count" qualifiers="const"> @@ -75,6 +83,7 @@ <argument index="0" name="column" type="int"> </argument> <description> + Returns the number of buttons in column [code]column[/code]. May be used to get the most recently added button's index, if no index was specified. </description> </method> <method name="get_cell_mode" qualifiers="const"> @@ -83,12 +92,14 @@ <argument index="0" name="column" type="int"> </argument> <description> + Returns the column's cell mode. See [code]CELL_MODE_*[/code] constants. </description> </method> <method name="get_children"> <return type="TreeItem"> </return> <description> + Returns the TreeItem's child items. </description> </method> <method name="get_custom_bg_color" qualifiers="const"> @@ -97,12 +108,14 @@ <argument index="0" name="column" type="int"> </argument> <description> + Returns the custom background color of column [code]column[/code]. </description> </method> <method name="get_custom_minimum_height" qualifiers="const"> <return type="int"> </return> <description> + Returns the custom minimum height. </description> </method> <method name="get_expand_right" qualifiers="const"> @@ -111,6 +124,7 @@ <argument index="0" name="column" type="int"> </argument> <description> + Returns [code]true[/code] if [code]expand_right[/code] is set. </description> </method> <method name="get_icon" qualifiers="const"> @@ -119,6 +133,7 @@ <argument index="0" name="column" type="int"> </argument> <description> + Returns the given column's icon [Texture]. Error if no icon is set. </description> </method> <method name="get_icon_max_width" qualifiers="const"> @@ -127,6 +142,7 @@ <argument index="0" name="column" type="int"> </argument> <description> + Returns the column's icon's maximum width. </description> </method> <method name="get_icon_region" qualifiers="const"> @@ -135,6 +151,7 @@ <argument index="0" name="column" type="int"> </argument> <description> + Returns the icon [Texture] region as [Rect2]. </description> </method> <method name="get_metadata" qualifiers="const"> @@ -149,30 +166,35 @@ <return type="TreeItem"> </return> <description> + Returns the next TreeItem in the tree. </description> </method> <method name="get_next_visible"> <return type="TreeItem"> </return> <description> + Returns the next visible TreeItem in the tree. </description> </method> <method name="get_parent"> <return type="TreeItem"> </return> <description> + Returns the parent TreeItem. </description> </method> <method name="get_prev"> <return type="TreeItem"> </return> <description> + Returns the previous TreeItem in the tree. </description> </method> <method name="get_prev_visible"> <return type="TreeItem"> </return> <description> + Returns the previous visible TreeItem in the tree. </description> </method> <method name="get_range" qualifiers="const"> @@ -197,6 +219,7 @@ <argument index="0" name="column" type="int"> </argument> <description> + Returns the given column's text. </description> </method> <method name="get_text_align" qualifiers="const"> @@ -205,6 +228,7 @@ <argument index="0" name="column" type="int"> </argument> <description> + Returns the given column's text alignment. </description> </method> <method name="get_tooltip" qualifiers="const"> @@ -213,6 +237,7 @@ <argument index="0" name="column" type="int"> </argument> <description> + Returns the given column's tooltip. </description> </method> <method name="is_button_disabled" qualifiers="const"> @@ -223,6 +248,7 @@ <argument index="1" name="button_idx" type="int"> </argument> <description> + Returns [code]true[/code] if the button at index [code]button_idx[/code] for the given column is disabled. </description> </method> <method name="is_checked" qualifiers="const"> @@ -231,12 +257,14 @@ <argument index="0" name="column" type="int"> </argument> <description> + Returns [code]true[/code] if the given column is checked. </description> </method> <method name="is_collapsed"> <return type="bool"> </return> <description> + Returns [code]true[/code] if this TreeItem is collapsed. </description> </method> <method name="is_custom_set_as_button" qualifiers="const"> @@ -253,12 +281,14 @@ <argument index="0" name="column" type="int"> </argument> <description> + Returns [code]true[/code] if column [code]column[/code] is editable. </description> </method> <method name="is_folding_disabled" qualifiers="const"> <return type="bool"> </return> <description> + Returns [code]true[/code] if folding is disabled for this TreeItem. </description> </method> <method name="is_selectable" qualifiers="const"> @@ -267,6 +297,7 @@ <argument index="0" name="column" type="int"> </argument> <description> + Returns [code]true[/code] if column [code]column[/code] is selectable. </description> </method> <method name="is_selected"> @@ -275,18 +306,21 @@ <argument index="0" name="column" type="int"> </argument> <description> + Returns [code]true[/code] if column [code]column[/code] is selected. </description> </method> <method name="move_to_bottom"> <return type="void"> </return> <description> + Moves this TreeItem to the bottom in the [Tree] hierarchy. </description> </method> <method name="move_to_top"> <return type="void"> </return> <description> + Moves this TreeItem to the top in the [Tree] hierarchy. </description> </method> <method name="remove_child"> @@ -295,6 +329,7 @@ <argument index="0" name="child" type="Object"> </argument> <description> + Removes the child TreeItem at index [code]index[/code]. </description> </method> <method name="select"> @@ -303,6 +338,7 @@ <argument index="0" name="column" type="int"> </argument> <description> + Selects the column [code]column[/code]. </description> </method> <method name="set_button"> @@ -315,6 +351,7 @@ <argument index="2" name="button" type="Texture"> </argument> <description> + Sets the given column's button [Texture] at index [code]button_idx[/code] to [code]button[/code]. </description> </method> <method name="set_cell_mode"> @@ -325,6 +362,7 @@ <argument index="1" name="mode" type="int" enum="TreeItem.TreeCellMode"> </argument> <description> + Sets the given column's cell mode to [code]mode[/code]. See [code]CELL_MODE_*[/code] constants. </description> </method> <method name="set_checked"> @@ -335,6 +373,7 @@ <argument index="1" name="checked" type="bool"> </argument> <description> + If [code]true[/code] the column [code]column[/code] is checked. </description> </method> <method name="set_collapsed"> @@ -343,6 +382,7 @@ <argument index="0" name="enable" type="bool"> </argument> <description> + If [code]true[/code] the TreeItem is collapsed. </description> </method> <method name="set_custom_as_button"> @@ -365,6 +405,7 @@ <argument index="2" name="just_outline" type="bool" default="false"> </argument> <description> + Sets the given column's custom background color and whether to just use it as an outline. </description> </method> <method name="set_custom_color"> @@ -375,6 +416,7 @@ <argument index="1" name="color" type="Color"> </argument> <description> + Sets the given column's custom color. </description> </method> <method name="set_custom_draw"> @@ -387,6 +429,7 @@ <argument index="2" name="callback" type="String"> </argument> <description> + Sets the given column's custom draw callback to [code]callback[/code] method on [code]object[/code]. </description> </method> <method name="set_custom_minimum_height"> @@ -395,6 +438,7 @@ <argument index="0" name="height" type="int"> </argument> <description> + Sets the custom minimum height of this TreeItem. </description> </method> <method name="set_disable_folding"> @@ -403,6 +447,7 @@ <argument index="0" name="disable" type="bool"> </argument> <description> + If [code]true[/code] folding is disabled for this TreeItem. </description> </method> <method name="set_editable"> @@ -413,6 +458,7 @@ <argument index="1" name="enabled" type="bool"> </argument> <description> + If [code]true[/code] column [code]column[/code] is editable. </description> </method> <method name="set_expand_right"> @@ -423,6 +469,7 @@ <argument index="1" name="enable" type="bool"> </argument> <description> + If [code]true[/code] column [code]column[/code] is expanded to the right. </description> </method> <method name="set_icon"> @@ -433,6 +480,7 @@ <argument index="1" name="texture" type="Texture"> </argument> <description> + Sets the given column's icon [Texture]. </description> </method> <method name="set_icon_max_width"> @@ -443,6 +491,7 @@ <argument index="1" name="width" type="int"> </argument> <description> + Sets the given column's icon's maximum width. </description> </method> <method name="set_icon_region"> @@ -453,6 +502,7 @@ <argument index="1" name="region" type="Rect2"> </argument> <description> + Sets the given column's icon's texture region. </description> </method> <method name="set_metadata"> @@ -499,6 +549,7 @@ <argument index="1" name="selectable" type="bool"> </argument> <description> + If [code]true[/code] the given column is selectable. </description> </method> <method name="set_text"> @@ -519,6 +570,7 @@ <argument index="1" name="text_align" type="int" enum="TreeItem.TextAlign"> </argument> <description> + Sets the given column's text alignment. See [code]ALIGN_*[/code] constants. </description> </method> <method name="set_tooltip"> @@ -529,27 +581,36 @@ <argument index="1" name="tooltip" type="String"> </argument> <description> + Sets the given column's tooltip text. </description> </method> </methods> <constants> <constant name="CELL_MODE_STRING" value="0"> + Cell contains a string. </constant> <constant name="CELL_MODE_CHECK" value="1"> + Cell can be checked. </constant> <constant name="CELL_MODE_RANGE" value="2"> + Cell contains a range. </constant> <constant name="CELL_MODE_RANGE_EXPRESSION" value="3"> + Cell contains a range expression. </constant> <constant name="CELL_MODE_ICON" value="4"> + Cell contains an icon. </constant> <constant name="CELL_MODE_CUSTOM" value="5"> </constant> <constant name="ALIGN_LEFT" value="0"> + Align text to the left. See [code]set_text_align()[/code]. </constant> <constant name="ALIGN_CENTER" value="1"> + Center text. See [code]set_text_align()[/code]. </constant> <constant name="ALIGN_RIGHT" value="2"> + Align text to the right. See [code]set_text_align()[/code]. </constant> </constants> </class> diff --git a/doc/classes/Tween.xml b/doc/classes/Tween.xml index 790a82a60a..23229aec4a 100644 --- a/doc/classes/Tween.xml +++ b/doc/classes/Tween.xml @@ -8,11 +8,11 @@ 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), 1, Tween.TRANS_LINEAR, Tween.EASE_IN_OUT) + tween.interpolate_property(get_node("Node2D_to_move"), "transform/origin", 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. - Many of the methods accept [code]trans_type[/code] and [code]ease_type[/code]. The first accepts an TRANS_* constant, and refers to the way the timing of the animation is handled (you might want to see [code]http://easings.net/[/code] for some examples). The second accepts an EASE_* constant, and controls the where [code]trans_type[/code] is applied to the interpolation (in the beginning, the end, or both). If you don't know which transision and easing to pick, you can try different TRANS_* constants with EASE_IN_OUT, and use the one that looks best. + Many of the methods accept [code]trans_type[/code] and [code]ease_type[/code]. The first accepts an TRANS_* constant, and refers to the way the timing of the animation is handled (you might want to see [code]http://easings.net/[/code] for some examples). The second accepts an EASE_* constant, and controls the where [code]trans_type[/code] is applied to the interpolation (in the beginning, the end, or both). If you don't know which transition and easing to pick, you can try different TRANS_* constants with EASE_IN_OUT, and use the one that looks best. </description> <tutorials> </tutorials> @@ -135,7 +135,7 @@ <argument index="7" name="arg5" type="Variant" default="null"> </argument> <description> - Call [code]callback[/code] of [code]object[/code] after [code]duration[/code] on the main thread (similar to [methog Object.call_deferred). [code]arg1[/code]-[code]arg5[/code] are arguments to be passed to the callback. + Call [code]callback[/code] of [code]object[/code] after [code]duration[/code] on the main thread (similar to [method Object.call_deferred]). [code]arg1[/code]-[code]arg5[/code] are arguments to be passed to the callback. </description> </method> <method name="interpolate_method"> @@ -158,7 +158,7 @@ <argument index="7" name="delay" type="float" default="0"> </argument> <description> - Animate [code]method[/code] of [code]object[/code] from [code]initial_val[/code] to [code]final_val[/code] for [code]duration[/code] seconds, [code]delay[/code] seconds later. Methods are animated by calling them with consecuitive values. + Animate [code]method[/code] of [code]object[/code] from [code]initial_val[/code] to [code]final_val[/code] for [code]duration[/code] seconds, [code]delay[/code] seconds later. Methods are animated by calling them with consecutive values. [code]trans_type[/code] accepts TRANS_* constants, and is the way the animation is interpolated, while [code]ease_type[/code] accepts EASE_* constants, and controls the place of the interpolation (the beginning, the end, or both). You can read more about them in the class description. </description> </method> @@ -296,7 +296,7 @@ <argument index="0" name="mode" type="int" enum="Tween.TweenProcessMode"> </argument> <description> - Set whether the Tween uses [code]_process[/code] or [code]_fixed_process[/code] (accepts TWEEN_PROCESS_IDLE and TWEEN_PROCESS_FIXED constants, respectively). + Set whether the Tween uses [code]_process[/code] or [code]_physics_process[/code] (accepts TWEEN_PROCESS_IDLE and TWEEN_PROCESS_PHYSICS constants, respectively). </description> </method> <method name="start"> @@ -346,7 +346,7 @@ <argument index="8" name="delay" type="float" default="0"> </argument> <description> - Animate [code]method[/code] of [code]object[/code] from the value returned by [code]initial.initial_method[/code] to [code]final_val[/code] for [code]duration[/code] seconds, [code]delay[/code] seconds later. Methods are animated by calling them with consecuitive values. + Animate [code]method[/code] of [code]object[/code] from the value returned by [code]initial.initial_method[/code] to [code]final_val[/code] for [code]duration[/code] seconds, [code]delay[/code] seconds later. Methods are animated by calling them with consecutive values. [code]trans_type[/code] accepts TRANS_* constants, and is the way the animation is interpolated, while [code]ease_type[/code] accepts EASE_* constants, and controls the place of the interpolation (the beginning, the end, or both). You can read more about them in the class description. </description> </method> @@ -422,8 +422,8 @@ </signal> </signals> <constants> - <constant name="TWEEN_PROCESS_FIXED" value="0"> - The [Tween] should use [code]_fixed_process[/code] for timekeeping when this is enabled. + <constant name="TWEEN_PROCESS_PHYSICS" value="0"> + The [Tween] should use [code]_physics_process[/code] for timekeeping when this is enabled. </constant> <constant name="TWEEN_PROCESS_IDLE" value="1"> The [Tween] should use [code]_process[/code] for timekeeping when this is enabled (default). diff --git a/doc/classes/VSlider.xml b/doc/classes/VSlider.xml index e4ba4a19c5..fa4fa34d54 100644 --- a/doc/classes/VSlider.xml +++ b/doc/classes/VSlider.xml @@ -19,6 +19,8 @@ </theme_item> <theme_item name="grabber" type="Texture"> </theme_item> + <theme_item name="grabber_area" type="StyleBox"> + </theme_item> <theme_item name="grabber_disabled" type="Texture"> </theme_item> <theme_item name="grabber_disabled" type="StyleBox"> diff --git a/doc/classes/VehicleWheel.xml b/doc/classes/VehicleWheel.xml index 82e93e0f01..b2e54e25bc 100644 --- a/doc/classes/VehicleWheel.xml +++ b/doc/classes/VehicleWheel.xml @@ -39,6 +39,12 @@ <description> </description> </method> + <method name="get_skidinfo" qualifiers="const"> + <return type="float"> + </return> + <description> + </description> + </method> <method name="get_suspension_max_force" qualifiers="const"> <return type="float"> </return> diff --git a/doc/classes/VideoPlayer.xml b/doc/classes/VideoPlayer.xml index 7994c1b65a..5387ec30b3 100644 --- a/doc/classes/VideoPlayer.xml +++ b/doc/classes/VideoPlayer.xml @@ -22,7 +22,7 @@ <return type="int"> </return> <description> - Get the amount of miliseconds to store in buffer while playing. + Get the amount of milliseconds to store in buffer while playing. </description> </method> <method name="get_stream" qualifiers="const"> @@ -39,7 +39,7 @@ Get the name of the video stream. </description> </method> - <method name="get_stream_pos" qualifiers="const"> + <method name="get_stream_position" qualifiers="const"> <return type="float"> </return> <description> @@ -126,7 +126,7 @@ <argument index="0" name="msec" type="int"> </argument> <description> - Set the amount of miliseconds to buffer during playback. + Set the amount of milliseconds to buffer during playback. </description> </method> <method name="set_expand"> @@ -156,6 +156,15 @@ Set the video stream for this player. </description> </method> + <method name="set_stream_position"> + <return type="void"> + </return> + <argument index="0" name="position" type="float"> + </argument> + <description> + Set the current position of the stream, in seconds. + </description> + </method> <method name="set_volume"> <return type="void"> </return> diff --git a/doc/classes/Viewport.xml b/doc/classes/Viewport.xml index a5170b8d03..28a7cb7c8e 100644 --- a/doc/classes/Viewport.xml +++ b/doc/classes/Viewport.xml @@ -192,14 +192,14 @@ <return type="Variant"> </return> <description> - Returs the drag data from the GUI, that was previously returned by [method Control.get_drag_data]. + Returns the drag data from the GUI, that was previously returned by [method Control.get_drag_data]. </description> </method> <method name="gui_has_modal_stack" qualifiers="const"> <return type="bool"> </return> <description> - Returs whether there are shown modals on-screen. + Returns whether there are shown modals on-screen. </description> </method> <method name="has_transparent_background" qualifiers="const"> @@ -303,7 +303,7 @@ <argument index="0" name="xform" type="Transform2D"> </argument> <description> - Set the canvas transform of the viewport, useful for changing the on-screen positions of all child [CanvasItem]\ s. This is relative to the global canvas transform of the viewport. + Set the canvas transform of the viewport, useful for changing the on-screen positions of all child [CanvasItem]s. This is relative to the global canvas transform of the viewport. </description> </method> <method name="set_clear_mode"> @@ -528,7 +528,7 @@ <method name="warp_mouse"> <return type="void"> </return> - <argument index="0" name="to_pos" type="Vector2"> + <argument index="0" name="to_position" type="Vector2"> </argument> <description> Warp the mouse to a position, relative to the viewport. diff --git a/doc/classes/VisibilityEnabler2D.xml b/doc/classes/VisibilityEnabler2D.xml index b8ef1f8d22..0359f4694d 100644 --- a/doc/classes/VisibilityEnabler2D.xml +++ b/doc/classes/VisibilityEnabler2D.xml @@ -33,8 +33,6 @@ </method> </methods> <members> - <member name="fixed_process_parent" type="bool" setter="set_enabler" getter="is_enabler_enabled"> - </member> <member name="freeze_bodies" type="bool" setter="set_enabler" getter="is_enabler_enabled"> </member> <member name="pause_animated_sprites" type="bool" setter="set_enabler" getter="is_enabler_enabled"> @@ -43,6 +41,8 @@ </member> <member name="pause_particles" type="bool" setter="set_enabler" getter="is_enabler_enabled"> </member> + <member name="physics_process_parent" type="bool" setter="set_enabler" getter="is_enabler_enabled"> + </member> <member name="process_parent" type="bool" setter="set_enabler" getter="is_enabler_enabled"> </member> </members> @@ -61,8 +61,8 @@ <constant name="ENABLER_PARENT_PROCESS" value="3"> This enabler will stop the parent's _process function. </constant> - <constant name="ENABLER_PARENT_FIXED_PROCESS" value="4"> - This enabler will stop the parent's _fixed_process function. + <constant name="ENABLER_PARENT_PHYSICS_PROCESS" value="4"> + This enabler will stop the parent's _physics_process function. </constant> <constant name="ENABLER_MAX" value="6"> </constant> diff --git a/doc/classes/VisualScript.xml b/doc/classes/VisualScript.xml index 0875aafcff..8961ff1564 100644 --- a/doc/classes/VisualScript.xml +++ b/doc/classes/VisualScript.xml @@ -1,8 +1,12 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="VisualScript" inherits="Script" category="Core" version="3.0.alpha.custom_build"> <brief_description> + A script implemented in the Visual Script programming environment. </brief_description> <description> + A script implemented in the Visual Script programming environment. The script extends the functionality of all objects that instance it. + [method Object.set_script] extends an existing object, if that object's class matches one of the script's base classes. + You are most likely to use this class via the Visual Script editor or when writing plugins for it. </description> <tutorials> </tutorials> @@ -15,6 +19,7 @@ <argument index="0" name="name" type="String"> </argument> <description> + Add a custom signal with the specified name to the VisualScript. </description> </method> <method name="add_function"> @@ -23,6 +28,7 @@ <argument index="0" name="name" type="String"> </argument> <description> + Add a function with the specified name to the VisualScript. </description> </method> <method name="add_node"> @@ -34,9 +40,10 @@ </argument> <argument index="2" name="node" type="VisualScriptNode"> </argument> - <argument index="3" name="pos" type="Vector2" default="Vector2( 0, 0 )"> + <argument index="3" name="position" type="Vector2" default="Vector2( 0, 0 )"> </argument> <description> + Add a node to a function of the VisualScript. </description> </method> <method name="add_variable"> @@ -49,6 +56,7 @@ <argument index="2" name="export" type="bool" default="false"> </argument> <description> + Add a variable to the VisualScript, optionally giving it a default value or marking it as exported. </description> </method> <method name="custom_signal_add_argument"> @@ -63,6 +71,7 @@ <argument index="3" name="index" type="int" default="-1"> </argument> <description> + Add an argument to a custom signal added with [method add_custom_signal]. </description> </method> <method name="custom_signal_get_argument_count" qualifiers="const"> @@ -71,6 +80,7 @@ <argument index="0" name="name" type="String"> </argument> <description> + Get the count of a custom signal's arguments. </description> </method> <method name="custom_signal_get_argument_name" qualifiers="const"> @@ -81,6 +91,7 @@ <argument index="1" name="argidx" type="int"> </argument> <description> + Get the name of a custom signal's argument. </description> </method> <method name="custom_signal_get_argument_type" qualifiers="const"> @@ -91,6 +102,7 @@ <argument index="1" name="argidx" type="int"> </argument> <description> + Get the type of a custom signal's argument. </description> </method> <method name="custom_signal_remove_argument"> @@ -101,6 +113,7 @@ <argument index="1" name="argidx" type="int"> </argument> <description> + Remove a specific custom signal's argument. </description> </method> <method name="custom_signal_set_argument_name"> @@ -113,6 +126,7 @@ <argument index="2" name="argname" type="String"> </argument> <description> + Rename a custom signal's argument. </description> </method> <method name="custom_signal_set_argument_type"> @@ -125,6 +139,7 @@ <argument index="2" name="type" type="int" enum="Variant.Type"> </argument> <description> + Change the type of a custom signal's argument. </description> </method> <method name="custom_signal_swap_argument"> @@ -137,6 +152,7 @@ <argument index="2" name="withidx" type="int"> </argument> <description> + Swap two of the arguments of a custom signal. </description> </method> <method name="data_connect"> @@ -153,6 +169,7 @@ <argument index="4" name="to_port" type="int"> </argument> <description> + Connect two data ports. The value of [code]from_node[/code]'s [code]from_port[/code] would be fed into [code]to_node[/code]'s [code]to_port[/code]. </description> </method> <method name="data_disconnect"> @@ -169,6 +186,7 @@ <argument index="4" name="to_port" type="int"> </argument> <description> + Disconnect two data ports previously connected with [method data_connect]. </description> </method> <method name="get_function_node_id" qualifiers="const"> @@ -177,6 +195,7 @@ <argument index="0" name="name" type="String"> </argument> <description> + Returns the id of a function's entry point node. </description> </method> <method name="get_function_scroll" qualifiers="const"> @@ -185,6 +204,7 @@ <argument index="0" name="name" type="String"> </argument> <description> + Returns the position of the center of the screen for a given function. </description> </method> <method name="get_node" qualifiers="const"> @@ -195,9 +215,10 @@ <argument index="1" name="id" type="int"> </argument> <description> + Returns a node given its id and its function. </description> </method> - <method name="get_node_pos" qualifiers="const"> + <method name="get_node_position" qualifiers="const"> <return type="Vector2"> </return> <argument index="0" name="func" type="String"> @@ -205,6 +226,7 @@ <argument index="1" name="id" type="int"> </argument> <description> + Returns a node's position in pixels. </description> </method> <method name="get_variable_default_value" qualifiers="const"> @@ -213,6 +235,7 @@ <argument index="0" name="name" type="String"> </argument> <description> + Returns the default (initial) value of a variable. </description> </method> <method name="get_variable_export" qualifiers="const"> @@ -221,6 +244,7 @@ <argument index="0" name="name" type="String"> </argument> <description> + Returns whether a variable is exported. </description> </method> <method name="get_variable_info" qualifiers="const"> @@ -229,6 +253,7 @@ <argument index="0" name="name" type="String"> </argument> <description> + Returns the info for a given variable as a dictionary. The information includes its name, type, hint and usage. </description> </method> <method name="has_custom_signal" qualifiers="const"> @@ -237,6 +262,7 @@ <argument index="0" name="name" type="String"> </argument> <description> + Returns whether a signal exists with the specified name. </description> </method> <method name="has_data_connection" qualifiers="const"> @@ -253,6 +279,7 @@ <argument index="4" name="to_port" type="int"> </argument> <description> + Returns whether the specified data ports are connected. </description> </method> <method name="has_function" qualifiers="const"> @@ -261,6 +288,7 @@ <argument index="0" name="name" type="String"> </argument> <description> + Returns whether a function exists with the specified name. </description> </method> <method name="has_node" qualifiers="const"> @@ -271,6 +299,7 @@ <argument index="1" name="id" type="int"> </argument> <description> + Returns whether a node exists with the given id. </description> </method> <method name="has_sequence_connection" qualifiers="const"> @@ -285,6 +314,7 @@ <argument index="3" name="to_node" type="int"> </argument> <description> + Returns whether the specified sequence ports are connected. </description> </method> <method name="has_variable" qualifiers="const"> @@ -293,6 +323,7 @@ <argument index="0" name="name" type="String"> </argument> <description> + Returns whether a variable exists with the specified name. </description> </method> <method name="remove_custom_signal"> @@ -301,6 +332,7 @@ <argument index="0" name="name" type="String"> </argument> <description> + Remove a custom signal with the given name. </description> </method> <method name="remove_function"> @@ -309,6 +341,7 @@ <argument index="0" name="name" type="String"> </argument> <description> + Remove a specific function and its nodes from the script. </description> </method> <method name="remove_node"> @@ -319,6 +352,7 @@ <argument index="1" name="id" type="int"> </argument> <description> + Remove a specific node. </description> </method> <method name="remove_variable"> @@ -327,6 +361,7 @@ <argument index="0" name="name" type="String"> </argument> <description> + Remove a variable with the given name. </description> </method> <method name="rename_custom_signal"> @@ -337,6 +372,7 @@ <argument index="1" name="new_name" type="String"> </argument> <description> + Change the name of a custom signal. </description> </method> <method name="rename_function"> @@ -347,6 +383,7 @@ <argument index="1" name="new_name" type="String"> </argument> <description> + Change the name of a function. </description> </method> <method name="rename_variable"> @@ -357,6 +394,7 @@ <argument index="1" name="new_name" type="String"> </argument> <description> + Change the name of a variable. </description> </method> <method name="sequence_connect"> @@ -371,6 +409,8 @@ <argument index="3" name="to_node" type="int"> </argument> <description> + Connect two sequence ports. The execution will flow from of [code]from_node[/code]'s [code]from_output[/code] into [code]to_node[/code]. + Unlike [method data_connect], there isn't a [code]to_port[/code], since the target node can have only one sequence port. </description> </method> <method name="sequence_disconnect"> @@ -385,6 +425,7 @@ <argument index="3" name="to_node" type="int"> </argument> <description> + Disconnect two sequence ports previously connected with [method sequence_connect]. </description> </method> <method name="set_function_scroll"> @@ -395,6 +436,7 @@ <argument index="1" name="ofs" type="Vector2"> </argument> <description> + Position the center of the screen for a function. </description> </method> <method name="set_instance_base_type"> @@ -403,18 +445,20 @@ <argument index="0" name="type" type="String"> </argument> <description> + Set the base type of the script. </description> </method> - <method name="set_node_pos"> + <method name="set_node_position"> <return type="void"> </return> <argument index="0" name="func" type="String"> </argument> <argument index="1" name="id" type="int"> </argument> - <argument index="2" name="pos" type="Vector2"> + <argument index="2" name="position" type="Vector2"> </argument> <description> + Position a node on the screen. </description> </method> <method name="set_variable_default_value"> @@ -425,6 +469,7 @@ <argument index="1" name="value" type="Variant"> </argument> <description> + Change the default (initial) value of a variable. </description> </method> <method name="set_variable_export"> @@ -435,6 +480,7 @@ <argument index="1" name="enable" type="bool"> </argument> <description> + Change whether a variable is exported. </description> </method> <method name="set_variable_info"> @@ -445,6 +491,7 @@ <argument index="1" name="value" type="Dictionary"> </argument> <description> + Set a variable's info, using the same format as [method get_variable_info]. </description> </method> </methods> @@ -459,6 +506,7 @@ <argument index="1" name="id" type="int"> </argument> <description> + Emitted when the ports of a node are changed. </description> </signal> </signals> diff --git a/doc/classes/VisualScriptBasicTypeConstant.xml b/doc/classes/VisualScriptBasicTypeConstant.xml index 5b066f9925..cc09815481 100644 --- a/doc/classes/VisualScriptBasicTypeConstant.xml +++ b/doc/classes/VisualScriptBasicTypeConstant.xml @@ -1,8 +1,10 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="VisualScriptBasicTypeConstant" inherits="VisualScriptNode" category="Core" version="3.0.alpha.custom_build"> <brief_description> + A Visual Script node representing a constant from the base types. </brief_description> <description> + A Visual Script node representing a constant from base types, such as [Vector3.AXIS_X]. </description> <tutorials> </tutorials> @@ -40,8 +42,10 @@ </methods> <members> <member name="basic_type" type="int" setter="set_basic_type" getter="get_basic_type" enum="Variant.Type"> + The type to get the constant from. </member> <member name="constant" type="String" setter="set_basic_type_constant" getter="get_basic_type_constant"> + The name of the constant to return. </member> </members> <constants> diff --git a/doc/classes/VisualScriptBuiltinFunc.xml b/doc/classes/VisualScriptBuiltinFunc.xml index a88633749e..5891b24bfd 100644 --- a/doc/classes/VisualScriptBuiltinFunc.xml +++ b/doc/classes/VisualScriptBuiltinFunc.xml @@ -1,8 +1,11 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="VisualScriptBuiltinFunc" inherits="VisualScriptNode" category="Core" version="3.0.alpha.custom_build"> <brief_description> + A Visual Script node used to call built-in functions. </brief_description> <description> + A built-in function used inside a [VisualScript]. It is usually a math function or an utility function. + See also [@GDScript], for the same functions in the GDScript language. </description> <tutorials> </tutorials> @@ -26,124 +29,187 @@ </methods> <members> <member name="function" type="int" setter="set_func" getter="get_func" enum="VisualScriptBuiltinFunc.BuiltinFunc"> + The function to be executed. </member> </members> <constants> <constant name="MATH_SIN" value="0"> + Return the sine of the input. </constant> <constant name="MATH_COS" value="1"> + Return the cosine of the input. </constant> <constant name="MATH_TAN" value="2"> + Return the tangent of the input. </constant> <constant name="MATH_SINH" value="3"> + Return the hyperbolic sine of the input. </constant> <constant name="MATH_COSH" value="4"> + Return the hyperbolic cosine of the input. </constant> <constant name="MATH_TANH" value="5"> + Return the hyperbolic tangent of the input. </constant> <constant name="MATH_ASIN" value="6"> + Return the arc sine of the input. </constant> <constant name="MATH_ACOS" value="7"> + Return the arc cosine of the input. </constant> <constant name="MATH_ATAN" value="8"> + Return the arc tangent of the input. </constant> <constant name="MATH_ATAN2" value="9"> + Return the arc tangent of the input, using the signs of both parameters to determine the exact angle. </constant> <constant name="MATH_SQRT" value="10"> + Return the square root of the input. </constant> <constant name="MATH_FMOD" value="11"> + Return the remainder of one input divided by the other, using floating-point numbers. </constant> <constant name="MATH_FPOSMOD" value="12"> + Return the positive remainder of one input divided by the other, using floating-point numbers. </constant> <constant name="MATH_FLOOR" value="13"> + Return the input rounded down. </constant> <constant name="MATH_CEIL" value="14"> + Return the input rounded up. </constant> <constant name="MATH_ROUND" value="15"> + Return the input rounded to the nearest integer. </constant> <constant name="MATH_ABS" value="16"> + Return the absolute value of the input. </constant> <constant name="MATH_SIGN" value="17"> + Return the sign of the input, turning it into 1, -1, or 0. Useful to determine if the input is positive or negative. </constant> <constant name="MATH_POW" value="18"> + Return the input raised to a given power. </constant> <constant name="MATH_LOG" value="19"> + Return the natural logarithm of the input. Note that this is not the typical base-10 logarithm function calculators use. </constant> <constant name="MATH_EXP" value="20"> + Return [b]e[/b] raised to the power of the input. [b]e[/b] sometimes called "Euler's number" is a mathematical constant whose value is approximately 2.71828. </constant> <constant name="MATH_ISNAN" value="21"> + Return whether the input is NaN (Not a Number) or not. NaN is usually produced by dividing 0 by 0, though other ways exist. </constant> <constant name="MATH_ISINF" value="22"> + Return whether the input is an infinite floating-point number or not. Infinity is usually produced by dividing a number by 0, though other ways exist. </constant> <constant name="MATH_EASE" value="23"> + Easing function, based on exponent. 0 is constant, 1 is linear, 0 to 1 is ease-in, 1+ is ease out. Negative values are in-out/out in. </constant> <constant name="MATH_DECIMALS" value="24"> + Return the number of digit places after the decimal that the first non-zero digit occurs. </constant> <constant name="MATH_STEPIFY" value="25"> + Return the input snapped to a given step. </constant> <constant name="MATH_LERP" value="26"> + Return a number linearly interpolated between the first two inputs, based on the third input. Uses the formula [code]a + (a - b) * t[/code]. </constant> - <constant name="MATH_DECTIME" value="27"> + <constant name="MATH_INVERSE_LERP" value="27"> </constant> - <constant name="MATH_RANDOMIZE" value="28"> + <constant name="MATH_RANGE_LERP" value="28"> </constant> - <constant name="MATH_RAND" value="29"> + <constant name="MATH_DECTIME" value="29"> + Return the result of 'value' decreased by 'step' * 'amount'. </constant> - <constant name="MATH_RANDF" value="30"> + <constant name="MATH_RANDOMIZE" value="30"> + Randomize the seed (or the internal state) of the random number generator. Current implementation reseeds using a number based on time. </constant> - <constant name="MATH_RANDOM" value="31"> + <constant name="MATH_RAND" value="31"> + Return a random 32 bits integer value. To obtain a random value between 0 to N (where N is smaller than 2^32 - 1), you can use it with the remainder function. </constant> - <constant name="MATH_SEED" value="32"> + <constant name="MATH_RANDF" value="32"> + Return a random floating-point value between 0 and 1. To obtain a random value between 0 to N, you can use it with multiplication. </constant> - <constant name="MATH_RANDSEED" value="33"> + <constant name="MATH_RANDOM" value="33"> + Return a random floating-point value between the two inputs. </constant> - <constant name="MATH_DEG2RAD" value="34"> + <constant name="MATH_SEED" value="34"> + Set the seed for the random number generator. </constant> - <constant name="MATH_RAD2DEG" value="35"> + <constant name="MATH_RANDSEED" value="35"> + Return a random value from the given seed, along with the new seed. </constant> - <constant name="MATH_LINEAR2DB" value="36"> + <constant name="MATH_DEG2RAD" value="36"> + Convert the input from degrees to radians. </constant> - <constant name="MATH_DB2LINEAR" value="37"> + <constant name="MATH_RAD2DEG" value="37"> + Convert the input from radians to degrees. </constant> - <constant name="LOGIC_MAX" value="38"> + <constant name="MATH_LINEAR2DB" value="38"> + Convert the input from linear volume to decibel volume. </constant> - <constant name="LOGIC_MIN" value="39"> + <constant name="MATH_DB2LINEAR" value="39"> + Convert the input from decibel volume to linear volume. </constant> - <constant name="LOGIC_CLAMP" value="40"> + <constant name="LOGIC_MAX" value="40"> + Return the greater of the two numbers, also known as their maximum. </constant> - <constant name="LOGIC_NEAREST_PO2" value="41"> + <constant name="LOGIC_MIN" value="41"> + Return the lesser of the two numbers, also known as their minimum. </constant> - <constant name="OBJ_WEAKREF" value="42"> + <constant name="LOGIC_CLAMP" value="42"> + Return the input clamped inside the given range, ensuring the result is never outside it. Equivalent to `min(max(input, range_low), range_high)` </constant> - <constant name="FUNC_FUNCREF" value="43"> + <constant name="LOGIC_NEAREST_PO2" value="43"> + Return the nearest power of 2 to the input. </constant> - <constant name="TYPE_CONVERT" value="44"> + <constant name="OBJ_WEAKREF" value="44"> + Create a [WeakRef] from the input. </constant> - <constant name="TYPE_OF" value="45"> + <constant name="FUNC_FUNCREF" value="45"> + Create a [FuncRef] from the input. </constant> - <constant name="TYPE_EXISTS" value="46"> + <constant name="TYPE_CONVERT" value="46"> + Convert between types. </constant> - <constant name="TEXT_CHAR" value="47"> + <constant name="TYPE_OF" value="47"> + Return the type of the input as an integer. Check [enum Variant.Type] for the integers that might be returned. </constant> - <constant name="TEXT_STR" value="48"> + <constant name="TYPE_EXISTS" value="48"> + Checks if a type is registered in the [ClassDB]. </constant> - <constant name="TEXT_PRINT" value="49"> + <constant name="TEXT_CHAR" value="49"> + Return a character with the given ascii value. </constant> - <constant name="TEXT_PRINTERR" value="50"> + <constant name="TEXT_STR" value="50"> + Convert the input to a string. </constant> - <constant name="TEXT_PRINTRAW" value="51"> + <constant name="TEXT_PRINT" value="51"> + Print the given string to the output window. </constant> - <constant name="VAR_TO_STR" value="52"> + <constant name="TEXT_PRINTERR" value="52"> + Print the given string to the standard error output. </constant> - <constant name="STR_TO_VAR" value="53"> + <constant name="TEXT_PRINTRAW" value="53"> + Print the given string to the standard output, without adding a newline. </constant> - <constant name="VAR_TO_BYTES" value="54"> + <constant name="VAR_TO_STR" value="54"> + Serialize a [Variant] to a string. </constant> - <constant name="BYTES_TO_VAR" value="55"> + <constant name="STR_TO_VAR" value="55"> + Deserialize a [Variant] from a string serialized using [VAR_TO_STR]. </constant> - <constant name="COLORN" value="56"> + <constant name="VAR_TO_BYTES" value="56"> + Serialize a [Variant] to a [PoolByteArray]. </constant> - <constant name="FUNC_MAX" value="57"> + <constant name="BYTES_TO_VAR" value="57"> + Deserialize a [Variant] from a [PoolByteArray] serialized using [VAR_TO_BYTES]. + </constant> + <constant name="COLORN" value="58"> + Return the [Color] with the given name and alpha ranging from 0 to 1. Note: names are defined in color_names.inc. + </constant> + <constant name="FUNC_MAX" value="59"> + The maximum value the [member function] property can have. </constant> </constants> </class> diff --git a/doc/classes/VisualScriptClassConstant.xml b/doc/classes/VisualScriptClassConstant.xml index 5e43b4972c..0377fa8f09 100644 --- a/doc/classes/VisualScriptClassConstant.xml +++ b/doc/classes/VisualScriptClassConstant.xml @@ -1,8 +1,14 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="VisualScriptClassConstant" inherits="VisualScriptNode" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Gets a constant from a given class. </brief_description> <description> + This node returns a constant from a given class, such as [@GlobalScope.TYPE_INT]. See the given class' documentation for available constants. + [b]Input Ports:[/b] + none + [b]Output Ports:[/b] + - Data (variant): [code]value[/code] </description> <tutorials> </tutorials> @@ -40,8 +46,10 @@ </methods> <members> <member name="base_type" type="String" setter="set_base_type" getter="get_base_type"> + The constant's parent class. </member> <member name="constant" type="String" setter="set_class_constant" getter="get_class_constant"> + The constant to return. See the given class for its available constants. </member> </members> <constants> diff --git a/doc/classes/VisualScriptComment.xml b/doc/classes/VisualScriptComment.xml index be4eefd775..69126052d0 100644 --- a/doc/classes/VisualScriptComment.xml +++ b/doc/classes/VisualScriptComment.xml @@ -1,8 +1,11 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="VisualScriptComment" inherits="VisualScriptNode" category="Core" version="3.0.alpha.custom_build"> <brief_description> + A Visual Script node used to annotate the script. </brief_description> <description> + A Visual Script node used to display annotations in the script, so that code may be documented. + Comment nodes can be resized so they encompass a group of nodes. </description> <tutorials> </tutorials> @@ -54,10 +57,13 @@ </methods> <members> <member name="description" type="String" setter="set_description" getter="get_description"> + The text inside the comment node. </member> <member name="size" type="Vector2" setter="set_size" getter="get_size"> + The comment node's size (in pixels). </member> <member name="title" type="String" setter="set_title" getter="get_title"> + The comment node's title. </member> </members> <constants> diff --git a/doc/classes/VisualScriptCondition.xml b/doc/classes/VisualScriptCondition.xml index 73f1b69c02..a776c9bc9b 100644 --- a/doc/classes/VisualScriptCondition.xml +++ b/doc/classes/VisualScriptCondition.xml @@ -1,8 +1,17 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="VisualScriptCondition" inherits="VisualScriptNode" category="Core" version="3.0.alpha.custom_build"> <brief_description> + A Visual Script node which branches the flow. </brief_description> <description> + A Visual Script node that checks a [bool] input port. If [code]true[/code] it will exit via the “true†sequence port. If [code]false[/code] it will exit via the "false" sequence port. After exiting either, it exits via the “done†port. Sequence ports may be left disconnected. + [b]Input Ports:[/b] + - Sequence: [code]if (cond) is[/code] + - Data (boolean): [code]cond[/code] + [b]Output Ports:[/b] + - Sequence: [code]true[/code] + - Sequence: [code]false[/code] + - Sequence: [code]done[/code] </description> <tutorials> </tutorials> diff --git a/doc/classes/VisualScriptConstant.xml b/doc/classes/VisualScriptConstant.xml index b0af3bda98..2a704adecf 100644 --- a/doc/classes/VisualScriptConstant.xml +++ b/doc/classes/VisualScriptConstant.xml @@ -1,8 +1,14 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="VisualScriptConstant" inherits="VisualScriptNode" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Gets a contant's value. </brief_description> <description> + This node returns a constant's value. + [b]Input Ports:[/b] + none + [b]Output Ports:[/b] + - Data (variant): [code]get[/code] </description> <tutorials> </tutorials> @@ -40,8 +46,10 @@ </methods> <members> <member name="type" type="int" setter="set_constant_type" getter="get_constant_type" enum="Variant.Type"> + The constant's type. </member> <member name="value" type="Variant" setter="set_constant_value" getter="get_constant_value"> + The constant's value. </member> </members> <constants> diff --git a/doc/classes/VisualScriptConstructor.xml b/doc/classes/VisualScriptConstructor.xml index e8afd36b9c..3b1fc5e385 100644 --- a/doc/classes/VisualScriptConstructor.xml +++ b/doc/classes/VisualScriptConstructor.xml @@ -1,8 +1,10 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="VisualScriptConstructor" inherits="VisualScriptNode" category="Core" version="3.0.alpha.custom_build"> <brief_description> + A Visual Script node which calls a base type constructor. </brief_description> <description> + A Visual Script node which calls a base type constructor. It can be used for type conversion as well. </description> <tutorials> </tutorials> @@ -40,8 +42,26 @@ </methods> <members> <member name="constructor" type="Dictionary" setter="set_constructor" getter="get_constructor"> + The constructor function's method info. Has roughly the following structure: + [codeblock] + { + name = "string", + args = [{ + name = "string" + class_name = "string" + type = TYPE_* + hint = PROPERTY_HINT_* + hint_string = "string" + }] + default_args = [] # Array of variants + flags = METHOD_FLAG_* + id = 0 + return = {type = TYPE_*} + } + [/codeblock] </member> <member name="type" type="int" setter="set_constructor_type" getter="get_constructor_type" enum="Variant.Type"> + The type to be constructed. </member> </members> <constants> diff --git a/doc/classes/VisualScriptCustomNode.xml b/doc/classes/VisualScriptCustomNode.xml index ec442e993c..e321c8854a 100644 --- a/doc/classes/VisualScriptCustomNode.xml +++ b/doc/classes/VisualScriptCustomNode.xml @@ -1,8 +1,10 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="VisualScriptCustomNode" inherits="VisualScriptNode" category="Core" version="3.0.alpha.custom_build"> <brief_description> + A scripted Visual Script node. </brief_description> <description> + A custom Visual Script node which can be scripted in powerful ways. </description> <tutorials> </tutorials> @@ -13,18 +15,21 @@ <return type="String"> </return> <description> + Return the node's title. </description> </method> <method name="_get_category" qualifiers="virtual"> <return type="String"> </return> <description> + Return the node's category. </description> </method> <method name="_get_input_value_port_count" qualifiers="virtual"> <return type="int"> </return> <description> + Return the count of input value ports. </description> </method> <method name="_get_input_value_port_name" qualifiers="virtual"> @@ -33,6 +38,7 @@ <argument index="0" name="idx" type="int"> </argument> <description> + Return the specified input port's name. </description> </method> <method name="_get_input_value_port_type" qualifiers="virtual"> @@ -41,12 +47,14 @@ <argument index="0" name="idx" type="int"> </argument> <description> + Return the specified input port's type. See the TYPE_* enum in [@GlobalScope]. </description> </method> <method name="_get_output_sequence_port_count" qualifiers="virtual"> <return type="int"> </return> <description> + Return the amount of output [b]sequence[/b] ports. </description> </method> <method name="_get_output_sequence_port_text" qualifiers="virtual"> @@ -55,12 +63,14 @@ <argument index="0" name="idx" type="int"> </argument> <description> + Return the specified [b]sequence[/b] output's name. </description> </method> <method name="_get_output_value_port_count" qualifiers="virtual"> <return type="int"> </return> <description> + Return the amount of output value ports. </description> </method> <method name="_get_output_value_port_name" qualifiers="virtual"> @@ -69,6 +79,7 @@ <argument index="0" name="idx" type="int"> </argument> <description> + Return the specified output's name. </description> </method> <method name="_get_output_value_port_type" qualifiers="virtual"> @@ -77,24 +88,28 @@ <argument index="0" name="idx" type="int"> </argument> <description> + Return the specified output's type. See the TYPE_* enum in [@GlobalScope]. </description> </method> <method name="_get_text" qualifiers="virtual"> <return type="String"> </return> <description> + Return the custom node's text, which is shown right next to the input [b]sequence[/b] port (if there is none, on the place that is usually taken by it). </description> </method> <method name="_get_working_memory_size" qualifiers="virtual"> <return type="int"> </return> <description> + Return the size of the custom node's working memory. See [method _step] for more details. </description> </method> <method name="_has_input_sequence_port" qualifiers="virtual"> <return type="bool"> </return> <description> + Return whether the custom node has an input [b]sequence[/b] port. </description> </method> <method name="_step" qualifiers="virtual"> @@ -109,25 +124,42 @@ <argument index="3" name="working_mem" type="Array"> </argument> <description> + Execute the custom node's logic, returning the index of the output sequence port to use or a [String] when there is an error. + + The [code]inputs[/code] array contains the values of the input ports. + [code]outputs[/code] is an array whose indices should be set to the respective outputs. + The [code]start_mode[/code] is usually [code]START_MODE_BEGIN_SEQUENCE[/code], unless you have used the STEP_* constants. + [code]working_mem[/code] is an array which can be used to persist information between runs of the custom node. + + When returning, you can mask the returned value with one of the STEP_* constants. </description> </method> </methods> <constants> <constant name="START_MODE_BEGIN_SEQUENCE" value="0"> + The start mode used the first time when [method _step] is called. </constant> <constant name="START_MODE_CONTINUE_SEQUENCE" value="1"> + The start mode used when [method _step] is called after coming back from a STEP_PUSH_STACK_BIT. </constant> <constant name="START_MODE_RESUME_YIELD" value="2"> + The start mode used when [method _step] is called after resuming from STEP_YIELD_BIT. </constant> <constant name="STEP_PUSH_STACK_BIT" value="16777216" enum=""> + Hint used by [method _step] to tell that control should return to it when there is no other node left to execute. + This is used by [VisualScriptCondition] to redirect the sequence to the "Done" port after the true/false branch has finished execution. </constant> <constant name="STEP_GO_BACK_BIT" value="33554432" enum=""> + Hint used by [method _step] to tell that control should return back, either hitting a previous STEP_PUSH_STACK_BIT or exiting the function. </constant> <constant name="STEP_NO_ADVANCE_BIT" value="67108864" enum=""> </constant> <constant name="STEP_EXIT_FUNCTION_BIT" value="134217728" enum=""> + Hint used by [method _step] to tell that control should stop and exit the function. </constant> <constant name="STEP_YIELD_BIT" value="268435456" enum=""> + Hint used by [method _step] to tell that the function should be yielded. + Using this requires you to have at least one working memory slot, which is used for the [VisualScriptFunctionState]. </constant> </constants> </class> diff --git a/doc/classes/VisualScriptDeconstruct.xml b/doc/classes/VisualScriptDeconstruct.xml index 5bb12539af..cd7d79ae56 100644 --- a/doc/classes/VisualScriptDeconstruct.xml +++ b/doc/classes/VisualScriptDeconstruct.xml @@ -1,8 +1,10 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="VisualScriptDeconstruct" inherits="VisualScriptNode" category="Core" version="3.0.alpha.custom_build"> <brief_description> + A Visual Script node which deconstructs a base type instance into its parts. </brief_description> <description> + A Visual Script node which deconstructs a base type instance into its parts. </description> <tutorials> </tutorials> @@ -28,6 +30,7 @@ <member name="elem_cache" type="Array" setter="_set_elem_cache" getter="_get_elem_cache"> </member> <member name="type" type="int" setter="set_deconstruct_type" getter="get_deconstruct_type" enum="Variant.Type"> + The type to deconstruct. </member> </members> <constants> diff --git a/doc/classes/VisualScriptEmitSignal.xml b/doc/classes/VisualScriptEmitSignal.xml index 21af3c6ea0..8d132ed321 100644 --- a/doc/classes/VisualScriptEmitSignal.xml +++ b/doc/classes/VisualScriptEmitSignal.xml @@ -1,8 +1,14 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="VisualScriptEmitSignal" inherits="VisualScriptNode" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Emits a specified signal. </brief_description> <description> + Emits a specified signal when it is executed. + [b]Input Ports:[/b] + - Sequence: [code]emit[/code] + [b]Output Ports:[/b] + - Sequence </description> <tutorials> </tutorials> @@ -26,6 +32,7 @@ </methods> <members> <member name="signal" type="String" setter="set_signal" getter="get_signal"> + The signal to emit. </member> </members> <constants> diff --git a/doc/classes/VisualScriptEngineSingleton.xml b/doc/classes/VisualScriptEngineSingleton.xml index c00fd2a0a4..6606f10f11 100644 --- a/doc/classes/VisualScriptEngineSingleton.xml +++ b/doc/classes/VisualScriptEngineSingleton.xml @@ -1,8 +1,10 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="VisualScriptEngineSingleton" inherits="VisualScriptNode" category="Core" version="3.0.alpha.custom_build"> <brief_description> + A Visual Script node returning a singleton from [@GlobalScope] </brief_description> <description> + A Visual Script node returning a singleton from [@GlobalScope] </description> <tutorials> </tutorials> @@ -26,6 +28,7 @@ </methods> <members> <member name="constant" type="String" setter="set_singleton" getter="get_singleton"> + The singleton's name. </member> </members> <constants> diff --git a/doc/classes/VisualScriptIterator.xml b/doc/classes/VisualScriptIterator.xml index 74309fcf00..1f9a4fddde 100644 --- a/doc/classes/VisualScriptIterator.xml +++ b/doc/classes/VisualScriptIterator.xml @@ -1,8 +1,17 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="VisualScriptIterator" inherits="VisualScriptNode" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Steps through items in a given input. </brief_description> <description> + This node steps through each item in a given input. Input can be any sequence data type, such as an [Array] or [String]. When each item has been processed, execution passed out the [code]exit[/code] Sequence port. + [b]Input Ports:[/b] + - Sequence: [code]for (elem) in (input)[/code] + - Data (variant): [code]input[/code] + [b]Output Ports:[/b] + - Sequence: [code]each[/code] + - Sequence: [code]exit[/code] + - Data (variant): [code]elem[/code] </description> <tutorials> </tutorials> diff --git a/doc/classes/VisualScriptLocalVar.xml b/doc/classes/VisualScriptLocalVar.xml index 7db550d5fe..3101b3e34b 100644 --- a/doc/classes/VisualScriptLocalVar.xml +++ b/doc/classes/VisualScriptLocalVar.xml @@ -1,8 +1,14 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="VisualScriptLocalVar" inherits="VisualScriptNode" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Gets a local variable's value. </brief_description> <description> + Returns a local variable's value. "Var Name" must be supplied, with an optional type. + [b]Input Ports:[/b] + none + [b]Output Ports:[/b] + - Data (variant): [code]get[/code] </description> <tutorials> </tutorials> @@ -40,8 +46,10 @@ </methods> <members> <member name="type" type="int" setter="set_var_type" getter="get_var_type" enum="Variant.Type"> + The local variable's type. </member> <member name="var_name" type="String" setter="set_var_name" getter="get_var_name"> + The local variable's name. </member> </members> <constants> diff --git a/doc/classes/VisualScriptLocalVarSet.xml b/doc/classes/VisualScriptLocalVarSet.xml index 6e69f13383..e039a7204e 100644 --- a/doc/classes/VisualScriptLocalVarSet.xml +++ b/doc/classes/VisualScriptLocalVarSet.xml @@ -1,8 +1,16 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="VisualScriptLocalVarSet" inherits="VisualScriptNode" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Changes a local variable's value. </brief_description> <description> + Changes a local variable's value to the given input. The new value is also provided on an output Data port. + [b]Input Ports:[/b] + - Sequence + - Data (variant): [code]set[/code] + [b]Output Ports:[/b] + - Sequence + - Data (variant): [code]get[/code] </description> <tutorials> </tutorials> @@ -40,8 +48,10 @@ </methods> <members> <member name="type" type="int" setter="set_var_type" getter="get_var_type" enum="Variant.Type"> + The local variable's type. </member> <member name="var_name" type="String" setter="set_var_name" getter="get_var_name"> + The local variable's name. </member> </members> <constants> diff --git a/doc/classes/VisualScriptMathConstant.xml b/doc/classes/VisualScriptMathConstant.xml index 1ef7d71e10..86744e5caf 100644 --- a/doc/classes/VisualScriptMathConstant.xml +++ b/doc/classes/VisualScriptMathConstant.xml @@ -1,8 +1,14 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="VisualScriptMathConstant" inherits="VisualScriptNode" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Commonly used mathematical constants. </brief_description> <description> + Provides common math constants, such as Pi or Euler's constant, on an output Data port. + [b]Input Ports:[/b] + none + [b]Output Ports:[/b] + - Data (variant): [code]get[/code] </description> <tutorials> </tutorials> @@ -26,24 +32,33 @@ </methods> <members> <member name="constant" type="int" setter="set_math_constant" getter="get_math_constant" enum="VisualScriptMathConstant.MathConstant"> + The math constant. </member> </members> <constants> <constant name="MATH_CONSTANT_ONE" value="0"> + Unity: [code]1[/code] </constant> <constant name="MATH_CONSTANT_PI" value="1"> + Pi: [code]3.141593[/code] </constant> <constant name="MATH_CONSTANT_2PI" value="2"> + Pi times two: [code]6.283185[/code] </constant> <constant name="MATH_CONSTANT_HALF_PI" value="3"> + Pi divided by two: [code]1.570796[/code] </constant> <constant name="MATH_CONSTANT_E" value="4"> + Natural log: [code]2.718282[/code] </constant> <constant name="MATH_CONSTANT_SQRT2" value="5"> + Square root of two: [code]1.414214[/code] </constant> <constant name="MATH_CONSTANT_INF" value="6"> + Infinity: [code]inf[/code] </constant> <constant name="MATH_CONSTANT_NAN" value="7"> + Not a number: [code]nan[/code] </constant> <constant name="MATH_CONSTANT_MAX" value="8"> </constant> diff --git a/doc/classes/VisualScriptNode.xml b/doc/classes/VisualScriptNode.xml index dbb75e69fa..74ec9bdc2e 100644 --- a/doc/classes/VisualScriptNode.xml +++ b/doc/classes/VisualScriptNode.xml @@ -1,8 +1,10 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="VisualScriptNode" inherits="Resource" category="Core" version="3.0.alpha.custom_build"> <brief_description> + A node which is part of a [VisualScript]. </brief_description> <description> + A node which is part of a [VisualScript]. Not to be confused with [Node], which is a part of a [SceneTree]. </description> <tutorials> </tutorials> @@ -15,12 +17,21 @@ <argument index="0" name="port_idx" type="int"> </argument> <description> + Returns the default value of a given port. The default value is used when nothing is connected to the port. </description> </method> <method name="get_visual_script" qualifiers="const"> <return type="VisualScript"> </return> <description> + Returns the [VisualScript] instance the node is bound to. + </description> + </method> + <method name="ports_changed_notify"> + <return type="void"> + </return> + <description> + Notify that the node's ports have changed. Usually used in conjunction with [VisualScriptCustomNode] . </description> </method> <method name="set_default_input_value"> @@ -31,6 +42,7 @@ <argument index="1" name="value" type="Variant"> </argument> <description> + Change the default value of a given port. </description> </method> </methods> @@ -41,6 +53,7 @@ <signals> <signal name="ports_changed"> <description> + Emitted when the available input/output ports are changed. </description> </signal> </signals> diff --git a/doc/classes/VisualScriptOperator.xml b/doc/classes/VisualScriptOperator.xml index 82951c9e0c..de08075af2 100644 --- a/doc/classes/VisualScriptOperator.xml +++ b/doc/classes/VisualScriptOperator.xml @@ -3,6 +3,11 @@ <brief_description> </brief_description> <description> + [b]Input Ports:[/b] + - Data (variant): [code]A[/code] + - Data (variant): [code]B[/code] + [b]Output Ports:[/b] + - Data (variant): [code]result[/code] </description> <tutorials> </tutorials> diff --git a/doc/classes/VisualScriptPreload.xml b/doc/classes/VisualScriptPreload.xml index b68bf5546b..b683439751 100644 --- a/doc/classes/VisualScriptPreload.xml +++ b/doc/classes/VisualScriptPreload.xml @@ -1,8 +1,14 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="VisualScriptPreload" inherits="VisualScriptNode" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Creates a new [Resource] or loads one from the filesystem. </brief_description> <description> + Creates a new [Resource] or loads one from the filesystem. + [b]Input Ports:[/b] + none + [b]Output Ports:[/b] + - Data (object): [code]res[/code] </description> <tutorials> </tutorials> @@ -26,6 +32,7 @@ </methods> <members> <member name="resource" type="Resource" setter="set_preload" getter="get_preload"> + The [Resource] to load. </member> </members> <constants> diff --git a/doc/classes/VisualScriptReturn.xml b/doc/classes/VisualScriptReturn.xml index 55c53e17a0..ad18e96230 100644 --- a/doc/classes/VisualScriptReturn.xml +++ b/doc/classes/VisualScriptReturn.xml @@ -1,8 +1,15 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="VisualScriptReturn" inherits="VisualScriptNode" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Exits a function and returns an optional value. </brief_description> <description> + Ends the execution of a function and returns control to the calling function. Optionally, it can return a [Variant] value. + [b]Input Ports:[/b] + - Sequence + - Data (variant): [code]result[/code] (optional) + [b]Output Ports:[/b] + none </description> <tutorials> </tutorials> @@ -40,8 +47,10 @@ </methods> <members> <member name="return_enabled" type="bool" setter="set_enable_return_value" getter="is_return_value_enabled"> + If [code]true[/code] the [code]return[/code] input port is available. </member> <member name="return_type" type="int" setter="set_return_type" getter="get_return_type" enum="Variant.Type"> + The return value's data type. </member> </members> <constants> diff --git a/doc/classes/VisualScriptSceneNode.xml b/doc/classes/VisualScriptSceneNode.xml index 90a8f132c0..b71bd9adfb 100644 --- a/doc/classes/VisualScriptSceneNode.xml +++ b/doc/classes/VisualScriptSceneNode.xml @@ -1,8 +1,14 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="VisualScriptSceneNode" inherits="VisualScriptNode" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Node reference. </brief_description> <description> + A direct reference to a node. + [b]Input Ports:[/b] + none + [b]Output Ports:[/b] + - Data: [code]node[/code] (obj) </description> <tutorials> </tutorials> @@ -26,6 +32,7 @@ </methods> <members> <member name="node_path" type="NodePath" setter="set_node_path" getter="get_node_path"> + The node's path in the scene tree. </member> </members> <constants> diff --git a/doc/classes/VisualScriptSelect.xml b/doc/classes/VisualScriptSelect.xml index 855da76e6c..f265c57645 100644 --- a/doc/classes/VisualScriptSelect.xml +++ b/doc/classes/VisualScriptSelect.xml @@ -1,8 +1,16 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="VisualScriptSelect" inherits="VisualScriptNode" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Chooses between two input values. </brief_description> <description> + Chooses between two input values based on a Boolean condition. + [b]Input Ports:[/b] + - Data (boolean): [code]cond[/code] + - Data (variant): [code]a[/code] + - Data (variant): [code]b[/code] + [b]Output Ports:[/b] + - Data (variant): [code]out[/code] </description> <tutorials> </tutorials> @@ -26,6 +34,7 @@ </methods> <members> <member name="type" type="int" setter="set_typed" getter="get_typed" enum="Variant.Type"> + The input variables' type. </member> </members> <constants> diff --git a/doc/classes/VisualScriptSelf.xml b/doc/classes/VisualScriptSelf.xml index a60f7eee03..723b138722 100644 --- a/doc/classes/VisualScriptSelf.xml +++ b/doc/classes/VisualScriptSelf.xml @@ -1,8 +1,14 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="VisualScriptSelf" inherits="VisualScriptNode" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Outputs a reference to the current instance. </brief_description> <description> + Provides a reference to the node running the visual script. + [b]Input Ports:[/b] + none + [b]Output Ports:[/b] + - Data (object): [code]instance[/code] </description> <tutorials> </tutorials> diff --git a/doc/classes/VisualScriptSequence.xml b/doc/classes/VisualScriptSequence.xml index a60c9e782b..845da4e50b 100644 --- a/doc/classes/VisualScriptSequence.xml +++ b/doc/classes/VisualScriptSequence.xml @@ -1,8 +1,16 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="VisualScriptSequence" inherits="VisualScriptNode" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Executes a series of Sequence ports. </brief_description> <description> + Steps through a series of one or more output Sequence ports. The [code]current[/code] data port outputs the currently executing item. + [b]Input Ports:[/b] + - Sequence: [code]in order[/code] + [b]Output Ports:[/b] + - Sequence: [code]1[/code] + - Sequence: [code]2 - n[/code] (optional) + - Data (int): [code]current[/code] </description> <tutorials> </tutorials> @@ -26,6 +34,7 @@ </methods> <members> <member name="steps" type="int" setter="set_steps" getter="get_steps"> + The number of steps in the sequence. </member> </members> <constants> diff --git a/doc/classes/VisualScriptSwitch.xml b/doc/classes/VisualScriptSwitch.xml index 95ed737372..2540ae54cc 100644 --- a/doc/classes/VisualScriptSwitch.xml +++ b/doc/classes/VisualScriptSwitch.xml @@ -1,8 +1,19 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="VisualScriptSwitch" inherits="VisualScriptNode" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Branches program flow based on a given input's value. </brief_description> <description> + Branches the flow based on an input's value. Use "Case Count" in the Inspector to set the number of branches and each comparison's optional type. + [b]Input Ports:[/b] + - Sequence: [code]'input' is[/code] + - Data (variant): [code]=[/code] + - Data (variant): [code]=[/code] (optional) + - Data (variant): [code]input[/code] + [b]Output Ports:[/b] + - Sequence + - Sequence (optional) + - Sequence: [code]done[/code] </description> <tutorials> </tutorials> diff --git a/doc/classes/VisualScriptVariableGet.xml b/doc/classes/VisualScriptVariableGet.xml index 8411933756..5b45dd0cc4 100644 --- a/doc/classes/VisualScriptVariableGet.xml +++ b/doc/classes/VisualScriptVariableGet.xml @@ -1,8 +1,14 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="VisualScriptVariableGet" inherits="VisualScriptNode" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Gets a variable's value. </brief_description> <description> + Returns a variable's value. "Var Name" must be supplied, with an optional type. + [b]Input Ports:[/b] + none + [b]Output Ports:[/b] + - Data (variant): [code]value[/code] </description> <tutorials> </tutorials> @@ -26,6 +32,7 @@ </methods> <members> <member name="var_name" type="String" setter="set_variable" getter="get_variable"> + The variable's name. </member> </members> <constants> diff --git a/doc/classes/VisualScriptVariableSet.xml b/doc/classes/VisualScriptVariableSet.xml index fbe0f8e275..51f85f6881 100644 --- a/doc/classes/VisualScriptVariableSet.xml +++ b/doc/classes/VisualScriptVariableSet.xml @@ -1,8 +1,15 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="VisualScriptVariableSet" inherits="VisualScriptNode" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Changes a variable's value. </brief_description> <description> + Changes a variable's value to the given input. + [b]Input Ports:[/b] + - Sequence + - Data (variant): [code]set[/code] + [b]Output Ports:[/b] + - Sequence </description> <tutorials> </tutorials> @@ -26,6 +33,7 @@ </methods> <members> <member name="var_name" type="String" setter="set_variable" getter="get_variable"> + The variable's name. </member> </members> <constants> diff --git a/doc/classes/VisualScriptWhile.xml b/doc/classes/VisualScriptWhile.xml index b49678582e..60bf161339 100644 --- a/doc/classes/VisualScriptWhile.xml +++ b/doc/classes/VisualScriptWhile.xml @@ -1,8 +1,16 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="VisualScriptWhile" inherits="VisualScriptNode" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Conditional loop. </brief_description> <description> + Loops while a condition is [code]true[/code]. Execution continues out the [code]exit[/code] Sequence port when the loop terminates. + [b]Input Ports:[/b] + - Sequence: [code]while(cond)[/code] + - Data (bool): [code]cond[/code] + [b]Output Ports:[/b] + - Sequence: [code]repeat[/code] + - Sequence: [code]exit[/code] </description> <tutorials> </tutorials> diff --git a/doc/classes/VisualScriptYield.xml b/doc/classes/VisualScriptYield.xml index b8938daa67..a0d95f151a 100644 --- a/doc/classes/VisualScriptYield.xml +++ b/doc/classes/VisualScriptYield.xml @@ -47,7 +47,7 @@ <constants> <constant name="YIELD_FRAME" value="1"> </constant> - <constant name="YIELD_FIXED_FRAME" value="2"> + <constant name="YIELD_PHYSICS_FRAME" value="2"> </constant> <constant name="YIELD_WAIT" value="3"> </constant> diff --git a/doc/classes/VisualServer.xml b/doc/classes/VisualServer.xml index 242fc18ab9..5c6a951e7d 100644 --- a/doc/classes/VisualServer.xml +++ b/doc/classes/VisualServer.xml @@ -12,12 +12,1342 @@ <demos> </demos> <methods> + <method name="black_bars_set_images"> + <return type="void"> + </return> + <argument index="0" name="left" type="RID"> + </argument> + <argument index="1" name="top" type="RID"> + </argument> + <argument index="2" name="right" type="RID"> + </argument> + <argument index="3" name="bottom" type="RID"> + </argument> + <description> + </description> + </method> + <method name="black_bars_set_margins"> + <return type="void"> + </return> + <argument index="0" name="left" type="int"> + </argument> + <argument index="1" name="top" type="int"> + </argument> + <argument index="2" name="right" type="int"> + </argument> + <argument index="3" name="bottom" type="int"> + </argument> + <description> + </description> + </method> + <method name="canvas_create"> + <return type="RID"> + </return> + <description> + </description> + </method> + <method name="canvas_item_add_circle"> + <return type="void"> + </return> + <argument index="0" name="item" type="RID"> + </argument> + <argument index="1" name="pos" type="Vector2"> + </argument> + <argument index="2" name="radius" type="float"> + </argument> + <argument index="3" name="color" type="Color"> + </argument> + <description> + </description> + </method> + <method name="canvas_item_add_clip_ignore"> + <return type="void"> + </return> + <argument index="0" name="item" type="RID"> + </argument> + <argument index="1" name="ignore" type="bool"> + </argument> + <description> + </description> + </method> + <method name="canvas_item_add_line"> + <return type="void"> + </return> + <argument index="0" name="item" type="RID"> + </argument> + <argument index="1" name="from" type="Vector2"> + </argument> + <argument index="2" name="to" type="Vector2"> + </argument> + <argument index="3" name="color" type="Color"> + </argument> + <argument index="4" name="width" type="float" default="1.0"> + </argument> + <argument index="5" name="antialiased" type="bool" default="false"> + </argument> + <description> + </description> + </method> + <method name="canvas_item_add_mesh"> + <return type="void"> + </return> + <argument index="0" name="item" type="RID"> + </argument> + <argument index="1" name="mesh" type="RID"> + </argument> + <argument index="2" name="skeleton" type="RID"> + </argument> + <description> + </description> + </method> + <method name="canvas_item_add_multimesh"> + <return type="void"> + </return> + <argument index="0" name="item" type="RID"> + </argument> + <argument index="1" name="mesh" type="RID"> + </argument> + <argument index="2" name="skeleton" type="RID"> + </argument> + <description> + </description> + </method> + <method name="canvas_item_add_nine_patch"> + <return type="void"> + </return> + <argument index="0" name="item" type="RID"> + </argument> + <argument index="1" name="rect" type="Rect2"> + </argument> + <argument index="2" name="source" type="Rect2"> + </argument> + <argument index="3" name="texture" type="RID"> + </argument> + <argument index="4" name="topleft" type="Vector2"> + </argument> + <argument index="5" name="bottomright" type="Vector2"> + </argument> + <argument index="6" name="x_axis_mode" type="int" enum="VisualServer.NinePatchAxisMode" default="0"> + </argument> + <argument index="7" name="y_axis_mode" type="int" enum="VisualServer.NinePatchAxisMode" default="0"> + </argument> + <argument index="8" name="draw_center" type="bool" default="true"> + </argument> + <argument index="9" name="modulate" type="Color" default="Color( 1, 1, 1, 1 )"> + </argument> + <argument index="10" name="normal_map" type="RID"> + </argument> + <description> + </description> + </method> + <method name="canvas_item_add_particles"> + <return type="void"> + </return> + <argument index="0" name="item" type="RID"> + </argument> + <argument index="1" name="particles" type="RID"> + </argument> + <argument index="2" name="texture" type="RID"> + </argument> + <argument index="3" name="normal_map" type="RID"> + </argument> + <argument index="4" name="h_frames" type="int"> + </argument> + <argument index="5" name="v_frames" type="int"> + </argument> + <description> + </description> + </method> + <method name="canvas_item_add_polygon"> + <return type="void"> + </return> + <argument index="0" name="item" type="RID"> + </argument> + <argument index="1" name="points" type="PoolVector2Array"> + </argument> + <argument index="2" name="colors" type="PoolColorArray"> + </argument> + <argument index="3" name="uvs" type="PoolVector2Array" default="PoolVector2Array( )"> + </argument> + <argument index="4" name="texture" type="RID"> + </argument> + <argument index="5" name="normal_map" type="RID"> + </argument> + <argument index="6" name="antialiased" type="bool" default="false"> + </argument> + <description> + </description> + </method> + <method name="canvas_item_add_polyline"> + <return type="void"> + </return> + <argument index="0" name="item" type="RID"> + </argument> + <argument index="1" name="points" type="PoolVector2Array"> + </argument> + <argument index="2" name="colors" type="PoolColorArray"> + </argument> + <argument index="3" name="width" type="float" default="1.0"> + </argument> + <argument index="4" name="antialiased" type="bool" default="false"> + </argument> + <description> + </description> + </method> + <method name="canvas_item_add_primitive"> + <return type="void"> + </return> + <argument index="0" name="item" type="RID"> + </argument> + <argument index="1" name="points" type="PoolVector2Array"> + </argument> + <argument index="2" name="colors" type="PoolColorArray"> + </argument> + <argument index="3" name="uvs" type="PoolVector2Array"> + </argument> + <argument index="4" name="texture" type="RID"> + </argument> + <argument index="5" name="width" type="float" default="1.0"> + </argument> + <argument index="6" name="normal_map" type="RID"> + </argument> + <description> + </description> + </method> + <method name="canvas_item_add_rect"> + <return type="void"> + </return> + <argument index="0" name="item" type="RID"> + </argument> + <argument index="1" name="rect" type="Rect2"> + </argument> + <argument index="2" name="color" type="Color"> + </argument> + <description> + </description> + </method> + <method name="canvas_item_add_set_transform"> + <return type="void"> + </return> + <argument index="0" name="item" type="RID"> + </argument> + <argument index="1" name="transform" type="Transform2D"> + </argument> + <description> + </description> + </method> + <method name="canvas_item_add_texture_rect"> + <return type="void"> + </return> + <argument index="0" name="item" type="RID"> + </argument> + <argument index="1" name="rect" type="Rect2"> + </argument> + <argument index="2" name="texture" type="RID"> + </argument> + <argument index="3" name="tile" type="bool" default="false"> + </argument> + <argument index="4" name="modulate" type="Color" default="Color( 1, 1, 1, 1 )"> + </argument> + <argument index="5" name="transpose" type="bool" default="false"> + </argument> + <argument index="6" name="normal_map" type="RID"> + </argument> + <description> + </description> + </method> + <method name="canvas_item_add_texture_rect_region"> + <return type="void"> + </return> + <argument index="0" name="item" type="RID"> + </argument> + <argument index="1" name="rect" type="Rect2"> + </argument> + <argument index="2" name="texture" type="RID"> + </argument> + <argument index="3" name="src_rect" type="Rect2"> + </argument> + <argument index="4" name="modulate" type="Color" default="Color( 1, 1, 1, 1 )"> + </argument> + <argument index="5" name="transpose" type="bool" default="false"> + </argument> + <argument index="6" name="normal_map" type="RID"> + </argument> + <argument index="7" name="clip_uv" type="bool" default="true"> + </argument> + <description> + </description> + </method> + <method name="canvas_item_add_triangle_array"> + <return type="void"> + </return> + <argument index="0" name="item" type="RID"> + </argument> + <argument index="1" name="indices" type="PoolIntArray"> + </argument> + <argument index="2" name="points" type="PoolVector2Array"> + </argument> + <argument index="3" name="colors" type="PoolColorArray"> + </argument> + <argument index="4" name="uvs" type="PoolVector2Array" default="PoolVector2Array( )"> + </argument> + <argument index="5" name="texture" type="RID"> + </argument> + <argument index="6" name="count" type="int" default="-1"> + </argument> + <argument index="7" name="normal_map" type="RID"> + </argument> + <description> + </description> + </method> + <method name="canvas_item_clear"> + <return type="void"> + </return> + <argument index="0" name="item" type="RID"> + </argument> + <description> + </description> + </method> + <method name="canvas_item_create"> + <return type="RID"> + </return> + <description> + </description> + </method> + <method name="canvas_item_set_clip"> + <return type="void"> + </return> + <argument index="0" name="item" type="RID"> + </argument> + <argument index="1" name="clip" type="bool"> + </argument> + <description> + </description> + </method> + <method name="canvas_item_set_copy_to_backbuffer"> + <return type="void"> + </return> + <argument index="0" name="item" type="RID"> + </argument> + <argument index="1" name="enabled" type="bool"> + </argument> + <argument index="2" name="rect" type="Rect2"> + </argument> + <description> + </description> + </method> + <method name="canvas_item_set_custom_rect"> + <return type="void"> + </return> + <argument index="0" name="item" type="RID"> + </argument> + <argument index="1" name="use_custom_rect" type="bool"> + </argument> + <argument index="2" name="rect" type="Rect2" default="Rect2( 0, 0, 0, 0 )"> + </argument> + <description> + </description> + </method> + <method name="canvas_item_set_distance_field_mode"> + <return type="void"> + </return> + <argument index="0" name="item" type="RID"> + </argument> + <argument index="1" name="enabled" type="bool"> + </argument> + <description> + </description> + </method> + <method name="canvas_item_set_draw_behind_parent"> + <return type="void"> + </return> + <argument index="0" name="item" type="RID"> + </argument> + <argument index="1" name="enabled" type="bool"> + </argument> + <description> + </description> + </method> + <method name="canvas_item_set_draw_index"> + <return type="void"> + </return> + <argument index="0" name="item" type="RID"> + </argument> + <argument index="1" name="index" type="int"> + </argument> + <description> + </description> + </method> + <method name="canvas_item_set_light_mask"> + <return type="void"> + </return> + <argument index="0" name="item" type="RID"> + </argument> + <argument index="1" name="mask" type="int"> + </argument> + <description> + </description> + </method> + <method name="canvas_item_set_material"> + <return type="void"> + </return> + <argument index="0" name="item" type="RID"> + </argument> + <argument index="1" name="material" type="RID"> + </argument> + <description> + </description> + </method> + <method name="canvas_item_set_modulate"> + <return type="void"> + </return> + <argument index="0" name="item" type="RID"> + </argument> + <argument index="1" name="color" type="Color"> + </argument> + <description> + </description> + </method> + <method name="canvas_item_set_parent"> + <return type="void"> + </return> + <argument index="0" name="item" type="RID"> + </argument> + <argument index="1" name="parent" type="RID"> + </argument> + <description> + </description> + </method> + <method name="canvas_item_set_self_modulate"> + <return type="void"> + </return> + <argument index="0" name="item" type="RID"> + </argument> + <argument index="1" name="color" type="Color"> + </argument> + <description> + </description> + </method> + <method name="canvas_item_set_sort_children_by_y"> + <return type="void"> + </return> + <argument index="0" name="item" type="RID"> + </argument> + <argument index="1" name="enabled" type="bool"> + </argument> + <description> + </description> + </method> + <method name="canvas_item_set_transform"> + <return type="void"> + </return> + <argument index="0" name="item" type="RID"> + </argument> + <argument index="1" name="transform" type="Transform2D"> + </argument> + <description> + </description> + </method> + <method name="canvas_item_set_use_parent_material"> + <return type="void"> + </return> + <argument index="0" name="item" type="RID"> + </argument> + <argument index="1" name="enabled" type="bool"> + </argument> + <description> + </description> + </method> + <method name="canvas_item_set_visible"> + <return type="void"> + </return> + <argument index="0" name="item" type="RID"> + </argument> + <argument index="1" name="visible" type="bool"> + </argument> + <description> + </description> + </method> + <method name="canvas_item_set_z"> + <return type="void"> + </return> + <argument index="0" name="item" type="RID"> + </argument> + <argument index="1" name="z" type="int"> + </argument> + <description> + </description> + </method> + <method name="canvas_item_set_z_as_relative_to_parent"> + <return type="void"> + </return> + <argument index="0" name="item" type="RID"> + </argument> + <argument index="1" name="enabled" type="bool"> + </argument> + <description> + </description> + </method> + <method name="canvas_light_attach_to_canvas"> + <return type="void"> + </return> + <argument index="0" name="light" type="RID"> + </argument> + <argument index="1" name="canvas" type="RID"> + </argument> + <description> + </description> + </method> + <method name="canvas_light_create"> + <return type="RID"> + </return> + <description> + </description> + </method> + <method name="canvas_light_occluder_attach_to_canvas"> + <return type="void"> + </return> + <argument index="0" name="occluder" type="RID"> + </argument> + <argument index="1" name="canvas" type="RID"> + </argument> + <description> + </description> + </method> + <method name="canvas_light_occluder_create"> + <return type="RID"> + </return> + <description> + </description> + </method> + <method name="canvas_light_occluder_set_enabled"> + <return type="void"> + </return> + <argument index="0" name="occluder" type="RID"> + </argument> + <argument index="1" name="enabled" type="bool"> + </argument> + <description> + </description> + </method> + <method name="canvas_light_occluder_set_light_mask"> + <return type="void"> + </return> + <argument index="0" name="occluder" type="RID"> + </argument> + <argument index="1" name="mask" type="int"> + </argument> + <description> + </description> + </method> + <method name="canvas_light_occluder_set_polygon"> + <return type="void"> + </return> + <argument index="0" name="occluder" type="RID"> + </argument> + <argument index="1" name="polygon" type="RID"> + </argument> + <description> + </description> + </method> + <method name="canvas_light_occluder_set_transform"> + <return type="void"> + </return> + <argument index="0" name="occluder" type="RID"> + </argument> + <argument index="1" name="transform" type="Transform2D"> + </argument> + <description> + </description> + </method> + <method name="canvas_light_set_color"> + <return type="void"> + </return> + <argument index="0" name="light" type="RID"> + </argument> + <argument index="1" name="color" type="Color"> + </argument> + <description> + </description> + </method> + <method name="canvas_light_set_enabled"> + <return type="void"> + </return> + <argument index="0" name="light" type="RID"> + </argument> + <argument index="1" name="enabled" type="bool"> + </argument> + <description> + </description> + </method> + <method name="canvas_light_set_energy"> + <return type="void"> + </return> + <argument index="0" name="light" type="RID"> + </argument> + <argument index="1" name="energy" type="float"> + </argument> + <description> + </description> + </method> + <method name="canvas_light_set_height"> + <return type="void"> + </return> + <argument index="0" name="light" type="RID"> + </argument> + <argument index="1" name="height" type="float"> + </argument> + <description> + </description> + </method> + <method name="canvas_light_set_item_cull_mask"> + <return type="void"> + </return> + <argument index="0" name="light" type="RID"> + </argument> + <argument index="1" name="mask" type="int"> + </argument> + <description> + </description> + </method> + <method name="canvas_light_set_item_shadow_cull_mask"> + <return type="void"> + </return> + <argument index="0" name="light" type="RID"> + </argument> + <argument index="1" name="mask" type="int"> + </argument> + <description> + </description> + </method> + <method name="canvas_light_set_layer_range"> + <return type="void"> + </return> + <argument index="0" name="light" type="RID"> + </argument> + <argument index="1" name="min_layer" type="int"> + </argument> + <argument index="2" name="max_layer" type="int"> + </argument> + <description> + </description> + </method> + <method name="canvas_light_set_mode"> + <return type="void"> + </return> + <argument index="0" name="light" type="RID"> + </argument> + <argument index="1" name="mode" type="int" enum="VisualServer.CanvasLightMode"> + </argument> + <description> + </description> + </method> + <method name="canvas_light_set_scale"> + <return type="void"> + </return> + <argument index="0" name="light" type="RID"> + </argument> + <argument index="1" name="scale" type="float"> + </argument> + <description> + </description> + </method> + <method name="canvas_light_set_shadow_buffer_size"> + <return type="void"> + </return> + <argument index="0" name="light" type="RID"> + </argument> + <argument index="1" name="size" type="int"> + </argument> + <description> + </description> + </method> + <method name="canvas_light_set_shadow_color"> + <return type="void"> + </return> + <argument index="0" name="light" type="RID"> + </argument> + <argument index="1" name="color" type="Color"> + </argument> + <description> + </description> + </method> + <method name="canvas_light_set_shadow_enabled"> + <return type="void"> + </return> + <argument index="0" name="light" type="RID"> + </argument> + <argument index="1" name="enabled" type="bool"> + </argument> + <description> + </description> + </method> + <method name="canvas_light_set_shadow_filter"> + <return type="void"> + </return> + <argument index="0" name="light" type="RID"> + </argument> + <argument index="1" name="filter" type="int" enum="VisualServer.CanvasLightShadowFilter"> + </argument> + <description> + </description> + </method> + <method name="canvas_light_set_shadow_gradient_length"> + <return type="void"> + </return> + <argument index="0" name="light" type="RID"> + </argument> + <argument index="1" name="length" type="float"> + </argument> + <description> + </description> + </method> + <method name="canvas_light_set_shadow_smooth"> + <return type="void"> + </return> + <argument index="0" name="light" type="RID"> + </argument> + <argument index="1" name="smooth" type="float"> + </argument> + <description> + </description> + </method> + <method name="canvas_light_set_texture"> + <return type="void"> + </return> + <argument index="0" name="light" type="RID"> + </argument> + <argument index="1" name="texture" type="RID"> + </argument> + <description> + </description> + </method> + <method name="canvas_light_set_texture_offset"> + <return type="void"> + </return> + <argument index="0" name="light" type="RID"> + </argument> + <argument index="1" name="offset" type="Vector2"> + </argument> + <description> + </description> + </method> + <method name="canvas_light_set_transform"> + <return type="void"> + </return> + <argument index="0" name="light" type="RID"> + </argument> + <argument index="1" name="transform" type="Transform2D"> + </argument> + <description> + </description> + </method> + <method name="canvas_light_set_z_range"> + <return type="void"> + </return> + <argument index="0" name="light" type="RID"> + </argument> + <argument index="1" name="min_z" type="int"> + </argument> + <argument index="2" name="max_z" type="int"> + </argument> + <description> + </description> + </method> + <method name="canvas_occluder_polygon_create"> + <return type="RID"> + </return> + <description> + </description> + </method> + <method name="canvas_occluder_polygon_set_cull_mode"> + <return type="void"> + </return> + <argument index="0" name="occluder_polygon" type="RID"> + </argument> + <argument index="1" name="mode" type="int" enum="VisualServer.CanvasOccluderPolygonCullMode"> + </argument> + <description> + </description> + </method> + <method name="canvas_occluder_polygon_set_shape"> + <return type="void"> + </return> + <argument index="0" name="occluder_polygon" type="RID"> + </argument> + <argument index="1" name="shape" type="PoolVector2Array"> + </argument> + <argument index="2" name="closed" type="bool"> + </argument> + <description> + </description> + </method> + <method name="canvas_occluder_polygon_set_shape_as_lines"> + <return type="void"> + </return> + <argument index="0" name="occluder_polygon" type="RID"> + </argument> + <argument index="1" name="shape" type="PoolVector2Array"> + </argument> + <description> + </description> + </method> + <method name="canvas_set_item_mirroring"> + <return type="void"> + </return> + <argument index="0" name="canvas" type="RID"> + </argument> + <argument index="1" name="item" type="RID"> + </argument> + <argument index="2" name="mirroring" type="Vector2"> + </argument> + <description> + </description> + </method> + <method name="canvas_set_modulate"> + <return type="void"> + </return> + <argument index="0" name="canvas" type="RID"> + </argument> + <argument index="1" name="color" type="Color"> + </argument> + <description> + </description> + </method> + <method name="draw"> + <return type="void"> + </return> + <description> + </description> + </method> + <method name="finish"> + <return type="void"> + </return> + <description> + </description> + </method> <method name="force_draw"> <return type="void"> </return> <description> </description> </method> + <method name="force_sync"> + <return type="void"> + </return> + <description> + </description> + </method> + <method name="free"> + <return type="void"> + </return> + <argument index="0" name="rid" type="RID"> + </argument> + <description> + </description> + </method> + <method name="get_render_info"> + <return type="int"> + </return> + <argument index="0" name="info" type="int" enum="VisualServer.RenderInfo"> + </argument> + <description> + </description> + </method> + <method name="get_test_cube"> + <return type="RID"> + </return> + <description> + </description> + </method> + <method name="get_test_texture"> + <return type="RID"> + </return> + <description> + </description> + </method> + <method name="get_white_texture"> + <return type="RID"> + </return> + <description> + </description> + </method> + <method name="has_changed" qualifiers="const"> + <return type="bool"> + </return> + <description> + </description> + </method> + <method name="has_feature" qualifiers="const"> + <return type="bool"> + </return> + <argument index="0" name="feature" type="int" enum="VisualServer.Features"> + </argument> + <description> + </description> + </method> + <method name="has_os_feature" qualifiers="const"> + <return type="bool"> + </return> + <argument index="0" name="feature" type="String"> + </argument> + <description> + </description> + </method> + <method name="init"> + <return type="void"> + </return> + <description> + </description> + </method> + <method name="make_sphere_mesh"> + <return type="RID"> + </return> + <argument index="0" name="latitudes" type="int"> + </argument> + <argument index="1" name="longitudes" type="int"> + </argument> + <argument index="2" name="radius" type="float"> + </argument> + <description> + </description> + </method> + <method name="material_create"> + <return type="RID"> + </return> + <description> + </description> + </method> + <method name="material_get_param" qualifiers="const"> + <return type="Variant"> + </return> + <argument index="0" name="material" type="RID"> + </argument> + <argument index="1" name="parameter" type="String"> + </argument> + <description> + </description> + </method> + <method name="material_get_shader" qualifiers="const"> + <return type="RID"> + </return> + <argument index="0" name="shader_material" type="RID"> + </argument> + <description> + </description> + </method> + <method name="material_set_line_width"> + <return type="void"> + </return> + <argument index="0" name="material" type="RID"> + </argument> + <argument index="1" name="width" type="float"> + </argument> + <description> + </description> + </method> + <method name="material_set_next_pass"> + <return type="void"> + </return> + <argument index="0" name="material" type="RID"> + </argument> + <argument index="1" name="next_material" type="RID"> + </argument> + <description> + </description> + </method> + <method name="material_set_param"> + <return type="void"> + </return> + <argument index="0" name="material" type="RID"> + </argument> + <argument index="1" name="parameter" type="String"> + </argument> + <argument index="2" name="value" type="Variant"> + </argument> + <description> + </description> + </method> + <method name="material_set_render_priority"> + <return type="void"> + </return> + <argument index="0" name="material" type="RID"> + </argument> + <argument index="1" name="priority" type="int"> + </argument> + <description> + </description> + </method> + <method name="material_set_shader"> + <return type="void"> + </return> + <argument index="0" name="shader_material" type="RID"> + </argument> + <argument index="1" name="shader" type="RID"> + </argument> + <description> + </description> + </method> + <method name="mesh_add_surface_from_arrays"> + <return type="void"> + </return> + <argument index="0" name="mesh" type="RID"> + </argument> + <argument index="1" name="primtive" type="int" enum="VisualServer.PrimitiveType"> + </argument> + <argument index="2" name="arrays" type="Array"> + </argument> + <argument index="3" name="blend_shapes" type="Array" default="[ ]"> + </argument> + <argument index="4" name="compress_format" type="int" default="97792"> + </argument> + <description> + </description> + </method> + <method name="mesh_clear"> + <return type="void"> + </return> + <argument index="0" name="mesh" type="RID"> + </argument> + <description> + </description> + </method> + <method name="mesh_create"> + <return type="RID"> + </return> + <description> + </description> + </method> + <method name="mesh_get_blend_shape_count" qualifiers="const"> + <return type="int"> + </return> + <argument index="0" name="mesh" type="RID"> + </argument> + <description> + </description> + </method> + <method name="mesh_get_blend_shape_mode" qualifiers="const"> + <return type="int" enum="VisualServer.BlendShapeMode"> + </return> + <argument index="0" name="mesh" type="RID"> + </argument> + <description> + </description> + </method> + <method name="mesh_get_custom_aabb" qualifiers="const"> + <return type="Rect3"> + </return> + <argument index="0" name="mesh" type="RID"> + </argument> + <description> + </description> + </method> + <method name="mesh_get_surface_count" qualifiers="const"> + <return type="int"> + </return> + <argument index="0" name="mesh" type="RID"> + </argument> + <description> + </description> + </method> + <method name="mesh_remove_surface"> + <return type="void"> + </return> + <argument index="0" name="mesh" type="RID"> + </argument> + <argument index="1" name="index" type="int"> + </argument> + <description> + </description> + </method> + <method name="mesh_set_blend_shape_count"> + <return type="void"> + </return> + <argument index="0" name="mesh" type="RID"> + </argument> + <argument index="1" name="amount" type="int"> + </argument> + <description> + </description> + </method> + <method name="mesh_set_blend_shape_mode"> + <return type="void"> + </return> + <argument index="0" name="mesh" type="RID"> + </argument> + <argument index="1" name="mode" type="int" enum="VisualServer.BlendShapeMode"> + </argument> + <description> + </description> + </method> + <method name="mesh_set_custom_aabb"> + <return type="void"> + </return> + <argument index="0" name="mesh" type="RID"> + </argument> + <argument index="1" name="aabb" type="Rect3"> + </argument> + <description> + </description> + </method> + <method name="mesh_surface_get_aabb" qualifiers="const"> + <return type="Rect3"> + </return> + <argument index="0" name="mesh" type="RID"> + </argument> + <argument index="1" name="surface" type="int"> + </argument> + <description> + </description> + </method> + <method name="mesh_surface_get_array" qualifiers="const"> + <return type="PoolByteArray"> + </return> + <argument index="0" name="mesh" type="RID"> + </argument> + <argument index="1" name="surface" type="int"> + </argument> + <description> + </description> + </method> + <method name="mesh_surface_get_array_index_len" qualifiers="const"> + <return type="int"> + </return> + <argument index="0" name="mesh" type="RID"> + </argument> + <argument index="1" name="surface" type="int"> + </argument> + <description> + </description> + </method> + <method name="mesh_surface_get_array_len" qualifiers="const"> + <return type="int"> + </return> + <argument index="0" name="mesh" type="RID"> + </argument> + <argument index="1" name="surface" type="int"> + </argument> + <description> + </description> + </method> + <method name="mesh_surface_get_arrays" qualifiers="const"> + <return type="Array"> + </return> + <argument index="0" name="mesh" type="RID"> + </argument> + <argument index="1" name="surface" type="int"> + </argument> + <description> + </description> + </method> + <method name="mesh_surface_get_blend_shape_arrays" qualifiers="const"> + <return type="Array"> + </return> + <argument index="0" name="mesh" type="RID"> + </argument> + <argument index="1" name="surface" type="int"> + </argument> + <description> + </description> + </method> + <method name="mesh_surface_get_format" qualifiers="const"> + <return type="int"> + </return> + <argument index="0" name="mesh" type="RID"> + </argument> + <argument index="1" name="surface" type="int"> + </argument> + <description> + </description> + </method> + <method name="mesh_surface_get_index_array" qualifiers="const"> + <return type="PoolByteArray"> + </return> + <argument index="0" name="mesh" type="RID"> + </argument> + <argument index="1" name="surface" type="int"> + </argument> + <description> + </description> + </method> + <method name="mesh_surface_get_material" qualifiers="const"> + <return type="RID"> + </return> + <argument index="0" name="mesh" type="RID"> + </argument> + <argument index="1" name="surface" type="int"> + </argument> + <description> + </description> + </method> + <method name="mesh_surface_get_primitive_type" qualifiers="const"> + <return type="int" enum="VisualServer.PrimitiveType"> + </return> + <argument index="0" name="mesh" type="RID"> + </argument> + <argument index="1" name="surface" type="int"> + </argument> + <description> + </description> + </method> + <method name="mesh_surface_get_skeleton_aabb" qualifiers="const"> + <return type="Array"> + </return> + <argument index="0" name="mesh" type="RID"> + </argument> + <argument index="1" name="surface" type="int"> + </argument> + <description> + </description> + </method> + <method name="mesh_surface_set_material"> + <return type="void"> + </return> + <argument index="0" name="mesh" type="RID"> + </argument> + <argument index="1" name="surface" type="int"> + </argument> + <argument index="2" name="material" type="RID"> + </argument> + <description> + </description> + </method> + <method name="request_frame_drawn_callback"> + <return type="void"> + </return> + <argument index="0" name="where" type="Object"> + </argument> + <argument index="1" name="method" type="String"> + </argument> + <argument index="2" name="userdata" type="Variant"> + </argument> + <description> + Schedules a callback to the corresponding named 'method' on 'where' after a frame has been drawn. + The callback method must use only 1 argument which will be called with 'userdata'. + </description> + </method> + <method name="set_boot_image"> + <return type="void"> + </return> + <argument index="0" name="image" type="Image"> + </argument> + <argument index="1" name="color" type="Color"> + </argument> + <argument index="2" name="scale" type="bool"> + </argument> + <description> + </description> + </method> + <method name="set_debug_generate_wireframes"> + <return type="void"> + </return> + <argument index="0" name="generate" type="bool"> + </argument> + <description> + </description> + </method> + <method name="set_default_clear_color"> + <return type="void"> + </return> + <argument index="0" name="color" type="Color"> + </argument> + <description> + </description> + </method> + <method name="shader_create"> + <return type="RID"> + </return> + <description> + </description> + </method> + <method name="shader_get_code" qualifiers="const"> + <return type="String"> + </return> + <argument index="0" name="shader" type="RID"> + </argument> + <description> + </description> + </method> + <method name="shader_get_default_texture_param" qualifiers="const"> + <return type="RID"> + </return> + <argument index="0" name="shader" type="RID"> + </argument> + <argument index="1" name="name" type="String"> + </argument> + <description> + </description> + </method> + <method name="shader_get_param_list" qualifiers="const"> + <return type="Array"> + </return> + <argument index="0" name="shader" type="RID"> + </argument> + <description> + </description> + </method> + <method name="shader_set_code"> + <return type="void"> + </return> + <argument index="0" name="shader" type="RID"> + </argument> + <argument index="1" name="code" type="String"> + </argument> + <description> + </description> + </method> + <method name="shader_set_default_texture_param"> + <return type="void"> + </return> + <argument index="0" name="shader" type="RID"> + </argument> + <argument index="1" name="name" type="String"> + </argument> + <argument index="2" name="texture" type="RID"> + </argument> + <description> + </description> + </method> + <method name="sky_create"> + <return type="RID"> + </return> + <description> + </description> + </method> + <method name="sky_set_texture"> + <return type="void"> + </return> + <argument index="0" name="sky" type="RID"> + </argument> + <argument index="1" name="cube_map" type="RID"> + </argument> + <argument index="2" name="radiance_size" type="int"> + </argument> + <description> + </description> + </method> + <method name="sync"> + <return type="void"> + </return> + <description> + </description> + </method> + <method name="texture_allocate"> + <return type="void"> + </return> + <argument index="0" name="texture" type="RID"> + </argument> + <argument index="1" name="width" type="int"> + </argument> + <argument index="2" name="height" type="int"> + </argument> + <argument index="3" name="format" type="int" enum="Image.Format"> + </argument> + <argument index="4" name="flags" type="int" default="7"> + </argument> + <description> + </description> + </method> <method name="texture_create"> <return type="RID"> </return> @@ -34,6 +1364,22 @@ <description> </description> </method> + <method name="texture_debug_usage"> + <return type="Array"> + </return> + <description> + </description> + </method> + <method name="texture_get_data" qualifiers="const"> + <return type="Image"> + </return> + <argument index="0" name="texture" type="RID"> + </argument> + <argument index="1" name="cube_side" type="int" enum="VisualServer.CubeMapSide" default="0"> + </argument> + <description> + </description> + </method> <method name="texture_get_flags" qualifiers="const"> <return type="int"> </return> @@ -42,6 +1388,14 @@ <description> </description> </method> + <method name="texture_get_format" qualifiers="const"> + <return type="int" enum="Image.Format"> + </return> + <argument index="0" name="texture" type="RID"> + </argument> + <description> + </description> + </method> <method name="texture_get_height" qualifiers="const"> <return type="int"> </return> @@ -50,6 +1404,22 @@ <description> </description> </method> + <method name="texture_get_path" qualifiers="const"> + <return type="String"> + </return> + <argument index="0" name="texture" type="RID"> + </argument> + <description> + </description> + </method> + <method name="texture_get_texid" qualifiers="const"> + <return type="int"> + </return> + <argument index="0" name="texture" type="RID"> + </argument> + <description> + </description> + </method> <method name="texture_get_width" qualifiers="const"> <return type="int"> </return> @@ -58,6 +1428,18 @@ <description> </description> </method> + <method name="texture_set_data"> + <return type="void"> + </return> + <argument index="0" name="texture" type="RID"> + </argument> + <argument index="1" name="image" type="Image"> + </argument> + <argument index="2" name="cube_side" type="int" enum="VisualServer.CubeMapSide" default="0"> + </argument> + <description> + </description> + </method> <method name="texture_set_flags"> <return type="void"> </return> @@ -68,6 +1450,16 @@ <description> </description> </method> + <method name="texture_set_path"> + <return type="void"> + </return> + <argument index="0" name="texture" type="RID"> + </argument> + <argument index="1" name="path" type="String"> + </argument> + <description> + </description> + </method> <method name="texture_set_shrink_all_x2_on_set_data"> <return type="void"> </return> @@ -76,7 +1468,641 @@ <description> </description> </method> + <method name="texture_set_size_override"> + <return type="void"> + </return> + <argument index="0" name="texture" type="RID"> + </argument> + <argument index="1" name="width" type="int"> + </argument> + <argument index="2" name="height" type="int"> + </argument> + <description> + </description> + </method> + <method name="textures_keep_original"> + <return type="void"> + </return> + <argument index="0" name="enable" type="bool"> + </argument> + <description> + </description> + </method> + <method name="viewport_attach_camera"> + <return type="void"> + </return> + <argument index="0" name="viewport" type="RID"> + </argument> + <argument index="1" name="camera" type="RID"> + </argument> + <description> + </description> + </method> + <method name="viewport_attach_canvas"> + <return type="void"> + </return> + <argument index="0" name="viewport" type="RID"> + </argument> + <argument index="1" name="canvas" type="RID"> + </argument> + <description> + </description> + </method> + <method name="viewport_attach_to_screen"> + <return type="void"> + </return> + <argument index="0" name="viewport" type="RID"> + </argument> + <argument index="1" name="rect" type="Rect2" default="Rect2( 0, 0, 0, 0 )"> + </argument> + <argument index="2" name="screen" type="int" default="0"> + </argument> + <description> + </description> + </method> + <method name="viewport_create"> + <return type="RID"> + </return> + <description> + </description> + </method> + <method name="viewport_detach"> + <return type="void"> + </return> + <argument index="0" name="viewport" type="RID"> + </argument> + <description> + </description> + </method> + <method name="viewport_get_render_info"> + <return type="int"> + </return> + <argument index="0" name="viewport" type="RID"> + </argument> + <argument index="1" name="info" type="int" enum="VisualServer.ViewportRenderInfo"> + </argument> + <description> + </description> + </method> + <method name="viewport_get_texture" qualifiers="const"> + <return type="RID"> + </return> + <argument index="0" name="viewport" type="RID"> + </argument> + <description> + </description> + </method> + <method name="viewport_remove_canvas"> + <return type="void"> + </return> + <argument index="0" name="viewport" type="RID"> + </argument> + <argument index="1" name="canvas" type="RID"> + </argument> + <description> + </description> + </method> + <method name="viewport_set_active"> + <return type="void"> + </return> + <argument index="0" name="viewport" type="RID"> + </argument> + <argument index="1" name="active" type="bool"> + </argument> + <description> + </description> + </method> + <method name="viewport_set_canvas_layer"> + <return type="void"> + </return> + <argument index="0" name="viewport" type="RID"> + </argument> + <argument index="1" name="canvas" type="RID"> + </argument> + <argument index="2" name="layer" type="int"> + </argument> + <description> + </description> + </method> + <method name="viewport_set_canvas_transform"> + <return type="void"> + </return> + <argument index="0" name="viewport" type="RID"> + </argument> + <argument index="1" name="canvas" type="RID"> + </argument> + <argument index="2" name="offset" type="Transform2D"> + </argument> + <description> + </description> + </method> + <method name="viewport_set_clear_mode"> + <return type="void"> + </return> + <argument index="0" name="viewport" type="RID"> + </argument> + <argument index="1" name="clear_mode" type="int" enum="VisualServer.ViewportClearMode"> + </argument> + <description> + </description> + </method> + <method name="viewport_set_debug_draw"> + <return type="void"> + </return> + <argument index="0" name="viewport" type="RID"> + </argument> + <argument index="1" name="draw" type="int" enum="VisualServer.ViewportDebugDraw"> + </argument> + <description> + </description> + </method> + <method name="viewport_set_disable_3d"> + <return type="void"> + </return> + <argument index="0" name="viewport" type="RID"> + </argument> + <argument index="1" name="disabled" type="bool"> + </argument> + <description> + </description> + </method> + <method name="viewport_set_disable_environment"> + <return type="void"> + </return> + <argument index="0" name="viewport" type="RID"> + </argument> + <argument index="1" name="disabled" type="bool"> + </argument> + <description> + </description> + </method> + <method name="viewport_set_global_canvas_transform"> + <return type="void"> + </return> + <argument index="0" name="viewport" type="RID"> + </argument> + <argument index="1" name="transform" type="Transform2D"> + </argument> + <description> + </description> + </method> + <method name="viewport_set_hdr"> + <return type="void"> + </return> + <argument index="0" name="viewport" type="RID"> + </argument> + <argument index="1" name="enabled" type="bool"> + </argument> + <description> + </description> + </method> + <method name="viewport_set_hide_canvas"> + <return type="void"> + </return> + <argument index="0" name="viewport" type="RID"> + </argument> + <argument index="1" name="hidden" type="bool"> + </argument> + <description> + </description> + </method> + <method name="viewport_set_hide_scenario"> + <return type="void"> + </return> + <argument index="0" name="viewport" type="RID"> + </argument> + <argument index="1" name="hidden" type="bool"> + </argument> + <description> + </description> + </method> + <method name="viewport_set_msaa"> + <return type="void"> + </return> + <argument index="0" name="viewport" type="RID"> + </argument> + <argument index="1" name="msaa" type="int" enum="VisualServer.ViewportMSAA"> + </argument> + <description> + </description> + </method> + <method name="viewport_set_parent_viewport"> + <return type="void"> + </return> + <argument index="0" name="viewport" type="RID"> + </argument> + <argument index="1" name="parent_viewport" type="RID"> + </argument> + <description> + </description> + </method> + <method name="viewport_set_scenario"> + <return type="void"> + </return> + <argument index="0" name="viewport" type="RID"> + </argument> + <argument index="1" name="scenario" type="RID"> + </argument> + <description> + </description> + </method> + <method name="viewport_set_shadow_atlas_quadrant_subdivision"> + <return type="void"> + </return> + <argument index="0" name="viewport" type="RID"> + </argument> + <argument index="1" name="quadrant" type="int"> + </argument> + <argument index="2" name="subdivision" type="int"> + </argument> + <description> + </description> + </method> + <method name="viewport_set_shadow_atlas_size"> + <return type="void"> + </return> + <argument index="0" name="viewport" type="RID"> + </argument> + <argument index="1" name="size" type="int"> + </argument> + <description> + </description> + </method> + <method name="viewport_set_size"> + <return type="void"> + </return> + <argument index="0" name="viewport" type="RID"> + </argument> + <argument index="1" name="width" type="int"> + </argument> + <argument index="2" name="height" type="int"> + </argument> + <description> + </description> + </method> + <method name="viewport_set_transparent_background"> + <return type="void"> + </return> + <argument index="0" name="viewport" type="RID"> + </argument> + <argument index="1" name="enabled" type="bool"> + </argument> + <description> + </description> + </method> + <method name="viewport_set_update_mode"> + <return type="void"> + </return> + <argument index="0" name="viewport" type="RID"> + </argument> + <argument index="1" name="update_mode" type="int" enum="VisualServer.ViewportUpdateMode"> + </argument> + <description> + </description> + </method> + <method name="viewport_set_usage"> + <return type="void"> + </return> + <argument index="0" name="viewport" type="RID"> + </argument> + <argument index="1" name="usage" type="int" enum="VisualServer.ViewportUsage"> + </argument> + <description> + </description> + </method> + <method name="viewport_set_use_arvr"> + <return type="void"> + </return> + <argument index="0" name="viewport" type="RID"> + </argument> + <argument index="1" name="use_arvr" type="bool"> + </argument> + <description> + </description> + </method> + <method name="viewport_set_vflip"> + <return type="void"> + </return> + <argument index="0" name="viewport" type="RID"> + </argument> + <argument index="1" name="enabled" type="bool"> + </argument> + <description> + </description> + </method> </methods> <constants> + <constant name="NO_INDEX_ARRAY" value="-1" enum=""> + </constant> + <constant name="ARRAY_WEIGHTS_SIZE" value="4" enum=""> + </constant> + <constant name="CANVAS_ITEM_Z_MIN" value="-4096" enum=""> + </constant> + <constant name="CANVAS_ITEM_Z_MAX" value="4096" enum=""> + </constant> + <constant name="MAX_GLOW_LEVELS" value="7" enum=""> + </constant> + <constant name="MAX_CURSORS" value="8" enum=""> + </constant> + <constant name="MATERIAL_RENDER_PRIORITY_MIN" value="-128" enum=""> + </constant> + <constant name="MATERIAL_RENDER_PRIORITY_MAX" value="127" enum=""> + </constant> + <constant name="CUBEMAP_LEFT" value="0"> + </constant> + <constant name="CUBEMAP_RIGHT" value="1"> + </constant> + <constant name="CUBEMAP_BOTTOM" value="2"> + </constant> + <constant name="CUBEMAP_TOP" value="3"> + </constant> + <constant name="CUBEMAP_FRONT" value="4"> + </constant> + <constant name="CUBEMAP_BACK" value="5"> + </constant> + <constant name="TEXTURE_FLAG_MIPMAPS" value="1"> + </constant> + <constant name="TEXTURE_FLAG_REPEAT" value="2"> + </constant> + <constant name="TEXTURE_FLAG_FILTER" value="4"> + </constant> + <constant name="TEXTURE_FLAG_ANISOTROPIC_FILTER" value="8"> + </constant> + <constant name="TEXTURE_FLAG_CONVERT_TO_LINEAR" value="16"> + </constant> + <constant name="TEXTURE_FLAG_MIRRORED_REPEAT" value="32"> + </constant> + <constant name="TEXTURE_FLAG_CUBEMAP" value="2048"> + </constant> + <constant name="TEXTURE_FLAG_USED_FOR_STREAMING" value="4096"> + </constant> + <constant name="TEXTURE_FLAGS_DEFAULT" value="7"> + </constant> + <constant name="SHADER_SPATIAL" value="0"> + </constant> + <constant name="SHADER_CANVAS_ITEM" value="1"> + </constant> + <constant name="SHADER_PARTICLES" value="2"> + </constant> + <constant name="SHADER_MAX" value="3"> + </constant> + <constant name="ARRAY_VERTEX" value="0"> + </constant> + <constant name="ARRAY_NORMAL" value="1"> + </constant> + <constant name="ARRAY_TANGENT" value="2"> + </constant> + <constant name="ARRAY_COLOR" value="3"> + </constant> + <constant name="ARRAY_TEX_UV" value="4"> + </constant> + <constant name="ARRAY_TEX_UV2" value="5"> + </constant> + <constant name="ARRAY_BONES" value="6"> + </constant> + <constant name="ARRAY_WEIGHTS" value="7"> + </constant> + <constant name="ARRAY_INDEX" value="8"> + </constant> + <constant name="ARRAY_MAX" value="9"> + </constant> + <constant name="ARRAY_FORMAT_VERTEX" value="1"> + </constant> + <constant name="ARRAY_FORMAT_NORMAL" value="2"> + </constant> + <constant name="ARRAY_FORMAT_TANGENT" value="4"> + </constant> + <constant name="ARRAY_FORMAT_COLOR" value="8"> + </constant> + <constant name="ARRAY_FORMAT_TEX_UV" value="16"> + </constant> + <constant name="ARRAY_FORMAT_TEX_UV2" value="32"> + </constant> + <constant name="ARRAY_FORMAT_BONES" value="64"> + </constant> + <constant name="ARRAY_FORMAT_WEIGHTS" value="128"> + </constant> + <constant name="ARRAY_FORMAT_INDEX" value="256"> + </constant> + <constant name="ARRAY_COMPRESS_BASE" value="9"> + </constant> + <constant name="ARRAY_COMPRESS_VERTEX" value="512"> + </constant> + <constant name="ARRAY_COMPRESS_NORMAL" value="1024"> + </constant> + <constant name="ARRAY_COMPRESS_TANGENT" value="2048"> + </constant> + <constant name="ARRAY_COMPRESS_COLOR" value="4096"> + </constant> + <constant name="ARRAY_COMPRESS_TEX_UV" value="8192"> + </constant> + <constant name="ARRAY_COMPRESS_TEX_UV2" value="16384"> + </constant> + <constant name="ARRAY_COMPRESS_BONES" value="32768"> + </constant> + <constant name="ARRAY_COMPRESS_WEIGHTS" value="65536"> + </constant> + <constant name="ARRAY_COMPRESS_INDEX" value="131072"> + </constant> + <constant name="ARRAY_FLAG_USE_2D_VERTICES" value="262144"> + </constant> + <constant name="ARRAY_FLAG_USE_16_BIT_BONES" value="524288"> + </constant> + <constant name="ARRAY_COMPRESS_DEFAULT" value="97792"> + </constant> + <constant name="PRIMITIVE_POINTS" value="0"> + </constant> + <constant name="PRIMITIVE_LINES" value="1"> + </constant> + <constant name="PRIMITIVE_LINE_STRIP" value="2"> + </constant> + <constant name="PRIMITIVE_LINE_LOOP" value="3"> + </constant> + <constant name="PRIMITIVE_TRIANGLES" value="4"> + </constant> + <constant name="PRIMITIVE_TRIANGLE_STRIP" value="5"> + </constant> + <constant name="PRIMITIVE_TRIANGLE_FAN" value="6"> + </constant> + <constant name="PRIMITIVE_MAX" value="7"> + </constant> + <constant name="BLEND_SHAPE_MODE_NORMALIZED" value="0"> + </constant> + <constant name="BLEND_SHAPE_MODE_RELATIVE" value="1"> + </constant> + <constant name="LIGHT_DIRECTIONAL" value="0"> + </constant> + <constant name="LIGHT_OMNI" value="1"> + </constant> + <constant name="LIGHT_SPOT" value="2"> + </constant> + <constant name="LIGHT_PARAM_ENERGY" value="0"> + </constant> + <constant name="LIGHT_PARAM_SPECULAR" value="1"> + </constant> + <constant name="LIGHT_PARAM_RANGE" value="2"> + </constant> + <constant name="LIGHT_PARAM_ATTENUATION" value="3"> + </constant> + <constant name="LIGHT_PARAM_SPOT_ANGLE" value="4"> + </constant> + <constant name="LIGHT_PARAM_SPOT_ATTENUATION" value="5"> + </constant> + <constant name="LIGHT_PARAM_CONTACT_SHADOW_SIZE" value="6"> + </constant> + <constant name="LIGHT_PARAM_SHADOW_MAX_DISTANCE" value="7"> + </constant> + <constant name="LIGHT_PARAM_SHADOW_SPLIT_1_OFFSET" value="8"> + </constant> + <constant name="LIGHT_PARAM_SHADOW_SPLIT_2_OFFSET" value="9"> + </constant> + <constant name="LIGHT_PARAM_SHADOW_SPLIT_3_OFFSET" value="10"> + </constant> + <constant name="LIGHT_PARAM_SHADOW_NORMAL_BIAS" value="11"> + </constant> + <constant name="LIGHT_PARAM_SHADOW_BIAS" value="12"> + </constant> + <constant name="LIGHT_PARAM_SHADOW_BIAS_SPLIT_SCALE" value="13"> + </constant> + <constant name="LIGHT_PARAM_MAX" value="14"> + </constant> + <constant name="VIEWPORT_UPDATE_DISABLED" value="0"> + </constant> + <constant name="VIEWPORT_UPDATE_ONCE" value="1"> + </constant> + <constant name="VIEWPORT_UPDATE_WHEN_VISIBLE" value="2"> + </constant> + <constant name="VIEWPORT_UPDATE_ALWAYS" value="3"> + </constant> + <constant name="VIEWPORT_CLEAR_ALWAYS" value="0"> + </constant> + <constant name="VIEWPORT_CLEAR_NEVER" value="1"> + </constant> + <constant name="VIEWPORT_CLEAR_ONLY_NEXT_FRAME" value="2"> + </constant> + <constant name="VIEWPORT_MSAA_DISABLED" value="0"> + </constant> + <constant name="VIEWPORT_MSAA_2X" value="1"> + </constant> + <constant name="VIEWPORT_MSAA_4X" value="2"> + </constant> + <constant name="VIEWPORT_MSAA_8X" value="3"> + </constant> + <constant name="VIEWPORT_MSAA_16X" value="4"> + </constant> + <constant name="VIEWPORT_USAGE_2D" value="0"> + </constant> + <constant name="VIEWPORT_USAGE_2D_NO_SAMPLING" value="1"> + </constant> + <constant name="VIEWPORT_USAGE_3D" value="2"> + </constant> + <constant name="VIEWPORT_USAGE_3D_NO_EFFECTS" value="3"> + </constant> + <constant name="VIEWPORT_RENDER_INFO_OBJECTS_IN_FRAME" value="0"> + </constant> + <constant name="VIEWPORT_RENDER_INFO_VERTICES_IN_FRAME" value="1"> + </constant> + <constant name="VIEWPORT_RENDER_INFO_MATERIAL_CHANGES_IN_FRAME" value="2"> + </constant> + <constant name="VIEWPORT_RENDER_INFO_SHADER_CHANGES_IN_FRAME" value="3"> + </constant> + <constant name="VIEWPORT_RENDER_INFO_SURFACE_CHANGES_IN_FRAME" value="4"> + </constant> + <constant name="VIEWPORT_RENDER_INFO_DRAW_CALLS_IN_FRAME" value="5"> + </constant> + <constant name="VIEWPORT_RENDER_INFO_MAX" value="6"> + </constant> + <constant name="VIEWPORT_DEBUG_DRAW_DISABLED" value="0"> + </constant> + <constant name="VIEWPORT_DEBUG_DRAW_UNSHADED" value="1"> + </constant> + <constant name="VIEWPORT_DEBUG_DRAW_OVERDRAW" value="2"> + </constant> + <constant name="VIEWPORT_DEBUG_DRAW_WIREFRAME" value="3"> + </constant> + <constant name="SCENARIO_DEBUG_DISABLED" value="0"> + </constant> + <constant name="SCENARIO_DEBUG_WIREFRAME" value="1"> + </constant> + <constant name="SCENARIO_DEBUG_OVERDRAW" value="2"> + </constant> + <constant name="SCENARIO_DEBUG_SHADELESS" value="3"> + </constant> + <constant name="INSTANCE_NONE" value="0"> + </constant> + <constant name="INSTANCE_MESH" value="1"> + </constant> + <constant name="INSTANCE_MULTIMESH" value="2"> + </constant> + <constant name="INSTANCE_IMMEDIATE" value="3"> + </constant> + <constant name="INSTANCE_PARTICLES" value="4"> + </constant> + <constant name="INSTANCE_LIGHT" value="5"> + </constant> + <constant name="INSTANCE_REFLECTION_PROBE" value="6"> + </constant> + <constant name="INSTANCE_GI_PROBE" value="7"> + </constant> + <constant name="INSTANCE_MAX" value="8"> + </constant> + <constant name="INSTANCE_GEOMETRY_MASK" value="30"> + </constant> + <constant name="NINE_PATCH_STRETCH" value="0"> + </constant> + <constant name="NINE_PATCH_TILE" value="1"> + </constant> + <constant name="NINE_PATCH_TILE_FIT" value="2"> + </constant> + <constant name="CANVAS_LIGHT_MODE_ADD" value="0"> + </constant> + <constant name="CANVAS_LIGHT_MODE_SUB" value="1"> + </constant> + <constant name="CANVAS_LIGHT_MODE_MIX" value="2"> + </constant> + <constant name="CANVAS_LIGHT_MODE_MASK" value="3"> + </constant> + <constant name="CANVAS_LIGHT_FILTER_NONE" value="0"> + </constant> + <constant name="CANVAS_LIGHT_FILTER_PCF3" value="1"> + </constant> + <constant name="CANVAS_LIGHT_FILTER_PCF5" value="2"> + </constant> + <constant name="CANVAS_LIGHT_FILTER_PCF7" value="3"> + </constant> + <constant name="CANVAS_LIGHT_FILTER_PCF9" value="4"> + </constant> + <constant name="CANVAS_LIGHT_FILTER_PCF13" value="5"> + </constant> + <constant name="CANVAS_OCCLUDER_POLYGON_CULL_DISABLED" value="0"> + </constant> + <constant name="CANVAS_OCCLUDER_POLYGON_CULL_CLOCKWISE" value="1"> + </constant> + <constant name="CANVAS_OCCLUDER_POLYGON_CULL_COUNTER_CLOCKWISE" value="2"> + </constant> + <constant name="INFO_OBJECTS_IN_FRAME" value="0"> + </constant> + <constant name="INFO_VERTICES_IN_FRAME" value="1"> + </constant> + <constant name="INFO_MATERIAL_CHANGES_IN_FRAME" value="2"> + </constant> + <constant name="INFO_SHADER_CHANGES_IN_FRAME" value="3"> + </constant> + <constant name="INFO_SURFACE_CHANGES_IN_FRAME" value="4"> + </constant> + <constant name="INFO_DRAW_CALLS_IN_FRAME" value="5"> + </constant> + <constant name="INFO_USAGE_VIDEO_MEM_TOTAL" value="6"> + </constant> + <constant name="INFO_VIDEO_MEM_USED" value="7"> + </constant> + <constant name="INFO_TEXTURE_MEM_USED" value="8"> + </constant> + <constant name="INFO_VERTEX_MEM_USED" value="9"> + </constant> + <constant name="FEATURE_SHADERS" value="0"> + </constant> + <constant name="FEATURE_MULTITHREADED" value="1"> + </constant> </constants> </class> diff --git a/doc/classes/WeakRef.xml b/doc/classes/WeakRef.xml index 1071a40c3b..23629881d3 100644 --- a/doc/classes/WeakRef.xml +++ b/doc/classes/WeakRef.xml @@ -4,7 +4,7 @@ Holds an [Object], but does not contribute to the reference count if the object is a reference. </brief_description> <description> - A weakref can hold a [Reference], without contributing to the reference counter. A weakref can be created from an [Object] using [method @GDScript.weakref]. If this object is not a reference, weakref still works, however, it does not have any effect on the object. Weakrefs are useful in cases where multiple classes have variables that refer to eachother. Without weakrefs, using these classes could lead to memory leaks, since both references keep eachother from being released. Making part of the variables a weakref can prevent this cyclic dependency, and allows the references to be released. + A weakref can hold a [Reference], without contributing to the reference counter. A weakref can be created from an [Object] using [method @GDScript.weakref]. If this object is not a reference, weakref still works, however, it does not have any effect on the object. Weakrefs are useful in cases where multiple classes have variables that refer to each other. Without weakrefs, using these classes could lead to memory leaks, since both references keep each other from being released. Making part of the variables a weakref can prevent this cyclic dependency, and allows the references to be released. </description> <tutorials> </tutorials> diff --git a/doc/classes/XMLParser.xml b/doc/classes/XMLParser.xml index 6ab84ef345..bb9599e273 100644 --- a/doc/classes/XMLParser.xml +++ b/doc/classes/XMLParser.xml @@ -133,7 +133,7 @@ <method name="seek"> <return type="int" enum="Error"> </return> - <argument index="0" name="pos" type="int"> + <argument index="0" name="position" type="int"> </argument> <description> Move the buffer cursor to a certain offset (since the beginning) and read the next node there. This returns an error code. diff --git a/doc/tools/doc_status.py b/doc/tools/doc_status.py index 6b6b794f11..170ded9f50 100644 --- a/doc/tools/doc_status.py +++ b/doc/tools/doc_status.py @@ -1,5 +1,6 @@ -#!/usr/bin/env python3 +#!/usr/bin/env python +import fnmatch import os import sys import re @@ -22,6 +23,7 @@ flags = { 'o': True, 'i': False, 'a': True, + 'e': False, } flag_descriptions = { 'c': 'Toggle colors when outputting.', @@ -34,6 +36,7 @@ flag_descriptions = { 'o': 'Toggle overall column.', 'i': 'Toggle collapse of class items columns.', 'a': 'Toggle showing all items.', + 'e': 'Toggle hiding empty items.', } long_flags = { 'colors': 'c', @@ -63,6 +66,8 @@ long_flags = { 'collapse': 'i', 'all': 'a', + + 'empty': 'e', } table_columns = ['name', 'brief_description', 'description', 'methods', 'constants', 'members', 'signals'] table_column_names = ['Name', 'Brief Desc.', 'Desc.', 'Methods', 'Constants', 'Members', 'Signals'] @@ -91,7 +96,7 @@ def validate_tag(elem, tag): def color(color, string): - if flags['c']: + if flags['c'] and terminal_supports_color(): color_format = '' for code in colors[color]: color_format += '\033[' + str(code) + 'm' @@ -105,6 +110,15 @@ ansi_escape = re.compile(r'\x1b[^m]*m') def nonescape_len(s): return len(ansi_escape.sub('', s)) +def terminal_supports_color(): + p = sys.platform + supported_platform = p != 'Pocket PC' and (p != 'win32' or + 'ANSICON' in os.environ) + + is_a_tty = hasattr(sys.stdout, 'isatty') and sys.stdout.isatty() + if not supported_platform or not is_a_tty: + return False + return True ################################################################################ # Classes # @@ -134,8 +148,8 @@ class ClassStatusProgress: return self.to_colored_string() def to_colored_string(self, format='{has}/{total}', pad_format='{pad_described}{s}{pad_total}'): - ratio = self.described / self.total if self.total != 0 else 1 - percent = round(100 * ratio) + ratio = float(self.described) / float(self.total) if self.total != 0 else 1 + percent = int(round(100 * ratio)) s = format.format(has=str(self.described), total=str(self.total), percent=str(percent)) if self.described >= self.total: s = color('part_good', s) @@ -182,6 +196,14 @@ class ClassStatus: ok = ok and self.progresses[k].is_ok() return ok + def is_empty(self): + sum = 0 + for k in self.progresses: + if self.progresses[k].is_ok(): + continue + sum += self.progresses[k].total + return sum < 1 + def make_output(self): output = {} output['name'] = color('name', self.name) @@ -218,6 +240,7 @@ class ClassStatus: return output + @staticmethod def generate_for_class(c): status = ClassStatus() status.name = c.attrib['name'] @@ -227,15 +250,16 @@ class ClassStatus: for tag in list(c): if tag.tag in ['methods']: for sub_tag in list(tag): - methods.append(sub_tag.find('name')) + methods.append(sub_tag.attrib['name']) if tag.tag in ['members']: for sub_tag in list(tag): try: - methods.remove(sub_tag.find('setter')) - methods.remove(sub_tag.find('getter')) + if(sub_tag.attrib['setter'].startswith('_') == False): + methods.remove(sub_tag.attrib['setter']) + if(sub_tag.attrib['getter'].startswith('_') == False): + methods.remove(sub_tag.attrib['getter']) except: pass - for tag in list(c): if tag.tag == 'brief_description': @@ -246,7 +270,7 @@ class ClassStatus: elif tag.tag in ['methods', 'signals']: for sub_tag in list(tag): - if sub_tag.find('name') in methods or tag.tag == 'signals': + if sub_tag.attrib['name'] in methods or tag.tag == 'signals': descr = sub_tag.find('description') status.progresses[tag.tag].increment(len(descr.text.strip()) > 0) elif tag.tag in ['constants', 'members']: @@ -274,17 +298,21 @@ input_class_list = [] merged_file = "" for arg in sys.argv[1:]: - if arg.startswith('--'): - flags[long_flags[arg[2:]]] = not flags[long_flags[arg[2:]]] - elif arg.startswith('-'): - for f in arg[1:]: - flags[f] = not flags[f] - elif os.path.isdir(arg): - for f in os.listdir(arg): - if f.endswith('.xml'): - input_file_list.append(os.path.join(arg, f)); - else: - input_class_list.append(arg) + try: + if arg.startswith('--'): + flags[long_flags[arg[2:]]] = not flags[long_flags[arg[2:]]] + elif arg.startswith('-'): + for f in arg[1:]: + flags[f] = not flags[f] + elif os.path.isdir(arg): + for f in os.listdir(arg): + if f.endswith('.xml'): + input_file_list.append(os.path.join(arg, f)); + else: + input_class_list.append(arg) + except KeyError: + print("Unknown command line flag: " + arg) + sys.exit(1) if flags['i']: for r in ['methods', 'constants', 'members', 'signals']: @@ -356,8 +384,13 @@ for file in input_file_list: class_names.sort() if len(input_class_list) < 1: - input_class_list = class_names + input_class_list = ['*'] +filtered_classes = set() +for pattern in input_class_list: + filtered_classes |= set(fnmatch.filter(class_names, pattern)) +filtered_classes = list(filtered_classes) +filtered_classes.sort() ################################################################################ # Make output table # @@ -369,10 +402,7 @@ table_column_chars = '|' total_status = ClassStatus('Total') -for cn in input_class_list: - if not cn in classes: - print('Cannot find class ' + cn + '!') - sys.exit(255) +for cn in filtered_classes: c = classes[cn] validate_tag(c, 'class') @@ -383,6 +413,9 @@ for cn in input_class_list: if (flags['b'] and status.is_ok()) or (flags['g'] and not status.is_ok()) or (not flags['a']): continue + if flags['e'] and status.is_empty(): + continue + out = status.make_output() row = [] for column in table_columns: @@ -436,7 +469,7 @@ for row_i, row in enumerate(table): if cell_i == 0: row_string += table_row_chars[3] + cell + table_row_chars[3] * (padding_needed - 1) else: - row_string += table_row_chars[3] * math.floor(padding_needed / 2) + cell + table_row_chars[3] * math.ceil((padding_needed / 2)) + row_string += table_row_chars[3] * int(math.floor(float(padding_needed) / 2)) + cell + table_row_chars[3] * int(math.ceil(float(padding_needed) / 2)) row_string += table_column_chars print(row_string) diff --git a/doc/tools/makerst.py b/doc/tools/makerst.py index 696e3c9c78..dc015d781b 100644 --- a/doc/tools/makerst.py +++ b/doc/tools/makerst.py @@ -3,21 +3,25 @@ import codecs import sys +import os import xml.etree.ElementTree as ET input_list = [] for arg in sys.argv[1:]: + if arg.endswith(os.sep): + arg = arg[:-1] input_list.append(arg) if len(input_list) < 1: - print 'usage: makerst.py <classes.xml>' + print('usage: makerst.py <path to folders> and/or <path to .xml files> (order of arguments irrelevant)') + print('example: makerst.py "../../modules/" "../classes" path_to/some_class.xml') sys.exit(0) def validate_tag(elem, tag): if elem.tag != tag: - print "Tag mismatch, expected '" + tag + "', got " + elem.tag + print("Tag mismatch, expected '" + tag + "', got " + elem.tag) sys.exit(255) @@ -34,11 +38,10 @@ def ul_string(str, ul): def make_class_list(class_list, columns): - f = codecs.open('class_list.rst', 'wb', 'utf-8') prev = 0 col_max = len(class_list) / columns + 1 - print ('col max is ', col_max) + print(('col max is ', col_max)) col_count = 0 row_count = 0 last_initial = '' @@ -102,7 +105,6 @@ def make_class_list(class_list, columns): def rstize_text(text, cclass): - # Linebreak + tabs in the XML should become two line breaks unless in a "codeblock" pos = 0 while True: @@ -187,8 +189,11 @@ def rstize_text(text, cclass): post_text = text[endq_pos + 1:] tag_text = text[pos + 1:endq_pos] + escape_post = False + if tag_text in class_names: tag_text = make_type(tag_text) + escape_post = True else: # command cmd = tag_text space_pos = tag_text.find(' ') @@ -207,7 +212,7 @@ def rstize_text(text, cclass): cmd = tag_text[:space_pos] param = tag_text[space_pos + 1:] tag_text = param - elif cmd.find('method') == 0: + elif cmd.find('method') == 0 or cmd.find('member') == 0 or cmd.find('signal') == 0: cmd = tag_text[:space_pos] param = tag_text[space_pos + 1:] @@ -216,12 +221,14 @@ def rstize_text(text, cclass): tag_text = ':ref:`' + class_param + '.' + method_param + '<class_' + class_param + '_' + method_param + '>`' else: tag_text = ':ref:`' + param + '<class_' + cclass + "_" + param + '>`' + escape_post = True elif cmd.find('image=') == 0: tag_text = "" # '' elif cmd.find('url=') == 0: tag_text = ':ref:`' + cmd[4:] + '<' + cmd[4:] + ">`" elif cmd == '/url': - tag_text = ')' + tag_text = '' + escape_post = True elif cmd == 'center': tag_text = '' elif cmd == '/center': @@ -246,13 +253,15 @@ def rstize_text(text, cclass): inside_code = True else: tag_text = make_type(tag_text) + escape_post = True + + # Properly escape things like `[Node]s` + if escape_post and post_text and post_text[0].isalnum(): # not punctuation, escape + post_text = '\ ' + post_text text = pre_text + tag_text + post_text pos = len(pre_text) + len(tag_text) - # tnode = ET.SubElement(parent,"div") - # tnode.text=text - return text @@ -272,7 +281,6 @@ def make_method( event=False, pp=None ): - if (declare or pp == None): t = '- ' else: @@ -302,16 +310,11 @@ def make_method( if declare or pp == None: - # span.attrib["class"]="funcdecl" - # a=ET.SubElement(span,"a") - # a.attrib["name"]=name+"_"+m.attrib["name"] - # a.text=name+"::"+m.attrib["name"] - - s = ' **' + m.attrib['name'] + '** ' + s = '**' + m.attrib['name'] + '** ' else: s = ':ref:`' + m.attrib['name'] + '<class_' + cname + "_" + m.attrib['name'] + '>` ' - s += ' **(**' + s += '**(**' argfound = False for a in mdata['argidx']: arg = mdata[a] @@ -331,16 +334,11 @@ def make_method( if 'default' in arg.attrib: s += '=' + arg.attrib['default'] - argfound = True - - if argfound: - s += ' ' s += ' **)**' if 'qualifiers' in m.attrib: s += ' ' + m.attrib['qualifiers'] -# f.write(s) if (not declare): if (pp != None): pp.append((t, s)) @@ -355,24 +353,23 @@ def make_heading(title, underline): def make_rst_class(node): - name = node.attrib['name'] f = codecs.open("class_" + name.lower() + '.rst', 'wb', 'utf-8') # Warn contributors not to edit this file directly f.write(".. Generated automatically by doc/tools/makerst.py in Godot's source tree.\n") - f.write(".. DO NOT EDIT THIS FILE, but the doc/base/classes.xml source instead.\n\n") + f.write(".. DO NOT EDIT THIS FILE, but the " + name + ".xml source instead.\n") + f.write(".. The source is found in doc/classes or modules/<name>/doc_classes.\n\n") f.write(".. _class_" + name + ":\n\n") f.write(make_heading(name, '=')) if 'inherits' in node.attrib: inh = node.attrib['inherits'].strip() -# whle inh in classes[cn] f.write('**Inherits:** ') first = True - while(inh in classes): + while (inh in classes): if (not first): f.write(" **<** ") else: @@ -436,10 +433,10 @@ def make_rst_class(node): f.write(sep) for s in ml: rt = s[0] - while(len(rt) < longest_s): + while (len(rt) < longest_s): rt += " " st = s[1] - while(len(st) < longest_t): + while (len(st) < longest_t): st += " " f.write("| " + rt + " | " + st + " |\n") f.write(sep) @@ -449,7 +446,9 @@ def make_rst_class(node): if events != None and len(list(events)) > 0: f.write(make_heading('Signals', '-')) for m in list(events): + f.write(".. _class_" + name + "_" + m.attrib['name'] + ":\n\n") make_method(f, node.attrib['name'], m, True, name, True) + f.write('\n') d = m.find('description') if d == None or d.text.strip() == '': continue @@ -463,12 +462,14 @@ def make_rst_class(node): f.write(make_heading('Member Variables', '-')) for c in list(members): + # Leading two spaces necessary to prevent breaking the <ul> + f.write(" .. _class_" + name + "_" + c.attrib['name'] + ":\n\n") s = '- ' s += make_type(c.attrib['type']) + ' ' s += '**' + c.attrib['name'] + '**' if c.text.strip() != '': - s += ' - ' + c.text.strip() - f.write(s + '\n') + s += ' - ' + rstize_text(c.text.strip(), name) + f.write(s + '\n\n') f.write('\n') constants = node.find('constants') @@ -494,8 +495,6 @@ def make_rst_class(node): f.write(make_heading('Member Function Description', '-')) for m in list(methods): f.write(".. _class_" + name + "_" + m.attrib['name'] + ":\n\n") -# f.write(ul_string(m.attrib['name'],"^")) - #f.write('\n<a name="'+m.attrib['name']+'">' + m.attrib['name'] + '</a>\n------\n') make_method(f, node.attrib['name'], m, True, name) f.write('\n') d = m.find('description') @@ -506,26 +505,38 @@ def make_rst_class(node): f.write('\n') -for file in input_list: +file_list = [] + +for path in input_list: + if os.path.basename(path) == 'modules': + for subdir, dirs, _ in os.walk(path): + if 'doc_classes' in dirs: + doc_dir = os.path.join(subdir, 'doc_classes') + class_file_names = [f for f in os.listdir(doc_dir) if f.endswith('.xml')] + file_list += [os.path.join(doc_dir, f) for f in class_file_names] + elif not os.path.isfile(path): + file_list += [os.path.join(path, f) for f in os.listdir(path) if f.endswith('.xml')] + elif os.path.isfile(path) and path.endswith('.xml'): + file_list.append(path) + +for file in file_list: tree = ET.parse(file) doc = tree.getroot() if 'version' not in doc.attrib: - print "Version missing from 'doc'" + print("Version missing from 'doc'") sys.exit(255) version = doc.attrib['version'] - - for c in list(doc): - if c.attrib['name'] in class_names: - continue - class_names.append(c.attrib['name']) - classes[c.attrib['name']] = c + if doc.attrib['name'] in class_names: + continue + class_names.append(doc.attrib['name']) + classes[doc.attrib['name']] = doc class_names.sort() # Don't make class list for Sphinx, :toctree: handles it -#make_class_list(class_names, 2) +# make_class_list(class_names, 2) for cn in class_names: c = classes[cn] diff --git a/drivers/SCsub b/drivers/SCsub index b8bba91378..34d6254578 100644 --- a/drivers/SCsub +++ b/drivers/SCsub @@ -4,7 +4,7 @@ Import('env') env.drivers_sources = [] -if ("builtin_zlib" in env and env["builtin_zlib"] == "yes"): +if 'builtin_zlib' in env and env['builtin_zlib']: SConscript("zlib/SCsub") # OS drivers @@ -13,11 +13,12 @@ SConscript('windows/SCsub') # Sounds drivers SConscript('alsa/SCsub') +SConscript('coreaudio/SCsub') SConscript('pulseaudio/SCsub') if (env["platform"] == "windows"): SConscript("rtaudio/SCsub") SConscript("wasapi/SCsub") -if (env["xaudio2"] == "yes"): +if env['xaudio2']: SConscript("xaudio2/SCsub") # Graphics drivers @@ -29,10 +30,10 @@ SConscript("png/SCsub") # Tools override # FIXME: Should likely be integrated in the tools/ codebase -if (env["tools"] == "yes"): +if env['tools']: SConscript("convex_decomp/SCsub") -if env['vsproj'] == "yes": +if env['vsproj']: env.AddToVSProject(env.drivers_sources) if env.split_drivers: diff --git a/drivers/coreaudio/SCsub b/drivers/coreaudio/SCsub new file mode 100644 index 0000000000..233593b0f9 --- /dev/null +++ b/drivers/coreaudio/SCsub @@ -0,0 +1,8 @@ +#!/usr/bin/env python + +Import('env') + +# Driver source files +env.add_source_files(env.drivers_sources, "*.cpp") + +Export('env') diff --git a/platform/osx/audio_driver_osx.cpp b/drivers/coreaudio/audio_driver_coreaudio.cpp index 3b3ba60507..c531d6af9d 100644 --- a/platform/osx/audio_driver_osx.cpp +++ b/drivers/coreaudio/audio_driver_coreaudio.cpp @@ -1,5 +1,5 @@ /*************************************************************************/ -/* audio_driver_osx.cpp */ +/* audio_driver_coreaudio.cpp */ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ @@ -27,27 +27,33 @@ /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ -#ifdef OSX_ENABLED +#ifdef COREAUDIO_ENABLED -#include "audio_driver_osx.h" +#include "audio_driver_coreaudio.h" #include "core/project_settings.h" #include "os/os.h" #define kOutputBus 0 +#ifdef OSX_ENABLED static OSStatus outputDeviceAddressCB(AudioObjectID inObjectID, UInt32 inNumberAddresses, const AudioObjectPropertyAddress *inAddresses, void *__nullable inClientData) { - AudioDriverOSX *driver = (AudioDriverOSX *)inClientData; + AudioDriverCoreAudio *driver = (AudioDriverCoreAudio *)inClientData; driver->reopen(); return noErr; } +#endif -Error AudioDriverOSX::initDevice() { +Error AudioDriverCoreAudio::initDevice() { AudioComponentDescription desc; zeromem(&desc, sizeof(desc)); desc.componentType = kAudioUnitType_Output; +#ifdef OSX_ENABLED desc.componentSubType = kAudioUnitSubType_HALOutput; +#else + desc.componentSubType = kAudioUnitSubType_RemoteIO; +#endif desc.componentManufacturer = kAudioUnitManufacturer_Apple; AudioComponent comp = AudioComponentFindNext(NULL, &desc); @@ -96,8 +102,10 @@ Error AudioDriverOSX::initDevice() { // Sample rate is independent of channels (ref: https://stackoverflow.com/questions/11048825/audio-sample-frequency-rely-on-channels) buffer_frames = closest_power_of_2(latency * mix_rate / 1000); +#ifdef OSX_ENABLED result = AudioUnitSetProperty(audio_unit, kAudioDevicePropertyBufferFrameSize, kAudioUnitScope_Global, kOutputBus, &buffer_frames, sizeof(UInt32)); ERR_FAIL_COND_V(result != noErr, FAILED); +#endif buffer_size = buffer_frames * channels; samples_in.resize(buffer_size); @@ -109,7 +117,7 @@ Error AudioDriverOSX::initDevice() { AURenderCallbackStruct callback; zeromem(&callback, sizeof(AURenderCallbackStruct)); - callback.inputProc = &AudioDriverOSX::output_callback; + callback.inputProc = &AudioDriverCoreAudio::output_callback; callback.inputProcRefCon = this; result = AudioUnitSetProperty(audio_unit, kAudioUnitProperty_SetRenderCallback, kAudioUnitScope_Input, kOutputBus, &callback, sizeof(callback)); ERR_FAIL_COND_V(result != noErr, FAILED); @@ -120,7 +128,7 @@ Error AudioDriverOSX::initDevice() { return OK; } -Error AudioDriverOSX::finishDevice() { +Error AudioDriverCoreAudio::finishDevice() { OSStatus result; if (active) { @@ -136,24 +144,26 @@ Error AudioDriverOSX::finishDevice() { return OK; } -Error AudioDriverOSX::init() { +Error AudioDriverCoreAudio::init() { OSStatus result; mutex = Mutex::create(); active = false; channels = 2; +#ifdef OSX_ENABLED outputDeviceAddress.mSelector = kAudioHardwarePropertyDefaultOutputDevice; outputDeviceAddress.mScope = kAudioObjectPropertyScopeGlobal; outputDeviceAddress.mElement = kAudioObjectPropertyElementMaster; result = AudioObjectAddPropertyListener(kAudioObjectSystemObject, &outputDeviceAddress, &outputDeviceAddressCB, this); ERR_FAIL_COND_V(result != noErr, FAILED); +#endif return initDevice(); }; -Error AudioDriverOSX::reopen() { +Error AudioDriverCoreAudio::reopen() { bool restart = false; lock(); @@ -185,13 +195,13 @@ Error AudioDriverOSX::reopen() { return OK; } -OSStatus AudioDriverOSX::output_callback(void *inRefCon, +OSStatus AudioDriverCoreAudio::output_callback(void *inRefCon, AudioUnitRenderActionFlags *ioActionFlags, const AudioTimeStamp *inTimeStamp, UInt32 inBusNumber, UInt32 inNumberFrames, AudioBufferList *ioData) { - AudioDriverOSX *ad = (AudioDriverOSX *)inRefCon; + AudioDriverCoreAudio *ad = (AudioDriverCoreAudio *)inRefCon; if (!ad->active || !ad->try_lock()) { for (unsigned int i = 0; i < ioData->mNumberBuffers; i++) { @@ -227,7 +237,7 @@ OSStatus AudioDriverOSX::output_callback(void *inRefCon, return 0; }; -void AudioDriverOSX::start() { +void AudioDriverCoreAudio::start() { if (!active) { OSStatus result = AudioOutputUnitStart(audio_unit); if (result != noErr) { @@ -238,37 +248,41 @@ void AudioDriverOSX::start() { } }; -int AudioDriverOSX::get_mix_rate() const { +int AudioDriverCoreAudio::get_mix_rate() const { return mix_rate; }; -AudioDriver::SpeakerMode AudioDriverOSX::get_speaker_mode() const { +AudioDriver::SpeakerMode AudioDriverCoreAudio::get_speaker_mode() const { return get_speaker_mode_by_total_channels(channels); }; -void AudioDriverOSX::lock() { +void AudioDriverCoreAudio::lock() { if (mutex) mutex->lock(); }; -void AudioDriverOSX::unlock() { +void AudioDriverCoreAudio::unlock() { if (mutex) mutex->unlock(); }; -bool AudioDriverOSX::try_lock() { +bool AudioDriverCoreAudio::try_lock() { if (mutex) return mutex->try_lock() == OK; return true; } -void AudioDriverOSX::finish() { +void AudioDriverCoreAudio::finish() { + OSStatus result; + finishDevice(); - OSStatus result = AudioObjectRemovePropertyListener(kAudioObjectSystemObject, &outputDeviceAddress, &outputDeviceAddressCB, this); +#ifdef OSX_ENABLED + result = AudioObjectRemovePropertyListener(kAudioObjectSystemObject, &outputDeviceAddress, &outputDeviceAddressCB, this); if (result != noErr) { ERR_PRINT("AudioObjectRemovePropertyListener failed"); } +#endif AURenderCallbackStruct callback; zeromem(&callback, sizeof(AURenderCallbackStruct)); @@ -283,7 +297,7 @@ void AudioDriverOSX::finish() { } }; -AudioDriverOSX::AudioDriverOSX() { +AudioDriverCoreAudio::AudioDriverCoreAudio() { active = false; mutex = NULL; @@ -296,6 +310,6 @@ AudioDriverOSX::AudioDriverOSX() { samples_in.clear(); }; -AudioDriverOSX::~AudioDriverOSX(){}; +AudioDriverCoreAudio::~AudioDriverCoreAudio(){}; #endif diff --git a/platform/osx/audio_driver_osx.h b/drivers/coreaudio/audio_driver_coreaudio.h index a7e68c8141..33b3ba93ec 100644 --- a/platform/osx/audio_driver_osx.h +++ b/drivers/coreaudio/audio_driver_coreaudio.h @@ -1,5 +1,5 @@ /*************************************************************************/ -/* audio_driver_osx.h */ +/* audio_driver_coreaudio.h */ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ @@ -27,20 +27,24 @@ /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ -#ifdef OSX_ENABLED +#ifdef COREAUDIO_ENABLED -#ifndef AUDIO_DRIVER_OSX_H -#define AUDIO_DRIVER_OSX_H +#ifndef AUDIO_DRIVER_COREAUDIO_H +#define AUDIO_DRIVER_COREAUDIO_H #include "servers/audio_server.h" #include <AudioUnit/AudioUnit.h> +#ifdef OSX_ENABLED #include <CoreAudio/AudioHardware.h> +#endif -class AudioDriverOSX : public AudioDriver { +class AudioDriverCoreAudio : public AudioDriver { AudioComponentInstance audio_unit; +#ifdef OSX_ENABLED AudioObjectPropertyAddress outputDeviceAddress; +#endif bool active; Mutex *mutex; @@ -62,7 +66,7 @@ class AudioDriverOSX : public AudioDriver { public: const char *get_name() const { - return "AudioUnit"; + return "CoreAudio"; }; virtual Error init(); @@ -76,8 +80,8 @@ public: bool try_lock(); Error reopen(); - AudioDriverOSX(); - ~AudioDriverOSX(); + AudioDriverCoreAudio(); + ~AudioDriverCoreAudio(); }; #endif diff --git a/drivers/gles3/rasterizer_scene_gles3.cpp b/drivers/gles3/rasterizer_scene_gles3.cpp index 146a2359b6..39f027a5aa 100644 --- a/drivers/gles3/rasterizer_scene_gles3.cpp +++ b/drivers/gles3/rasterizer_scene_gles3.cpp @@ -28,7 +28,7 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ #include "rasterizer_scene_gles3.h" - +#include "math_funcs.h" #include "os/os.h" #include "project_settings.h" #include "rasterizer_canvas_gles3.h" @@ -379,6 +379,7 @@ bool RasterizerSceneGLES3::shadow_atlas_update_light(RID p_atlas, RID p_light_in sh->owner = p_light_intance; sh->alloc_tick = tick; sh->version = p_light_version; + li->shadow_atlases.insert(p_atlas); //make new key key = new_quadrant << ShadowAtlas::QUADRANT_SHIFT; @@ -414,6 +415,7 @@ bool RasterizerSceneGLES3::shadow_atlas_update_light(RID p_atlas, RID p_light_in sh->owner = p_light_intance; sh->alloc_tick = tick; sh->version = p_light_version; + li->shadow_atlases.insert(p_atlas); //make new key uint32_t key = new_quadrant << ShadowAtlas::QUADRANT_SHIFT; @@ -799,12 +801,12 @@ void RasterizerSceneGLES3::environment_set_sky(RID p_env, RID p_sky) { env->sky = p_sky; } -void RasterizerSceneGLES3::environment_set_sky_scale(RID p_env, float p_scale) { +void RasterizerSceneGLES3::environment_set_sky_custom_fov(RID p_env, float p_scale) { Environment *env = environment_owner.getornull(p_env); ERR_FAIL_COND(!env); - env->sky_scale = p_scale; + env->sky_custom_fov = p_scale; } void RasterizerSceneGLES3::environment_set_bg_color(RID p_env, const Color &p_color) { @@ -2140,7 +2142,6 @@ void RasterizerSceneGLES3::_render_list(RenderList::Element **p_elements, int p_ first = false; } - glFrontFace(GL_CW); glBindVertexArray(0); state.scene_shader.set_conditional(SceneShaderGLES3::USE_INSTANCING, false); @@ -2319,7 +2320,7 @@ void RasterizerSceneGLES3::_add_geometry_with_material(RasterizerStorageGLES3::G } } -void RasterizerSceneGLES3::_draw_sky(RasterizerStorageGLES3::Sky *p_sky, const CameraMatrix &p_projection, const Transform &p_transform, bool p_vflip, float p_scale, float p_energy) { +void RasterizerSceneGLES3::_draw_sky(RasterizerStorageGLES3::Sky *p_sky, const CameraMatrix &p_projection, const Transform &p_transform, bool p_vflip, float p_custom_fov, float p_energy) { if (!p_sky) return; @@ -2349,8 +2350,30 @@ void RasterizerSceneGLES3::_draw_sky(RasterizerStorageGLES3::Sky *p_sky, const C glDepthFunc(GL_LEQUAL); glColorMask(1, 1, 1, 1); + // Camera + CameraMatrix camera; + + if (p_custom_fov) { + + float near_plane = p_projection.get_z_near(); + float far_plane = p_projection.get_z_far(); + float aspect = p_projection.get_aspect(); + + camera.set_perspective(p_custom_fov, aspect, near_plane, far_plane); + + } else { + camera = p_projection; + } + float flip_sign = p_vflip ? -1 : 1; + /* + If matrix[2][0] or matrix[2][1] we're dealing with an asymmetrical projection matrix. This is the case for stereoscopic rendering (i.e. VR). + To ensure the image rendered is perspective correct we need to move some logic into the shader. For this the USE_ASYM_PANO option is introduced. + It also means the uv coordinates are ignored in this mode and we don't need our loop. + */ + bool asymmetrical = ((camera.matrix[2][0] != 0.0) || (camera.matrix[2][1] != 0.0)); + Vector3 vertices[8] = { Vector3(-1, -1 * flip_sign, 1), Vector3(0, 1, 0), @@ -2360,24 +2383,21 @@ void RasterizerSceneGLES3::_draw_sky(RasterizerStorageGLES3::Sky *p_sky, const C Vector3(1, 0, 0), Vector3(-1, 1 * flip_sign, 1), Vector3(0, 0, 0) - }; - //sky uv vectors - float vw, vh, zn; - p_projection.get_viewport_size(vw, vh); - zn = p_projection.get_z_near(); - - float scale = p_scale; - - for (int i = 0; i < 4; i++) { - - Vector3 uv = vertices[i * 2 + 1]; - uv.x = (uv.x * 2.0 - 1.0) * vw * scale; - uv.y = -(uv.y * 2.0 - 1.0) * vh * scale; - uv.z = -zn; - vertices[i * 2 + 1] = p_transform.basis.xform(uv).normalized(); - vertices[i * 2 + 1].z = -vertices[i * 2 + 1].z; + if (!asymmetrical) { + float vw, vh, zn; + camera.get_viewport_size(vw, vh); + zn = p_projection.get_z_near(); + + for (int i = 0; i < 4; i++) { + Vector3 uv = vertices[i * 2 + 1]; + uv.x = (uv.x * 2.0 - 1.0) * vw; + uv.y = -(uv.y * 2.0 - 1.0) * vh; + uv.z = -zn; + vertices[i * 2 + 1] = p_transform.basis.xform(uv).normalized(); + vertices[i * 2 + 1].z = -vertices[i * 2 + 1].z; + } } glBindBuffer(GL_ARRAY_BUFFER, state.sky_verts); @@ -2386,16 +2406,24 @@ void RasterizerSceneGLES3::_draw_sky(RasterizerStorageGLES3::Sky *p_sky, const C glBindVertexArray(state.sky_array); - storage->shaders.copy.set_conditional(CopyShaderGLES3::USE_PANORAMA, true); + storage->shaders.copy.set_conditional(CopyShaderGLES3::USE_ASYM_PANO, asymmetrical); + storage->shaders.copy.set_conditional(CopyShaderGLES3::USE_PANORAMA, !asymmetrical); storage->shaders.copy.set_conditional(CopyShaderGLES3::USE_MULTIPLIER, true); storage->shaders.copy.bind(); storage->shaders.copy.set_uniform(CopyShaderGLES3::MULTIPLIER, p_energy); + if (asymmetrical) { + // pack the bits we need from our projection matrix + storage->shaders.copy.set_uniform(CopyShaderGLES3::ASYM_PROJ, camera.matrix[2][0], camera.matrix[0][0], camera.matrix[2][1], camera.matrix[1][1]); + ///@TODO I couldn't get mat3 + p_transform.basis to work, that would be better here. + storage->shaders.copy.set_uniform(CopyShaderGLES3::PANO_TRANSFORM, p_transform); + } glDrawArrays(GL_TRIANGLE_FAN, 0, 4); glBindVertexArray(0); glColorMask(1, 1, 1, 1); + storage->shaders.copy.set_conditional(CopyShaderGLES3::USE_ASYM_PANO, false); storage->shaders.copy.set_conditional(CopyShaderGLES3::USE_MULTIPLIER, false); storage->shaders.copy.set_conditional(CopyShaderGLES3::USE_PANORAMA, false); } @@ -2404,6 +2432,7 @@ void RasterizerSceneGLES3::_setup_environment(Environment *env, const CameraMatr //store camera into ubo store_camera(p_cam_projection, state.ubo_data.projection_matrix); + store_camera(p_cam_projection.inverse(), state.ubo_data.inv_projection_matrix); store_transform(p_cam_transform, state.ubo_data.camera_matrix); store_transform(p_cam_transform.affine_inverse(), state.ubo_data.camera_inverse_matrix); @@ -2521,9 +2550,10 @@ void RasterizerSceneGLES3::_setup_directional_light(int p_index, const Transform float sign = li->light_ptr->negative ? -1 : 1; Color linear_col = li->light_ptr->color.to_linear(); - ubo_data.light_color_energy[0] = linear_col.r * sign * li->light_ptr->param[VS::LIGHT_PARAM_ENERGY]; - ubo_data.light_color_energy[1] = linear_col.g * sign * li->light_ptr->param[VS::LIGHT_PARAM_ENERGY]; - ubo_data.light_color_energy[2] = linear_col.b * sign * li->light_ptr->param[VS::LIGHT_PARAM_ENERGY]; + //compensate normalized diffuse range by multiplying by PI + ubo_data.light_color_energy[0] = linear_col.r * sign * li->light_ptr->param[VS::LIGHT_PARAM_ENERGY] * Math_PI; + ubo_data.light_color_energy[1] = linear_col.g * sign * li->light_ptr->param[VS::LIGHT_PARAM_ENERGY] * Math_PI; + ubo_data.light_color_energy[2] = linear_col.b * sign * li->light_ptr->param[VS::LIGHT_PARAM_ENERGY] * Math_PI; ubo_data.light_color_energy[3] = 0; //omni, keep at 0 @@ -2539,8 +2569,8 @@ void RasterizerSceneGLES3::_setup_directional_light(int p_index, const Transform ubo_data.light_direction_attenuation[3] = 1.0; ubo_data.light_params[0] = 0; - ubo_data.light_params[1] = li->light_ptr->param[VS::LIGHT_PARAM_SPECULAR]; - ubo_data.light_params[2] = 0; + ubo_data.light_params[1] = 0; + ubo_data.light_params[2] = li->light_ptr->param[VS::LIGHT_PARAM_SPECULAR]; ubo_data.light_params[3] = 0; Color shadow_color = li->light_ptr->shadow_color.to_linear(); @@ -2661,9 +2691,9 @@ void RasterizerSceneGLES3::_setup_lights(RID *p_light_cull_result, int p_light_c float sign = li->light_ptr->negative ? -1 : 1; Color linear_col = li->light_ptr->color.to_linear(); - ubo_data.light_color_energy[0] = linear_col.r * sign * li->light_ptr->param[VS::LIGHT_PARAM_ENERGY]; - ubo_data.light_color_energy[1] = linear_col.g * sign * li->light_ptr->param[VS::LIGHT_PARAM_ENERGY]; - ubo_data.light_color_energy[2] = linear_col.b * sign * li->light_ptr->param[VS::LIGHT_PARAM_ENERGY]; + ubo_data.light_color_energy[0] = linear_col.r * sign * li->light_ptr->param[VS::LIGHT_PARAM_ENERGY] * Math_PI; + ubo_data.light_color_energy[1] = linear_col.g * sign * li->light_ptr->param[VS::LIGHT_PARAM_ENERGY] * Math_PI; + ubo_data.light_color_energy[2] = linear_col.b * sign * li->light_ptr->param[VS::LIGHT_PARAM_ENERGY] * Math_PI; ubo_data.light_color_energy[3] = 0; Vector3 pos = p_camera_inverse_transform.xform(li->transform.origin); @@ -2747,9 +2777,9 @@ void RasterizerSceneGLES3::_setup_lights(RID *p_light_cull_result, int p_light_c float sign = li->light_ptr->negative ? -1 : 1; Color linear_col = li->light_ptr->color.to_linear(); - ubo_data.light_color_energy[0] = linear_col.r * sign * li->light_ptr->param[VS::LIGHT_PARAM_ENERGY]; - ubo_data.light_color_energy[1] = linear_col.g * sign * li->light_ptr->param[VS::LIGHT_PARAM_ENERGY]; - ubo_data.light_color_energy[2] = linear_col.b * sign * li->light_ptr->param[VS::LIGHT_PARAM_ENERGY]; + ubo_data.light_color_energy[0] = linear_col.r * sign * li->light_ptr->param[VS::LIGHT_PARAM_ENERGY] * Math_PI; + ubo_data.light_color_energy[1] = linear_col.g * sign * li->light_ptr->param[VS::LIGHT_PARAM_ENERGY] * Math_PI; + ubo_data.light_color_energy[2] = linear_col.b * sign * li->light_ptr->param[VS::LIGHT_PARAM_ENERGY] * Math_PI; ubo_data.light_color_energy[3] = 0; Vector3 pos = p_camera_inverse_transform.xform(li->transform.origin); @@ -4257,7 +4287,7 @@ void RasterizerSceneGLES3::render_scene(const Transform &p_cam_transform, const glBindFramebuffer(GL_FRAMEBUFFER,storage->frame.current_rt->buffers.fbo); //switch to alpha fbo for sky, only diffuse/ambient matters */ - _draw_sky(sky, p_cam_projection, p_cam_transform, false, env->sky_scale, env->bg_energy); + _draw_sky(sky, p_cam_projection, p_cam_transform, false, env->sky_custom_fov, env->bg_energy); } //_render_list_forward(&alpha_render_list,camera_transform,camera_transform_inverse,camera_projection,false,fragment_lighting,true); @@ -5010,6 +5040,8 @@ void RasterizerSceneGLES3::initialize() { } state.debug_draw = VS::VIEWPORT_DEBUG_DRAW_DISABLED; + + glFrontFace(GL_CW); } void RasterizerSceneGLES3::iteration() { diff --git a/drivers/gles3/rasterizer_scene_gles3.h b/drivers/gles3/rasterizer_scene_gles3.h index 8669c42a7a..28a5cef0ee 100644 --- a/drivers/gles3/rasterizer_scene_gles3.h +++ b/drivers/gles3/rasterizer_scene_gles3.h @@ -110,6 +110,7 @@ public: struct SceneDataUBO { //this is a std140 compatible struct. Please read the OpenGL 3.3 Specificaiton spec before doing any changes float projection_matrix[16]; + float inv_projection_matrix[16]; float camera_inverse_matrix[16]; float camera_matrix[16]; float ambient_light_color[4]; @@ -351,7 +352,7 @@ public: VS::EnvironmentBG bg_mode; RID sky; - float sky_scale; + float sky_custom_fov; Color bg_color; float bg_energy; @@ -434,7 +435,7 @@ public: Environment() { bg_mode = VS::ENV_BG_CLEAR_COLOR; - sky_scale = 1.0; + sky_custom_fov = 0.0; bg_energy = 1.0; sky_ambient = 0; ambient_energy = 1.0; @@ -519,7 +520,7 @@ public: virtual void environment_set_background(RID p_env, VS::EnvironmentBG p_bg); virtual void environment_set_sky(RID p_env, RID p_sky); - virtual void environment_set_sky_scale(RID p_env, float p_scale); + virtual void environment_set_sky_custom_fov(RID p_env, float p_scale); virtual void environment_set_bg_color(RID p_env, const Color &p_color); virtual void environment_set_bg_energy(RID p_env, float p_energy); virtual void environment_set_canvas_max_layer(RID p_env, int p_max_layer); @@ -810,7 +811,7 @@ public: _FORCE_INLINE_ void _add_geometry_with_material(RasterizerStorageGLES3::Geometry *p_geometry, InstanceBase *p_instance, RasterizerStorageGLES3::GeometryOwner *p_owner, RasterizerStorageGLES3::Material *p_material, bool p_depth_pass); - void _draw_sky(RasterizerStorageGLES3::Sky *p_sky, const CameraMatrix &p_projection, const Transform &p_transform, bool p_vflip, float p_scale, float p_energy); + void _draw_sky(RasterizerStorageGLES3::Sky *p_sky, const CameraMatrix &p_projection, const Transform &p_transform, bool p_vflip, float p_custom_fov, float p_energy); void _setup_environment(Environment *env, const CameraMatrix &p_cam_projection, const Transform &p_cam_transform); void _setup_directional_light(int p_index, const Transform &p_camera_inverse_transform, bool p_use_shadows); diff --git a/drivers/gles3/rasterizer_storage_gles3.cpp b/drivers/gles3/rasterizer_storage_gles3.cpp index b99817fb12..296d945cda 100644 --- a/drivers/gles3/rasterizer_storage_gles3.cpp +++ b/drivers/gles3/rasterizer_storage_gles3.cpp @@ -1564,6 +1564,7 @@ void RasterizerStorageGLES3::_update_shader(Shader *p_shader) const { p_shader->canvas_item.blend_mode = Shader::CanvasItem::BLEND_MODE_MIX; p_shader->canvas_item.uses_screen_texture = false; p_shader->canvas_item.uses_screen_uv = false; + p_shader->canvas_item.uses_time = false; shaders.actions_canvas.render_mode_values["blend_add"] = Pair<int *, int>(&p_shader->canvas_item.blend_mode, Shader::CanvasItem::BLEND_MODE_ADD); shaders.actions_canvas.render_mode_values["blend_mix"] = Pair<int *, int>(&p_shader->canvas_item.blend_mode, Shader::CanvasItem::BLEND_MODE_MIX); @@ -1595,6 +1596,7 @@ void RasterizerStorageGLES3::_update_shader(Shader *p_shader) const { p_shader->spatial.unshaded = false; p_shader->spatial.no_depth_test = false; p_shader->spatial.uses_sss = false; + p_shader->spatial.uses_time = false; p_shader->spatial.uses_vertex_lighting = false; p_shader->spatial.uses_screen_texture = false; p_shader->spatial.uses_vertex = false; @@ -2428,7 +2430,8 @@ void RasterizerStorageGLES3::_update_material(Material *material) { if (material->shader && material->shader->mode == VS::SHADER_SPATIAL) { - if (!material->shader->spatial.uses_alpha && material->shader->spatial.blend_mode == Shader::Spatial::BLEND_MODE_MIX) { + if (material->shader->spatial.blend_mode == Shader::Spatial::BLEND_MODE_MIX && + (!material->shader->spatial.uses_alpha || (material->shader->spatial.uses_alpha && material->shader->spatial.depth_draw_mode == Shader::Spatial::DEPTH_DRAW_ALPHA_PREPASS))) { can_cast_shadow = true; } @@ -2471,7 +2474,7 @@ void RasterizerStorageGLES3::_update_material(Material *material) { glGenBuffers(1, &material->ubo_id); glBindBuffer(GL_UNIFORM_BUFFER, material->ubo_id); - glBufferData(GL_UNIFORM_BUFFER, material->shader->ubo_size, NULL, GL_DYNAMIC_DRAW); + glBufferData(GL_UNIFORM_BUFFER, material->shader->ubo_size, NULL, GL_STATIC_DRAW); glBindBuffer(GL_UNIFORM_BUFFER, 0); material->ubo_size = material->shader->ubo_size; } @@ -3766,7 +3769,7 @@ void RasterizerStorageGLES3::multimesh_allocate(RID p_multimesh, int p_instances glGenBuffers(1, &multimesh->buffer); glBindBuffer(GL_ARRAY_BUFFER, multimesh->buffer); - glBufferData(GL_ARRAY_BUFFER, multimesh->data.size() * sizeof(float), NULL, GL_DYNAMIC_DRAW); + glBufferData(GL_ARRAY_BUFFER, multimesh->data.size() * sizeof(float), NULL, GL_STATIC_DRAW); glBindBuffer(GL_ARRAY_BUFFER, 0); } @@ -5213,7 +5216,7 @@ void RasterizerStorageGLES3::particles_set_amount(RID p_particles, int p_amount) glBindVertexArray(particles->particle_vaos[i]); glBindBuffer(GL_ARRAY_BUFFER, particles->particle_buffers[i]); - glBufferData(GL_ARRAY_BUFFER, floats * sizeof(float), data, GL_DYNAMIC_DRAW); + glBufferData(GL_ARRAY_BUFFER, floats * sizeof(float), data, GL_STATIC_DRAW); for (int i = 0; i < 6; i++) { glEnableVertexAttribArray(i); @@ -6196,7 +6199,7 @@ void RasterizerStorageGLES3::_render_target_allocate(RenderTarget *rt) { rt->buffers.effects_active = true; } - if (!rt->flags[RENDER_TARGET_NO_SAMPLING]) { + if (!rt->flags[RENDER_TARGET_NO_SAMPLING] && rt->width >= 2 && rt->height >= 2) { for (int i = 0; i < 2; i++) { @@ -6509,7 +6512,7 @@ void RasterizerStorageGLES3::canvas_light_occluder_set_polylines(RID p_occluder, if (!co->vertex_id) { glGenBuffers(1, &co->vertex_id); glBindBuffer(GL_ARRAY_BUFFER, co->vertex_id); - glBufferData(GL_ARRAY_BUFFER, lc * 6 * sizeof(real_t), vw.ptr(), GL_DYNAMIC_DRAW); + glBufferData(GL_ARRAY_BUFFER, lc * 6 * sizeof(real_t), vw.ptr(), GL_STATIC_DRAW); } else { glBindBuffer(GL_ARRAY_BUFFER, co->vertex_id); diff --git a/drivers/gles3/shader_compiler_gles3.cpp b/drivers/gles3/shader_compiler_gles3.cpp index 5401c8266a..6c0e4f74ff 100644 --- a/drivers/gles3/shader_compiler_gles3.cpp +++ b/drivers/gles3/shader_compiler_gles3.cpp @@ -700,9 +700,7 @@ ShaderCompilerGLES3::ShaderCompilerGLES3() { /** CANVAS ITEM SHADER **/ - actions[VS::SHADER_CANVAS_ITEM].renames["SRC_VERTEX"] = "vertex"; actions[VS::SHADER_CANVAS_ITEM].renames["VERTEX"] = "outvec.xy"; - actions[VS::SHADER_CANVAS_ITEM].renames["VERTEX_COLOR"] = "vertex_color"; actions[VS::SHADER_CANVAS_ITEM].renames["UV"] = "uv_interp"; actions[VS::SHADER_CANVAS_ITEM].renames["POINT_SIZE"] = "gl_PointSize"; @@ -711,6 +709,7 @@ ShaderCompilerGLES3::ShaderCompilerGLES3() { actions[VS::SHADER_CANVAS_ITEM].renames["EXTRA_MATRIX"] == "extra_matrix"; actions[VS::SHADER_CANVAS_ITEM].renames["TIME"] = "time"; actions[VS::SHADER_CANVAS_ITEM].renames["AT_LIGHT_PASS"] = "at_light_pass"; + actions[VS::SHADER_CANVAS_ITEM].renames["INSTANCE_CUSTOM"] = "instance_custom"; actions[VS::SHADER_CANVAS_ITEM].renames["COLOR"] = "color"; actions[VS::SHADER_CANVAS_ITEM].renames["NORMAL"] = "normal"; @@ -720,6 +719,7 @@ ShaderCompilerGLES3::ShaderCompilerGLES3() { actions[VS::SHADER_CANVAS_ITEM].renames["COLOR"] = "color"; actions[VS::SHADER_CANVAS_ITEM].renames["TEXTURE"] = "color_texture"; actions[VS::SHADER_CANVAS_ITEM].renames["TEXTURE_PIXEL_SIZE"] = "color_texpixel_size"; + actions[VS::SHADER_CANVAS_ITEM].renames["NORMAL_TEXTURE"] = "normal_texture"; actions[VS::SHADER_CANVAS_ITEM].renames["SCREEN_UV"] = "screen_uv"; actions[VS::SHADER_CANVAS_ITEM].renames["SCREEN_TEXTURE"] = "screen_texture"; actions[VS::SHADER_CANVAS_ITEM].renames["SCREEN_PIXEL_SIZE"] = "screen_pixel_size"; @@ -750,6 +750,7 @@ ShaderCompilerGLES3::ShaderCompilerGLES3() { actions[VS::SHADER_SPATIAL].renames["INV_CAMERA_MATRIX"] = "camera_inverse_matrix"; actions[VS::SHADER_SPATIAL].renames["CAMERA_MATRIX"] = "camera_matrix"; actions[VS::SHADER_SPATIAL].renames["PROJECTION_MATRIX"] = "projection_matrix"; + actions[VS::SHADER_SPATIAL].renames["INV_PROJECTION_MATRIX"] = "inv_projection_matrix"; actions[VS::SHADER_SPATIAL].renames["MODELVIEW_MATRIX"] = "modelview"; actions[VS::SHADER_SPATIAL].renames["VERTEX"] = "vertex.xyz"; @@ -786,6 +787,7 @@ ShaderCompilerGLES3::ShaderCompilerGLES3() { actions[VS::SHADER_SPATIAL].renames["SSS_STRENGTH"] = "sss_strength"; actions[VS::SHADER_SPATIAL].renames["TRANSMISSION"] = "transmission"; actions[VS::SHADER_SPATIAL].renames["AO"] = "ao"; + actions[VS::SHADER_SPATIAL].renames["AO_LIGHT_AFFECT"] = "ao_light_affect"; actions[VS::SHADER_SPATIAL].renames["EMISSION"] = "emission"; //actions[VS::SHADER_SPATIAL].renames["SCREEN_UV"]=ShaderLanguage::TYPE_VEC2; actions[VS::SHADER_SPATIAL].renames["POINT_COORD"] = "gl_PointCoord"; @@ -796,6 +798,13 @@ ShaderCompilerGLES3::ShaderCompilerGLES3() { actions[VS::SHADER_SPATIAL].renames["SIDE"] = "side"; actions[VS::SHADER_SPATIAL].renames["ALPHA_SCISSOR"] = "alpha_scissor"; + //for light + actions[VS::SHADER_SPATIAL].renames["VIEW"] = "view"; + actions[VS::SHADER_SPATIAL].renames["LIGHT_COLOR"] = "light_color"; + actions[VS::SHADER_SPATIAL].renames["ATTENUATION"] = "attenuation"; + actions[VS::SHADER_SPATIAL].renames["DIFFUSE_LIGHT"] = "diffuse_light"; + actions[VS::SHADER_SPATIAL].renames["SPECULAR_LIGHT"] = "specular_light"; + actions[VS::SHADER_SPATIAL].usage_defines["TANGENT"] = "#define ENABLE_TANGENT_INTERP\n"; actions[VS::SHADER_SPATIAL].usage_defines["BINORMAL"] = "@TANGENT"; actions[VS::SHADER_SPATIAL].usage_defines["RIM"] = "#define LIGHT_USE_RIM\n"; @@ -805,6 +814,7 @@ ShaderCompilerGLES3::ShaderCompilerGLES3() { actions[VS::SHADER_SPATIAL].usage_defines["ANISOTROPY"] = "#define LIGHT_USE_ANISOTROPY\n"; actions[VS::SHADER_SPATIAL].usage_defines["ANISOTROPY_FLOW"] = "@ANISOTROPY"; actions[VS::SHADER_SPATIAL].usage_defines["AO"] = "#define ENABLE_AO\n"; + actions[VS::SHADER_SPATIAL].usage_defines["AO_LIGHT_AFFECT"] = "#define ENABLE_AO\n"; actions[VS::SHADER_SPATIAL].usage_defines["UV"] = "#define ENABLE_UV_INTERP\n"; actions[VS::SHADER_SPATIAL].usage_defines["UV2"] = "#define ENABLE_UV2_INTERP\n"; actions[VS::SHADER_SPATIAL].usage_defines["NORMALMAP"] = "#define ENABLE_NORMALMAP\n"; @@ -828,6 +838,7 @@ ShaderCompilerGLES3::ShaderCompilerGLES3() { actions[VS::SHADER_SPATIAL].render_mode_defines["diffuse_lambert_wrap"] = "#define DIFFUSE_LAMBERT_WRAP\n"; actions[VS::SHADER_SPATIAL].render_mode_defines["diffuse_toon"] = "#define DIFFUSE_TOON\n"; + actions[VS::SHADER_SPATIAL].render_mode_defines["specular_ggx"] = "#define SPECULAR_GGX\n"; actions[VS::SHADER_SPATIAL].render_mode_defines["specular_blinn"] = "#define SPECULAR_BLINN\n"; actions[VS::SHADER_SPATIAL].render_mode_defines["specular_phong"] = "#define SPECULAR_PHONG\n"; actions[VS::SHADER_SPATIAL].render_mode_defines["specular_toon"] = "#define SPECULAR_TOON\n"; diff --git a/drivers/gles3/shaders/canvas.glsl b/drivers/gles3/shaders/canvas.glsl index bf8eaf601d..731d6968ce 100644 --- a/drivers/gles3/shaders/canvas.glsl +++ b/drivers/gles3/shaders/canvas.glsl @@ -105,13 +105,16 @@ VERTEX_SHADER_GLOBALS void main() { - vec4 vertex_color = color_attrib; + vec4 color = color_attrib; #ifdef USE_INSTANCING mat4 extra_matrix2 = extra_matrix * transpose(mat4(instance_xform0,instance_xform1,instance_xform2,vec4(0.0,0.0,0.0,1.0))); - vertex_color*=instance_color; + color*=instance_color; + vec4 instance_custom = instance_custom_data; + #else mat4 extra_matrix2 = extra_matrix; + vec4 instance_custom = vec4(0.0); #endif #ifdef USE_TEXTURE_RECT @@ -135,7 +138,7 @@ void main() { //compute h and v frames and adjust UV interp for animation int total_frames = h_frames * v_frames; - int frame = min(int(float(total_frames) *instance_custom_data.z),total_frames-1); + int frame = min(int(float(total_frames) *instance_custom.z),total_frames-1); float frame_w = 1.0/float(h_frames); float frame_h = 1.0/float(v_frames); uv_interp.x = uv_interp.x * frame_w + frame_w * float(frame % h_frames); @@ -146,7 +149,6 @@ void main() { #define extra_matrix extra_matrix2 { - vec2 src_vtx=outvec.xy; VERTEX_SHADER_CODE @@ -165,7 +167,7 @@ VERTEX_SHADER_CODE #undef extra_matrix - color_interp = vertex_color; + color_interp = color; #ifdef USE_PIXEL_SNAP diff --git a/drivers/gles3/shaders/copy.glsl b/drivers/gles3/shaders/copy.glsl index d33193ee50..743fe122d1 100644 --- a/drivers/gles3/shaders/copy.glsl +++ b/drivers/gles3/shaders/copy.glsl @@ -27,6 +27,8 @@ void main() { #if defined(USE_CUBEMAP) || defined(USE_PANORAMA) cube_interp = cube_in; +#elif defined(USE_ASYM_PANO) + uv_interp = vertex_attrib.xy; #else uv_interp = uv_in; #ifdef V_FLIP @@ -59,6 +61,11 @@ in vec3 cube_interp; in vec2 uv_interp; #endif +#ifdef USE_ASYM_PANO +uniform highp mat4 pano_transform; +uniform highp vec4 asym_proj; +#endif + #ifdef USE_CUBEMAP uniform samplerCube source_cube; //texunit:0 #else @@ -70,7 +77,7 @@ uniform sampler2D source; //texunit:0 uniform float multiplier; #endif -#ifdef USE_PANORAMA +#if defined(USE_PANORAMA) || defined(USE_ASYM_PANO) vec4 texturePanorama(vec3 normal,sampler2D pano ) { @@ -122,6 +129,21 @@ void main() { vec4 color = texturePanorama( normalize(cube_interp), source ); +#elif defined(USE_ASYM_PANO) + + // When an assymetrical projection matrix is used (applicable for stereoscopic rendering i.e. VR) we need to do this calculation per fragment to get a perspective correct result. + // Note that we're ignoring the x-offset for IPD, with Z sufficiently in the distance it becomes neglectible, as a result we could probably just set cube_normal.z to -1. + // The Matrix[2][0] (= asym_proj.x) and Matrix[2][1] (= asym_proj.z) values are what provide the right shift in the image. + + vec3 cube_normal; + cube_normal.z = -1000000.0; + cube_normal.x = (cube_normal.z * (-uv_interp.x - asym_proj.x)) / asym_proj.y; + cube_normal.y = (cube_normal.z * (-uv_interp.y - asym_proj.z)) / asym_proj.a; + cube_normal = mat3(pano_transform) * cube_normal; + cube_normal.z = -cube_normal.z; + + vec4 color = texturePanorama( normalize(cube_normal.xyz), source ); + #elif defined(USE_CUBEMAP) vec4 color = texture( source_cube, normalize(cube_interp) ); diff --git a/drivers/gles3/shaders/scene.glsl b/drivers/gles3/shaders/scene.glsl index 5f83033293..9619dadbdd 100644 --- a/drivers/gles3/shaders/scene.glsl +++ b/drivers/gles3/shaders/scene.glsl @@ -1,5 +1,6 @@ [vertex] +#define M_PI 3.14159265359 /* from VisualServer: @@ -61,6 +62,7 @@ layout(location=12) in highp vec4 instance_custom_data; layout(std140) uniform SceneData { //ubo:0 highp mat4 projection_matrix; + highp mat4 inv_projection_matrix; highp mat4 camera_inverse_matrix; highp mat4 camera_matrix; @@ -162,12 +164,12 @@ uniform int spot_light_count; out vec4 diffuse_light_interp; out vec4 specular_light_interp; -void light_compute(vec3 N, vec3 L,vec3 V, vec3 light_color,float roughness,inout vec3 diffuse, inout vec3 specular) { +void light_compute(vec3 N, vec3 L,vec3 V, vec3 light_color, float roughness, inout vec3 diffuse, inout vec3 specular) { float dotNL = max(dot(N,L), 0.0 ); - diffuse += dotNL * light_color; + diffuse += dotNL * light_color / M_PI; - if (roughness > 0.0) { + if (roughness < 1.0) { vec3 H = normalize(V + L); float dotNH = max(dot(N,H), 0.0 ); @@ -588,7 +590,7 @@ vec3 textureDualParaboloid(sampler2DArray p_tex, vec3 p_vec,float p_roughness) { norm.xy=norm.xy * vec2(0.5,0.25) + vec2(0.5,0.25); // we need to lie the derivatives (normg) and assume that DP side is always the same - // to get proper texure filtering + // to get proper texture filtering vec2 normg=norm.xy; if (norm.z>0.0) { norm.y=0.5-norm.y+0.5; @@ -643,6 +645,7 @@ FRAGMENT_SHADER_GLOBALS layout(std140) uniform SceneData { highp mat4 projection_matrix; + highp mat4 inv_projection_matrix; highp mat4 camera_inverse_matrix; highp mat4 camera_matrix; @@ -862,11 +865,57 @@ float contact_shadow_compute(vec3 pos, vec3 dir, float max_distance) { #endif -// GGX Specular -// Source: http://www.filmicworlds.com/images/ggx-opt/optimized-ggx.hlsl -float G1V(float dotNV, float k) -{ - return 1.0 / (dotNV * (1.0 - k) + k); + +// This returns the G_GGX function divided by 2 cos_theta_m, where in practice cos_theta_m is either N.L or N.V. +// We're dividing this factor off because the overall term we'll end up looks like +// (see, for example, the first unnumbered equation in B. Burley, "Physically Based Shading at Disney", SIGGRAPH 2012): +// +// F(L.V) D(N.H) G(N.L) G(N.V) / (4 N.L N.V) +// +// We're basically regouping this as +// +// F(L.V) D(N.H) [G(N.L)/(2 N.L)] [G(N.V) / (2 N.V)] +// +// and thus, this function implements the [G(N.m)/(2 N.m)] part with m = L or V. +// +// The contents of the D and G (G1) functions (GGX) are taken from +// E. Heitz, "Understanding the Masking-Shadowing Function in Microfacet-Based BRDFs", J. Comp. Graph. Tech. 3 (2) (2014). +// Eqns 71-72 and 85-86 (see also Eqns 43 and 80). + +float G_GGX_2cos(float cos_theta_m, float alpha) { + // Schlick's approximation + // C. Schlick, "An Inexpensive BRDF Model for Physically-based Rendering", Computer Graphics Forum. 13 (3): 233 (1994) + // Eq. (19), although see Heitz (2014) the about the problems with his derivation. + // It nevertheless approximates GGX well with k = alpha/2. + float k = 0.5*alpha; + return 0.5 / (cos_theta_m * (1.0 - k) + k); + + // float cos2 = cos_theta_m*cos_theta_m; + // float sin2 = (1.0-cos2); + // return 1.0 /( cos_theta_m + sqrt(cos2 + alpha*alpha*sin2) ); +} + +float D_GGX(float cos_theta_m, float alpha) { + float alpha2 = alpha*alpha; + float d = 1.0 + (alpha2-1.0)*cos_theta_m*cos_theta_m; + return alpha2/(M_PI * d * d); +} + +float G_GGX_anisotropic_2cos(float cos_theta_m, float alpha_x, float alpha_y, float cos_phi, float sin_phi) { + float cos2 = cos_theta_m * cos_theta_m; + float sin2 = (1.0-cos2); + float s_x = alpha_x * cos_phi; + float s_y = alpha_y * sin_phi; + return 1.0 / (cos_theta_m + sqrt(cos2 + (s_x*s_x + s_y*s_y)*sin2 )); +} + +float D_GGX_anisotropic(float cos_theta_m, float alpha_x, float alpha_y, float cos_phi, float sin_phi) { + float cos2 = cos_theta_m * cos_theta_m; + float sin2 = (1.0-cos2); + float r_x = cos_phi/alpha_x; + float r_y = sin_phi/alpha_y; + float d = cos2 + sin2*(r_x * r_x + r_y * r_y); + return 1.0 / (M_PI * alpha_x * alpha_y * d * d ); } @@ -885,97 +934,107 @@ float GTR1(float NdotH, float a) return (a2-1.0) / (M_PI*log(a2)*t); } +vec3 metallic_to_specular_color(float metallic, float specular, vec3 albedo) { + float dielectric = (0.034 * 2.0) * specular; + // energy conservation + return mix(vec3(dielectric), albedo, metallic); // TODO: reference? +} - -void light_compute(vec3 N, vec3 L,vec3 V,vec3 B, vec3 T,vec3 light_color,vec3 diffuse_color, vec3 transmission, float specular_blob_intensity, float roughness, float rim,float rim_tint, float clearcoat, float clearcoat_gloss,float anisotropy,inout vec3 diffuse, inout vec3 specular) { +void light_compute(vec3 N, vec3 L, vec3 V, vec3 B, vec3 T, vec3 light_color, vec3 attenuation, vec3 diffuse_color, vec3 transmission, float specular_blob_intensity, float roughness, float metallic, float rim, float rim_tint, float clearcoat, float clearcoat_gloss, float anisotropy, inout vec3 diffuse_light, inout vec3 specular_light) { #if defined(USE_LIGHT_SHADER_CODE) //light is written by the light shader + vec3 normal = N; + vec3 albedo = diffuse_color; + vec3 light = L; + vec3 view = V; LIGHT_SHADER_CODE #else + float NdotL = dot(N,L); + float cNdotL = max(NdotL, 0.0); // clamped NdotL + float NdotV = dot(N, V); + float cNdotV = max(NdotV, 0.0); - float dotNL = max(dot(N,L), 0.0 ); - + if (metallic < 1.0) { #if defined(DIFFUSE_OREN_NAYAR) - vec3 light_amount; + vec3 diffuse_brdf_NL; #else - float light_amount; + float diffuse_brdf_NL; // BRDF times N.L for calculating diffuse radiance #endif #if defined(DIFFUSE_LAMBERT_WRAP) - //energy conserving lambert wrap shader - light_amount = max(0.0,(dot(N,L) + roughness) / ((1.0 + roughness) * (1.0 + roughness))); + //energy conserving lambert wrap shader + diffuse_brdf_NL = max(0.0,(NdotL + roughness) / ((1.0 + roughness) * (1.0 + roughness))); #elif defined(DIFFUSE_OREN_NAYAR) - { - float LdotV = dot(L, V); - float NdotL = dot(L, N); - float NdotV = dot(N, V); + { + // see http://mimosa-pudica.net/improved-oren-nayar.html + float LdotV = dot(L, V); - float s = LdotV - NdotL * NdotV; - float t = mix(1.0, max(NdotL, NdotV), step(0.0, s)); - float sigma2 = roughness * roughness; - vec3 A = 1.0 + sigma2 * (diffuse_color / (sigma2 + 0.13) + 0.5 / (sigma2 + 0.33)); - float B = 0.45 * sigma2 / (sigma2 + 0.09); + float s = LdotV - NdotL * NdotV; + float t = mix(1.0, max(NdotL, NdotV), step(0.0, s)); - light_amount = max(0.0, NdotL) * (A + vec3(B) * s / t) / M_PI; - } + float sigma2 = roughness * roughness; // TODO: this needs checking + vec3 A = 1.0 + sigma2 * (- 0.5 / (sigma2 + 0.33) + 0.17*diffuse_color / (sigma2 + 0.13) ); + float B = 0.45 * sigma2 / (sigma2 + 0.09); + + diffuse_brdf_NL = cNdotL * (A + vec3(B) * s / t) * (1.0 / M_PI); + } #elif defined(DIFFUSE_TOON) - light_amount = smoothstep(-roughness,max(roughness,0.01),dot(N,L)); + diffuse_brdf_NL = smoothstep(-roughness,max(roughness,0.01),NdotL); #elif defined(DIFFUSE_BURLEY) - { + { - vec3 H = normalize(V + L); - float NoL = max(0.0,dot(N, L)); - float VoH = max(0.0,dot(L, H)); - float NoV = max(0.0,dot(N, V)); - - float FD90 = 0.5 + 2.0 * VoH * VoH * roughness; - float FdV = 1.0 + (FD90 - 1.0) * pow( 1.0 - NoV, 5.0 ); - float FdL = 1.0 + (FD90 - 1.0) * pow( 1.0 - NoL, 5.0 ); - light_amount = ( (1.0 / M_PI) * FdV * FdL ); -/* - float energyBias = mix(roughness, 0.0, 0.5); - float energyFactor = mix(roughness, 1.0, 1.0 / 1.51); - float fd90 = energyBias + 2.0 * VoH * VoH * roughness; - float f0 = 1.0; - float lightScatter = f0 + (fd90 - f0) * pow(1.0 - NoL, 5.0); - float viewScatter = f0 + (fd90 - f0) * pow(1.0 - NoV, 5.0); - - light_amount = lightScatter * viewScatter * energyFactor;*/ - } + vec3 H = normalize(V + L); + float cLdotH = max(0.0,dot(L, H)); + + float FD90 = 0.5 + 2.0 * cLdotH * cLdotH * roughness; + float FdV = 1.0 + (FD90 - 1.0) * SchlickFresnel(cNdotV); + float FdL = 1.0 + (FD90 - 1.0) * SchlickFresnel(cNdotL); + diffuse_brdf_NL = (1.0 / M_PI) * FdV * FdL * cNdotL; + /* + float energyBias = mix(roughness, 0.0, 0.5); + float energyFactor = mix(roughness, 1.0, 1.0 / 1.51); + float fd90 = energyBias + 2.0 * VoH * VoH * roughness; + float f0 = 1.0; + float lightScatter = f0 + (fd90 - f0) * pow(1.0 - cNdotL, 5.0); + float viewScatter = f0 + (fd90 - f0) * pow(1.0 - cNdotV, 5.0); + + diffuse_brdf_NL = lightScatter * viewScatter * energyFactor;*/ + } #else - //lambert - light_amount = dotNL; + //lambert + diffuse_brdf_NL = cNdotL * (1.0 / M_PI); #endif #if defined(TRANSMISSION_USED) - diffuse += light_color * diffuse_color * mix(vec3(light_amount),vec3(1.0),transmission); + diffuse_light += light_color * diffuse_color * mix(vec3(diffuse_brdf_NL), vec3(M_PI), transmission) * attenuation; #else - diffuse += light_color * diffuse_color * light_amount; + diffuse_light += light_color * diffuse_color * diffuse_brdf_NL * attenuation; #endif - float dotNV = max(dot(N,V), 0.0 ); + #if defined(LIGHT_USE_RIM) - float rim_light = pow(1.0-dotNV,(1.0-roughness)*16.0); - diffuse += rim_light * rim * mix(vec3(1.0),diffuse_color,rim_tint) * light_color; + float rim_light = pow(1.0-cNdotV, (1.0-roughness)*16.0); + diffuse_light += rim_light * rim * mix(vec3(1.0),diffuse_color,rim_tint) * light_color; #endif + } - if (roughness > 0.0) { + if (roughness < 1.0) { // D @@ -983,37 +1042,36 @@ LIGHT_SHADER_CODE #if defined(SPECULAR_BLINN) vec3 H = normalize(V + L); - float dotNH = max(dot(N,H), 0.0 ); - float intensity = pow( dotNH, (1.0-roughness) * 256.0); - specular += light_color * intensity * specular_blob_intensity; + float cNdotH = max(dot(N,H), 0.0 ); + float intensity = pow( cNdotH, (1.0-roughness) * 256.0); + specular_light += light_color * intensity * specular_blob_intensity * attenuation; #elif defined(SPECULAR_PHONG) vec3 R = normalize(-reflect(L,N)); - float dotNV = max(0.0,dot(R,V)); - float intensity = pow( dotNV, (1.0-roughness) * 256.0); - specular += light_color * intensity * specular_blob_intensity; + float cRdotV = max(0.0,dot(R,V)); + float intensity = pow( cRdotV, (1.0-roughness) * 256.0); + specular_light += light_color * intensity * specular_blob_intensity * attenuation; #elif defined(SPECULAR_TOON) vec3 R = normalize(-reflect(L,N)); - float dotNV = dot(R,V); + float RdotV = dot(R,V); float mid = 1.0-roughness; mid*=mid; - float intensity = smoothstep(mid-roughness*0.5,mid+roughness*0.5,dotNV) * mid; - diffuse += light_color * intensity * specular_blob_intensity; //write to diffuse, as in toon shading you generally want no reflection + float intensity = smoothstep(mid-roughness*0.5, mid+roughness*0.5, RdotV) * mid; + diffuse_light += light_color * intensity * specular_blob_intensity * attenuation; // write to diffuse_light, as in toon shading you generally want no reflection #elif defined(SPECULAR_DISABLED) //none.. -#else +#elif defined(SPECULAR_GGX) // shlick+ggx as default - float alpha = roughness * roughness; vec3 H = normalize(V + L); - float dotNH = max(dot(N,H), 0.0 ); - float dotLH = max(dot(L,H), 0.0 ); + float cNdotH = max(dot(N,H), 0.0); + float cLdotH = max(dot(L,H), 0.0); #if defined(LIGHT_USE_ANISOTROPY) @@ -1022,38 +1080,43 @@ LIGHT_SHADER_CODE float ry = roughness*aspect; float ax = rx*rx; float ay = ry*ry; - float dotXH = dot( T, H ); - float dotYH = dot( B, H ); - float pi = M_PI; - float denom = dotXH*dotXH / (ax*ax) + dotYH*dotYH / (ay*ay) + dotNH*dotNH; - float D = 1.0 / ( pi * ax*ay * denom*denom ); + float XdotH = dot( T, H ); + float YdotH = dot( B, H ); + float D = D_GGX_anisotropic(cNdotH, ax, ay, XdotH, YdotH); + float G = G_GGX_anisotropic_2cos(cNdotL, ax, ay, XdotH, YdotH) * G_GGX_anisotropic_2cos(cNdotV, ax, ay, XdotH, YdotH); #else - float alphaSqr = alpha * alpha; - float pi = M_PI; - float denom = dotNH * dotNH * (alphaSqr - 1.0) + 1.0; - float D = alphaSqr / (pi * denom * denom); + float alpha = roughness * roughness; + float D = D_GGX(cNdotH, alpha); + float G = G_GGX_2cos(cNdotL, alpha) * G_GGX_2cos(cNdotV, alpha); #endif // F - float F0 = 1.0; - float dotLH5 = SchlickFresnel( dotLH ); - float F = F0 + (1.0 - F0) * (dotLH5); - - // V - float k = alpha / 2.0f; - float vis = G1V(dotNL, k) * G1V(dotNV, k); + float F0 = 1.0; // FIXME + float cLdotH5 = SchlickFresnel(cLdotH); + float F = mix(cLdotH5, 1.0, F0); - float speci = dotNL * D * F * vis; + float specular_brdf_NL = cNdotL * D * F * G; - specular += speci * light_color * specular_blob_intensity; + specular_light += specular_brdf_NL * light_color * specular_blob_intensity * attenuation; #endif #if defined(LIGHT_USE_CLEARCOAT) - float Dr = GTR1(dotNH, mix(.1,.001,clearcoat_gloss)); - float Fr = mix(.04, 1.0, dotLH5); - float Gr = G1V(dotNL, .25) * G1V(dotNV, .25); + if (clearcoat_gloss > 0.0) { +# if !defined(SPECULAR_GGX) && !defined(SPECULAR_BLINN) + vec3 H = normalize(V + L); +# endif +# if !defined(SPECULAR_GGX) + float cNdotH = max(dot(N,H), 0.0); + float cLdotH = max(dot(L,H), 0.0); + float cLdotH5 = SchlickFresnel(cLdotH); +#endif + float Dr = GTR1(cNdotH, mix(.1, .001, clearcoat_gloss)); + float Fr = mix(.04, 1.0, cLdotH5); + float Gr = G_GGX_2cos(cNdotL, .25) * G_GGX_2cos(cNdotV, .25); - specular += .25*clearcoat*Gr*Fr*Dr; + + specular_light += .25*clearcoat*Gr*Fr*Dr; + } #endif } @@ -1081,9 +1144,7 @@ float sample_shadow(highp sampler2DShadow shadow, vec2 shadow_pixel_size, vec2 p avg+=textureProj(shadow,vec4(pos+vec2(0.0,-shadow_pixel_size.y*2.0),depth,1.0)); return avg*(1.0/13.0); -#endif - -#ifdef SHADOW_MODE_PCF_5 +#elif defined(SHADOW_MODE_PCF_5) float avg=textureProj(shadow,vec4(pos,depth,1.0)); avg+=textureProj(shadow,vec4(pos+vec2(shadow_pixel_size.x,0.0),depth,1.0)); @@ -1091,11 +1152,11 @@ float sample_shadow(highp sampler2DShadow shadow, vec2 shadow_pixel_size, vec2 p avg+=textureProj(shadow,vec4(pos+vec2(0.0,shadow_pixel_size.y),depth,1.0)); avg+=textureProj(shadow,vec4(pos+vec2(0.0,-shadow_pixel_size.y),depth,1.0)); return avg*(1.0/5.0); -#endif -#if !defined(SHADOW_MODE_PCF_5) && !defined(SHADOW_MODE_PCF_13) +#else return textureProj(shadow,vec4(pos,depth,1.0)); + #endif } @@ -1137,7 +1198,7 @@ vec3 light_transmittance(float translucency,vec3 light_vec, vec3 normal, vec3 po } #endif -void light_process_omni(int idx, vec3 vertex, vec3 eye_vec,vec3 normal,vec3 binormal, vec3 tangent, vec3 albedo, vec3 transmission, float roughness, float rim, float rim_tint, float clearcoat, float clearcoat_gloss,float anisotropy,float p_blob_intensity,inout vec3 diffuse_light, inout vec3 specular_light) { +void light_process_omni(int idx, vec3 vertex, vec3 eye_vec,vec3 normal,vec3 binormal, vec3 tangent, vec3 albedo, vec3 transmission, float roughness, float metallic, float rim, float rim_tint, float clearcoat, float clearcoat_gloss, float anisotropy, float p_blob_intensity, inout vec3 diffuse_light, inout vec3 specular_light) { vec3 light_rel_vec = omni_lights[idx].light_pos_inv_radius.xyz-vertex; float light_length = length( light_rel_vec ); @@ -1191,11 +1252,11 @@ void light_process_omni(int idx, vec3 vertex, vec3 eye_vec,vec3 normal,vec3 bino light_attenuation*=mix(omni_lights[idx].shadow_color_contact.rgb,vec3(1.0),shadow); } - light_compute(normal,normalize(light_rel_vec),eye_vec,binormal,tangent,omni_lights[idx].light_color_energy.rgb*light_attenuation,albedo,transmission,omni_lights[idx].light_params.z*p_blob_intensity,roughness,rim,rim_tint,clearcoat,clearcoat_gloss,anisotropy,diffuse_light,specular_light); + light_compute(normal,normalize(light_rel_vec),eye_vec,binormal,tangent,omni_lights[idx].light_color_energy.rgb,light_attenuation,albedo,transmission,omni_lights[idx].light_params.z*p_blob_intensity,roughness,metallic,rim,rim_tint,clearcoat,clearcoat_gloss,anisotropy,diffuse_light,specular_light); } -void light_process_spot(int idx, vec3 vertex, vec3 eye_vec, vec3 normal, vec3 binormal, vec3 tangent,vec3 albedo, vec3 transmission,float roughness, float rim,float rim_tint, float clearcoat, float clearcoat_gloss,float anisotropy,float p_blob_intensity, inout vec3 diffuse_light, inout vec3 specular_light) { +void light_process_spot(int idx, vec3 vertex, vec3 eye_vec, vec3 normal, vec3 binormal, vec3 tangent,vec3 albedo, vec3 transmission,float roughness, float metallic, float rim, float rim_tint, float clearcoat, float clearcoat_gloss,float anisotropy,float p_blob_intensity, inout vec3 diffuse_light, inout vec3 specular_light) { vec3 light_rel_vec = spot_lights[idx].light_pos_inv_radius.xyz-vertex; float light_length = length( light_rel_vec ); @@ -1225,7 +1286,7 @@ void light_process_spot(int idx, vec3 vertex, vec3 eye_vec, vec3 normal, vec3 bi light_attenuation*=mix(spot_lights[idx].shadow_color_contact.rgb,vec3(1.0),shadow); } - light_compute(normal,normalize(light_rel_vec),eye_vec,binormal,tangent,spot_lights[idx].light_color_energy.rgb*light_attenuation,albedo,transmission,spot_lights[idx].light_params.z*p_blob_intensity,roughness,rim,rim_tint,clearcoat,clearcoat_gloss,anisotropy,diffuse_light,specular_light); + light_compute(normal,normalize(light_rel_vec),eye_vec,binormal,tangent,spot_lights[idx].light_color_energy.rgb,light_attenuation,albedo,transmission,spot_lights[idx].light_params.z*p_blob_intensity,roughness,metallic,rim,rim_tint,clearcoat,clearcoat_gloss,anisotropy,diffuse_light,specular_light); } @@ -1534,6 +1595,7 @@ void main() { #if defined(ENABLE_AO) float ao=1.0; + float ao_light_affect=0.0; #endif float alpha = 1.0; @@ -1857,7 +1919,7 @@ FRAGMENT_SHADER_CODE specular_light*=mix(vec3(1.0),light_attenuation,specular_light_interp.a); #else - light_compute(normal,-light_direction_attenuation.xyz,eye_vec,binormal,tangent,light_color_energy.rgb*light_attenuation,albedo,transmission,light_params.z*specular_blob_intensity,roughness,rim,rim_tint,clearcoat,clearcoat_gloss,anisotropy,diffuse_light,specular_light); + light_compute(normal,-light_direction_attenuation.xyz,eye_vec,binormal,tangent,light_color_energy.rgb,light_attenuation,albedo,transmission,light_params.z*specular_blob_intensity,roughness,metallic,rim,rim_tint,clearcoat,clearcoat_gloss,anisotropy,diffuse_light,specular_light); #endif @@ -1895,11 +1957,11 @@ FRAGMENT_SHADER_CODE #else for(int i=0;i<omni_light_count;i++) { - light_process_omni(omni_light_indices[i],vertex,eye_vec,normal,binormal,tangent,albedo,transmission,roughness,rim,rim_tint,clearcoat,clearcoat_gloss,anisotropy,specular_blob_intensity,diffuse_light,specular_light); + light_process_omni(omni_light_indices[i],vertex,eye_vec,normal,binormal,tangent,albedo,transmission,roughness,metallic,rim,rim_tint,clearcoat,clearcoat_gloss,anisotropy,specular_blob_intensity,diffuse_light,specular_light); } for(int i=0;i<spot_light_count;i++) { - light_process_spot(spot_light_indices[i],vertex,eye_vec,normal,binormal,tangent,albedo,transmission,roughness,rim,rim_tint,clearcoat,clearcoat_gloss,anisotropy,specular_blob_intensity,diffuse_light,specular_light); + light_process_spot(spot_light_indices[i],vertex,eye_vec,normal,binormal,tangent,albedo,transmission,roughness,metallic,rim,rim_tint,clearcoat,clearcoat_gloss,anisotropy,specular_blob_intensity,diffuse_light,specular_light); } #endif //USE_VERTEX_LIGHTING @@ -1918,12 +1980,16 @@ FRAGMENT_SHADER_CODE #if defined(ENABLE_AO) ambient_light*=ao; + ao_light_affect = mix(1.0,ao,ao_light_affect); + specular_light*=ao_light_affect; + diffuse_light*=ao_light_affect; #endif - //energu conservation - diffuse_light=mix(diffuse_light,vec3(0.0),metallic); - ambient_light=mix(ambient_light,vec3(0.0),metallic); + + //energy conservation + diffuse_light *= 1.0-metallic; // TODO: avoid all diffuse and ambient light calculations when metallic == 1 up to this point + ambient_light *= 1.0-metallic; { @@ -1932,18 +1998,17 @@ FRAGMENT_SHADER_CODE //simplify for toon, as specular_light *= specular * metallic * albedo * 2.0; #else - //brdf approximation (Lazarov 2013) - float ndotv = clamp(dot(normal,eye_vec),0.0,1.0); - vec3 dielectric = vec3(0.034) * specular * 2.0; - //energy conservation - vec3 f0 = mix(dielectric, albedo, metallic); + // Environment brdf approximation (Lazarov 2013) + // see https://www.unrealengine.com/en-US/blog/physically-based-shading-on-mobile const vec4 c0 = vec4(-1.0, -0.0275, -0.572, 0.022); const vec4 c1 = vec4( 1.0, 0.0425, 1.04, -0.04); vec4 r = roughness * c0 + c1; + float ndotv = clamp(dot(normal,eye_vec),0.0,1.0); float a004 = min( r.x * r.x, exp2( -9.28 * ndotv ) ) * r.x + r.y; - vec2 brdf = vec2( -1.04, 1.04 ) * a004 + r.zw; + vec2 AB = vec2( -1.04, 1.04 ) * a004 + r.zw; - specular_light *= min(1.0,50.0 * f0.g) * brdf.y + brdf.x * f0; + vec3 specular_color = metallic_to_specular_color(metallic, specular, albedo); + specular_light *= AB.x * specular_color + AB.y; #endif } @@ -2042,5 +2107,3 @@ FRAGMENT_SHADER_CODE } - - diff --git a/drivers/gles3/shaders/subsurf_scattering.glsl b/drivers/gles3/shaders/subsurf_scattering.glsl index 20c3b7473f..fc66d66198 100644 --- a/drivers/gles3/shaders/subsurf_scattering.glsl +++ b/drivers/gles3/shaders/subsurf_scattering.glsl @@ -82,18 +82,18 @@ QUALIFIER vec2 kernel[17] = vec2[]( const int kernel_size=11; -QUALIFIER vec4 kernel[11] = vec4[]( - vec4(0.560479, 0.0), - vec4(0.00471691, -2.0), - vec4(0.0192831, -1.28), - vec4(0.03639, -0.72), - vec4(0.0821904, -0.32), - vec4(0.0771802, -0.08), - vec4(0.0771802, 0.08), - vec4(0.0821904, 0.32), - vec4(0.03639, 0.72), - vec4(0.0192831, 1.28), - vec4(0.00471691,2.0) +QUALIFIER vec2 kernel[11] = vec2[]( + vec2(0.560479, 0.0), + vec2(0.00471691, -2.0), + vec2(0.0192831, -1.28), + vec2(0.03639, -0.72), + vec2(0.0821904, -0.32), + vec2(0.0771802, -0.08), + vec2(0.0771802, 0.08), + vec2(0.0821904, 0.32), + vec2(0.03639, 0.72), + vec2(0.0192831, 1.28), + vec2(0.00471691,2.0) ); #endif //USE_11_SAMPLES @@ -190,4 +190,3 @@ void main() { frag_color = base_color; } } - diff --git a/drivers/gles3/shaders/tonemap.glsl b/drivers/gles3/shaders/tonemap.glsl index 73dec4f90c..2f671158b2 100644 --- a/drivers/gles3/shaders/tonemap.glsl +++ b/drivers/gles3/shaders/tonemap.glsl @@ -175,12 +175,9 @@ vec3 tonemap_reindhart(vec3 color,float white) { return ( color * ( 1.0 + ( color / ( white) ) ) ) / ( 1.0 + color ); } - void main() { - ivec2 coord = ivec2(gl_FragCoord.xy); - vec3 color = texelFetch(source,coord,0).rgb; - + vec4 color = textureLod(source, uv_interp, 0.0); #ifdef USE_AUTO_EXPOSURE @@ -324,5 +321,3 @@ void main() { frag_color=vec4(color.rgb,1.0); } - - diff --git a/drivers/png/SCsub b/drivers/png/SCsub index 6684e36b20..39480351a6 100644 --- a/drivers/png/SCsub +++ b/drivers/png/SCsub @@ -5,7 +5,7 @@ Import('env') env_png = env.Clone() # Thirdparty source files -if (env['builtin_libpng'] != 'no'): +if env['builtin_libpng']: thirdparty_dir = "#thirdparty/libpng/" thirdparty_sources = [ "png.c", diff --git a/drivers/unix/file_access_unix.cpp b/drivers/unix/file_access_unix.cpp index e19bc738cb..206f57d4a2 100644 --- a/drivers/unix/file_access_unix.cpp +++ b/drivers/unix/file_access_unix.cpp @@ -168,7 +168,7 @@ void FileAccessUnix::seek_end(int64_t p_position) { check_errors(); } -size_t FileAccessUnix::get_pos() const { +size_t FileAccessUnix::get_position() const { ERR_FAIL_COND_V(!f, 0); @@ -223,6 +223,12 @@ Error FileAccessUnix::get_error() const { return last_error; } +void FileAccessUnix::flush() { + + ERR_FAIL_COND(!f); + fflush(f); +} + void FileAccessUnix::store_8(uint8_t p_dest) { ERR_FAIL_COND(!f); diff --git a/drivers/unix/file_access_unix.h b/drivers/unix/file_access_unix.h index c5ab8821be..96f2ff8e26 100644 --- a/drivers/unix/file_access_unix.h +++ b/drivers/unix/file_access_unix.h @@ -62,7 +62,7 @@ public: virtual void seek(size_t p_position); ///< seek to a given position virtual void seek_end(int64_t p_position = 0); ///< seek from the end of file - virtual size_t get_pos() const; ///< get position in the file + virtual size_t get_position() const; ///< get position in the file virtual size_t get_len() const; ///< get size of the file virtual bool eof_reached() const; ///< reading passed EOF @@ -72,6 +72,7 @@ public: virtual Error get_error() const; ///< get last error + virtual void flush(); virtual void store_8(uint8_t p_dest); ///< store a byte virtual bool file_exists(const String &p_path); ///< return true if a file exists diff --git a/drivers/unix/os_unix.cpp b/drivers/unix/os_unix.cpp index 75c8a153f6..2a3d48746f 100644 --- a/drivers/unix/os_unix.cpp +++ b/drivers/unix/os_unix.cpp @@ -64,39 +64,7 @@ #include <string.h> #include <sys/time.h> #include <sys/wait.h> - -extern bool _print_error_enabled; - -void OS_Unix::print_error(const char *p_function, const char *p_file, int p_line, const char *p_code, const char *p_rationale, ErrorType p_type) { - - if (!_print_error_enabled) - return; - - const char *err_details; - if (p_rationale && p_rationale[0]) - err_details = p_rationale; - else - err_details = p_code; - - switch (p_type) { - case ERR_ERROR: - print("\E[1;31mERROR: %s: \E[0m\E[1m%s\n", p_function, err_details); - print("\E[0;31m At: %s:%i.\E[0m\n", p_file, p_line); - break; - case ERR_WARNING: - print("\E[1;33mWARNING: %s: \E[0m\E[1m%s\n", p_function, err_details); - print("\E[0;33m At: %s:%i.\E[0m\n", p_file, p_line); - break; - case ERR_SCRIPT: - print("\E[1;35mSCRIPT ERROR: %s: \E[0m\E[1m%s\n", p_function, err_details); - print("\E[0;35m At: %s:%i.\E[0m\n", p_file, p_line); - break; - case ERR_SHADER: - print("\E[1;36mSHADER ERROR: %s: \E[0m\E[1m%s\n", p_function, err_details); - print("\E[0;36m At: %s:%i.\E[0m\n", p_file, p_line); - break; - } -} +#include <unistd.h> void OS_Unix::debug_break() { @@ -165,29 +133,16 @@ void OS_Unix::initialize_core() { } } -void OS_Unix::finalize_core() { +void OS_Unix::initialize_logger() { + Vector<Logger *> loggers; + loggers.push_back(memnew(UnixTerminalLogger)); + loggers.push_back(memnew(RotatedFileLogger("user://logs/log.txt"))); + _set_logger(memnew(CompositeLogger(loggers))); } -void OS_Unix::vprint(const char *p_format, va_list p_list, bool p_stder) { - - if (p_stder) { - - vfprintf(stderr, p_format, p_list); - fflush(stderr); - } else { - - vprintf(p_format, p_list); - fflush(stdout); - } +void OS_Unix::finalize_core() { } -void OS_Unix::print(const char *p_format, ...) { - - va_list argp; - va_start(argp, p_format); - vprintf(p_format, argp); - va_end(argp); -} void OS_Unix::alert(const String &p_alert, const String &p_title) { fprintf(stderr, "ERROR: %s\n", p_alert.utf8().get_data()); @@ -330,7 +285,7 @@ uint64_t OS_Unix::get_ticks_usec() const { return longtime; } -Error OS_Unix::execute(const String &p_path, const List<String> &p_arguments, bool p_blocking, ProcessID *r_child_id, String *r_pipe, int *r_exitcode) { +Error OS_Unix::execute(const String &p_path, const List<String> &p_arguments, bool p_blocking, ProcessID *r_child_id, String *r_pipe, int *r_exitcode, bool read_stderr) { if (p_blocking && r_pipe) { @@ -342,7 +297,11 @@ Error OS_Unix::execute(const String &p_path, const List<String> &p_arguments, bo argss += String(" \"") + p_arguments[i] + "\""; } - argss += " 2>/dev/null"; //silence stderr + if (read_stderr) { + argss += " 2>&1"; // Read stderr too + } else { + argss += " 2>/dev/null"; //silence stderr + } FILE *f = popen(argss.utf8().get_data(), "r"); ERR_FAIL_COND_V(!f, ERR_CANT_OPEN); @@ -384,7 +343,7 @@ Error OS_Unix::execute(const String &p_path, const List<String> &p_arguments, bo execvp(getprogname(), &args[0]); } #else - execv(p_path.utf8().get_data(), &args[0]); + execvp(p_path.utf8().get_data(), &args[0]); #endif // still alive? something failed.. fprintf(stderr, "**ERROR** OS_Unix::execute - Could not create child process while executing: %s\n", p_path.utf8().get_data()); @@ -559,4 +518,38 @@ String OS_Unix::get_executable_path() const { #endif } +void UnixTerminalLogger::log_error(const char *p_function, const char *p_file, int p_line, const char *p_code, const char *p_rationale, ErrorType p_type) { + if (!should_log(true)) { + return; + } + + const char *err_details; + if (p_rationale && p_rationale[0]) + err_details = p_rationale; + else + err_details = p_code; + + switch (p_type) { + case ERR_WARNING: + logf_error("\E[1;33mWARNING: %s: \E[0m\E[1m%s\n", p_function, err_details); + logf_error("\E[0;33m At: %s:%i.\E[0m\n", p_file, p_line); + break; + case ERR_SCRIPT: + logf_error("\E[1;35mSCRIPT ERROR: %s: \E[0m\E[1m%s\n", p_function, err_details); + logf_error("\E[0;35m At: %s:%i.\E[0m\n", p_file, p_line); + break; + case ERR_SHADER: + logf_error("\E[1;36mSHADER ERROR: %s: \E[0m\E[1m%s\n", p_function, err_details); + logf_error("\E[0;36m At: %s:%i.\E[0m\n", p_file, p_line); + break; + case ERR_ERROR: + default: + logf_error("\E[1;31mERROR: %s: \E[0m\E[1m%s\n", p_function, err_details); + logf_error("\E[0;31m At: %s:%i.\E[0m\n", p_file, p_line); + break; + } +} + +UnixTerminalLogger::~UnixTerminalLogger() {} + #endif diff --git a/drivers/unix/os_unix.h b/drivers/unix/os_unix.h index 19e79728fb..87e73534c4 100644 --- a/drivers/unix/os_unix.h +++ b/drivers/unix/os_unix.h @@ -54,11 +54,11 @@ protected: virtual int get_audio_driver_count() const; virtual const char *get_audio_driver_name(int p_driver) const; + virtual void initialize_logger(); virtual void initialize_core(); virtual int unix_initialize_audio(int p_audio_driver); //virtual void initialize(int p_video_driver,int p_audio_driver); - //virtual void finalize(); virtual void finalize_core(); String stdin_buf; @@ -66,10 +66,6 @@ protected: String get_global_settings_path() const; public: - virtual 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 = ERR_ERROR); - - virtual void print(const char *p_format, ...); - virtual void vprint(const char *p_format, va_list p_list, bool p_stder = false); virtual void alert(const String &p_alert, const String &p_title = "ALERT!"); virtual String get_stdin_string(bool p_block); @@ -101,7 +97,7 @@ public: virtual void delay_usec(uint32_t p_usec) const; virtual uint64_t get_ticks_usec() const; - virtual Error execute(const String &p_path, const List<String> &p_arguments, bool p_blocking, ProcessID *r_child_id = NULL, String *r_pipe = NULL, int *r_exitcode = NULL); + virtual Error execute(const String &p_path, const List<String> &p_arguments, bool p_blocking, ProcessID *r_child_id = NULL, String *r_pipe = NULL, int *r_exitcode = NULL, bool read_stderr = false); virtual Error kill(const ProcessID &p_pid); virtual int get_process_id() const; @@ -120,6 +116,12 @@ public: //virtual void run( MainLoop * p_main_loop ); }; +class UnixTerminalLogger : public StdLogger { +public: + virtual void log_error(const char *p_function, const char *p_file, int p_line, const char *p_code, const char *p_rationale, ErrorType p_type = ERR_ERROR); + virtual ~UnixTerminalLogger(); +}; + #endif #endif diff --git a/drivers/unix/syslog_logger.cpp b/drivers/unix/syslog_logger.cpp new file mode 100644 index 0000000000..d57f391325 --- /dev/null +++ b/drivers/unix/syslog_logger.cpp @@ -0,0 +1,71 @@ +/*************************************************************************/ +/* syslog_logger.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 UNIX_ENABLED + +#include "syslog_logger.h" +#include "print_string.h" +#include <syslog.h> + +void SyslogLogger::logv(const char *p_format, va_list p_list, bool p_err) { + if (!should_log(p_err)) { + return; + } + + vsyslog(p_err ? LOG_ERR : LOG_INFO, p_format, p_list); +} + +void SyslogLogger::print_error(const char *p_function, const char *p_file, int p_line, const char *p_code, const char *p_rationale, ErrorType p_type) { + if (!should_log(true)) { + return; + } + + const char *err_type = "**ERROR**"; + switch (p_type) { + case ERR_ERROR: err_type = "**ERROR**"; break; + case ERR_WARNING: err_type = "**WARNING**"; break; + case ERR_SCRIPT: err_type = "**SCRIPT ERROR**"; break; + case ERR_SHADER: err_type = "**SHADER ERROR**"; break; + default: ERR_PRINT("Unknown error type"); break; + } + + const char *err_details; + if (p_rationale && *p_rationale) + err_details = p_rationale; + else + err_details = p_code; + + syslog(p_type == ERR_WARNING ? LOG_WARNING : LOG_ERR, "%s: %s\n At: %s:%i:%s() - %s", err_type, err_details, p_file, p_line, p_function, p_code); +} + +SyslogLogger::~SyslogLogger() { +} + +#endif
\ No newline at end of file diff --git a/drivers/unix/syslog_logger.h b/drivers/unix/syslog_logger.h new file mode 100644 index 0000000000..b3cf2f9e3a --- /dev/null +++ b/drivers/unix/syslog_logger.h @@ -0,0 +1,48 @@ +/*************************************************************************/ +/* syslog_logger.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 SYSLOG_LOGGER_H +#define SYSLOG_LOGGER_H + +#ifdef UNIX_ENABLED + +#include "io/logger.h" + +class SyslogLogger : public Logger { +public: + virtual void logv(const char *p_format, va_list p_list, bool p_err); + virtual 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 ~SyslogLogger(); +}; + +#endif + +#endif
\ No newline at end of file diff --git a/drivers/windows/dir_access_windows.cpp b/drivers/windows/dir_access_windows.cpp index 6d6a6027d9..0bc4201ba3 100644 --- a/drivers/windows/dir_access_windows.cpp +++ b/drivers/windows/dir_access_windows.cpp @@ -162,10 +162,10 @@ Error DirAccessWindows::make_dir(String p_dir) { GLOBAL_LOCK_FUNCTION + p_dir = fix_path(p_dir); if (p_dir.is_rel_path()) - p_dir = get_current_dir().plus_file(p_dir); + p_dir = current_dir.plus_file(p_dir); - p_dir = fix_path(p_dir); p_dir = p_dir.replace("/", "\\"); bool success; diff --git a/drivers/windows/file_access_windows.cpp b/drivers/windows/file_access_windows.cpp index fe2069089c..3b6e469c9c 100644 --- a/drivers/windows/file_access_windows.cpp +++ b/drivers/windows/file_access_windows.cpp @@ -156,7 +156,7 @@ void FileAccessWindows::seek_end(int64_t p_position) { if (fseek(f, p_position, SEEK_END)) check_errors(); } -size_t FileAccessWindows::get_pos() const { +size_t FileAccessWindows::get_position() const { size_t aux_position = 0; aux_position = ftell(f); @@ -169,9 +169,9 @@ size_t FileAccessWindows::get_len() const { ERR_FAIL_COND_V(!f, 0); - size_t pos = get_pos(); + size_t pos = get_position(); fseek(f, 0, SEEK_END); - int size = get_pos(); + int size = get_position(); fseek(f, pos, SEEK_SET); return size; @@ -207,6 +207,12 @@ Error FileAccessWindows::get_error() const { return last_error; } +void FileAccessWindows::flush() { + + ERR_FAIL_COND(!f); + fflush(f); +} + void FileAccessWindows::store_8(uint8_t p_dest) { ERR_FAIL_COND(!f); diff --git a/drivers/windows/file_access_windows.h b/drivers/windows/file_access_windows.h index 6956e7855a..e5e7fd4a13 100644 --- a/drivers/windows/file_access_windows.h +++ b/drivers/windows/file_access_windows.h @@ -54,7 +54,7 @@ public: virtual void seek(size_t p_position); ///< seek to a given position virtual void seek_end(int64_t p_position = 0); ///< seek from the end of file - virtual size_t get_pos() const; ///< get position in the file + virtual size_t get_position() const; ///< get position in the file virtual size_t get_len() const; ///< get size of the file virtual bool eof_reached() const; ///< reading passed EOF @@ -64,6 +64,7 @@ public: virtual Error get_error() const; ///< get last error + virtual void flush(); virtual void store_8(uint8_t p_dest); ///< store a byte virtual bool file_exists(const String &p_name); ///< return true if a file exists diff --git a/editor/SCsub b/editor/SCsub index 315865ad32..2b6494608b 100644 --- a/editor/SCsub +++ b/editor/SCsub @@ -4,7 +4,7 @@ Import('env') env.editor_sources = [] import os -from compat import encode_utf8, byte_to_str, open_utf8 +from compat import encode_utf8, byte_to_str, open_utf8, escape_string def make_certs_header(target, source, env): @@ -162,7 +162,7 @@ def make_authors_header(target, source, env): for line in f: if reading: if line.startswith(" "): - g.write("\t\"" + line.strip() + "\",\n") + g.write("\t\"" + escape_string(line.strip()) + "\",\n") continue if line.startswith("## "): if reading: @@ -170,7 +170,7 @@ def make_authors_header(target, source, env): reading = False for i in range(len(sections)): if line.strip().endswith(sections[i]): - current_section = sections_id[i] + current_section = escape_string(sections_id[i]) reading = True g.write("static const char *" + current_section + "[] = {\n") break @@ -204,7 +204,7 @@ def make_donors_header(target, source, env): for line in f: if reading >= 0: if line.startswith(" "): - g.write("\t\"" + line.strip() + "\",\n") + g.write("\t\"" + escape_string(line.strip()) + "\",\n") continue if line.startswith("## "): if reading: @@ -212,7 +212,7 @@ def make_donors_header(target, source, env): reading = False for i in range(len(sections)): if line.strip().endswith(sections[i]): - current_section = sections_id[i] + current_section = escape_string(sections_id[i]) reading = True g.write("static const char *" + current_section + "[] = {\n") break @@ -237,7 +237,8 @@ def make_license_header(target, source, env): g.write("static const char *about_license =") for line in f: - g.write("\n\t\"" + line.strip().replace("\"", "\\\"") + "\\n\"") + escaped_string = escape_string(line.strip()) + g.write("\n\t\"" + escaped_string + "\\n\"") g.write(";\n") @@ -322,11 +323,13 @@ def make_license_header(target, source, env): for k in j[0].split("\n"): if file_body != "": file_body += "\\n\"\n" - file_body += "\t\"" + k.strip().replace("\"", "\\\"") + escaped_string = escape_string(k.strip()) + file_body += "\t\"" + escaped_string for k in j[1].split("\n"): if copyright_body != "": copyright_body += "\\n\"\n" - copyright_body += "\t\"" + k.strip().replace("\"", "\\\"") + escaped_string = escape_string(k.strip()) + copyright_body += "\t\"" + escaped_string about_tp_file += "\t" + file_body + "\",\n" about_tp_copyright += "\t" + copyright_body + "\",\n" @@ -340,7 +343,8 @@ def make_license_header(target, source, env): for j in i[1].split("\n"): if body != "": body += "\\n\"\n" - body += "\t\"" + j.strip().replace("\"", "\\\"") + escaped_string = escape_string(j.strip()) + body += "\t\"" + escaped_string about_license_name += "\t\"" + i[0] + "\",\n" about_license_body += "\t" + body + "\",\n" @@ -395,8 +399,8 @@ def _make_doc_data_class_path(to_path): g.write("{NULL,NULL}\n") g.write("};\n") -if (env["tools"] == "yes"): +if env['tools']: # Register exporters reg_exporters_inc = '#include "register_exporters.h"\n' reg_exporters = 'void register_exporters() {\n' @@ -411,12 +415,11 @@ if (env["tools"] == "yes"): f.close() # API documentation - docs=[] - print("cdir is: "+env.Dir('#').abspath) - for f in os.listdir(os.path.join(env.Dir('#').abspath,"doc/classes")): - docs.append("#doc/classes/"+f) + docs = [] + for f in os.listdir(os.path.join(env.Dir('#').abspath, "doc/classes")): + docs.append("#doc/classes/" + f) - _make_doc_data_class_path(os.path.join(env.Dir('#').abspath,"editor/doc")) + _make_doc_data_class_path(os.path.join(env.Dir('#').abspath, "editor/doc")) env.Depends("#editor/doc_data_compressed.gen.h", docs) env.Command("#editor/doc_data_compressed.gen.h", docs, make_doc_header) diff --git a/editor/animation_editor.cpp b/editor/animation_editor.cpp index 96e5627bef..54eb695178 100644 --- a/editor/animation_editor.cpp +++ b/editor/animation_editor.cpp @@ -64,6 +64,8 @@ private: float transition; Mode mode; + LineEdit *value_edit; + void _notification(int p_what) { if (p_what == NOTIFICATION_DRAW) { @@ -144,14 +146,11 @@ private: } } - String txt = String::num(exp, 2); if (mode == MODE_DISABLED) { - txt = TTR("Disabled"); + f->draw(ci, Point2(5, 5 + f->get_ascent()), TTR("Disabled"), color); } else if (mode == MODE_MULTIPLE) { - txt += " - " + TTR("All Selection"); + f->draw(ci, Point2(5, 5 + f->get_ascent() + value_edit->get_size().height), TTR("All Selection"), color); } - - f->draw(ci, Point2(10, 10 + f->get_ascent()), txt, color); } } @@ -163,6 +162,8 @@ private: if (mode == MODE_DISABLED) return; + value_edit->release_focus(); + float rel = mm->get_relative().x; if (rel == 0) return; @@ -187,24 +188,28 @@ private: if (sg) val = -val; - transition = val; - update(); - //emit_signal("variant_changed"); - emit_signal("transition_changed", transition); + force_transition(val); } } + void _edit_value_changed(const String &p_value_str) { + + force_transition(p_value_str.to_float()); + } + public: static void _bind_methods() { //ClassDB::bind_method("_update_obj",&AnimationKeyEdit::_update_obj); ClassDB::bind_method("_gui_input", &AnimationCurveEdit::_gui_input); + ClassDB::bind_method("_edit_value_changed", &AnimationCurveEdit::_edit_value_changed); ADD_SIGNAL(MethodInfo("transition_changed")); } void set_mode(Mode p_mode) { mode = p_mode; + value_edit->set_visible(mode != MODE_DISABLED); update(); } @@ -218,7 +223,8 @@ public: } void set_transition(float p_transition) { - transition = p_transition; + transition = Math::stepify(p_transition, 0.01); + value_edit->set_text(String::num(transition)); update(); } @@ -229,9 +235,8 @@ public: void force_transition(float p_value) { if (mode == MODE_DISABLED) return; - transition = p_value; + set_transition(p_value); emit_signal("transition_changed", p_value); - update(); } AnimationCurveEdit() { @@ -239,6 +244,11 @@ public: transition = 1.0; set_default_cursor_shape(CURSOR_HSPLIT); mode = MODE_DISABLED; + + value_edit = memnew(LineEdit); + value_edit->hide(); + value_edit->connect("text_entered", this, "_edit_value_changed"); + add_child(value_edit); } }; @@ -322,7 +332,7 @@ public: undo_redo->add_do_method(animation.ptr(), "track_remove_key", track, key); undo_redo->add_do_method(animation.ptr(), "track_insert_key", track, new_time, val, trans); undo_redo->add_do_method(this, "_key_ofs_changed", animation, key_ofs, new_time); - undo_redo->add_undo_method(animation.ptr(), "track_remove_key_at_pos", track, new_time); + undo_redo->add_undo_method(animation.ptr(), "track_remove_key_at_position", track, new_time); undo_redo->add_undo_method(animation.ptr(), "track_insert_key", track, key_ofs, val, trans); undo_redo->add_undo_method(this, "_key_ofs_changed", animation, new_time, key_ofs); @@ -563,8 +573,8 @@ public: case Animation::TYPE_TRANSFORM: { - p_list->push_back(PropertyInfo(Variant::VECTOR3, "loc")); - p_list->push_back(PropertyInfo(Variant::QUAT, "rot")); + p_list->push_back(PropertyInfo(Variant::VECTOR3, "location")); + p_list->push_back(PropertyInfo(Variant::QUAT, "rotation")); p_list->push_back(PropertyInfo(Variant::VECTOR3, "scale")); } break; @@ -719,7 +729,7 @@ void AnimationKeyEditor::_anim_duplicate_keys(bool transpose) { int existing_idx = animation->track_find_key(dst_track, dst_time, true); undo_redo->add_do_method(animation.ptr(), "track_insert_key", dst_track, dst_time, animation->track_get_key_value(E->key().track, E->key().key), animation->track_get_key_transition(E->key().track, E->key().key)); - undo_redo->add_undo_method(animation.ptr(), "track_remove_key_at_pos", dst_track, dst_time); + undo_redo->add_undo_method(animation.ptr(), "track_remove_key_at_position", dst_track, dst_time); Pair<int, float> p; p.first = dst_track; @@ -1016,7 +1026,7 @@ float AnimationKeyEditor::_get_zoom_scale() const { } } -void AnimationKeyEditor::_track_pos_draw() { +void AnimationKeyEditor::_track_position_draw() { if (!animation.is_valid()) { return; @@ -1101,7 +1111,7 @@ void AnimationKeyEditor::_track_editor_draw() { Color select_color = color; select_color.a = 0.1; Color invalid_path_color = get_color("error_color", "Editor"); - Color track_select_color = get_color("accent", "Editor"); + Color track_select_color = get_color("highlighted_font_color", "Editor"); Ref<Texture> remove_icon = get_icon("Remove", "EditorIcons"); Ref<Texture> move_up_icon = get_icon("MoveUp", "EditorIcons"); @@ -2301,8 +2311,8 @@ void AnimationKeyEditor::_track_editor_gui_input(const Ref<InputEvent> &p_input) if (tt == Animation::TYPE_TRANSFORM) { Dictionary d; - d["loc"] = Vector3(); - d["rot"] = Quat(); + d["location"] = Vector3(); + d["rotation"] = Quat(); d["scale"] = Vector3(); newval = d; @@ -2337,7 +2347,7 @@ void AnimationKeyEditor::_track_editor_gui_input(const Ref<InputEvent> &p_input) undo_redo->create_action(TTR("Anim Add Key")); undo_redo->add_do_method(animation.ptr(), "track_insert_key", idx, pos, newval, 1); - undo_redo->add_undo_method(animation.ptr(), "track_remove_key_at_pos", idx, pos); + undo_redo->add_undo_method(animation.ptr(), "track_remove_key_at_position", idx, pos); if (existing != -1) { Variant v = animation->track_get_key_value(idx, existing); @@ -2506,7 +2516,7 @@ void AnimationKeyEditor::_track_editor_gui_input(const Ref<InputEvent> &p_input) if (selection.has(sk)) continue; //already in selection, don't save - undo_redo->add_do_method(animation.ptr(), "track_remove_key_at_pos", E->key().track, newtime); + undo_redo->add_do_method(animation.ptr(), "track_remove_key_at_position", E->key().track, newtime); _AnimMoveRestore amr; amr.key = animation->track_get_key_value(E->key().track, idx); @@ -2536,7 +2546,7 @@ void AnimationKeyEditor::_track_editor_gui_input(const Ref<InputEvent> &p_input) if (newpos<0) continue; //no remove what no inserted */ - undo_redo->add_undo_method(animation.ptr(), "track_remove_key_at_pos", E->key().track, newpos); + undo_redo->add_undo_method(animation.ptr(), "track_remove_key_at_position", E->key().track, newpos); } // 5-(undo) reinsert keys @@ -2753,10 +2763,10 @@ void AnimationKeyEditor::_track_editor_gui_input(const Ref<InputEvent> &p_input) case Animation::TYPE_TRANSFORM: { Dictionary d = animation->track_get_key_value(idx, mouse_over.over_key); - if (d.has("loc")) - text += "loc: " + String(d["loc"]) + "\n"; - if (d.has("rot")) - text += "rot: " + String(d["rot"]) + "\n"; + if (d.has("location")) + text += "location: " + String(d["location"]) + "\n"; + if (d.has("rotation")) + text += "rot: " + String(d["rotation"]) + "\n"; if (d.has("scale")) text += "scale: " + String(d["scale"]) + "\n"; } break; @@ -3359,9 +3369,9 @@ int AnimationKeyEditor::_confirm_insert(InsertData p_id, int p_last_track) { Transform tr = p_id.value; Dictionary d; - d["loc"] = tr.origin; + d["location"] = tr.origin; d["scale"] = tr.basis.get_scale(); - d["rot"] = Quat(tr.basis); //.orthonormalized(); + d["rotation"] = Quat(tr.basis); //.orthonormalized(); value = d; } break; default: {} @@ -3376,7 +3386,7 @@ int AnimationKeyEditor::_confirm_insert(InsertData p_id, int p_last_track) { p_last_track++; } else { - undo_redo->add_undo_method(animation.ptr(), "track_remove_key_at_pos", p_id.track_idx, time); + undo_redo->add_undo_method(animation.ptr(), "track_remove_key_at_position", p_id.track_idx, time); int existing = animation->track_find_key(p_id.track_idx, time, true); if (existing != -1) { Variant v = animation->track_get_key_value(p_id.track_idx, existing); @@ -3451,7 +3461,7 @@ void AnimationKeyEditor::_create_value_item(int p_type) { Variant::CallError ce; Variant v = Variant::construct(Variant::Type(p_type), NULL, 0, ce); undo_redo->add_do_method(animation.ptr(), "track_insert_key", cvi_track, cvi_pos, v); - undo_redo->add_undo_method(animation.ptr(), "track_remove_key_at_pos", cvi_track, cvi_pos); + undo_redo->add_undo_method(animation.ptr(), "track_remove_key_at_position", cvi_track, cvi_pos); int existing = animation->track_find_key(cvi_track, cvi_pos, true); @@ -3586,7 +3596,7 @@ void AnimationKeyEditor::_scale() { if (selection.has(sk)) continue; //already in selection, don't save - undo_redo->add_do_method(animation.ptr(), "track_remove_key_at_pos", E->key().track, newtime); + undo_redo->add_do_method(animation.ptr(), "track_remove_key_at_position", E->key().track, newtime); _AnimMoveRestore amr; amr.key = animation->track_get_key_value(E->key().track, idx); @@ -3609,7 +3619,7 @@ void AnimationKeyEditor::_scale() { for (Map<SelectedKey, KeyInfo>::Element *E = selection.back(); E; E = E->prev()) { float newpos = _NEW_POS(E->get().pos); - undo_redo->add_undo_method(animation.ptr(), "track_remove_key_at_pos", E->key().track, newpos); + undo_redo->add_undo_method(animation.ptr(), "track_remove_key_at_position", E->key().track, newpos); } // 5-(undo) reinsert keys @@ -3696,7 +3706,7 @@ void AnimationKeyEditor::_bind_methods() { ClassDB::bind_method(D_METHOD("_menu_track"), &AnimationKeyEditor::_menu_track); ClassDB::bind_method(D_METHOD("_clear_selection_for_anim"), &AnimationKeyEditor::_clear_selection_for_anim); ClassDB::bind_method(D_METHOD("_select_at_anim"), &AnimationKeyEditor::_select_at_anim); - ClassDB::bind_method(D_METHOD("_track_pos_draw"), &AnimationKeyEditor::_track_pos_draw); + ClassDB::bind_method(D_METHOD("_track_position_draw"), &AnimationKeyEditor::_track_position_draw); ClassDB::bind_method(D_METHOD("_insert_delay"), &AnimationKeyEditor::_insert_delay); ClassDB::bind_method(D_METHOD("_step_changed"), &AnimationKeyEditor::_step_changed); @@ -3715,7 +3725,7 @@ void AnimationKeyEditor::_bind_methods() { ADD_SIGNAL(MethodInfo("resource_selected", PropertyInfo(Variant::OBJECT, "res"), PropertyInfo(Variant::STRING, "prop"))); ADD_SIGNAL(MethodInfo("keying_changed")); - ADD_SIGNAL(MethodInfo("timeline_changed", PropertyInfo(Variant::REAL, "pos"), PropertyInfo(Variant::BOOL, "drag"))); + ADD_SIGNAL(MethodInfo("timeline_changed", PropertyInfo(Variant::REAL, "position"), PropertyInfo(Variant::BOOL, "drag"))); ADD_SIGNAL(MethodInfo("animation_len_changed", PropertyInfo(Variant::REAL, "len"))); ADD_SIGNAL(MethodInfo("animation_step_changed", PropertyInfo(Variant::REAL, "step"))); ADD_SIGNAL(MethodInfo("key_edited", PropertyInfo(Variant::INT, "track"), PropertyInfo(Variant::INT, "key"))); @@ -3900,7 +3910,7 @@ AnimationKeyEditor::AnimationKeyEditor() { //menu->get_popup()->connect("id_pressed",this,"_menu_callback"); hb = memnew(HBoxContainer); - hb->set_area_as_parent_rect(); + hb->set_anchors_and_margins_preset(Control::PRESET_WIDE); ec->add_child(hb); hb->set_v_size_flags(SIZE_EXPAND_FILL); @@ -3912,14 +3922,14 @@ AnimationKeyEditor::AnimationKeyEditor() { track_editor->set_h_size_flags(SIZE_EXPAND_FILL); track_pos = memnew(Control); - track_pos->set_area_as_parent_rect(); + track_pos->set_anchors_and_margins_preset(Control::PRESET_WIDE); track_pos->set_mouse_filter(MOUSE_FILTER_IGNORE); track_editor->add_child(track_pos); - track_pos->connect("draw", this, "_track_pos_draw"); + track_pos->connect("draw", this, "_track_position_draw"); select_anim_warning = memnew(Label); track_editor->add_child(select_anim_warning); - select_anim_warning->set_area_as_parent_rect(); + select_anim_warning->set_anchors_and_margins_preset(Control::PRESET_WIDE); select_anim_warning->set_text(TTR("Select an AnimationPlayer from the Scene Tree to edit animations.")); select_anim_warning->set_autowrap(true); select_anim_warning->set_align(Label::ALIGN_CENTER); @@ -3936,7 +3946,6 @@ AnimationKeyEditor::AnimationKeyEditor() { key_editor_tab->set_custom_minimum_size(Size2(200, 0) * EDSCALE); key_editor = memnew(PropertyEditor); - key_editor->set_area_as_parent_rect(); key_editor->hide_top_label(); key_editor->set_name(TTR("Key")); key_editor_tab->add_child(key_editor); diff --git a/editor/animation_editor.h b/editor/animation_editor.h index c16072502b..8a89dc1a1c 100644 --- a/editor/animation_editor.h +++ b/editor/animation_editor.h @@ -273,7 +273,7 @@ class AnimationKeyEditor : public VBoxContainer { void _track_editor_draw(); void _track_editor_gui_input(const Ref<InputEvent> &p_input); - void _track_pos_draw(); + void _track_position_draw(); void _track_name_changed(const String &p_name); void _track_menu_selected(int p_idx); diff --git a/editor/code_editor.cpp b/editor/code_editor.cpp index 5dd8b8a800..ee1faf5a55 100644 --- a/editor/code_editor.cpp +++ b/editor/code_editor.cpp @@ -86,7 +86,7 @@ void FindReplaceBar::_notification(int p_what) { find_prev->set_icon(get_icon("MoveUp", "EditorIcons")); find_next->set_icon(get_icon("MoveDown", "EditorIcons")); hide_button->set_normal_texture(get_icon("Close", "EditorIcons")); - hide_button->set_hover_texture(get_icon("CloseHover", "EditorIcons")); + hide_button->set_hover_texture(get_icon("Close", "EditorIcons")); hide_button->set_pressed_texture(get_icon("Close", "EditorIcons")); } else if (p_what == NOTIFICATION_VISIBILITY_CHANGED) { @@ -97,7 +97,7 @@ void FindReplaceBar::_notification(int p_what) { find_prev->set_icon(get_icon("MoveUp", "EditorIcons")); find_next->set_icon(get_icon("MoveDown", "EditorIcons")); hide_button->set_normal_texture(get_icon("Close", "EditorIcons")); - hide_button->set_hover_texture(get_icon("CloseHover", "EditorIcons")); + hide_button->set_hover_texture(get_icon("Close", "EditorIcons")); hide_button->set_pressed_texture(get_icon("Close", "EditorIcons")); } } @@ -367,7 +367,7 @@ void FindReplaceBar::_show_search() { if (!get_search_text().empty()) { search_text->select_all(); - search_text->set_cursor_pos(search_text->get_text().length()); + search_text->set_cursor_position(search_text->get_text().length()); search_current(); } } @@ -993,14 +993,14 @@ void CodeTextEditor::_text_editor_gui_input(const Ref<InputEvent> &p_event) { } void CodeTextEditor::_zoom_in() { - font_resize_val += 1; + font_resize_val += EDSCALE; if (font_resize_timer->get_time_left() == 0) font_resize_timer->start(); } void CodeTextEditor::_zoom_out() { - font_resize_val -= 1; + font_resize_val -= EDSCALE; if (font_resize_timer->get_time_left() == 0) font_resize_timer->start(); @@ -1010,7 +1010,7 @@ void CodeTextEditor::_reset_zoom() { Ref<DynamicFont> font = text_editor->get_font("font"); // reset source font size to default if (font.is_valid()) { - EditorSettings::get_singleton()->set("interface/source_font_size", 14); + EditorSettings::get_singleton()->set("interface/editor/source_font_size", 14); font->set_size(14); } } @@ -1025,8 +1025,9 @@ void CodeTextEditor::_text_changed() { if (text_editor->is_insert_text_operation()) { code_complete_timer->start(); - idle->start(); } + + idle->start(); } void CodeTextEditor::_code_complete_timer_timeout() { @@ -1064,11 +1065,10 @@ void CodeTextEditor::_font_resize_timeout() { Ref<DynamicFont> font = text_editor->get_font("font"); if (font.is_valid()) { - int size = font->get_size() + font_resize_val; - - if (size >= 8 && size <= 96) { - EditorSettings::get_singleton()->set("interface/source_font_size", size); - font->set_size(size); + int new_size = CLAMP(font->get_size() + font_resize_val, 8 * EDSCALE, 96 * EDSCALE); + if (new_size != font->get_size()) { + EditorSettings::get_singleton()->set("interface/editor/source_font_size", new_size / EDSCALE); + font->set_size(new_size); } font_resize_val = 0; @@ -1198,17 +1198,9 @@ CodeTextEditor::CodeTextEditor() { text_editor->set_brace_matching(true); text_editor->set_auto_indent(true); - MarginContainer *status_mc = memnew(MarginContainer); - add_child(status_mc); - status_mc->set("custom_constants/margin_left", 2); - status_mc->set("custom_constants/margin_top", 5); - status_mc->set("custom_constants/margin_right", 2); - status_mc->set("custom_constants/margin_bottom", 1); - HBoxContainer *status_bar = memnew(HBoxContainer); - status_mc->add_child(status_bar); + 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); @@ -1227,14 +1219,18 @@ CodeTextEditor::CodeTextEditor() { error->set_clip_text(true); //do not change, or else very long errors can push the whole container to the right error->set_valign(Label::VALIGN_CENTER); error->add_color_override("font_color", EditorNode::get_singleton()->get_gui_base()->get_color("error_color", "Editor")); + error->add_font_override("font", EditorNode::get_singleton()->get_gui_base()->get_font("status_source", "EditorFonts")); error->set_h_size_flags(SIZE_EXPAND_FILL); //required for it to display, given now it's clipping contents, do not touch + 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_txt->add_font_override("font", EditorNode::get_singleton()->get_gui_base()->get_font("status_source", "EditorFonts")); line_nb = memnew(Label); status_bar->add_child(line_nb); @@ -1243,6 +1239,8 @@ CodeTextEditor::CodeTextEditor() { line_nb->set_autowrap(true); // workaround to prevent resizing the label on each change, do not touch line_nb->set_clip_text(true); // workaround to prevent resizing the label on each change, do not touch line_nb->set_custom_minimum_size(Size2(40, 1) * EDSCALE); + line_nb->set_align(Label::ALIGN_RIGHT); + line_nb->add_font_override("font", EditorNode::get_singleton()->get_gui_base()->get_font("status_source", "EditorFonts")); Label *col_txt = memnew(Label); status_bar->add_child(col_txt); @@ -1250,6 +1248,7 @@ CodeTextEditor::CodeTextEditor() { col_txt->set_valign(Label::VALIGN_CENTER); col_txt->set_v_size_flags(SIZE_FILL); col_txt->set_text(TTR("Col:")); + col_txt->add_font_override("font", EditorNode::get_singleton()->get_gui_base()->get_font("status_source", "EditorFonts")); col_nb = memnew(Label); status_bar->add_child(col_nb); @@ -1258,6 +1257,9 @@ CodeTextEditor::CodeTextEditor() { col_nb->set_autowrap(true); // workaround to prevent resizing the label on each change, do not touch col_nb->set_clip_text(true); // workaround to prevent resizing the label on each change, do not touch col_nb->set_custom_minimum_size(Size2(40, 1) * EDSCALE); + col_nb->set_align(Label::ALIGN_RIGHT); + col_nb->set("custom_constants/margin_right", 0); + col_nb->add_font_override("font", EditorNode::get_singleton()->get_gui_base()->get_font("status_source", "EditorFonts")); text_editor->connect("gui_input", this, "_text_editor_gui_input"); text_editor->connect("cursor_changed", this, "_line_col_changed"); diff --git a/editor/collada/collada.cpp b/editor/collada/collada.cpp index 4986d97e8f..6dbfd84c86 100644 --- a/editor/collada/collada.cpp +++ b/editor/collada/collada.cpp @@ -422,11 +422,6 @@ Vector<String> Collada::_read_string_array(XMLParser &parser) { // parse String data String str = parser.get_node_data(); array = str.split_spaces(); - /* - for(int i=0;i<array.size();i++) { - print_line(itos(i)+": "+array[i]); - } - */ } else if (parser.get_node_type() == XMLParser::NODE_ELEMENT_END) break; // end parsing text } @@ -1320,11 +1315,8 @@ void Collada::_parse_morph_controller(XMLParser &parser, String p_id) { state.morph_controller_data_map[p_id] = MorphControllerData(); MorphControllerData &morphdata = state.morph_controller_data_map[p_id]; - print_line("morph source: " + parser.get_attribute_value("source") + " id: " + p_id); morphdata.mesh = _uri_to_id(parser.get_attribute_value("source")); - print_line("morph source2: " + morphdata.mesh); morphdata.mode = parser.get_attribute_value("method"); - printf("JJmorph: %p\n", &morphdata); String current_source; while (parser.read() == OK) { @@ -1690,7 +1682,6 @@ Collada::Node *Collada::_parse_visual_scene_node(XMLParser &parser) { } else if (section != "node") { //usually what defines the type of node - //print_line(" don't know what to do with "+section); if (section.begins_with("instance_")) { if (!node) { @@ -1863,9 +1854,6 @@ void Collada::_parse_animation(XMLParser &parser) { String source = _uri_to_id(channel_sources[i]); String target = channel_targets[i]; - if (!samplers.has(source)) { - print_line("channel lacks source: " + source); - } ERR_CONTINUE(!samplers.has(source)); Map<String, String> &sampler = samplers[source]; @@ -1918,7 +1906,7 @@ void Collada::_parse_animation(XMLParser &parser) { for (int j = 0; j < key_count; j++) { track.keys[j].data.resize(output_len); for (int k = 0; k < output_len; k++) - track.keys[j].data[k] = output[l + j * stride + k]; //super weird but should work + track.keys[j].data[k] = output[l + j * stride + k]; //super weird but should work: } if (sampler.has("INTERPOLATION")) { @@ -1970,8 +1958,6 @@ void Collada::_parse_animation(XMLParser &parser) { track.target = target; } - print_line("TARGET: " + track.target); - state.animation_tracks.push_back(track); if (!state.referenced_tracks.has(target)) @@ -2027,8 +2013,8 @@ void Collada::_parse_animation_clip(XMLParser &parser) { } state.animation_clips.push_back(clip); - print_line("found anim clip: " + clip.name); } + void Collada::_parse_scene(XMLParser &parser) { if (parser.is_empty()) { @@ -2044,7 +2030,6 @@ void Collada::_parse_scene(XMLParser &parser) { if (name == "instance_visual_scene") { state.root_visual_scene = _uri_to_id(parser.get_attribute_value("url")); - print_line("***ROOT VISUAL SCENE: " + state.root_visual_scene); } else if (name == "instance_physics_scene") { state.root_physics_scene = _uri_to_id(parser.get_attribute_value("url")); @@ -2213,9 +2198,6 @@ void Collada::_merge_skeletons(VisualScene *p_vscene, Node *p_node) { NodeJoint *nj = SAFE_CAST<NodeJoint *>(state.scene_map[nodeid]); ERR_CONTINUE(!nj); //broken collada - if (!nj->owner) { - print_line("no owner for: " + String(nodeid)); - } ERR_CONTINUE(!nj->owner); //weird, node should have a skeleton owner skeletons.insert(nj->owner); @@ -2268,10 +2250,6 @@ void Collada::_merge_skeletons2(VisualScene *p_vscene) { name = state.sid_to_node_map[F->key()]; - if (!state.scene_map.has(name)) { - print_line("no foundie node for: " + name); - } - ERR_CONTINUE(!state.scene_map.has(name)); Node *node = state.scene_map[name]; @@ -2299,9 +2277,6 @@ void Collada::_merge_skeletons2(VisualScene *p_vscene) { if (skeleton != sk) { //whoa.. wtf, merge. - print_line("MERGED BONES!!"); - - //NodeSkeleton *merged = E->get(); _remove_node(p_vscene, sk); for (int i = 0; i < sk->children.size(); i++) { @@ -2399,9 +2374,6 @@ bool Collada::_move_geometry_to_skeletons(VisualScene *p_vscene, Node *p_node, L ERR_FAIL_COND_V(!state.scene_map.has(nodeid), false); //weird, it should have it... NodeJoint *nj = SAFE_CAST<NodeJoint *>(state.scene_map[nodeid]); ERR_FAIL_COND_V(!nj, false); - if (!nj->owner) { - print_line("Has no owner: " + nj->name); - } ERR_FAIL_COND_V(!nj->owner, false); //weird, node should have a skeleton owner NodeSkeleton *sk = nj->owner; diff --git a/editor/create_dialog.cpp b/editor/create_dialog.cpp index 33734957e2..520bf480fd 100644 --- a/editor/create_dialog.cpp +++ b/editor/create_dialog.cpp @@ -83,7 +83,7 @@ void CreateDialog::popup_create(bool p_dontclear) { _update_favorite_list(); // Restore valid window bounds or pop up at default size. - if (EditorSettings::get_singleton()->has("interface/dialogs/create_new_node_bounds")) { + if (EditorSettings::get_singleton()->has_setting("interface/dialogs/create_new_node_bounds")) { popup(EditorSettings::get_singleton()->get("interface/dialogs/create_new_node_bounds")); } else { popup_centered_ratio(); @@ -165,11 +165,14 @@ void CreateDialog::add_type(const String &p_type, HashMap<String, TreeItem *> &p TreeItem *item = search_options->create_item(parent); item->set_text(0, p_type); if (!ClassDB::can_instance(p_type)) { - item->set_custom_color(0, Color(0.5, 0.5, 0.5)); + item->set_custom_color(0, get_color("disabled_font_color", "Editor")); item->set_selectable(0, false); } else { + bool is_search_subsequence = search_box->get_text().is_subsequence_ofi(p_type); + String to_select_type = *to_select ? (*to_select)->get_text(0) : ""; + bool current_item_is_preffered = ClassDB::is_parent_class(p_type, preferred_search_result_type) && !ClassDB::is_parent_class(to_select_type, preferred_search_result_type); - if ((!*to_select && (search_box->get_text().is_subsequence_ofi(p_type))) || search_box->get_text() == p_type) { + if (((!*to_select || current_item_is_preffered) && is_search_subsequence) || search_box->get_text() == p_type) { *to_select = item; } } @@ -361,6 +364,19 @@ void CreateDialog::set_base_type(const String &p_base) { _update_search(); } +String CreateDialog::get_base_type() const { + + return base_type; +} + +void CreateDialog::set_preferred_search_result_type(const String &p_preferred_type) { + preferred_search_result_type = p_preferred_type; +} + +String CreateDialog::get_preferred_search_result_type() { + + return preferred_search_result_type; +} String CreateDialog::get_selected_type() { TreeItem *selected = search_options->get_selected(); @@ -411,11 +427,6 @@ Object *CreateDialog::instance_selected() { return NULL; } -String CreateDialog::get_base_type() const { - - return base_type; -} - void CreateDialog::_item_selected() { TreeItem *item = search_options->get_selected(); @@ -513,7 +524,7 @@ void CreateDialog::_favorite_activated() { Variant CreateDialog::get_drag_data_fw(const Point2 &p_point, Control *p_from) { - TreeItem *ti = favorites->get_item_at_pos(p_point); + TreeItem *ti = favorites->get_item_at_position(p_point); if (ti) { Dictionary d; d["type"] = "create_favorite_drag"; @@ -544,12 +555,12 @@ void CreateDialog::drop_data_fw(const Point2 &p_point, const Variant &p_data, Co Dictionary d = p_data; - TreeItem *ti = favorites->get_item_at_pos(p_point); + TreeItem *ti = favorites->get_item_at_position(p_point); if (!ti) return; String drop_at = ti->get_text(0); - int ds = favorites->get_drop_section_at_pos(p_point); + int ds = favorites->get_drop_section_at_position(p_point); int drop_idx = favorite_list.find(drop_at); if (drop_idx < 0) @@ -654,6 +665,7 @@ CreateDialog::CreateDialog() { search_options->connect("cell_selected", this, "_item_selected"); //search_options->set_hide_root(true); base_type = "Object"; + preferred_search_result_type = ""; help_bit = memnew(EditorHelpBit); vbc->add_margin_child(TTR("Description:"), help_bit); diff --git a/editor/create_dialog.h b/editor/create_dialog.h index a523539ba0..2e4ce9b277 100644 --- a/editor/create_dialog.h +++ b/editor/create_dialog.h @@ -53,7 +53,7 @@ class CreateDialog : public ConfirmationDialog { LineEdit *search_box; Tree *search_options; String base_type; - + String preferred_search_result_type; EditorHelpBit *help_bit; void _item_selected(); @@ -93,6 +93,9 @@ public: void set_base_type(const String &p_base); String get_base_type() const; + void set_preferred_search_result_type(const String &p_preferred_type); + String get_preferred_search_result_type(); + void popup_create(bool p_dontclear); CreateDialog(); diff --git a/editor/dependency_editor.cpp b/editor/dependency_editor.cpp index 54bf31cd62..29e2423e9b 100644 --- a/editor/dependency_editor.cpp +++ b/editor/dependency_editor.cpp @@ -337,89 +337,144 @@ DependencyEditorOwners::DependencyEditorOwners() { /////////////////////// -void DependencyRemoveDialog::_fill_owners(EditorFileSystemDirectory *efsd) { +void DependencyRemoveDialog::_find_files_in_removed_folder(EditorFileSystemDirectory *efsd, const String &p_folder) { + if (!efsd) + return; + + for (int i = 0; i < efsd->get_subdir_count(); ++i) { + _find_files_in_removed_folder(efsd->get_subdir(i), p_folder); + } + for (int i = 0; i < efsd->get_file_count(); i++) { + String file = efsd->get_file_path(i); + ERR_FAIL_COND(all_remove_files.has(file)); //We are deleting a directory which is contained in a directory we are deleting... + all_remove_files[file] = p_folder; //Point the file to the ancestor directory we are deleting so we know what to parent it under in the tree. + } +} +void DependencyRemoveDialog::_find_all_removed_dependencies(EditorFileSystemDirectory *efsd, Vector<RemovedDependency> &p_removed) { if (!efsd) return; for (int i = 0; i < efsd->get_subdir_count(); i++) { - _fill_owners(efsd->get_subdir(i)); + _find_all_removed_dependencies(efsd->get_subdir(i), p_removed); } for (int i = 0; i < efsd->get_file_count(); i++) { + const String path = efsd->get_file_path(i); - Vector<String> deps = efsd->get_file_deps(i); - //print_line(":::"+efsd->get_file_path(i)); - Set<String> met; - for (int j = 0; j < deps.size(); j++) { - if (files.has(deps[j])) { - met.insert(deps[j]); - } - } - if (!met.size()) + //It doesn't matter if a file we are about to delete will have some of its dependencies removed too + if (all_remove_files.has(path)) continue; - exist = true; - - Ref<Texture> icon; - String type = efsd->get_file_type(i); - if (!has_icon(type, "EditorIcons")) { - icon = get_icon("Object", "EditorIcons"); - } else { - icon = get_icon(type, "EditorIcons"); + Vector<String> all_deps = efsd->get_file_deps(i); + for (int j = 0; j < all_deps.size(); ++j) { + if (all_remove_files.has(all_deps[j])) { + RemovedDependency dep; + dep.file = path; + dep.file_type = efsd->get_file_type(i); + dep.dependency = all_deps[j]; + dep.dependency_folder = all_remove_files[all_deps[j]]; + p_removed.push_back(dep); + } } + } +} - for (Set<String>::Element *E = met.front(); E; E = E->next()) { +void DependencyRemoveDialog::_build_removed_dependency_tree(const Vector<RemovedDependency> &p_removed) { + owners->clear(); + owners->create_item(); // root - String which = E->get(); - if (!files[which]) { - TreeItem *ti = owners->create_item(owners->get_root()); - ti->set_text(0, which.get_file()); - files[which] = ti; + Map<String, TreeItem *> tree_items; + for (int i = 0; i < p_removed.size(); i++) { + RemovedDependency rd = p_removed[i]; + + //Ensure that the dependency is already in the tree + if (!tree_items.has(rd.dependency)) { + if (rd.dependency_folder.length() > 0) { + //Ensure the ancestor folder is already in the tree + if (!tree_items.has(rd.dependency_folder)) { + TreeItem *folder_item = owners->create_item(owners->get_root()); + folder_item->set_text(0, rd.dependency_folder); + folder_item->set_icon(0, get_icon("Folder", "EditorIcons")); + tree_items[rd.dependency_folder] = folder_item; + } + TreeItem *dependency_item = owners->create_item(tree_items[rd.dependency_folder]); + dependency_item->set_text(0, rd.dependency); + dependency_item->set_icon(0, get_icon("Warning", "EditorIcons")); + tree_items[rd.dependency] = dependency_item; + } else { + TreeItem *dependency_item = owners->create_item(owners->get_root()); + dependency_item->set_text(0, rd.dependency); + dependency_item->set_icon(0, get_icon("Warning", "EditorIcons")); + tree_items[rd.dependency] = dependency_item; } - TreeItem *ti = owners->create_item(files[which]); - ti->set_text(0, efsd->get_file_path(i)); - ti->set_icon(0, icon); } + + //List this file under this dependency + Ref<Texture> icon = has_icon(rd.file_type, "EditorIcons") ? get_icon(rd.file_type, "EditorIcons") : get_icon("Object", "EditorIcons"); + TreeItem *file_item = owners->create_item(tree_items[rd.dependency]); + file_item->set_text(0, rd.file); + file_item->set_icon(0, icon); } } -void DependencyRemoveDialog::show(const Vector<String> &to_erase) { - - exist = false; +void DependencyRemoveDialog::show(const Vector<String> &p_folders, const Vector<String> &p_files) { + all_remove_files.clear(); + to_delete.clear(); owners->clear(); - files.clear(); - owners->create_item(); // root - for (int i = 0; i < to_erase.size(); i++) { - files[to_erase[i]] = NULL; + + for (int i = 0; i < p_folders.size(); ++i) { + String folder = p_folders[i].ends_with("/") ? p_folders[i] : (p_folders[i] + "/"); + _find_files_in_removed_folder(EditorFileSystem::get_singleton()->get_filesystem_path(folder), folder); + to_delete.push_back(folder); + } + for (int i = 0; i < p_files.size(); ++i) { + all_remove_files[p_files[i]] = String(); + to_delete.push_back(p_files[i]); } - _fill_owners(EditorFileSystem::get_singleton()->get_filesystem()); + Vector<RemovedDependency> removed_deps; + _find_all_removed_dependencies(EditorFileSystem::get_singleton()->get_filesystem(), removed_deps); + removed_deps.sort(); - if (exist) { - owners->show(); - text->set_text(TTR("The files being removed are required by other resources in order for them to work.\nRemove them anyway? (no undo)")); - popup_centered_minsize(Size2(500, 220)); - } else { + if (removed_deps.empty()) { owners->hide(); text->set_text(TTR("Remove selected files from the project? (no undo)")); popup_centered_minsize(Size2(400, 100)); + } else { + _build_removed_dependency_tree(removed_deps); + owners->show(); + text->set_text(TTR("The files being removed are required by other resources in order for them to work.\nRemove them anyway? (no undo)")); + popup_centered_minsize(Size2(500, 350)); } } void DependencyRemoveDialog::ok_pressed() { + bool files_only = true; + for (int i = 0; i < to_delete.size(); ++i) { + if (to_delete[i].ends_with("/")) { + files_only = false; + } else if (ResourceCache::has(to_delete[i])) { + Resource *res = ResourceCache::get(to_delete[i]); + res->set_path(""); //clear reference to path + } - DirAccess *da = DirAccess::create(DirAccess::ACCESS_RESOURCES); - for (Map<String, TreeItem *>::Element *E = files.front(); E; E = E->next()) { + String path = OS::get_singleton()->get_resource_dir() + to_delete[i].replace_first("res://", "/"); + print_line("Moving to trash: " + path); + Error err = OS::get_singleton()->move_to_trash(path); + if (err != OK) { + EditorNode::get_singleton()->add_io_error(TTR("Cannot remove:\n") + to_delete[i] + "\n"); + } + } - if (ResourceCache::has(E->key())) { - Resource *res = ResourceCache::get(E->key()); - res->set_path(""); //clear reference to path + if (files_only) { + //If we only deleted files we should only need to tell the file system about the files we touched. + for (int i = 0; i < to_delete.size(); ++i) { + EditorFileSystem::get_singleton()->update_file(to_delete[i]); } - da->remove(E->key()); - EditorFileSystem::get_singleton()->update_file(E->key()); + } else { + EditorFileSystem::get_singleton()->scan_changes(); } - memdelete(da); } DependencyRemoveDialog::DependencyRemoveDialog() { @@ -489,7 +544,7 @@ DependencyErrorDialog::DependencyErrorDialog() { vb->add_margin_child(TTR("Scene failed to load due to missing dependencies:"), files, true); files->set_v_size_flags(SIZE_EXPAND_FILL); get_ok()->set_text(TTR("Open Anyway")); - get_cancel()->set_text(TTR("Done")); + get_cancel()->set_text(TTR("Close")); text = memnew(Label); vb->add_child(text); diff --git a/editor/dependency_editor.h b/editor/dependency_editor.h index 4dfb9de268..c7e9baa5c2 100644 --- a/editor/dependency_editor.h +++ b/editor/dependency_editor.h @@ -84,14 +84,33 @@ class DependencyRemoveDialog : public ConfirmationDialog { Label *text; Tree *owners; - bool exist; - Map<String, TreeItem *> files; - void _fill_owners(EditorFileSystemDirectory *efsd); + + Map<String, String> all_remove_files; + Vector<String> to_delete; + + struct RemovedDependency { + String file; + String file_type; + String dependency; + String dependency_folder; + + bool operator<(const RemovedDependency &p_other) const { + if (dependency_folder.empty() != p_other.dependency_folder.empty()) { + return p_other.dependency_folder.empty(); + } else { + return dependency < p_other.dependency; + } + } + }; + + void _find_files_in_removed_folder(EditorFileSystemDirectory *efsd, const String &p_folder); + void _find_all_removed_dependencies(EditorFileSystemDirectory *efsd, Vector<RemovedDependency> &p_removed); + void _build_removed_dependency_tree(const Vector<RemovedDependency> &p_removed); void ok_pressed(); public: - void show(const Vector<String> &to_erase); + void show(const Vector<String> &p_folders, const Vector<String> &p_files); DependencyRemoveDialog(); }; diff --git a/editor/editor_asset_installer.cpp b/editor/editor_asset_installer.cpp index a8eee24fe2..1aac697ffd 100644 --- a/editor/editor_asset_installer.cpp +++ b/editor/editor_asset_installer.cpp @@ -197,7 +197,7 @@ void EditorAssetInstaller::open(const String &p_path, int p_depth) { String res_path = "res://" + path; if (FileAccess::exists(res_path)) { - ti->set_custom_color(0, Color(1, 0.3, 0.2)); + ti->set_custom_color(0, get_color("error_color", "Editor")); ti->set_tooltip(0, res_path + " (Already Exists)"); ti->set_checked(0, false); } else { diff --git a/editor/editor_audio_buses.cpp b/editor/editor_audio_buses.cpp index a36faeb0de..de64c11308 100644 --- a/editor/editor_audio_buses.cpp +++ b/editor/editor_audio_buses.cpp @@ -64,6 +64,8 @@ void EditorAudioBus::_notification(int p_what) { if (has_focus()) { draw_style_box(get_stylebox("focus", "Button"), Rect2(Vector2(), get_size())); + } else if (is_master) { + draw_style_box(get_stylebox("disabled", "Button"), Rect2(Vector2(), get_size())); } } @@ -123,7 +125,7 @@ void EditorAudioBus::_notification(int p_what) { void EditorAudioBus::update_send() { send->clear(); - if (get_index() == 0) { + if (is_master) { send->set_disabled(true); send->set_text(TTR("Speakers")); } else { @@ -154,7 +156,7 @@ void EditorAudioBus::update_bus() { slider->set_value(AudioServer::get_singleton()->get_bus_volume_db(index)); track_name->set_text(AudioServer::get_singleton()->get_bus_name(index)); - if (get_index() == 0) + if (is_master) track_name->set_editable(false); solo->set_pressed(AudioServer::get_singleton()->is_bus_solo(index)); @@ -237,6 +239,8 @@ void EditorAudioBus::_name_changed(const String &p_new_name) { ur->commit_action(); updating_bus = false; + + track_name->release_focus(); } void EditorAudioBus::_volume_db_changed(float p_db) { @@ -401,7 +405,6 @@ void EditorAudioBus::_gui_input(const Ref<InputEvent> &p_event) { Vector2 pos = Vector2(mb->get_position().x, mb->get_position().y); bus_popup->set_position(get_global_position() + pos); - bus_popup->set_item_disabled(1, get_index() == 0); bus_popup->popup(); } } @@ -459,7 +462,7 @@ void EditorAudioBus::drop_data(const Point2 &p_point, const Variant &p_data) { Variant EditorAudioBus::get_drag_data_fw(const Point2 &p_point, Control *p_from) { print_line("drag fw"); - TreeItem *item = effects->get_item_at_pos(p_point); + TreeItem *item = effects->get_item_at_position(p_point); if (!item) { print_line("no item"); return Variant(); @@ -489,7 +492,7 @@ bool EditorAudioBus::can_drop_data_fw(const Point2 &p_point, const Variant &p_da if (!d.has("type") || String(d["type"]) != "audio_bus_effect") return false; - TreeItem *item = effects->get_item_at_pos(p_point); + TreeItem *item = effects->get_item_at_position(p_point); if (!item) return false; @@ -502,10 +505,10 @@ void EditorAudioBus::drop_data_fw(const Point2 &p_point, const Variant &p_data, Dictionary d = p_data; - TreeItem *item = effects->get_item_at_pos(p_point); + TreeItem *item = effects->get_item_at_position(p_point); if (!item) return; - int pos = effects->get_drop_section_at_pos(p_point); + int pos = effects->get_drop_section_at_position(p_point); Variant md = item->get_metadata(0); int paste_at; @@ -619,10 +622,11 @@ void EditorAudioBus::_bind_methods() { ADD_SIGNAL(MethodInfo("dropped")); } -EditorAudioBus::EditorAudioBus(EditorAudioBuses *p_buses) { +EditorAudioBus::EditorAudioBus(EditorAudioBuses *p_buses, bool p_is_master) { buses = p_buses; updating_bus = false; + is_master = p_is_master; set_tooltip(TTR("Audio Bus, Drag and Drop to rearrange.")); @@ -630,24 +634,15 @@ EditorAudioBus::EditorAudioBus(EditorAudioBuses *p_buses) { add_child(vb); set_v_size_flags(SIZE_EXPAND_FILL); + set_custom_minimum_size(Size2(100, 0) * EDSCALE); - HBoxContainer *head = memnew(HBoxContainer); track_name = memnew(LineEdit); - head->add_child(track_name); track_name->connect("text_entered", this, "_name_changed"); track_name->connect("focus_exited", this, "_name_focus_exit"); - track_name->set_h_size_flags(SIZE_EXPAND_FILL); - - bus_options = memnew(MenuButton); - bus_options->set_h_size_flags(SIZE_SHRINK_END); - bus_options->set_tooltip(TTR("Bus options")); - head->add_child(bus_options); - - vb->add_child(head); + vb->add_child(track_name); HBoxContainer *hbc = memnew(HBoxContainer); vb->add_child(hbc); - hbc->add_spacer(); solo = memnew(ToolButton); solo->set_toggle_mode(true); solo->set_tooltip(TTR("Solo")); @@ -668,6 +663,23 @@ EditorAudioBus::EditorAudioBus(EditorAudioBuses *p_buses) { hbc->add_child(bypass); hbc->add_spacer(); + bus_options = memnew(MenuButton); + bus_options->set_h_size_flags(SIZE_SHRINK_END); + bus_options->set_anchor(MARGIN_RIGHT, 0.0); + bus_options->set_tooltip(TTR("Bus options")); + hbc->add_child(bus_options); + + Ref<StyleBoxEmpty> sbempty = memnew(StyleBoxEmpty); + for (int i = 0; i < hbc->get_child_count(); i++) { + Control *child = Object::cast_to<Control>(hbc->get_child(i)); + child->add_style_override("normal", sbempty); + child->add_style_override("hover", sbempty); + child->add_style_override("focus", sbempty); + child->add_style_override("pressed", sbempty); + } + + vb->add_child(memnew(HSeparator)); + HBoxContainer *hb = memnew(HBoxContainer); vb->add_child(hb); slider = memnew(VSlider); @@ -699,8 +711,6 @@ EditorAudioBus::EditorAudioBus(EditorAudioBuses *p_buses) { scale = memnew(TextureRect); hb->add_child(scale); - //add_child(hb); - effects = memnew(Tree); effects->set_hide_root(true); effects->set_custom_minimum_size(Size2(0, 100) * EDSCALE); @@ -745,6 +755,7 @@ EditorAudioBus::EditorAudioBus(EditorAudioBuses *p_buses) { bus_popup = bus_options->get_popup(); bus_popup->add_item(TTR("Duplicate")); bus_popup->add_item(TTR("Delete")); + bus_popup->set_item_disabled(1, is_master); bus_popup->add_item(TTR("Reset Volume")); bus_popup->connect("index_pressed", this, "_bus_popup_pressed"); @@ -787,10 +798,8 @@ void EditorAudioBuses::_update_buses() { for (int i = 0; i < AudioServer::get_singleton()->get_bus_count(); i++) { - EditorAudioBus *audio_bus = memnew(EditorAudioBus(this)); - if (i == 0) { - audio_bus->set_self_modulate(Color(1, 0.9, 0.9)); - } + bool is_master = i == 0 ? true : false; + EditorAudioBus *audio_bus = memnew(EditorAudioBus(this, is_master)); bus_hb->add_child(audio_bus); audio_bus->connect("delete_request", this, "_delete_bus", varray(audio_bus), CONNECT_DEFERRED); audio_bus->connect("duplicate_request", this, "_duplicate_bus", varray(), CONNECT_DEFERRED); diff --git a/editor/editor_audio_buses.h b/editor/editor_audio_buses.h index dba1b73295..995def468c 100644 --- a/editor/editor_audio_buses.h +++ b/editor/editor_audio_buses.h @@ -84,6 +84,8 @@ class EditorAudioBus : public PanelContainer { bool updating_bus; + bool is_master; + void _gui_input(const Ref<InputEvent> &p_event); void _bus_popup_pressed(int p_option); @@ -120,7 +122,7 @@ public: void update_bus(); void update_send(); - EditorAudioBus(EditorAudioBuses *p_buses = NULL); + EditorAudioBus(EditorAudioBuses *p_buses = NULL, bool p_is_master = false); }; class EditorAudioBusDrop : public Panel { diff --git a/editor/editor_autoload_settings.cpp b/editor/editor_autoload_settings.cpp index 82a7fa734a..ae7ed7ce61 100644 --- a/editor/editor_autoload_settings.cpp +++ b/editor/editor_autoload_settings.cpp @@ -117,7 +117,7 @@ void EditorAutoloadSettings::_autoload_add() { undo_redo->create_action(TTR("Add AutoLoad")); undo_redo->add_do_property(ProjectSettings::get_singleton(), name, "*" + path); - if (ProjectSettings::get_singleton()->has(name)) { + if (ProjectSettings::get_singleton()->has_setting(name)) { undo_redo->add_undo_property(ProjectSettings::get_singleton(), name, ProjectSettings::get_singleton()->get(name)); } else { undo_redo->add_undo_property(ProjectSettings::get_singleton(), name, Variant()); @@ -169,7 +169,7 @@ void EditorAutoloadSettings::_autoload_edited() { return; } - if (ProjectSettings::get_singleton()->has("autoload/" + name)) { + if (ProjectSettings::get_singleton()->has_setting("autoload/" + name)) { ti->set_text(0, old_name); EditorNode::get_singleton()->show_warning(vformat(TTR("Autoload '%s' already exists!"), name)); return; @@ -364,7 +364,7 @@ void EditorAutoloadSettings::update_autoload() { item->add_button(3, get_icon("MoveUp", "EditorIcons"), BUTTON_MOVE_UP); item->add_button(3, get_icon("MoveDown", "EditorIcons"), BUTTON_MOVE_DOWN); - item->add_button(3, get_icon("Del", "EditorIcons"), BUTTON_DELETE); + item->add_button(3, get_icon("Remove", "EditorIcons"), BUTTON_DELETE); item->set_selectable(3, false); } @@ -419,12 +419,12 @@ bool EditorAutoloadSettings::can_drop_data_fw(const Point2 &p_point, const Varia return false; if (drop_data.has("type")) { - TreeItem *ti = tree->get_item_at_pos(p_point); + TreeItem *ti = tree->get_item_at_position(p_point); if (!ti) return false; - int section = tree->get_drop_section_at_pos(p_point); + int section = tree->get_drop_section_at_position(p_point); if (section < -1) return false; @@ -437,12 +437,12 @@ bool EditorAutoloadSettings::can_drop_data_fw(const Point2 &p_point, const Varia void EditorAutoloadSettings::drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_control) { - TreeItem *ti = tree->get_item_at_pos(p_point); + TreeItem *ti = tree->get_item_at_position(p_point); if (!ti) return; - int section = tree->get_drop_section_at_pos(p_point); + int section = tree->get_drop_section_at_position(p_point); if (section < -1) return; diff --git a/editor/editor_export.cpp b/editor/editor_export.cpp index ad9bc4a662..efe32b99ab 100644 --- a/editor/editor_export.cpp +++ b/editor/editor_export.cpp @@ -273,12 +273,14 @@ void EditorExportPlatform::gen_debug_flags(Vector<String> &r_flags, int p_flags) } Error EditorExportPlatform::_save_pack_file(void *p_userdata, const String &p_path, const Vector<uint8_t> &p_data, int p_file, int p_total) { + if (p_path.ends_with(".so") || p_path.ends_with(".dylib") || p_path.ends_with(".dll")) + return OK; PackData *pd = (PackData *)p_userdata; SavedData sd; sd.path_utf8 = p_path.utf8(); - sd.ofs = pd->f->get_pos(); + sd.ofs = pd->f->get_position(); sd.size = p_data.size(); pd->f->store_buffer(p_data.ptr(), p_data.size()); @@ -340,12 +342,10 @@ String EditorExportPlatform::find_export_template(String template_file_name, Str bool has_system_path = (system_file != ""); system_file = system_file.plus_file(base_name); - print_line("test user file: " + user_file); // Prefer user file if (FileAccess::exists(user_file)) { return user_file; } - print_line("test system file: " + system_file); // Now check system file if (has_system_path) { @@ -736,7 +736,7 @@ Error EditorExportPlatform::save_pack(const Ref<EditorExportPreset> &p_preset, c f->store_32(pd.file_ofs.size()); //amount of files - size_t header_size = f->get_pos(); + size_t header_size = f->get_position(); //precalculate header size @@ -925,13 +925,10 @@ void EditorExport::_save() { } config->save("res://export_presets.cfg"); - - print_line("saved ok"); } void EditorExport::save_presets() { - print_line("save presets"); if (block_save) return; save_timer->start(); @@ -1139,6 +1136,12 @@ void EditorExportPlatformPC::get_preset_features(const Ref<EditorExportPreset> & if (p_preset->get("texture_format/etc2")) { r_features->push_back("etc2"); } + + if (p_preset->get("binary_format/64_bits")) { + r_features->push_back("64"); + } else { + r_features->push_back("32"); + } } void EditorExportPlatformPC::get_export_options(List<ExportOption> *r_options) { diff --git a/editor/editor_file_dialog.cpp b/editor/editor_file_dialog.cpp index 8d13153128..a0ca9b88e0 100644 --- a/editor/editor_file_dialog.cpp +++ b/editor/editor_file_dialog.cpp @@ -56,15 +56,15 @@ void EditorFileDialog::_notification(int p_what) { //_update_icons mode_thumbnails->set_icon(get_icon("FileThumbnail", "EditorIcons")); mode_list->set_icon(get_icon("FileList", "EditorIcons")); - dir_prev->set_icon(get_icon("ArrowLeft", "EditorIcons")); - dir_next->set_icon(get_icon("ArrowRight", "EditorIcons")); + dir_prev->set_icon(get_icon("Back", "EditorIcons")); + dir_next->set_icon(get_icon("Forward", "EditorIcons")); dir_up->set_icon(get_icon("ArrowUp", "EditorIcons")); refresh->set_icon(get_icon("Reload", "EditorIcons")); favorite->set_icon(get_icon("Favorites", "EditorIcons")); fav_up->set_icon(get_icon("MoveUp", "EditorIcons")); fav_down->set_icon(get_icon("MoveDown", "EditorIcons")); - fav_rm->set_icon(get_icon("RemoveSmall", "EditorIcons")); + fav_rm->set_icon(get_icon("Remove", "EditorIcons")); } else if (p_what == NOTIFICATION_PROCESS) { @@ -97,15 +97,15 @@ void EditorFileDialog::_notification(int p_what) { //_update_icons mode_thumbnails->set_icon(get_icon("FileThumbnail", "EditorIcons")); mode_list->set_icon(get_icon("FileList", "EditorIcons")); - dir_prev->set_icon(get_icon("ArrowLeft", "EditorIcons")); - dir_next->set_icon(get_icon("ArrowRight", "EditorIcons")); + dir_prev->set_icon(get_icon("Back", "EditorIcons")); + dir_next->set_icon(get_icon("Forward", "EditorIcons")); dir_up->set_icon(get_icon("ArrowUp", "EditorIcons")); refresh->set_icon(get_icon("Reload", "EditorIcons")); favorite->set_icon(get_icon("Favorites", "EditorIcons")); fav_up->set_icon(get_icon("MoveUp", "EditorIcons")); fav_down->set_icon(get_icon("MoveDown", "EditorIcons")); - fav_rm->set_icon(get_icon("RemoveSmall", "EditorIcons")); + fav_rm->set_icon(get_icon("Remove", "EditorIcons")); update_file_list(); } @@ -1281,6 +1281,7 @@ EditorFileDialog::EditorFileDialog() { dir_prev = memnew(ToolButton); dir_next = memnew(ToolButton); dir_up = memnew(ToolButton); + dir_up->set_tooltip(TTR("Go to parent folder")); pathhb->add_child(dir_prev); pathhb->add_child(dir_next); @@ -1290,6 +1291,8 @@ EditorFileDialog::EditorFileDialog() { dir_next->connect("pressed", this, "_go_forward"); dir_up->connect("pressed", this, "_go_up"); + pathhb->add_child(memnew(Label(TTR("Path:")))); + dir = memnew(LineEdit); pathhb->add_child(dir); dir->set_h_size_flags(SIZE_EXPAND_FILL); @@ -1330,9 +1333,9 @@ EditorFileDialog::EditorFileDialog() { makedir->connect("pressed", this, "_make_dir"); pathhb->add_child(makedir); - list_hb = memnew(HBoxContainer); + list_hb = memnew(HSplitContainer); - vbc->add_margin_child(TTR("Path:"), pathhb); + vbc->add_child(pathhb); vbc->add_child(list_hb); list_hb->set_v_size_flags(SIZE_EXPAND_FILL); @@ -1365,35 +1368,41 @@ EditorFileDialog::EditorFileDialog() { VBoxContainer *item_vb = memnew(VBoxContainer); list_hb->add_child(item_vb); - item_vb->set_h_size_flags(SIZE_EXPAND_FILL); - item_list = memnew(ItemList); - item_list->set_v_size_flags(SIZE_EXPAND_FILL); - item_vb->add_margin_child(TTR("Directories & Files:"), item_list, true); + HBoxContainer *preview_hb = memnew(HBoxContainer); + preview_hb->set_v_size_flags(SIZE_EXPAND_FILL); + item_vb->add_child(preview_hb); - HBoxContainer *filter_hb = memnew(HBoxContainer); - item_vb->add_child(filter_hb); + VBoxContainer *list_vb = memnew(VBoxContainer); + list_vb->set_h_size_flags(SIZE_EXPAND_FILL); + list_vb->add_child(memnew(Label(TTR("Directories & Files:")))); + preview_hb->add_child(list_vb); - VBoxContainer *filter_vb = memnew(VBoxContainer); - filter_hb->add_child(filter_vb); - filter_vb->set_h_size_flags(SIZE_EXPAND_FILL); + item_list = memnew(ItemList); + item_list->set_v_size_flags(SIZE_EXPAND_FILL); + list_vb->add_child(item_list); preview_vb = memnew(VBoxContainer); - filter_hb->add_child(preview_vb); + preview_hb->add_child(preview_vb); CenterContainer *prev_cc = memnew(CenterContainer); preview_vb->add_margin_child(TTR("Preview:"), prev_cc); preview = memnew(TextureRect); prev_cc->add_child(preview); preview_vb->hide(); + HBoxContainer *filename_hbc = memnew(HBoxContainer); + filename_hbc->add_child(memnew(Label(TTR("File:")))); file = memnew(LineEdit); - //add_child(file); - filter_vb->add_margin_child(TTR("File:"), file); - + file->set_stretch_ratio(4); + file->set_h_size_flags(SIZE_EXPAND_FILL); + filename_hbc->add_child(file); filter = memnew(OptionButton); - //add_child(filter); - filter_vb->add_margin_child(TTR("Filter:"), filter); + filter->set_stretch_ratio(3); + filter->set_h_size_flags(SIZE_EXPAND_FILL); filter->set_clip_text(true); //too many extensions overflow it + filename_hbc->add_child(filter); + filename_hbc->set_h_size_flags(SIZE_EXPAND_FILL); + item_vb->add_child(filename_hbc); dir_access = DirAccess::create(DirAccess::ACCESS_RESOURCES); access = ACCESS_RESOURCES; diff --git a/editor/editor_file_dialog.h b/editor/editor_file_dialog.h index 3b22189014..4dc2947292 100644 --- a/editor/editor_file_dialog.h +++ b/editor/editor_file_dialog.h @@ -36,6 +36,7 @@ #include "scene/gui/item_list.h" #include "scene/gui/line_edit.h" #include "scene/gui/option_button.h" +#include "scene/gui/split_container.h" #include "scene/gui/texture_rect.h" #include "scene/gui/tool_button.h" /** @@ -92,7 +93,7 @@ private: ItemList *item_list; TextureRect *preview; VBoxContainer *preview_vb; - HBoxContainer *list_hb; + HSplitContainer *list_hb; LineEdit *file; AcceptDialog *mkdirerr; AcceptDialog *exterr; diff --git a/editor/editor_file_system.cpp b/editor/editor_file_system.cpp index 6e12a8fd02..a6fc8dcddf 100644 --- a/editor/editor_file_system.cpp +++ b/editor/editor_file_system.cpp @@ -240,17 +240,12 @@ void EditorFileSystem::_scan_filesystem() { String update_cache = EditorSettings::get_singleton()->get_project_settings_path().plus_file("filesystem_update3"); - print_line("try to see fs update2"); if (FileAccess::exists(update_cache)) { - - print_line("it exists"); - { FileAccessRef f = FileAccess::open(update_cache, FileAccess::READ); String l = f->get_line().strip_edges(); while (l != String()) { - print_line("erased cache for: " + l + " " + itos(file_cache.has(l))); file_cache.erase(l); //erase cache for this, so it gets updated l = f->get_line().strip_edges(); } @@ -278,9 +273,6 @@ void EditorFileSystem::_scan_filesystem() { memdelete(d); - //save back the findings - //String fscache = EditorSettings::get_singleton()->get_project_settings_path().plus_file("file_cache"); - f = FileAccess::open(fscache, FileAccess::WRITE); _save_filesystem_cache(new_filesystem, f); f->close(); @@ -322,7 +314,6 @@ bool EditorFileSystem::_update_scan_actions() { } break; case ItemAction::ACTION_DIR_ADD: { - //print_line("*ACTION ADD DIR: "+ia.new_dir->get_name()); int idx = 0; for (int i = 0; i < ia.dir->subdirs.size(); i++) { @@ -341,7 +332,6 @@ bool EditorFileSystem::_update_scan_actions() { case ItemAction::ACTION_DIR_REMOVE: { ERR_CONTINUE(!ia.dir->parent); - //print_line("*ACTION REMOVE DIR: "+ia.dir->get_name()); ia.dir->parent->subdirs.erase(ia.dir); memdelete(ia.dir); fs_changed = true; @@ -362,7 +352,6 @@ bool EditorFileSystem::_update_scan_actions() { } fs_changed = true; - //print_line("*ACTION ADD FILE: "+ia.new_file->file); } break; case ItemAction::ACTION_FILE_REMOVE: { @@ -374,7 +363,6 @@ bool EditorFileSystem::_update_scan_actions() { ia.dir->files.remove(idx); fs_changed = true; - //print_line("*ACTION REMOVE FILE: "+ia.file); } break; case ItemAction::ACTION_FILE_REIMPORT: { @@ -512,7 +500,6 @@ bool EditorFileSystem::_check_missing_imported_files(const String &p_path) { for (List<String>::Element *E = to_check.front(); E; E = E->next()) { if (!FileAccess::exists(E->get())) { - print_line("missing " + E->get() + ", reimport"); return false; } } @@ -639,22 +626,7 @@ void EditorFileSystem::_scan_new_dir(EditorFileSystemDirectory *p_dir, DirAccess } else { - if (!fc) { - print_line("REIMPORT BECAUSE: not previously found"); - } else if (fc->modification_time != mt) { - print_line("REIMPORT BECAUSE: modified resource time " + itos(fc->modification_time) + " vs " + itos(mt)); - - } else if (fc->import_modification_time != import_mt) { - print_line("REIMPORT BECAUSE: modified .import time" + itos(fc->import_modification_time) + " vs " + itos(import_mt)); - - } else { - - print_line("REIMPORT BECAUSE: missing imported files"); - } - fi->type = ResourceFormatImporter::get_singleton()->get_resource_type(path); - //fi->deps = ResourceLoader::get_dependencies(path); pointless because it will be reimported, but.. - print_line("import extension tried resource type for " + path + " and its " + fi->type); fi->modified_time = 0; fi->import_modified_time = 0; fi->import_valid = ResourceLoader::is_import_valid(path); @@ -678,7 +650,6 @@ void EditorFileSystem::_scan_new_dir(EditorFileSystemDirectory *p_dir, DirAccess //new or modified time fi->type = ResourceLoader::get_resource_type(path); fi->deps = _get_dependencies(path); - print_line("regular import tried resource type for " + path + " and its " + fi->type); fi->modified_time = mt; fi->import_modified_time = 0; fi->import_valid = true; @@ -697,8 +668,6 @@ void EditorFileSystem::_scan_fs_changes(EditorFileSystemDirectory *p_dir, const bool updated_dir = false; String cd = p_dir->get_path(); - //print_line("dir: "+p_dir->get_path()+" MODTIME: "+itos(p_dir->modified_time)+" CTIME: "+itos(current_mtime)); - if (current_mtime != p_dir->modified_time) { updated_dir = true; @@ -791,11 +760,6 @@ void EditorFileSystem::_scan_fs_changes(EditorFileSystemDirectory *p_dir, const if (import_extensions.has(ext)) { //if it can be imported, and it was added, it needs to be reimported - print_line("REIMPORT: file was not found before, reimport"); - print_line("at dir: " + p_dir->get_path() + " file: " + f); - for (int i = 0; i < p_dir->files.size(); i++) { - print_line(itos(i) + ": " + p_dir->files[i]->file); - } ItemAction ia; ia.action = ItemAction::ACTION_FILE_REIMPORT; ia.dir = p_dir; @@ -835,20 +799,15 @@ void EditorFileSystem::_scan_fs_changes(EditorFileSystemDirectory *p_dir, const bool reimport = false; if (mt != p_dir->files[i]->modified_time) { - print_line("REIMPORT: modified time changed, reimport"); reimport = true; //it was modified, must be reimported. } else if (!FileAccess::exists(path + ".import")) { - print_line("REIMPORT: no .import exists, reimport"); reimport = true; //no .import file, obviously reimport } else { uint64_t import_mt = FileAccess::get_modified_time(path + ".import"); - //print_line(itos(import_mt) + " vs " + itos(p_dir->files[i]->import_modified_time)); if (import_mt != p_dir->files[i]->import_modified_time) { - print_line("REIMPORT: import modified changed, reimport"); reimport = true; } else if (!_check_missing_imported_files(path)) { - print_line("REIMPORT: imported files removed"); reimport = true; } } @@ -947,9 +906,6 @@ void EditorFileSystem::scan_changes() { Thread::Settings s; s.priority = Thread::PRIORITY_LOW; thread_sources = Thread::create(_thread_func_sources, this, s); - //tree->hide(); - //print_line("SCAN BEGIN!"); - //progress->show(); } } @@ -1000,7 +956,6 @@ void EditorFileSystem::_notification(int p_what) { thread_sources = NULL; if (_update_scan_actions()) emit_signal("filesystem_changed"); - //print_line("sources changed: "+itos(sources_changed.size())); emit_signal("sources_changed", sources_changed.size() > 0); } } else if (!scanning) { @@ -1017,10 +972,6 @@ void EditorFileSystem::_notification(int p_what) { _update_scan_actions(); emit_signal("filesystem_changed"); emit_signal("sources_changed", sources_changed.size() > 0); - //print_line("initial sources changed: "+itos(sources_changed.size())); - - } else { - //progress->set_text("Scanning...\n"+itos(total*100)+"%"); } } } break; @@ -1239,7 +1190,6 @@ void EditorFileSystem::_save_late_updated_files() { void EditorFileSystem::_resource_saved(const String &p_path) { - //print_line("resource saved: "+p_path); EditorFileSystem::get_singleton()->update_file(p_path); } @@ -1311,14 +1261,10 @@ void EditorFileSystem::update_file(const String &p_file) { _save_late_updated_files(); //files need to be updated in the re-scan } - //print_line("UPDATING: "+p_file); fs->files[cpos]->type = type; fs->files[cpos]->modified_time = FileAccess::get_modified_time(p_file); fs->files[cpos]->deps = _get_dependencies(p_file); fs->files[cpos]->import_valid = ResourceLoader::is_import_valid(p_file); - //if (FileAccess::exists(p_file+".import")) { - // fs->files[cpos]->import_modified_time=FileAccess::get_modified_time(p_file+".import"); - //} EditorResourcePreview::get_singleton()->call_deferred("check_for_invalidation", p_file); call_deferred("emit_signal", "filesystem_changed"); //update later @@ -1326,8 +1272,6 @@ void EditorFileSystem::update_file(const String &p_file) { void EditorFileSystem::_reimport_file(const String &p_file) { - print_line("REIMPORTING: " + p_file); - EditorFileSystemDirectory *fs = NULL; int cpos = -1; bool found = _find_file(p_file, &fs, cpos); @@ -1383,7 +1327,7 @@ void EditorFileSystem::_reimport_file(const String &p_file) { } } - if (load_default && ProjectSettings::get_singleton()->has("importer_defaults/" + importer->get_importer_name())) { + if (load_default && ProjectSettings::get_singleton()->has_setting("importer_defaults/" + importer->get_importer_name())) { //use defaults if exist Dictionary d = ProjectSettings::get_singleton()->get("importer_defaults/" + importer->get_importer_name()); List<Variant> v; @@ -1498,10 +1442,22 @@ void EditorFileSystem::reimport_files(const Vector<String> &p_files) { importing = true; EditorProgress pr("reimport", TTR("(Re)Importing Assets"), p_files.size()); + + Vector<ImportFile> files; + for (int i = 0; i < p_files.size(); i++) { - pr.step(p_files[i].get_file(), i); + ImportFile ifile; + ifile.path = p_files[i]; + ifile.order = ResourceFormatImporter::get_singleton()->get_import_order(p_files[i]); + files.push_back(ifile); + } + + files.sort(); + + for (int i = 0; i < files.size(); i++) { + pr.step(files[i].path.get_file(), i); - _reimport_file(p_files[i]); + _reimport_file(files[i].path); } _save_filesystem_cache(); diff --git a/editor/editor_file_system.h b/editor/editor_file_system.h index cee3219b43..ebcc091b0a 100644 --- a/editor/editor_file_system.h +++ b/editor/editor_file_system.h @@ -206,6 +206,14 @@ class EditorFileSystem : public Node { Vector<String> _get_dependencies(const String &p_path); + struct ImportFile { + String path; + int order; + bool operator<(const ImportFile &p_if) const { + return order < p_if.order; + } + }; + protected: void _notification(int p_what); static void _bind_methods(); diff --git a/editor/editor_fonts.cpp b/editor/editor_fonts.cpp index 6e5726a16d..05f9da03e1 100644 --- a/editor/editor_fonts.cpp +++ b/editor/editor_fonts.cpp @@ -122,7 +122,7 @@ void editor_register_fonts(Ref<Theme> p_theme) { dfmono->set_font_ptr(_font_Hack_Regular, _font_Hack_Regular_size); //dfd->set_force_autohinter(true); //just looks better..i think? - MAKE_DEFAULT_FONT(df, int(EditorSettings::get_singleton()->get("interface/font_size")) * EDSCALE); + MAKE_DEFAULT_FONT(df, int(EditorSettings::get_singleton()->get("interface/editor/font_size")) * EDSCALE); p_theme->set_default_theme_font(df); @@ -142,7 +142,7 @@ void editor_register_fonts(Ref<Theme> p_theme) { Ref<DynamicFont> df_code; df_code.instance(); - df_code->set_size(int(EditorSettings::get_singleton()->get("interface/source_font_size")) * EDSCALE); + df_code->set_size(int(EditorSettings::get_singleton()->get("interface/editor/source_font_size")) * EDSCALE); df_code->set_font_data(dfmono); MAKE_FALLBACKS(df_code); @@ -158,6 +158,25 @@ void editor_register_fonts(Ref<Theme> p_theme) { p_theme->set_font("doc_source", "EditorFonts", df_doc_code); + Ref<DynamicFont> df_output_code; + df_output_code.instance(); + df_output_code->set_size(int(EDITOR_DEF("run/output/font_size", 13)) * EDSCALE); + df_output_code->set_spacing(DynamicFont::SPACING_TOP, -EDSCALE); + df_output_code->set_spacing(DynamicFont::SPACING_BOTTOM, -EDSCALE); + df_output_code->set_font_data(dfmono); + MAKE_FALLBACKS(df_output_code); + + p_theme->set_font("output_source", "EditorFonts", df_output_code); + + Ref<DynamicFont> df_text_editor_status_code; + df_output_code.instance(); + df_output_code->set_size(14 * EDSCALE); + df_output_code->set_spacing(DynamicFont::SPACING_TOP, -EDSCALE); + df_output_code->set_spacing(DynamicFont::SPACING_BOTTOM, -EDSCALE); + df_output_code->set_font_data(dfmono); + MAKE_FALLBACKS(df_output_code); + p_theme->set_font("status_source", "EditorFonts", df_output_code); + //replace default theme Ref<Texture> di; Ref<StyleBox> ds; diff --git a/editor/editor_help.cpp b/editor/editor_help.cpp index 6c8bd0f14b..2c4d3035a4 100644 --- a/editor/editor_help.cpp +++ b/editor/editor_help.cpp @@ -650,8 +650,8 @@ Error EditorHelp::_goto_desc(const String &p_class, int p_vscr) { // Colors const Color title_color = get_color("accent_color", "Editor"); - const Color text_color = get_color("font_color", "RichTextLabel"); - const Color highlight_color = get_color("highlight_color", "RichTextLabel"); + const Color text_color = get_color("default_color", "RichTextLabel"); + const Color headline_color = get_color("headline_color", "EditorHelp"); const Color base_type_color = title_color.linear_interpolate(text_color, 0.5); const Color comment_color = Color(text_color.r, text_color.g, text_color.b, 0.6); const Color symbol_color = comment_color; @@ -669,7 +669,7 @@ Error EditorHelp::_goto_desc(const String &p_class, int p_vscr) { class_desc->push_font(doc_title_font); class_desc->push_color(title_color); class_desc->add_text(TTR("Class:") + " "); - class_desc->push_color(highlight_color); + class_desc->push_color(headline_color); _add_text(p_class); class_desc->pop(); class_desc->pop(); @@ -694,7 +694,7 @@ Error EditorHelp::_goto_desc(const String &p_class, int p_vscr) { inherits = doc->class_list[inherits].inherits; if (inherits != "") { - class_desc->add_text(" , "); + class_desc->add_text(" < "); } } @@ -812,7 +812,7 @@ Error EditorHelp::_goto_desc(const String &p_class, int p_vscr) { } class_desc->push_font(doc_code_font); - class_desc->push_color(highlight_color); + class_desc->push_color(headline_color); _add_text(cd.properties[i].name); if (describe) { @@ -883,7 +883,7 @@ Error EditorHelp::_goto_desc(const String &p_class, int p_vscr) { method_descr = true; class_desc->push_meta("@" + methods[i].name); } - class_desc->push_color(highlight_color); + class_desc->push_color(headline_color); _add_text(methods[i].name); class_desc->pop(); if (methods[i].description != "") @@ -969,7 +969,7 @@ Error EditorHelp::_goto_desc(const String &p_class, int p_vscr) { class_desc->push_cell(); class_desc->push_font(doc_code_font); - class_desc->push_color(highlight_color); + class_desc->push_color(headline_color); _add_text(cd.theme_properties[i].name); class_desc->pop(); class_desc->pop(); @@ -1015,7 +1015,7 @@ Error EditorHelp::_goto_desc(const String &p_class, int p_vscr) { class_desc->push_font(doc_code_font); // monofont //_add_type("void"); //class_desc->add_text(" "); - class_desc->push_color(highlight_color); + class_desc->push_color(headline_color); _add_text(cd.signals[i].name); class_desc->pop(); class_desc->push_color(symbol_color); @@ -1102,7 +1102,7 @@ Error EditorHelp::_goto_desc(const String &p_class, int p_vscr) { e = e.get_slice(".", 1); } - class_desc->push_color(highlight_color); + class_desc->push_color(headline_color); class_desc->add_text(e); class_desc->pop(); class_desc->pop(); @@ -1117,7 +1117,7 @@ Error EditorHelp::_goto_desc(const String &p_class, int p_vscr) { for (int i = 0; i < enum_list.size(); i++) { class_desc->push_font(doc_code_font); - class_desc->push_color(highlight_color); + class_desc->push_color(headline_color); _add_text(enum_list[i].name); class_desc->pop(); class_desc->push_color(symbol_color); @@ -1165,7 +1165,7 @@ Error EditorHelp::_goto_desc(const String &p_class, int p_vscr) { constant_line[constants[i].name] = class_desc->get_line_count() - 2; class_desc->push_font(doc_code_font); - class_desc->push_color(highlight_color); + class_desc->push_color(headline_color); _add_text(constants[i].name); class_desc->pop(); class_desc->push_color(symbol_color); @@ -1235,7 +1235,7 @@ Error EditorHelp::_goto_desc(const String &p_class, int p_vscr) { _add_type(cd.properties[i].type, cd.properties[i].enumeration); class_desc->add_text(" "); - class_desc->push_color(highlight_color); + class_desc->push_color(headline_color); _add_text(cd.properties[i].name); class_desc->pop(); //color @@ -1324,7 +1324,7 @@ Error EditorHelp::_goto_desc(const String &p_class, int p_vscr) { _add_type(methods[i].return_type, methods[i].return_enum); class_desc->add_text(" "); - class_desc->push_color(highlight_color); + class_desc->push_color(headline_color); _add_text(methods[i].name); class_desc->pop(); class_desc->push_color(symbol_color); @@ -1456,7 +1456,7 @@ static void _add_text_to_rt(const String &p_bbcode, RichTextLabel *p_rt) { Ref<Font> doc_font = p_rt->get_font("doc", "EditorFonts"); Ref<Font> doc_code_font = p_rt->get_font("doc_source", "EditorFonts"); - Color font_color_hl = p_rt->get_color("highlight_color", "RichTextLabel"); + Color font_color_hl = p_rt->get_color("headline_color", "EditorHelp"); Color link_color = p_rt->get_color("accent_color", "Editor").linear_interpolate(font_color_hl, 0.8); String bbcode = p_bbcode.replace("\t", " ").replace("\r", " ").strip_edges(); @@ -1695,14 +1695,11 @@ void EditorHelp::_notification(int p_what) { //back->set_icon(get_icon("Back","EditorIcons")); _update_doc(); - class_desc->add_style_override("normal", class_desc->get_stylebox("code_normal", "RichTextLabel")); - class_desc->add_style_override("focus", class_desc->get_stylebox("code_focus", "RichTextLabel")); - } break; case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: { - class_desc->add_color_override("selection_color", EDITOR_DEF("text_editor/highlighting/selection_color", Color(0.2, 0.2, 1))); + class_desc->add_color_override("selection_color", get_color("text_editor/theme/selection_color", "Editor")); } break; @@ -1790,9 +1787,8 @@ EditorHelp::EditorHelp() { { class_desc = memnew(RichTextLabel); vbc->add_child(class_desc); - class_desc->set_area_as_parent_rect(); class_desc->set_v_size_flags(SIZE_EXPAND_FILL); - class_desc->add_color_override("selection_color", EDITOR_DEF("text_editor/highlighting/selection_color", Color(0.2, 0.2, 1))); + class_desc->add_color_override("selection_color", get_color("text_editor/theme/selection_color", "Editor")); class_desc->connect("meta_clicked", this, "_class_desc_select"); class_desc->connect("gui_input", this, "_class_desc_input"); } @@ -1883,7 +1879,7 @@ void EditorHelpBit::_notification(int p_what) { switch (p_what) { case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: { - rich_text->add_color_override("selection_color", EDITOR_DEF("text_editor/highlighting/selection_color", Color(0.2, 0.2, 1))); + rich_text->add_color_override("selection_color", get_color("text_editor/theme/selection_color", "Editor")); } break; default: break; @@ -1900,8 +1896,9 @@ EditorHelpBit::EditorHelpBit() { rich_text = memnew(RichTextLabel); add_child(rich_text); - rich_text->set_area_as_parent_rect(); + rich_text->set_anchors_and_margins_preset(Control::PRESET_WIDE); rich_text->connect("meta_clicked", this, "_meta_clicked"); - rich_text->add_color_override("selection_color", EDITOR_DEF("text_editor/highlighting/selection_color", Color(0.2, 0.2, 1))); + rich_text->add_color_override("selection_color", get_color("text_editor/theme/selection_color", "Editor")); + rich_text->set_override_selected_font_color(false); set_custom_minimum_size(Size2(0, 70 * EDSCALE)); } diff --git a/editor/editor_log.cpp b/editor/editor_log.cpp index 481f2aaecf..407420d3d0 100644 --- a/editor/editor_log.cpp +++ b/editor/editor_log.cpp @@ -31,6 +31,7 @@ #include "editor_node.h" #include "scene/gui/center_container.h" +#include "scene/resources/dynamic_font.h" #include "version.h" void EditorLog::_error_handler(void *p_self, const char *p_func, const char *p_file, int p_line, const char *p_error, const char *p_errorexp, ErrorHandlerType p_type) { @@ -51,7 +52,6 @@ void EditorLog::_error_handler(void *p_self, const char *p_func, const char *p_f self->emit_signal("show_request"); */ - err_str = " " + err_str; self->add_message(err_str, true); } @@ -60,6 +60,13 @@ void EditorLog::_notification(int p_what) { if (p_what == NOTIFICATION_ENTER_TREE) { //button->set_icon(get_icon("Console","EditorIcons")); + log->add_font_override("normal_font", get_font("output_source", "EditorFonts")); + } else if (p_what == NOTIFICATION_THEME_CHANGED) { + Ref<DynamicFont> df_output_code = get_font("output_source", "EditorFonts"); + if (df_output_code.is_valid()) { + df_output_code->set_size(int(EDITOR_DEF("run/output/font_size", 13)) * EDSCALE); + log->add_font_override("normal_font", get_font("output_source", "EditorFonts")); + } } /*if (p_what==NOTIFICATION_DRAW) { @@ -85,15 +92,13 @@ void EditorLog::clear() { void EditorLog::add_message(const String &p_msg, bool p_error) { - Ref<Font> doc_code_font = get_font("doc_source", "EditorFonts"); - log->push_font(doc_code_font); - log->add_newline(); if (p_error) { log->push_color(get_color("error_color", "Editor")); Ref<Texture> icon = get_icon("Error", "EditorIcons"); log->add_image(icon); + log->add_text(" "); //button->set_icon(icon); } else { //button->set_icon(Ref<Texture>()); @@ -104,8 +109,6 @@ void EditorLog::add_message(const String &p_msg, bool p_error) { if (p_error) log->pop(); - - log->pop(); // pop font; } /* @@ -158,7 +161,6 @@ EditorLog::EditorLog() { log->set_selection_enabled(true); log->set_focus_mode(FOCUS_CLICK); log->set_custom_minimum_size(Size2(0, 180) * EDSCALE); - log->set_area_as_parent_rect(); log->set_v_size_flags(SIZE_EXPAND_FILL); log->set_h_size_flags(SIZE_EXPAND_FILL); vb->add_child(log); diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp index 1a89d6ef6e..b77525c0ba 100644 --- a/editor/editor_node.cpp +++ b/editor/editor_node.cpp @@ -114,7 +114,7 @@ EditorNode *EditorNode::singleton = NULL; void EditorNode::_update_scene_tabs() { - bool show_rb = EditorSettings::get_singleton()->get("interface/show_script_in_scene_tabs"); + bool show_rb = EditorSettings::get_singleton()->get("interface/editor/show_script_in_scene_tabs"); scene_tabs->clear_tabs(); Ref<Texture> script_icon = gui_base->get_icon("Script", "EditorIcons"); @@ -282,8 +282,8 @@ void EditorNode::_notification(int p_what) { } if (p_what == EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED) { - scene_tabs->set_tab_close_display_policy((bool(EDITOR_DEF("interface/always_show_close_button_in_scene_tabs", false)) ? Tabs::CLOSE_BUTTON_SHOW_ALWAYS : Tabs::CLOSE_BUTTON_SHOW_ACTIVE_ONLY)); - property_editor->set_enable_capitalize_paths(bool(EDITOR_DEF("interface/capitalize_properties", true))); + scene_tabs->set_tab_close_display_policy((bool(EDITOR_DEF("interface/editor/always_show_close_button_in_scene_tabs", false)) ? Tabs::CLOSE_BUTTON_SHOW_ALWAYS : Tabs::CLOSE_BUTTON_SHOW_ACTIVE_ONLY)); + property_editor->set_enable_capitalize_paths(bool(EDITOR_DEF("interface/editor/capitalize_properties", true))); Ref<Theme> theme = create_editor_theme(theme_base->get_theme()); theme_base->set_theme(theme); @@ -308,6 +308,12 @@ void EditorNode::_notification(int p_what) { } _update_scene_tabs(); + recent_scenes->set_as_minsize(); + + // debugger area + if (ScriptEditor::get_singleton()->get_debugger()->is_visible()) + bottom_panel->add_style_override("panel", gui_base->get_stylebox("BottomPanelDebuggerOverride", "EditorStyles")); + //_update_icons for (int i = 0; i < singleton->main_editor_buttons.size(); i++) { main_editor_buttons[i]->set_icon(gui_base->get_icon(singleton->main_editor_buttons[i]->get_name(), "EditorIcons")); @@ -369,6 +375,9 @@ void EditorNode::_fs_changed() { String err = "Preset \"" + export_defer.preset + "\" doesn't have a platform."; ERR_PRINT(err.utf8().get_data()); } else { + // ensures export_project does not loop infinitely, because notifications may + // come during the export + export_defer.preset = ""; platform->export_project(preset, export_defer.debug, export_defer.path, /*p_flags*/ 0); } } @@ -399,7 +408,6 @@ void EditorNode::_fs_changed() { uint64_t mt = FileAccess::get_modified_time(E->get()->get_import_path()); if (mt != E->get()->get_import_last_modified_time()) { - print_line("success"); changed.push_back(E->get()); } #endif @@ -424,7 +432,7 @@ void EditorNode::_fs_changed() { } void EditorNode::_resources_reimported(const Vector<String> &p_resources) { - print_line("reimporting"); + List<String> scenes; //will load later for (int i = 0; i < p_resources.size(); i++) { @@ -456,7 +464,6 @@ void EditorNode::_sources_changed(bool p_exist) { if (defer_load_scene != "") { - print_line("loading scene DEFERRED"); load_scene(defer_load_scene); defer_load_scene = ""; } @@ -774,7 +781,6 @@ bool EditorNode::_find_and_save_resource(RES p_res, Map<RES, bool> &processed, i if (p_res->get_path().is_resource_file()) { if (changed || subchanged) { //save - print_line("Also saving modified external resource: " + p_res->get_path()); ResourceSaver::save(p_res->get_path(), p_res, flags); } processed[p_res] = false; //because it's a file @@ -1447,7 +1453,7 @@ void EditorNode::_edit_current() { } } else if (current_res->get_path().is_resource_file()) { if (FileAccess::exists(current_res->get_path() + ".import")) { - editable_warning = TTR("This resource was imported, so it's not editable. Change it's settings in the import panel and re-import."); + editable_warning = TTR("This resource was imported, so it's not editable. Change its settings in the import panel and then re-import."); } } } else if (is_node) { @@ -1984,7 +1990,6 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) { case EDIT_UNDO: { if (Input::get_singleton()->get_mouse_button_mask() & 0x7) { - print_line("no because state"); break; // can't undo while mouse buttons are pressed } @@ -2240,10 +2245,10 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) { case RUN_PROJECT_MANAGER: { if (!p_confirmed) { - bool save_each = EDITOR_DEF("interface/save_each_scene_on_quit", true); + bool save_each = EDITOR_DEF("interface/editor/save_each_scene_on_quit", true); if (_next_unsaved_scene(!save_each) == -1) { - bool confirm = EDITOR_DEF("interface/quit_confirmation", true); + bool confirm = EDITOR_DEF("interface/editor/quit_confirmation", true); if (confirm) { confirmation->get_ok()->set_text(p_option == FILE_QUIT ? TTR("Quit") : TTR("Yes")); @@ -2568,7 +2573,7 @@ void EditorNode::_editor_select(int p_which) { editor_data.get_editor_plugin(i)->notify_main_screen_changed(editor_plugin_screen->get_name()); } - if (EditorSettings::get_singleton()->get("interface/separate_distraction_mode")) { + if (EditorSettings::get_singleton()->get("interface/editor/separate_distraction_mode")) { if (p_which == EDITOR_SCRIPT) { set_distraction_free_mode(script_distraction); } else { @@ -2953,7 +2958,6 @@ Error EditorNode::load_scene(const String &p_scene, bool p_ignore_broken_deps, b dependency_errors.clear(); - print_line("actually loading it"); Error err; Ref<PackedScene> sdata = ResourceLoader::load(lpath, "", true, &err); if (!sdata.is_valid()) { @@ -3149,12 +3153,19 @@ void EditorNode::_add_to_recent_scenes(const String &p_scene) { void EditorNode::_open_recent_scene(int p_idx) { String base = "_" + ProjectSettings::get_singleton()->get_resource_path().replace("\\", "::").replace("/", "::"); - Vector<String> rc = EDITOR_DEF(base + "/_recent_scenes", Array()); - ERR_FAIL_INDEX(p_idx, rc.size()); + if (p_idx == recent_scenes->get_item_count() - 1) { + + EditorSettings::get_singleton()->erase(base + "/_recent_scenes"); + call_deferred("_update_recent_scenes"); + } else { + + Vector<String> rc = EDITOR_DEF(base + "/_recent_scenes", Array()); + ERR_FAIL_INDEX(p_idx, rc.size()); - String path = "res://" + rc[p_idx]; - load_scene(path); + String path = "res://" + rc[p_idx]; + load_scene(path); + } } void EditorNode::_update_recent_scenes() { @@ -3162,10 +3173,15 @@ void EditorNode::_update_recent_scenes() { String base = "_" + ProjectSettings::get_singleton()->get_resource_path().replace("\\", "::").replace("/", "::"); Vector<String> rc = EDITOR_DEF(base + "/_recent_scenes", Array()); recent_scenes->clear(); + for (int i = 0; i < rc.size(); i++) { recent_scenes->add_item(rc[i], i); } + + recent_scenes->add_separator(); + recent_scenes->add_shortcut(ED_SHORTCUT("editor/clear_recent", TTR("Clear Recent Scenes"))); + recent_scenes->set_as_minsize(); } void EditorNode::_quick_opened() { @@ -3247,6 +3263,7 @@ void EditorNode::register_editor_types() { ClassDB::register_virtual_class<ScriptEditor>(); ClassDB::register_virtual_class<EditorInterface>(); ClassDB::register_class<EditorExportPlugin>(); + ClassDB::register_class<EditorResourceConversionPlugin>(); // FIXME: Is this stuff obsolete, or should it be ported to new APIs? //ClassDB::register_class<EditorScenePostImport>(); @@ -3467,7 +3484,7 @@ void EditorNode::_dock_select_draw() { Color used = Color(0.6, 0.6, 0.6, 0.8); Color used_selected = Color(0.8, 0.8, 0.8, 0.8); - Color tab_selected = Color(1, 1, 1, 1); + Color tab_selected = theme_base->get_color("mono_color", "Editor"); Color unused = used; unused.a = 0.4; Color unusable = unused; @@ -4061,29 +4078,25 @@ void EditorNode::_bottom_panel_switch(bool p_enable, int p_idx) { ERR_FAIL_INDEX(p_idx, bottom_panel_items.size()); if (p_enable) { - // this is the debug panel wich uses tabs, so the top section should be smaller - if (ScriptEditor::get_singleton()->get_debugger() == bottom_panel_items[p_idx].control) { - Ref<StyleBoxFlat> style_panel_invisible_top = gui_base->get_stylebox("debugger_panel", "EditorStyles"); - bottom_panel->add_style_override("panel", style_panel_invisible_top); - } else { - bottom_panel->add_style_override("panel", gui_base->get_stylebox("panel", "TabContainer")); - } for (int i = 0; i < bottom_panel_items.size(); i++) { bottom_panel_items[i].button->set_pressed(i == p_idx); bottom_panel_items[i].control->set_visible(i == p_idx); } + if (ScriptEditor::get_singleton()->get_debugger() == bottom_panel_items[p_idx].control) { // this is the debug panel wich uses tabs, so the top section should be smaller + bottom_panel->add_style_override("panel", gui_base->get_stylebox("BottomPanelDebuggerOverride", "EditorStyles")); + } else { + bottom_panel->add_style_override("panel", gui_base->get_stylebox("panel", "TabContainer")); + } center_split->set_dragger_visibility(SplitContainer::DRAGGER_VISIBLE); center_split->set_collapsed(false); } else { bottom_panel->add_style_override("panel", gui_base->get_stylebox("panel", "TabContainer")); - for (int i = 0; i < bottom_panel_items.size(); i++) { bottom_panel_items[i].button->set_pressed(false); bottom_panel_items[i].control->set_visible(false); } - center_split->set_dragger_visibility(SplitContainer::DRAGGER_HIDDEN); center_split->set_collapsed(true); } @@ -4100,7 +4113,7 @@ bool EditorNode::get_docks_visible() const { void EditorNode::_toggle_distraction_free_mode() { - if (EditorSettings::get_singleton()->get("interface/separate_distraction_mode")) { + if (EditorSettings::get_singleton()->get("interface/editor/separate_distraction_mode")) { int screen = -1; for (int i = 0; i < editor_table.size(); i++) { if (editor_plugin_screen == editor_table[i]) { @@ -4281,15 +4294,11 @@ void EditorNode::reload_scene(const String &p_path) { //first of all, reload internal textures, materials, meshes, etc. as they might have changed on disk - print_line("reloading: " + p_path); List<Ref<Resource> > cached; ResourceCache::get_cached_resources(&cached); List<Ref<Resource> > to_clear; //clear internal resources from previous scene from being used for (List<Ref<Resource> >::Element *E = cached.front(); E; E = E->next()) { - if (E->get()->get_path().find("::") != -1) { - print_line(E->get()->get_path()); - } if (E->get()->get_path().begins_with(p_path + "::")) { //subresources of existing scene to_clear.push_back(E->get()); } @@ -4297,7 +4306,6 @@ void EditorNode::reload_scene(const String &p_path) { //so reload reloads everything, clear subresources of previous scene while (to_clear.front()) { - print_line("bye bye: " + to_clear.front()->get()->get_path()); to_clear.front()->get()->set_path(""); to_clear.pop_front(); } @@ -4384,7 +4392,7 @@ void EditorNode::_open_imported() { void EditorNode::dim_editor(bool p_dimming) { static int dim_count = 0; - bool dim_ui = EditorSettings::get_singleton()->get("interface/dim_editor_on_dialog_popup"); + bool dim_ui = EditorSettings::get_singleton()->get("interface/editor/dim_editor_on_dialog_popup"); if (p_dimming) { if (dim_ui) { if (dim_count == 0) { @@ -4411,9 +4419,9 @@ void EditorNode::_start_dimming(bool p_dimming) { void EditorNode::_dim_timeout() { _dim_time += _dim_timer->get_wait_time(); - float wait_time = EditorSettings::get_singleton()->get("interface/dim_transition_time"); + float wait_time = EditorSettings::get_singleton()->get("interface/editor/dim_transition_time"); - float c = 1.0f - (float)EditorSettings::get_singleton()->get("interface/dim_amount"); + float c = 1.0f - (float)EditorSettings::get_singleton()->get("interface/editor/dim_amount"); Color base = _dimming ? Color(1, 1, 1) : Color(c, c, c); Color final = _dimming ? Color(c, c, c) : Color(1, 1, 1); @@ -4426,27 +4434,32 @@ void EditorNode::_dim_timeout() { } } -void EditorNode::_check_gui_base_size() { - if (gui_base->get_size().width > 1200 * EDSCALE) { - for (int i = 0; i < singleton->main_editor_button_vb->get_child_count(); i++) { - ToolButton *btn = Object::cast_to<ToolButton>(singleton->main_editor_button_vb->get_child(i)); - if (btn == singleton->distraction_free) continue; - btn->set_text(btn->get_name()); - } - } else { - for (int i = 0; i < singleton->main_editor_button_vb->get_child_count(); i++) { - ToolButton *btn = Object::cast_to<ToolButton>(singleton->main_editor_button_vb->get_child(i)); - if (btn == singleton->distraction_free) continue; - btn->set_text(""); - } - } -} - void EditorNode::open_export_template_manager() { export_template_manager->popup_manager(); } +void EditorNode::add_resource_conversion_plugin(const Ref<EditorResourceConversionPlugin> &p_plugin) { + resource_conversion_plugins.push_back(p_plugin); +} + +void EditorNode::remove_resource_conversion_plugin(const Ref<EditorResourceConversionPlugin> &p_plugin) { + resource_conversion_plugins.erase(p_plugin); +} + +Vector<Ref<EditorResourceConversionPlugin> > EditorNode::find_resource_conversion_plugin(const Ref<Resource> &p_for_resource) { + + Vector<Ref<EditorResourceConversionPlugin> > ret; + + for (int i = 0; i < resource_conversion_plugins.size(); i++) { + if (resource_conversion_plugins[i].is_valid() && resource_conversion_plugins[i]->handles(p_for_resource)) { + ret.push_back(resource_conversion_plugins[i]); + } + } + + return ret; +} + void EditorNode::_bind_methods() { ClassDB::bind_method("_menu_option", &EditorNode::_menu_option); @@ -4504,6 +4517,7 @@ void EditorNode::_bind_methods() { ClassDB::bind_method("_set_main_scene_state", &EditorNode::_set_main_scene_state); ClassDB::bind_method("_update_scene_tabs", &EditorNode::_update_scene_tabs); ClassDB::bind_method("_discard_changes", &EditorNode::_discard_changes); + ClassDB::bind_method("_update_recent_scenes", &EditorNode::_update_recent_scenes); ClassDB::bind_method("_prepare_history", &EditorNode::_prepare_history); ClassDB::bind_method("_select_history", &EditorNode::_select_history); @@ -4521,7 +4535,6 @@ void EditorNode::_bind_methods() { ClassDB::bind_method(D_METHOD("_open_imported"), &EditorNode::_open_imported); ClassDB::bind_method(D_METHOD("_inherit_imported"), &EditorNode::_inherit_imported); ClassDB::bind_method(D_METHOD("_dim_timeout"), &EditorNode::_dim_timeout); - ClassDB::bind_method(D_METHOD("_check_gui_base_size"), &EditorNode::_check_gui_base_size); ClassDB::bind_method(D_METHOD("_resources_reimported"), &EditorNode::_resources_reimported); @@ -4581,9 +4594,10 @@ EditorNode::EditorNode() { EditorSettings::create(); { - int dpi_mode = EditorSettings::get_singleton()->get("interface/hidpi_mode"); + int dpi_mode = EditorSettings::get_singleton()->get("interface/editor/hidpi_mode"); if (dpi_mode == 0) { - editor_set_scale(OS::get_singleton()->get_screen_dpi(0) >= 192 && OS::get_singleton()->get_screen_size(OS::get_singleton()->get_current_screen()).x > 2000 ? 2.0 : 1.0); + const int screen = OS::get_singleton()->get_current_screen(); + editor_set_scale(OS::get_singleton()->get_screen_dpi(screen) >= 192 && OS::get_singleton()->get_screen_size(screen).x > 2000 ? 2.0 : 1.0); } else if (dpi_mode == 1) { editor_set_scale(0.75); } else if (dpi_mode == 2) { @@ -4618,6 +4632,10 @@ EditorNode::EditorNode() { import_wav.instance(); ResourceFormatImporter::get_singleton()->add_importer(import_wav); + Ref<ResourceImporterOBJ> import_obj; + import_obj.instance(); + ResourceFormatImporter::get_singleton()->add_importer(import_obj); + Ref<ResourceImporterScene> import_scene; import_scene.instance(); ResourceFormatImporter::get_singleton()->add_importer(import_scene); @@ -4666,12 +4684,11 @@ EditorNode::EditorNode() { theme_base = memnew(Control); add_child(theme_base); - theme_base->set_area_as_parent_rect(); + theme_base->set_anchors_and_margins_preset(Control::PRESET_WIDE); gui_base = memnew(Panel); theme_base->add_child(gui_base); - gui_base->set_area_as_parent_rect(); - gui_base->connect("item_rect_changed", this, "_check_gui_base_size"); + gui_base->set_anchors_and_margins_preset(Control::PRESET_WIDE); Ref<Theme> theme = create_editor_theme(); theme_base->set_theme(theme); @@ -4690,7 +4707,7 @@ EditorNode::EditorNode() { main_vbox = memnew(VBoxContainer); gui_base->add_child(main_vbox); - main_vbox->set_area_as_parent_rect(8); + main_vbox->set_anchors_and_margins_preset(Control::PRESET_WIDE, Control::PRESET_MODE_MINSIZE, 8); main_vbox->set_margin(MARGIN_TOP, 5 * EDSCALE); menu_hb = memnew(HBoxContainer); @@ -4833,7 +4850,7 @@ EditorNode::EditorNode() { scene_tabs->add_style_override("tab_bg", gui_base->get_stylebox("SceneTabBG", "EditorStyles")); scene_tabs->add_tab("unsaved"); scene_tabs->set_tab_align(Tabs::ALIGN_LEFT); - scene_tabs->set_tab_close_display_policy((bool(EDITOR_DEF("interface/always_show_close_button_in_scene_tabs", false)) ? Tabs::CLOSE_BUTTON_SHOW_ALWAYS : Tabs::CLOSE_BUTTON_SHOW_ACTIVE_ONLY)); + scene_tabs->set_tab_close_display_policy((bool(EDITOR_DEF("interface/editor/always_show_close_button_in_scene_tabs", false)) ? Tabs::CLOSE_BUTTON_SHOW_ALWAYS : Tabs::CLOSE_BUTTON_SHOW_ACTIVE_ONLY)); scene_tabs->set_min_width(int(EDITOR_DEF("interface/scene_tabs/minimum_width", 50)) * EDSCALE); scene_tabs->connect("tab_changed", this, "_scene_tab_changed"); scene_tabs->connect("right_button_pressed", this, "_scene_tab_script_edited"); @@ -5079,9 +5096,6 @@ EditorNode::EditorNode() { play_cc = memnew(CenterContainer); play_cc->set_mouse_filter(Control::MOUSE_FILTER_IGNORE); menu_hb->add_child(play_cc); - play_cc->set_area_as_parent_rect(); - play_cc->set_anchor_and_margin(MARGIN_BOTTOM, Control::ANCHOR_BEGIN, 10); - play_cc->set_margin(MARGIN_TOP, 5); play_button_panel = memnew(PanelContainer); // play_button_panel->add_style_override("panel", gui_base->get_stylebox("PlayButtonPanel", "EditorStyles")); @@ -5290,7 +5304,7 @@ EditorNode::EditorNode() { property_editor->set_v_size_flags(Control::SIZE_EXPAND_FILL); property_editor->set_use_doc_hints(true); property_editor->set_hide_script(false); - property_editor->set_enable_capitalize_paths(bool(EDITOR_DEF("interface/capitalize_properties", true))); + property_editor->set_enable_capitalize_paths(bool(EDITOR_DEF("interface/editor/capitalize_properties", true))); property_editor->hide_top_label(); property_editor->register_text_enter(search_box); @@ -5515,6 +5529,15 @@ EditorNode::EditorNode() { resource_preview->add_preview_generator(Ref<EditorMeshPreviewPlugin>(memnew(EditorMeshPreviewPlugin))); resource_preview->add_preview_generator(Ref<EditorBitmapPreviewPlugin>(memnew(EditorBitmapPreviewPlugin))); + { + Ref<SpatialMaterialConversionPlugin> spatial_mat_convert; + spatial_mat_convert.instance(); + resource_conversion_plugins.push_back(spatial_mat_convert); + + Ref<ParticlesMaterialConversionPlugin> particles_mat_convert; + particles_mat_convert.instance(); + resource_conversion_plugins.push_back(particles_mat_convert); + } circle_step_msec = OS::get_singleton()->get_ticks_msec(); circle_step_frame = Engine::get_singleton()->get_frames_drawn(); circle_step = 0; @@ -5603,7 +5626,7 @@ EditorNode::EditorNode() { { _initializing_addons = true; Vector<String> addons; - if (ProjectSettings::get_singleton()->has("editor_plugins/enabled")) { + if (ProjectSettings::get_singleton()->has_setting("editor_plugins/enabled")) { addons = ProjectSettings::get_singleton()->get("editor_plugins/enabled"); } @@ -5664,12 +5687,12 @@ void EditorPluginList::edit(Object *p_object) { } } -bool EditorPluginList::forward_gui_input(const Transform2D &p_canvas_xform, const Ref<InputEvent> &p_event) { +bool EditorPluginList::forward_gui_input(const Ref<InputEvent> &p_event) { bool discard = false; for (int i = 0; i < plugins_list.size(); i++) { - if (plugins_list[i]->forward_canvas_gui_input(p_canvas_xform, p_event)) { + if (plugins_list[i]->forward_canvas_gui_input(p_event)) { discard = true; } } @@ -5693,10 +5716,10 @@ bool EditorPluginList::forward_spatial_gui_input(Camera *p_camera, const Ref<Inp return discard; } -void EditorPluginList::forward_draw_over_canvas(const Transform2D &p_canvas_xform, Control *p_canvas) { +void EditorPluginList::forward_draw_over_canvas(Control *p_canvas) { for (int i = 0; i < plugins_list.size(); i++) { - plugins_list[i]->forward_draw_over_canvas(p_canvas_xform, p_canvas); + plugins_list[i]->forward_draw_over_canvas(p_canvas); } } diff --git a/editor/editor_node.h b/editor/editor_node.h index 33031e5634..32d46e686b 100644 --- a/editor/editor_node.h +++ b/editor/editor_node.h @@ -605,10 +605,11 @@ private: void _start_dimming(bool p_dimming); void _dim_timeout(); - void _check_gui_base_size(); void _license_tree_selected(); + Vector<Ref<EditorResourceConversionPlugin> > resource_conversion_plugins; + protected: void _notification(int p_what); static void _bind_methods(); @@ -777,6 +778,10 @@ public: ~EditorNode(); void get_singleton(const char *arg1, bool arg2); + void add_resource_conversion_plugin(const Ref<EditorResourceConversionPlugin> &p_plugin); + void remove_resource_conversion_plugin(const Ref<EditorResourceConversionPlugin> &p_plugin); + Vector<Ref<EditorResourceConversionPlugin> > find_resource_conversion_plugin(const Ref<Resource> &p_for_resource); + static void add_init_callback(EditorNodeInitCallback p_callback) { _init_callbacks.push_back(p_callback); } static void add_build_callback(EditorBuildCallback p_callback); }; @@ -807,9 +812,9 @@ public: void make_visible(bool p_visible); void edit(Object *p_object); - bool forward_gui_input(const Transform2D &p_canvas_xform, const Ref<InputEvent> &p_event); + bool forward_gui_input(const Ref<InputEvent> &p_event); bool forward_spatial_gui_input(Camera *p_camera, const Ref<InputEvent> &p_event, bool serve_when_force_input_enabled); - void forward_draw_over_canvas(const Transform2D &p_canvas_xform, Control *p_canvas); + void forward_draw_over_canvas(Control *p_canvas); void add_plugin(EditorPlugin *p_plugin); void clear(); bool empty(); diff --git a/editor/editor_plugin.cpp b/editor/editor_plugin.cpp index 246599be11..c8abc1f9db 100644 --- a/editor/editor_plugin.cpp +++ b/editor/editor_plugin.cpp @@ -112,8 +112,10 @@ Vector<Ref<Texture> > EditorInterface::make_mesh_previews(const Vector<Ref<Mesh> Rect3 rot_aabb = xform.xform(aabb); print_line("rot_aabb: " + rot_aabb); float m = MAX(rot_aabb.size.x, rot_aabb.size.y) * 0.5; - if (m == 0) + if (m == 0) { + textures.push_back(Ref<Texture>()); continue; + } m = 1.0 / m; m *= 0.5; print_line("scale: " + rtos(m)); @@ -256,7 +258,7 @@ void EditorInterface::_bind_methods() { ClassDB::bind_method(D_METHOD("get_resource_previewer"), &EditorInterface::get_resource_previewer); ClassDB::bind_method(D_METHOD("get_resource_filesystem"), &EditorInterface::get_resource_file_system); ClassDB::bind_method(D_METHOD("get_editor_viewport"), &EditorInterface::get_editor_viewport); - ClassDB::bind_method(D_METHOD("make_mesh_previews"), &EditorInterface::_make_mesh_previews); + ClassDB::bind_method(D_METHOD("make_mesh_previews", "meshes", "preview_size"), &EditorInterface::_make_mesh_previews); ClassDB::bind_method(D_METHOD("save_scene"), &EditorInterface::save_scene); ClassDB::bind_method(D_METHOD("save_scene_as", "path", "with_preview"), &EditorInterface::save_scene_as, DEFVAL(true)); @@ -400,18 +402,18 @@ Ref<SpatialEditorGizmo> EditorPlugin::create_spatial_gizmo(Spatial *p_spatial) { return Ref<SpatialEditorGizmo>(); } -bool EditorPlugin::forward_canvas_gui_input(const Transform2D &p_canvas_xform, const Ref<InputEvent> &p_event) { +bool EditorPlugin::forward_canvas_gui_input(const Ref<InputEvent> &p_event) { if (get_script_instance() && get_script_instance()->has_method("forward_canvas_gui_input")) { - return get_script_instance()->call("forward_canvas_gui_input", p_canvas_xform, p_event); + return get_script_instance()->call("forward_canvas_gui_input", p_event); } return false; } -void EditorPlugin::forward_draw_over_canvas(const Transform2D &p_canvas_xform, Control *p_canvas) { +void EditorPlugin::forward_draw_over_canvas(Control *p_canvas) { if (get_script_instance() && get_script_instance()->has_method("forward_draw_over_canvas")) { - get_script_instance()->call("forward_draw_over_canvas", p_canvas_xform, p_canvas); + get_script_instance()->call("forward_draw_over_canvas", p_canvas); } } @@ -630,6 +632,7 @@ void EditorPlugin::_bind_methods() { BIND_ENUM_CONSTANT(CONTAINER_SPATIAL_EDITOR_BOTTOM); BIND_ENUM_CONSTANT(CONTAINER_CANVAS_EDITOR_MENU); BIND_ENUM_CONSTANT(CONTAINER_CANVAS_EDITOR_SIDE); + BIND_ENUM_CONSTANT(CONTAINER_CANVAS_EDITOR_BOTTOM); BIND_ENUM_CONSTANT(CONTAINER_PROPERTY_EDITOR_BOTTOM); BIND_ENUM_CONSTANT(DOCK_SLOT_LEFT_UL); diff --git a/editor/editor_plugin.h b/editor/editor_plugin.h index 18530e9ce4..1d68eee117 100644 --- a/editor/editor_plugin.h +++ b/editor/editor_plugin.h @@ -156,8 +156,8 @@ public: void notify_scene_closed(const String &scene_filepath); virtual Ref<SpatialEditorGizmo> create_spatial_gizmo(Spatial *p_spatial); - virtual bool forward_canvas_gui_input(const Transform2D &p_canvas_xform, const Ref<InputEvent> &p_event); - virtual void forward_draw_over_canvas(const Transform2D &p_canvas_xform, Control *p_canvas); + virtual bool forward_canvas_gui_input(const Ref<InputEvent> &p_event); + virtual void forward_draw_over_canvas(Control *p_canvas); virtual bool forward_spatial_gui_input(Camera *p_camera, const Ref<InputEvent> &p_event); virtual String get_name() const; virtual bool has_main_screen() const; diff --git a/editor/editor_plugin_settings.cpp b/editor/editor_plugin_settings.cpp index 6732d7048f..8baa56b9b4 100644 --- a/editor/editor_plugin_settings.cpp +++ b/editor/editor_plugin_settings.cpp @@ -127,10 +127,10 @@ void EditorPluginSettings::update_plugins() { item->set_editable(3, true); if (EditorNode::get_singleton()->is_addon_plugin_enabled(d)) { - item->set_custom_color(3, Color(0.2, 1, 0.2)); + item->set_custom_color(3, get_color("success_color", "Editor")); item->set_range(3, 1); } else { - item->set_custom_color(3, Color(1, 0.2, 0.2)); + item->set_custom_color(3, get_color("disabled_font_color", "Editor")); item->set_range(3, 0); } } @@ -160,9 +160,9 @@ void EditorPluginSettings::_plugin_activity_changed() { } if (is_active) - ti->set_custom_color(3, Color(0.2, 1, 0.2)); + ti->set_custom_color(3, get_color("success_color", "Editor")); else - ti->set_custom_color(3, Color(1, 0.2, 0.2)); + ti->set_custom_color(3, get_color("disabled_font_color", "Editor")); } void EditorPluginSettings::_bind_methods() { diff --git a/editor/editor_profiler.cpp b/editor/editor_profiler.cpp index 247775fa1d..faf49ffd41 100644 --- a/editor/editor_profiler.cpp +++ b/editor/editor_profiler.cpp @@ -89,7 +89,7 @@ void EditorProfiler::clear() { variables->clear(); //activate->set_pressed(false); plot_sigs.clear(); - plot_sigs.insert("fixed_frame_time"); + plot_sigs.insert("physics_frame_time"); plot_sigs.insert("category_frame_time"); updating_frame = true; @@ -120,9 +120,9 @@ String EditorProfiler::_get_time_as_text(Metric &m, float p_time, int p_calls) { return rtos(p_time / p_calls); } else if (dmode == DISPLAY_FRAME_PERCENT) { return _get_percent_txt(p_time, m.frame_time); - } else if (dmode == DISPLAY_FIXED_FRAME_PERCENT) { + } else if (dmode == DISPLAY_PHYSICS_FRAME_PERCENT) { - return _get_percent_txt(p_time, m.fixed_frame_time); + return _get_percent_txt(p_time, m.physics_frame_time); } return "err"; @@ -634,7 +634,7 @@ EditorProfiler::EditorProfiler() { display_mode->add_item(TTR("Frame Time (sec)")); display_mode->add_item(TTR("Average Time (sec)")); display_mode->add_item(TTR("Frame %")); - display_mode->add_item(TTR("Fixed Frame %")); + display_mode->add_item(TTR("Physics Frame %")); display_mode->connect("item_selected", this, "_combo_changed"); hb->add_child(display_mode); @@ -714,7 +714,7 @@ EditorProfiler::EditorProfiler() { add_child(plot_delay); plot_delay->connect("timeout", this, "_update_plot"); - plot_sigs.insert("fixed_frame_time"); + plot_sigs.insert("physics_frame_time"); plot_sigs.insert("category_frame_time"); seeking = false; diff --git a/editor/editor_profiler.h b/editor/editor_profiler.h index e2d781f125..e9e88ed7f2 100644 --- a/editor/editor_profiler.h +++ b/editor/editor_profiler.h @@ -51,8 +51,8 @@ public: int frame_number; float frame_time; float idle_time; - float fixed_time; - float fixed_frame_time; + float physics_time; + float physics_frame_time; struct Category { @@ -89,7 +89,7 @@ public: DISPLAY_FRAME_TIME, DISPLAY_AVERAGE_TIME, DISPLAY_FRAME_PERCENT, - DISPLAY_FIXED_FRAME_PERCENT, + DISPLAY_PHYSICS_FRAME_PERCENT, }; enum DisplayTime { diff --git a/editor/editor_resource_preview.cpp b/editor/editor_resource_preview.cpp index 437ad5ac3f..f92962a4cb 100644 --- a/editor/editor_resource_preview.cpp +++ b/editor/editor_resource_preview.cpp @@ -185,7 +185,6 @@ void EditorResourcePreview::_thread() { path += ":" + itos(cache[item.path].last_hash); //keep last hash (see description of what this is in condition below) } - print_line("cached: " + item.path); _preview_ready(path, cache[item.path].preview, item.id, item.function, item.userdata); preview_mutex->unlock(); @@ -201,16 +200,12 @@ void EditorResourcePreview::_thread() { if (item.resource.is_valid()) { - print_line("generated: " + item.path); - texture = _generate_preview(item, String()); //adding hash to the end of path (should be ID:<objid>:<hash>) because of 5 argument limit to call_deferred _preview_ready(item.path + ":" + itos(item.resource->hash_edited_version()), texture, item.id, item.function, item.userdata); } else { - print_line("from file: " + item.path); - String temp_path = EditorSettings::get_singleton()->get_settings_path().plus_file("tmp"); String cache_base = ProjectSettings::get_singleton()->globalize_path(item.path).md5_text(); cache_base = temp_path.plus_file("resthumb-" + cache_base); @@ -218,12 +213,9 @@ void EditorResourcePreview::_thread() { //does not have it, try to load a cached thumbnail String file = cache_base + ".txt"; - //print_line("cachetxt at "+file); FileAccess *f = FileAccess::open(file, FileAccess::READ); if (!f) { - //print_line("generate because not cached"); - //generate texture = _generate_preview(item, cache_base); } else { @@ -283,7 +275,6 @@ void EditorResourcePreview::_thread() { } } - //print_line("notify of preview ready"); _preview_ready(item.path, texture, item.id, item.function, item.userdata); } } diff --git a/editor/editor_settings.cpp b/editor/editor_settings.cpp index eb72fdf64b..7c45e19f5f 100644 --- a/editor/editor_settings.cpp +++ b/editor/editor_settings.cpp @@ -54,7 +54,7 @@ EditorSettings *EditorSettings::get_singleton() { return singleton.ptr(); } -bool EditorSettings::_set(const StringName &p_name, const Variant &p_value) { +bool EditorSettings::_set(const StringName &p_name, const Variant &p_value, bool p_emit_signal) { _THREAD_SAFE_METHOD_ @@ -90,7 +90,9 @@ bool EditorSettings::_set(const StringName &p_name, const Variant &p_value) { } } - emit_signal("settings_changed"); + if (p_emit_signal) { + emit_signal("settings_changed"); + } return true; } @@ -131,6 +133,11 @@ bool EditorSettings::_get(const StringName &p_name, Variant &r_ret) const { return true; } +void EditorSettings::_initial_set(const StringName &p_name, const Variant &p_value) { + set(p_name, p_value); + props[p_name].initial = p_value; +} + struct _EVCSort { String name; @@ -188,7 +195,17 @@ void EditorSettings::_get_property_list(List<PropertyInfo> *p_list) const { p_list->push_back(PropertyInfo(Variant::ARRAY, "shortcuts", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR)); //do not edit } -bool EditorSettings::has(String p_var) const { +void EditorSettings::set_setting(const String &p_setting, const Variant &p_value) { + _THREAD_SAFE_METHOD_ + set(p_setting, p_value); +} + +Variant EditorSettings::get_setting(const String &p_setting) const { + _THREAD_SAFE_METHOD_ + return get(p_setting); +} + +bool EditorSettings::has_setting(String p_var) const { _THREAD_SAFE_METHOD_ @@ -211,15 +228,17 @@ void EditorSettings::raise_order(const String &p_name) { Variant _EDITOR_DEF(const String &p_var, const Variant &p_default) { - if (EditorSettings::get_singleton()->has(p_var)) + if (EditorSettings::get_singleton()->has_setting(p_var)) return EditorSettings::get_singleton()->get(p_var); EditorSettings::get_singleton()->set(p_var, p_default); + EditorSettings::get_singleton()->set_initial_value(p_var, p_default); + return p_default; } Variant _EDITOR_GET(const String &p_var) { - ERR_FAIL_COND_V(!EditorSettings::get_singleton()->has(p_var), Variant()) + ERR_FAIL_COND_V(!EditorSettings::get_singleton()->has_setting(p_var), Variant()) return EditorSettings::get_singleton()->get(p_var); } @@ -444,7 +463,7 @@ String EditorSettings::get_settings_path() const { void EditorSettings::setup_language() { - String lang = get("interface/editor_language"); + String lang = get("interface/editor/editor_language"); if (lang == "en") return; //none to do @@ -462,8 +481,8 @@ void EditorSettings::setup_network() { IP::get_singleton()->get_local_addresses(&local_ip); String lip = "127.0.0.1"; String hint; - String current = has("network/debug/remote_host") ? get("network/debug/remote_host") : ""; - int port = has("network/debug/remote_port") ? (int)get("network/debug/remote_port") : 6007; + String current = has_setting("network/debug/remote_host") ? get("network/debug/remote_host") : ""; + int port = has_setting("network/debug/remote_port") ? (int)get("network/debug/remote_port") : 6007; for (List<IP_Address>::Element *E = local_ip.front(); E; E = E->next()) { @@ -546,221 +565,236 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) { best = "en"; } - set("interface/editor_language", best); - hints["interface/editor_language"] = PropertyInfo(Variant::STRING, "interface/editor_language", PROPERTY_HINT_ENUM, lang_hint, PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED); + _initial_set("interface/editor/editor_language", best); + hints["interface/editor/editor_language"] = PropertyInfo(Variant::STRING, "interface/editor/editor_language", PROPERTY_HINT_ENUM, lang_hint, PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED); } - set("interface/hidpi_mode", 0); - hints["interface/hidpi_mode"] = PropertyInfo(Variant::INT, "interface/hidpi_mode", PROPERTY_HINT_ENUM, "Auto,VeryLoDPI,LoDPI,MidDPI,HiDPI", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED); - set("interface/show_script_in_scene_tabs", false); - set("interface/font_size", 14); - hints["interface/font_size"] = PropertyInfo(Variant::INT, "interface/font_size", PROPERTY_HINT_RANGE, "10,40,1", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED); - set("interface/source_font_size", 14); - hints["interface/source_font_size"] = PropertyInfo(Variant::INT, "interface/source_font_size", PROPERTY_HINT_RANGE, "8,96,1", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED); - set("interface/custom_font", ""); - hints["interface/custom_font"] = PropertyInfo(Variant::STRING, "interface/custom_font", PROPERTY_HINT_GLOBAL_FILE, "*.font", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED); - set("interface/dim_editor_on_dialog_popup", true); - set("interface/dim_amount", 0.6f); - hints["interface/dim_amount"] = PropertyInfo(Variant::REAL, "interface/dim_amount", PROPERTY_HINT_RANGE, "0,1,0.01", PROPERTY_USAGE_DEFAULT); - set("interface/dim_transition_time", 0.08f); - hints["interface/dim_transition_time"] = PropertyInfo(Variant::REAL, "interface/dim_transition_time", PROPERTY_HINT_RANGE, "0,1,0.001", PROPERTY_USAGE_DEFAULT); - - set("interface/separate_distraction_mode", false); - - set("interface/save_each_scene_on_quit", true); // Regression - set("interface/quit_confirmation", true); - - set("interface/theme/preset", 0); - hints["interface/theme/preset"] = PropertyInfo(Variant::INT, "interface/theme/preset", PROPERTY_HINT_ENUM, "Default,Grey,Godot 2,Arc,Light,Custom", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED); - set("interface/theme/icon_and_font_color", 0); + _initial_set("interface/editor/hidpi_mode", 0); + hints["interface/editor/hidpi_mode"] = PropertyInfo(Variant::INT, "interface/editor/hidpi_mode", PROPERTY_HINT_ENUM, "Auto,VeryLoDPI,LoDPI,MidDPI,HiDPI", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED); + _initial_set("interface/editor/show_script_in_scene_tabs", false); + _initial_set("interface/editor/font_size", 14); + hints["interface/editor/font_size"] = PropertyInfo(Variant::INT, "interface/editor/font_size", PROPERTY_HINT_RANGE, "10,40,1", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED); + _initial_set("interface/editor/source_font_size", 14); + hints["interface/editor/source_font_size"] = PropertyInfo(Variant::INT, "interface/editor/source_font_size", PROPERTY_HINT_RANGE, "8,96,1", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED); + _initial_set("interface/editor/custom_font", ""); + hints["interface/editor/custom_font"] = PropertyInfo(Variant::STRING, "interface/editor/custom_font", PROPERTY_HINT_GLOBAL_FILE, "*.font,*.tres,*.res", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED); + _initial_set("interface/editor/dim_editor_on_dialog_popup", true); + _initial_set("interface/editor/dim_amount", 0.6f); + hints["interface/editor/dim_amount"] = PropertyInfo(Variant::REAL, "interface/editor/dim_amount", PROPERTY_HINT_RANGE, "0,1,0.01", PROPERTY_USAGE_DEFAULT); + _initial_set("interface/editor/dim_transition_time", 0.08f); + hints["interface/editor/dim_transition_time"] = PropertyInfo(Variant::REAL, "interface/editor/dim_transition_time", PROPERTY_HINT_RANGE, "0,1,0.001", PROPERTY_USAGE_DEFAULT); + + _initial_set("interface/editor/separate_distraction_mode", false); + + _initial_set("interface/editor/save_each_scene_on_quit", true); // Regression + _initial_set("interface/editor/quit_confirmation", true); + + _initial_set("interface/theme/preset", 0); + hints["interface/theme/preset"] = PropertyInfo(Variant::INT, "interface/theme/preset", PROPERTY_HINT_ENUM, "Default,Grey,Godot 2,Arc,Light,Alien,Custom", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED); + _initial_set("interface/theme/icon_and_font_color", 0); hints["interface/theme/icon_and_font_color"] = PropertyInfo(Variant::INT, "interface/theme/icon_and_font_color", PROPERTY_HINT_ENUM, "Auto,Dark,Light", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED); - set("interface/theme/base_color", Color::html("#323b4f")); + _initial_set("interface/theme/base_color", Color::html("#323b4f")); hints["interface/theme/accent_color"] = PropertyInfo(Variant::COLOR, "interface/theme/accent_color", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED); - set("interface/theme/accent_color", Color::html("#699ce8")); + _initial_set("interface/theme/accent_color", Color::html("#699ce8")); hints["interface/theme/base_color"] = PropertyInfo(Variant::COLOR, "interface/theme/base_color", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED); - set("interface/theme/contrast", 0.25); + _initial_set("interface/theme/contrast", 0.25); hints["interface/theme/contrast"] = PropertyInfo(Variant::REAL, "interface/theme/contrast", PROPERTY_HINT_RANGE, "0.01, 1, 0.01"); - set("interface/theme/highlight_tabs", false); - set("interface/theme/border_size", 1); - set("interface/theme/use_graph_node_headers", false); + _initial_set("interface/theme/highlight_tabs", false); + _initial_set("interface/theme/border_size", 1); + _initial_set("interface/theme/use_graph_node_headers", false); hints["interface/theme/border_size"] = PropertyInfo(Variant::INT, "interface/theme/border_size", PROPERTY_HINT_RANGE, "0,2,1", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED); - set("interface/theme/custom_theme", ""); + _initial_set("interface/theme/additional_spacing", 0); + hints["interface/theme/additional_spacing"] = PropertyInfo(Variant::REAL, "interface/theme/additional_spacing", PROPERTY_HINT_RANGE, "0,5,0.1", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED); + _initial_set("interface/theme/custom_theme", ""); hints["interface/theme/custom_theme"] = PropertyInfo(Variant::STRING, "interface/theme/custom_theme", PROPERTY_HINT_GLOBAL_FILE, "*.res,*.tres,*.theme", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED); - set("interface/scene_tabs/show_extension", false); - set("interface/scene_tabs/show_thumbnail_on_hover", true); - set("interface/scene_tabs/resize_if_many_tabs", true); - set("interface/scene_tabs/minimum_width", 50); + _initial_set("interface/scene_tabs/show_extension", false); + _initial_set("interface/scene_tabs/show_thumbnail_on_hover", true); + _initial_set("interface/scene_tabs/resize_if_many_tabs", true); + _initial_set("interface/scene_tabs/minimum_width", 50); hints["interface/scene_tabs/minimum_width"] = PropertyInfo(Variant::INT, "interface/scene_tabs/minimum_width", PROPERTY_HINT_RANGE, "50,500,1", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED); - set("filesystem/directories/autoscan_project_path", ""); + _initial_set("filesystem/directories/autoscan_project_path", ""); hints["filesystem/directories/autoscan_project_path"] = PropertyInfo(Variant::STRING, "filesystem/directories/autoscan_project_path", PROPERTY_HINT_GLOBAL_DIR); - set("filesystem/directories/default_project_path", OS::get_singleton()->has_environment("HOME") ? OS::get_singleton()->get_environment("HOME") : OS::get_singleton()->get_system_dir(OS::SYSTEM_DIR_DOCUMENTS)); + _initial_set("filesystem/directories/default_project_path", OS::get_singleton()->has_environment("HOME") ? OS::get_singleton()->get_environment("HOME") : OS::get_singleton()->get_system_dir(OS::SYSTEM_DIR_DOCUMENTS)); hints["filesystem/directories/default_project_path"] = PropertyInfo(Variant::STRING, "filesystem/directories/default_project_path", PROPERTY_HINT_GLOBAL_DIR); - set("filesystem/directories/default_project_export_path", ""); + _initial_set("filesystem/directories/default_project_export_path", ""); hints["global/default_project_export_path"] = PropertyInfo(Variant::STRING, "global/default_project_export_path", PROPERTY_HINT_GLOBAL_DIR); - set("interface/show_script_in_scene_tabs", false); + _initial_set("interface/editor/show_script_in_scene_tabs", false); - set("text_editor/theme/color_theme", "Adaptive"); + _initial_set("text_editor/theme/color_theme", "Adaptive"); hints["text_editor/theme/color_theme"] = PropertyInfo(Variant::STRING, "text_editor/theme/color_theme", PROPERTY_HINT_ENUM, "Adaptive,Default"); - set("text_editor/theme/line_spacing", 4); + _initial_set("text_editor/theme/line_spacing", 4); _load_default_text_editor_theme(); - set("text_editor/highlighting/syntax_highlighting", true); + _initial_set("text_editor/highlighting/syntax_highlighting", true); - set("text_editor/highlighting/highlight_all_occurrences", true); - set("text_editor/cursor/scroll_past_end_of_file", false); + _initial_set("text_editor/highlighting/highlight_all_occurrences", true); + _initial_set("text_editor/cursor/scroll_past_end_of_file", false); - set("text_editor/indent/type", 0); + _initial_set("text_editor/indent/type", 0); hints["text_editor/indent/type"] = PropertyInfo(Variant::INT, "text_editor/indent/type", PROPERTY_HINT_ENUM, "Tabs,Spaces"); - set("text_editor/indent/size", 4); + _initial_set("text_editor/indent/size", 4); hints["text_editor/indent/size"] = PropertyInfo(Variant::INT, "text_editor/indent/size", PROPERTY_HINT_RANGE, "1, 64, 1"); // size of 0 crashes. - set("text_editor/indent/auto_indent", true); - set("text_editor/indent/convert_indent_on_save", false); - set("text_editor/indent/draw_tabs", true); - - set("text_editor/line_numbers/show_line_numbers", true); - set("text_editor/line_numbers/line_numbers_zero_padded", false); - set("text_editor/line_numbers/show_breakpoint_gutter", true); - set("text_editor/line_numbers/show_line_length_guideline", false); - set("text_editor/line_numbers/line_length_guideline_column", 80); + _initial_set("text_editor/indent/auto_indent", true); + _initial_set("text_editor/indent/convert_indent_on_save", false); + _initial_set("text_editor/indent/draw_tabs", true); + + _initial_set("text_editor/line_numbers/show_line_numbers", true); + _initial_set("text_editor/line_numbers/line_numbers_zero_padded", false); + _initial_set("text_editor/line_numbers/show_breakpoint_gutter", true); + _initial_set("text_editor/line_numbers/show_line_length_guideline", false); + _initial_set("text_editor/line_numbers/line_length_guideline_column", 80); hints["text_editor/line_numbers/line_length_guideline_column"] = PropertyInfo(Variant::INT, "text_editor/line_numbers/line_length_guideline_column", PROPERTY_HINT_RANGE, "20, 160, 10"); - set("text_editor/open_scripts/smooth_scrolling", true); - set("text_editor/open_scripts/v_scroll_speed", 80); - set("text_editor/open_scripts/show_members_overview", true); + _initial_set("text_editor/open_scripts/smooth_scrolling", true); + _initial_set("text_editor/open_scripts/v_scroll_speed", 80); + _initial_set("text_editor/open_scripts/show_members_overview", true); - set("text_editor/files/trim_trailing_whitespace_on_save", false); - set("text_editor/completion/idle_parse_delay", 2); - set("text_editor/tools/create_signal_callbacks", true); - set("text_editor/files/autosave_interval_secs", 0); + _initial_set("text_editor/files/trim_trailing_whitespace_on_save", false); + _initial_set("text_editor/completion/idle_parse_delay", 2); + _initial_set("text_editor/tools/create_signal_callbacks", true); + _initial_set("text_editor/files/autosave_interval_secs", 0); - set("text_editor/cursor/block_caret", false); - set("text_editor/cursor/caret_blink", false); - set("text_editor/cursor/caret_blink_speed", 0.65); + _initial_set("text_editor/cursor/block_caret", false); + _initial_set("text_editor/cursor/caret_blink", false); + _initial_set("text_editor/cursor/caret_blink_speed", 0.65); hints["text_editor/cursor/caret_blink_speed"] = PropertyInfo(Variant::REAL, "text_editor/cursor/caret_blink_speed", PROPERTY_HINT_RANGE, "0.1, 10, 0.1"); - set("text_editor/theme/font", ""); - hints["text_editor/theme/font"] = PropertyInfo(Variant::STRING, "text_editor/theme/font", PROPERTY_HINT_GLOBAL_FILE, "*.font"); - set("text_editor/completion/auto_brace_complete", false); - set("text_editor/files/restore_scripts_on_load", true); - set("text_editor/completion/complete_file_paths", true); - set("text_editor/files/maximum_recent_files", 20); + _initial_set("text_editor/theme/font", ""); + hints["text_editor/theme/font"] = PropertyInfo(Variant::STRING, "text_editor/theme/font", PROPERTY_HINT_GLOBAL_FILE, "*.font,*.tres,*.res"); + _initial_set("text_editor/completion/auto_brace_complete", false); + _initial_set("text_editor/files/restore_scripts_on_load", true); + _initial_set("text_editor/completion/complete_file_paths", true); + _initial_set("text_editor/files/maximum_recent_files", 20); hints["text_editor/files/maximum_recent_files"] = PropertyInfo(Variant::INT, "text_editor/files/maximum_recent_files", PROPERTY_HINT_RANGE, "1, 200, 0"); - set("docks/scene_tree/start_create_dialog_fully_expanded", false); - set("docks/scene_tree/draw_relationship_lines", false); - set("docks/scene_tree/relationship_line_color", Color::html("464646")); - - set("editors/grid_map/pick_distance", 5000.0); - - set("editors/3d/grid_color", Color(1, 1, 1, 0.2)); - hints["editors/3d/grid_color"] = PropertyInfo(Variant::COLOR, "editors/3d/grid_color", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED); - - set("editors/3d/default_fov", 55.0); - set("editors/3d/default_z_near", 0.1); - set("editors/3d/default_z_far", 500.0); - - set("editors/3d/navigation_scheme", 0); - hints["editors/3d/navigation_scheme"] = PropertyInfo(Variant::INT, "editors/3d/navigation_scheme", PROPERTY_HINT_ENUM, "Godot,Maya,Modo"); - set("editors/3d/zoom_style", 0); - hints["editors/3d/zoom_style"] = PropertyInfo(Variant::INT, "editors/3d/zoom_style", PROPERTY_HINT_ENUM, "Vertical, Horizontal"); - set("editors/3d/orbit_modifier", 0); - hints["editors/3d/orbit_modifier"] = PropertyInfo(Variant::INT, "editors/3d/orbit_modifier", PROPERTY_HINT_ENUM, "None,Shift,Alt,Meta,Ctrl"); - set("editors/3d/pan_modifier", 1); - hints["editors/3d/pan_modifier"] = PropertyInfo(Variant::INT, "editors/3d/pan_modifier", PROPERTY_HINT_ENUM, "None,Shift,Alt,Meta,Ctrl"); - set("editors/3d/zoom_modifier", 4); - hints["editors/3d/zoom_modifier"] = PropertyInfo(Variant::INT, "editors/3d/zoom_modifier", PROPERTY_HINT_ENUM, "None,Shift,Alt,Meta,Ctrl"); - set("editors/3d/emulate_numpad", false); - set("editors/3d/emulate_3_button_mouse", false); - set("editors/3d/warped_mouse_panning", true); - - set("editors/3d/orbit_sensitivity", 0.4); - - set("editors/3d/orbit_inertia", 0.2); - hints["editors/3d/orbit_inertia"] = PropertyInfo(Variant::REAL, "editors/3d/orbit_inertia", PROPERTY_HINT_RANGE, "0.0, 1, 0.01"); - - set("editors/3d/freelook_inertia", 0.2); - hints["editors/3d/freelook_inertia"] = PropertyInfo(Variant::REAL, "editors/3d/freelook_inertia", PROPERTY_HINT_RANGE, "0.0, 1, 0.01"); - - set("editors/3d/freelook_base_speed", 0.5); - hints["editors/3d/freelook_base_speed"] = PropertyInfo(Variant::REAL, "editors/3d/freelook_base_speed", PROPERTY_HINT_RANGE, "0.0, 10, 0.1"); - - set("editors/3d/freelook_activation_modifier", 0); - hints["editors/3d/freelook_activation_modifier"] = PropertyInfo(Variant::INT, "editors/3d/freelook_activation_modifier", PROPERTY_HINT_ENUM, "None,Shift,Alt,Meta,Ctrl"); - - set("editors/3d/freelook_modifier_speed_factor", 5.0); - - set("editors/2d/bone_width", 5); - set("editors/2d/bone_color1", Color(1.0, 1.0, 1.0, 0.9)); - set("editors/2d/bone_color2", Color(0.75, 0.75, 0.75, 0.9)); - set("editors/2d/bone_selected_color", Color(0.9, 0.45, 0.45, 0.9)); - set("editors/2d/bone_ik_color", Color(0.9, 0.9, 0.45, 0.9)); - set("editors/2d/keep_margins_when_changing_anchors", false); - set("editors/2d/warped_mouse_panning", true); - set("editors/2d/scroll_to_pan", false); - set("editors/2d/pan_speed", 20); - - set("editors/poly_editor/point_grab_radius", 8); - set("editors/poly_editor/show_previous_outline", true); - - set("run/window_placement/rect", 1); + _initial_set("docks/scene_tree/start_create_dialog_fully_expanded", false); + _initial_set("docks/scene_tree/draw_relationship_lines", false); + _initial_set("docks/scene_tree/relationship_line_color", Color::html("464646")); + + _initial_set("editors/grid_map/pick_distance", 5000.0); + + _initial_set("editors/3d/grid_color", Color::html("808080")); + hints["editors/3d/grid_color"] = PropertyInfo(Variant::COLOR, "editors/3d/grid_color", PROPERTY_HINT_COLOR_NO_ALPHA, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED); + + _initial_set("editors/3d/default_fov", 55.0); + _initial_set("editors/3d/default_z_near", 0.1); + _initial_set("editors/3d/default_z_far", 500.0); + + // navigation + _initial_set("editors/3d/navigation/navigation_scheme", 0); + hints["editors/3d/navigation/navigation_scheme"] = PropertyInfo(Variant::INT, "editors/3d/navigation/navigation_scheme", PROPERTY_HINT_ENUM, "Godot,Maya,Modo"); + _initial_set("editors/3d/navigation/zoom_style", 0); + hints["editors/3d/navigation/zoom_style"] = PropertyInfo(Variant::INT, "editors/3d/navigation/zoom_style", PROPERTY_HINT_ENUM, "Vertical, Horizontal"); + + _initial_set("editors/3d/navigation/emulate_3_button_mouse", false); + _initial_set("editors/3d/navigation/orbit_modifier", 0); + hints["editors/3d/navigation/orbit_modifier"] = PropertyInfo(Variant::INT, "editors/3d/navigation/orbit_modifier", PROPERTY_HINT_ENUM, "None,Shift,Alt,Meta,Ctrl"); + _initial_set("editors/3d/navigation/pan_modifier", 1); + hints["editors/3d/navigation/pan_modifier"] = PropertyInfo(Variant::INT, "editors/3d/navigation/pan_modifier", PROPERTY_HINT_ENUM, "None,Shift,Alt,Meta,Ctrl"); + _initial_set("editors/3d/navigation/zoom_modifier", 4); + hints["editors/3d/navigation/zoom_modifier"] = PropertyInfo(Variant::INT, "editors/3d/navigation/zoom_modifier", PROPERTY_HINT_ENUM, "None,Shift,Alt,Meta,Ctrl"); + + // _initial_set("editors/3d/navigation/emulate_numpad", false); not used at the moment + _initial_set("editors/3d/navigation/warped_mouse_panning", true); + + // navigation feel + _initial_set("editors/3d/navigation_feel/orbit_sensitivity", 0.4); + hints["editors/3d/navigation_feel/orbit_sensitivity"] = PropertyInfo(Variant::REAL, "editors/3d/navigation_feel/orbit_sensitivity", PROPERTY_HINT_RANGE, "0.0, 2, 0.01"); + + _initial_set("editors/3d/navigation_feel/orbit_inertia", 0.15); + hints["editors/3d/navigation_feel/orbit_inertia"] = PropertyInfo(Variant::REAL, "editors/3d/navigation_feel/orbit_inertia", PROPERTY_HINT_RANGE, "0.0, 1, 0.01"); + _initial_set("editors/3d/navigation_feel/translation_inertia", 0.15); + hints["editors/3d/navigation_feel/translation_inertia"] = PropertyInfo(Variant::REAL, "editors/3d/navigation_feel/translation_inertia", PROPERTY_HINT_RANGE, "0.0, 1, 0.01"); + _initial_set("editors/3d/navigation_feel/zoom_inertia", 0.075); + hints["editors/3d/navigation_feel/zoom_inertia"] = PropertyInfo(Variant::REAL, "editors/3d/navigation_feel/zoom_inertia", PROPERTY_HINT_RANGE, "0.0, 1, 0.01"); + _initial_set("editors/3d/navigation_feel/manipulation_orbit_inertia", 0.075); + hints["editors/3d/navigation_feel/manipulation_orbit_inertia"] = PropertyInfo(Variant::REAL, "editors/3d/navigation_feel/manipulation_orbit_inertia", PROPERTY_HINT_RANGE, "0.0, 1, 0.01"); + _initial_set("editors/3d/navigation_feel/manipulation_translation_inertia", 0.075); + hints["editors/3d/navigation_feel/manipulation_translation_inertia"] = PropertyInfo(Variant::REAL, "editors/3d/navigation_feel/manipulation_translation_inertia", PROPERTY_HINT_RANGE, "0.0, 1, 0.01"); + + // freelook + _initial_set("editors/3d/freelook/freelook_inertia", 0.1); + hints["editors/3d/freelook/freelook_inertia"] = PropertyInfo(Variant::REAL, "editors/3d/freelook/freelook_inertia", PROPERTY_HINT_RANGE, "0.0, 1, 0.01"); + _initial_set("editors/3d/freelook/freelook_base_speed", 5.0); + hints["editors/3d/freelook/freelook_base_speed"] = PropertyInfo(Variant::REAL, "editors/3d/freelook/freelook_base_speed", PROPERTY_HINT_RANGE, "0.0, 10, 0.01"); + _initial_set("editors/3d/freelook/freelook_activation_modifier", 0); + hints["editors/3d/freelook/freelook_activation_modifier"] = PropertyInfo(Variant::INT, "editors/3d/freelook/freelook_activation_modifier", PROPERTY_HINT_ENUM, "None,Shift,Alt,Meta,Ctrl"); + _initial_set("editors/3d/freelook/freelook_modifier_speed_factor", 3.0); + hints["editors/3d/freelook/freelook_modifier_speed_factor"] = PropertyInfo(Variant::REAL, "editors/3d/freelook/freelook_modifier_speed_factor", PROPERTY_HINT_RANGE, "0.0, 10.0, 0.1"); + _initial_set("editors/3d/freelook/freelook_speed_zoom_link", false); + + _initial_set("editors/2d/bone_width", 5); + _initial_set("editors/2d/bone_color1", Color(1.0, 1.0, 1.0, 0.9)); + _initial_set("editors/2d/bone_color2", Color(0.75, 0.75, 0.75, 0.9)); + _initial_set("editors/2d/bone_selected_color", Color(0.9, 0.45, 0.45, 0.9)); + _initial_set("editors/2d/bone_ik_color", Color(0.9, 0.9, 0.45, 0.9)); + _initial_set("editors/2d/keep_margins_when_changing_anchors", false); + _initial_set("editors/2d/warped_mouse_panning", true); + _initial_set("editors/2d/scroll_to_pan", false); + _initial_set("editors/2d/pan_speed", 20); + + _initial_set("editors/poly_editor/point_grab_radius", 8); + _initial_set("editors/poly_editor/show_previous_outline", true); + + _initial_set("run/window_placement/rect", 1); hints["run/window_placement/rect"] = PropertyInfo(Variant::INT, "run/window_placement/rect", PROPERTY_HINT_ENUM, "Top Left,Centered,Custom Position,Force Maximized,Force Fullscreen"); String screen_hints = TTR("Default (Same as Editor)"); for (int i = 0; i < OS::get_singleton()->get_screen_count(); i++) { screen_hints += ",Monitor " + itos(i + 1); } - set("run/window_placement/rect_custom_position", Vector2()); - set("run/window_placement/screen", 0); + _initial_set("run/window_placement/rect_custom_position", Vector2()); + _initial_set("run/window_placement/screen", 0); hints["run/window_placement/screen"] = PropertyInfo(Variant::INT, "run/window_placement/screen", PROPERTY_HINT_ENUM, screen_hints); - set("filesystem/on_save/compress_binary_resources", true); - set("filesystem/on_save/save_modified_external_resources", true); + _initial_set("filesystem/on_save/compress_binary_resources", true); + _initial_set("filesystem/on_save/save_modified_external_resources", true); - set("text_editor/tools/create_signal_callbacks", true); + _initial_set("text_editor/tools/create_signal_callbacks", true); - set("filesystem/file_dialog/show_hidden_files", false); - set("filesystem/file_dialog/display_mode", 0); + _initial_set("filesystem/file_dialog/show_hidden_files", false); + _initial_set("filesystem/file_dialog/display_mode", 0); hints["filesystem/file_dialog/display_mode"] = PropertyInfo(Variant::INT, "filesystem/file_dialog/display_mode", PROPERTY_HINT_ENUM, "Thumbnails,List"); - set("filesystem/file_dialog/thumbnail_size", 64); + _initial_set("filesystem/file_dialog/thumbnail_size", 64); hints["filesystem/file_dialog/thumbnail_size"] = PropertyInfo(Variant::INT, "filesystem/file_dialog/thumbnail_size", PROPERTY_HINT_RANGE, "32,128,16"); - set("docks/filesystem/display_mode", 0); + _initial_set("docks/filesystem/display_mode", 0); hints["docks/filesystem/display_mode"] = PropertyInfo(Variant::INT, "docks/filesystem/display_mode", PROPERTY_HINT_ENUM, "Thumbnails,List"); - set("docks/filesystem/thumbnail_size", 64); + _initial_set("docks/filesystem/thumbnail_size", 64); hints["docks/filesystem/thumbnail_size"] = PropertyInfo(Variant::INT, "docks/filesystem/thumbnail_size", PROPERTY_HINT_RANGE, "32,128,16"); - set("docks/filesystem/display_mode", 0); + _initial_set("docks/filesystem/display_mode", 0); hints["docks/filesystem/display_mode"] = PropertyInfo(Variant::INT, "docks/filesystem/display_mode", PROPERTY_HINT_ENUM, "Thumbnails,List"); - set("docks/filesystem/always_show_folders", true); + _initial_set("docks/filesystem/always_show_folders", true); - set("editors/animation/autorename_animation_tracks", true); - set("editors/animation/confirm_insert_track", true); + _initial_set("editors/animation/autorename_animation_tracks", true); + _initial_set("editors/animation/confirm_insert_track", true); - set("docks/property_editor/texture_preview_width", 48); - set("docks/property_editor/auto_refresh_interval", 0.3); - set("text_editor/help/doc_path", ""); - set("text_editor/help/show_help_index", true); + _initial_set("docks/property_editor/texture_preview_width", 48); + _initial_set("docks/property_editor/auto_refresh_interval", 0.3); + _initial_set("text_editor/help/doc_path", ""); + _initial_set("text_editor/help/show_help_index", true); - set("filesystem/import/ask_save_before_reimport", false); + _initial_set("filesystem/import/ask_save_before_reimport", false); - set("filesystem/import/pvrtc_texture_tool", ""); + _initial_set("filesystem/import/pvrtc_texture_tool", ""); #ifdef WINDOWS_ENABLED hints["filesystem/import/pvrtc_texture_tool"] = PropertyInfo(Variant::STRING, "filesystem/import/pvrtc_texture_tool", PROPERTY_HINT_GLOBAL_FILE, "*.exe"); #else hints["filesystem/import/pvrtc_texture_tool"] = PropertyInfo(Variant::STRING, "filesystem/import/pvrtc_texture_tool", PROPERTY_HINT_GLOBAL_FILE, ""); #endif - set("filesystem/import/pvrtc_fast_conversion", false); + _initial_set("filesystem/import/pvrtc_fast_conversion", false); - set("run/auto_save/save_before_running", true); - set("run/output/always_clear_output_on_play", true); - set("run/output/always_open_output_on_play", true); - set("run/output/always_close_output_on_stop", false); - set("filesystem/resources/save_compressed_resources", true); - set("filesystem/resources/auto_reload_modified_images", true); + _initial_set("run/auto_save/save_before_running", true); + _initial_set("run/output/always_clear_output_on_play", true); + _initial_set("run/output/always_open_output_on_play", true); + _initial_set("run/output/always_close_output_on_stop", false); + _initial_set("filesystem/resources/save_compressed_resources", true); + _initial_set("filesystem/resources/auto_reload_modified_images", true); - set("filesystem/import/automatic_reimport_on_sources_changed", true); + _initial_set("filesystem/import/automatic_reimport_on_sources_changed", true); if (p_extra_config.is_valid()) { @@ -790,35 +824,35 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) { } void EditorSettings::_load_default_text_editor_theme() { - set("text_editor/highlighting/background_color", Color::html("3b000000")); - set("text_editor/highlighting/completion_background_color", Color::html("2C2A32")); - set("text_editor/highlighting/completion_selected_color", Color::html("434244")); - set("text_editor/highlighting/completion_existing_color", Color::html("21dfdfdf")); - set("text_editor/highlighting/completion_scroll_color", Color::html("ffffff")); - set("text_editor/highlighting/completion_font_color", Color::html("aaaaaa")); - set("text_editor/highlighting/caret_color", Color::html("aaaaaa")); - set("text_editor/highlighting/caret_background_color", Color::html("000000")); - set("text_editor/highlighting/line_number_color", Color::html("66aaaaaa")); - set("text_editor/highlighting/text_color", Color::html("aaaaaa")); - set("text_editor/highlighting/text_selected_color", Color::html("000000")); - set("text_editor/highlighting/keyword_color", Color::html("ffffb3")); - set("text_editor/highlighting/base_type_color", Color::html("a4ffd4")); - set("text_editor/highlighting/engine_type_color", Color::html("83d3ff")); - set("text_editor/highlighting/function_color", Color::html("66a2ce")); - set("text_editor/highlighting/member_variable_color", Color::html("e64e59")); - set("text_editor/highlighting/comment_color", Color::html("676767")); - set("text_editor/highlighting/string_color", Color::html("ef6ebe")); - set("text_editor/highlighting/number_color", Color::html("EB9532")); - set("text_editor/highlighting/symbol_color", Color::html("badfff")); - set("text_editor/highlighting/selection_color", Color::html("6ca9c2")); - set("text_editor/highlighting/brace_mismatch_color", Color(1, 0.2, 0.2)); - set("text_editor/highlighting/current_line_color", Color(0.3, 0.5, 0.8, 0.15)); - set("text_editor/highlighting/line_length_guideline_color", Color(0.3, 0.5, 0.8, 0.1)); - set("text_editor/highlighting/mark_color", Color(1.0, 0.4, 0.4, 0.4)); - set("text_editor/highlighting/breakpoint_color", Color(0.8, 0.8, 0.4, 0.2)); - set("text_editor/highlighting/word_highlighted_color", Color(0.8, 0.9, 0.9, 0.15)); - set("text_editor/highlighting/search_result_color", Color(0.05, 0.25, 0.05, 1)); - set("text_editor/highlighting/search_result_border_color", Color(0.1, 0.45, 0.1, 1)); + _initial_set("text_editor/highlighting/background_color", Color::html("3b000000")); + _initial_set("text_editor/highlighting/completion_background_color", Color::html("2C2A32")); + _initial_set("text_editor/highlighting/completion_selected_color", Color::html("434244")); + _initial_set("text_editor/highlighting/completion_existing_color", Color::html("21dfdfdf")); + _initial_set("text_editor/highlighting/completion_scroll_color", Color::html("ffffff")); + _initial_set("text_editor/highlighting/completion_font_color", Color::html("aaaaaa")); + _initial_set("text_editor/highlighting/caret_color", Color::html("aaaaaa")); + _initial_set("text_editor/highlighting/caret_background_color", Color::html("000000")); + _initial_set("text_editor/highlighting/line_number_color", Color::html("66aaaaaa")); + _initial_set("text_editor/highlighting/text_color", Color::html("aaaaaa")); + _initial_set("text_editor/highlighting/text_selected_color", Color::html("000000")); + _initial_set("text_editor/highlighting/keyword_color", Color::html("ffffb3")); + _initial_set("text_editor/highlighting/base_type_color", Color::html("a4ffd4")); + _initial_set("text_editor/highlighting/engine_type_color", Color::html("83d3ff")); + _initial_set("text_editor/highlighting/function_color", Color::html("66a2ce")); + _initial_set("text_editor/highlighting/member_variable_color", Color::html("e64e59")); + _initial_set("text_editor/highlighting/comment_color", Color::html("676767")); + _initial_set("text_editor/highlighting/string_color", Color::html("ef6ebe")); + _initial_set("text_editor/highlighting/number_color", Color::html("EB9532")); + _initial_set("text_editor/highlighting/symbol_color", Color::html("badfff")); + _initial_set("text_editor/highlighting/selection_color", Color::html("6ca9c2")); + _initial_set("text_editor/highlighting/brace_mismatch_color", Color(1, 0.2, 0.2)); + _initial_set("text_editor/highlighting/current_line_color", Color(0.3, 0.5, 0.8, 0.15)); + _initial_set("text_editor/highlighting/line_length_guideline_color", Color(0.3, 0.5, 0.8, 0.1)); + _initial_set("text_editor/highlighting/mark_color", Color(1.0, 0.4, 0.4, 0.4)); + _initial_set("text_editor/highlighting/breakpoint_color", Color(0.8, 0.8, 0.4, 0.2)); + _initial_set("text_editor/highlighting/word_highlighted_color", Color(0.8, 0.9, 0.9, 0.15)); + _initial_set("text_editor/highlighting/search_result_color", Color(0.05, 0.25, 0.05, 1)); + _initial_set("text_editor/highlighting/search_result_border_color", Color(0.1, 0.45, 0.1, 1)); } void EditorSettings::notify_changes() { @@ -966,7 +1000,7 @@ void EditorSettings::load_text_editor_theme() { String val = cf->get_value("color_theme", key); // don't load if it's not already there! - if (has("text_editor/highlighting/" + key)) { + if (has_setting("text_editor/highlighting/" + key)) { // make sure it is actually a color if (val.is_valid_html_color() && key.find("color") >= 0) { @@ -1023,7 +1057,7 @@ bool EditorSettings::save_text_editor_theme_as(String p_file) { String theme_name = p_file.substr(0, p_file.length() - 4).get_file(); if (p_file.get_base_dir() == get_settings_path() + "/text_editor_themes") { - set("text_editor/theme/color_theme", theme_name); + _initial_set("text_editor/theme/color_theme", theme_name); load_text_editor_theme(); } return true; @@ -1147,8 +1181,34 @@ void EditorSettings::set_project_metadata(const String &p_section, const String cf->save(path); } +bool EditorSettings::property_can_revert(const String &p_name) { + + if (!props.has(p_name)) + return false; + + return props[p_name].initial != props[p_name].variant; +} + +Variant EditorSettings::property_get_revert(const String &p_name) { + + if (!props.has(p_name)) + return Variant(); + + return props[p_name].initial; +} + +void EditorSettings::set_initial_value(const StringName &p_name, const Variant &p_value) { + + ERR_FAIL_COND(!props.has(p_name)); + props[p_name].initial = p_value; +} + void EditorSettings::_bind_methods() { + ClassDB::bind_method(D_METHOD("has_setting", "name"), &EditorSettings::has_setting); + ClassDB::bind_method(D_METHOD("set_setting", "name", "value"), &EditorSettings::set_setting); + ClassDB::bind_method(D_METHOD("get_setting", "name"), &EditorSettings::get_setting); + ClassDB::bind_method(D_METHOD("erase", "property"), &EditorSettings::erase); ClassDB::bind_method(D_METHOD("get_settings_path"), &EditorSettings::get_settings_path); ClassDB::bind_method(D_METHOD("get_project_settings_path"), &EditorSettings::get_project_settings_path); @@ -1161,6 +1221,11 @@ void EditorSettings::_bind_methods() { ClassDB::bind_method(D_METHOD("set_recent_dirs", "dirs"), &EditorSettings::set_recent_dirs); ClassDB::bind_method(D_METHOD("get_recent_dirs"), &EditorSettings::get_recent_dirs); + ClassDB::bind_method(D_METHOD("property_can_revert", "name"), &EditorSettings::property_can_revert); + ClassDB::bind_method(D_METHOD("property_get_revert", "name"), &EditorSettings::property_get_revert); + + ClassDB::bind_method(D_METHOD("set_initial_value", "name", "value"), &EditorSettings::set_initial_value); + ADD_SIGNAL(MethodInfo("settings_changed")); } diff --git a/editor/editor_settings.h b/editor/editor_settings.h index 177ec4760d..c5d2670650 100644 --- a/editor/editor_settings.h +++ b/editor/editor_settings.h @@ -65,6 +65,7 @@ private: struct VariantContainer { int order; Variant variant; + Variant initial; bool hide_from_editor; bool save; VariantContainer() { @@ -84,10 +85,12 @@ private: HashMap<String, VariantContainer> props; String resource_path; - bool _set(const StringName &p_name, const Variant &p_value); + bool _set(const StringName &p_name, const Variant &p_value, bool p_emit_signal = true); bool _get(const StringName &p_name, Variant &r_ret) const; void _get_property_list(List<PropertyInfo> *p_list) const; + void _initial_set(const StringName &p_name, const Variant &p_value); + static Ref<EditorSettings> singleton; String config_file_path; @@ -123,7 +126,14 @@ public: NOTIFICATION_EDITOR_SETTINGS_CHANGED = 10000 }; - bool has(String p_var) const; + void set_manually(const StringName &p_name, const Variant &p_value, bool p_emit_signal = false) { + _set(p_name, p_value, p_emit_signal); + } + + void set_setting(const String &p_setting, const Variant &p_value); + Variant get_setting(const String &p_setting) const; + + bool has_setting(String p_var) const; static EditorSettings *get_singleton(); void erase(String p_var); String get_settings_path() const; @@ -171,6 +181,11 @@ public: Variant get_project_metadata(const String &p_section, const String &p_key, Variant p_default); void set_project_metadata(const String &p_section, const String &p_key, Variant p_data); + bool property_can_revert(const String &p_name); + Variant property_get_revert(const String &p_name); + + void set_initial_value(const StringName &p_name, const Variant &p_value); + EditorSettings(); ~EditorSettings(); }; diff --git a/editor/editor_themes.cpp b/editor/editor_themes.cpp index 4aa1ccaa81..29859a1a56 100644 --- a/editor/editor_themes.cpp +++ b/editor/editor_themes.cpp @@ -37,9 +37,9 @@ #include "modules/svg/image_loader_svg.h" #include "time.h" -static Ref<StyleBoxTexture> make_stylebox(Ref<Texture> texture, float p_left, float p_top, float p_right, float p_botton, float p_margin_left = -1, float p_margin_top = -1, float p_margin_right = -1, float p_margin_botton = -1, bool p_draw_center = true) { +static Ref<StyleBoxTexture> make_stylebox(Ref<Texture> p_texture, float p_left, float p_top, float p_right, float p_botton, float p_margin_left = -1, float p_margin_top = -1, float p_margin_right = -1, float p_margin_botton = -1, bool p_draw_center = true) { Ref<StyleBoxTexture> style(memnew(StyleBoxTexture)); - style->set_texture(texture); + style->set_texture(p_texture); style->set_margin_size(MARGIN_LEFT, p_left * EDSCALE); style->set_margin_size(MARGIN_RIGHT, p_right * EDSCALE); style->set_margin_size(MARGIN_BOTTOM, p_botton * EDSCALE); @@ -61,9 +61,9 @@ static Ref<StyleBoxEmpty> make_empty_stylebox(float p_margin_left = -1, float p_ return style; } -static Ref<StyleBoxFlat> make_flat_stylebox(Color color, float p_margin_left = -1, float p_margin_top = -1, float p_margin_right = -1, float p_margin_bottom = -1) { +static Ref<StyleBoxFlat> make_flat_stylebox(Color p_color, float p_margin_left = -1, float p_margin_top = -1, float p_margin_right = -1, float p_margin_bottom = -1) { Ref<StyleBoxFlat> style(memnew(StyleBoxFlat)); - style->set_bg_color(color); + style->set_bg_color(p_color); style->set_default_margin(MARGIN_LEFT, p_margin_left * EDSCALE); style->set_default_margin(MARGIN_RIGHT, p_margin_right * EDSCALE); style->set_default_margin(MARGIN_BOTTOM, p_margin_bottom * EDSCALE); @@ -71,12 +71,12 @@ static Ref<StyleBoxFlat> make_flat_stylebox(Color color, float p_margin_left = - return style; } -static Ref<StyleBoxLine> make_line_stylebox(Color color, int thickness = 1, float grow = 1, bool vertical = false) { +static Ref<StyleBoxLine> make_line_stylebox(Color p_color, int p_thickness = 1, float p_grow = 1, bool p_vertical = false) { Ref<StyleBoxLine> style(memnew(StyleBoxLine)); - style->set_color(color); - style->set_grow(grow); - style->set_thickness(thickness); - style->set_vertical(vertical); + style->set_color(p_color); + style->set_grow(p_grow); + style->set_thickness(p_thickness); + style->set_vertical(p_vertical); return style; } @@ -86,7 +86,7 @@ static Ref<StyleBoxFlat> change_border_color(Ref<StyleBoxFlat> p_style, Color p_ return style; } -Ref<ImageTexture> editor_generate_icon(int p_index, bool convert_color, float p_scale = EDSCALE, bool force_filter = false) { +Ref<ImageTexture> editor_generate_icon(int p_index, bool p_convert_color, float p_scale = EDSCALE, bool p_force_filter = false) { Ref<ImageTexture> icon = memnew(ImageTexture); Ref<Image> img = memnew(Image); @@ -94,9 +94,9 @@ Ref<ImageTexture> editor_generate_icon(int p_index, bool convert_color, float p_ // dumb gizmo check bool is_gizmo = String(editor_icons_names[p_index]).begins_with("Gizmo"); - ImageLoaderSVG::create_image_from_string(img, editor_icons_sources[p_index], p_scale, true, convert_color); + ImageLoaderSVG::create_image_from_string(img, editor_icons_sources[p_index], p_scale, true, p_convert_color); - if ((p_scale - (float)((int)p_scale)) > 0.0 || is_gizmo || force_filter) + if ((p_scale - (float)((int)p_scale)) > 0.0 || is_gizmo || p_force_filter) icon->create_from_image(img); // in this case filter really helps else icon->create_from_image(img, 0); @@ -108,11 +108,11 @@ Ref<ImageTexture> editor_generate_icon(int p_index, bool convert_color, float p_ #define ADD_CONVERT_COLOR(dictionary, old_color, new_color) dictionary[Color::html(old_color)] = Color::html(new_color) #endif -void editor_register_and_generate_icons(Ref<Theme> p_theme, bool dark_theme = true, int p_thumb_size = 32, bool only_thumbs = false) { +void editor_register_and_generate_icons(Ref<Theme> p_theme, bool p_dark_theme = true, int p_thumb_size = 32, bool p_only_thumbs = false) { #ifdef SVG_ENABLED Dictionary dark_icon_color_dictionary; - if (!dark_theme) { + if (!p_dark_theme) { //convert color: FROM TO ADD_CONVERT_COLOR(dark_icon_color_dictionary, "#e0e0e0", "#4f4f4f"); // common icon color ADD_CONVERT_COLOR(dark_icon_color_dictionary, "#ffffff", "#000000"); // white @@ -146,6 +146,25 @@ void editor_register_and_generate_icons(Ref<Theme> p_theme, bool dark_theme = tr ADD_CONVERT_COLOR(dark_icon_color_dictionary, "#84c2ff", "#5caeff"); // selection (blue) ADD_CONVERT_COLOR(dark_icon_color_dictionary, "#ea686c", "#e3383d"); // key xform (red) + + ADD_CONVERT_COLOR(dark_icon_color_dictionary, "#69ecbd", "#25e3a0"); // VS variant + ADD_CONVERT_COLOR(dark_icon_color_dictionary, "#8da6f0", "#6d8eeb"); // VS bool + ADD_CONVERT_COLOR(dark_icon_color_dictionary, "#7dc6ef", "#4fb2e9"); // VS int + ADD_CONVERT_COLOR(dark_icon_color_dictionary, "#61daf4", "#27ccf0"); // VS float + ADD_CONVERT_COLOR(dark_icon_color_dictionary, "#6ba7ec", "#4690e7"); // VS string + ADD_CONVERT_COLOR(dark_icon_color_dictionary, "#bd91f1", "#ad76ee"); // VS vector2 + ADD_CONVERT_COLOR(dark_icon_color_dictionary, "#f191a5", "#ee758e"); // VS rect + ADD_CONVERT_COLOR(dark_icon_color_dictionary, "#e286f0", "#dc6aed"); // VS vector3 + ADD_CONVERT_COLOR(dark_icon_color_dictionary, "#c4ec69", "#96ce1a"); // VS transform2D + ADD_CONVERT_COLOR(dark_icon_color_dictionary, "#f77070", "#f77070"); // VS plane + ADD_CONVERT_COLOR(dark_icon_color_dictionary, "#ec69a3", "#ec69a3"); // VS quat + ADD_CONVERT_COLOR(dark_icon_color_dictionary, "#ee7991", "#ee7991"); // VS aabb + ADD_CONVERT_COLOR(dark_icon_color_dictionary, "#e3ec69", "#b2bb19"); // VS basis + ADD_CONVERT_COLOR(dark_icon_color_dictionary, "#f6a86e", "#f49047"); // VS transform + ADD_CONVERT_COLOR(dark_icon_color_dictionary, "#6993ec", "#6993ec"); // VS path + ADD_CONVERT_COLOR(dark_icon_color_dictionary, "#69ec9a", "#2ce573"); // VS rid + ADD_CONVERT_COLOR(dark_icon_color_dictionary, "#79f3e8", "#12d5c3"); // VS object + ADD_CONVERT_COLOR(dark_icon_color_dictionary, "#77edb1", "#57e99f"); // VS dict } // these ones should be converted even if we are using a dark theme @@ -168,13 +187,18 @@ void editor_register_and_generate_icons(Ref<Theme> p_theme, bool dark_theme = tr exceptions.push_back("GuiCloseCustomizable"); exceptions.push_back("GuiGraphNodePort"); exceptions.push_back("GuiResizer"); + exceptions.push_back("ZoomMore"); + exceptions.push_back("ZoomLess"); + exceptions.push_back("ZoomReset"); + exceptions.push_back("LockViewport"); + exceptions.push_back("GroupViewport"); clock_t begin_time = clock(); ImageLoaderSVG::set_convert_colors(&dark_icon_color_dictionary); // generate icons - if (!only_thumbs) + if (!p_only_thumbs) for (int i = 0; i < editor_icons_count; i++) { List<String>::Element *is_exception = exceptions.find(editor_icons_names[i]); if (is_exception) exceptions.erase(is_exception); @@ -190,7 +214,7 @@ void editor_register_and_generate_icons(Ref<Theme> p_theme, bool dark_theme = tr int index = editor_bg_thumbs_indices[i]; List<String>::Element *is_exception = exceptions.find(editor_icons_names[index]); if (is_exception) exceptions.erase(is_exception); - Ref<ImageTexture> icon = editor_generate_icon(index, !dark_theme && !is_exception, scale, force_filter); + Ref<ImageTexture> icon = editor_generate_icon(index, !p_dark_theme && !is_exception, scale, force_filter); p_theme->set_icon(editor_icons_names[index], "EditorIcons", icon); } } else { @@ -199,7 +223,7 @@ void editor_register_and_generate_icons(Ref<Theme> p_theme, bool dark_theme = tr int index = editor_md_thumbs_indices[i]; List<String>::Element *is_exception = exceptions.find(editor_icons_names[index]); if (is_exception) exceptions.erase(is_exception); - Ref<ImageTexture> icon = editor_generate_icon(index, !dark_theme && !is_exception, scale, force_filter); + Ref<ImageTexture> icon = editor_generate_icon(index, !p_dark_theme && !is_exception, scale, force_filter); p_theme->set_icon(editor_icons_names[index], "EditorIcons", icon); } } @@ -209,7 +233,6 @@ void editor_register_and_generate_icons(Ref<Theme> p_theme, bool dark_theme = tr clock_t end_time = clock(); double time_d = (double)(end_time - begin_time) / CLOCKS_PER_SEC; - print_line("SVG_GENERATION TIME: " + rtos(time_d)); #else print_line("Sorry no icons for you"); #endif @@ -222,8 +245,8 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { const float default_contrast = 0.25; //Theme settings - Color accent_color = EDITOR_DEF("interface/theme/accent_color", Color::html("#000000")); - Color base_color = EDITOR_DEF("interface/theme/base_color", Color::html("#000000")); + Color accent_color = EDITOR_DEF("interface/theme/accent_color", Color::html("#699ce8")); + Color base_color = EDITOR_DEF("interface/theme/base_color", Color::html("#323b4f")); float contrast = EDITOR_DEF("interface/theme/contrast", default_contrast); int preset = EDITOR_DEF("interface/theme/preset", 0); @@ -235,33 +258,59 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { Color script_bg_color = EDITOR_DEF("text_editor/highlighting/background_color", Color(0, 0, 0, 0)); + Color preset_accent_color; + Color preset_base_color; + float preset_contrast; switch (preset) { case 0: { // Default - accent_color = Color::html("#699ce8"); - base_color = Color::html("#323b4f"); - contrast = default_contrast; + preset_accent_color = Color::html("#699ce8"); + preset_base_color = Color::html("#323b4f"); + preset_contrast = default_contrast; } break; case 1: { // Grey - accent_color = Color::html("#3e3e3e"); - base_color = Color::html("#3d3d3d"); - contrast = 0.2; + preset_accent_color = Color::html("#b8e4ff"); + preset_base_color = Color::html("#3d3d3d"); + preset_contrast = 0.2; } break; case 2: { // Godot 2 - accent_color = Color::html("#86ace2"); - base_color = Color::html("#3C3A44"); - contrast = 0.25; + preset_accent_color = Color::html("#86ace2"); + preset_base_color = Color::html("#3C3A44"); + preset_contrast = 0.25; } break; case 3: { // Arc - accent_color = Color::html("#5294e2"); - base_color = Color::html("#383c4a"); - contrast = 0.25; + preset_accent_color = Color::html("#5294e2"); + preset_base_color = Color::html("#383c4a"); + preset_contrast = 0.25; } break; case 4: { // Light - accent_color = Color::html("#2070ff"); - base_color = Color::html("#ffffff"); - contrast = 0.08; + preset_accent_color = Color::html("#2070ff"); + preset_base_color = Color::html("#ffffff"); + preset_contrast = 0.08; } break; + case 5: { // Alien + preset_accent_color = Color::html("#1bfe99"); + preset_base_color = Color::html("#2f373f"); + preset_contrast = 0.25; + } + default: { // Custom + accent_color = EDITOR_DEF("interface/theme/accent_color", Color::html("#699ce8")); + base_color = EDITOR_DEF("interface/theme/base_color", Color::html("#323b4f")); + contrast = EDITOR_DEF("interface/theme/contrast", default_contrast); + } + } + + if (preset != 6) { + accent_color = preset_accent_color; + base_color = preset_base_color; + contrast = preset_contrast; + EditorSettings::get_singleton()->set_initial_value("interface/theme/accent_color", accent_color); + EditorSettings::get_singleton()->set_initial_value("interface/theme/base_color", base_color); + EditorSettings::get_singleton()->set_initial_value("interface/theme/contrast", contrast); } + EditorSettings::get_singleton()->set_manually("interface/theme/preset", preset); + EditorSettings::get_singleton()->set_manually("interface/theme/accent_color", accent_color); + EditorSettings::get_singleton()->set_manually("interface/theme/base_color", base_color); + EditorSettings::get_singleton()->set_manually("interface/theme/contrast", contrast); //Colors int AUTO_COLOR = 0; @@ -291,6 +340,7 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { const Color highlight_color = Color(mono_color.r, mono_color.g, mono_color.b, 0.2); theme->set_color("accent_color", "Editor", accent_color); + theme->set_color("highlight_color", "Editor", highlight_color); theme->set_color("base_color", "Editor", base_color); theme->set_color("dark_color_1", "Editor", dark_color_1); theme->set_color("dark_color_2", "Editor", dark_color_2); @@ -299,14 +349,31 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { theme->set_color("contrast_color_2", "Editor", contrast_color_2); theme->set_color("font_color", "Editor", font_color); + theme->set_color("highlighted_font_color", "Editor", font_color_hl); + theme->set_color("disabled_font_color", "Editor", font_color_disabled); - Color success_color = accent_color.linear_interpolate(Color(.6, 1, .6), 0.8); - Color warning_color = accent_color.linear_interpolate(Color(1, 1, .2), 0.8); - Color error_color = accent_color.linear_interpolate(Color(1, .2, .2), 0.8); + theme->set_color("mono_color", "Editor", mono_color); + + Color success_color = accent_color.linear_interpolate(Color(0.2, 1, 0.2), 0.6) * 1.2; + Color warning_color = accent_color.linear_interpolate(Color(1, 1, 0), 0.7) * 1.2; + Color error_color = accent_color.linear_interpolate(Color(1, 0, 0), 0.8) * 1.7; + if (!dark_theme) { + // yellow on white themes is a P.I.T.A. + warning_color = accent_color.linear_interpolate(Color(1, 0.8, 0), 0.9); + warning_color = warning_color.linear_interpolate(mono_color, 0.2); + success_color = success_color.linear_interpolate(mono_color, 0.2); + error_color = error_color.linear_interpolate(mono_color, 0.2); + } theme->set_color("success_color", "Editor", success_color); theme->set_color("warning_color", "Editor", warning_color); theme->set_color("error_color", "Editor", error_color); + // 2d grid color + const Color grid_minor_color = mono_color * Color(1.0, 1.0, 1.0, 0.07); + const Color grid_major_color = Color(font_color_disabled.r, font_color_disabled.g, font_color_disabled.b, 0.15); + theme->set_color("grid_major_color", "Editor", grid_major_color); + theme->set_color("grid_minor_color", "Editor", grid_minor_color); + const int thumb_size = EDITOR_DEF("filesystem/file_dialog/thumbnail_size", 64); theme->set_constant("scale", "Editor", EDSCALE); theme->set_constant("thumb_size", "Editor", thumb_size); @@ -324,7 +391,7 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { editor_register_and_generate_icons(theme, dark_theme, thumb_size); } // thumbnail size has changed, so we regenerate the medium sizes - if (p_theme != NULL && fabs(p_theme->get_constant("thumb_size", "Editor") - thumb_size) > 0.00001) { + if (p_theme != NULL && fabs((double)p_theme->get_constant("thumb_size", "Editor") - thumb_size) > 0.00001) { editor_register_and_generate_icons(p_theme, dark_theme, thumb_size, true); } @@ -345,11 +412,14 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { style_default->set_draw_center(true); // Button and widgets - Ref<StyleBoxFlat> style_widget = style_default->duplicate(); + const float extra_spacing = EDITOR_GET("interface/theme/additional_spacing"); + Ref<StyleBoxFlat> style_widget = style_default->duplicate(); + style_widget->set_default_margin(MARGIN_LEFT, (extra_spacing + 6) * EDSCALE); + style_widget->set_default_margin(MARGIN_TOP, (extra_spacing + default_margin_size) * EDSCALE); + style_widget->set_default_margin(MARGIN_RIGHT, (extra_spacing + 6) * EDSCALE); + style_widget->set_default_margin(MARGIN_BOTTOM, (extra_spacing + default_margin_size) * EDSCALE); style_widget->set_bg_color(dark_color_1); - style_widget->set_default_margin(MARGIN_LEFT, 6 * EDSCALE); - style_widget->set_default_margin(MARGIN_RIGHT, 6 * EDSCALE); style_widget->set_border_color_all(dark_color_2); Ref<StyleBoxFlat> style_widget_disabled = style_widget->duplicate(); @@ -367,32 +437,44 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { // style for windows, popups, etc.. Ref<StyleBoxFlat> style_popup = style_default->duplicate(); - style_popup->set_default_margin(MARGIN_LEFT, default_margin_size * EDSCALE * 2); - style_popup->set_default_margin(MARGIN_TOP, default_margin_size * EDSCALE * 2); - style_popup->set_default_margin(MARGIN_RIGHT, default_margin_size * EDSCALE * 2); - style_popup->set_default_margin(MARGIN_BOTTOM, default_margin_size * EDSCALE * 2); + const int popup_margin_size = default_margin_size * EDSCALE * 2; + style_popup->set_default_margin(MARGIN_LEFT, popup_margin_size); + style_popup->set_default_margin(MARGIN_TOP, popup_margin_size); + style_popup->set_default_margin(MARGIN_RIGHT, popup_margin_size); + style_popup->set_default_margin(MARGIN_BOTTOM, popup_margin_size); style_popup->set_border_color_all(contrast_color_1); style_popup->set_border_width_all(MAX(EDSCALE, border_width)); const Color shadow_color = Color(0, 0, 0, dark_theme ? 0.3 : 0.1); style_popup->set_shadow_color(shadow_color); style_popup->set_shadow_size(4 * EDSCALE); + Ref<StyleBoxLine> style_popup_separator(memnew(StyleBoxLine)); + style_popup_separator->set_color(separator_color); + style_popup_separator->set_grow(popup_margin_size - MAX(EDSCALE, border_width)); + style_popup_separator->set_thickness(MAX(EDSCALE, border_width)); + Ref<StyleBoxEmpty> style_empty = make_empty_stylebox(default_margin_size, default_margin_size, default_margin_size, default_margin_size); // Tabs - const int tab_default_margin_side = 10 * EDSCALE; - Ref<StyleBoxFlat> style_tab_selected = style_default->duplicate(); + + const int tab_default_margin_side = 10 * EDSCALE + extra_spacing * EDSCALE; + const int tab_default_margin_vertical = 5 * EDSCALE + extra_spacing * EDSCALE; + + Ref<StyleBoxFlat> style_tab_selected = style_widget->duplicate(); + style_tab_selected->set_border_width_all(border_width); style_tab_selected->set_border_width(MARGIN_BOTTOM, 0); style_tab_selected->set_border_color_all(dark_color_3); style_tab_selected->set_expand_margin_size(MARGIN_BOTTOM, border_width); style_tab_selected->set_default_margin(MARGIN_LEFT, tab_default_margin_side); style_tab_selected->set_default_margin(MARGIN_RIGHT, tab_default_margin_side); + style_tab_selected->set_default_margin(MARGIN_BOTTOM, tab_default_margin_vertical); + style_tab_selected->set_default_margin(MARGIN_TOP, tab_default_margin_vertical); style_tab_selected->set_bg_color(tab_color); Ref<StyleBoxFlat> style_tab_unselected = style_tab_selected->duplicate(); - style_tab_unselected->set_bg_color(Color(0.0, 0.0, 0.0, 0.0)); - style_tab_unselected->set_border_color_all(Color(0.0, 0.0, 0.0, 0.0)); + style_tab_unselected->set_draw_center(false); + style_tab_unselected->set_border_width_all(0); // Editor background theme->set_stylebox("Background", "EditorStyles", make_flat_stylebox(background_color, default_margin_size, default_margin_size, default_margin_size, default_margin_size)); @@ -404,25 +486,27 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { theme->set_stylebox("Focus", "EditorStyles", style_focus); // Menu - Ref<StyleBoxEmpty> style_menu = style_empty; + Ref<StyleBoxFlat> style_menu = style_widget->duplicate(); + style_menu->set_draw_center(false); + style_menu->set_border_width_all(0); theme->set_stylebox("panel", "PanelContainer", style_menu); theme->set_stylebox("MenuPanel", "EditorStyles", style_menu); // Script Editor - theme->set_stylebox("ScriptEditorPanel", "EditorStyles", make_empty_stylebox(4, 0, 4, 4)); + theme->set_stylebox("ScriptEditorPanel", "EditorStyles", make_empty_stylebox(default_margin_size, 0, default_margin_size, default_margin_size)); theme->set_stylebox("ScriptEditor", "EditorStyles", make_empty_stylebox(0, 0, 0, 0)); // Play button group - theme->set_stylebox("PlayButtonPanel", "EditorStyles", style_empty); //make_stylebox(theme->get_icon("GuiPlayButtonGroup", "EditorIcons"), 16, 16, 16, 16, 8, 4, 8, 4)); + theme->set_stylebox("PlayButtonPanel", "EditorStyles", style_empty); //MenuButton - Ref<StyleBoxFlat> style_menu_hover_border = style_default->duplicate(); + Ref<StyleBoxFlat> style_menu_hover_border = style_widget->duplicate(); style_menu_hover_border->set_draw_center(false); style_menu_hover_border->set_border_width_all(0); style_menu_hover_border->set_border_width(MARGIN_BOTTOM, border_width); style_menu_hover_border->set_border_color_all(accent_color); - Ref<StyleBoxFlat> style_menu_hover_bg = style_default->duplicate(); + Ref<StyleBoxFlat> style_menu_hover_bg = style_widget->duplicate(); style_menu_hover_bg->set_border_width_all(0); style_menu_hover_bg->set_bg_color(dark_color_1); @@ -480,7 +564,7 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { theme->set_color("font_color_disabled", "OptionButton", font_color_disabled); theme->set_color("icon_color_hover", "OptionButton", font_color_hl); theme->set_icon("arrow", "OptionButton", theme->get_icon("GuiOptionArrow", "EditorIcons")); - theme->set_constant("arrow_margin", "OptionButton", 4 * EDSCALE); + theme->set_constant("arrow_margin", "OptionButton", default_margin_size * EDSCALE); theme->set_constant("modulate_arrow", "OptionButton", true); // CheckButton @@ -508,7 +592,7 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { // PopupMenu Ref<StyleBoxFlat> style_popup_menu = style_popup; theme->set_stylebox("panel", "PopupMenu", style_popup_menu); - theme->set_stylebox("separator", "PopupMenu", make_line_stylebox(separator_color, MAX(EDSCALE, border_width), 8 - MAX(EDSCALE, border_width))); + theme->set_stylebox("separator", "PopupMenu", style_popup_separator); theme->set_color("font_color", "PopupMenu", font_color); theme->set_color("font_color_hover", "PopupMenu", font_color_hl); theme->set_color("font_color_accel", "PopupMenu", font_color_disabled); @@ -517,6 +601,8 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { theme->set_icon("unchecked", "PopupMenu", theme->get_icon("GuiUnchecked", "EditorIcons")); theme->set_icon("radio_checked", "PopupMenu", theme->get_icon("GuiChecked", "EditorIcons")); theme->set_icon("radio_unchecked", "PopupMenu", theme->get_icon("GuiUnchecked", "EditorIcons")); + theme->set_icon("submenu", "PopupMenu", theme->get_icon("ArrowRight", "EditorIcons")); + theme->set_constant("vseparation", "PopupMenu", (extra_spacing + default_margin_size) * EDSCALE); // Tree & ItemList background Ref<StyleBoxFlat> style_tree_bg = style_default->duplicate(); @@ -524,19 +610,33 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { style_tree_bg->set_border_color_all(dark_color_3); theme->set_stylebox("bg", "Tree", style_tree_bg); + const Color guide_color = Color(mono_color.r, mono_color.g, mono_color.b, 0.05); // Tree theme->set_icon("checked", "Tree", theme->get_icon("GuiChecked", "EditorIcons")); theme->set_icon("unchecked", "Tree", theme->get_icon("GuiUnchecked", "EditorIcons")); theme->set_icon("arrow", "Tree", theme->get_icon("GuiTreeArrowDown", "EditorIcons")); theme->set_icon("arrow_collapsed", "Tree", theme->get_icon("GuiTreeArrowRight", "EditorIcons")); + theme->set_icon("updown", "Tree", theme->get_icon("GuiTreeUpdown", "EditorIcons")); theme->set_icon("select_arrow", "Tree", theme->get_icon("GuiDropdown", "EditorIcons")); + theme->set_icon("select_option", "Tree", theme->get_icon("GuiTreeOption", "EditorIcons")); theme->set_stylebox("bg_focus", "Tree", style_focus); theme->set_stylebox("custom_button", "Tree", make_empty_stylebox()); theme->set_stylebox("custom_button_pressed", "Tree", make_empty_stylebox()); theme->set_stylebox("custom_button_hover", "Tree", style_widget); theme->set_color("custom_button_font_highlight", "Tree", font_color_hl); theme->set_color("font_color", "Tree", font_color); - theme->set_color("font_color_selected", "Tree", font_color); + theme->set_color("font_color_selected", "Tree", mono_color); + theme->set_color("title_button_color", "Tree", font_color); + theme->set_color("guide_color", "Tree", guide_color); + theme->set_color("drop_position_color", "Tree", accent_color); + theme->set_constant("vseparation", "Tree", (extra_spacing + default_margin_size) * EDSCALE); + theme->set_constant("hseparation", "Tree", (extra_spacing + default_margin_size) * EDSCALE); + theme->set_constant("guide_width", "Tree", border_width); + theme->set_constant("item_margin", "Tree", 3 * default_margin_size * EDSCALE); + theme->set_constant("button_margin", "Tree", default_margin_size * EDSCALE); + theme->set_constant("draw_relationship_lines", "Tree", 0); + theme->set_constant("scroll_border", "Tree", default_margin_size * EDSCALE); + theme->set_constant("scroll_speed", "Tree", 12); Ref<StyleBoxFlat> style_tree_btn = style_default->duplicate(); style_tree_btn->set_bg_color(contrast_color_1); @@ -565,9 +665,6 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { theme->set_stylebox("title_button_hover", "Tree", style_tree_title); theme->set_stylebox("title_button_pressed", "Tree", style_tree_title); - // Color prop_category_color = dark_color_1.linear_interpolate(mono_color, 0.12) : dark_color_1.linear_interpolate(Color(0, 0, 0, 1), 0.2); - // Color prop_section_color = dark_color_1.linear_interpolate(mono_color, 0.09) : dark_color_1.linear_interpolate(Color(0, 1, 0, 1), 0.1); - // Color prop_subsection_color = dark_color_1.linear_interpolate(mono_color, 0.06) : dark_color_1.linear_interpolate(Color(0, 0, 0, 1), 0.1); Color prop_category_color = dark_color_1.linear_interpolate(mono_color, 0.12); Color prop_section_color = dark_color_1.linear_interpolate(mono_color, 0.09); Color prop_subsection_color = dark_color_1.linear_interpolate(mono_color, 0.06); @@ -592,8 +689,13 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { theme->set_stylebox("selected", "ItemList", style_tree_selected); theme->set_stylebox("bg_focus", "ItemList", style_focus); theme->set_stylebox("bg", "ItemList", style_itemlist_bg); - theme->set_constant("vseparation", "ItemList", 5 * EDSCALE); theme->set_color("font_color", "ItemList", font_color); + theme->set_color("font_color_selected", "ItemList", mono_color); + theme->set_color("guide_color", "ItemList", guide_color); + theme->set_constant("vseparation", "ItemList", 2 * EDSCALE); + theme->set_constant("hseparation", "ItemList", 2 * EDSCALE); + theme->set_constant("icon_margin", "ItemList", default_margin_size * EDSCALE); + theme->set_constant("line_separation", "ItemList", 2 * EDSCALE); // Tabs & TabContainer theme->set_stylebox("tab_fg", "TabContainer", style_tab_selected); @@ -611,6 +713,8 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { theme->set_icon("close", "Tabs", theme->get_icon("GuiClose", "EditorIcons")); theme->set_stylebox("button_pressed", "Tabs", style_menu); theme->set_stylebox("button", "Tabs", style_menu); + theme->set_icon("increment", "TabContainer", theme->get_icon("GuiScrollArrowRight", "EditorIcons")); + theme->set_icon("decrement", "TabContainer", theme->get_icon("GuiScrollArrowLeft", "EditorIcons")); // Content of each tab Ref<StyleBoxFlat> style_content_panel = style_default->duplicate(); @@ -631,33 +735,22 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { theme->set_stylebox("panel", "TabContainer", style_content_panel); theme->set_stylebox("Content", "EditorStyles", style_content_panel_vp); - // Separators (no separators) + // Separators theme->set_stylebox("separator", "HSeparator", make_line_stylebox(separator_color, border_width)); theme->set_stylebox("separator", "VSeparator", make_line_stylebox(separator_color, border_width, 0, true)); - // HACK Debuger panel + // Debugger + Ref<StyleBoxFlat> style_panel_debugger = style_content_panel->duplicate(); - const int v_offset = theme->get_font("font", "Tabs")->get_height() + style_tab_selected->get_minimum_size().height + default_margin_size * EDSCALE; - style_panel_debugger->set_expand_margin_size(MARGIN_TOP, -v_offset); - theme->set_stylebox("debugger_panel", "EditorStyles", style_panel_debugger); + style_panel_debugger->set_border_width(MARGIN_BOTTOM, 0); + theme->set_stylebox("DebuggerPanel", "EditorStyles", style_panel_debugger); + theme->set_stylebox("DebuggerTabFG", "EditorStyles", style_tab_selected); + theme->set_stylebox("DebuggerTabBG", "EditorStyles", style_tab_unselected); - // Debugger - Ref<StyleBoxFlat> style_debugger_contents = style_content_panel->duplicate(); - style_debugger_contents->set_default_margin(MARGIN_LEFT, 0); - style_debugger_contents->set_default_margin(MARGIN_BOTTOM, 0); - style_debugger_contents->set_default_margin(MARGIN_RIGHT, 0); - style_debugger_contents->set_border_width_all(0); - style_debugger_contents->set_expand_margin_size(MARGIN_TOP, -v_offset); - theme->set_constant("extra_margin", "DebuggerPanel", default_margin_size * EDSCALE + border_width); - theme->set_stylebox("DebuggerPanel", "EditorStyles", style_debugger_contents); - Ref<StyleBoxFlat> style_tab_fg_debugger = style_tab_selected->duplicate(); - style_tab_fg_debugger->set_expand_margin_size(MARGIN_LEFT, default_margin_size * EDSCALE + border_width); - style_tab_fg_debugger->set_default_margin(MARGIN_LEFT, tab_default_margin_side - default_margin_size * EDSCALE); - theme->set_stylebox("DebuggerTabFG", "EditorStyles", style_tab_fg_debugger); - Ref<StyleBoxFlat> style_tab_bg_debugger = style_tab_unselected->duplicate(); - style_tab_bg_debugger->set_expand_margin_size(MARGIN_LEFT, default_margin_size * EDSCALE + border_width); - style_tab_bg_debugger->set_default_margin(MARGIN_LEFT, tab_default_margin_side - default_margin_size * EDSCALE); - theme->set_stylebox("DebuggerTabBG", "EditorStyles", style_tab_bg_debugger); + Ref<StyleBoxFlat> style_panel_invisible_top = style_content_panel->duplicate(); + int stylebox_offset = theme->get_font("tab_fg", "TabContainer")->get_height() + theme->get_stylebox("tab_fg", "TabContainer")->get_minimum_size().height + theme->get_stylebox("panel", "TabContainer")->get_default_margin(MARGIN_TOP); + style_panel_invisible_top->set_expand_margin_size(MARGIN_TOP, -stylebox_offset); + theme->set_stylebox("BottomPanelDebuggerOverride", "EditorStyles", style_panel_invisible_top); // LineEdit theme->set_stylebox("normal", "LineEdit", style_widget); @@ -672,6 +765,8 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { theme->set_stylebox("focus", "TextEdit", style_widget_hover); theme->set_constant("side_margin", "TabContainer", 0); theme->set_icon("tab", "TextEdit", theme->get_icon("GuiTab", "EditorIcons")); + theme->set_color("font_color", "TextEdit", font_color); + theme->set_color("caret_color", "TextEdit", highlight_color); // H/VSplitContainer theme->set_stylebox("bg", "VSplitContainer", make_stylebox(theme->get_icon("GuiVsplitBg", "EditorIcons"), 1, 1, 1, 1)); @@ -754,34 +849,31 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { theme->set_stylebox("grabber_area", "VSlider", make_flat_stylebox(contrast_color_1, default_margin_size / 2, 0, default_margin_size / 2, 0)); //RichTextLabel - Color rtl_combined_bg_color = dark_color_1.linear_interpolate(script_bg_color, script_bg_color.a); - Color rtl_mono_color = (rtl_combined_bg_color.r + rtl_combined_bg_color.g + rtl_combined_bg_color.b > 1.5) ? Color(0, 0, 0) : Color(1, 1, 1); - Color rtl_font_color = rtl_mono_color.linear_interpolate(rtl_combined_bg_color, 0.25); - theme->set_color("default_color", "RichTextLabel", rtl_font_color); + theme->set_color("default_color", "RichTextLabel", font_color); theme->set_stylebox("focus", "RichTextLabel", make_empty_stylebox()); theme->set_stylebox("normal", "RichTextLabel", style_tree_bg); - Ref<StyleBoxFlat> style_code = style_tree_bg->duplicate(); - style_code->set_bg_color(rtl_combined_bg_color); - theme->set_stylebox("code_normal", "RichTextLabel", style_code); - Ref<StyleBoxFlat> style_code_focus = style_tree_focus->duplicate(); - style_code_focus->set_bg_color(rtl_combined_bg_color); - theme->set_stylebox("code_focus", "RichTextLabel", style_code_focus); - theme->set_color("font_color", "RichTextLabel", rtl_font_color); - theme->set_color("highlight_color", "RichTextLabel", rtl_mono_color); + theme->set_color("headline_color", "EditorHelp", mono_color); // Panel theme->set_stylebox("panel", "Panel", make_flat_stylebox(dark_color_1, 6, 4, 6, 4)); // Label + theme->set_stylebox("normal", "Label", style_empty); theme->set_color("font_color", "Label", font_color); + theme->set_color("font_color_shadow", "Label", Color(0, 0, 0, 0)); + theme->set_constant("shadow_offset_x", "Label", 1 * EDSCALE); + theme->set_constant("shadow_offset_y", "Label", 1 * EDSCALE); + theme->set_constant("shadow_as_outline", "Label", 0 * EDSCALE); + theme->set_constant("line_spacing", "Label", 3 * EDSCALE); // TooltipPanel Ref<StyleBoxFlat> style_tooltip = style_popup->duplicate(); style_tooltip->set_bg_color(Color(mono_color.r, mono_color.g, mono_color.b, 0.9)); style_tooltip->set_border_width_all(border_width); style_tooltip->set_border_color_all(mono_color); - theme->set_color("font_color", "TooltipPanel", font_color); + theme->set_color("font_color", "TooltipLabel", font_color.inverted()); + theme->set_color("font_color_shadow", "TooltipLabel", mono_color.inverted() * Color(1, 1, 1, 0.1)); theme->set_stylebox("panel", "TooltipPanel", style_tooltip); // PopupPanel @@ -797,29 +889,42 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { // GraphEdit theme->set_stylebox("bg", "GraphEdit", style_tree_bg); - theme->set_color("grid_major", "GraphEdit", Color(font_color.r, font_color.g, font_color.b, 0.1)); - theme->set_color("grid_minor", "GraphEdit", Color(font_color_disabled.r, font_color_disabled.g, font_color_disabled.b, 0.05)); + theme->set_color("grid_major", "GraphEdit", grid_major_color); + theme->set_color("grid_minor", "GraphEdit", grid_minor_color); theme->set_icon("minus", "GraphEdit", theme->get_icon("ZoomLess", "EditorIcons")); theme->set_icon("more", "GraphEdit", theme->get_icon("ZoomMore", "EditorIcons")); theme->set_icon("reset", "GraphEdit", theme->get_icon("ZoomReset", "EditorIcons")); + theme->set_icon("snap", "GraphEdit", theme->get_icon("SnapGrid", "EditorIcons")); + theme->set_constant("bezier_len_pos", "GraphEdit", 80 * EDSCALE); + theme->set_constant("bezier_len_neg", "GraphEdit", 160 * EDSCALE); // GraphNode + const float mv = dark_theme ? 0.0 : 1.0; + const float mv2 = 1.0 - mv; const int gn_margin_side = 28; - Ref<StyleBoxFlat> graphsb = make_flat_stylebox(Color(0, 0, 0, 0.3), gn_margin_side, 24, gn_margin_side, 5); + Ref<StyleBoxFlat> graphsb = make_flat_stylebox(Color(mv, mv, mv, 0.7), gn_margin_side, 24, gn_margin_side, 5); graphsb->set_border_width_all(border_width); - graphsb->set_border_color_all(Color(1, 1, 1, 0.9)); - Ref<StyleBoxFlat> graphsbselected = make_flat_stylebox(Color(0, 0, 0, 0.4), gn_margin_side, 24, gn_margin_side, 5); + graphsb->set_border_color_all(Color(mv2, mv2, mv2, 0.9)); + Ref<StyleBoxFlat> graphsbselected = make_flat_stylebox(Color(mv, mv, mv, 0.9), gn_margin_side, 24, gn_margin_side, 5); graphsbselected->set_border_width_all(border_width); graphsbselected->set_border_color_all(Color(accent_color.r, accent_color.g, accent_color.b, 0.9)); graphsbselected->set_shadow_size(8 * EDSCALE); graphsbselected->set_shadow_color(shadow_color); - Ref<StyleBoxFlat> graphsbcomment = make_flat_stylebox(Color(0, 0, 0, 0.3), gn_margin_side, 24, gn_margin_side, 5); + Ref<StyleBoxFlat> graphsbcomment = make_flat_stylebox(Color(mv, mv, mv, 0.3), gn_margin_side, 24, gn_margin_side, 5); graphsbcomment->set_border_width_all(border_width); - graphsbcomment->set_border_color_all(Color(1, 1, 1, 0.9)); - Ref<StyleBoxFlat> graphsbcommentselected = make_flat_stylebox(Color(0, 0, 0, 0.4), gn_margin_side, 24, gn_margin_side, 5); + graphsbcomment->set_border_color_all(Color(mv2, mv2, mv2, 0.9)); + Ref<StyleBoxFlat> graphsbcommentselected = make_flat_stylebox(Color(mv, mv, mv, 0.4), gn_margin_side, 24, gn_margin_side, 5); graphsbcommentselected->set_border_width_all(border_width); - graphsbcommentselected->set_border_color_all(Color(1, 1, 1, 0.9)); + graphsbcommentselected->set_border_color_all(Color(mv2, mv2, mv2, 0.9)); + Ref<StyleBoxFlat> graphsbbreakpoint = graphsbselected->duplicate(); + graphsbbreakpoint->set_draw_center(false); + graphsbbreakpoint->set_border_color_all(warning_color); + graphsbbreakpoint->set_shadow_color(warning_color * Color(1.0, 1.0, 1.0, 0.1)); + Ref<StyleBoxFlat> graphsbposition = graphsbselected->duplicate(); + graphsbposition->set_draw_center(false); + graphsbposition->set_border_color_all(error_color); + graphsbposition->set_shadow_color(error_color * Color(1.0, 1.0, 1.0, 0.2)); if (use_gn_headers) { graphsb->set_border_width(MARGIN_TOP, 24 * EDSCALE); @@ -832,6 +937,8 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { theme->set_stylebox("selectedframe", "GraphNode", graphsbselected); theme->set_stylebox("comment", "GraphNode", graphsbcomment); theme->set_stylebox("commentfocus", "GraphNode", graphsbcommentselected); + theme->set_stylebox("breakpoint", "GraphNode", graphsbbreakpoint); + theme->set_stylebox("position", "GraphNode", graphsbposition); theme->set_constant("port_offset", "GraphNode", 14 * EDSCALE); theme->set_constant("title_h_offset", "GraphNode", -16 * EDSCALE); theme->set_constant("close_h_offset", "GraphNode", 20 * EDSCALE); @@ -840,16 +947,32 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { theme->set_icon("resizer", "GraphNode", theme->get_icon("GuiResizer", "EditorIcons")); theme->set_icon("port", "GraphNode", theme->get_icon("GuiGraphNodePort", "EditorIcons")); + // GridContainer + theme->set_constant("vseperation", "GridContainer", (extra_spacing + default_margin_size) * EDSCALE); + // FileDialog + theme->set_icon("folder", "FileDialog", theme->get_icon("Folder", "EditorIcons")); theme->set_color("files_disabled", "FileDialog", font_color_disabled); + // color picker + theme->set_constant("margin", "ColorPicker", popup_margin_size); + theme->set_constant("sv_width", "ColorPicker", 256 * EDSCALE); + theme->set_constant("sv_height", "ColorPicker", 256 * EDSCALE); + theme->set_constant("h_width", "ColorPicker", 30 * EDSCALE); + theme->set_constant("label_width", "ColorPicker", 10 * EDSCALE); + theme->set_icon("screen_picker", "ColorPicker", theme->get_icon("ColorPick", "EditorIcons")); + theme->set_icon("add_preset", "ColorPicker", theme->get_icon("Add", "EditorIcons")); + theme->set_icon("preset_bg", "ColorPicker", theme->get_icon("GuiMiniCheckerboard", "EditorIcons")); + + theme->set_icon("bg", "ColorPickerButton", theme->get_icon("GuiMiniCheckerboard", "EditorIcons")); + // adaptive script theme constants // for comments and elements with lower relevance const Color dim_color = Color(font_color.r, font_color.g, font_color.b, 0.5); const float mono_value = mono_color.r; - const Color alpha1 = Color(mono_value, mono_value, mono_value, 0.1); - const Color alpha2 = Color(mono_value, mono_value, mono_value, 0.3); + const Color alpha1 = Color(mono_value, mono_value, mono_value, 0.07); + const Color alpha2 = Color(mono_value, mono_value, mono_value, 0.14); const Color alpha3 = Color(mono_value, mono_value, mono_value, 0.5); const Color alpha4 = Color(mono_value, mono_value, mono_value, 0.7); @@ -857,7 +980,7 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { const Color main_color = Color::html(dark_theme ? "#57b3ff" : "#0480ff"); const Color symbol_color = Color::html("#5792ff").linear_interpolate(mono_color, dark_theme ? 0.5 : 0.3); - const Color keyword_color = main_color.linear_interpolate(mono_color, 0.4); + const Color keyword_color = Color::html("#ff7185"); const Color basetype_color = Color::html(dark_theme ? "#42ffc2" : "#00c161"); const Color type_color = basetype_color.linear_interpolate(mono_color, dark_theme ? 0.7 : 0.5); const Color comment_color = dim_color; @@ -874,7 +997,7 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { const Color caret_color = mono_color; const Color caret_background_color = mono_color.inverted(); const Color text_selected_color = dark_color_3; - const Color selection_color = alpha3; + const Color selection_color = alpha2; const Color brace_mismatch_color = error_color; const Color current_line_color = alpha1; const Color line_length_guideline_color = warning_color; @@ -928,7 +1051,7 @@ Ref<Theme> create_custom_theme() { theme = ResourceLoader::load(custom_theme); } - String global_font = EditorSettings::get_singleton()->get("interface/custom_font"); + String global_font = EditorSettings::get_singleton()->get("interface/editor/custom_font"); if (global_font != "") { Ref<Font> fnt = ResourceLoader::load(global_font); if (fnt.is_valid()) { diff --git a/editor/export_template_manager.cpp b/editor/export_template_manager.cpp index 147d5f90c6..d867404f3d 100644 --- a/editor/export_template_manager.cpp +++ b/editor/export_template_manager.cpp @@ -73,7 +73,7 @@ void ExportTemplateManager::_update_template_list() { current_hb->add_child(current); if (templates.has(current_version)) { - current->add_color_override("font_color", Color(0.5, 1, 0.5)); + current->add_color_override("font_color", get_color("success_color", "Editor")); Button *redownload = memnew(Button); redownload->set_text(TTR("Re-Download")); current_hb->add_child(redownload); @@ -86,7 +86,7 @@ void ExportTemplateManager::_update_template_list() { uninstall->connect("pressed", this, "_uninstall_template", varray(current_version)); } else { - current->add_color_override("font_color", Color(1.0, 0.5, 0.5)); + current->add_color_override("font_color", get_color("error_color", "Editor")); Button *redownload = memnew(Button); redownload->set_text(TTR("Download")); redownload->connect("pressed", this, "_download_template", varray(current_version)); @@ -98,7 +98,7 @@ void ExportTemplateManager::_update_template_list() { HBoxContainer *hbc = memnew(HBoxContainer); Label *version = memnew(Label); - version->set_modulate(Color(1, 1, 1, 0.7)); + version->set_modulate(get_color("disabled_font_color", "Editor")); String text = E->get(); if (text == current_version) { text += " " + TTR("(Current)"); @@ -299,7 +299,7 @@ void ExportTemplateManager::_install_from_file(const String &p_file) { void ExportTemplateManager::popup_manager() { _update_template_list(); - popup_centered_minsize(Size2(400, 600) * EDSCALE); + popup_centered_minsize(Size2(400, 400) * EDSCALE); } void ExportTemplateManager::ok_pressed() { diff --git a/editor/filesystem_dock.cpp b/editor/filesystem_dock.cpp index 526a8fe810..dfd35fdd96 100644 --- a/editor/filesystem_dock.cpp +++ b/editor/filesystem_dock.cpp @@ -458,9 +458,9 @@ void FileSystemDock::_update_files(bool p_keep_selection) { if (path != "res://") { if (use_thumbnails) { - files->add_item("..", folder_thumbnail, true); + files->add_item("..", folder_thumbnail, false); } else { - files->add_item("..", get_icon("folder", "FileDialog"), true); + files->add_item("..", get_icon("folder", "FileDialog"), false); } String bd = path.get_base_dir(); @@ -567,9 +567,22 @@ void FileSystemDock::_update_files(bool p_keep_selection) { } void FileSystemDock::_select_file(int p_idx) { - - files->select(p_idx, true); - _file_option(FILE_OPEN); + String path = files->get_item_metadata(p_idx); + if (path.ends_with("/")) { + if (path != "res://") { + path = path.substr(0, path.length() - 1); + } + this->path = path; + _update_files(false); + current_path->set_text(path); + _push_to_history(); + } else { + if (ResourceLoader::get_resource_type(path) == "PackedScene") { + editor->open_request(path); + } else { + editor->load_resource(path); + } + } } void FileSystemDock::_go_to_tree() { @@ -704,18 +717,19 @@ void FileSystemDock::_push_to_history() { button_hist_next->set_disabled(history_pos + 1 == history.size()); } -void FileSystemDock::_find_inside_move_files(EditorFileSystemDirectory *efsd, Vector<String> &files) { +void FileSystemDock::_get_all_files_in_dir(EditorFileSystemDirectory *efsd, Vector<String> &files) const { + if (efsd == NULL) + return; for (int i = 0; i < efsd->get_subdir_count(); i++) { - _find_inside_move_files(efsd->get_subdir(i), files); + _get_all_files_in_dir(efsd->get_subdir(i), files); } for (int i = 0; i < efsd->get_file_count(); i++) { files.push_back(efsd->get_file_path(i)); } } -void FileSystemDock::_find_remaps(EditorFileSystemDirectory *efsd, Map<String, String> &renames, List<String> &to_remaps) { - +void FileSystemDock::_find_remaps(EditorFileSystemDirectory *efsd, const Map<String, String> &renames, Vector<String> &to_remaps) const { for (int i = 0; i < efsd->get_subdir_count(); i++) { _find_remaps(efsd->get_subdir(i), renames, to_remaps); } @@ -730,199 +744,157 @@ void FileSystemDock::_find_remaps(EditorFileSystemDirectory *efsd, Map<String, S } } -void FileSystemDock::_rename_operation(const String &p_to_path) { +void FileSystemDock::_try_move_item(const FileOrFolder &p_item, const String &p_new_path, Map<String, String> &p_renames) const { + //Ensure folder paths end with "/" + String old_path = (p_item.is_file || p_item.path.ends_with("/")) ? p_item.path : (p_item.path + "/"); + String new_path = (p_item.is_file || p_new_path.ends_with("/")) ? p_new_path : (p_new_path + "/"); - if (move_files[0] == p_to_path) { - EditorNode::get_singleton()->show_warning(TTR("Same source and destination files, doing nothing.")); + if (new_path == old_path) { return; - } - if (FileAccess::exists(p_to_path)) { - EditorNode::get_singleton()->show_warning(TTR("Target file exists, can't overwrite. Delete first.")); + } else if (old_path == "res://") { + EditorNode::get_singleton()->add_io_error(TTR("Cannot move/rename resources root.")); + return; + } else if (!p_item.is_file && new_path.begins_with(old_path)) { + //This check doesn't erroneously catch renaming to a longer name as folder paths always end with "/" + EditorNode::get_singleton()->add_io_error(TTR("Cannot move a folder into itself.\n") + old_path + "\n"); return; } - Map<String, String> renames; - renames[move_files[0]] = p_to_path; - - List<String> remap; - - _find_remaps(EditorFileSystem::get_singleton()->get_filesystem(), renames, remap); - print_line("found files to remap: " + itos(remap.size())); - - //perform remaps - for (List<String>::Element *E = remap.front(); E; E = E->next()) { - - Error err = ResourceLoader::rename_dependencies(E->get(), renames); - print_line("remapping: " + E->get()); - - if (err != OK) { - EditorNode::get_singleton()->add_io_error("Can't rename deps for:\n" + E->get() + "\n"); - } + //Build a list of files which will have new paths as a result of this operation + Vector<String> changed_paths; + if (p_item.is_file) { + changed_paths.push_back(old_path); + } else { + _get_all_files_in_dir(EditorFileSystem::get_singleton()->get_filesystem_path(old_path), changed_paths); } - //finally, perform moves - DirAccess *da = DirAccess::create(DirAccess::ACCESS_RESOURCES); + print_line("Moving " + old_path + " -> " + new_path); + Error err = da->rename(old_path, new_path); + if (err == OK) { + //Move/Rename any corresponding import settings too + if (p_item.is_file && FileAccess::exists(old_path + ".import")) { + err = da->rename(old_path + ".import", new_path + ".import"); + if (err != OK) { + EditorNode::get_singleton()->add_io_error(TTR("Error moving:\n") + old_path + ".import\n"); + } + } - Error err = da->rename(move_files[0], p_to_path); - print_line("moving file " + move_files[0] + " to " + p_to_path); - if (err != OK) { - EditorNode::get_singleton()->add_io_error("Error moving file:\n" + move_files[0] + "\n"); + //Only treat as a changed dependency if it was successfully moved + for (int i = 0; i < changed_paths.size(); ++i) { + p_renames[changed_paths[i]] = changed_paths[i].replace_first(old_path, new_path); + print_line(" Remap: " + changed_paths[i] + " -> " + p_renames[changed_paths[i]]); + } + } else { + EditorNode::get_singleton()->add_io_error(TTR("Error moving:\n") + old_path + "\n"); } - - //rescan everything memdelete(da); - print_line("call rescan!"); - _rescan(); } -void FileSystemDock::_move_operation(const String &p_to_path) { - - if (p_to_path == path) { - EditorNode::get_singleton()->show_warning(TTR("Same source and destination paths, doing nothing.")); - return; +void FileSystemDock::_update_dependencies_after_move(const Map<String, String> &p_renames) const { + //The following code assumes that the following holds: + // 1) EditorFileSystem contains the old paths/folder structure from before the rename/move. + // 2) ResourceLoader can use the new paths without needing to call rescan. + Vector<String> remaps; + _find_remaps(EditorFileSystem::get_singleton()->get_filesystem(), p_renames, remaps); + for (int i = 0; i < remaps.size(); ++i) { + //Because we haven't called a rescan yet the found remap might still be an old path itself. + String file = p_renames.has(remaps[i]) ? p_renames[remaps[i]] : remaps[i]; + print_line("Remapping dependencies for: " + file); + Error err = ResourceLoader::rename_dependencies(file, p_renames); + if (err != OK) { + EditorNode::get_singleton()->add_io_error(TTR("Unable to update dependencies:\n") + remaps[i] + "\n"); + } } +} - //find files inside dirs to be moved - - Vector<String> inside_files; - - for (int i = 0; i < move_dirs.size(); i++) { - if (p_to_path.begins_with(move_dirs[i])) { - EditorNode::get_singleton()->show_warning(TTR("Can't move directories to within themselves.")); - return; - } +void FileSystemDock::_make_dir_confirm() { + String dir_name = make_dir_dialog_text->get_text().strip_edges(); - EditorFileSystemDirectory *efsd = EditorFileSystem::get_singleton()->get_filesystem_path(move_dirs[i]); - if (!efsd) - continue; - _find_inside_move_files(efsd, inside_files); + if (dir_name.length() == 0) { + EditorNode::get_singleton()->show_warning(TTR("No name provided")); + return; + } else if (dir_name.find("/") != -1 || dir_name.find("\\") != -1 || dir_name.find(":") != -1) { + EditorNode::get_singleton()->show_warning(TTR("Provided name contains invalid characters")); + return; } - //make list of remaps - Map<String, String> renames; - String repfrom = path == "res://" ? path : String(path + "/"); - String repto = p_to_path; - if (!repto.ends_with("/")) { - repto += "/"; + print_line("Making folder " + dir_name + " in " + path); + DirAccess *da = DirAccess::create(DirAccess::ACCESS_RESOURCES); + Error err = da->change_dir(path); + if (err == OK) { + err = da->make_dir(dir_name); } + memdelete(da); - print_line("reprfrom: " + repfrom + " repto " + repto); - - for (int i = 0; i < move_files.size(); i++) { - renames[move_files[i]] = move_files[i].replace_first(repfrom, repto); - print_line("move file " + move_files[i] + " -> " + renames[move_files[i]]); - } - for (int i = 0; i < inside_files.size(); i++) { - renames[inside_files[i]] = inside_files[i].replace_first(repfrom, repto); - print_line("inside file " + inside_files[i] + " -> " + renames[inside_files[i]]); + if (err == OK) { + print_line("call rescan!"); + _rescan(); + } else { + EditorNode::get_singleton()->show_warning(TTR("Could not create folder.")); } +} - //make list of files that will be run the remapping - List<String> remap; - - _find_remaps(EditorFileSystem::get_singleton()->get_filesystem(), renames, remap); - print_line("found files to remap: " + itos(remap.size())); - - //perform remaps - for (List<String>::Element *E = remap.front(); E; E = E->next()) { - - Error err = ResourceLoader::rename_dependencies(E->get(), renames); - print_line("remapping: " + E->get()); +void FileSystemDock::_rename_operation_confirm() { - if (err != OK) { - EditorNode::get_singleton()->add_io_error(TTR("Can't rename deps for:\n") + E->get() + "\n"); - } + String new_name = rename_dialog_text->get_text().strip_edges(); + if (new_name.length() == 0) { + EditorNode::get_singleton()->show_warning(TTR("No name provided.")); + return; + } else if (new_name.find("/") != -1 || new_name.find("\\") != -1 || new_name.find(":") != -1) { + EditorNode::get_singleton()->show_warning(TTR("Name contains invalid characters.")); + return; } - //finally, perform moves + String old_path = to_rename.path.ends_with("/") ? to_rename.path.substr(0, to_rename.path.length() - 1) : to_rename.path; + String new_path = old_path.get_base_dir().plus_file(new_name); + if (old_path == new_path) { + return; + } + //Present a more user friendly warning for name conflict DirAccess *da = DirAccess::create(DirAccess::ACCESS_RESOURCES); - - for (int i = 0; i < move_files.size(); i++) { - - String to = move_files[i].replace_first(repfrom, repto); - Error err = da->rename(move_files[i], to); - print_line("moving file " + move_files[i] + " to " + to); - if (err != OK) { - EditorNode::get_singleton()->add_io_error(TTR("Error moving file:\n") + move_files[i] + "\n"); - } - if (FileAccess::exists(move_files[i] + ".import")) { //move imported files too - //@todo should remove the files in .import folder - err = da->rename(move_files[i] + ".import", to + ".import"); - if (err != OK) { - EditorNode::get_singleton()->add_io_error(TTR("Error moving file:\n") + move_files[i] + ".import\n"); - } - } + if (da->file_exists(new_path) || da->dir_exists(new_path)) { + EditorNode::get_singleton()->show_warning(TTR("A file or folder with this name already exists.")); + memdelete(da); + return; } + memdelete(da); - for (int i = 0; i < move_dirs.size(); i++) { + Map<String, String> renames; + _try_move_item(to_rename, new_path, renames); + _update_dependencies_after_move(renames); - String mdir = move_dirs[i]; - if (mdir == "res://") - continue; + //Rescan everything + print_line("call rescan!"); + _rescan(); +} - if (mdir.ends_with("/")) { - mdir = mdir.substr(0, mdir.length() - 1); - } +void FileSystemDock::_move_operation_confirm(const String &p_to_path) { - String to = p_to_path.plus_file(mdir.get_file()); - Error err = da->rename(mdir, to); - print_line("moving dir " + mdir + " to " + to); - if (err != OK) { - EditorNode::get_singleton()->add_io_error(TTR("Error moving dir:\n") + move_dirs[i] + "\n"); - } + Map<String, String> renames; + for (int i = 0; i < to_move.size(); i++) { + String old_path = to_move[i].path.ends_with("/") ? to_move[i].path.substr(0, to_move[i].path.length() - 1) : to_move[i].path; + String new_path = p_to_path.plus_file(old_path.get_file()); + _try_move_item(to_move[i], new_path, renames); } - memdelete(da); - //rescan everything + _update_dependencies_after_move(renames); print_line("call rescan!"); _rescan(); } void FileSystemDock::_file_option(int p_option) { - switch (p_option) { - - case FILE_SHOW_IN_EXPLORER: + case FILE_SHOW_IN_EXPLORER: { + String dir = ProjectSettings::get_singleton()->globalize_path(this->path); + OS::get_singleton()->shell_open(String("file://") + dir); + } break; case FILE_OPEN: { - int idx = -1; - for (int i = 0; i < files->get_item_count(); i++) { - if (files->is_selected(i)) { - idx = i; - break; - } - } - - if (idx < 0) - return; - - String path = files->get_item_metadata(idx); - if (p_option == FILE_SHOW_IN_EXPLORER) { - String dir = ProjectSettings::get_singleton()->globalize_path(path); - dir = dir.substr(0, dir.find_last("/")); - OS::get_singleton()->shell_open(String("file://") + dir); - return; - } - - if (path.ends_with("/")) { - if (path != "res://") { - path = path.substr(0, path.length() - 1); - } - this->path = path; - _update_files(false); - current_path->set_text(path); - _push_to_history(); - } else { - - if (ResourceLoader::get_resource_type(path) == "PackedScene") { - - editor->open_request(path); - } else { - - editor->load_resource(path); - } - } + int idx = files->get_current(); + if (idx < 0 || idx >= files->get_item_count()) + break; + _select_file(idx); } break; case FILE_INSTANCE: { @@ -958,64 +930,59 @@ void FileSystemDock::_file_option(int p_option) { owners_editor->show(path); } break; case FILE_MOVE: { - - move_dirs.clear(); - move_files.clear(); - + to_move.clear(); for (int i = 0; i < files->get_item_count(); i++) { - - String path = files->get_item_metadata(i); if (!files->is_selected(i)) continue; - if (files->get_item_text(i) == "..") { - EditorNode::get_singleton()->show_warning(TTR("Can't operate on '..'")); - return; - } - - if (path.ends_with("/")) { - move_dirs.push_back(path.substr(0, path.length() - 1)); - } else { - move_files.push_back(path); - } + String path = files->get_item_metadata(i); + to_move.push_back(FileOrFolder(path, !path.ends_with("/"))); } - - if (move_dirs.empty() && move_files.size() == 1) { - - rename_dialog->clear_filters(); - rename_dialog->add_filter("*." + move_files[0].get_extension()); - rename_dialog->set_mode(EditorFileDialog::MODE_SAVE_FILE); - rename_dialog->set_current_path(move_files[0]); - rename_dialog->popup_centered_ratio(); - rename_dialog->set_title(TTR("Pick New Name and Location For:") + " " + move_files[0].get_file()); - - } else { - //just move + if (to_move.size() > 0) { move_dialog->popup_centered_ratio(); } + } break; + case FILE_RENAME: { + int idx = files->get_current(); + if (idx < 0 || idx >= files->get_item_count()) + break; + to_rename.path = files->get_item_metadata(idx); + to_rename.is_file = !to_rename.path.ends_with("/"); + if (to_rename.is_file) { + String name = to_rename.path.get_file(); + rename_dialog->set_title(TTR("Renaming file:") + " " + name); + rename_dialog_text->set_text(name); + rename_dialog_text->select(0, name.find_last(".")); + } else { + String name = to_rename.path.substr(0, to_rename.path.length() - 1).get_file(); + rename_dialog->set_title(TTR("Renaming folder:") + " " + name); + rename_dialog_text->set_text(name); + rename_dialog_text->select(0, name.length()); + } + rename_dialog->popup_centered_minsize(Size2(250, 80) * EDSCALE); + rename_dialog_text->grab_focus(); } break; case FILE_REMOVE: { - - Vector<String> torem; + Vector<String> remove_files; + Vector<String> remove_folders; for (int i = 0; i < files->get_item_count(); i++) { - String path = files->get_item_metadata(i); - if (path.ends_with("/") || !files->is_selected(i)) - continue; - torem.push_back(path); + if (files->is_selected(i) && path != "res://") { + if (path.ends_with("/")) { + remove_folders.push_back(path); + } else { + remove_files.push_back(path); + } + } } - if (torem.empty()) { - EditorNode::get_singleton()->show_warning(TTR("No files selected!")); - break; + if (remove_files.size() + remove_folders.size() > 0) { + remove_dialog->show(remove_folders, remove_files); + //1) find if used + //2) warn } - - remove_dialog->show(torem); - //1) find if used - //2) warn - } break; case FILE_INFO: { @@ -1052,15 +1019,20 @@ void FileSystemDock::_file_option(int p_option) { } */ - } break; - case FILE_COPY_PATH: - + case FILE_NEW_FOLDER: { + make_dir_dialog_text->set_text("new folder"); + make_dir_dialog_text->select_all(); + make_dir_dialog->popup_centered_minsize(Size2(250, 80) * EDSCALE); + make_dir_dialog_text->grab_focus(); + } break; + case FILE_COPY_PATH: { int idx = files->get_current(); if (idx < 0 || idx >= files->get_item_count()) break; String path = files->get_item_metadata(idx); OS::get_singleton()->set_clipboard(path); + } break; } } @@ -1070,26 +1042,64 @@ void FileSystemDock::_folder_option(int p_option) { TreeItem *child = item->get_children(); switch (p_option) { - - case FOLDER_EXPAND_ALL: + case FOLDER_EXPAND_ALL: { item->set_collapsed(false); while (child) { child->set_collapsed(false); child = child->get_next(); } - break; - - case FOLDER_COLLAPSE_ALL: + } break; + case FOLDER_COLLAPSE_ALL: { while (child) { child->set_collapsed(true); child = child->get_next(); } - break; - case FOLDER_SHOW_IN_EXPLORER: + } break; + case FOLDER_MOVE: { + to_move.clear(); + String fpath = item->get_metadata(tree->get_selected_column()); + if (fpath != "res://") { + fpath = fpath.ends_with("/") ? fpath.substr(0, fpath.length() - 1) : fpath; + to_move.push_back(FileOrFolder(fpath, false)); + move_dialog->popup_centered_ratio(); + } + } break; + case FOLDER_RENAME: { + to_rename.path = item->get_metadata(tree->get_selected_column()); + to_rename.is_file = false; + if (to_rename.path != "res://") { + String name = to_rename.path.ends_with("/") ? to_rename.path.substr(0, to_rename.path.length() - 1).get_file() : to_rename.path.get_file(); + rename_dialog->set_title(TTR("Renaming folder:") + " " + name); + rename_dialog_text->set_text(name); + rename_dialog_text->select(0, name.length()); + rename_dialog->popup_centered_minsize(Size2(250, 80) * EDSCALE); + rename_dialog_text->grab_focus(); + } + } break; + case FOLDER_REMOVE: { + Vector<String> remove_folders; + Vector<String> remove_files; + String path = item->get_metadata(tree->get_selected_column()); + if (path != "res://") { + remove_folders.push_back(path); + remove_dialog->show(remove_folders, remove_files); + } + } break; + case FOLDER_NEW_FOLDER: { + make_dir_dialog_text->set_text("new folder"); + make_dir_dialog_text->select_all(); + make_dir_dialog->popup_centered_minsize(Size2(250, 80) * EDSCALE); + make_dir_dialog_text->grab_focus(); + } break; + case FOLDER_COPY_PATH: { + String path = item->get_metadata(tree->get_selected_column()); + OS::get_singleton()->set_clipboard(path); + } break; + case FOLDER_SHOW_IN_EXPLORER: { String path = item->get_metadata(tree->get_selected_column()); String dir = ProjectSettings::get_singleton()->globalize_path(path); OS::get_singleton()->shell_open(String("file://") + dir); - return; + } break; } } @@ -1128,9 +1138,20 @@ void FileSystemDock::_dir_rmb_pressed(const Vector2 &p_pos) { folder_options->add_item(TTR("Expand all"), FOLDER_EXPAND_ALL); folder_options->add_item(TTR("Collapse all"), FOLDER_COLLAPSE_ALL); - folder_options->add_separator(); - folder_options->add_item(TTR("Show In File Manager"), FOLDER_SHOW_IN_EXPLORER); - + TreeItem *item = tree->get_selected(); + if (item) { + String fpath = item->get_metadata(tree->get_selected_column()); + folder_options->add_separator(); + folder_options->add_item(TTR("Copy Path"), FOLDER_COPY_PATH); + if (fpath != "res://") { + folder_options->add_item(TTR("Rename.."), FOLDER_RENAME); + folder_options->add_item(TTR("Move To.."), FOLDER_MOVE); + folder_options->add_item(TTR("Delete"), FOLDER_REMOVE); + } + folder_options->add_separator(); + folder_options->add_item(TTR("New Folder.."), FOLDER_NEW_FOLDER); + folder_options->add_item(TTR("Show In File Manager"), FOLDER_SHOW_IN_EXPLORER); + } folder_options->set_position(tree->get_global_position() + p_pos); folder_options->popup(); } @@ -1258,11 +1279,11 @@ bool FileSystemDock::can_drop_data_fw(const Point2 &p_point, const Variant &p_da if (drag_data.has("type") && String(drag_data["type"]) == "favorite") { //moving favorite around - TreeItem *ti = tree->get_item_at_pos(p_point); + TreeItem *ti = tree->get_item_at_position(p_point); if (!ti) return false; - int what = tree->get_drop_section_at_pos(p_point); + int what = tree->get_drop_section_at_position(p_point); if (ti == tree->get_root()->get_children()) { return (what == 1); //the parent, first fav @@ -1288,7 +1309,7 @@ bool FileSystemDock::can_drop_data_fw(const Point2 &p_point, const Variant &p_da if (p_from == files) { - int at_pos = files->get_item_at_pos(p_point); + int at_pos = files->get_item_at_position(p_point); if (at_pos != -1) { String dir = files->get_item_metadata(at_pos); @@ -1299,7 +1320,7 @@ bool FileSystemDock::can_drop_data_fw(const Point2 &p_point, const Variant &p_da if (p_from == tree) { - TreeItem *ti = tree->get_item_at_pos(p_point); + TreeItem *ti = tree->get_item_at_position(p_point); if (!ti) return false; String path = ti->get_metadata(0); @@ -1323,7 +1344,7 @@ void FileSystemDock::drop_data_fw(const Point2 &p_point, const Variant &p_data, if (drag_data.has("type") && String(drag_data["type"]) == "favorite") { //moving favorite around - TreeItem *ti = tree->get_item_at_pos(p_point); + TreeItem *ti = tree->get_item_at_position(p_point); if (!ti) return; @@ -1336,7 +1357,7 @@ void FileSystemDock::drop_data_fw(const Point2 &p_point, const Variant &p_data, swap = swap.substr(0, swap.length() - 1); } - int what = tree->get_drop_section_at_pos(p_point); + int what = tree->get_drop_section_at_position(p_point); TreeItem *swap_item = NULL; @@ -1391,7 +1412,7 @@ void FileSystemDock::drop_data_fw(const Point2 &p_point, const Variant &p_data, if (p_from == tree) { - TreeItem *ti = tree->get_item_at_pos(p_point); + TreeItem *ti = tree->get_item_at_position(p_point); if (!ti) return; String path = ti->get_metadata(0); @@ -1406,7 +1427,7 @@ void FileSystemDock::drop_data_fw(const Point2 &p_point, const Variant &p_data, if (p_from == files) { String save_path = path; - int at_pos = files->get_item_at_pos(p_point); + int at_pos = files->get_item_at_position(p_point); if (at_pos != -1) { String to_dir = files->get_item_metadata(at_pos); if (to_dir.ends_with("/")) { @@ -1429,11 +1450,11 @@ void FileSystemDock::drop_data_fw(const Point2 &p_point, const Variant &p_data, if (p_from == files) { - int at_pos = files->get_item_at_pos(p_point); + int at_pos = files->get_item_at_position(p_point); ERR_FAIL_COND(at_pos == -1); to_dir = files->get_item_metadata(at_pos); } else { - TreeItem *ti = tree->get_item_at_pos(p_point); + TreeItem *ti = tree->get_item_at_position(p_point); if (!ti) return; to_dir = ti->get_metadata(0); @@ -1445,115 +1466,79 @@ void FileSystemDock::drop_data_fw(const Point2 &p_point, const Variant &p_data, } Vector<String> fnames = drag_data["files"]; - move_files.clear(); - move_dirs.clear(); - + to_move.clear(); for (int i = 0; i < fnames.size(); i++) { - if (fnames[i].ends_with("/")) - move_dirs.push_back(fnames[i]); - else - move_files.push_back(fnames[i]); + to_move.push_back(FileOrFolder(fnames[i], !fnames[i].ends_with("/"))); } - - _move_operation(to_dir); + _move_operation_confirm(to_dir); } } } void FileSystemDock::_files_list_rmb_select(int p_item, const Vector2 &p_pos) { - Vector<String> filenames; + //Right clicking ".." should clear current selection + if (files->get_item_text(p_item) == "..") { + for (int i = 0; i < files->get_item_count(); i++) { + files->unselect(i); + } + } - bool all_scenes = true; - bool all_can_reimport = true; - Set<String> types; + Vector<String> filenames; + Vector<String> foldernames; + bool all_files = true; + bool all_files_scenes = true; + bool all_folders = true; for (int i = 0; i < files->get_item_count(); i++) { - - if (!files->is_selected(i)) + if (!files->is_selected(i)) { continue; - - String path = files->get_item_metadata(i); - - if (files->get_item_text(i) == "..") { - // no operate on .. - return; } + String path = files->get_item_metadata(i); if (path.ends_with("/")) { - //no operate on dirs - return; - } - - int pos; - - EditorFileSystemDirectory *efsd = EditorFileSystem::get_singleton()->find_file(path, &pos); - - if (efsd) { - + foldernames.push_back(path); + all_files = false; } else { - all_can_reimport = false; + filenames.push_back(path); + all_folders = false; + all_files_scenes &= (EditorFileSystem::get_singleton()->get_file_type(path) == "PackedScene"); } - - filenames.push_back(path); - if (EditorFileSystem::get_singleton()->get_file_type(path) != "PackedScene") - all_scenes = false; } - if (filenames.size() == 0) - return; - file_options->clear(); file_options->set_size(Size2(1, 1)); + if (all_files && filenames.size() > 0) { + file_options->add_item(TTR("Open"), FILE_OPEN); + if (all_files_scenes) { + file_options->add_item(TTR("Instance"), FILE_INSTANCE); + } + file_options->add_separator(); - file_options->add_item(TTR("Open"), FILE_OPEN); - if (all_scenes) { - file_options->add_item(TTR("Instance"), FILE_INSTANCE); - } - - file_options->add_separator(); - - if (filenames.size() == 1) { - file_options->add_item(TTR("Edit Dependencies.."), FILE_DEPENDENCIES); - file_options->add_item(TTR("View Owners.."), FILE_OWNERS); + if (filenames.size() == 1) { + file_options->add_item(TTR("Edit Dependencies.."), FILE_DEPENDENCIES); + file_options->add_item(TTR("View Owners.."), FILE_OWNERS); + file_options->add_separator(); + } + } else if (all_folders && foldernames.size() > 0) { + file_options->add_item(TTR("Open"), FILE_OPEN); file_options->add_separator(); } - if (filenames.size() == 1) { - file_options->add_item(TTR("Copy Path"), FILE_COPY_PATH); - file_options->add_item(TTR("Rename or Move.."), FILE_MOVE); - } else { + int num_items = filenames.size() + foldernames.size(); + if (num_items >= 1) { + if (num_items == 1) { + file_options->add_item(TTR("Copy Path"), FILE_COPY_PATH); + file_options->add_item(TTR("Rename.."), FILE_RENAME); + } file_options->add_item(TTR("Move To.."), FILE_MOVE); + file_options->add_item(TTR("Delete"), FILE_REMOVE); + file_options->add_separator(); } - file_options->add_item(TTR("Delete"), FILE_REMOVE); - - //file_options->add_item(TTR("Info"),FILE_INFO); - - file_options->add_separator(); + file_options->add_item(TTR("New Folder.."), FILE_NEW_FOLDER); file_options->add_item(TTR("Show In File Manager"), FILE_SHOW_IN_EXPLORER); - if (all_can_reimport && types.size() == 1) { //all can reimport and are of the same type - - /* - bool valid=true; - Ref<EditorImportPlugin> rimp = EditorImportExport::get_singleton()->get_import_plugin_by_name(types.front()->get()); - if (rimp.is_valid()) { - - if (filenames.size()>1 && !rimp->can_reimport_multiple_files()) { - valid=false; - } - } else { - valid=false; - } - - if (valid) { - file_options->add_separator(); - file_options->add_item(TTR("Re-Import.."),FILE_REIMPORT); - } - */ - } - file_options->set_position(files->get_global_position() + p_pos); file_options->popup(); } @@ -1638,8 +1623,9 @@ void FileSystemDock::_bind_methods() { ClassDB::bind_method(D_METHOD("_dir_selected"), &FileSystemDock::_dir_selected); ClassDB::bind_method(D_METHOD("_file_option"), &FileSystemDock::_file_option); ClassDB::bind_method(D_METHOD("_folder_option"), &FileSystemDock::_folder_option); - ClassDB::bind_method(D_METHOD("_move_operation"), &FileSystemDock::_move_operation); - ClassDB::bind_method(D_METHOD("_rename_operation"), &FileSystemDock::_rename_operation); + ClassDB::bind_method(D_METHOD("_make_dir_confirm"), &FileSystemDock::_make_dir_confirm); + ClassDB::bind_method(D_METHOD("_move_operation_confirm"), &FileSystemDock::_move_operation_confirm); + ClassDB::bind_method(D_METHOD("_rename_operation_confirm"), &FileSystemDock::_rename_operation_confirm); ClassDB::bind_method(D_METHOD("_search_changed"), &FileSystemDock::_search_changed); @@ -1794,13 +1780,30 @@ FileSystemDock::FileSystemDock(EditorNode *p_editor) { move_dialog = memnew(EditorDirDialog); add_child(move_dialog); - move_dialog->connect("dir_selected", this, "_move_operation"); + move_dialog->connect("dir_selected", this, "_move_operation_confirm"); move_dialog->get_ok()->set_text(TTR("Move")); - rename_dialog = memnew(EditorFileDialog); - rename_dialog->set_mode(EditorFileDialog::MODE_SAVE_FILE); - rename_dialog->connect("file_selected", this, "_rename_operation"); + rename_dialog = memnew(ConfirmationDialog); + VBoxContainer *rename_dialog_vb = memnew(VBoxContainer); + rename_dialog->add_child(rename_dialog_vb); + + rename_dialog_text = memnew(LineEdit); + rename_dialog_vb->add_margin_child(TTR("Name:"), rename_dialog_text); + rename_dialog->get_ok()->set_text(TTR("Rename")); add_child(rename_dialog); + rename_dialog->register_text_enter(rename_dialog_text); + rename_dialog->connect("confirmed", this, "_rename_operation_confirm"); + + make_dir_dialog = memnew(ConfirmationDialog); + make_dir_dialog->set_title(TTR("Create Folder")); + VBoxContainer *make_folder_dialog_vb = memnew(VBoxContainer); + make_dir_dialog->add_child(make_folder_dialog_vb); + + make_dir_dialog_text = memnew(LineEdit); + make_folder_dialog_vb->add_margin_child(TTR("Name:"), make_dir_dialog_text); + add_child(make_dir_dialog); + make_dir_dialog->register_text_enter(make_dir_dialog_text); + make_dir_dialog->connect("confirmed", this, "_make_dir_confirm"); updating_tree = false; initialized = false; diff --git a/editor/filesystem_dock.h b/editor/filesystem_dock.h index aec049ba43..89b250e295 100644 --- a/editor/filesystem_dock.h +++ b/editor/filesystem_dock.h @@ -32,6 +32,7 @@ #include "scene/gui/box_container.h" #include "scene/gui/control.h" +#include "scene/gui/dialogs.h" #include "scene/gui/item_list.h" #include "scene/gui/label.h" #include "scene/gui/menu_button.h" @@ -67,9 +68,11 @@ private: FILE_DEPENDENCIES, FILE_OWNERS, FILE_MOVE, + FILE_RENAME, FILE_REMOVE, FILE_REIMPORT, FILE_INFO, + FILE_NEW_FOLDER, FILE_SHOW_IN_EXPLORER, FILE_COPY_PATH }; @@ -77,7 +80,12 @@ private: enum FolderMenu { FOLDER_EXPAND_ALL, FOLDER_COLLAPSE_ALL, - FOLDER_SHOW_IN_EXPLORER + FOLDER_MOVE, + FOLDER_RENAME, + FOLDER_REMOVE, + FOLDER_NEW_FOLDER, + FOLDER_SHOW_IN_EXPLORER, + FOLDER_COPY_PATH }; VBoxContainer *scanning_vb; @@ -110,10 +118,23 @@ private: DependencyRemoveDialog *remove_dialog; EditorDirDialog *move_dialog; - EditorFileDialog *rename_dialog; + ConfirmationDialog *rename_dialog; + LineEdit *rename_dialog_text; + ConfirmationDialog *make_dir_dialog; + LineEdit *make_dir_dialog_text; - Vector<String> move_dirs; - Vector<String> move_files; + class FileOrFolder { + public: + String path; + bool is_file; + + FileOrFolder() + : path(""), is_file(false) {} + FileOrFolder(const String &p_path, bool p_is_file) + : path(p_path), is_file(p_is_file) {} + }; + FileOrFolder to_rename; + Vector<FileOrFolder> to_move; Vector<String> history; int history_pos; @@ -135,11 +156,15 @@ private: bool _create_tree(TreeItem *p_parent, EditorFileSystemDirectory *p_dir); void _thumbnail_done(const String &p_path, const Ref<Texture> &p_preview, const Variant &p_udata); - void _find_inside_move_files(EditorFileSystemDirectory *efsd, Vector<String> &files); - void _find_remaps(EditorFileSystemDirectory *efsd, Map<String, String> &renames, List<String> &to_remaps); - void _rename_operation(const String &p_to_path); - void _move_operation(const String &p_to_path); + void _get_all_files_in_dir(EditorFileSystemDirectory *efsd, Vector<String> &files) const; + void _find_remaps(EditorFileSystemDirectory *efsd, const Map<String, String> &renames, Vector<String> &to_remaps) const; + void _try_move_item(const FileOrFolder &p_item, const String &p_new_path, Map<String, String> &p_renames) const; + void _update_dependencies_after_move(const Map<String, String> &p_renames) const; + + void _make_dir_confirm(); + void _rename_operation_confirm(); + void _move_operation_confirm(const String &p_to_path); void _file_option(int p_option); void _folder_option(int p_option); diff --git a/editor/icons/icon_2_d.svg b/editor/icons/icon_2_d.svg index b77c330bff..dcc22a579e 100644 --- a/editor/icons/icon_2_d.svg +++ b/editor/icons/icon_2_d.svg @@ -1,5 +1,3 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m3.9844 1.002a1.0001 1.0001 0 0 0 -0.69141 0.29102l-2 2a1 1 0 0 0 0 1.4141 1 1 0 0 0 1.4141 0l0.29297-0.29297v8.5859h8.5859l-0.29297 0.29297a1 1 0 0 0 0 1.4141 1 1 0 0 0 1.4141 0l2-2a1.0001 1.0001 0 0 0 0 -1.4141l-2-2a1 1 0 0 0 -0.7207 -0.29102 1 1 0 0 0 -0.69336 0.29102 1 1 0 0 0 0 1.4141l0.29297 0.29297h-6.5859v-6.5859l0.29297 0.29297a1 1 0 0 0 1.4141 0 1 1 0 0 0 0 -1.4141l-2-2a1.0001 1.0001 0 0 0 -0.72266 -0.29102z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#e0e0e0" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="filter-blend-mode:normal;filter-gaussianBlur-deviation:0;font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> +<path d="m3.9844 1.002a1.0001 1.0001 0 0 0 -0.69141 0.29102l-2 2a1 1 0 0 0 0 1.4141 1 1 0 0 0 1.4141 0l0.29297-0.29297v8.5859h8.5859l-0.29297 0.29297a1 1 0 0 0 0 1.4141 1 1 0 0 0 1.4141 0l2-2a1.0001 1.0001 0 0 0 0 -1.4141l-2-2a1 1 0 0 0 -0.7207 -0.29102 1 1 0 0 0 -0.69336 0.29102 1 1 0 0 0 0 1.4141l0.29297 0.29297h-6.5859v-6.5859l0.29297 0.29297a1 1 0 0 0 1.4141 0 1 1 0 0 0 0 -1.4141l-2-2a1.0001 1.0001 0 0 0 -0.72266 -0.29102z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#e0e0e0" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="filter-blend-mode:normal;filter-gaussianBlur-deviation:0;font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> </svg> diff --git a/editor/icons/icon_3_d.svg b/editor/icons/icon_3_d.svg index 91d3abf60d..2b89b0fbbe 100644 --- a/editor/icons/icon_3_d.svg +++ b/editor/icons/icon_3_d.svg @@ -1,5 +1,3 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m3.9902 1.002a1.0001 1.0001 0 0 0 -0.69141 0.29102l-2 2a1 1 0 0 0 0 1.4141 1 1 0 0 0 1.4141 0l0.29297-0.29297v8.5859h8.5859l-0.29297 0.29297a1 1 0 0 0 0 1.4141 1 1 0 0 0 1.4141 0l2-2a1.0001 1.0001 0 0 0 0 -1.4141l-2-2a1 1 0 0 0 -0.72266 -0.29102 1 1 0 0 0 -0.69141 0.29102 1 1 0 0 0 0 1.4141l0.29297 0.29297h-5.1719l5.5859-5.5859v0.41602a1 1 0 0 0 1 1 1 1 0 0 0 1 -1v-2.8301a1.0001 1.0001 0 0 0 -1 -1h-2.8301a1 1 0 0 0 -1 1 1 1 0 0 0 1 1h0.41602l-5.5859 5.5859v-5.1719l0.29297 0.29297a1 1 0 0 0 1.4141 0 1 1 0 0 0 0 -1.4141l-2-2a1.0001 1.0001 0 0 0 -0.72266 -0.29102z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#e0e0e0" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="filter-blend-mode:normal;filter-gaussianBlur-deviation:0;font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> +<path d="m3.9902 1.002a1.0001 1.0001 0 0 0 -0.69141 0.29102l-2 2a1 1 0 0 0 0 1.4141 1 1 0 0 0 1.4141 0l0.29297-0.29297v8.5859h8.5859l-0.29297 0.29297a1 1 0 0 0 0 1.4141 1 1 0 0 0 1.4141 0l2-2a1.0001 1.0001 0 0 0 0 -1.4141l-2-2a1 1 0 0 0 -0.72266 -0.29102 1 1 0 0 0 -0.69141 0.29102 1 1 0 0 0 0 1.4141l0.29297 0.29297h-5.1719l5.5859-5.5859v0.41602a1 1 0 0 0 1 1 1 1 0 0 0 1 -1v-2.8301a1.0001 1.0001 0 0 0 -1 -1h-2.8301a1 1 0 0 0 -1 1 1 1 0 0 0 1 1h0.41602l-5.5859 5.5859v-5.1719l0.29297 0.29297a1 1 0 0 0 1.4141 0 1 1 0 0 0 0 -1.4141l-2-2a1.0001 1.0001 0 0 0 -0.72266 -0.29102z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#e0e0e0" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="filter-blend-mode:normal;filter-gaussianBlur-deviation:0;font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> </svg> diff --git a/editor/icons/icon_GUI_checked.svg b/editor/icons/icon_GUI_checked.svg index 7ba83d48d5..e5fa67ebf5 100644 --- a/editor/icons/icon_GUI_checked.svg +++ b/editor/icons/icon_GUI_checked.svg @@ -1,5 +1,3 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 15.999999" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m4 2c-1.1046 0-2 0.89543-2 2v8c0 1.1046 0.89543 2 2 2h8c1.1046 0 2-0.89543 2-2v-8c0-1.1046-0.89543-2-2-2h-8zm7.293 2.293l1.4141 1.4141-6.707 6.707-2.707-2.707 1.4141-1.4141 1.293 1.293 5.293-5.293z" fill="#e0e0e0" fill-opacity=".78431"/> -</g> +<path d="m4 2c-1.1046 0-2 0.89543-2 2v8c0 1.1046 0.89543 2 2 2h8c1.1046 0 2-0.89543 2-2v-8c0-1.1046-0.89543-2-2-2h-8zm7.293 2.293l1.4141 1.4141-6.707 6.707-2.707-2.707 1.4141-1.4141 1.293 1.293 5.293-5.293z" fill="#e0e0e0" fill-opacity=".78431"/> </svg> diff --git a/editor/icons/icon_GUI_dropdown.svg b/editor/icons/icon_GUI_dropdown.svg index 22db0fa1a7..4aa800b470 100644 --- a/editor/icons/icon_GUI_dropdown.svg +++ b/editor/icons/icon_GUI_dropdown.svg @@ -1,7 +1,5 @@ <svg width="14" height="14" version="1.1" viewBox="0 0 14 14" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1038.4)" fill="#fff" fill-opacity=".58824" stroke-linejoin="round" stroke-opacity=".39216" stroke-width="2"> -<circle cx="7.5" cy="1040.9" r="1.5"/> -<circle cx="7.5" cy="1045.9" r="1.5"/> -<circle cx="7.5" cy="1050.9" r="1.5"/> +<g transform="translate(0 -1038.4)"> +<path d="m4 1045.4 3 3 3-3" fill="none" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".58824" stroke-width="2"/> </g> </svg> diff --git a/editor/icons/icon_GUI_h_tick.svg b/editor/icons/icon_GUI_h_tick.svg new file mode 100644 index 0000000000..5aa799deb0 --- /dev/null +++ b/editor/icons/icon_GUI_h_tick.svg @@ -0,0 +1,3 @@ +<svg width="4" height="16" version="1.1" viewBox="0 0 4 15.999999" xmlns="http://www.w3.org/2000/svg"> +<circle cx="2" cy="2" r="1" fill="#fff" fill-opacity=".39216"/> +</svg> diff --git a/editor/icons/icon_mini_checkerboard.svg b/editor/icons/icon_GUI_mini_checkerboard.svg index e740113b2d..e740113b2d 100644 --- a/editor/icons/icon_mini_checkerboard.svg +++ b/editor/icons/icon_GUI_mini_checkerboard.svg diff --git a/editor/icons/icon_GUI_mini_tab_menu.svg b/editor/icons/icon_GUI_mini_tab_menu.svg index c54eb26115..8aeb85277c 100644 --- a/editor/icons/icon_GUI_mini_tab_menu.svg +++ b/editor/icons/icon_GUI_mini_tab_menu.svg @@ -1,7 +1,5 @@ <svg width="6" height="16" version="1.1" viewBox="0 0 6 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#fff" fill-opacity=".39216"> -<circle cx="3" cy="1038.4" r="2"/> -<circle cx="3" cy="1044.4" r="2"/> -<circle cx="3" cy="1050.4" r="2"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m3 0a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2zm0 6a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2zm0 6a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2z" fill="#fff" fill-opacity=".39216"/> </g> </svg> diff --git a/editor/icons/icon_GUI_play_button_group.svg b/editor/icons/icon_GUI_play_button_group.svg deleted file mode 100644 index 1d67816b3a..0000000000 --- a/editor/icons/icon_GUI_play_button_group.svg +++ /dev/null @@ -1,5 +0,0 @@ -<svg width="32" height="32" version="1.1" viewBox="0 0 32 31.999998" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1020.4)"> -<circle cx="16" cy="1036.4" r="14" fill-opacity=".19608"/> -</g> -</svg> diff --git a/editor/icons/icon_GUI_scroll_arrow_left.svg b/editor/icons/icon_GUI_scroll_arrow_left.svg new file mode 100644 index 0000000000..364d15ea26 --- /dev/null +++ b/editor/icons/icon_GUI_scroll_arrow_left.svg @@ -0,0 +1,3 @@ +<svg width="16" height="16" version="1.1" viewBox="0 0 16 15.999999" xmlns="http://www.w3.org/2000/svg"> +<path d="m8 2a6 6 0 0 1 6 6 6 6 0 0 1 -6 6 6 6 0 0 1 -6 -6 6 6 0 0 1 6 -6zm1.0137 2a1 1 0 0 0 -0.7207 0.29297l-3 3a1.0001 1.0001 0 0 0 0 1.4141l3 3a1 1 0 0 0 1.4141 0 1 1 0 0 0 0 -1.4141l-2.293-2.293 2.293-2.293a1 1 0 0 0 0 -1.4141 1 1 0 0 0 -0.69336 -0.29297z" fill="#e0e0e0" fill-opacity=".78431" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/> +</svg> diff --git a/editor/icons/icon_GUI_scroll_arrow_right.svg b/editor/icons/icon_GUI_scroll_arrow_right.svg new file mode 100644 index 0000000000..5788aa1b0b --- /dev/null +++ b/editor/icons/icon_GUI_scroll_arrow_right.svg @@ -0,0 +1,3 @@ +<svg width="16" height="16" version="1.1" viewBox="0 0 16 15.999999" xmlns="http://www.w3.org/2000/svg"> +<path d="m8 2a6 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 -6zm-1.0137 2a1 1 0 0 1 0.7207 0.29297l3 3a1.0001 1.0001 0 0 1 0 1.4141l-3 3a1 1 0 0 1 -1.4141 0 1 1 0 0 1 0 -1.4141l2.293-2.293-2.293-2.293a1 1 0 0 1 0 -1.4141 1 1 0 0 1 0.69336 -0.29297z" fill="#e0e0e0" fill-opacity=".78431" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/> +</svg> diff --git a/editor/icons/icon_GUI_tab_menu.svg b/editor/icons/icon_GUI_tab_menu.svg index 3324adf98b..9284e7488b 100644 --- a/editor/icons/icon_GUI_tab_menu.svg +++ b/editor/icons/icon_GUI_tab_menu.svg @@ -1,7 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#fff" fill-opacity=".39216"> -<circle cx="8" cy="1038.4" r="2"/> -<circle cx="8" cy="1044.4" r="2"/> -<circle cx="8" cy="1050.4" r="2"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m8 0a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2zm0 6a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2zm0 6a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2z" fill="#fff" fill-opacity=".39216"/> </g> </svg> diff --git a/editor/icons/icon_GUI_tree_option.svg b/editor/icons/icon_GUI_tree_option.svg new file mode 100644 index 0000000000..4200745a78 --- /dev/null +++ b/editor/icons/icon_GUI_tree_option.svg @@ -0,0 +1,5 @@ +<svg width="14" height="14" version="1.1" viewBox="0 0 14 14" xmlns="http://www.w3.org/2000/svg"> +<g transform="translate(0 -1038.4)"> +<path transform="translate(0 1038.4)" d="m7.5 1a1.5 1.5 0 0 0 -1.5 1.5 1.5 1.5 0 0 0 1.5 1.5 1.5 1.5 0 0 0 1.5 -1.5 1.5 1.5 0 0 0 -1.5 -1.5zm0 5a1.5 1.5 0 0 0 -1.5 1.5 1.5 1.5 0 0 0 1.5 1.5 1.5 1.5 0 0 0 1.5 -1.5 1.5 1.5 0 0 0 -1.5 -1.5zm0 5a1.5 1.5 0 0 0 -1.5 1.5 1.5 1.5 0 0 0 1.5 1.5 1.5 1.5 0 0 0 1.5 -1.5 1.5 1.5 0 0 0 -1.5 -1.5z" fill="#fff" fill-opacity=".58824" stroke-linejoin="round" stroke-opacity=".39216" stroke-width="2"/> +</g> +</svg> diff --git a/editor/icons/icon_GUI_tree_updown.svg b/editor/icons/icon_GUI_tree_updown.svg new file mode 100644 index 0000000000..cdcd6c2441 --- /dev/null +++ b/editor/icons/icon_GUI_tree_updown.svg @@ -0,0 +1,5 @@ +<svg width="14" height="14" version="1.1" viewBox="0 0 14 14" xmlns="http://www.w3.org/2000/svg"> +<g transform="translate(0 -1038.4)"> +<path transform="translate(0 1038.4)" d="m6.9844 1.002a1.0001 1.0001 0 0 0 -0.69141 0.29102l-3 3a1 1 0 0 0 0 1.4141 1 1 0 0 0 1.4141 0l2.293-2.293 2.293 2.293a1 1 0 0 0 1.4141 0 1 1 0 0 0 0 -1.4141l-3-3a1.0001 1.0001 0 0 0 -0.72266 -0.29102zm3 6.998a1 1 0 0 0 -0.69141 0.29297l-2.293 2.293-2.293-2.293a1 1 0 0 0 -0.7207 -0.29102 1 1 0 0 0 -0.69336 0.29102 1 1 0 0 0 0 1.4141l3 3a1.0001 1.0001 0 0 0 1.4141 0l3-3a1 1 0 0 0 0 -1.4141 1 1 0 0 0 -0.72266 -0.29297z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#fff" fill-opacity=".58824" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="filter-blend-mode:normal;filter-gaussianBlur-deviation:0;font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> +</g> +</svg> diff --git a/editor/icons/icon_GUI_unchecked.svg b/editor/icons/icon_GUI_unchecked.svg index 4adf3dd61e..59df40954f 100644 --- a/editor/icons/icon_GUI_unchecked.svg +++ b/editor/icons/icon_GUI_unchecked.svg @@ -1,5 +1,3 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 15.999999" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m4 2a2 2 0 0 0 -2 2v8a2 2 0 0 0 2 2h8a2 2 0 0 0 2 -2v-8a2 2 0 0 0 -2 -2h-8zm0.80078 2h6.3984a0.8 0.8 0 0 1 0.80078 0.80078v6.3984a0.8 0.8 0 0 1 -0.80078 0.80078h-6.3984a0.8 0.8 0 0 1 -0.80078 -0.80078v-6.3984a0.8 0.8 0 0 1 0.80078 -0.80078z" fill="#e0e0e0" fill-opacity=".78431"/> -</g> +<path d="m4 2a2 2 0 0 0 -2 2v8a2 2 0 0 0 2 2h8a2 2 0 0 0 2 -2v-8a2 2 0 0 0 -2 -2h-8zm0.80078 2h6.3984a0.8 0.8 0 0 1 0.80078 0.80078v6.3984a0.8 0.8 0 0 1 -0.80078 0.80078h-6.3984a0.8 0.8 0 0 1 -0.80078 -0.80078v-6.3984a0.8 0.8 0 0 1 0.80078 -0.80078z" fill="#e0e0e0" fill-opacity=".78431"/> </svg> diff --git a/editor/icons/icon_GUI_v_tick.svg b/editor/icons/icon_GUI_v_tick.svg new file mode 100644 index 0000000000..87b5656927 --- /dev/null +++ b/editor/icons/icon_GUI_v_tick.svg @@ -0,0 +1,5 @@ +<svg width="16" height="4" version="1.1" viewBox="0 0 16 3.9999998" xmlns="http://www.w3.org/2000/svg"> +<g transform="translate(0,-12)"> +<circle cx="2" cy="14" r="1" fill="#fff" fill-opacity=".39216"/> +</g> +</svg> diff --git a/editor/icons/icon_a_r_v_r_anchor.svg b/editor/icons/icon_a_r_v_r_anchor.svg new file mode 100644 index 0000000000..1a8398a1be --- /dev/null +++ b/editor/icons/icon_a_r_v_r_anchor.svg @@ -0,0 +1,3 @@ +<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> +<path d="m7 1v2h-2v2h2v3.2656l-2.5527-1.2773c-0.15005-0.075253-0.31662-0.11152-0.48438-0.10547-0.36536 0.013648-0.69415 0.2256-0.85742 0.55273-0.24709 0.49403-0.046823 1.0948 0.44727 1.3418l4.4473 2.2227 4.4473-2.2227c0.49409-0.24697 0.69435-0.84777 0.44726-1.3418-0.24697-0.49409-0.84777-0.69435-1.3418-0.44727l-2.5527 1.2773v-3.2656h2v-2h-2v-2zm-3 11v1c0 0.55228 0.44772 1 1 1-0.55228 0-1 0.44772-1 1v1h1v-1h1v1h1v-1c0-0.55228-0.44772-1-1-1 0.55228 0 1-0.44772 1-1v-1h-1v1h-1v-1zm5 0v4h1v-1h1v1h1v-1c-8.34e-4 -0.17579-0.047991-0.34825-0.13672-0.5 0.088728-0.15175 0.13588-0.32421 0.13672-0.5v-1c0-0.55228-0.44772-1-1-1h-1zm1 1h1v1h-1z" fill="#fc9c9c"/> +</svg> diff --git a/editor/icons/icon_a_r_v_r_camera.svg b/editor/icons/icon_a_r_v_r_camera.svg index a02b4d983c..5bf815bcef 100644 --- a/editor/icons/icon_a_r_v_r_camera.svg +++ b/editor/icons/icon_a_r_v_r_camera.svg @@ -1,3 +1,3 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m2 1c-0.55401 0-1 0.446-1 1v7c0 0.554 0.44599 1 1 1h4l1-2c0.24699-0.494 0.44772-1 1-1s0.75301 0.506 1 1l1 2h4c0.55401 0 1-0.446 1-1v-7c0-0.554-0.44599-1-1-1h-12zm2 3a2 2 0 0 1 2 2 2 2 0 0 1 -2 2 2 2 0 0 1 -2 -2 2 2 0 0 1 2 -2zm8 0a2 2 0 0 1 2 2 2 2 0 0 1 -2 2 2 2 0 0 1 -2 -2 2 2 0 0 1 2 -2zm-8 7v4h2c0.502 4e-4 0.9265-0.37144 0.99219-0.86914 0.0059-0.047 0.0085325-0.094025 0.0078125-0.14062v-2.9902h-1v3h-1v-3h-1zm5 0v4h1v-1h1v1h1v-1c-7.73e-4 -0.1811-0.05073-0.35867-0.14453-0.51367 0.08369-0.1462 0.14453-0.30573 0.14453-0.48633v-1c0-0.5523-0.4485-1.0293-1-1h-2zm1 1h1v1h-1v-1z" fill="#fc9c9c"/> +<path d="m9.5 0a3 3 0 0 0 -2.9883 2.7773 3 3 0 0 0 -2.0117 -0.77734 3 3 0 0 0 -3 3 3 3 0 0 0 2 2.8242v2.1758c0 0.554 0.44599 1 1 1h6c0.55401 0 1-0.446 1-1v-1l3 2v-6l-3 2v-1.7695a3 3 0 0 0 1 -2.2305 3 3 0 0 0 -3 -3zm-5.5 12v1c0 0.55228 0.44772 1 1 1-0.55228 0-1 0.44772-1 1v1h1v-1h1v1h1v-1c0-0.55228-0.44772-1-1-1 0.55228 0 1-0.44772 1-1v-1h-1v1h-1v-1h-1zm5 0v1 3h1v-1h1v1h1v-1c-8.34e-4 -0.17579-0.047991-0.34825-0.13672-0.5 0.088728-0.15175 0.13588-0.32421 0.13672-0.5v-1c0-0.55228-0.44772-1-1-1h-1-1zm1 1h1v1h-1v-1z" fill="#fc9c9c"/> </svg> diff --git a/editor/icons/icon_a_r_v_r_controller.svg b/editor/icons/icon_a_r_v_r_controller.svg new file mode 100644 index 0000000000..a61f99ffdf --- /dev/null +++ b/editor/icons/icon_a_r_v_r_controller.svg @@ -0,0 +1,3 @@ +<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> +<path d="m2 1c-0.554 0-1 0.446-1 1v6c0 0.554 0.446 1 1 1h12c0.554 0 1-0.446 1-1v-6c0-0.554-0.446-1-1-1h-12zm2 1h2v2h2v2h-2v2h-2v-2h-2v-2h2v-2zm9 1c0.55228 0 1 0.44772 1 1s-0.44772 1-1 1-1-0.44772-1-1 0.44772-1 1-1zm-2 2c0.55228 0 1 0.44772 1 1s-0.44772 1-1 1-1-0.44772-1-1 0.44772-1 1-1zm-7 7v1c0 0.55228 0.44772 1 1 1-0.55228 0-1 0.44772-1 1v1h1v-1h1v1h1v-1c0-0.55228-0.44772-1-1-1 0.55228 0 1-0.44772 1-1v-1h-1v1h-1v-1h-1zm5 0v1 3h1v-1h1v1h1v-1c-8.34e-4 -0.17579-0.047991-0.34825-0.13672-0.5 0.088728-0.15175 0.13588-0.32421 0.13672-0.5v-1c0-0.55228-0.44772-1-1-1h-1-1zm1 1h1v1h-1v-1z" fill="#fc9c9c"/> +</svg> diff --git a/editor/icons/icon_a_r_v_r_origin.svg b/editor/icons/icon_a_r_v_r_origin.svg new file mode 100644 index 0000000000..53a149cec6 --- /dev/null +++ b/editor/icons/icon_a_r_v_r_origin.svg @@ -0,0 +1,3 @@ +<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> +<path d="m7 1v3h2v-3h-2zm-4 4v2h3v-2h-3zm5 0c-0.55228 0-1 0.44772-1 1s0.44772 1 1 1 1-0.44772 1-1-0.44772-1-1-1zm2 0v2h3v-2h-3zm-3 3v3h2v-3h-2zm-3 4v1c0 0.55228 0.44772 1 1 1-0.55228 0-1 0.44772-1 1v1h1v-1h1v1h1v-1c0-0.55228-0.44772-1-1-1 0.55228 0 1-0.44772 1-1v-1h-1v1h-1v-1h-1zm5 0v1 3h1v-1h1v1h1v-1c-8.34e-4 -0.17579-0.047991-0.34825-0.13672-0.5 0.088728-0.15175 0.13588-0.32421 0.13672-0.5v-1c0-0.55228-0.44772-1-1-1h-1-1zm1 1h1v1h-1v-1z" fill="#fc9c9c"/> +</svg> diff --git a/editor/icons/icon_accept_dialog.svg b/editor/icons/icon_accept_dialog.svg index 331b88dd74..b65f58b35e 100644 --- a/editor/icons/icon_accept_dialog.svg +++ b/editor/icons/icon_accept_dialog.svg @@ -1,5 +1,3 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m3 1c-1.1046 0-2 0.8954-2 2v1h14v-1c0-1.1046-0.89543-2-2-2zm9 1h1v1h-1zm-11 3v8c0 1.1046 0.89543 2 2 2h10c1.1046 0 2-0.8954 2-2v-8zm9.4746 1.6367 1.4141 1.4141-4.9492 4.9492-2.8281-2.8281 1.4141-1.4141 1.4141 1.4141z" fill="#a5efac"/> -</g> +<path d="m3 1c-1.1046 0-2 0.8954-2 2v1h14v-1c0-1.1046-0.89543-2-2-2zm9 1h1v1h-1zm-11 3v8c0 1.1046 0.89543 2 2 2h10c1.1046 0 2-0.8954 2-2v-8zm9.4746 1.6367 1.4141 1.4141-4.9492 4.9492-2.8281-2.8281 1.4141-1.4141 1.4141 1.4141z" fill="#a5efac"/> </svg> diff --git a/editor/icons/icon_add.svg b/editor/icons/icon_add.svg index 685e6e82e8..3b7e9b8fc1 100644 --- a/editor/icons/icon_add.svg +++ b/editor/icons/icon_add.svg @@ -1,5 +1,3 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m7 1v6h-6v2h6v6h2v-6h6v-2h-6v-6h-2z" fill="#e0e0e0"/> -</g> +<path d="m7 1v6h-6v2h6v6h2v-6h6v-2h-6v-6h-2z" fill="#e0e0e0"/> </svg> diff --git a/editor/icons/icon_animated_sprite.svg b/editor/icons/icon_animated_sprite.svg index fe7fde5a39..6fdf8a7a40 100644 --- a/editor/icons/icon_animated_sprite.svg +++ b/editor/icons/icon_animated_sprite.svg @@ -1,7 +1,7 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#a5b7f3"> -<path transform="translate(0 1036.4)" d="m10.5 0a5.5 5.5 0 0 0 -5.3301 4.1699 5.5 5.5 0 0 1 1.3301 -0.16992 5.5 5.5 0 0 1 5.5 5.5 5.5 5.5 0 0 1 -0.16992 1.3301 5.5 5.5 0 0 0 4.1699 -5.3301 5.5 5.5 0 0 0 -5.5 -5.5z" fill-opacity=".39216"/> -<path transform="translate(0 1036.4)" d="m8.5 2a5.5 5.5 0 0 0 -4.7559 2.748 5.5 5.5 0 0 1 2.7559 -0.74805 5.5 5.5 0 0 1 5.5 5.5 5.5 5.5 0 0 1 -0.74414 2.752 5.5 5.5 0 0 0 2.7441 -4.752 5.5 5.5 0 0 0 -5.5 -5.5z" fill-opacity=".58824"/> -<path transform="translate(0 1036.4)" d="m6.5 4a5.5 5.5 0 0 0 -5.5 5.5 5.5 5.5 0 0 0 5.5 5.5 5.5 5.5 0 0 0 5.5 -5.5 5.5 5.5 0 0 0 -5.5 -5.5zm-2.5 4a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1zm5 0a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1zm-5 3h5a2.5 2 0 0 1 -1.25 1.7324 2.5 2 0 0 1 -2.5 0 2.5 2 0 0 1 -1.25 -1.7324z"/> +<g fill="#a5b7f3"> +<path d="m7 0c-1.108 0-2 0.89199-2 2h7c1.108 0 2 0.89199 2 2v6c1.108 0 2-0.89199 2-2v-6c0-1.108-0.89199-2-2-2z" fill-opacity=".39216"/> +<path d="m5 2c-1.108 0-2 0.89199-2 2h7c1.108 0 2 0.89199 2 2v7c1.108 0 2-0.89199 2-2v-7c0-1.108-0.89199-2-2-2h-7z" fill-opacity=".58824"/> +<path d="m3 4c-1.108 0-2 0.89199-2 2v7c0 1.108 0.89199 2 2 2h7c1.108 0 2-0.89199 2-2v-7c0-1.108-0.89199-2-2-2h-7zm0 4c0.554 0 1 0.446 1 1v1c0 0.554-0.446 1-1 1s-1-0.446-1-1v-1c0-0.554 0.446-1 1-1zm7 0c0.554 0 1 0.446 1 1v1c0 0.554-0.446 1-1 1s-1-0.446-1-1v-1c0-0.554 0.446-1 1-1zm-6 4h5a2.5 2 0 0 1 -1.25 1.7324 2.5 2 0 0 1 -2.5 0 2.5 2 0 0 1 -1.25 -1.7324z"/> </g> </svg> diff --git a/editor/icons/icon_animated_sprite_3d.svg b/editor/icons/icon_animated_sprite_3d.svg index 658ba3e5c2..ccc836832c 100644 --- a/editor/icons/icon_animated_sprite_3d.svg +++ b/editor/icons/icon_animated_sprite_3d.svg @@ -1,7 +1,7 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#fc9c9c"> -<path transform="translate(0 1036.4)" d="m10.5 0a5.5 5.5 0 0 0 -5.3301 4.1699 5.5 5.5 0 0 1 1.3301 -0.16992 5.5 5.5 0 0 1 5.5 5.5 5.5 5.5 0 0 1 -0.16992 1.3301 5.5 5.5 0 0 0 4.1699 -5.3301 5.5 5.5 0 0 0 -5.5 -5.5z" fill-opacity=".39216"/> -<path transform="translate(0 1036.4)" d="m8.5 2a5.5 5.5 0 0 0 -4.7559 2.748 5.5 5.5 0 0 1 2.7559 -0.74805 5.5 5.5 0 0 1 5.5 5.5 5.5 5.5 0 0 1 -0.74414 2.752 5.5 5.5 0 0 0 2.7441 -4.752 5.5 5.5 0 0 0 -5.5 -5.5z" fill-opacity=".58824"/> -<path transform="translate(0 1036.4)" d="m6.5 4a5.5 5.5 0 0 0 -5.5 5.5 5.5 5.5 0 0 0 5.5 5.5 5.5 5.5 0 0 0 5.5 -5.5 5.5 5.5 0 0 0 -5.5 -5.5zm-2.5 4a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1zm5 0a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1zm-5 3h5a2.5 2 0 0 1 -1.25 1.7324 2.5 2 0 0 1 -2.5 0 2.5 2 0 0 1 -1.25 -1.7324z"/> +<g fill="#fc9c9c"> +<path d="m7 0c-1.108 0-2 0.89199-2 2h7c1.108 0 2 0.89199 2 2v6c1.108 0 2-0.89199 2-2v-6c0-1.108-0.89199-2-2-2z" fill-opacity=".39216"/> +<path d="m5 2c-1.108 0-2 0.89199-2 2h7c1.108 0 2 0.89199 2 2v7c1.108 0 2-0.89199 2-2v-7c0-1.108-0.89199-2-2-2h-7z" fill-opacity=".58824"/> +<path d="m3 4c-1.108 0-2 0.89199-2 2v7c0 1.108 0.89199 2 2 2h7c1.108 0 2-0.89199 2-2v-7c0-1.108-0.89199-2-2-2h-7zm0 4c0.554 0 1 0.446 1 1v1c0 0.554-0.446 1-1 1s-1-0.446-1-1v-1c0-0.554 0.446-1 1-1zm7 0c0.554 0 1 0.446 1 1v1c0 0.554-0.446 1-1 1s-1-0.446-1-1v-1c0-0.554 0.446-1 1-1zm-6 4h5a2.5 2 0 0 1 -1.25 1.7324 2.5 2 0 0 1 -2.5 0 2.5 2 0 0 1 -1.25 -1.7324z"/> </g> </svg> diff --git a/editor/icons/icon_audio_bus_bypass.svg b/editor/icons/icon_audio_bus_bypass.svg index 75c1caf7f1..f85c9d17b5 100644 --- a/editor/icons/icon_audio_bus_bypass.svg +++ b/editor/icons/icon_audio_bus_bypass.svg @@ -1,5 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m6.9707 2c-0.25474 0.01-0.49715 0.11122-0.67773 0.29102l-2.707 2.707h-1.5859c-0.55226 1e-4 -0.99994 0.4477-1 1v4c5.52e-5 0.5523 0.44774 0.9999 1 1h1.5859l2.707 2.707c0.63002 0.6296 1.7067 0.18367 1.707-0.70703v-10c-9.424e-4 -0.5631-0.46642-1.0144-1.0293-0.99805zm3.0293 5v1 1h4v-1-1h-4z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#e0e0e0" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> +<path transform="translate(0 1036.4)" d="m5 3c-0.55226 5.52e-5 -0.99994 0.44774-1 1v8c5.52e-5 0.55226 0.44774 0.99994 1 1h4c1.0702 0 2.0645-0.5732 2.5996-1.5 0.5351-0.9268 0.5351-2.0732 0-3-0.40058-0.69381-1.058-1.1892-1.8125-1.3945 0.33452-0.84425 0.27204-1.8062-0.18945-2.6055-0.5351-0.9268-1.5275-1.5-2.5977-1.5zm1 2h1c0.35887 0 0.6858 0.1892 0.86523 0.5s0.17943 0.6892 0 1-0.50637 0.5-0.86523 0.5h-1zm0 4h1 2c0.35887 0 0.68775 0.1892 0.86719 0.5 0.17943 0.3108 0.17943 0.6892 0 1-0.17944 0.3108-0.50832 0.5-0.86719 0.5h-3z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#e0e0e0" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> </g> </svg> diff --git a/editor/icons/icon_audio_bus_mute.svg b/editor/icons/icon_audio_bus_mute.svg index a7d085d535..cacca295eb 100644 --- a/editor/icons/icon_audio_bus_mute.svg +++ b/editor/icons/icon_audio_bus_mute.svg @@ -1,5 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m6.9707 2c-0.25474 0.01-0.49715 0.11122-0.67773 0.29102l-2.707 2.707h-1.5859c-0.55226 1e-4 -0.99994 0.4477-1 1v4c5.52e-5 0.5523 0.44774 0.9999 1 1h1.5859l2.707 2.707c0.63002 0.6296 1.7067 0.18367 1.707-0.70703v-10c-9.424e-4 -0.5631-0.46642-1.0144-1.0293-0.99805zm4.0195 2.9902a1.0001 1.0001 0 0 0 -0.69726 1.7168l1.293 1.293-1.293 1.293a1.0001 1.0001 0 1 0 1.4141 1.4141l1.293-1.293 1.293 1.293a1.0001 1.0001 0 1 0 1.4141 -1.4141l-1.293-1.293 1.293-1.293a1.0001 1.0001 0 0 0 -0.72656 -1.7148 1.0001 1.0001 0 0 0 -0.6875 0.30078l-1.293 1.293-1.293-1.293a1.0001 1.0001 0 0 0 -0.7168 -0.30273z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#e0e0e0" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> +<path d="m4 1048.4v-8l4 5 4-5v8" fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/> </g> </svg> diff --git a/editor/icons/icon_audio_bus_solo.svg b/editor/icons/icon_audio_bus_solo.svg index e84c1cca25..25e26d6038 100644 --- a/editor/icons/icon_audio_bus_solo.svg +++ b/editor/icons/icon_audio_bus_solo.svg @@ -1,5 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m6.9707 2c-0.25474 0.01-0.49715 0.11122-0.67773 0.29102l-2.707 2.707h-1.5859c-0.55226 1e-4 -0.99994 0.4477-1 1v4c5.52e-5 0.5523 0.44774 0.9999 1 1h1.5859l2.707 2.707c0.63002 0.6296 1.7067 0.18367 1.707-0.70703v-10c-9.424e-4 -0.5631-0.46642-1.0144-1.0293-0.99805zm8.0293 2a3 3 0 0 0 -3 3v2a1 1 0 0 1 -1 1h-1v2h1a3 3 0 0 0 3 -3v-2a1 1 0 0 1 1 -1h1v-2h-1z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#e0e0e0" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> +<path transform="translate(0 1036.4)" d="m7 3a1 1 0 0 0 -0.12695 0.0078125c-1.0208 0.043703-1.957 0.60248-2.4707 1.4922-0.5351 0.9268-0.5351 2.0732 0 3 0.5351 0.9268 1.5275 1.5 2.5977 1.5h2c0.35887 0 0.6858 0.1892 0.86523 0.5 0.17943 0.3108 0.17943 0.6892 0 1-0.17943 0.3108-0.50637 0.5-0.86523 0.5h-3a1 1 0 0 0 -1 1 1 1 0 0 0 1 1h3c1.0702 0 2.0626-0.5732 2.5977-1.5s0.5351-2.0732 0-3-1.5275-1.5-2.5977-1.5h-2c-0.35887 0-0.6858-0.1892-0.86523-0.5s-0.17943-0.6892 0-1 0.50637-0.5 0.86523-0.5h3a1 1 0 0 0 1 -1 1 1 0 0 0 -1 -1h-3z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#e0e0e0" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="filter-blend-mode:normal;filter-gaussianBlur-deviation:0;font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> </g> </svg> diff --git a/editor/icons/icon_audio_effect_amplify.svg b/editor/icons/icon_audio_effect_amplify.svg deleted file mode 100644 index 20612bbaf3..0000000000 --- a/editor/icons/icon_audio_effect_amplify.svg +++ /dev/null @@ -1,12 +0,0 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> -<defs> -<linearGradient id="a" x1="9" x2="9" y1="1037.4" y2="1051.4" gradientTransform="translate(0 -1036.4)" gradientUnits="userSpaceOnUse"> -<stop stop-color="#ff8484" offset="0"/> -<stop stop-color="#e1dc7a" offset=".5"/> -<stop stop-color="#84ffb1" offset="1"/> -</linearGradient> -</defs> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m2 1v8h2v-2h2v-2h-2v-2h3v-2zm6 0 2 4-2 4h2l1-2 1 2h2l-2-4 2-4h-2l-1 2-1-2zm-6 9v1h2v-1zm2 1v1h-2v-1h-1v4h1v-2h2v2h1v-4zm2-1v5h1v-4h1v4h1v-4h1v-1zm4 1v4h1v-4zm2-1v5h1v-2h2v-3zm1 1h1v1h-1z" fill="url(#a)"/> -</g> -</svg> diff --git a/editor/icons/icon_audio_stream_gibberish.svg b/editor/icons/icon_audio_stream_gibberish.svg deleted file mode 100644 index 4b503a211a..0000000000 --- a/editor/icons/icon_audio_stream_gibberish.svg +++ /dev/null @@ -1,5 +0,0 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m3 2a2 2 0 0 0 -2 2v5a2 2 0 0 0 2 2h3v3l3-3h4a2 2 0 0 0 2 -2v-5a2 2 0 0 0 -2 -2h-10zm0 4h2v1h-2v-1zm5 0a1 1 0 0 1 1 1v1a1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1v-1a1 1 0 0 1 1 -1zm3 0h2v1h-2v-1z" fill="#e0e0e0" fill-opacity=".99216"/> -</g> -</svg> diff --git a/editor/icons/icon_bool.svg b/editor/icons/icon_bool.svg deleted file mode 100644 index 56fcba5833..0000000000 --- a/editor/icons/icon_bool.svg +++ /dev/null @@ -1,5 +0,0 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m0 4v4 4h2a3 3 0 0 0 2.5 -1.3457 3 3 0 0 0 2.5 1.3457 3 3 0 0 0 2 -0.76758 3 3 0 0 0 2 0.76758 3 3 0 0 0 2.5 -1.3457 3 3 0 0 0 2.5 1.3457v-2a1 1 0 0 1 -1 -1v-5h-2v2.7695a3 3 0 0 0 -2 -0.76953 3 3 0 0 0 -2 0.76758 3 3 0 0 0 -2 -0.76758 3 3 0 0 0 -2.5 1.3457 3 3 0 0 0 -2.5 -1.3457v-2h-2zm2 4a1 1 0 0 1 1 1 1 1 0 0 1 -1 1v-2zm5 0a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1zm4 0a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1z" fill="#cf68ea"/> -</g> -</svg> diff --git a/editor/icons/icon_center_container.svg b/editor/icons/icon_center_container.svg index 446e9e0f9c..fc0abc5c28 100644 --- a/editor/icons/icon_center_container.svg +++ b/editor/icons/icon_center_container.svg @@ -1,5 +1,3 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m3 1c-1.1046 0-2 0.89543-2 2v10c0 1.1046 0.89543 2 2 2h10c1.1046 0 2-0.89543 2-2v-10c0-1.1046-0.89543-2-2-2h-10zm0 2h10v10h-10v-10zm3 1l2 2 2-2h-4zm-2 2v4l2-2-2-2zm8 0l-2 2 2 2v-4zm-4 4l-2 2h4l-2-2z" fill="#a5efac"/> -</g> +<path d="m3 1c-1.1046 0-2 0.89543-2 2v10c0 1.1046 0.89543 2 2 2h10c1.1046 0 2-0.89543 2-2v-10c0-1.1046-0.89543-2-2-2h-10zm0 2h10v10h-10v-10zm3 1l2 2 2-2h-4zm-2 2v4l2-2-2-2zm8 0l-2 2 2 2v-4zm-4 4l-2 2h4l-2-2z" fill="#a5efac"/> </svg> diff --git a/editor/icons/icon_collapse.svg b/editor/icons/icon_collapse.svg index ace258a38a..8d50772b9b 100644 --- a/editor/icons/icon_collapse.svg +++ b/editor/icons/icon_collapse.svg @@ -1,5 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1036.4)"> -<path d="m2 1040.4v3.9375l6 5.0625 6-5.0625v-3.9375h-12z" fill="#e0e0e0"/> +<path d="m3 1044.4 5 4 5-4" fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/> </g> </svg> diff --git a/editor/icons/icon_color.svg b/editor/icons/icon_color.svg deleted file mode 100644 index 7e2d9216f3..0000000000 --- a/editor/icons/icon_color.svg +++ /dev/null @@ -1,24 +0,0 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<defs> -<clipPath id="a"> -<path d="m8 1037.4a7 7 0 0 0 -7 7 7 7 0 0 0 7 7 7 7 0 0 0 7 -7 7 7 0 0 0 -7 -7zm0 3a4 4 0 0 1 4 4 4 4 0 0 1 -4 4 4 4 0 0 1 -4 -4 4 4 0 0 1 4 -4z" fill="#fff"/> -</clipPath> -</defs> -<g transform="translate(0 -1036.4)"> -<circle cx="8" cy="1044.4" r="8" fill="#fff"/> -<g clip-path="url(#a)"> -<path d="m6.1883 1037.6a7 7 0 0 1 3.6235 0l-1.8117 6.7615z" fill="#f00"/> -<path transform="matrix(.86603 .5 -.5 .86603 0 0)" d="m527.3 893.68a7 7 0 0 1 3.6235 0l-1.8117 6.7615z" fill="#ff4d00"/> -<path transform="matrix(.5 .86603 -.86603 .5 0 0)" d="m906.63 508.49a7 7 0 0 1 3.6235 0l-1.8117 6.7615z" fill="#f90"/> -<path transform="rotate(90)" d="m1042.6-14.761a7 7 0 0 1 3.6235 0l-1.8117 6.7615z" fill="#ffca00"/> -<path transform="matrix(-.5 .86603 -.86603 -.5 0 0)" d="m898.63-535.87a7 7 0 0 1 3.6235 0l-1.8117 6.7615z" fill="#ff0"/> -<path transform="matrix(-.86603 .5 -.5 -.86603 0 0)" d="m513.44-915.21a7 7 0 0 1 3.6235 0l-1.8117 6.7615z" fill="#9fff00"/> -<path transform="scale(-1)" d="m-9.8118-1051.1a7 7 0 0 1 3.6235 0l-1.8117 6.7615z" fill="#0f0"/> -<path transform="matrix(-.86603 -.5 .5 -.86603 0 0)" d="m-530.92-907.21a7 7 0 0 1 3.6235 0l-1.8117 6.7615z" fill="#0fa"/> -<path transform="matrix(-.5 -.86603 .86603 -.5 0 0)" d="m-910.26-522.01a7 7 0 0 1 3.6235 0l-1.8117 6.7615z" fill="#00f"/> -<path transform="rotate(-90)" d="m-1046.2 1.2385a7 7 0 0 1 3.6235 1e-7l-1.8118 6.7615z" fill="#9000ff"/> -<path transform="matrix(.5 -.86603 .86603 .5 0 0)" d="m-902.26 522.35a7 7 0 0 1 3.6235 0l-1.8117 6.7615z" fill="#f0e"/> -<path transform="matrix(.86603 -.5 .5 .86603 0 0)" d="m-517.06 901.68a7 7 0 0 1 3.6235 0l-1.8117 6.7615z" fill="#ff009a"/> -</g> -</g> -</svg> diff --git a/editor/icons/icon_color_pick.svg b/editor/icons/icon_color_pick.svg index 893afb4eb4..5c21eeba8b 100644 --- a/editor/icons/icon_color_pick.svg +++ b/editor/icons/icon_color_pick.svg @@ -1,5 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m13.051 0.97852a2 2 0 0 0 -1.4434 0.58594l-1.4141 1.4141-1.416-1.4141-1.4141 1.4141 1.4141 1.4141-7.0703 7.0723-0.35352 1.7676-0.35352 1.7676 1.7676-0.35352 1.7676-0.35352 7.0723-7.0703 1.4141 1.4141 1.4141-1.4141-1.4141-1.416 1.4141-1.4141a2 2 0 0 0 0 -2.8281 2 2 0 0 0 -1.3848 -0.58594zm-3.5664 4.1211l1.416 1.416-7.0723 7.0703-0.70703-0.70703-0.70703-0.70703 7.0703-7.0723z" fill="#e0e0e0" fill-opacity=".99608"/> +<path transform="translate(0 1036.4)" d="m8 1c-1.108 0-2 0.892-2 2v2h-1v2h1v5a2 2 0 0 0 1 1.7285v1.2715h2v-1.2695a2 2 0 0 0 1 -1.7305v-5h1v-2h-1v-2c0-1.108-0.892-2-2-2zm-1 6h2v5a1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1v-5z" fill="#e0e0e0"/> </g> </svg> diff --git a/editor/icons/icon_color_picker.svg b/editor/icons/icon_color_picker.svg index 272dfeca48..55c55fe205 100644 --- a/editor/icons/icon_color_picker.svg +++ b/editor/icons/icon_color_picker.svg @@ -1,5 +1,3 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m13.051 0.97852a2 2 0 0 0 -1.4434 0.58594l-1.4141 1.4141-1.416-1.4141-1.4141 1.4141 1.4141 1.4141-7.0703 7.0723-0.35352 1.7676-0.35352 1.7676 1.7676-0.35352 1.7676-0.35352 7.0723-7.0703 1.4141 1.4141 1.4141-1.4141-1.4141-1.416 1.4141-1.4141a2 2 0 0 0 0 -2.8281 2 2 0 0 0 -1.3848 -0.58594zm-3.5664 4.1211l1.416 1.416-7.0723 7.0703-0.70703-0.70703-0.70703-0.70703 7.0703-7.0723z" fill="#a5efac"/> -</g> +<path d="m8 1c-1.108 0-2 0.892-2 2v2h-1v2h1v5a2 2 0 0 0 1 1.7285v1.2715h2v-1.2695a2 2 0 0 0 1 -1.7305v-5h1v-2h-1v-2c0-1.108-0.892-2-2-2zm-1 6h2v5a1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1v-5z" fill="#a5efac"/> </svg> diff --git a/editor/icons/icon_color_picker_button.svg b/editor/icons/icon_color_picker_button.svg index 5d734a5b20..d8de02b298 100644 --- a/editor/icons/icon_color_picker_button.svg +++ b/editor/icons/icon_color_picker_button.svg @@ -1,7 +1,3 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m13.051 0.97852a2 2 0 0 0 -1.4434 0.58594l-1.4141 1.4141-1.416-1.4141-1.4141 1.4141 1.4141 1.4141-7.0703 7.0723-0.35352 1.7676-0.35352 1.7676 1.7676-0.35352 1.7676-0.35352 7.0723-7.0703 1.4141 1.4141 1.4141-1.4141-1.4141-1.416 1.4141-1.4141a2 2 0 0 0 0 -2.8281 2 2 0 0 0 -1.3848 -0.58594zm-3.5664 4.1211 1.416 1.416-7.0723 7.0703-0.70703-0.70703-0.70703-0.70703 7.0703-7.0723z" fill="#a5efac"/> -<path transform="translate(0 1036.4)" d="m1 3v6.3438l4.9492-4.9512-1.3926-1.3926h-3.5566zm14 6.4863l-1.5137 1.5137h-0.92969l-0.94922-0.94922-2.9492 2.9492h6.3418v-3.5137z" fill="#a5efac"/> -<path transform="translate(0 1036.4)" d="m10.658 11l-2 2h6.3418v-2h-1.5137-0.92969-1.8984z" fill-opacity=".078431"/> -</g> +<path d="m13 1c-1.108 0-2 0.892-2 2v2h-1v2h1v5a2 2 0 0 0 1 1.7285v1.2715h2v-1.2695a2 2 0 0 0 1 -1.7305v-5h1v-2h-1v-2c0-1.108-0.892-2-2-2zm-9 1v3.1328l-1.4453-0.96484-1.1094 1.6641 3 2c0.3359 0.2239 0.77347 0.2239 1.1094 0l3-2-1.1094-1.6641-1.4453 0.96484v-3.1328h-2zm8 5h2v5a1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1v-5zm-8.5 3c-0.831 0-1.5 0.669-1.5 1.5v0.5 1h-1v2h8v-2h-1v-1-0.5c0-0.831-0.669-1.5-1.5-1.5h-3z" fill="#a5efac"/> </svg> diff --git a/editor/icons/icon_connect.svg b/editor/icons/icon_connect.svg deleted file mode 100644 index 43ec84646c..0000000000 --- a/editor/icons/icon_connect.svg +++ /dev/null @@ -1,7 +0,0 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<circle cx="4" cy="1048.4" r="2" fill="#e0e0e0"/> -<path d="m4 1043.4a5 5 0 0 1 5 5" fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/> -<path d="m4 1039.4a9 9 0 0 1 9 9" fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/> -</g> -</svg> diff --git a/editor/icons/icon_connection_and_groups.svg b/editor/icons/icon_connection_and_groups.svg deleted file mode 100644 index 67a73f02b3..0000000000 --- a/editor/icons/icon_connection_and_groups.svg +++ /dev/null @@ -1,5 +0,0 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m2 0v1 5 1h12v-1-6h-11-1zm1 1h10v5h-10v-5zm2.5 1a1.5 1.5 0 0 0 -1.5 1.5 1.5 1.5 0 0 0 1.5 1.5 1.5 1.5 0 0 0 1.5 -1.5 1.5 1.5 0 0 0 -1.5 -1.5zm5 0a1.5 1.5 0 0 0 -1.5 1.5 1.5 1.5 0 0 0 1.5 1.5 1.5 1.5 0 0 0 1.5 -1.5 1.5 1.5 0 0 0 -1.5 -1.5zm-0.5 7a2 2 0 0 0 -2 2v1h-6v1h6v1a2 2 0 0 0 2 2h2v-1h2v-1h-2v-3h2v-1h-2v-1h-2z" fill="#e0e0e0"/> -</g> -</svg> diff --git a/editor/icons/icon_control_layout.svg b/editor/icons/icon_control_layout.svg new file mode 100644 index 0000000000..4bf60cf751 --- /dev/null +++ b/editor/icons/icon_control_layout.svg @@ -0,0 +1,3 @@ +<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> +<path d="m1 1v14h14v-14zm2 2h3v3h-3zm5 0h5v3h-5zm-5 5h3v5h-3zm5 0h5v5h-5z" fill="#a5efac"/> +</svg> diff --git a/editor/icons/icon_create_new_scene_from.svg b/editor/icons/icon_create_new_scene_from.svg index b41fd38e70..1b1771dae0 100644 --- a/editor/icons/icon_create_new_scene_from.svg +++ b/editor/icons/icon_create_new_scene_from.svg @@ -1,7 +1,6 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m1 7v6c0 1.1046 0.89543 2 2 2h7v-1h-2v-4h2v-2h4v2h1v-3z" fill="#e0e0e0"/> -<path d="m0.71129 1040.4 0.28871 1.9791l2.2438-0.3273-0.81826-1.9018-1.7143 0.25zm3.6933-0.5387 0.81826 1.9018 1.9791-0.2887-0.81826-1.9018-1.9791 0.2887zm3.9581-0.5775 0.81826 1.9018 1.9791-0.2887-0.81826-1.9018-1.9791 0.2887zm3.9581-0.5774 0.81826 1.9018 1.7143-0.25-0.28871-1.9791-2.2438 0.3273z" fill="#e0e0e0"/> +<path transform="translate(0 1036.4)" d="m14.564 2l-2.2441 0.32812 0.81836 1.9004 1.7148-0.25-0.28906-1.9785zm-4.2227 0.61523l-1.9785 0.28906 0.81836 1.9023 1.9785-0.28906-0.81836-1.9023zm-3.959 0.57812l-1.9785 0.28906 0.81836 1.9023 1.9785-0.28906-0.81836-1.9023zm-3.957 0.57812l-1.7148 0.25 0.28906 1.9785 2.2441-0.32812-0.81836-1.9004zm-1.4258 3.2285v6c0 1.1046 0.89543 2 2 2h7v-1h-2v-4h2v-2h4v2h1v-3h-14z" fill="#e0e0e0"/> <circle cx="-14" cy="1047.4" r="0" fill="#e0e0e0"/> <path d="m13 1049.4h2v-2h-2v-2h-2v2h-2v2h2v2h2z" fill="#84ffb1" fill-rule="evenodd"/> </g> diff --git a/editor/icons/icon_cube_map.svg b/editor/icons/icon_cube_map.svg index 8afc2e42e9..d814998500 100644 --- a/editor/icons/icon_cube_map.svg +++ b/editor/icons/icon_cube_map.svg @@ -1,10 +1,7 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1036.4)"> -<rect y="1042.4" width="4" height="4" fill="#84ffb1"/> -<rect x="4" y="1042.4" width="4" height="4" fill="#ff8484"/> -<rect x="8" y="1042.4" width="4" height="4" fill="#84ffb1"/> -<rect x="12" y="1042.4" width="4" height="4" fill="#ff8484"/> -<rect x="4" y="1038.4" width="4" height="4" fill="#84c2ff"/> -<rect x="4" y="1046.4" width="4" height="4" fill="#84c2ff"/> +<path transform="translate(0 1036.4)" d="m0 6v4h4v-4h-4zm8 0v4h4v-4h-4z" fill="#84ffb1"/> +<path transform="translate(0 1036.4)" d="m4 6v4h4v-4h-4zm8 0v4h4v-4h-4z" fill="#ff8484"/> +<path transform="translate(0 1036.4)" d="m4 2v4h4v-4h-4zm0 8v4h4v-4h-4z" fill="#84c2ff"/> </g> </svg> diff --git a/editor/icons/icon_curve_close.svg b/editor/icons/icon_curve_close.svg index 415c046fd3..561ef33cb2 100644 --- a/editor/icons/icon_curve_close.svg +++ b/editor/icons/icon_curve_close.svg @@ -1,11 +1,7 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1036.4)"> -<path d="m5 1049.4c-2-9-1-10 8-8" fill="none" stroke="#e0e0e0"/> -<circle cx="5" cy="1041.4" r="2" fill="#f5f5f5"/> -<rect x="8" y="1044.4" width="2" height="2" fill="#84c2ff"/> -<circle cx="5" cy="1049.4" r="2" fill="#f5f5f5"/> -<circle cx="13" cy="1041.4" r="2" fill="#f5f5f5"/> -<rect x="6" y="1046.4" width="2" height="2" fill="#84c2ff"/> -<rect x="10" y="1042.4" width="2" height="2" fill="#84c2ff"/> +<path d="m5 1049.4c-2-9-1-10 8-8" fill="none" stroke="#f5f5f5" stroke-opacity=".39216" stroke-width="2"/> +<path transform="translate(0 1036.4)" d="m5 3a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2zm8 0a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2zm-8 8a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2z" fill="#f5f5f5"/> +<path transform="translate(0 1036.4)" d="m10 6v2h2v-2h-2zm0 2h-2v2h2v-2zm-2 2h-2v2h2v-2z" fill="#84c2ff"/> </g> </svg> diff --git a/editor/icons/icon_curve_create.svg b/editor/icons/icon_curve_create.svg index c26361bc9f..1181111a0c 100644 --- a/editor/icons/icon_curve_create.svg +++ b/editor/icons/icon_curve_create.svg @@ -1,10 +1,7 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1036.4)"> -<path d="m5 1049.4c-2-9-1-10 8-8" fill="none" stroke="#e0e0e0"/> -<circle cx="5" cy="1041.4" r="2" fill="#84ffb1"/> -<circle cx="5" cy="1049.4" r="2" fill="#f5f5f5"/> -<circle cx="13" cy="1041.4" r="2" fill="#f5f5f5"/> -<rect x="8" y="1047.4" width="8" height="2" fill="#84ffb1"/> -<rect transform="rotate(90)" x="1044.4" y="-13" width="8" height="2" fill="#84ffb1"/> +<path d="m5 1049.4c-2-9-1-10 8-8" fill="none" stroke="#f5f5f5" stroke-opacity=".39216" stroke-width="2"/> +<path transform="translate(0 1036.4)" d="m5 3a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2zm6 5v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2z" fill="#84ffb1"/> +<path transform="translate(0 1036.4)" d="m13 3a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2zm-8 8a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2z" fill="#f5f5f5"/> </g> </svg> diff --git a/editor/icons/icon_curve_curve.svg b/editor/icons/icon_curve_curve.svg index 81c14ec063..51597d613a 100644 --- a/editor/icons/icon_curve_curve.svg +++ b/editor/icons/icon_curve_curve.svg @@ -1,9 +1,7 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1036.4)"> -<path d="m5 1049.4c-2-9-1-10 8-8" fill="none" stroke="#e0e0e0"/> -<circle cx="5" cy="1041.4" r="2" fill="#84c2ff"/> -<circle cx="5" cy="1049.4" r="2" fill="#f5f5f5"/> -<circle cx="13" cy="1041.4" r="2" fill="#f5f5f5"/> -<path d="m1 1045.4 8-8" fill="#84c2ff" fill-rule="evenodd" stroke="#84c2ff" stroke-width="1px"/> +<path d="m5 1049.4c-2-9-1-10 8-8" fill="none" stroke="#f5f5f5" stroke-opacity=".39216" stroke-width="2"/> +<path transform="translate(0 1036.4)" d="m8.4688 0.4707l-2.6875 2.6875h-0.0019531a2 2 0 0 0 -0.7793 -0.1582 2 2 0 0 0 -2 2 2 2 0 0 0 0.16016 0.7793l-2.6914 2.6914 1.0625 1.0605 2.6895-2.6895a2 2 0 0 0 0.7793 0.1582 2 2 0 0 0 2 -2 2 2 0 0 0 -0.16016 -0.77734l2.6914-2.6914-1.0625-1.0605z" fill="#84c2ff"/> +<path transform="translate(0 1036.4)" d="m13 3a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2zm-8 8a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2z" fill="#f5f5f5"/> </g> </svg> diff --git a/editor/icons/icon_curve_delete.svg b/editor/icons/icon_curve_delete.svg index b24993839b..901a08e984 100644 --- a/editor/icons/icon_curve_delete.svg +++ b/editor/icons/icon_curve_delete.svg @@ -1,9 +1,7 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1036.4)"> -<path d="m5 1049.4c-2-9-1-10 8-8" fill="none" stroke="#e0e0e0"/> -<circle cx="5" cy="1041.4" r="2" fill="#ff8484"/> -<circle cx="5" cy="1049.4" r="2" fill="#f5f5f5"/> -<circle cx="13" cy="1041.4" r="2" fill="#f5f5f5"/> -<path d="m8.4645 1046.2 2.1213 2.1213-2.1213 2.1213 1.4142 1.4142l2.1213-2.1213 2.1213 2.1213 1.4142-1.4142-2.1213-2.1213 2.1213-2.1213-1.4142-1.4142-2.1213 2.1213-2.1213-2.1213-1.4142 1.4142z" fill="#ff8484"/> +<path d="m5 1049.4c-2-9-1-10 8-8" fill="none" stroke="#f5f5f5" stroke-opacity=".39216" stroke-width="2"/> +<path d="m5 1039.4a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2zm4.8789 5.4648-1.4141 1.4141 2.1211 2.1211-2.1211 2.1211 1.4141 1.4141l2.1211-2.1211 2.1211 2.1211 1.4141-1.4141-2.1211-2.1211 2.1211-2.1211-1.4141-1.4141-2.1211 2.1211z" fill="#ff8484"/> +<path d="m13 1039.4a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2zm-8 8a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2z" fill="#f5f5f5"/> </g> </svg> diff --git a/editor/icons/icon_curve_edit.svg b/editor/icons/icon_curve_edit.svg index d9f89bf15d..8f09ca6793 100644 --- a/editor/icons/icon_curve_edit.svg +++ b/editor/icons/icon_curve_edit.svg @@ -1,9 +1,7 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1036.4)"> -<path d="m5 1049.4c-2-9-1-10 8-8" fill="none" stroke="#e0e0e0"/> -<circle cx="5" cy="1041.4" r="2" fill="#84c2ff"/> -<circle cx="5" cy="1049.4" r="2" fill="#f5f5f5"/> -<circle cx="13" cy="1041.4" r="2" fill="#f5f5f5"/> -<path d="m16 1047.7-8-3.291 3.291 8 0.9471-2.8201 1.8836 1.8835 0.9418-0.9418-1.8836-1.8835z" fill="#84c2ff"/> +<path d="m5 1049.4c-2-9-1-10 8-8" fill="none" stroke="#f5f5f5" stroke-opacity=".39216" stroke-width="2"/> +<path transform="translate(0 1036.4)" d="m5 3a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2zm3 5l3.291 8 0.94726-2.8203 1.8828 1.8828 0.94336-0.94141-1.8848-1.8828 2.8203-0.94726-8-3.291z" fill="#84c2ff"/> +<path transform="translate(0 1036.4)" d="m13 3a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2zm-8 8a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2z" fill="#f5f5f5"/> </g> </svg> diff --git a/editor/icons/icon_debug.svg b/editor/icons/icon_debug.svg index bf6e37f4b4..dfab5eb28b 100644 --- a/editor/icons/icon_debug.svg +++ b/editor/icons/icon_debug.svg @@ -1,14 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1036.4)"> -<path transform="scale(1,-1)" d="m10.828-1039.5a4 4 0 0 1 -2.8284 1.1716 4 4 0 0 1 -2.8284 -1.1716" fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/> -<ellipse cx="8" cy="1047.4" rx="3.6445" ry="1.6348" fill="none" stroke-width="0"/> -<circle cx="8" cy="1047.4" r="4" fill="#e0e0e0" stroke-width="0"/> -<path d="m5 1047.4h-3" fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-width="2"/> -<path d="m10 1047.4h4" fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-width="2"/> -<path d="m6 1045.4c-2 0-3-2-3-3" fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-width="2"/> -<path d="m10 1045.4c2 0 3-2 3-3" fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-width="2"/> -<path d="m6 1049.4c-1 0-2 1-3 2" fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-width="2"/> -<path d="m10 1049.4c1 0 2 1 3 2" fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-width="2"/> -<circle cx="8" cy="1043.4" r="2" fill="#e0e0e0"/> +<path transform="translate(0 1036.4)" d="m8 1c-1.3257 0-2.5977 0.52744-3.5352 1.4648a1 1 0 0 0 0 1.4141 1 1 0 0 0 0.69141 0.29297 1 1 0 0 0 0.72266 -0.29297c0.56288-0.5628 1.3251-0.87891 2.1211-0.87891s1.5582 0.31611 2.1211 0.87891a1 1 0 0 0 1.4141 0 1 1 0 0 0 0 -1.4141c-0.93741-0.9374-2.2095-1.4648-3.5352-1.4648zm-5 3.9961a1 1 0 0 0 -1 1c0 0.8334 0.32654 1.6973 0.96875 2.5 0.33016 0.41272 0.7705 0.79575 1.3008 1.0723a4 4 0 0 0 -0.13672 0.43164h-2.1328a1 1 0 0 0 -1 1 1 1 0 0 0 1 1h2.1309a4 4 0 0 0 0.17969 0.53711c-0.14177 0.089422-0.27868 0.1846-0.41016 0.2832-0.58533 0.439-1.1074 0.96875-1.6074 1.4688a1 1 0 0 0 0 1.4141 1 1 0 0 0 1.4141 0c0.5-0.5 0.97791-0.9722 1.3926-1.2832 0.1693-0.12693 0.3098-0.20282 0.44336-0.26953a4 4 0 0 0 2.457 0.84961 4 4 0 0 0 2.459 -0.84766c0.13307 0.066645 0.27298 0.14126 0.44141 0.26758 0.41467 0.311 0.89258 0.7832 1.3926 1.2832a1 1 0 0 0 1.4141 0 1 1 0 0 0 0 -1.4141c-0.5-0.5-1.0221-1.0297-1.6074-1.4688-0.13076-0.098068-0.26727-0.19224-0.4082-0.28125a4 4 0 0 0 0.17578 -0.53906h2.1328a1 1 0 0 0 1 -1 1 1 0 0 0 -1 -1h-2.1309a4 4 0 0 0 -0.13477 -0.43359c0.52857-0.27637 0.96751-0.65858 1.2969-1.0703 0.64221-0.8027 0.96875-1.6666 0.96875-2.5a1 1 0 0 0 -1 -1 1 1 0 0 0 -1 1c0 0.1667-0.17346 0.8028-0.53125 1.25-0.25089 0.31365-0.54884 0.54907-0.93164 0.66602a4 4 0 0 0 -0.60352 -0.41211 2 2 0 0 0 0.066406 -0.5 2 2 0 0 0 -2 -2 2 2 0 0 0 -2 2 2 2 0 0 0 0.066406 0.50391 4 4 0 0 0 -0.60352 0.4082c-0.3828-0.11694-0.68075-0.35236-0.93164-0.66602-0.35779-0.4472-0.53125-1.0833-0.53125-1.25a1 1 0 0 0 -1 -1z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#e0e0e0" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="filter-blend-mode:normal;filter-gaussianBlur-deviation:0;font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> </g> </svg> diff --git a/editor/icons/icon_debug_continue.svg b/editor/icons/icon_debug_continue.svg index 49289d1b28..d38bde9ea6 100644 --- a/editor/icons/icon_debug_continue.svg +++ b/editor/icons/icon_debug_continue.svg @@ -1,9 +1,6 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1036.4)"> -<rect x="5" y="1043.4" width="6" height="2" fill="#ff8484"/> -<g transform="matrix(-.71429 0 0 .88889 2.4999 121.82)" fill="#ff8484"> -<path transform="matrix(0 1.4412 1.2943 0 1331.1 1030.7)" d="m8.1225-1036.6h-3.1225-3.1225l1.5612-2.7042 1.5612-2.7041 1.5612 2.7041z" fill="#ff8484"/> -</g> +<path transform="translate(0 1036.4)" d="m10 4v3h-5v2h5v3l2.5-2 2.5-2-2.5-2-2.5-2z" fill="#ff8484"/> <circle cx="4" cy="1044.4" r="3" fill="#e0e0e0"/> </g> </svg> diff --git a/editor/icons/icon_debug_next.svg b/editor/icons/icon_debug_next.svg index 6251e174e7..e641fb9dbe 100644 --- a/editor/icons/icon_debug_next.svg +++ b/editor/icons/icon_debug_next.svg @@ -1,12 +1,6 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1036.4)"> -<rect transform="rotate(90)" x="1037.4" y="-5" width="10" height="2" fill="#ff8484"/> -<g transform="matrix(0 -.57144 -.66666 0 695.91 1041.4)" fill="#ff8484"> -<path transform="matrix(0 1.4412 1.2943 0 1331.1 1030.7)" d="m8.1225-1036.6h-3.1225-3.1225l1.5612-2.7042 1.5612-2.7041 1.5612 2.7041z" fill="#ff8484"/> -</g> -<rect x="7" y="1037.4" width="8" height="2" fill="#e0e0e0"/> -<rect x="9" y="1041.4" width="6" height="2" fill="#e0e0e0"/> -<rect x="9" y="1045.4" width="6" height="2" fill="#e0e0e0"/> -<rect x="7" y="1049.4" width="8" height="2" fill="#e0e0e0"/> +<path transform="translate(0 1036.4)" d="m3 1v10h-2l1.5 2 1.5 2 1.5-2 1.5-2h-2v-10h-2z" fill="#ff8484"/> +<path transform="translate(0 1036.4)" d="m7 1v2h8v-2h-8zm2 4v2h6v-2h-6zm0 4v2h6v-2h-6zm-2 4v2h8v-2h-8z" fill="#e0e0e0"/> </g> </svg> diff --git a/editor/icons/icon_debug_step.svg b/editor/icons/icon_debug_step.svg index 3a98803fc3..0a1f878a78 100644 --- a/editor/icons/icon_debug_step.svg +++ b/editor/icons/icon_debug_step.svg @@ -1,13 +1,6 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1036.4)"> -<rect transform="rotate(90)" x="1037.4" y="-3" width="10" height="2" fill="#ff8484"/> -<g transform="matrix(-.57144 0 0 .66666 -2.0001 354.46)" fill="#ff8484"> -<path transform="matrix(0 1.4412 1.2943 0 1331.1 1030.7)" d="m8.1225-1036.6h-3.1225-3.1225l1.5612-2.7042 1.5612-2.7041 1.5612 2.7041z" fill="#ff8484"/> -</g> -<rect x="7" y="1037.4" width="8" height="2" fill="#e0e0e0"/> -<rect x="9" y="1041.4" width="6" height="2" fill="#e0e0e0"/> -<rect x="9" y="1045.4" width="6" height="2" fill="#e0e0e0"/> -<rect x="7" y="1049.4" width="8" height="2" fill="#e0e0e0"/> -<rect transform="rotate(90)" x="1045.4" y="-4" width="2" height="3" fill="#ff8484"/> +<path transform="translate(0 1036.4)" d="m1 1v8 2h2 1v2l2-1.5 2-1.5-2-1.5-2-1.5v2h-1v-8h-2z" fill="#ff8484"/> +<path transform="translate(0 1036.4)" d="m7 1v2h8v-2h-8zm2 4v2h6v-2h-6zm0 4v2h6v-2h-6zm-2 4v2h8v-2h-8z" fill="#e0e0e0"/> </g> </svg> diff --git a/editor/icons/icon_dependency_changed.svg b/editor/icons/icon_dependency_changed.svg deleted file mode 100644 index 6d7787e769..0000000000 --- a/editor/icons/icon_dependency_changed.svg +++ /dev/null @@ -1,6 +0,0 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m8 1a7 7 0 0 0 -7 7 7 7 0 0 0 7 7 7 7 0 0 0 7 -7 7 7 0 0 0 -7 -7zm-1 2h2v7h-2v-7zm0 8h2v2h-2v-2z" fill="#ff8484"/> -<path transform="translate(0 1036.4)" d="m8 1a7 7 0 0 0 -7 7 7 7 0 0 0 7 7 7 7 0 0 0 7 -7 7 7 0 0 0 -7 -7zm-1 2h2v7h-2v-7zm0 8h2v2h-2v-2z" fill-opacity=".23529"/> -</g> -</svg> diff --git a/editor/icons/icon_dependency_changed_hl.svg b/editor/icons/icon_dependency_changed_hl.svg deleted file mode 100644 index fa0f3919ea..0000000000 --- a/editor/icons/icon_dependency_changed_hl.svg +++ /dev/null @@ -1,5 +0,0 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m8 1a7 7 0 0 0 -7 7 7 7 0 0 0 7 7 7 7 0 0 0 7 -7 7 7 0 0 0 -7 -7zm-1 2h2v7h-2v-7zm0 8h2v2h-2v-2z" fill="#ff8484"/> -</g> -</svg> diff --git a/editor/icons/icon_dependency_local_changed.svg b/editor/icons/icon_dependency_local_changed.svg deleted file mode 100644 index 5fef88844a..0000000000 --- a/editor/icons/icon_dependency_local_changed.svg +++ /dev/null @@ -1,6 +0,0 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m8 1a7 7 0 0 0 -7 7 7 7 0 0 0 7 7 7 7 0 0 0 7 -7 7 7 0 0 0 -7 -7zm0 2a4 4 0 0 1 4 4 4 4 0 0 1 -3 3.8672v0.13281h-2v-2h1a2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2 2 2 0 0 0 -2 2h-2a4 4 0 0 1 4 -4zm-1 9h2v2h-2v-2z" fill="#ffd684"/> -<path transform="translate(0 1036.4)" d="m8 1a7 7 0 0 0 -7 7 7 7 0 0 0 7 7 7 7 0 0 0 7 -7 7 7 0 0 0 -7 -7zm0 2a4 4 0 0 1 4 4 4 4 0 0 1 -3 3.8672v0.13281h-2v-2h1a2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2 2 2 0 0 0 -2 2h-2a4 4 0 0 1 4 -4zm-1 9h2v2h-2v-2z" fill-opacity=".23529"/> -</g> -</svg> diff --git a/editor/icons/icon_dependency_local_changed_hl.svg b/editor/icons/icon_dependency_local_changed_hl.svg deleted file mode 100644 index b9ab80fecb..0000000000 --- a/editor/icons/icon_dependency_local_changed_hl.svg +++ /dev/null @@ -1,5 +0,0 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m8 1a7 7 0 0 0 -7 7 7 7 0 0 0 7 7 7 7 0 0 0 7 -7 7 7 0 0 0 -7 -7zm0 2a4 4 0 0 1 4 4 4 4 0 0 1 -3 3.8672v0.13281h-2v-2h1a2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2 2 2 0 0 0 -2 2h-2a4 4 0 0 1 4 -4zm-1 9h2v2h-2v-2z" fill="#ffd684"/> -</g> -</svg> diff --git a/editor/icons/icon_dependency_ok.svg b/editor/icons/icon_dependency_ok.svg deleted file mode 100644 index 91cc398029..0000000000 --- a/editor/icons/icon_dependency_ok.svg +++ /dev/null @@ -1,6 +0,0 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m8 1a7 7 0 0 0 -7 7 7 7 0 0 0 7 7 7 7 0 0 0 7 -7 7 7 0 0 0 -7 -7zm3.1816 3.9297l1.4141 1.4141-4.2422 4.2422-0.70703 0.70703-0.70703 0.70703-3.5352-3.5352 1.4141-1.4141 2.1211 2.1211 4.2422-4.2422z" fill="#84ffb1"/> -<path transform="translate(0 1036.4)" d="m8 1a7 7 0 0 0 -7 7 7 7 0 0 0 7 7 7 7 0 0 0 7 -7 7 7 0 0 0 -7 -7zm3.1816 3.9297l1.4141 1.4141-4.2422 4.2422-0.70703 0.70703-0.70703 0.70703-3.5352-3.5352 1.4141-1.4141 2.1211 2.1211 4.2422-4.2422z" fill-opacity=".23529"/> -</g> -</svg> diff --git a/editor/icons/icon_dependency_ok_hl.svg b/editor/icons/icon_dependency_ok_hl.svg deleted file mode 100644 index 7c3f058dc4..0000000000 --- a/editor/icons/icon_dependency_ok_hl.svg +++ /dev/null @@ -1,5 +0,0 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m8 1a7 7 0 0 0 -7 7 7 7 0 0 0 7 7 7 7 0 0 0 7 -7 7 7 0 0 0 -7 -7zm3.1816 3.9297l1.4141 1.4141-4.2422 4.2422-0.70703 0.70703-0.70703 0.70703-3.5352-3.5352 1.4141-1.4141 2.1211 2.1211 4.2422-4.2422z" fill="#84ffb1"/> -</g> -</svg> diff --git a/editor/icons/icon_distraction_free.svg b/editor/icons/icon_distraction_free.svg index eaf8061f0a..3b59dd1650 100644 --- a/editor/icons/icon_distraction_free.svg +++ b/editor/icons/icon_distraction_free.svg @@ -1,9 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#e0e0e0"> -<path transform="translate(0 1036.4)" d="m3.7578 2.3438l-1.4141 1.4141 2.9492 2.9492 1.4141-1.4141-2.9492-2.9492zm8.4844 0l-2.9492 2.9492 1.4141 1.4141 2.9492-2.9492-1.4141-1.4141zm-6.9492 6.9492l-2.9492 2.9492 1.4141 1.4141 2.9492-2.9492-1.4141-1.4141zm5.4141 0l-1.4141 1.4141 2.9492 2.9492 1.4141-1.4141-2.9492-2.9492z"/> -<path d="m1 1051.4v-5l5 5z" fill-rule="evenodd"/> -<path d="m15 1051.4v-5l-5 5z" fill-rule="evenodd"/> -<path d="m15 1037.4v5l-5-5z" fill-rule="evenodd"/> -<path d="m1 1037.4v5l5-5z" fill-rule="evenodd"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m1 1v5l1.793-1.793 2.5 2.5 1.4141-1.4141-2.5-2.5 1.793-1.793h-5zm9 0l1.793 1.793-2.5 2.5 1.4141 1.4141 2.5-2.5 1.793 1.793v-5h-5zm-4.707 8.293l-2.5 2.5-1.793-1.793v5h5l-1.793-1.793 2.5-2.5-1.4141-1.4141zm5.4141 0l-1.4141 1.4141 2.5 2.5-1.793 1.793h5v-5l-1.793 1.793-2.5-2.5z" fill="#e0e0e0"/> </g> </svg> diff --git a/editor/icons/icon_edit.svg b/editor/icons/icon_edit.svg index b1bce158c4..1805aab54f 100644 --- a/editor/icons/icon_edit.svg +++ b/editor/icons/icon_edit.svg @@ -1,5 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1036.4)"> -<path d="m1.7071 1047.8-0.70711 3.5356l3.5355-0.7071 7.7782-7.7782-2.8284-2.8284zm9.1924-9.1924 2.8284 2.8285 1.4142-1.4142-2.8284-2.8285z" fill="#e0e0e0"/> +<path transform="translate(0 1036.4)" d="m7 1c-0.554 0-1 0.446-1 1v2h4v-2c0-0.554-0.446-1-1-1h-2zm-1 4v7l2 3 2-3v-7h-4zm1 1h1v5h-1v-5z" fill="#e0e0e0"/> </g> </svg> diff --git a/editor/icons/icon_edit_key.svg b/editor/icons/icon_edit_key.svg index 2959900d04..443a9a0455 100644 --- a/editor/icons/icon_edit_key.svg +++ b/editor/icons/icon_edit_key.svg @@ -1,6 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#e0e0e0"> -<path d="m1.7071 1047.8-0.70711 3.5356l3.5355-0.7071 7.7782-7.7782-2.8284-2.8284zm9.1924-9.1924 2.8284 2.8285 1.4142-1.4142-2.8284-2.8285z"/> -<ellipse cx="3.5" cy="1039.9" rx="2.5" ry="2.5"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m12 1c-0.554 0-1 0.446-1 1v2h4v-2c0-0.554-0.446-1-1-1h-2zm-7 3c-0.195 0-0.38964 0.07519-0.53906 0.22461l-3.2363 3.2363c-0.29884 0.29884-0.29884 0.77929 0 1.0781l3.2363 3.2363c0.29884 0.29884 0.77929 0.29884 1.0781 0l3.2363-3.2363c0.29884-0.29884 0.29884-0.77929 0-1.0781l-3.2363-3.2363c-0.14942-0.14942-0.34406-0.22461-0.53906-0.22461zm6 1v7l2 3 2-3v-7h-4zm1 1h1v5h-1v-5z" fill="#e0e0e0"/> </g> </svg> diff --git a/editor/icons/icon_editor_3d_handle.svg b/editor/icons/icon_editor_3d_handle.svg index 189baf3dad..cd28f8d22e 100644 --- a/editor/icons/icon_editor_3d_handle.svg +++ b/editor/icons/icon_editor_3d_handle.svg @@ -1,5 +1,6 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1036.4)"> +<circle cx="8" cy="1044.4" r="8" fill-opacity=".29412"/> <circle cx="8" cy="1044.4" r="7" fill="#fff"/> <circle cx="8" cy="1044.4" r="5" fill="#ff8484"/> </g> diff --git a/editor/icons/icon_editor_control_anchor.svg b/editor/icons/icon_editor_control_anchor.svg index eeee2c182f..5e75f9bdf5 100644 --- a/editor/icons/icon_editor_control_anchor.svg +++ b/editor/icons/icon_editor_control_anchor.svg @@ -1,8 +1,8 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m8.832 6.1445a4 4 0 0 1 -2.6914 2.6855l9.8594 7.1699-7.168-9.8555z" fill="#a5efac" fill-rule="evenodd"/> +<path transform="translate(0 1036.4)" d="m5 0a5 5 0 0 0 -5 5 5 5 0 0 0 5 5 5 5 0 0 0 1.0566 -0.11914l9.9434 6.1191-6.1172-9.9395a5 5 0 0 0 0.11719 -1.0605 5 5 0 0 0 -5 -5z" fill-opacity=".39216" style="paint-order:fill markers stroke"/> +<path transform="translate(0 1036.4)" d="m5 1a4 4 0 0 0 -4 4 4 4 0 0 0 4 4 4 4 0 0 0 1.1406 -0.16992l9.8594 7.1699-7.168-9.8555a4 4 0 0 0 0.16797 -1.1445 4 4 0 0 0 -4 -4z" fill="#a5efac" fill-rule="evenodd"/> <ellipse cx="3" cy="1039.4" r="2" fill="#6e6e6e"/> -<ellipse cx="4" cy="1040.4" rx="4" ry="4" fill="#a5efac" style="paint-order:fill markers stroke"/> <circle cx="5" cy="1041.4" r="0" fill="#a5efac" style="paint-order:fill markers stroke"/> </g> </svg> diff --git a/editor/icons/icon_editor_handle.svg b/editor/icons/icon_editor_handle.svg index 7e58aaa803..05f3e2f2cc 100644 --- a/editor/icons/icon_editor_handle.svg +++ b/editor/icons/icon_editor_handle.svg @@ -1,6 +1,7 @@ -<svg width="8" height="8" version="1.1" viewBox="0 0 8 8" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1044.4)"> -<ellipse cx="4" cy="1048.4" rx="4" ry="4" fill="#fff"/> -<ellipse cx="4" cy="1048.4" rx="2.8572" ry="2.8571" fill="#ff8484"/> +<svg width="10" height="10" version="1.1" viewBox="0 0 10 10" xmlns="http://www.w3.org/2000/svg"> +<g transform="translate(0 -1042.4)"> +<ellipse cx="5" cy="1047.4" rx="5" ry="5" fill-opacity=".29412"/> +<ellipse cx="5" cy="1047.4" rx="4" ry="4" fill="#fff"/> +<ellipse cx="5" cy="1047.4" rx="3" ry="3" fill="#ff8484"/> </g> </svg> diff --git a/editor/icons/icon_editor_pivot.svg b/editor/icons/icon_editor_pivot.svg index d59d2d804d..8b8d07c7de 100644 --- a/editor/icons/icon_editor_pivot.svg +++ b/editor/icons/icon_editor_pivot.svg @@ -1,6 +1,6 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1036.4)"> <path transform="translate(0 1036.4)" d="m6 0v6h-6v4h6v6h4v-6h6v-4h-6v-6h-4zm1 7h2v2h-2v-2z" fill="#fff" fill-opacity=".70588"/> -<path transform="translate(0 1036.4)" d="m7 1v5h2v-5h-2zm-6 6v2h5v-2h-5zm9 0v2h5v-2h-5zm-3 3v5h2v-5h-2z" fill="#ff8484" fill-opacity=".58824"/> +<path transform="translate(0 1036.4)" d="m7 1v5h2v-5h-2zm-6 6v2h5v-2h-5zm9 0v2h5v-2h-5zm-3 3v5h2v-5h-2z" fill="#ff8484"/> </g> </svg> diff --git a/editor/icons/icon_event_player.svg b/editor/icons/icon_event_player.svg deleted file mode 100644 index 06630c349a..0000000000 --- a/editor/icons/icon_event_player.svg +++ /dev/null @@ -1,8 +0,0 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#e0e0e0"> -<path transform="translate(0 1036.4)" d="m1 1v14h14v-14h-14zm2 2h10v10h-10v-10z"/> -<path transform="translate(0 1036.4)" d="m5 3v6h2v-6h-2zm4 0v6h2v-6h-2z"/> -<rect x="5" y="1039.4" width="1" height="10"/> -<rect x="9" y="1039.4" width="1" height="10"/> -</g> -</svg> diff --git a/editor/icons/icon_file_server.svg b/editor/icons/icon_file_server.svg deleted file mode 100644 index 02bc363c19..0000000000 --- a/editor/icons/icon_file_server.svg +++ /dev/null @@ -1,7 +0,0 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#c5c5c5"> -<path transform="translate(0 1036.4)" d="m1 8v3h14v-3h-14zm1 1h1v1h-1v-1zm2 0h1v1h-1v-1zm-3 3v3h14v-3h-14zm1 1h1v1h-1v-1zm2 0h1v1h-1v-1z"/> -<rect x="5" y="1038.4" width="6" height="4"/> -<rect x="5" y="1037.4" width="3" height="1"/> -</g> -</svg> diff --git a/editor/icons/icon_file_server_active.svg b/editor/icons/icon_file_server_active.svg deleted file mode 100644 index d491df2009..0000000000 --- a/editor/icons/icon_file_server_active.svg +++ /dev/null @@ -1,7 +0,0 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#84ffb1"> -<path transform="translate(0 1036.4)" d="m1 8v3h14v-3h-14zm1 1h1v1h-1v-1zm2 0h1v1h-1v-1zm-3 3v3h14v-3h-14zm1 1h1v1h-1v-1zm2 0h1v1h-1v-1z"/> -<rect x="5" y="1038.4" width="6" height="4"/> -<rect x="5" y="1037.4" width="3" height="1"/> -</g> -</svg> diff --git a/editor/icons/icon_gizmo_camera.svg b/editor/icons/icon_gizmo_camera.svg index f6e5f885e7..cb80c16598 100644 --- a/editor/icons/icon_gizmo_camera.svg +++ b/editor/icons/icon_gizmo_camera.svg @@ -1,5 +1,6 @@ <svg width="128" height="128" version="1.1" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -924.36)"> +<path transform="translate(0 924.36)" d="m76 16a28 28 0 0 0 -26.631 19.4 28 28 0 0 0 -13.369 -3.4004 28 28 0 0 0 -28 28 28 28 0 0 0 16 25.26v14.74c0 6.648 5.352 12 12 12h48c6.648 0 12-5.352 12-12l24 16v-64l-24 16v-4.4434a28 28 0 0 0 8 -19.557 28 28 0 0 0 -28 -28z" fill-opacity=".29412" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".98824" stroke-width="2"/> <path d="m76 944.36a24 24 0 0 0 -23.906 22.219 24 24 0 0 0 -16.094 -6.2192 24 24 0 0 0 -24 24 24 24 0 0 0 16 22.594v17.406c0 4.432 3.5679 8 8 8h48c4.4321 0 8-3.568 8-8v-8l24 16v-48l-24 16v-14.156a24 24 0 0 0 8 -17.844 24 24 0 0 0 -24 -24z" fill="#f7f5cf"/> </g> </svg> diff --git a/editor/icons/icon_gizmo_directional_light.svg b/editor/icons/icon_gizmo_directional_light.svg index f7fa732501..1b125b44de 100644 --- a/editor/icons/icon_gizmo_directional_light.svg +++ b/editor/icons/icon_gizmo_directional_light.svg @@ -1,5 +1,6 @@ <svg width="128" height="128" version="1.1" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -924.36)"> +<path transform="translate(0 924.36)" d="m64 4c-4.432 0-8 3.568-8 8v16c0 4.432 3.568 8 8 8s8-3.568 8-8v-16c0-4.432-3.568-8-8-8zm-36.77 15.223c-2.045 0-4.0893 0.78461-5.6562 2.3516-3.1339 3.1339-3.1339 8.1786 0 11.312l11.312 11.314c3.1339 3.1339 8.1806 3.1339 11.314 0s3.1339-8.1806 0-11.314l-11.314-11.312c-1.5669-1.5669-3.6113-2.3516-5.6562-2.3516zm73.539 0c-2.045 0-4.0893 0.78461-5.6562 2.3516l-11.314 11.312c-3.1339 3.1339-3.1339 8.1806 0 11.314s8.1806 3.1339 11.314 0l11.312-11.314c3.1339-3.1339 3.1339-8.1786 0-11.312-1.567-1.5669-3.6113-2.3516-5.6562-2.3516zm-36.77 20.777a24 24 0 0 0 -24 24 24 24 0 0 0 24 24 24 24 0 0 0 24 -24 24 24 0 0 0 -24 -24zm-52 16c-4.432 0-8 3.568-8 8s3.568 8 8 8h16c4.432 0 8-3.568 8-8s-3.568-8-8-8h-16zm88 0c-4.432 0-8 3.568-8 8s3.568 8 8 8h16c4.432 0 8-3.568 8-8s-3.568-8-8-8h-16zm-61.455 25.449c-2.045 0-4.0913 0.78266-5.6582 2.3496l-11.312 11.314c-3.1339 3.1339-3.1339 8.1786 0 11.312 3.1339 3.1339 8.1786 3.1339 11.312 0l11.314-11.312c3.1339-3.1339 3.1339-8.1806 0-11.314-1.5669-1.5669-3.6113-2.3496-5.6562-2.3496zm50.91 0c-2.045 0-4.0893 0.78266-5.6562 2.3496-3.1339 3.1339-3.1339 8.1806 0 11.314l11.314 11.312c3.1339 3.1339 8.1786 3.1339 11.312 0s3.1339-8.1786 0-11.312l-11.312-11.314c-1.5669-1.5669-3.6132-2.3496-5.6582-2.3496zm-25.455 10.551c-4.432 0-8 3.568-8 8v16c0 4.432 3.568 8 8 8s8-3.568 8-8v-16c0-4.432-3.568-8-8-8z" fill-opacity=".29412" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".98824" stroke-width="2"/> <path transform="translate(0 924.36)" d="m64 8c-2.216 0-4 1.784-4 4v16c0 2.216 1.784 4 4 4s4-1.784 4-4v-16c0-2.216-1.784-4-4-4zm-36.77 15.227c-1.0225 0-2.0447 0.39231-2.8281 1.1758-1.5669 1.5669-1.5669 4.0893 0 5.6562l11.312 11.314c1.5669 1.5669 4.0913 1.5669 5.6582 0s1.5669-4.0913 0-5.6582l-11.314-11.312c-0.78348-0.78348-1.8056-1.1758-2.8281-1.1758zm73.539 0c-1.0225 0-2.0446 0.39231-2.8281 1.1758l-11.314 11.312c-1.5669 1.5669-1.5669 4.0913 0 5.6582s4.0913 1.5669 5.6582 0l11.313-11.314c1.5669-1.5669 1.5669-4.0893 0-5.6562-0.78348-0.78348-1.8056-1.1758-2.8281-1.1758zm-36.77 20.773c-11.046 1e-5 -20 8.9543-20 20 7e-6 11.046 8.9543 20 20 20s20-8.9543 20-20c-8e-6 -11.046-8.9543-20-20-20zm-52 16c-2.216 0-4 1.784-4 4s1.784 4 4 4h16c2.216 0 4-1.784 4-4s-1.784-4-4-4h-16zm88 0c-2.216 0-4 1.784-4 4s1.784 4 4 4h16c2.216 0 4-1.784 4-4s-1.784-4-4-4h-16zm-61.455 25.453c-1.0225 0-2.0466 0.39035-2.8301 1.1738l-11.312 11.314c-1.5669 1.5669-1.5669 4.0893 0 5.6563 1.5669 1.5669 4.0893 1.5669 5.6562 0l11.314-11.313c1.5669-1.5669 1.5669-4.0913 0-5.6582-0.78347-0.78347-1.8056-1.1738-2.8281-1.1738zm50.91 0c-1.0225 0-2.0447 0.39035-2.8281 1.1738-1.5669 1.5669-1.5669 4.0913 0 5.6582l11.314 11.313c1.5669 1.5669 4.0893 1.5669 5.6563 0 1.5669-1.567 1.5669-4.0893 0-5.6563l-11.313-11.314c-0.78347-0.78347-1.8076-1.1738-2.8301-1.1738zm-25.455 10.547c-2.216 0-4 1.784-4 4v16c0 2.216 1.784 4 4 4s4-1.784 4-4v-16c0-2.216-1.784-4-4-4z" fill="#f7f5cf"/> </g> </svg> diff --git a/editor/icons/icon_gizmo_g_i_probe.svg b/editor/icons/icon_gizmo_g_i_probe.svg index 7d3adf4196..815da4d5c3 100644 --- a/editor/icons/icon_gizmo_g_i_probe.svg +++ b/editor/icons/icon_gizmo_g_i_probe.svg @@ -1,5 +1,6 @@ <svg width="128" height="128" version="1.1" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -924.36)"> -<path transform="translate(0 924.36)" d="m12 8a4.0004 4.0004 0 0 0 -4 4v104a4.0004 4.0004 0 0 0 4 4h60v-8h-56v-96h96v8h8v-12a4.0004 4.0004 0 0 0 -4 -4h-104zm27.715 17.951c-1.2324 0.086154-2.3996 0.76492-3.0664 1.9199l-0.14844 0.25781c-1.0669 1.848-0.43784 4.1948 1.4102 5.2617l10.648 6.1484c1.848 1.0669 4.1948 0.43784 5.2617-1.4102l0.14844-0.25781c1.0669-1.848 0.43784-4.1948-1.4102-5.2617l-10.648-6.1484c-0.693-0.4001-1.4558-0.56146-2.1953-0.50977zm52.285 2.0488a32 32 0 0 0 -32 32 32 32 0 0 0 16 27.668v8.332c0 4.432 3.568 8 8 8h16c4.432 0 8-3.568 8-8v-8.3223a32 32 0 0 0 16 -27.678 32 32 0 0 0 -32 -32zm0 12a20 20 0 0 1 20 20 20 20 0 0 1 -20 20 20 20 0 0 1 -20 -20 20 20 0 0 1 20 -20zm-60.148 16c-2.1339 0-3.8516 1.7177-3.8516 3.8516v0.29688c0 2.1339 1.7177 3.8516 3.8516 3.8516h12.297c2.1339 0 3.8516-1.7177 3.8516-3.8516v-0.29688c0-2.1339-1.7177-3.8516-3.8516-3.8516h-12.297zm18.902 23.951c-0.73947-0.051693-1.5023 0.10966-2.1953 0.50977l-10.648 6.1484c-1.848 1.0669-2.4771 3.4137-1.4102 5.2617l0.14844 0.25781c1.0669 1.848 3.4137 2.4771 5.2617 1.4102l10.648-6.1484c1.848-1.0669 2.4771-3.4137 1.4102-5.2617l-0.14844-0.25781c-0.66684-1.155-1.834-1.8338-3.0664-1.9199zm33.246 32.049v8h16v-8h-16z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#f7f5cf" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="filter-blend-mode:normal;filter-gaussianBlur-deviation:0;font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> +<path transform="translate(0 924.36)" d="m12 4c-4.4183 9.5e-6 -8 3.5817-8 8v104c9.5e-6 4.4183 3.5817 8 8 8h64v-16h-56v-88h88v7.7676a36 36 0 0 0 -16 -3.7676 36 36 0 0 0 -36 36 36 36 0 0 0 16 29.9v8.0996c0 4.8544 3.4253 8.8788 8 9.8008v16.199h24v-16.199c4.5747-0.92197 8-4.9464 8-9.8008v-8.0879a36 36 0 0 0 16 -29.912 36 36 0 0 0 -19.523 -32h15.523v-16c-1e-5 -4.4183-3.5817-8-8-8h-104zm28.25 17.996c-2.8358-0.076599-5.6171 1.3651-7.1406 4.0039-2.216 3.8382-0.90854 8.7117 2.9297 10.928l10.393 6c3.8382 2.216 8.7117 0.91049 10.928-2.9277s0.91049-8.7117-2.9277-10.928l-10.393-6c-1.1994-0.6925-2.5-1.0414-3.7891-1.0762zm51.75 22.004a16 16 0 0 1 16 16 16 16 0 0 1 -16 16 16 16 0 0 1 -16 -16 16 16 0 0 1 16 -16zm-60 8c-4.432 0-8 3.568-8 8s3.568 8 8 8h12c4.432 0 8-3.568 8-8s-3.568-8-8-8h-12zm18.221 23.996c-1.289 0.034818-2.5896 0.38367-3.7891 1.0762l-10.393 6c-3.8382 2.216-5.1457 7.0895-2.9297 10.928s7.0915 5.1437 10.93 2.9277l10.393-6c3.8382-2.216 5.1437-7.0895 2.9277-10.928-1.5235-2.6388-4.3028-4.0805-7.1387-4.0039z" fill-opacity=".29412"/> +<path transform="translate(0 924.36)" d="m12 8a4.0004 4.0004 0 0 0 -4 4v104a4.0004 4.0004 0 0 0 4 4h60v-8h-56v-96h96v8h8v-12a4.0004 4.0004 0 0 0 -4 -4zm27.715 17.951c-1.2324 0.08615-2.3996 0.76492-3.0664 1.9199l-0.14844 0.25781c-1.0669 1.848-0.43784 4.1948 1.4102 5.2617l10.648 6.1484c1.848 1.0669 4.1948 0.43784 5.2617-1.4102l0.14844-0.25781c1.0669-1.848 0.43784-4.1948-1.4102-5.2617l-10.648-6.1484c-0.693-0.4001-1.4558-0.56146-2.1953-0.50977zm52.285 2.0488a32 32 0 0 0 -32 32 32 32 0 0 0 16 27.668v8.332c0 4.432 3.568 8 8 8h16c4.432 0 8-3.568 8-8v-8.3223a32 32 0 0 0 16 -27.678 32 32 0 0 0 -32 -32zm0 12a20 20 0 0 1 20 20 20 20 0 0 1 -20 20 20 20 0 0 1 -20 -20 20 20 0 0 1 20 -20zm-60.148 16c-2.1339 0-3.8516 1.7177-3.8516 3.8516v0.29688c0 2.1339 1.7177 3.8516 3.8516 3.8516h12.297c2.1339 0 3.8516-1.7177 3.8516-3.8516v-0.29688c0-2.1339-1.7177-3.8516-3.8516-3.8516zm18.902 23.951c-0.73947-0.05169-1.5023 0.10966-2.1953 0.50977l-10.648 6.1484c-1.848 1.0669-2.4771 3.4137-1.4102 5.2617l0.14844 0.25781c1.0669 1.848 3.4137 2.4771 5.2617 1.4102l10.648-6.1484c1.848-1.0669 2.4771-3.4137 1.4102-5.2617l-0.14844-0.25781c-0.66684-1.155-1.834-1.8338-3.0664-1.9199zm33.246 32.049v8h16v-8z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#f7f5cf" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> </g> </svg> diff --git a/editor/icons/icon_gizmo_light.svg b/editor/icons/icon_gizmo_light.svg index c411d13dc7..0db2749e91 100644 --- a/editor/icons/icon_gizmo_light.svg +++ b/editor/icons/icon_gizmo_light.svg @@ -1,5 +1,6 @@ <svg width="128" height="128" version="1.1" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -924.36)"> +<path transform="translate(0 924.36)" d="m64 2a44 44 0 0 0 -44 44 44 44 0 0 0 24 39.189v5.8105 5 3c0 5.0515 3.3756 9.2769 8 10.578v16.422h24v-16.422c4.6244-1.3012 8-5.5266 8-10.578v-3-5-5.8574a44 44 0 0 0 24 -39.143 44 44 0 0 0 -44 -44zm0 20a24 24 0 0 1 24 24 24 24 0 0 1 -24 24 24 24 0 0 1 -24 -24 24 24 0 0 1 24 -24z" fill-opacity=".29412" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".98824" stroke-width="2.2"/> <path transform="translate(0 924.36)" d="m64 6a40 40 0 0 0 -40 40 40 40 0 0 0 24 36.607v15.393a8 8 0 0 0 8 8h16a8 8 0 0 0 8 -8v-15.363a40 40 0 0 0 24 -36.637 40 40 0 0 0 -40 -40zm0 12a28 28 0 0 1 28 28 28 28 0 0 1 -28 28 28 28 0 0 1 -28 -28 28 28 0 0 1 28 -28zm-8 96v8h16v-8h-16z" fill="#f7f5cf"/> </g> </svg> diff --git a/editor/icons/icon_gizmo_listener.svg b/editor/icons/icon_gizmo_listener.svg index adb6aebaec..9b74469b67 100644 --- a/editor/icons/icon_gizmo_listener.svg +++ b/editor/icons/icon_gizmo_listener.svg @@ -1,6 +1,7 @@ <svg width="128" height="128" version="1.1" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -924.36)"> <g transform="matrix(2 0 0 2 -16 -1040.4)"> +<path d="m32 984.36c-12.126 2e-5 -22 9.8729-22 21.999 1.1e-4 1.1045 0.89548 1.9999 2 2h8c1.1045-1e-4 1.9999-0.8955 2-2 2.23e-4 -5.546 4.4536-9.999 10-9.999 5.5464 1e-5 9.9998 4.453 10 9.999 0 6.5873-1.6032 8.0251-3.8408 9.8897-1.0295 0.8579-2.3133 1.6111-3.7969 2.6826-0.72285 0.522-1.6649 1.2341-2.5488 2.3496-0.98288 1.2402-1.8135 2.99-1.8135 5.0781 0 2.3898-0.31658 3.686-0.61035 4.3194-0.29378 0.6333-0.4706 0.73-0.97754 1.0341-0.54947 0.3297-2.5162 0.6446-4.4121 0.6446-0.0065 3e-4 -0.01302 6e-4 -0.01953 1e-3h-3.9805c-1.1045 1e-4 -1.9999 0.8954-2 2v8c1.1e-4 1.1045 0.89548 1.9999 2 2h4c0.0072-3e-4 0.01432-5e-4 0.02148-1e-3 1.9052 1e-3 6.3098 0.1982 10.566-2.3555 4.0103-2.4061 6.6628-7.2724 7.1738-13.592 0.81224-0.548 2.3445-1.497 4.0791-2.9424 4.0025-3.3353 8.1592-9.5405 8.1592-19.108-9.5e-5 -12.126-9.8735-21.999-22-21.999zm31.807 4.002c-0.38259-0.0177-0.76221 0.0749-1.0938 0.2666l-6.9531 4.0156c-0.95754 0.55332-1.2843 1.7787-0.72949 2.7354 1.9364 3.3365 2.9609 7.1229 2.9717 10.98-0.0072 3.8597-1.0296 7.6487-2.9648 10.988-0.55452 0.9572-0.22681 2.1827 0.73144 2.7353l6.9453 4.0069c0.95656 0.5517 2.1792 0.2238 2.7314-0.7325 6.0717-10.516 6.0717-23.482 0-33.998-0.3406-0.59005-0.95812-0.96615-1.6387-0.99805z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill-opacity=".29412" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> <path transform="matrix(.5 0 0 .5 8 982.36)" d="m48 8a40 39.998 0 0 0 -40 39.998h16a24 23.999 0 0 1 24 -23.998 24 23.999 0 0 1 24 23.998c0 13.999-4.33 18.859-9.1211 22.852-2.3955 1.9962-5.0363 3.5302-7.8125 5.5352-1.3881 1.0024-2.8661 2.126-4.3047 3.9414-1.4385 1.8152-2.7617 4.6719-2.7617 7.6719 0 10.221-2.5383 12.59-5.1172 14.137-2.5789 1.5472-6.8828 1.8594-10.883 1.8594v0.00195h-8v16h8v-0.00195c4 0 11.696 0.31158 19.117-4.1406 7.0602-4.236 12.198-13.279 12.695-26 0.1835-0.1636 0.14883-0.15489 0.62109-0.49609 1.7238-1.245 5.083-3.2112 8.6875-6.2148 7.209-6.0072 14.879-17.145 14.879-35.145a40 39.998 0 0 0 -40 -39.998zm63.426 8l-13.906 8.0312a48 47.998 0 0 1 6.4844 23.967 48 47.998 0 0 1 -6.4688 23.984l13.891 8.0137a64 63.997 0 0 0 0 -63.996z" fill="#f7f5cf"/> </g> </g> diff --git a/editor/icons/icon_gizmo_particles.svg b/editor/icons/icon_gizmo_particles.svg index 05fc84619e..0989c1acad 100644 --- a/editor/icons/icon_gizmo_particles.svg +++ b/editor/icons/icon_gizmo_particles.svg @@ -1,5 +1,6 @@ <svg width="128" height="128" version="1.1" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -924.36)"> +<path d="m63.998 928.36c-18.429 5e-3 -34.029 13.88-38.557 32.926-12.4 3.0077-21.427 14.08-21.441 27.07v4e-3c0 15.417 12.583 28 28 28h64c15.417 0 28-12.583 28-28v-4e-3c-0.0152-13-9.0549-24.076-21.467-27.074-4.5265-19.033-20.112-32.903-38.529-32.922zm32.002 88c-6.58 0-12 5.42-12 12s5.42 12 12 12c6.58 0 12-5.42 12-12s-5.42-12-12-12zm-64 0c-6.58 0-12 5.42-12 12s5.42 12 12 12 12-5.42 12-12-5.42-12-12-12zm32 8c-6.58 0-12 5.42-12 12s5.42 12 12 12 12-5.42 12-12-5.42-12-12-12z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill-opacity=".29412" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> <path transform="translate(0 924.36)" d="m64 8a36 40 0 0 0 -35.311 32.256 24 24 0 0 0 -20.689 23.744 24 24 0 0 0 24 24h64a24 24 0 0 0 24 -24 24 24 0 0 0 -20.715 -23.746 36 40 0 0 0 -35.285 -32.254zm-32 88a8 8 0 0 0 -8 8 8 8 0 0 0 8 8 8 8 0 0 0 8 -8 8 8 0 0 0 -8 -8zm64 0a8 8 0 0 0 -8 8 8 8 0 0 0 8 8 8 8 0 0 0 8 -8 8 8 0 0 0 -8 -8zm-32 8a8 8 0 0 0 -8 8 8 8 0 0 0 8 8 8 8 0 0 0 8 -8 8 8 0 0 0 -8 -8z" fill="#f7f5cf"/> </g> </svg> diff --git a/editor/icons/icon_gizmo_reflection_probe.svg b/editor/icons/icon_gizmo_reflection_probe.svg index 6d80e73b8c..bcfd6e53f9 100644 --- a/editor/icons/icon_gizmo_reflection_probe.svg +++ b/editor/icons/icon_gizmo_reflection_probe.svg @@ -1,5 +1,6 @@ <svg width="128" height="128" version="1.1" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -924.36)"> -<path transform="translate(0 924.36)" d="m12 8a4.0004 4.0004 0 0 0 -4 4v24h8v-20h96v8h8v-12a4.0004 4.0004 0 0 0 -4 -4h-104zm76 28a4 4 0 0 0 -4 4 4 4 0 0 0 4 4h18.732l-42.957 50.119-44.947-44.947-5.6562 5.6582 48 48a4.0004 4.0004 0 0 0 5.8652 -0.22656l44.963-52.457v17.854a4 4 0 0 0 4 4 4 4 0 0 0 4 -4v-28a4.0004 4.0004 0 0 0 -4 -4h-28zm-80 52v28a4.0004 4.0004 0 0 0 4 4h104a4.0004 4.0004 0 0 0 4 -4v-28h-8v24h-96v-24h-8z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#f7f5cf" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="filter-blend-mode:normal;filter-gaussianBlur-deviation:0;font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> +<g transform="translate(0 -924.36)" shape-rendering="auto"> +<path d="m12 928.36c-4.3705 4.4e-4 -7.9996 3.6295-8 8v28h16v-20h88v8h16v-16c-4.4e-4 -4.3705-3.6295-7.9996-8-8zm76 28c-4.3709 0-8 3.6291-8 8s3.6291 8 8 8h10.035l-34.486 40.236-44.721-44.723-11.312 11.316 50.828 50.828c3.2536 3.2513 8.7374 3.0394 11.73-0.4531l37.926-44.244v7.0391c0 4.3709 3.6291 8 8 8s8-3.6291 8-8v-28c-4.4e-4 -4.3705-3.6295-7.9996-8-8zm-84 52v32c4.37e-4 4.3705 3.6295 7.9996 8 8h104c4.3705-4e-4 7.9996-3.6295 8-8v-32h-16v24h-88v-24z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill-opacity=".29412" image-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> +<path d="m12 932.36c-2.209 2.2e-4 -3.9998 1.791-4 4v24h8v-20h96v8h8v-12c-2.2e-4 -2.209-1.791-3.9998-4-4zm76 28c-2.2091 0-4 1.7909-4 4s1.7909 4 4 4h18.732l-42.957 50.119-44.947-44.947-5.6562 5.6582 48 48c1.648 1.6468 4.3491 1.5425 5.8652-0.2266l44.963-52.457v17.854c0 2.2091 1.7909 4 4 4s4-1.7909 4-4v-28c-2.2e-4 -2.209-1.791-3.9998-4-4zm-80 52v28c2.209e-4 2.2091 1.791 3.9998 4 4h104c2.209-2e-4 3.9998-1.7909 4-4v-28h-8v24h-96v-24z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#f7f5cf" image-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> </g> </svg> diff --git a/editor/icons/icon_gizmo_spatial_sample_player.svg b/editor/icons/icon_gizmo_spatial_sample_player.svg index 7dbb4744be..aa69248503 100644 --- a/editor/icons/icon_gizmo_spatial_sample_player.svg +++ b/editor/icons/icon_gizmo_spatial_sample_player.svg @@ -1,5 +1,6 @@ <svg width="128" height="128" version="1.1" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -924.36)"> -<path transform="translate(0 924.36)" d="m63.883 12.004c-1.0195 0.0295-1.9892 0.4473-2.7109 1.168l-30.828 30.83h-14.344c-2.209 2.21e-4 -3.9998 1.791-4 4v32c2.21e-4 2.209 1.791 3.9998 4 4h14.344l30.828 30.828c2.52 2.5182 6.8267 0.73442 6.8281-2.8281v-96.002c-0.0015-2.2541-1.8641-4.0619-4.1172-3.9961zm48.117 3.9961a4 4 0 0 0 -4 4v88a4 4 0 0 0 4 4 4 4 0 0 0 4 -4v-88a4 4 0 0 0 -4 -4zm-24 24a4 4 0 0 0 -4 4v40a4 4 0 0 0 4 4 4 4 0 0 0 4 -4v-40a4 4 0 0 0 -4 -4z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#f7f5cf" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> +<g transform="translate(0 -924.36)" fill-rule="evenodd" shape-rendering="auto"> +<path d="m63.766 932.37c-2.0369 0.0594-3.9779 0.89602-5.4199 2.3359l-2e-3 2e-3 -29.656 29.658h-12.688c-4.3705 4.4e-4 -7.9996 3.6295-8 8v32c4.372e-4 4.3705 3.6295 7.9995 8 8h12.688l29.656 29.656c2.4 2.3983 5.9795 2.8662 8.7168 1.7324 2.7373-1.1337 4.9381-3.9958 4.9395-7.3886v-96.004c-3e-3 -4.4555-3.779-8.1211-8.2324-7.9922zm48.234 3.9941c-4.3709 0-8 3.6291-8 8v88c0 4.3709 3.6291 8 8 8s8-3.6291 8-8v-88c0-4.3709-3.6291-8-8-8zm-24 24c-4.3709 0-8 3.6291-8 8v40c0 4.3709 3.6291 8 8 8s8-3.6291 8-8v-40c0-4.3709-3.6291-8-8-8z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill-opacity=".29412" image-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> +<path transform="translate(0 924.36)" d="m63.883 12.004c-1.0195 0.0295-1.9892 0.4473-2.7109 1.168l-30.828 30.83h-14.344c-2.209 2.21e-4 -3.9998 1.791-4 4v32c2.21e-4 2.209 1.791 3.9998 4 4h14.344l30.828 30.828c2.52 2.5182 6.8267 0.73442 6.8281-2.8281v-96.002c-0.0015-2.2541-1.8641-4.0619-4.1172-3.9961zm48.117 3.9961a4 4 0 0 0 -4 4v88a4 4 0 0 0 4 4 4 4 0 0 0 4 -4v-88a4 4 0 0 0 -4 -4zm-24 24a4 4 0 0 0 -4 4v40a4 4 0 0 0 4 4 4 4 0 0 0 4 -4v-40a4 4 0 0 0 -4 -4z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#f7f5cf" image-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> </g> </svg> diff --git a/editor/icons/icon_gizmo_spatial_stream_player.svg b/editor/icons/icon_gizmo_spatial_stream_player.svg index 2cf3966364..1470d3bfba 100644 --- a/editor/icons/icon_gizmo_spatial_stream_player.svg +++ b/editor/icons/icon_gizmo_spatial_stream_player.svg @@ -1,5 +1,6 @@ <svg width="128" height="128" version="1.1" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -924.36)"> -<path d="m99.766 934.36a8.0008 8.0011 0 0 0 -1.9609 0.296l-56 16a8.0008 8.0011 0 0 0 -5.8047 7.6964v48.119a18 18.001 0 0 0 -2 -0.116 18 18.001 0 0 0 -18 18.001 18 18.001 0 0 0 18 18.001 18 18.001 0 0 0 17.875 -16.001h0.125v-2-59.963l40-11.43v37.517a18 18.001 0 0 0 -2 -0.124 18 18.001 0 0 0 -18 18.001 18 18.001 0 0 0 18 18 18 18.001 0 0 0 17.875 -16h0.125v-2-66.003a8.0008 8.0011 0 0 0 -8.2344 -7.9924z" color="#000000" color-rendering="auto" fill="#f7f5cf" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="block-progression:tb;isolation:auto;mix-blend-mode:normal;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none;white-space:normal"/> +<g transform="translate(0 -924.36)" shape-rendering="auto"> +<path transform="translate(0 924.36)" d="m99.645 6.0059c-0.9956 0.029687-1.9837 0.18322-2.9414 0.45703l-56 16c-5.1336 1.4668-8.7021 6.198-8.7031 11.537v44.203c-11.16 1.0331-20 10.379-20 21.797 1.1e-5 12.103 9.8971 22 22 22 12.103-1e-5 22-9.8971 22-22v-56.947l32-9.1426v28.293c-11.16 1.0331-20 10.379-20 21.797 1.1e-5 12.103 9.8971 22 22 22 12.103-1e-5 22-9.8971 22-22v-66c-0.00104-6.7137-5.6428-12.192-12.354-11.994z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill-opacity=".29412" image-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> +<path transform="translate(0 924.36)" d="m99.764 10.004a8.0008 8.0008 0 0 0 -1.9609 0.30469l-56 16a8.0008 8.0008 0 0 0 -5.8027 7.6914v48.121a18 18 0 0 0 -2 -0.12109 18 18 0 0 0 -18 18 18 18 0 0 0 18 18 18 18 0 0 0 18 -18v-59.965l40-11.428v37.514a18 18 0 0 0 -2 -0.12109 18 18 0 0 0 -18 18 18 18 0 0 0 18 18 18 18 0 0 0 18 -18v-66a8.0008 8.0008 0 0 0 -8.2363 -7.9961z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#f7f5cf" image-rendering="auto" solid-color="#000000" style="filter-blend-mode:normal;filter-gaussianBlur-deviation:0;font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> </g> </svg> diff --git a/editor/icons/icon_gizmo_spot_light.svg b/editor/icons/icon_gizmo_spot_light.svg index 9b4ddadd17..1881b6b60a 100644 --- a/editor/icons/icon_gizmo_spot_light.svg +++ b/editor/icons/icon_gizmo_spot_light.svg @@ -1,5 +1,6 @@ <svg width="128" height="128" version="1.1" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -924.36)"> +<path transform="translate(0 924.36)" d="m52 4c-6.5788 0-12 5.4212-12 12v26.625c-12.263 7.2822-19.978 19.75-20 33.369l-0.005859 4.0059h28.578c1.7994 6.8632 8.0265 12 15.428 12s13.628-5.1368 15.428-12h28.576l-0.00391-4.0039c-0.01526-13.625-7.7323-26.099-20-33.385v-26.611c0-6.5788-5.4212-12-12-12zm-11.689 78.016c-1.536-0.10738-3.1419 0.23676-4.5586 1.0547l-10.393 6c-3.7786 2.1816-5.1117 7.1503-2.9297 10.93 2.1816 3.7786 7.1503 5.1117 10.93 2.9297l10.393-6c3.7796-2.1822 5.1087-7.1521 2.9277-10.93-1.3629-2.3605-3.8057-3.8052-6.3691-3.9844zm47.379 0c-2.5634 0.1792-5.0063 1.6238-6.3691 3.9844-2.181 3.7776-0.85187 8.7475 2.9277 10.93l10.393 6c3.7794 2.182 8.7481 0.8489 10.93-2.9297 2.182-3.7794 0.84891-8.7481-2.9297-10.93l-10.393-6c-1.4167-0.81792-3.0225-1.1621-4.5586-1.0547zm-23.689 13.984c-4.3628 0-8 3.6372-8 8v12c0 4.3628 3.6372 8 8 8s8-3.6372 8-8v-12c0-4.3628-3.6372-8-8-8z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill-opacity=".29412" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> <path transform="translate(0 924.36)" d="m52 8c-4.432 0-8 3.568-8 8v12 16.875a40 36 0 0 0 -20 31.125h28a12 12 0 0 0 12 12 12 12 0 0 0 12 -12h28a40 36 0 0 0 -20 -31.141v-20.859-8c0-4.432-3.568-8-8-8h-24zm-11.969 78.006c-0.76793-0.053681-1.5596 0.1138-2.2793 0.5293l-10.393 6c-1.9191 1.108-2.5728 3.5457-1.4648 5.4648s3.5457 2.5728 5.4648 1.4648l10.393-6c1.9191-1.108 2.5709-3.5457 1.4629-5.4648-0.6925-1.1994-1.9037-1.9047-3.1836-1.9941zm47.938 0c-1.2799 0.08947-2.4911 0.7947-3.1836 1.9941-1.108 1.9191-0.45622 4.3568 1.4629 5.4648l10.393 6c1.9191 1.108 4.3568 0.45427 5.4648-1.4648s0.45427-4.3568-1.4648-5.4648l-10.393-6c-0.71967-0.4155-1.5114-0.58298-2.2793-0.5293zm-23.969 13.994c-2.216 0-4 1.784-4 4v12c0 2.216 1.784 4 4 4s4-1.784 4-4v-12c0-2.216-1.784-4-4-4z" fill="#f7f5cf" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.1082"/> </g> </svg> diff --git a/editor/icons/icon_graph_comment.svg b/editor/icons/icon_graph_comment.svg deleted file mode 100644 index d83bd62058..0000000000 --- a/editor/icons/icon_graph_comment.svg +++ /dev/null @@ -1,5 +0,0 @@ -<svg width="14" height="14" version="1.1" viewBox="0 0 14 14" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1038.4)"> -<path transform="translate(0 1038.4)" d="m3 1v2h-2v2h2v4h-2v2h2v2h2v-2h4v2h2v-2h2v-2h-2v-4h2v-2h-2v-2h-2v2h-4v-2h-2zm2 4h4v4h-4v-4z" fill="#e0e0e0"/> -</g> -</svg> diff --git a/editor/icons/icon_graph_cube_uniform.svg b/editor/icons/icon_graph_cube_uniform.svg deleted file mode 100644 index a7ef1499b5..0000000000 --- a/editor/icons/icon_graph_cube_uniform.svg +++ /dev/null @@ -1,5 +0,0 @@ -<svg width="14" height="14" version="1.1" viewBox="0 0 14 14" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1038.4)"> -<path transform="translate(0 1038.4)" d="m2 0c-1.1046 0-2 0.8954-2 2v10c0 1.1046 0.89543 2 2 2h10c1.1046 0 2-0.8954 2-2v-10c0-1.1046-0.89543-2-2-2h-10zm4.9727 2a0.71438 0.71438 0 0 1 0.34766 0.074219l4.2852 2.1426a0.71438 0.71438 0 0 1 0.39453 0.64062v4.2852a0.71438 0.71438 0 0 1 -0.39453 0.63867l-4.2852 2.1426a0.71438 0.71438 0 0 1 -0.64062 0l-4.2852-2.1426a0.71438 0.71438 0 0 1 -0.39453 -0.63867v-4.2852a0.71438 0.71438 0 0 1 0.39453 -0.64062l4.2852-2.1426a0.71438 0.71438 0 0 1 0.29297 -0.074219zm0.027344 1.5137l-2.6895 1.3438 2.6895 1.3438 2.6895-1.3438-2.6895-1.3438zm-3.5723 2.498v2.6895l2.8574 1.4277v-2.6875l-2.8574-1.4297zm7.1445 0l-2.8574 1.4297v2.6875l2.8574-1.4277v-2.6895z" fill="#eac968"/> -</g> -</svg> diff --git a/editor/icons/icon_graph_curve_map.svg b/editor/icons/icon_graph_curve_map.svg deleted file mode 100644 index a5a3184926..0000000000 --- a/editor/icons/icon_graph_curve_map.svg +++ /dev/null @@ -1,6 +0,0 @@ -<svg width="14" height="14" version="1.1" viewBox="0 0 14 14" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1038.4)"> -<path d="m2 1049.4c8 0 9 0 9-9" fill="none" stroke="#f6f6f6" stroke-linecap="round" stroke-width="2"/> -<path transform="translate(0 1038.4)" d="m11 4a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2zm-5 5a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2z" fill="#68d0ea"/> -</g> -</svg> diff --git a/editor/icons/icon_graph_default_texture.svg b/editor/icons/icon_graph_default_texture.svg deleted file mode 100644 index 0a1a0e9673..0000000000 --- a/editor/icons/icon_graph_default_texture.svg +++ /dev/null @@ -1,5 +0,0 @@ -<svg width="14" height="14" version="1.1" viewBox="0 0 14 14" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1038.4)"> -<path transform="translate(0 1038.4)" d="m2 2v10h10v-10h-10zm9 2v5h-8l2-3 2 2 4-4z" fill="#eae068"/> -</g> -</svg> diff --git a/editor/icons/icon_graph_input.svg b/editor/icons/icon_graph_input.svg deleted file mode 100644 index c5034ecd2c..0000000000 --- a/editor/icons/icon_graph_input.svg +++ /dev/null @@ -1,5 +0,0 @@ -<svg width="14" height="14" version="1.1" viewBox="0 0 14 14" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1038.4)"> -<circle cx="7" cy="1045.4" r="6" fill="#f6f6f6"/> -</g> -</svg> diff --git a/editor/icons/icon_graph_rgb.svg b/editor/icons/icon_graph_rgb.svg deleted file mode 100644 index 403572a82e..0000000000 --- a/editor/icons/icon_graph_rgb.svg +++ /dev/null @@ -1,12 +0,0 @@ -<svg width="14" height="14" version="1.1" viewBox="0 0 14 14" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1038.4)" fill-opacity=".39216"> -<path d="m7 1039.4a4 4 0 0 0 -4 4 4 4 0 0 0 0.03906 0.5195 4 4 0 0 0 -2.0391 3.4805 4 4 0 0 0 4 4 4 4 0 0 0 1.998 -0.541 4 4 0 0 0 2.002 0.541 4 4 0 0 0 4 -4 4 4 0 0 0 -2.0371 -3.4824 4 4 0 0 0 0.03711 -0.5176 4 4 0 0 0 -4 -4z" fill="#fff"/> -<path d="m7 1040.4a3 3 0 0 0 -3 3 3 3 0 0 0 0.21094 1.1055 3 3 0 0 0 -2.2109 2.8945 3 3 0 0 0 3 3 3 3 0 0 0 2 -0.7676 3 3 0 0 0 2 0.7676 3 3 0 0 0 3 -3 3 3 0 0 0 -2.2148 -2.8906 3 3 0 0 0 0.21484 -1.1094 3 3 0 0 0 -3 -3z" fill="#fff"/> -<circle cx="7" cy="1043.4" r="3" fill="#f00"/> -<circle cx="5" cy="1047.4" r="3" fill="#00f"/> -<circle cx="9" cy="1047.4" r="3" fill="#0f0"/> -<circle cx="7" cy="1043.4" r="3" fill="#f00"/> -<circle cx="5" cy="1047.4" r="3" fill="#00f"/> -<circle cx="9" cy="1047.4" r="3" fill="#0f0"/> -</g> -</svg> diff --git a/editor/icons/icon_graph_rgb_op.svg b/editor/icons/icon_graph_rgb_op.svg deleted file mode 100644 index 6dbcd6ee44..0000000000 --- a/editor/icons/icon_graph_rgb_op.svg +++ /dev/null @@ -1,11 +0,0 @@ -<svg width="14" height="14" version="1.1" viewBox="0 0 14 14" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1038.4)"> -<path d="m4 1050.4h6v-10h-6z" fill="#fff" fill-rule="evenodd" stroke="#fff" stroke-linejoin="round" stroke-width="2"/> -<rect x="1" y="1041.4" width="2" height="2" fill="#fff"/> -<rect x="1" y="1047.4" width="2" height="2" fill="#fff"/> -<rect x="11" y="1044.4" width="2" height="2" fill="#fff"/> -<rect x="5" y="1041.4" width="4" height="2" fill="#ff4646" fill-opacity=".86275"/> -<rect x="5" y="1044.4" width="4" height="2" fill="#46ff46" fill-opacity=".86275"/> -<rect x="5" y="1047.4" width="4" height="2" fill="#4646ff" fill-opacity=".86275"/> -</g> -</svg> diff --git a/editor/icons/icon_graph_rgb_uniform.svg b/editor/icons/icon_graph_rgb_uniform.svg deleted file mode 100644 index 4244bd408a..0000000000 --- a/editor/icons/icon_graph_rgb_uniform.svg +++ /dev/null @@ -1,12 +0,0 @@ -<svg width="14" height="14" version="1.1" viewBox="0 0 14 14" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1038.4)"> -<path d="m2 1038.4c-1.1046 0-2 0.8954-2 2v10c0 1.1046 0.89543 2 2 2h10c1.1046 0 2-0.8954 2-2v-10c0-1.1046-0.89543-2-2-2z" fill="#fff"/> -<path transform="translate(0 1038.4)" d="m7 2a3 3 0 0 0 -3 3 3 3 0 0 0 0.21094 1.1055 3 3 0 0 0 -2.2109 2.8945 3 3 0 0 0 3 3 3 3 0 0 0 2 -0.76758 3 3 0 0 0 2 0.76758 3 3 0 0 0 3 -3 3 3 0 0 0 -2.2148 -2.8906 3 3 0 0 0 0.21484 -1.1094 3 3 0 0 0 -3 -3z" fill="#fff" fill-opacity=".39216"/> -<circle cx="7" cy="1043.4" r="3" fill="#f00" fill-opacity=".39216"/> -<circle cx="5" cy="1047.4" r="3" fill="#00f" fill-opacity=".39216"/> -<circle cx="9" cy="1047.4" r="3" fill="#0f0" fill-opacity=".39216"/> -<circle cx="7" cy="1043.4" r="3" fill="#f00" fill-opacity=".39216"/> -<circle cx="5" cy="1047.4" r="3" fill="#00f" fill-opacity=".39216"/> -<circle cx="9" cy="1047.4" r="3" fill="#0f0" fill-opacity=".39216"/> -</g> -</svg> diff --git a/editor/icons/icon_graph_scalar.svg b/editor/icons/icon_graph_scalar.svg deleted file mode 100644 index ba921a961c..0000000000 --- a/editor/icons/icon_graph_scalar.svg +++ /dev/null @@ -1,5 +0,0 @@ -<svg width="14" height="14" version="1.1" viewBox="0 0 14 14" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1038.4)"> -<path transform="translate(0 1038.4)" d="m6 2c-1.6569 0-3 1.3431-3 3s1.3431 3 3 3h2a1 1 0 0 1 1 1 1 1 0 0 1 -1 1h-5v2h5c1.6569 0 3-1.3431 3-3s-1.3431-3-3-3h-2a1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1h5v-2h-5z" fill="#cf68ea"/> -</g> -</svg> diff --git a/editor/icons/icon_graph_scalar_interp.svg b/editor/icons/icon_graph_scalar_interp.svg deleted file mode 100644 index edfbe36066..0000000000 --- a/editor/icons/icon_graph_scalar_interp.svg +++ /dev/null @@ -1,5 +0,0 @@ -<svg width="14" height="14" version="1.1" viewBox="0 0 14 14" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1038.4)"> -<path d="m2 1050.4 10-10" fill="none" stroke="#cf68ea" stroke-linecap="round" stroke-width="2"/> -</g> -</svg> diff --git a/editor/icons/icon_graph_scalar_op.svg b/editor/icons/icon_graph_scalar_op.svg deleted file mode 100644 index 34f7d9b2b1..0000000000 --- a/editor/icons/icon_graph_scalar_op.svg +++ /dev/null @@ -1,8 +0,0 @@ -<svg width="14" height="14" version="1.1" viewBox="0 0 14 14" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1038.4)" fill="#cf68ea"> -<path transform="translate(0 1038.4)" d="m4 1c-0.55226 1e-4 -0.99994 0.4477-1 1v10c5.52e-5 0.5523 0.44774 0.9999 1 1h6c0.55226-1e-4 0.99994-0.4477 1-1v-10c-5.5e-5 -0.5523-0.44774-0.9999-1-1zm1 3 4 3-4 3z" color="#000000" color-rendering="auto" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="block-progression:tb;isolation:auto;mix-blend-mode:normal;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none;white-space:normal"/> -<rect x="1" y="1041.4" width="2" height="2"/> -<rect x="1" y="1047.4" width="2" height="2"/> -<rect x="11" y="1044.4" width="2" height="2"/> -</g> -</svg> diff --git a/editor/icons/icon_graph_scalar_uniform.svg b/editor/icons/icon_graph_scalar_uniform.svg deleted file mode 100644 index d2ee2ec827..0000000000 --- a/editor/icons/icon_graph_scalar_uniform.svg +++ /dev/null @@ -1,5 +0,0 @@ -<svg width="14" height="14" version="1.1" viewBox="0 0 14 14" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1038.4)"> -<path transform="translate(0 1038.4)" d="m2 0a2 2 0 0 0 -2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2 -2v-10a2 2 0 0 0 -2 -2h-10zm4 2h5v2h-5a1 1 0 0 0 -1 1 1 1 0 0 0 1 1h2c1.6569 0 3 1.3431 3 3s-1.3431 3-3 3h-5v-2h5a1 1 0 0 0 1 -1 1 1 0 0 0 -1 -1h-2c-1.6569 0-3-1.3431-3-3s1.3431-3 3-3z" fill="#cf68ea"/> -</g> -</svg> diff --git a/editor/icons/icon_graph_scalars_to_vec.svg b/editor/icons/icon_graph_scalars_to_vec.svg deleted file mode 100644 index bd3bc0424a..0000000000 --- a/editor/icons/icon_graph_scalars_to_vec.svg +++ /dev/null @@ -1,11 +0,0 @@ -<svg width="14" height="14" version="1.1" viewBox="0 0 14 14" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> -<defs> -<linearGradient id="a" x1="1" x2="13.014" y1="7" y2="7" gradientUnits="userSpaceOnUse"> -<stop stop-color="#cf68ea" offset="0"/> -<stop stop-color="#b8ea68" offset="1"/> -</linearGradient> -</defs> -<g transform="translate(0 -1038.4)"> -<path transform="translate(0 1038.4)" d="m1.9902 0.99023a1.0001 1.0001 0 0 0 -0.69727 1.7168l3.293 3.293h-2.5859a1.0001 1.0001 0 1 0 0 2h2.5859l-3.293 3.293a1.0001 1.0001 0 1 0 1.4141 1.4141l4.707-4.707h4.5859a1.0001 1.0001 0 1 0 0 -2h-4.5859l-4.707-4.707a1.0001 1.0001 0 0 0 -0.7168 -0.30273z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="url(#a)" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> -</svg> diff --git a/editor/icons/icon_graph_texscreen.svg b/editor/icons/icon_graph_texscreen.svg deleted file mode 100644 index 6c26332203..0000000000 --- a/editor/icons/icon_graph_texscreen.svg +++ /dev/null @@ -1,6 +0,0 @@ -<svg width="14" height="14" version="1.1" viewBox="0 0 14 14" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1038.4)"> -<path d="m2 1041.4h10v8h-10z" fill="none" stroke="#f6f6f6" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/> -<rect x="3" y="1042.4" width="8" height="1" fill="#f6f6f6"/> -</g> -</svg> diff --git a/editor/icons/icon_graph_texture_uniform.svg b/editor/icons/icon_graph_texture_uniform.svg deleted file mode 100644 index 9e72743432..0000000000 --- a/editor/icons/icon_graph_texture_uniform.svg +++ /dev/null @@ -1,5 +0,0 @@ -<svg width="14" height="14" version="1.1" viewBox="0 0 14 14" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1038.4)"> -<path transform="translate(0 1038.4)" d="m2 0c-1.1046 0-2 0.8954-2 2v10c0 1.1046 0.89543 2 2 2h10c1.1046 0 2-0.8954 2-2v-10c0-1.1046-0.89543-2-2-2h-10zm0 2h10v10h-10v-10zm9 2l-4 4-2-2-2 3h8v-5z" fill="#eae068"/> -</g> -</svg> diff --git a/editor/icons/icon_graph_time.svg b/editor/icons/icon_graph_time.svg deleted file mode 100644 index 6227b53c62..0000000000 --- a/editor/icons/icon_graph_time.svg +++ /dev/null @@ -1,7 +0,0 @@ -<svg width="14" height="14" version="1.1" viewBox="0 0 14 14" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1038.4)" fill="#f6f6f6"> -<rect x="6" y="1042.4" width="2" height="4"/> -<rect x="6" y="1044.4" width="4" height="2"/> -<path transform="translate(0 1038.4)" d="m7 0a7 7 0 0 0 -7 7 7 7 0 0 0 7 7 7 7 0 0 0 7 -7 7 7 0 0 0 -7 -7zm0 2a5 5 0 0 1 5 5 5 5 0 0 1 -5 5 5 5 0 0 1 -5 -5 5 5 0 0 1 5 -5z"/> -</g> -</svg> diff --git a/editor/icons/icon_graph_vec_dp.svg b/editor/icons/icon_graph_vec_dp.svg deleted file mode 100644 index 0b24b47895..0000000000 --- a/editor/icons/icon_graph_vec_dp.svg +++ /dev/null @@ -1,7 +0,0 @@ -<svg width="14" height="14" version="1.1" viewBox="0 0 14 14" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1038.4)"> -<path d="m1 1042.4 2 6 2-6" fill="none" stroke="#b8ea68" stroke-linejoin="round" stroke-width="2"/> -<circle cx="7" cy="1046.4" r="1" fill="#b8ea68"/> -<path d="m9 1042.4 2 6 2-6" fill="none" stroke="#b8ea68" stroke-linejoin="round" stroke-width="2"/> -</g> -</svg> diff --git a/editor/icons/icon_graph_vec_interp.svg b/editor/icons/icon_graph_vec_interp.svg deleted file mode 100644 index a3df7ff93d..0000000000 --- a/editor/icons/icon_graph_vec_interp.svg +++ /dev/null @@ -1,5 +0,0 @@ -<svg width="14" height="14" version="1.1" viewBox="0 0 14 14" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1038.4)"> -<path d="m2 1050.4 10-10" fill="none" stroke="#b8ea68" stroke-linecap="round" stroke-width="2"/> -</g> -</svg> diff --git a/editor/icons/icon_graph_vec_length.svg b/editor/icons/icon_graph_vec_length.svg deleted file mode 100644 index cd2a39312a..0000000000 --- a/editor/icons/icon_graph_vec_length.svg +++ /dev/null @@ -1,7 +0,0 @@ -<svg width="14" height="14" version="1.1" viewBox="0 0 14 14" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1038.4)"> -<rect y="1039.4" width="2" height="12" fill="#b8ea68"/> -<rect x="12" y="1039.4" width="2" height="12" fill="#b8ea68"/> -<path d="m5 1043.4 2 5 2-5" fill="none" stroke="#b8ea68" stroke-linecap="square" stroke-linejoin="round" stroke-width="2"/> -</g> -</svg> diff --git a/editor/icons/icon_graph_vec_op.svg b/editor/icons/icon_graph_vec_op.svg deleted file mode 100644 index 2792d63378..0000000000 --- a/editor/icons/icon_graph_vec_op.svg +++ /dev/null @@ -1,5 +0,0 @@ -<svg width="14" height="14" version="1.1" viewBox="0 0 14 14" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1038.4)"> -<path transform="translate(0 1038.4)" d="m4 1c-0.55226 1e-4 -0.99994 0.4477-1 1v1h-2v2h2v4h-2v2h2v1c5.52e-5 0.5523 0.44774 0.9999 1 1h6c0.55226-1e-4 0.99994-0.4477 1-1v-4h2v-2h-2v-4c-5.5e-5 -0.5523-0.44774-0.9999-1-1h-6zm1 3l4 3-4 3v-6z" color="#000000" color-rendering="auto" fill="#b8ea68" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="block-progression:tb;isolation:auto;mix-blend-mode:normal;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none;white-space:normal"/> -</g> -</svg> diff --git a/editor/icons/icon_graph_vec_scalar_op.svg b/editor/icons/icon_graph_vec_scalar_op.svg deleted file mode 100644 index effcb596a1..0000000000 --- a/editor/icons/icon_graph_vec_scalar_op.svg +++ /dev/null @@ -1,6 +0,0 @@ -<svg width="14" height="14" version="1.1" viewBox="0 0 14 14" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1038.4)" fill-rule="evenodd" shape-rendering="auto"> -<path transform="translate(0 1038.4)" d="m3 7v2h-2v2h2v1c5.52e-5 0.5523 0.44774 0.9999 1 1h6c0.55226-1e-4 0.99994-0.4477 1-1v-4h2v-1h-4l-4 3v-3h-2z" color="#000000" color-rendering="auto" fill="#cf68ea" image-rendering="auto" solid-color="#000000" style="block-progression:tb;isolation:auto;mix-blend-mode:normal;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none;white-space:normal"/> -<path d="m3 1045.4v-2h-2v-2h2v-1c5.52e-5 -0.5523 0.44774-0.9999 1-1h6c0.55226 1e-4 0.99994 0.4477 1 1v4h2v1h-4l-4-3v3h-2z" color="#000000" color-rendering="auto" fill="#b8ea68" image-rendering="auto" solid-color="#000000" style="block-progression:tb;isolation:auto;mix-blend-mode:normal;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none;white-space:normal"/> -</g> -</svg> diff --git a/editor/icons/icon_graph_vec_to_scalars.svg b/editor/icons/icon_graph_vec_to_scalars.svg deleted file mode 100644 index 2ecacb8434..0000000000 --- a/editor/icons/icon_graph_vec_to_scalars.svg +++ /dev/null @@ -1,11 +0,0 @@ -<svg width="14" height="14" version="1.1" viewBox="0 0 14 14" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> -<defs> -<linearGradient id="a" x1="1" x2="13.014" y1="7" y2="7" gradientTransform="matrix(-1 0 0 1 14 1038.4)" gradientUnits="userSpaceOnUse"> -<stop stop-color="#cf68ea" offset="0"/> -<stop stop-color="#b8ea68" offset="1"/> -</linearGradient> -</defs> -<g transform="translate(0 -1038.4)"> -<path d="m12.01 1039.4a1.0001 1.0001 0 0 1 0.69726 1.7168l-3.293 3.293h2.5859a1.0001 1.0001 0 1 1 0 2h-2.5859l3.293 3.293a1.0001 1.0001 0 1 1 -1.4141 1.414l-4.707-4.707h-4.5859a1.0001 1.0001 0 1 1 0 -2h4.5859l4.707-4.707a1.0001 1.0001 0 0 1 0.7168 -0.3028z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="url(#a)" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> -</svg> diff --git a/editor/icons/icon_graph_vecs_to_xform.svg b/editor/icons/icon_graph_vecs_to_xform.svg deleted file mode 100644 index ba9526231a..0000000000 --- a/editor/icons/icon_graph_vecs_to_xform.svg +++ /dev/null @@ -1,11 +0,0 @@ -<svg width="14" height="14" version="1.1" viewBox="0 0 14 14" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> -<defs> -<linearGradient id="a" x1="1" x2="13.014" y1="7" y2="7" gradientTransform="translate(.00074682 1038.4)" gradientUnits="userSpaceOnUse"> -<stop stop-color="#b8ea68" offset="0"/> -<stop stop-color="#ea686c" offset="1"/> -</linearGradient> -</defs> -<g transform="translate(0 -1038.4)"> -<path d="m1.991 1039.4a1.0001 1.0001 0 0 0 -0.69726 1.7168l3.293 3.293h-2.5859a1.0001 1.0001 0 1 0 0 2h2.5859l-3.293 3.293a1.0001 1.0001 0 1 0 1.4141 1.414l4.707-4.707h4.5859a1.0001 1.0001 0 1 0 0 -2h-4.5859l-4.707-4.707a1.0001 1.0001 0 0 0 -0.7168 -0.3028z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="url(#a)" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> -</svg> diff --git a/editor/icons/icon_graph_vector.svg b/editor/icons/icon_graph_vector.svg deleted file mode 100644 index 81772fa4f5..0000000000 --- a/editor/icons/icon_graph_vector.svg +++ /dev/null @@ -1,5 +0,0 @@ -<svg width="14" height="14" version="1.1" viewBox="0 0 14 14" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1038.4)"> -<path d="m8 1038.4v2h-5v2h5v2l3-3zm-3.6562 5.6289-1.7148 1.0293 0.51367 0.8574 3 5c0.3885 0.647 1.3263 0.647 1.7148 0l3-5 0.51367-0.8574-1.7148-1.0293-0.51367 0.8574-2.1426 3.5703-2.1426-3.5703z" color="#000000" color-rendering="auto" fill="#b8ea68" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="block-progression:tb;isolation:auto;mix-blend-mode:normal;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none;white-space:normal"/> -</g> -</svg> diff --git a/editor/icons/icon_graph_vector_uniform.svg b/editor/icons/icon_graph_vector_uniform.svg deleted file mode 100644 index 66f31bf5dd..0000000000 --- a/editor/icons/icon_graph_vector_uniform.svg +++ /dev/null @@ -1,6 +0,0 @@ -<svg width="14" height="14" version="1.1" viewBox="0 0 14 14" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1038.4)"> -<path transform="translate(0 1038.4)" d="m2 0c-1.1046 0-2 0.89543-2 2v10c0 1.1046 0.89543 2 2 2h10c1.1046 0 2-0.89543 2-2v-10c0-1.1046-0.89543-2-2-2zm6 0 3 3-3 3v-2h-5v-2h5zm-3.6562 5.6289 0.51367 0.85742 2.1426 3.5703 2.1426-3.5703 0.51367-0.85742l1.7148 1.0293-0.51367 0.85742-3 5c-0.3885 0.64706-1.3263 0.64706-1.7148 0l-3-5-0.51367-0.85742z" fill="#b8ea68"/> -<path transform="translate(0 1038.4)" d="m23 0v2h-5v2h5v2l3-3zm-3.6562 5.6289-1.7148 1.0293 0.51367 0.85742 3 5c0.3885 0.64706 1.3263 0.64706 1.7148 0l3-5 0.51367-0.85742-1.7148-1.0293-0.51367 0.85742-2.1426 3.5703-2.1426-3.5703z" color="#000000" color-rendering="auto" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="block-progression:tb;isolation:auto;mix-blend-mode:normal;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none;white-space:normal"/> -</g> -</svg> diff --git a/editor/icons/icon_graph_xform.svg b/editor/icons/icon_graph_xform.svg deleted file mode 100644 index 95b0a2eff8..0000000000 --- a/editor/icons/icon_graph_xform.svg +++ /dev/null @@ -1,11 +0,0 @@ -<svg width="14" height="14" version="1.1" viewBox="0 0 14 14" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1038.4)"> -<rect x="1" y="1039.4" width="1" height="12" fill="#ea686c"/> -<rect x="1" y="1039.4" width="3" height="1" fill="#ea686c"/> -<rect x="1" y="1050.4" width="3" height="1" fill="#ea686c"/> -<rect x="10" y="1050.4" width="3" height="1" fill="#ea686c"/> -<rect x="10" y="1039.4" width="3" height="1" fill="#ea686c"/> -<rect x="12" y="1039.4" width="1" height="12" fill="#ea686c"/> -<path d="m4 1049.4v-7l3 3 3-3v7" fill="none" stroke="#ea686c" stroke-linejoin="round" stroke-width="2"/> -</g> -</svg> diff --git a/editor/icons/icon_graph_xform_mult.svg b/editor/icons/icon_graph_xform_mult.svg deleted file mode 100644 index 4d5593084e..0000000000 --- a/editor/icons/icon_graph_xform_mult.svg +++ /dev/null @@ -1,7 +0,0 @@ -<svg width="14" height="14" version="1.1" viewBox="0 0 14 14" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1038.4)"> -<path d="m1 1049.4v-7l2 3 2-3v7" fill="none" stroke="#ea686c" stroke-linejoin="round" stroke-width="2"/> -<path d="m9 1049.4v-7l2 3 2-3v7" fill="none" stroke="#ea686c" stroke-linejoin="round" stroke-width="2"/> -<circle cx="7" cy="1045.4" r="1" fill="#ea686c"/> -</g> -</svg> diff --git a/editor/icons/icon_graph_xform_scalar_func.svg b/editor/icons/icon_graph_xform_scalar_func.svg deleted file mode 100644 index 350d9e98d7..0000000000 --- a/editor/icons/icon_graph_xform_scalar_func.svg +++ /dev/null @@ -1,10 +0,0 @@ -<svg width="14" height="14" version="1.1" viewBox="0 0 14 14" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1038.4)" fill="#cf68ea"> -<rect x="6" y="1042.4" width="2" height="5"/> -<path transform="translate(0 1038.4)" d="m9.0703 1a3 3 0 0 0 -1.5703 0.40234 3 3 0 0 0 -1.5 2.5977h2a1 1 0 0 1 1 -1 1 1 0 0 1 1 1h2a3 3 0 0 0 -1.5 -2.5977 3 3 0 0 0 -1.4297 -0.40234z"/> -<rect x="10" y="1042.4" width="2" height="1"/> -<path transform="translate(0 1038.4)" d="m2 10a3 3 0 0 0 1.5 2.5977 3 3 0 0 0 3 0 3 3 0 0 0 1.5 -2.5977h-2a1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1h-2z"/> -<rect transform="scale(1,-1)" x="6" y="-1048.4" width="2" height="1"/> -<rect x="4" y="1044.4" width="6" height="2"/> -</g> -</svg> diff --git a/editor/icons/icon_graph_xform_to_vecs.svg b/editor/icons/icon_graph_xform_to_vecs.svg deleted file mode 100644 index 7da2834f43..0000000000 --- a/editor/icons/icon_graph_xform_to_vecs.svg +++ /dev/null @@ -1,11 +0,0 @@ -<svg width="14" height="14" version="1.1" viewBox="0 0 14 14" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> -<defs> -<linearGradient id="a" x1="1" x2="13.014" y1="7" y2="7" gradientTransform="matrix(-1 0 0 1 14 1038.4)" gradientUnits="userSpaceOnUse"> -<stop stop-color="#b8ea68" offset="0"/> -<stop stop-color="#ea686c" offset="1"/> -</linearGradient> -</defs> -<g transform="translate(0 -1038.4)"> -<path d="m12.01 1039.4a1.0001 1.0001 0 0 1 0.69726 1.7168l-3.293 3.293h2.5859a1.0001 1.0001 0 1 1 0 2h-2.5859l3.293 3.293a1.0001 1.0001 0 1 1 -1.4141 1.414l-4.707-4.707h-4.5859a1.0001 1.0001 0 1 1 0 -2h4.5859l4.707-4.707a1.0001 1.0001 0 0 1 0.7168 -0.3028z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="url(#a)" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> -</svg> diff --git a/editor/icons/icon_graph_xform_uniform.svg b/editor/icons/icon_graph_xform_uniform.svg deleted file mode 100644 index 08bd345bc4..0000000000 --- a/editor/icons/icon_graph_xform_uniform.svg +++ /dev/null @@ -1,5 +0,0 @@ -<svg width="14" height="14" version="1.1" viewBox="0 0 14 14" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1038.4)"> -<path transform="translate(0 1038.4)" d="m2 0c-1.1046 0-2 0.8954-2 2v10c0 1.1046 0.89543 2 2 2h10c1.1046 0 2-0.8954 2-2v-10c0-1.1046-0.89543-2-2-2h-10zm-1 1h1 2v1h-2v10h2v1h-2-1v-1-10-1zm9 0h3v11 1h-3v-1h2v-10h-2v-1zm-0.029297 2a1.0001 1.0001 0 0 1 1.0293 1v7h-2v-4.5859l-1.293 1.293a1.0001 1.0001 0 0 1 -1.4141 0l-1.293-1.293v4.5859h-2v-7a1.0001 1.0001 0 0 1 0.98438 -0.99805 1.0001 1.0001 0 0 1 0.72266 0.29102l2.293 2.293 2.293-2.293a1.0001 1.0001 0 0 1 0.67773 -0.29297z" fill="#ea686c"/> -</g> -</svg> diff --git a/editor/icons/icon_graph_xform_vec_func.svg b/editor/icons/icon_graph_xform_vec_func.svg deleted file mode 100644 index 29bff80cd5..0000000000 --- a/editor/icons/icon_graph_xform_vec_func.svg +++ /dev/null @@ -1,10 +0,0 @@ -<svg width="14" height="14" version="1.1" viewBox="0 0 14 14" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1038.4)" fill="#b8ea68"> -<rect x="6" y="1042.4" width="2" height="5"/> -<path transform="translate(0 1038.4)" d="m9.0703 1a3 3 0 0 0 -1.5703 0.40234 3 3 0 0 0 -1.5 2.5977h2a1 1 0 0 1 1 -1 1 1 0 0 1 1 1h2a3 3 0 0 0 -1.5 -2.5977 3 3 0 0 0 -1.4297 -0.40234z"/> -<rect x="10" y="1042.4" width="2" height="1"/> -<path transform="translate(0 1038.4)" d="m2 10a3 3 0 0 0 1.5 2.5977 3 3 0 0 0 3 0 3 3 0 0 0 1.5 -2.5977h-2a1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1h-2z"/> -<rect transform="scale(1,-1)" x="6" y="-1048.4" width="2" height="1"/> -<rect x="4" y="1044.4" width="6" height="2"/> -</g> -</svg> diff --git a/editor/icons/icon_graph_xform_vec_imult.svg b/editor/icons/icon_graph_xform_vec_imult.svg deleted file mode 100644 index edb68ffc4a..0000000000 --- a/editor/icons/icon_graph_xform_vec_imult.svg +++ /dev/null @@ -1,7 +0,0 @@ -<svg width="14" height="14" version="1.1" viewBox="0 0 14 14" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1038.4)"> -<path d="m1 1042.4 2 6 2-6" fill="none" stroke="#b8ea68" stroke-linejoin="round" stroke-width="2"/> -<circle cx="7" cy="1046.4" r="1" fill="#b8ea68"/> -<path d="m9 1049.4v-7l2 3 2-3v7" fill="none" stroke="#ea686c" stroke-linejoin="round" stroke-width="2"/> -</g> -</svg> diff --git a/editor/icons/icon_graph_xform_vec_mult.svg b/editor/icons/icon_graph_xform_vec_mult.svg deleted file mode 100644 index 1e5cbafdb2..0000000000 --- a/editor/icons/icon_graph_xform_vec_mult.svg +++ /dev/null @@ -1,7 +0,0 @@ -<svg width="14" height="14" version="1.1" viewBox="0 0 14 14" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1038.4)"> -<path d="m9 1042.4 2 6 2-6" fill="none" stroke="#b8ea68" stroke-linejoin="round" stroke-width="2"/> -<circle cx="7" cy="1046.4" r="1" fill="#b8ea68"/> -<path d="m1 1049.4v-7l2 3 2-3v7" fill="none" stroke="#ea686c" stroke-linejoin="round" stroke-width="2"/> -</g> -</svg> diff --git a/editor/icons/icon_group_viewport.svg b/editor/icons/icon_group_viewport.svg new file mode 100644 index 0000000000..350fb4103f --- /dev/null +++ b/editor/icons/icon_group_viewport.svg @@ -0,0 +1,7 @@ +<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m0 0v4h4v-4h-4zm6 0v6h-6v10h10v-6h6v-10h-10zm4 4h2v2h-2v-2zm2 8v4h4v-4h-4z" fill-opacity=".39216" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".98824" stroke-width=".5"/> +<path transform="translate(0 1036.4)" d="m7 1v6h-6v8h8v-6h6v-8zm2 2h4v4h-4z" fill="#e0e0e0"/> +<path transform="translate(0 1036.4)" d="m1 1v2c0 2.34e-5 0.446 0 1 0s1 2.34e-5 1 0v-2c0-2.341e-5 -0.446 0-1 0s-1-2.341e-5 -1 0zm12 0v2c0 2.34e-5 0.446 0 1 0s1 2.34e-5 1 0v-2c0-2.341e-5 -0.446 0-1 0s-1-2.341e-5 -1 0zm-12 12v2c0 2.3e-5 0.446 0 1 0s1 2.3e-5 1 0v-2c0-2.3e-5 -0.446 0-1 0s-1-2.3e-5 -1 0zm12 0v2c0 2.3e-5 0.446 0 1 0s1 2.3e-5 1 0v-2c0-2.3e-5 -0.446 0-1 0s-1-2.3e-5 -1 0z" fill="#fff"/> +</g> +</svg> diff --git a/editor/icons/icon_groups.svg b/editor/icons/icon_groups.svg index 37e40749b8..55cf3c48eb 100644 --- a/editor/icons/icon_groups.svg +++ b/editor/icons/icon_groups.svg @@ -1,7 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1036.4)"> -<rect x="1" y="1040.4" width="14" height="8" fill="none" stroke="#e0e0e0" stroke-linejoin="round" stroke-width="2"/> -<ellipse cx="5" cy="1044.4" rx="2" ry="2" fill="#e0e0e0"/> -<ellipse cx="11" cy="1044.4" rx="2" ry="2" fill="#e0e0e0"/> +<path transform="translate(0 1036.4)" d="m2 1a1.0001 1.0001 0 0 0 -1 1v12a1.0001 1.0001 0 0 0 1 1h12a1.0001 1.0001 0 0 0 1 -1v-12a1.0001 1.0001 0 0 0 -1 -1h-12zm1 2h10v10h-10v-10zm5 2a3 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 -3z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#e0e0e0" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> </g> </svg> diff --git a/editor/icons/icon_h_box_container.svg b/editor/icons/icon_h_box_container.svg index 48a1fc7d64..1428af8542 100644 --- a/editor/icons/icon_h_box_container.svg +++ b/editor/icons/icon_h_box_container.svg @@ -1,7 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#a5efac"> -<path transform="translate(0 1036.4)" d="m3 1c-1.1046 0-2 0.89543-2 2v10c0 1.1046 0.89543 2 2 2h10c1.1046 0 2-0.89543 2-2v-10c0-1.1046-0.89543-2-2-2zm0 2h10v10h-10z"/> -<rect x="5" y="1039.4" width="2" height="10"/> -<rect x="9" y="1039.4" width="2" height="10"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m3 1c-1.1046 0-2 0.89543-2 2v10c0 1.1046 0.89543 2 2 2h10c1.1046 0 2-0.89543 2-2v-10c0-1.1046-0.89543-2-2-2h-10zm0 2h2v10h-2v-10zm4 0h2v10h-2v-10zm4 0h2v10h-2v-10z" fill="#a5efac"/> </g> </svg> diff --git a/editor/icons/icon_h_separator.svg b/editor/icons/icon_h_separator.svg index 34689555b3..60a665c730 100644 --- a/editor/icons/icon_h_separator.svg +++ b/editor/icons/icon_h_separator.svg @@ -1,7 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#a5efac"> -<rect x="5" y="1038.4" width="6" height="3"/> -<rect transform="matrix(0,-1,-1,0,0,0)" x="-1045.4" y="-15" width="2" height="14"/> -<rect x="5" y="1047.4" width="6" height="3"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m5 2v3h6v-3h-6zm-4 5v2h14v-2h-14zm4 4v3h6v-3h-6z" fill="#a5efac"/> </g> </svg> diff --git a/editor/icons/icon_h_split_container.svg b/editor/icons/icon_h_split_container.svg index 9985fcccfe..1f84ef4353 100644 --- a/editor/icons/icon_h_split_container.svg +++ b/editor/icons/icon_h_split_container.svg @@ -1,8 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#a5efac"> -<path transform="translate(0 1036.4)" d="m3 1c-1.1046 0-2 0.89543-2 2v10c0 1.1046 0.89543 2 2 2h10c1.1046 0 2-0.89543 2-2v-10c0-1.1046-0.89543-2-2-2zm0 2h10v10h-10z"/> -<rect x="7" y="1039.4" width="2" height="10"/> -<path d="m9 1042.4v4l2-2z"/> -<path d="m7 1042.4-2 2 2 2z"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m3 1c-1.1046 0-2 0.89543-2 2v10c0 1.1046 0.89543 2 2 2h10c1.1046 0 2-0.89543 2-2v-10c0-1.1046-0.89543-2-2-2h-10zm0 2h4v3l-2 2 2 2v3h-4v-10zm6 0h4v10h-4v-3l2-2-2-2v-3z" fill="#a5efac"/> </g> </svg> diff --git a/editor/icons/icon_h_t_t_p_request.svg b/editor/icons/icon_h_t_t_p_request.svg index 27812cdd68..6568825af4 100644 --- a/editor/icons/icon_h_t_t_p_request.svg +++ b/editor/icons/icon_h_t_t_p_request.svg @@ -1,6 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#e0e0e0" fill-opacity=".99608"> -<path transform="translate(0 1036.4)" d="m1 10v2 1 2h1v-2h1v2h1v-5h-1v2h-1v-2h-1zm4 0v1h1v4h1v-4h1v-1h-3zm4 0v1h1v4h1v-4h1v-1h-3zm4 0v2 1 2h1v-2h1 1v-1-2h-2-1zm1 1h1v1h-1v-1z"/> -<path transform="translate(0 1036.4)" d="m4 1l-3 4h2v3h2v-3h2l-3-4zm7 0v3h-2l3 4 3-4h-2v-3h-2z" fill-rule="evenodd"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m4 1l-3 4h2v3h2v-3h2l-3-4zm7 0v3h-2l3 4 3-4h-2v-3h-2zm-10 9v2 1 2h1v-2h1v2h1v-5h-1v2h-1v-2h-1zm4 0v1h1v4h1v-4h1v-1h-3zm4 0v1h1v4h1v-4h1v-1h-3zm4 0v2 1 2h1v-2h1 1v-1-2h-2-1zm1 1h1v1h-1v-1z" fill="#e0e0e0" fill-opacity=".99608"/> </g> </svg> diff --git a/editor/icons/icon_headphones.svg b/editor/icons/icon_headphones.svg index e23a6c54f0..0df3f6f85c 100644 --- a/editor/icons/icon_headphones.svg +++ b/editor/icons/icon_headphones.svg @@ -1,11 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#e0e0e0"> -<path d="m1 1046.4v3h2v2h2v-5h-4z"/> -<path d="m11 1046.4v5h2v-2h2v-3h-4z"/> -<path d="m8 1037.4a7 7 0 0 0 -7 7h2a5 5 0 0 1 5 -5 5 5 0 0 1 5 5h2a7 7 0 0 0 -7 -7z"/> -<rect x="1" y="1044.4" width="2" height="2"/> -<rect x="13" y="1044.4" width="2" height="2"/> -<circle cx="3" cy="1049.4" r="2"/> -<circle transform="scale(-1,1)" cx="-13" cy="1049.4" r="2"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m8 1a7 7 0 0 0 -7 7v2 3a2 2 0 0 0 2 2h2v-5h-2v-2a5 5 0 0 1 5 -5 5 5 0 0 1 5 5v2h-2v3 2h2a2 2 0 0 0 2 -2v-3-2a7 7 0 0 0 -7 -7z" fill="#e0e0e0"/> </g> </svg> diff --git a/editor/icons/icon_instance.svg b/editor/icons/icon_instance.svg index 8fecb9696a..5ef7be9331 100644 --- a/editor/icons/icon_instance.svg +++ b/editor/icons/icon_instance.svg @@ -1,6 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1036.4)"> -<path d="m5 1047.4 6-6" fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-width="2"/> -<path transform="translate(0 1036.4)" d="m11 1c-2.1973 0-4 1.8027-4 4 0 0.35477 0.062329 0.69321 0.15039 1.0215l2.3945-2.3945c0.36302-0.38506 0.87563-0.62695 1.4551-0.62695 1.1164 0 2 0.8836 2 2 0 0.57388-0.23667 1.0829-0.61523 1.4453l-2.4043 2.4043c0.32773 0.087749 0.66541 0.15039 1.0195 0.15039 2.1973 0 4-1.8027 4-4s-1.8027-4-4-4zm-6 6c-2.1973 0-4 1.8027-4 4s1.8027 4 4 4 4-1.8027 4-4c0-0.35412-0.062641-0.6918-0.15039-1.0195l-2.4043 2.4043c-0.36245 0.37857-0.87143 0.61523-1.4453 0.61523-1.1164 0-2-0.8836-2-2 0-0.57944 0.24189-1.0921 0.62695-1.4551l2.3945-2.3945c-0.32827-0.088062-0.66671-0.15039-1.0215-0.15039z" color="#000000" color-rendering="auto" fill="#e0e0e0" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="block-progression:tb;isolation:auto;mix-blend-mode:normal;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none;white-space:normal"/> +<path transform="translate(0 1036.4)" d="m11 1c-2.1973 0-4 1.8027-4 4 0 0.35477 0.062329 0.69321 0.15039 1.0215l2.3945-2.3945c0.36302-0.38506 0.87563-0.62695 1.4551-0.62695 1.1164 0 2 0.8836 2 2 0 0.57388-0.23667 1.0829-0.61523 1.4453l-2.4043 2.4043c0.32773 0.087749 0.66541 0.15039 1.0195 0.15039 2.1973 0 4-1.8027 4-4s-1.8027-4-4-4zm-0.013672 3.002a1 1 0 0 0 -0.69336 0.29102l-6 6a1 1 0 0 0 0 1.4141 1 1 0 0 0 1.4141 0l6-6a1 1 0 0 0 0 -1.4141 1 1 0 0 0 -0.7207 -0.29102zm-5.9863 2.998c-2.1973 0-4 1.8027-4 4s1.8027 4 4 4 4-1.8027 4-4c0-0.35412-0.062641-0.6918-0.15039-1.0195l-2.4043 2.4043c-0.36245 0.37857-0.87143 0.61523-1.4453 0.61523-1.1164 0-2-0.8836-2-2 0-0.57944 0.24189-1.0921 0.62695-1.4551l2.3945-2.3945c-0.32827-0.088062-0.66671-0.15039-1.0215-0.15039z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#e0e0e0" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="filter-blend-mode:normal;filter-gaussianBlur-deviation:0;font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> </g> </svg> diff --git a/editor/icons/icon_integer.svg b/editor/icons/icon_integer.svg deleted file mode 100644 index bcd952f635..0000000000 --- a/editor/icons/icon_integer.svg +++ /dev/null @@ -1,7 +0,0 @@ -<svg width="14" height="14" version="1.1" viewBox="0 0 14 14" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1038.4)" fill="#cf68ea"> -<rect x="6" y="1040.4" width="2" height="10"/> -<rect x="4" y="1039.4" width="6" height="2"/> -<rect x="4" y="1049.4" width="6" height="2"/> -</g> -</svg> diff --git a/editor/icons/icon_interp_wrap_clamp.svg b/editor/icons/icon_interp_wrap_clamp.svg index d49a450d2e..8ed349c185 100644 --- a/editor/icons/icon_interp_wrap_clamp.svg +++ b/editor/icons/icon_interp_wrap_clamp.svg @@ -1,9 +1,5 @@ <svg width="16" height="8" version="1.1" viewBox="0 0 16 8" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1044.4)"> -<rect x="1" y="1045.4" width="2" height="6" rx="1.7383e-5" ry="1.7383e-5" fill="#e0e0e0"/> -<rect x="13" y="1045.4" width="2" height="6" rx="1.7383e-5" ry="1.7383e-5" fill="#e0e0e0"/> -<path d="m5 1048.4h6" fill="none" stroke="#e0e0e0" stroke-width="2"/> -<path d="m6 1046.4-2 2 2 2" fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/> -<path d="m10 1046.4 2 2-2 2" fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/> +<path transform="translate(0 1044.4)" d="m1 1v6h2v-2.9863-3.0137h-2zm2 3.0137a1.0001 1.0001 0 0 0 0.29297 0.69336l2 2a1 1 0 0 0 1.4141 0 1 1 0 0 0 0 -1.4141l-0.29297-0.29297h3.1719l-0.29297 0.29297a1 1 0 0 0 0 1.4141 1 1 0 0 0 1.4141 0l2-2a1.0001 1.0001 0 0 0 0.29297 -0.72266 1.0001 1.0001 0 0 0 -0.29297 -0.69141l-2-2a1 1 0 0 0 -0.7207 -0.29102 1 1 0 0 0 -0.69336 0.29102 1 1 0 0 0 0 1.4141l0.29297 0.29297h-3.1719l0.29297-0.29297a1 1 0 0 0 0 -1.4141 1 1 0 0 0 -0.7207 -0.29102 1 1 0 0 0 -0.69336 0.29102l-2 2a1.0001 1.0001 0 0 0 -0.29297 0.7207zm10-0.029297v3.0156h2v-6h-2v2.9844z" fill="#e0e0e0"/> </g> </svg> diff --git a/editor/icons/icon_interp_wrap_loop.svg b/editor/icons/icon_interp_wrap_loop.svg index 85d17cb50d..69c4d31d79 100644 --- a/editor/icons/icon_interp_wrap_loop.svg +++ b/editor/icons/icon_interp_wrap_loop.svg @@ -1,10 +1,5 @@ <svg width="16" height="8" version="1.1" viewBox="0 0 16 8" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1044.4)" fill="#e0e0e0"> -<path transform="translate(0 1044.4)" d="m12 1v2a1 1 0 0 1 1 1 1 1 0 0 1 -1 1v2a3 3 0 0 0 3 -3 3 3 0 0 0 -3 -3z"/> -<path transform="translate(0 1044.4)" d="m4 1a3 3 0 0 0 -3 3 3 3 0 0 0 3 3v-2a1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1v-2z"/> -<rect x="9" y="1045.4" width="3" height="2" rx="6.5185e-6" ry="1.7383e-5"/> -<rect x="4" y="1049.4" width="3" height="2" rx="6.5185e-6" ry="1.7383e-5"/> -<path d="m7 1048.4v4l3-2z" fill-rule="evenodd"/> -<path d="m9 1044.4v4l-3-2z" fill-rule="evenodd"/> +<path transform="translate(0 1044.4)" d="m9 0l-3 2 3 2v-1h3a1 1 0 0 1 1 1 1 1 0 0 1 -1 1v2a3 3 0 0 0 3 -3 3 3 0 0 0 -3 -3h-3v-1zm-5 1a3 3 0 0 0 -3 3 3 3 0 0 0 3 3h3v1l3-2-3-2v1h-3a1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1v-2z"/> </g> </svg> diff --git a/editor/icons/icon_invalid_key.svg b/editor/icons/icon_invalid_key.svg deleted file mode 100644 index f1df51f7c3..0000000000 --- a/editor/icons/icon_invalid_key.svg +++ /dev/null @@ -1,5 +0,0 @@ -<svg width="8" height="8" version="1.1" viewBox="0 0 8 8" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1044.4)"> -<path d="m0.46447 1046.2 2.1213 2.1213-2.1213 2.1213 1.4142 1.4142l2.1213-2.1213 2.1213 2.1213 1.4142-1.4142-2.1213-2.1213 2.1213-2.1213-1.4142-1.4142-2.1213 2.1213-2.1213-2.1213-1.4142 1.4142z" fill="#ff8484"/> -</g> -</svg> diff --git a/editor/icons/icon_inverse_kinematics.svg b/editor/icons/icon_inverse_kinematics.svg index fa99b6c7cc..aac40f6015 100644 --- a/editor/icons/icon_inverse_kinematics.svg +++ b/editor/icons/icon_inverse_kinematics.svg @@ -1,12 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1036.4)"> -<path d="m3 1039.4v12" fill="none" stroke="#fc9c9c" stroke-width="2"/> -<circle cx="3" cy="1039.4" r="2" fill="#fc9c9c"/> -<path d="m10 1039.4h-7" fill="#fc9c9c" fill-rule="evenodd" stroke="#fc9c9c" stroke-width="2"/> -<circle cx="11" cy="1039.4" r="2" fill="#fc9c9c"/> -<rect x="8" y="1044.4" width="6" height="2" fill="#fc9c9c"/> -<path d="m11 1039.4v6" fill="none" stroke="#fc9c9c" stroke-width="2"/> -<path d="m10 1046.4v4l-3-2 1-2z" fill="#fc9c9c" fill-rule="evenodd"/> -<path d="m12 1046.4v4l3-2-1-2z" fill="#fc9c9c" fill-rule="evenodd"/> +<path transform="translate(0 1036.4)" d="m3 1a2 2 0 0 0 -2 2 2 2 0 0 0 1 1.7305v10.27h2v-10.271a2 2 0 0 0 0.73047 -0.72852h4.541a2 2 0 0 0 0.72852 0.73047v3.2695h-2v2l-1 2 3 2v-4h2v4l3-2-1-2v-2h-2v-3.2715a2 2 0 0 0 1 -1.7285 2 2 0 0 0 -2 -2 2 2 0 0 0 -1.7305 1h-4.541a2 2 0 0 0 -1.7285 -1z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#fc9c9c" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="filter-blend-mode:normal;filter-gaussianBlur-deviation:0;font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> </g> </svg> diff --git a/editor/icons/icon_item_list.svg b/editor/icons/icon_item_list.svg index e01c4cd098..8b2221ade6 100644 --- a/editor/icons/icon_item_list.svg +++ b/editor/icons/icon_item_list.svg @@ -1,14 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#a5efac"> -<path transform="translate(0 1036.4)" d="m3 1c-1.1046 0-2 0.89543-2 2v10c0 1.1046 0.89543 2 2 2h10c1.1046 0 2-0.89543 2-2v-10c0-1.1046-0.89543-2-2-2zm0 2h10v10h-10z"/> -<rect x="4" y="1040.4" width="2" height="2"/> -<rect x="7" y="1040.4" width="2" height="2"/> -<rect x="10" y="1040.4" width="2" height="2"/> -<rect x="4" y="1043.4" width="2" height="2"/> -<rect x="7" y="1043.4" width="2" height="2"/> -<rect x="10" y="1043.4" width="2" height="2"/> -<rect x="4" y="1046.4" width="2" height="2"/> -<rect x="7" y="1046.4" width="2" height="2"/> -<rect x="10" y="1046.4" width="2" height="2"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m3 1c-1.1046 0-2 0.89543-2 2v10c0 1.1046 0.89543 2 2 2h10c1.1046 0 2-0.89543 2-2v-10c0-1.1046-0.89543-2-2-2h-10zm0 2h10v10h-10v-10zm1 1v2h2v-2h-2zm3 0v2h2v-2h-2zm3 0v2h2v-2h-2zm-6 3v2h2v-2h-2zm3 0v2h2v-2h-2zm3 0v2h2v-2h-2zm-6 3v2h2v-2h-2zm3 0v2h2v-2h-2zm3 0v2h2v-2h-2z" fill="#a5efac"/> </g> </svg> diff --git a/editor/icons/icon_key.svg b/editor/icons/icon_key.svg index 041b820e00..cc152b58a5 100644 --- a/editor/icons/icon_key.svg +++ b/editor/icons/icon_key.svg @@ -1,7 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#e0e0e0" fill-opacity=".99608"> -<path transform="translate(0 1036.4)" d="m11 4a4 4 0 0 0 -4 4 4 4 0 0 0 4 4 4 4 0 0 0 4 -4 4 4 0 0 0 -4 -4zm0 2a2 2 0 0 1 2 2 2 2 0 0 1 -2 2 2 2 0 0 1 -2 -2 2 2 0 0 1 2 -2z"/> -<rect x="1" y="1043.4" width="8" height="2"/> -<rect x="2" y="1045.4" width="3" height="2"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m11 4a4 4 0 0 0 -3.8691 3h-6.1309v2h1v2h3v-2h2.1328a4 4 0 0 0 3.8672 3 4 4 0 0 0 4 -4 4 4 0 0 0 -4 -4zm0 2a2 2 0 0 1 2 2 2 2 0 0 1 -2 2 2 2 0 0 1 -2 -2 2 2 0 0 1 2 -2z" fill="#e0e0e0" fill-opacity=".99608"/> </g> </svg> diff --git a/editor/icons/icon_key_move_disabled.svg b/editor/icons/icon_key_move_disabled.svg deleted file mode 100644 index 05c158dc3c..0000000000 --- a/editor/icons/icon_key_move_disabled.svg +++ /dev/null @@ -1,4 +0,0 @@ -<svg width="16" height="16" style="isolation:isolate" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m7.984 1.002c-0.259 4e-3 -0.507 0.108-0.691 0.291l-2 2 1.414 1.414 1.293-1.293 1.293 1.293 1.414-1.414-2-2c-0.191-0.191-0.452-0.296-0.722-0.291h-1e-3zm-4.691 4.291l-2 2c-0.39 0.391-0.39 1.024 0 1.414l2 2 1.414-1.414-1.293-1.293 1.293-1.293-1.414-1.414zm9.414 0l-1.414 1.414 1.293 1.293-1.293 1.293 1.414 1.414 2-2c0.39-0.39 0.39-1.023 0-1.414l-2-2zm-6 6l-1.414 1.414 2 2c0.391 0.391 1.024 0.391 1.414 0l2-2-1.414-1.414-1.293 1.293-1.293-1.293z" fill="#e0e0e0" fill-opacity=".5" fill-rule="evenodd"/> -<path d="m5.168 7.595l2.427-2.427c0.224-0.224 0.586-0.224 0.81 0l2.427 2.427c0.224 0.224 0.224 0.586 0 0.81l-2.427 2.427c-0.224 0.224-0.586 0.224-0.81 0l-2.427-2.427c-0.224-0.224-0.224-0.586 0-0.81z" fill="#84c2ff" fill-opacity=".5"/> -</svg> diff --git a/editor/icons/icon_key_move_enabled.svg b/editor/icons/icon_key_move_enabled.svg deleted file mode 100644 index 2d455f2d81..0000000000 --- a/editor/icons/icon_key_move_enabled.svg +++ /dev/null @@ -1,4 +0,0 @@ -<svg width="16" height="16" style="isolation:isolate" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m7.984 1.002c-0.259 4e-3 -0.507 0.108-0.691 0.291l-2 2 1.414 1.414 1.293-1.293 1.293 1.293 1.414-1.414-2-2c-0.191-0.191-0.452-0.296-0.722-0.291h-1e-3zm-4.691 4.291l-2 2c-0.39 0.391-0.39 1.024 0 1.414l2 2 1.414-1.414-1.293-1.293 1.293-1.293-1.414-1.414zm9.414 0l-1.414 1.414 1.293 1.293-1.293 1.293 1.414 1.414 2-2c0.39-0.39 0.39-1.023 0-1.414l-2-2zm-6 6l-1.414 1.414 2 2c0.391 0.391 1.024 0.391 1.414 0l2-2-1.414-1.414-1.293 1.293-1.293-1.293z" fill="#e0e0e0" fill-opacity=".99608" fill-rule="evenodd"/> -<path d="m5.168 7.595l2.427-2.427c0.224-0.224 0.586-0.224 0.81 0l2.427 2.427c0.224 0.224 0.224 0.586 0 0.81l-2.427 2.427c-0.224 0.224-0.586 0.224-0.81 0l-2.427-2.427c-0.224-0.224-0.224-0.586 0-0.81z" fill="#84C2FF"/> -</svg> diff --git a/editor/icons/icon_key_position.svg b/editor/icons/icon_key_position.svg new file mode 100644 index 0000000000..203b697ad2 --- /dev/null +++ b/editor/icons/icon_key_position.svg @@ -0,0 +1,5 @@ +<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m8 1c-0.195 0-0.38964 0.07519-0.53906 0.22461l-3.2363 3.2363c-0.29884 0.29884-0.29884 0.77929 0 1.0781l3.2363 3.2363c0.29884 0.29884 0.77929 0.29884 1.0781 0l3.2363-3.2363c0.29884-0.29884 0.29884-0.77929 0-1.0781l-3.2363-3.2363c-0.14942-0.14942-0.34406-0.22461-0.53906-0.22461zm-7 7v5c0 1.6569 1.3471 3.114 3 3h1v-2h-1c-0.55228-1e-5 -0.99999-0.44772-1-1v-5h-2zm7 2c-1.645 0-3 1.355-3 3s1.355 3 3 3 3-1.355 3-3-1.355-3-3-3zm3 3c0 1.6569 1.3431 3 3 3h1v-2h-1c-0.55228-1e-5 -0.99999-0.44772-1-1 1e-5 -0.55228 0.44772-0.99999 1-1h1v-2h-1c-1.6569 0-3 1.3431-3 3zm-3-1c0.56413 0 1 0.4359 1 1 0 0.5642-0.43587 1-1 1s-1-0.4358-1-1c0-0.5641 0.43587-1 1-1z" fill="#e0e0e0" fill-opacity=".99608"/> +</g> +</svg> diff --git a/editor/icons/icon_key_rotate_disabled.svg b/editor/icons/icon_key_rotate_disabled.svg deleted file mode 100644 index 6394bfd82d..0000000000 --- a/editor/icons/icon_key_rotate_disabled.svg +++ /dev/null @@ -1,4 +0,0 @@ -<svg width="16" height="16" style="isolation:isolate" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m8.088 1.001c-0.102-1e-3 -0.203 0-0.305 2e-3 -0.233 8e-3 -0.466 0.027-0.697 0.057-2.973 0.392-5.366 2.633-5.951 5.574-0.46 2.319 0.281 4.712 1.97 6.365h-1.105v2h4c0.308 1e-3 0.599-0.141 0.788-0.384 0.19-0.243 0.257-0.559 0.183-0.858l-1-4-1.942 0.487 0.281 1.121c-0.84-0.92-1.308-2.12-1.31-3.366 0-2.761 2.239-5 5-5 1.326 0 2.598 0.527 3.536 1.465 0.937 0.938 1.464 2.209 1.464 3.535-1e-3 1.326-0.529 2.597-1.467 3.534l1.416 1.416c2.12-2.121 2.654-5.356 1.328-8.045-1.165-2.362-3.556-3.869-6.189-3.903z" fill="#e0e0e0" fill-opacity=".5"/> -<path d="m5.168 7.595l2.427-2.427c0.224-0.224 0.586-0.224 0.81 0l2.427 2.427c0.224 0.224 0.224 0.586 0 0.81l-2.427 2.427c-0.224 0.224-0.586 0.224-0.81 0l-2.427-2.427c-0.224-0.224-0.224-0.586 0-0.81z" fill="#84c2ff" fill-opacity=".5"/> -</svg> diff --git a/editor/icons/icon_key_rotate_enabled.svg b/editor/icons/icon_key_rotate_enabled.svg deleted file mode 100644 index 1dcb12c8ab..0000000000 --- a/editor/icons/icon_key_rotate_enabled.svg +++ /dev/null @@ -1,4 +0,0 @@ -<svg width="16" height="16" style="isolation:isolate" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m8.088 1.001c-0.102-1e-3 -0.203 0-0.305 2e-3 -0.233 8e-3 -0.466 0.027-0.697 0.057-2.973 0.392-5.366 2.633-5.951 5.574-0.46 2.319 0.281 4.712 1.97 6.365h-1.105v2h4c0.308 1e-3 0.599-0.141 0.788-0.384 0.19-0.243 0.257-0.559 0.183-0.858l-1-4-1.942 0.487 0.281 1.121c-0.84-0.92-1.308-2.12-1.31-3.366 0-2.761 2.239-5 5-5 1.326 0 2.598 0.527 3.536 1.465 0.937 0.938 1.464 2.209 1.464 3.535-1e-3 1.326-0.529 2.597-1.467 3.534l1.416 1.416c2.12-2.121 2.654-5.356 1.328-8.045-1.165-2.362-3.556-3.869-6.189-3.903z" fill="#e0e0e0" fill-opacity=".99608"/> -<path d="m5.168 7.595l2.427-2.427c0.224-0.224 0.586-0.224 0.81 0l2.427 2.427c0.224 0.224 0.224 0.586 0 0.81l-2.427 2.427c-0.224 0.224-0.586 0.224-0.81 0l-2.427-2.427c-0.224-0.224-0.224-0.586 0-0.81z" fill="#84C2FF"/> -</svg> diff --git a/editor/icons/icon_key_rotation.svg b/editor/icons/icon_key_rotation.svg new file mode 100644 index 0000000000..0f975631b2 --- /dev/null +++ b/editor/icons/icon_key_rotation.svg @@ -0,0 +1,5 @@ +<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m8 1c-0.195 0-0.38964 0.07519-0.53906 0.22461l-3.2363 3.2363c-0.29884 0.29884-0.29884 0.77929 0 1.0781l3.2363 3.2363c0.29884 0.29884 0.77929 0.29884 1.0781 0l3.2363-3.2363c0.29884-0.29884 0.29884-0.77929 0-1.0781l-3.2363-3.2363c-0.14942-0.14942-0.34406-0.22461-0.53906-0.22461zm3 7v5c0 1.6569 1.3431 3 3 3h1v-2h-1c-0.55228 0-0.99999-0.4477-1-1v-1h2v-2h-2v-2h-2zm0 5c0-1.645-1.355-3-3-3s-3 1.355-3 3 1.355 3 3 3 3-1.355 3-3zm-7-3c-1.6569 0-3 1.3431-3 3v3h2v-3c9.6e-6 -0.5523 0.44772-1 1-1h1v-2h-1zm4 2c0.56413 0 1 0.4359 1 1 0 0.5642-0.43587 1-1 1s-1-0.4358-1-1c0-0.5641 0.43587-1 1-1z" fill="#e0e0e0" fill-opacity=".99608"/> +</g> +</svg> diff --git a/editor/icons/icon_key_scale.svg b/editor/icons/icon_key_scale.svg new file mode 100644 index 0000000000..eaa12fdf0e --- /dev/null +++ b/editor/icons/icon_key_scale.svg @@ -0,0 +1,5 @@ +<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m8 1c-0.195 0-0.38964 0.07519-0.53906 0.22461l-3.2363 3.2363c-0.29884 0.29884-0.29884 0.77929 0 1.0781l3.2363 3.2363c0.29884 0.29884 0.77929 0.29884 1.0781 0l3.2363-3.2363c0.29884-0.29884 0.29884-0.77929 0-1.0781l-3.2363-3.2363c-0.14942-0.14942-0.34406-0.22461-0.53906-0.22461zm3 7v5c0 1.6569 1.3431 3 3 3h1v-2h-1c-0.55228-1e-5 -0.99999-0.44772-1-1v-5h-2zm-8 2c-0.71466-1e-4 -1.3751 0.3811-1.7324 1-0.35727 0.6188-0.35727 1.3812 0 2 0.35733 0.6189 1.0178 1.0001 1.7324 1h-2v2h2c0.71466 1e-4 1.3751-0.3811 1.7324-1 0.35727-0.6188 0.35727-1.3812 0-2-0.35733-0.6189-1.0178-1.0001-1.7324-1h2v-2h-2zm6 0c-1.6569 0-3 1.3431-3 3s1.3431 3 3 3h1v-2h-1c-0.55228-1e-5 -0.99999-0.44772-1-1 9.6e-6 -0.55228 0.44772-0.99999 1-1h1v-2h-1z" fill="#e0e0e0" fill-opacity=".99608"/> +</g> +</svg> diff --git a/editor/icons/icon_key_scale_disabled.svg b/editor/icons/icon_key_scale_disabled.svg deleted file mode 100644 index 9601e4925b..0000000000 --- a/editor/icons/icon_key_scale_disabled.svg +++ /dev/null @@ -1,4 +0,0 @@ -<svg width="16" height="16" style="isolation:isolate" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m9 1c-0.552 0-1 0.448-1 1s0.448 1 1 1h2.586l-1.293 1.293 1.414 1.414 1.293-1.293v2.586c0 0.552 0.448 1 1 1s1-0.448 1-1v-5c0-0.552-0.448-1-1-1h-5zm-7 7c-0.552 0-1 0.448-1 1v5c0 0.552 0.448 1 1 1h5c0.552 0 1-0.448 1-1s-0.448-1-1-1h-2.586l1.293-1.293-1.414-1.414-1.293 1.293v-2.586c0-0.552-0.448-1-1-1z" fill="#e0e0e0" fill-opacity=".5" fill-rule="evenodd"/> -<path d="m5.168 7.595l2.427-2.427c0.224-0.224 0.586-0.224 0.81 0l2.427 2.427c0.224 0.224 0.224 0.586 0 0.81l-2.427 2.427c-0.224 0.224-0.586 0.224-0.81 0l-2.427-2.427c-0.224-0.224-0.224-0.586 0-0.81z" fill="#84c2ff" fill-opacity=".5"/> -</svg> diff --git a/editor/icons/icon_key_scale_enabled.svg b/editor/icons/icon_key_scale_enabled.svg deleted file mode 100644 index f00f3db35f..0000000000 --- a/editor/icons/icon_key_scale_enabled.svg +++ /dev/null @@ -1,4 +0,0 @@ -<svg width="16" height="16" style="isolation:isolate" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m9 1c-0.552 0-1 0.448-1 1s0.448 1 1 1h2.586l-1.293 1.293 1.414 1.414 1.293-1.293v2.586c0 0.552 0.448 1 1 1s1-0.448 1-1v-5c0-0.552-0.448-1-1-1h-5zm-7 7c-0.552 0-1 0.448-1 1v5c0 0.552 0.448 1 1 1h5c0.552 0 1-0.448 1-1s-0.448-1-1-1h-2.586l1.293-1.293-1.414-1.414-1.293 1.293v-2.586c0-0.552-0.448-1-1-1z" fill="#e0e0e0" fill-opacity=".99608" fill-rule="evenodd"/> -<path d="m5.168 7.595l2.427-2.427c0.224-0.224 0.586-0.224 0.81 0l2.427 2.427c0.224 0.224 0.224 0.586 0 0.81l-2.427 2.427c-0.224 0.224-0.586 0.224-0.81 0l-2.427-2.427c-0.224-0.224-0.224-0.586 0-0.81z" fill="#84C2FF"/> -</svg> diff --git a/editor/icons/icon_keyboard.svg b/editor/icons/icon_keyboard.svg index ce98e47ab4..ca58ec6cb2 100644 --- a/editor/icons/icon_keyboard.svg +++ b/editor/icons/icon_keyboard.svg @@ -1,7 +1,6 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1036.4)" fill-opacity=".99608"> -<path transform="translate(0 1036.4)" d="m1 4v9a2 2 0 0 0 2 2h10a2 2 0 0 0 2 -2v-9h-1v9a0.99998 0.99998 0 0 1 -1 1h-10a1 1 0 0 1 -1 -1v-9h-1z" fill="#e0e0e0"/> +<path transform="translate(0 1036.4)" d="m4 2a1 1 0 0 0 -1 1v9.084a1 0.91667 0 0 0 1 0.91602h8a1 0.91667 0 0 0 1 -0.91602v-9.084a1 1 0 0 0 -1 -1h-8zm-3 2v9a2 2 0 0 0 2 2h10a2 2 0 0 0 2 -2v-9h-1v9a0.99998 0.99998 0 0 1 -1 1h-10a1 1 0 0 1 -1 -1v-9h-1zm4 0h2v3l2-3h2l-2 3 2 4h-2l-2-4v4h-2v-7z" fill="#e0e0e0"/> <rect x="27" y="1038.4" width="7" height="14" fill="#fff"/> -<path transform="translate(0 1036.4)" d="m4 2a1 1 0 0 0 -1 1v9.084a1 0.91667 0 0 0 1 0.91602h8a1 0.91667 0 0 0 1 -0.91602v-9.084a1 1 0 0 0 -1 -1h-8zm1 2h2v3l2-3h2l-2 3 2 4h-2l-2-4v4h-2v-7z" fill="#e0e0e0"/> </g> </svg> diff --git a/editor/icons/icon_kinematic_body.svg b/editor/icons/icon_kinematic_body.svg index 393e21a529..6f8d69fa53 100644 --- a/editor/icons/icon_kinematic_body.svg +++ b/editor/icons/icon_kinematic_body.svg @@ -1,5 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m4 4v1h1v-1h-1zm1 1v1h-1v1h-1v1h-1v1 2h1v-2h1v1 1h1v-1h5v1h1v-2h1v2h1v-2-1h-1v-1h-1v-1h-1v-1h-1v1h-3v-1h-1zm5 0h1v-1h-1v1zm0 6h-2v1h2v-1zm-5 0v1h2v-1h-2zm0-4h1v1h-1v-1zm4 0h1v1h-1v-1z" fill="#fc9c9c" fill-opacity=".99608"/> +<path transform="translate(0 1036.4)" d="m6 1c-0.55401 0-1 0.44599-1 1v3c0 0.55401 0.44599 1 1 1h1v0.99023a1.0001 1.0001 0 0 0 -0.31641 0.0625l-2.0508 0.68359-0.68359-2.0508a1.0001 1.0001 0 0 0 -0.99023 -0.69727 1.0001 1.0001 0 0 0 -0.9082 1.3281l1 3a1.0001 1.0001 0 0 0 1.2656 0.63281l1.6836-0.56055v0.61133c0 0.040884 0.018715 0.075662 0.023438 0.11523l-4.5781 3.0527a1.0001 1.0001 0 1 0 1.1094 1.6641l5.0566-3.3711 1.4941 2.9863a1.0001 1.0001 0 0 0 1.2109 0.50195l3-1a1.0001 1.0001 0 1 0 -0.63281 -1.8965l-2.1777 0.72461-0.97461-1.9512c0.2759-0.17764 0.46875-0.47227 0.46875-0.82617v-1h1.3828l0.72266 1.4473a1.0001 1.0001 0 1 0 1.7891 -0.89453l-1-2a1.0001 1.0001 0 0 0 -0.89453 -0.55273h-3v-1h1c0.55401 0 1-0.44599 1-1v-3c0-0.55401-0.44599-1-1-1h-4zm0 2h1v2h-1v-2z" fill="#fc9c9c" fill-opacity=".99608"/> </g> </svg> diff --git a/editor/icons/icon_kinematic_body_2d.svg b/editor/icons/icon_kinematic_body_2d.svg index e269efd12a..51026e5f28 100644 --- a/editor/icons/icon_kinematic_body_2d.svg +++ b/editor/icons/icon_kinematic_body_2d.svg @@ -1,5 +1,7 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m4 4v1h1v-1h-1zm1 1v1h-1v1h-1v1h-1v1 2h1v-2h1v1 1h1v-1h5v1h1v-2h1v2h1v-2-1h-1v-1h-1v-1h-1v-1h-1v1h-3v-1h-1zm5 0h1v-1h-1v1zm0 6h-2v1h2v-1zm-5 0v1h2v-1h-2zm0-4h1v1h-1v-1zm4 0h1v1h-1v-1z" fill="#a5b7f3" fill-opacity=".98824"/> +<g transform="translate(.49212 -.0044019)" fill="#a5b7f5" fill-opacity=".98824"> +<path transform="translate(0 1036.4)" d="m6 1c-0.55401 0-1 0.44599-1 1v3c0 0.55401 0.44599 1 1 1h1v0.99023a1.0001 1.0001 0 0 0 -0.31641 0.0625l-2.0508 0.68359-0.68359-2.0508a1.0001 1.0001 0 0 0 -0.99023 -0.69727 1.0001 1.0001 0 0 0 -0.9082 1.3281l1 3a1.0001 1.0001 0 0 0 1.2656 0.63281l1.6836-0.56055v0.61133c0 0.04088 0.018715 0.07566 0.023437 0.11523l-4.5781 3.0527a1.0001 1.0001 0 1 0 1.1094 1.6641l5.0566-3.3711 1.4941 2.9863a1.0001 1.0001 0 0 0 1.2109 0.50195l3-1a1.0001 1.0001 0 1 0 -0.63281 -1.8965l-2.1777 0.72461-0.97461-1.9512c0.2759-0.17764 0.46875-0.47227 0.46875-0.82617v-1h1.3828l0.72266 1.4473a1.0001 1.0001 0 1 0 1.7891 -0.89453l-1-2a1.0001 1.0001 0 0 0 -0.89453 -0.55273h-3v-1h1c0.55401 0 1-0.44599 1-1v-3c0-0.55401-0.44599-1-1-1zm0 2h1v2h-1z" fill="#a5b7f5" fill-opacity=".98824"/> +</g> </g> </svg> diff --git a/editor/icons/icon_light_occluder_2d.svg b/editor/icons/icon_light_occluder_2d.svg index f7eb588e74..153de7eede 100644 --- a/editor/icons/icon_light_occluder_2d.svg +++ b/editor/icons/icon_light_occluder_2d.svg @@ -1,11 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#a5b7f3" fill-opacity=".98824"> -<rect x="1" y="1039.4" width="14" height="2"/> -<rect x="1" y="1042.4" width="14" height="2"/> -<rect x="1" y="1045.4" width="14" height="2"/> -<rect x="1" y="1048.4" width="14" height="2"/> -<rect x="2" y="1037.4" width="1" height="14"/> -<rect x="13" y="1037.4" width="1" height="14"/> -<rect x="1" y="1037.4" width="14" height=".99998"/> +<g transform="translate(0 -1036.4)"> +<path d="m8 1037.4c-2.7614 0-5 2.2386-5 5 0.00253 1.9858 1.18 3.7819 3 4.5762v2.4238h4v-2.4199c1.8213-0.7949 2.999-2.5929 3-4.5801 0-2.7614-2.2386-5-5-5zm0 2v6c-1.6569 0-3-1.3431-3-3s1.3431-3 3-3zm-1 11v1h2v-1z" fill="#a5b7f3" fill-opacity=".98824"/> </g> </svg> diff --git a/editor/icons/icon_line_edit.svg b/editor/icons/icon_line_edit.svg index 209f0e1940..13a4f3c2c2 100644 --- a/editor/icons/icon_line_edit.svg +++ b/editor/icons/icon_line_edit.svg @@ -1,6 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#a5efac"> -<path transform="translate(0 1036.4)" d="m1 11c0 1.1046 0.89543 2 2 2h10c1.1046 0 2-0.89543 2-2h-2-10-2z"/> -<rect x="2" y="1040.4" width="2" height="5"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m2 4v5h2v-5h-2zm-1 7c0 1.1046 0.89543 2 2 2h10c1.1046 0 2-0.89543 2-2h-2-10-2z" fill="#a5efac"/> </g> </svg> diff --git a/editor/icons/icon_link_button.svg b/editor/icons/icon_link_button.svg index f2fad1f259..0e13db7477 100644 --- a/editor/icons/icon_link_button.svg +++ b/editor/icons/icon_link_button.svg @@ -1,6 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#a5efac"> -<path transform="translate(0 1036.4)" d="m6 7a0.99998 0.99998 0 0 0 -1 1 0.99998 0.99998 0 0 0 1 1h4a0.99998 0.99998 0 0 0 1 -1 0.99998 0.99998 0 0 0 -1 -1h-4z"/> -<path transform="translate(0 1036.4)" d="m6 3a5 5 0 0 0 -4.3301 2.5 5 5 0 0 0 0 5 5 5 0 0 0 4.3301 2.5h1v-2h-1a3 3 0 0 1 -3 -3 3 3 0 0 1 3 -3h1v-2h-1zm3 0v2h1a3 3 0 0 1 3 3 3 3 0 0 1 -3 3h-1v2h1a5 5 0 0 0 4.3301 -2.5 5 5 0 0 0 0 -5 5 5 0 0 0 -4.3301 -2.5h-1z"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m6 3a5 5 0 0 0 -4.3301 2.5 5 5 0 0 0 0 5 5 5 0 0 0 4.3301 2.5h1v-2h-1a3 3 0 0 1 -3 -3 3 3 0 0 1 3 -3h1v-2h-1zm3 0v2h1a3 3 0 0 1 3 3 3 3 0 0 1 -3 3h-1v2h1a5 5 0 0 0 4.3301 -2.5 5 5 0 0 0 0 -5 5 5 0 0 0 -4.3301 -2.5h-1zm-3 4a0.99998 0.99998 0 0 0 -1 1 0.99998 0.99998 0 0 0 1 1h4a0.99998 0.99998 0 0 0 1 -1 0.99998 0.99998 0 0 0 -1 -1h-4z" fill="#a5efac"/> </g> </svg> diff --git a/editor/icons/icon_list_select.svg b/editor/icons/icon_list_select.svg index a37a4830f3..d619d84fd9 100644 --- a/editor/icons/icon_list_select.svg +++ b/editor/icons/icon_list_select.svg @@ -1,6 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#e0e0e0"> -<path transform="translate(0 1036.4)" d="m1 1v14h8.2578l-0.82227-2h-5.4355v-2h4.6113l-0.82227-2h-3.7891v-2h3.8867a1.5002 1.5002 0 0 1 1.0977 -0.49805v-0.0019531a1.5002 1.5002 0 0 1 0.58594 0.11133l0.94531 0.38867h0.48438v0.19922l2 0.82227v-7.0215h-11zm2 2h7v2h-7v-2zm7.7559 7.7559l0.52344 1.2734a1.5002 1.5002 0 0 1 0.48047 -0.26953 1.5002 1.5002 0 0 1 0.24023 -0.43945v-0.050781l-1.2441-0.51367z" fill-opacity=".99608"/> -<path d="m16 1047.7-8-3.291 3.291 8 0.9471-2.8201 1.8836 1.8835 0.9418-0.9418-1.8836-1.8835z"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m1 1v14h8.2578l-0.82227-2h-5.4355v-2h4.6113l-0.82227-2h-3.7891v-2h3.8867a1.5002 1.5002 0 0 1 1.0977 -0.49805v-0.0019531a1.5002 1.5002 0 0 1 0.58594 0.11133l0.94531 0.38867h0.48438v0.19922l2 0.82227v-7.0215h-11zm2 2h7v2h-7v-2zm5 5l3.291 8 0.94726-2.8203 1.8828 1.8828 0.94336-0.94141-1.8848-1.8828 2.8203-0.94726-8-3.291z" fill="#e0e0e0" fill-opacity=".99608"/> </g> </svg> diff --git a/editor/icons/icon_listener.svg b/editor/icons/icon_listener.svg index 2b4b87e6d0..3624e5a085 100644 --- a/editor/icons/icon_listener.svg +++ b/editor/icons/icon_listener.svg @@ -1,8 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1036.4)"> -<path d="m13.928 1038.4-1.7383 1.0039a6 6 0 0 1 0.81055 2.9961 6 6 0 0 1 -0.80859 2.998l1.7363 1.002a8 8 0 0 0 0 -8z" fill="#fc9c9c"/> -<rect x="3" y="1049.4" width="1" height="2" fill="#fc9c9c"/> -<path transform="translate(0 1036.4)" d="m6 1a5 5 0 0 0 -5 5h2a3 3 0 0 1 3 -3 3 3 0 0 1 3 3h2a5 5 0 0 0 -5 -5z" fill="#fc9c9c"/> -<path d="m10 1042.4c0 4-3 4-3 5 0 3-2 3-3 3" fill="none" stroke="#fc9c9c" stroke-width="2"/> +<path transform="translate(0 1036.4)" d="m6 1a5 5 0 0 0 -5 5h2a3 3 0 0 1 3 -3 3 3 0 0 1 3 3c0 1.75-0.54175 2.3583-1.1406 2.8574-0.29944 0.2495-0.62954 0.44071-0.97656 0.69141-0.17351 0.1253-0.35729 0.26529-0.53711 0.49219-0.17982 0.227-0.3457 0.58398-0.3457 0.95898 0 1.2778-0.31632 1.5742-0.63867 1.7676-0.32236 0.1934-0.86133 0.23242-1.3613 0.23242h-1v2h1c0.5 0 1.461 0.038922 2.3887-0.51758 0.87316-0.5239 1.4826-1.6633 1.5566-3.2266 0.011365-0.0098 0.027247-0.024684 0.10938-0.083984 0.21547-0.1556 0.63537-0.40194 1.0859-0.77734 0.90112-0.751 1.8594-2.1445 1.8594-4.3945a5 5 0 0 0 -5 -5zm7.9277 1l-1.7383 1.0039a6 6 0 0 1 0.81055 2.9961 6 6 0 0 1 -0.80859 2.998l1.7363 1.002a8 8 0 0 0 0 -8z" fill="#fc9c9c"/> </g> </svg> diff --git a/editor/icons/icon_lock.svg b/editor/icons/icon_lock.svg index b0b0125648..1202f1d86f 100644 --- a/editor/icons/icon_lock.svg +++ b/editor/icons/icon_lock.svg @@ -1,8 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#e0e0e0"> -<path transform="translate(0 1036.4)" d="m2 8v7h12v-7h-12zm5 2h2v3h-2v-3z"/> -<path transform="translate(0 1036.4)" d="m8 1a5 5 0 0 0 -5 5h2a3 3 0 0 1 3 -3 3 3 0 0 1 3 3h2a5 5 0 0 0 -5 -5z"/> -<rect x="3" y="1042.4" width="2" height="2"/> -<rect x="11" y="1042.4" width="2" height="2"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m8 1a5 5 0 0 0 -5 5v2h-1v7h12v-7h-1v-2a5 5 0 0 0 -5 -5zm0 2a3 3 0 0 1 3 3v2h-6v-2a3 3 0 0 1 3 -3zm-1 7h2v3h-2v-3z" fill="#e0e0e0"/> </g> </svg> diff --git a/editor/icons/icon_lock_viewport.svg b/editor/icons/icon_lock_viewport.svg new file mode 100644 index 0000000000..54dc9f6b82 --- /dev/null +++ b/editor/icons/icon_lock_viewport.svg @@ -0,0 +1,6 @@ +<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m8 0a6 6 0 0 0 -6 6v1h-1v9h14v-9h-1v-1a6 6 0 0 0 -6 -6zm0 4c1.1046 0 2 0.89543 2 2v1h-4v-1c0-1.1046 0.89543-2 2-2z" fill-opacity=".39216" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".98824" stroke-width="4"/> +<path transform="translate(0 1036.4)" d="m8 1a5 5 0 0 0 -5 5v2h-1v7h12v-7h-1v-2a5 5 0 0 0 -5 -5zm0 2a3 3 0 0 1 3 3v2h-6v-2a3 3 0 0 1 3 -3zm-1 7h2v3h-2v-3z" fill="#e0e0e0"/> +</g> +</svg> diff --git a/editor/icons/icon_loop_interpolation.svg b/editor/icons/icon_loop_interpolation.svg index ab2e564f78..247d01b113 100644 --- a/editor/icons/icon_loop_interpolation.svg +++ b/editor/icons/icon_loop_interpolation.svg @@ -1,10 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#e0e0e0" fill-opacity=".99608"> -<circle cx="3" cy="1048.4" r="2"/> -<path transform="translate(0 1036.4)" d="m4 3a2 2 0 0 0 -1.7324 1 2 2 0 0 0 -0.26562 1h-0.0019531v0.046875 6.9531h2v-5-2h2v-2h-2z" color="#000000" color-rendering="auto" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="block-progression:tb;isolation:auto;mix-blend-mode:normal;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none;white-space:normal"/> -<path d="m6 1037.4v6l4-3z" fill-rule="evenodd"/> -<circle cx="13" cy="1040.4" r="2"/> -<path transform="translate(0 1036.4)" d="m12 4v5 2h-2v2h2a2 2 0 0 0 1.7324 -1 2 2 0 0 0 0.26562 -1h0.001953v-7h-2z" color="#000000" color-rendering="auto" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="block-progression:tb;isolation:auto;mix-blend-mode:normal;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none;white-space:normal"/> -<path d="m10 1045.4v6l-4-3z" fill-rule="evenodd"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m6 1v2h-2a2 2 0 0 0 -1.7324 1 2 2 0 0 0 -0.26562 1h-0.0019531v0.046875 5.2246a2 2 0 0 0 -1 1.7285 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -1 -1.7305v-3.2695-2h2v2l4-3-4-3zm7 1a2 2 0 0 0 -2 2 2 2 0 0 0 1 1.7305v3.2695 2h-2v-2l-4 3 4 3v-2h2a2 2 0 0 0 1.7324 -1 2 2 0 0 0 0.26562 -1h0.001953v-5.2715a2 2 0 0 0 1 -1.7285 2 2 0 0 0 -2 -2z" fill="#e0e0e0" fill-opacity=".99608"/> </g> </svg> diff --git a/editor/icons/icon_matrix.svg b/editor/icons/icon_matrix.svg deleted file mode 100644 index e14566f816..0000000000 --- a/editor/icons/icon_matrix.svg +++ /dev/null @@ -1,19 +0,0 @@ -<svg width="14" height="14" version="1.1" viewBox="0 0 14 14" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1038.4)" fill="#ea686c"> -<rect x="1" y="1039.4" width="1" height="12"/> -<rect x="1" y="1039.4" width="3" height="1"/> -<rect x="1" y="1050.4" width="3" height="1"/> -<rect x="10" y="1050.4" width="3" height="1"/> -<rect x="10" y="1039.4" width="3" height="1"/> -<rect x="12" y="1039.4" width="1" height="12"/> -<rect x="3" y="1041.4" width="2" height="2"/> -<rect x="6" y="1041.4" width="2" height="2"/> -<rect x="9" y="1041.4" width="2" height="2"/> -<rect x="3" y="1044.4" width="2" height="2"/> -<rect x="6" y="1044.4" width="2" height="2"/> -<rect x="9" y="1044.4" width="2" height="2"/> -<rect x="3" y="1047.4" width="2" height="2"/> -<rect x="6" y="1047.4" width="2" height="2"/> -<rect x="9" y="1047.4" width="2" height="2"/> -</g> -</svg> diff --git a/editor/icons/icon_menu_button.svg b/editor/icons/icon_menu_button.svg index 28fafcc465..fa24532f24 100644 --- a/editor/icons/icon_menu_button.svg +++ b/editor/icons/icon_menu_button.svg @@ -1,6 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#a5efac"> -<path transform="translate(0 1036.4)" d="m1 1v4h14v-4h-14zm5 1h4l-2 2-2-2z"/> -<path transform="translate(0 1036.4)" d="m2 6a1 1 0 0 0 -1 1v7a1 1 0 0 0 1 1h12a1 1 0 0 0 1 -1v-7a1 1 0 0 0 -1 -1h-12zm1 2h10v2h-10v-2zm0 3h10v2h-10v-2z"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m1 1v4h14v-4h-14zm5 1h4l-2 2-2-2zm-4 4a1 1 0 0 0 -1 1v7a1 1 0 0 0 1 1h12a1 1 0 0 0 1 -1v-7a1 1 0 0 0 -1 -1h-12zm1 2h10v2h-10v-2zm0 3h10v2h-10v-2z" fill="#a5efac"/> </g> </svg> diff --git a/editor/icons/icon_mesh_instance.svg b/editor/icons/icon_mesh_instance.svg index 12599bd78b..3342a3e06d 100644 --- a/editor/icons/icon_mesh_instance.svg +++ b/editor/icons/icon_mesh_instance.svg @@ -1,13 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1036.4)"> -<circle cx="3" cy="1049.4" r="2" fill="#fc9c9c" fill-opacity=".99608"/> -<rect x="2" y="1039.4" width="2" height="8.5" fill="#fc9c9c" fill-opacity=".99608"/> -<circle cx="3" cy="1039.4" r="2" fill="#fc9c9c" fill-opacity=".99608"/> -<rect transform="rotate(90)" x="1038.4" y="-11.5" width="2" height="8.5" fill="#fc9c9c" fill-opacity=".99608"/> -<circle cx="13" cy="1039.4" r="2" fill="#fc9c9c" fill-opacity=".99608"/> -<rect x="12" y="1039.1" width="2" height="8.5" fill="#fc9c9c" fill-opacity=".99608"/> -<circle cx="13" cy="1049.4" r="2" fill="#fc9c9c" fill-opacity=".99608"/> -<rect transform="rotate(90)" x="1048.4" y="-12.25" width="2" height="8.5" fill="#fc9c9c" fill-opacity=".99608"/> -<path d="m3 1039.4 10 10" fill="none" stroke="#fc9c9c" stroke-opacity=".99608" stroke-width="2"/> +<path transform="translate(0 1036.4)" d="m3 1a2 2 0 0 0 -2 2 2 2 0 0 0 1 1.7305v6.541a2 2 0 0 0 -1 1.7285 2 2 0 0 0 2 2 2 2 0 0 0 1.7305 -1h6.541a2 2 0 0 0 1.7285 1 2 2 0 0 0 2 -2 2 2 0 0 0 -1.0312 -1.75h0.03125v-6.5215a2 2 0 0 0 1 -1.7285 2 2 0 0 0 -2 -2 2 2 0 0 0 -1.7305 1h-6.541a2 2 0 0 0 -1.7285 -1zm2.4141 3h5.8574a2 2 0 0 0 0.72852 0.73047v5.8555l-6.5859-6.5859zm-1.4141 1.4141l6.5859 6.5859h-5.8574a2 2 0 0 0 -0.72852 -0.73047v-5.8555z" fill="#fc9c9c" fill-opacity=".99608"/> </g> </svg> diff --git a/editor/icons/icon_mini_aabb.svg b/editor/icons/icon_mini_aabb.svg index d9c710ee1c..1af05f9b68 100644 --- a/editor/icons/icon_mini_aabb.svg +++ b/editor/icons/icon_mini_aabb.svg @@ -1,10 +1,6 @@ <svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1040.4)"> -<path d="m5 1041.4a3 3 0 0 0 -3 3 3 3 0 0 0 3 3h2v-6h-2zm0 2v2a1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1z" fill="#ee7991"/> -<path d="m3 1046.4a3 3 0 0 0 -3 3 3 3 0 0 0 3 3h2v-6h-2zm0 2v2a1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1z" fill="#f39bad"/> -<path d="m13 1043.4a3 3 0 0 1 3 3h-2a1 1 0 0 0 -1 -1v-2z" fill="#ee7991"/> -<path d="m13 1049.4a3 3 0 0 0 3 -3h-2a1 1 0 0 1 -1 1v2z" fill="#ee7991"/> -<rect transform="matrix(0,1,1,0,0,0)" x="1041.4" y="11" width="8" height="2" fill="#ee7991"/> -<path d="m8 1044.4v8h2a3 3 0 0 0 3 -3 3 3 0 0 0 -3 -3v-2h-2zm2 4a1 1 0 0 1 1 1 1 1 0 0 1 -1 1v-2z" fill="#f39bad"/> +<path transform="translate(0 1040.4)" d="m5 1a3 3 0 0 0 -3 3 3 3 0 0 0 0.77734 2.0117 3 3 0 0 0 -2.7773 2.9883 3 3 0 0 0 3 3h2v-5h2v-6h-2zm6 0v5.1738a3 3 0 0 0 -1 -0.17383v-2h-2v8h2a3 3 0 0 0 3 -3 3 3 0 0 0 3 -3 3 3 0 0 0 -3 -3v-2h-2zm-6 2v2a1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1zm8 2a1 1 0 0 1 1 1 1 1 0 0 1 -1 1v-2zm-10 3v2a1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1zm7 0a1 1 0 0 1 1 1 1 1 0 0 1 -1 1v-2z" fill="#ee7991"/> +<path transform="translate(0 1040.4)" d="m8 4v8h2a3 3 0 0 0 3 -3 3 3 0 0 0 -3 -3v-2h-2zm-5 2a3 3 0 0 0 -3 3 3 3 0 0 0 3 3h2v-6h-2zm0 2v2a1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1zm7 0a1 1 0 0 1 1 1 1 1 0 0 1 -1 1v-2z" fill="#fff" fill-opacity=".23529"/> </g> </svg> diff --git a/editor/icons/icon_mini_array.svg b/editor/icons/icon_mini_array.svg index a1ec948063..4a279bf87b 100644 --- a/editor/icons/icon_mini_array.svg +++ b/editor/icons/icon_mini_array.svg @@ -1,13 +1,5 @@ <svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1040.4)" fill="#e0e0e0"> -<rect x="11" y="1047.4" width="2" height="3"/> -<path d="m14 1044.4a3 3 0 0 0 -3 3h2a1 1 0 0 1 1 -1v-2z"/> -<rect x="7" y="1047.4" width="2" height="3"/> -<path d="m10 1044.4a3 3 0 0 0 -3 3h2a1 1 0 0 1 1 -1v-2z"/> -<path d="m4 1050.4a3 3 0 0 1 -3 -3h2a1 1 0 0 0 1 1v2z"/> -<path d="m4 1044.4a3 3 0 0 0 -3 3h2a1 1 0 0 1 1 -1v-2z"/> -<rect transform="scale(1,-1)" x="4" y="-1050.4" width="2" height="6"/> -<rect x="10" y="1044.4" width="1" height="2"/> -<rect x="14" y="1044.4" width="1" height="2"/> +<g transform="translate(0 -1040.4)"> +<path transform="translate(0 1040.4)" d="m4 4a3 3 0 0 0 -3 3 3 3 0 0 0 3 3h2v-6h-2zm6 0a3 3 0 0 0 -3 3v3h2v-3a1 1 0 0 1 1 -1h1v-2h-1zm4 0a3 3 0 0 0 -3 3v3h2v-3a1 1 0 0 1 1 -1h1v-2h-1zm-10 2v2a1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1z" fill="#e0e0e0"/> </g> </svg> diff --git a/editor/icons/icon_mini_basis.svg b/editor/icons/icon_mini_basis.svg index e0dc132d12..21b4f29aa4 100644 --- a/editor/icons/icon_mini_basis.svg +++ b/editor/icons/icon_mini_basis.svg @@ -1,19 +1,6 @@ <svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1040.4)"> -<rect transform="scale(-1,1)" x="-2" y="1044.4" width="2" height="6" fill="#e3ec69"/> -<rect transform="scale(-1,1)" x="-2" y="1044.4" width="1" height="2" fill="#e3ec69"/> -<path d="m2 1044.4a3 3 0 0 1 3 3h-2a1 1 0 0 0 -1 -1z" fill="#e3ec69"/> -<path d="m2 1050.4a3 3 0 0 0 3 -3h-2a1 1 0 0 1 -1 1z" fill="#e3ec69"/> -<rect transform="scale(-1,1)" x="-2" y="1042.4" width="2" height="3.9999" fill="#e3ec69"/> -<rect transform="scale(-1,1)" x="-9" y="1044.4" width="2" height="2" fill="#e3ec69"/> -<path d="m7 1048.4a2 2 0 0 1 -1.7321 -1 2 2 0 0 1 0 -2 2 2 0 0 1 1.7321 -1" fill="#e3ec69"/> -<path transform="scale(-1,1)" d="m-7 1050.4a2 2 0 0 1 -1.7321 -1 2 2 0 0 1 0 -2 2 2 0 0 1 1.7321 -1" fill="#e3ec69"/> -<rect transform="scale(-1,1)" x="-7" y="1048.4" width="2" height="2" fill="#e3ec69"/> -<rect x="10" y="1046.4" width="2" height="3.9999" fill="#eef39f"/> -<rect x="10" y="1042.4" width="2" height="2" fill="#eef39f"/> -<rect transform="scale(-1,1)" x="-16" y="1044.4" width="2" height="2" fill="#e3ec69"/> -<path d="m14 1048.4a2 2 0 0 1 -1.7321 -1 2 2 0 0 1 0 -2 2 2 0 0 1 1.7321 -1" fill="#e3ec69"/> -<path transform="scale(-1,1)" d="m-14 1050.4a2 2 0 0 1 -1.7321 -1 2 2 0 0 1 0 -2 2 2 0 0 1 1.7321 -1" fill="#e3ec69"/> -<rect transform="scale(-1,1)" x="-14" y="1048.4" width="2" height="2" fill="#e3ec69"/> +<path transform="translate(0 1040.4)" d="m0 2v4 4h2a3 3 0 0 0 3 -3 3 3 0 0 0 -3 -3v-2h-2zm10 0v2h2v-2h-2zm-3 2a2 2 0 0 0 -1.7324 1 2 2 0 0 0 0 2 2 2 0 0 0 1.7324 1h-2v2h2a2 2 0 0 0 1.7324 -1 2 2 0 0 0 0 -2 2 2 0 0 0 -1.7324 -1h2v-2h-2zm7 0a2 2 0 0 0 -1.7324 1 2 2 0 0 0 0 2 2 2 0 0 0 1.7324 1h-2v-2h-2v4h2 2a2 2 0 0 0 1.7324 -1 2 2 0 0 0 0 -2 2 2 0 0 0 -1.7324 -1h2v-2h-2zm-12 2a1 1 0 0 1 1 1 1 1 0 0 1 -1 1v-2z" fill="#e3ec69"/> +<path d="m10 1042.4v2h2v-2zm0 4v4h2v-4z" fill="#fff" fill-opacity=".39216"/> </g> </svg> diff --git a/editor/icons/icon_mini_boolean.svg b/editor/icons/icon_mini_boolean.svg index b8861c9f17..b1e169d73c 100644 --- a/editor/icons/icon_mini_boolean.svg +++ b/editor/icons/icon_mini_boolean.svg @@ -1,13 +1,5 @@ <svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1040.4)" fill="#8da6f0"> -<rect transform="scale(-1,1)" x="-2" y="1044.4" width="2" height="6"/> -<rect transform="scale(-1,1)" x="-2" y="1044.4" width="1" height="2"/> -<path d="m2 1044.4a3 3 0 0 1 3 3h-2a1 1 0 0 0 -1 -1v-2z"/> -<rect transform="scale(1,-1)" x="13" y="-1047.4" width="2" height="5"/> -<path d="m2 1050.4a3 3 0 0 0 3 -3h-2a1 1 0 0 1 -1 1v2z"/> -<rect transform="scale(-1,1)" x="-2" y="1042.4" width="2" height="3.9999"/> -<path d="m16 1050.4a3 3 0 0 1 -3 -3h2a1 1 0 0 0 1 1v2z"/> -<path d="m7 1044.4a3 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 -3zm0 2a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1z"/> -<path d="m11 1044.4a3 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 -3zm0 2a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1z"/> +<g transform="translate(0 -1040.4)"> +<path transform="translate(0 1040.4)" d="m0 2v4 4h2a3 3 0 0 0 2.5 -1.3457 3 3 0 0 0 2.5 1.3457 3 3 0 0 0 2 -0.76758 3 3 0 0 0 2 0.76758 3 3 0 0 0 2.5 -1.3457 3 3 0 0 0 2.5 1.3457v-2a1 1 0 0 1 -1 -1v-5h-2v2.7695a3 3 0 0 0 -2 -0.76953 3 3 0 0 0 -2 0.76758 3 3 0 0 0 -2 -0.76758 3 3 0 0 0 -2.5 1.3457 3 3 0 0 0 -2.5 -1.3457v-2h-2zm2 4a1 1 0 0 1 1 1 1 1 0 0 1 -1 1v-2zm5 0a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1zm4 0a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1z" fill="#8da6f0"/> </g> </svg> diff --git a/editor/icons/icon_mini_color.svg b/editor/icons/icon_mini_color.svg index b70015a05d..623f922158 100644 --- a/editor/icons/icon_mini_color.svg +++ b/editor/icons/icon_mini_color.svg @@ -1,7 +1,7 @@ <svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1040.4)"> -<path transform="translate(0 1040.4)" d="m4 4a3 3 0 0 0 -3 3 3 3 0 0 0 3 3h1v-2h-1a1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1h1v-2h-1z" fill="#ff7070"/> -<path transform="translate(0 1040.4)" d="m14 4a3 3 0 0 0 -3 3v3h2v-3a1 1 0 0 1 1 -1h1v-2h-1z" fill="#70bfff"/> -<path transform="translate(0 1040.4)" d="m6 2v5a3 3 0 0 0 3 3h1v-2h-1a1 1 0 0 1 -1 -1v-5h-2z" fill="#7aff70"/> +<path transform="translate(0 1040.4)" d="m4 4a3 3 0 0 0 -3 3 3 3 0 0 0 3 3h1v-2h-1a1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1h1v-2h-1z" fill="#ff8484"/> +<path transform="translate(0 1040.4)" d="m14 4a3 3 0 0 0 -3 3v3h2v-3a1 1 0 0 1 1 -1h1v-2h-1z" fill="#84c2ff"/> +<path transform="translate(0 1040.4)" d="m6 2v5a3 3 0 0 0 3 3h1v-2h-1a1 1 0 0 1 -1 -1v-5h-2z" fill="#84ffb1"/> </g> </svg> diff --git a/editor/icons/icon_mini_dictionary.svg b/editor/icons/icon_mini_dictionary.svg index eb68709c4f..814f27e2f9 100644 --- a/editor/icons/icon_mini_dictionary.svg +++ b/editor/icons/icon_mini_dictionary.svg @@ -1,16 +1,5 @@ <svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1040.4)" fill="#77edb1"> -<rect transform="scale(1,-1)" x="13" y="-1047.4" width="2" height="5"/> -<rect transform="scale(1,-1)" x="15" y="-1046.4" width="1" height="2"/> -<path d="m16 1050.4a3 3 0 0 1 -3 -3h2a1 1 0 0 0 1 1v2z"/> -<path d="m11 1044.4a3 3 0 0 0 -3 3h2a1 1 0 0 1 1 -1v-2z"/> -<path d="m11 1050.4a3 3 0 0 1 -3 -3h2a1 1 0 0 0 1 1v2z"/> -<rect x="6" y="1046.4" width="2" height="3.9999"/> -<rect x="6" y="1042.4" width="2" height="2"/> -<path d="m3 1044.4a3 3 0 0 0 -3 3h2a1 1 0 0 1 1 -1v-2z"/> -<path d="m3 1050.4a3 3 0 0 1 -3 -3h2a1 1 0 0 0 1 1v2z"/> -<rect x="3" y="1042.4" width="2" height="8"/> -<rect x="11" y="1044.4" width="1" height="2"/> -<rect x="11" y="1048.4" width="1" height="2"/> +<g transform="translate(0 -1040.4)"> +<path transform="translate(0 1040.4)" d="m3 2v2a3 3 0 0 0 -3 3 3 3 0 0 0 3 3h2v-8h-2zm3 0v2h2v-2h-2zm7 0v5a3 3 0 0 0 3 3v-2a1 1 0 0 1 -1 -1v-1h1v-2h-1v-2h-2zm-2 2a3 3 0 0 0 -3 3 3 3 0 0 0 3 3h1v-2h-1a1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1h1v-2h-1zm-3 3v-1h-2v4h2v-3zm-5-1v2a1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1z" fill="#77edb1"/> </g> </svg> diff --git a/editor/icons/icon_mini_float.svg b/editor/icons/icon_mini_float.svg index 2eb71fd85e..68f09ef07a 100644 --- a/editor/icons/icon_mini_float.svg +++ b/editor/icons/icon_mini_float.svg @@ -1,15 +1,5 @@ <svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1040.4)" fill="#61daf4"> -<rect y="1045.4" width="2" height="5"/> -<rect x="2" y="1046.4" width="2" height="2"/> -<path d="m3 1042.4a3 3 0 0 0 -3 3h2a1 1 0 0 1 1 -1v-2z"/> -<rect transform="scale(1,-1)" x="6" y="-1047.4" width="2" height="5"/> -<path d="m9 1050.4a3 3 0 0 1 -3 -3h2a1 1 0 0 0 1 1v2z"/> -<rect transform="scale(1,-1)" x="12" y="-1047.4" width="2" height="5"/> -<path d="m15 1050.4a3 3 0 0 1 -3 -3h2a1 1 0 0 0 1 1v2z"/> -<rect x="9" y="1048.4" width="1" height="2"/> -<rect x="14" y="1044.4" width="2" height="2"/> -<rect x="15" y="1048.4" width="1" height="2"/> -<rect x="3" y="1042.4" width="1" height="2"/> +<g transform="translate(0 -1040.4)"> +<path transform="translate(0 1040.4)" d="m3 2a3 3 0 0 0 -3 3v5h2v-2h2v-2h-2v-1a1 1 0 0 1 1 -1h1v-2h-1zm3 0v5a3 3 0 0 0 3 3h1v-2h-1a1 1 0 0 1 -1 -1v-5h-2zm6 0v5a3 3 0 0 0 3 3h1v-2h-1a1 1 0 0 1 -1 -1v-1h2v-2h-2v-2h-2z" fill="#61daf4"/> </g> </svg> diff --git a/editor/icons/icon_mini_float_array.svg b/editor/icons/icon_mini_float_array.svg index 284b5911b7..3e3c88cc99 100644 --- a/editor/icons/icon_mini_float_array.svg +++ b/editor/icons/icon_mini_float_array.svg @@ -1,13 +1,7 @@ <svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1040.4)"> -<rect y="1050.4" width="4" height="2" fill="#e0e0e0"/> -<rect y="1040.4" width="2" height="12" fill="#e0e0e0"/> -<rect y="1040.4" width="4" height="2" fill="#e0e0e0"/> -<rect transform="scale(-1,1)" x="-16" y="1050.4" width="4" height="2" fill="#e0e0e0"/> -<rect transform="scale(-1,1)" x="-16" y="1040.4" width="2" height="12" fill="#e0e0e0"/> -<rect transform="scale(-1,1)" x="-16" y="1040.4" width="4" height="2" fill="#e0e0e0"/> -<path d="m6 1042.4a3 3 0 0 0 -3 3v5h2v-2h1v-2h-1v-1a1 1 0 0 1 1 -1v-2z" fill="#61daf4"/> -<path d="m10 1042.4v5a3 3 0 0 0 3 3v-2a1 1 0 0 1 -1 -1v-1h1v-2h-1v-2h-2z" fill="#61daf4"/> -<path d="m7 1042.4v5a3 3 0 0 0 3 3v-2a1 1 0 0 1 -1 -1v-5h-2z" fill="#c6f2fb"/> +<path transform="translate(0 1040.4)" d="m0 0v2 8 2h4v-2h-2v-8h2v-2h-2-2zm12 0v2h2v8h-2v2h4v-2-10h-4z" fill="#e0e0e0"/> +<path transform="translate(0 1040.4)" d="m6 2a3 3 0 0 0 -3 3v5h2v-2h1v-2h-1v-1a1 1 0 0 1 1 -1v-2zm1 0v5a3 3 0 0 0 3 3v-2a1 1 0 0 1 -1 -1v-5h-2zm3 0v5a3 3 0 0 0 3 3v-2a1 1 0 0 1 -1 -1v-1h1v-2h-1v-2h-2z" fill="#61daf4"/> +<path d="m7 1042.4v5a3 3 0 0 0 3 3v-2a1 1 0 0 1 -1 -1v-5h-2z" fill="#fff" fill-opacity=".39216"/> </g> </svg> diff --git a/editor/icons/icon_mini_image.svg b/editor/icons/icon_mini_image.svg deleted file mode 100644 index a3f273078c..0000000000 --- a/editor/icons/icon_mini_image.svg +++ /dev/null @@ -1,17 +0,0 @@ -<svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1040.4)" fill="#93f1b9"> -<rect y="1045.4" width="2" height="3.9999"/> -<rect x="3" y="1043.4" width="2" height="6"/> -<path d="m5 1043.4a3 3 0 0 1 3 3h-2a1 1 0 0 0 -1 -1v-2z"/> -<rect x="6" y="1046.4" width="2" height="3"/> -<rect y="1041.4" width="2" height="2"/> -<rect x="6" y="1043.4" width="2" height="6"/> -<path d="m8 1043.4a3 3 0 0 1 3 3h-2a1 1 0 0 0 -1 -1v-2z"/> -<rect x="9" y="1046.4" width="2" height="3"/> -<path d="m14 1049.4a3 3 0 0 1 -3 -3h2a1 1 0 0 0 1 1v2z"/> -<path d="m14 1043.4a3 3 0 0 0 -3 3h2a1 1 0 0 1 1 -1v-2z"/> -<rect transform="scale(1,-1)" x="14" y="-1049.4" width="2" height="6"/> -<path d="m13 1052.4a3 3 0 0 0 3 -3h-2a1 1 0 0 1 -1 1v2z"/> -<rect x="12" y="1050.4" width="1" height="2"/> -</g> -</svg> diff --git a/editor/icons/icon_mini_input.svg b/editor/icons/icon_mini_input.svg deleted file mode 100644 index c64db97127..0000000000 --- a/editor/icons/icon_mini_input.svg +++ /dev/null @@ -1,15 +0,0 @@ -<svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1040.4)" fill="#adf18f"> -<path d="m10 1050.4a3 3 0 0 0 3 -3h-2a1 1 0 0 1 -1 1v2z"/> -<path d="m10 1044.4a3 3 0 0 1 3 3h-2a1 1 0 0 0 -1 -1v-2z"/> -<rect transform="scale(-1)" x="-10" y="-1052.4" width="2" height="8"/> -<rect y="1046.4" width="2" height="3.9999"/> -<rect x="3" y="1044.4" width="2" height="6"/> -<path d="m5 1044.4a3 3 0 0 1 3 3h-2a1 1 0 0 0 -1 -1v-2z"/> -<rect x="6" y="1047.4" width="2" height="3"/> -<rect y="1042.4" width="2" height="2"/> -<rect transform="scale(1,-1)" x="13" y="-1047.4" width="2" height="5"/> -<rect transform="scale(1,-1)" x="15" y="-1046.4" width="1" height="2"/> -<path d="m16 1050.4a3 3 0 0 1 -3 -3h2a1 1 0 0 0 1 1v2z"/> -</g> -</svg> diff --git a/editor/icons/icon_mini_int_array.svg b/editor/icons/icon_mini_int_array.svg index e5d4d97a90..04957c8d4b 100644 --- a/editor/icons/icon_mini_int_array.svg +++ b/editor/icons/icon_mini_int_array.svg @@ -1,8 +1,7 @@ <svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1040.4)"> <path transform="translate(0 1040.4)" d="m0 0v2 8 2h2 2v-2h-2v-8h2v-2h-4zm12 0v2h2v8h-2v2h4v-2-8-2h-2-2z" fill="#e0e0e0"/> -<path transform="translate(0 1040.4)" d="m3 2v2h2v-2h-2zm0 4v4h2v-4h-2z" fill="#7dc6ef"/> -<path transform="translate(0 1040.4)" d="m5 4v6h2v-4a1 1 0 0 1 1 1v3h2v-3a3 3 0 0 0 -3 -3h-2z" fill="#c8e7f9"/> -<path transform="translate(0 1040.4)" d="m10 2v5a3 3 0 0 0 3 3v-2a1 1 0 0 1 -1 -1v-1h1v-2h-1v-2h-2z" fill="#7dc6ef"/> +<path transform="translate(0 1040.4)" d="m3 2v2h2v-2h-2zm2 2v2h-2v4h2 2v-4a1 1 0 0 1 1 1v3h2v-3a3 3 0 0 0 -3 -3h-2zm5 3a3 3 0 0 0 3 3v-2a1 1 0 0 1 -1 -1v-1h1v-2h-1v-2h-2v5z" fill="#7dc6ef"/> +<path transform="translate(0 1040.4)" d="m5 4v6h2v-4a1 1 0 0 1 1 1v3h2v-3a3 3 0 0 0 -3 -3h-2z" fill="#fff" fill-opacity=".39216"/> </g> </svg> diff --git a/editor/icons/icon_mini_integer.svg b/editor/icons/icon_mini_integer.svg index 05d09d9823..3bfe95980d 100644 --- a/editor/icons/icon_mini_integer.svg +++ b/editor/icons/icon_mini_integer.svg @@ -1,14 +1,5 @@ <svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1040.4)" fill="#7dc6ef"> -<rect x="1" y="1046.4" width="2" height="3.9999"/> -<rect x="4" y="1044.4" width="2" height="6"/> -<path d="m7 1044.4a3 3 0 0 1 3 3h-2a1 1 0 0 0 -1 -1v-2z"/> -<rect x="8" y="1047.4" width="2" height="3"/> -<rect x="1" y="1042.4" width="2" height="2"/> -<rect transform="scale(1,-1)" x="12" y="-1047.4" width="2" height="5"/> -<rect transform="scale(1,-1)" x="14" y="-1046.4" width="2" height="2"/> -<path d="m15 1050.4a3 3 0 0 1 -3 -3h2a1 1 0 0 0 1 1v2z"/> -<rect x="5" y="1044.4" width="2" height="2"/> -<rect transform="scale(1,-1)" x="15" y="-1050.4" width="1" height="2"/> +<g transform="translate(0 -1040.4)"> +<path transform="translate(0 1040.4)" d="m1 2v2h2v-2h-2zm11 0v5a3 3 0 0 0 3 3h1v-2h-1a1 1 0 0 1 -1 -1v-1h2v-2h-2v-2h-2zm-8 2v6h2v-4h1a1 1 0 0 1 1 1v3h2v-3a3 3 0 0 0 -3 -3h-1-2zm-3 2v4h2v-4h-2z" fill="#7dc6ef"/> </g> </svg> diff --git a/editor/icons/icon_mini_matrix3.svg b/editor/icons/icon_mini_matrix3.svg deleted file mode 100644 index e0dc132d12..0000000000 --- a/editor/icons/icon_mini_matrix3.svg +++ /dev/null @@ -1,19 +0,0 @@ -<svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1040.4)"> -<rect transform="scale(-1,1)" x="-2" y="1044.4" width="2" height="6" fill="#e3ec69"/> -<rect transform="scale(-1,1)" x="-2" y="1044.4" width="1" height="2" fill="#e3ec69"/> -<path d="m2 1044.4a3 3 0 0 1 3 3h-2a1 1 0 0 0 -1 -1z" fill="#e3ec69"/> -<path d="m2 1050.4a3 3 0 0 0 3 -3h-2a1 1 0 0 1 -1 1z" fill="#e3ec69"/> -<rect transform="scale(-1,1)" x="-2" y="1042.4" width="2" height="3.9999" fill="#e3ec69"/> -<rect transform="scale(-1,1)" x="-9" y="1044.4" width="2" height="2" fill="#e3ec69"/> -<path d="m7 1048.4a2 2 0 0 1 -1.7321 -1 2 2 0 0 1 0 -2 2 2 0 0 1 1.7321 -1" fill="#e3ec69"/> -<path transform="scale(-1,1)" d="m-7 1050.4a2 2 0 0 1 -1.7321 -1 2 2 0 0 1 0 -2 2 2 0 0 1 1.7321 -1" fill="#e3ec69"/> -<rect transform="scale(-1,1)" x="-7" y="1048.4" width="2" height="2" fill="#e3ec69"/> -<rect x="10" y="1046.4" width="2" height="3.9999" fill="#eef39f"/> -<rect x="10" y="1042.4" width="2" height="2" fill="#eef39f"/> -<rect transform="scale(-1,1)" x="-16" y="1044.4" width="2" height="2" fill="#e3ec69"/> -<path d="m14 1048.4a2 2 0 0 1 -1.7321 -1 2 2 0 0 1 0 -2 2 2 0 0 1 1.7321 -1" fill="#e3ec69"/> -<path transform="scale(-1,1)" d="m-14 1050.4a2 2 0 0 1 -1.7321 -1 2 2 0 0 1 0 -2 2 2 0 0 1 1.7321 -1" fill="#e3ec69"/> -<rect transform="scale(-1,1)" x="-14" y="1048.4" width="2" height="2" fill="#e3ec69"/> -</g> -</svg> diff --git a/editor/icons/icon_mini_object.svg b/editor/icons/icon_mini_object.svg index 8cbbfa2808..a59808b970 100644 --- a/editor/icons/icon_mini_object.svg +++ b/editor/icons/icon_mini_object.svg @@ -1,11 +1,5 @@ <svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1040.4)" fill="#79f3e8"> -<path d="m8 1050.4a3 3 0 0 0 3 -3 3 3 0 0 0 -3 -3v-2h-2v8h2zm0-2v-2a1 1 0 0 1 1 1 1 1 0 0 1 -1 1z"/> -<path d="m3 1050.4a3 3 0 0 1 -3 -3h2a1 1 0 0 0 1 1v2z"/> -<path d="m3 1044.4a3 3 0 0 0 -3 3h2a1 1 0 0 1 1 -1v-2z"/> -<path d="m15 1044.4v5a3 3 0 0 1 -3 3v-2a1 1 0 0 0 1 -1v-5h2z"/> -<path d="m3 1050.4a3 3 0 0 0 3 -3h-2a1 1 0 0 1 -1 1v2z"/> -<path d="m3 1044.4a3 3 0 0 1 3 3h-2a1 1 0 0 0 -1 -1v-2z"/> -<rect x="11" y="1050.4" width="1" height="2"/> +<g transform="translate(0 -1040.4)"> +<path transform="translate(0 1040.4)" d="m6 2v5 3h2a3 3 0 0 0 3 -3 3 3 0 0 0 -3 -3v-2h-2zm0 5a3 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 -3zm7-3v5a1 1 0 0 1 -1 1h-1v2h1a3 3 0 0 0 3 -3v-5h-2zm-10 2a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1zm5 0a1 1 0 0 1 1 1 1 1 0 0 1 -1 1v-2z" fill="#79f3e8"/> </g> </svg> diff --git a/editor/icons/icon_mini_path.svg b/editor/icons/icon_mini_path.svg index d09f56e753..4c99ad8cc0 100644 --- a/editor/icons/icon_mini_path.svg +++ b/editor/icons/icon_mini_path.svg @@ -1,14 +1,5 @@ <svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1040.4)" fill="#6993ec"> -<rect transform="scale(1,-1)" x="6" y="-1047.4" width="2" height="5"/> -<rect transform="scale(1,-1)" x="8" y="-1046.4" width="2" height="2"/> -<path d="m9 1050.4a3 3 0 0 1 -3 -3h2a1 1 0 0 0 1 1v2z"/> -<rect transform="scale(1,-1)" x="11" y="-1050.4" width="2" height="8"/> -<path d="m13 1044.4a3 3 0 0 1 3 3h-2a1 1 0 0 0 -1 -1v-2z"/> -<rect transform="scale(1,-1)" x="14" y="-1050.4" width="2" height="3"/> -<path d="m2 1048.4a3 3 0 0 0 3 -3h-2a1 1 0 0 1 -1 1v2z"/> -<path d="m2 1042.4a3 3 0 0 1 3 3h-2a1 1 0 0 0 -1 -1v-2z"/> -<rect transform="scale(-1)" x="-2" y="-1050.4" width="2" height="8"/> -<rect transform="scale(1,-1)" x="9" y="-1050.4" width="1" height="2"/> +<g transform="translate(0 -1040.4)"> +<path transform="translate(0 1040.4)" d="m0 2v8h2v-2a3 3 0 0 0 3 -3 3 3 0 0 0 -3 -3h-2zm6 0v5a3 3 0 0 0 3 3h1v-2h-1a1 1 0 0 1 -1 -1v-1h2v-2h-2v-2h-2zm5 0v8h2v-4a1 1 0 0 1 1 1v3h2v-3a3 3 0 0 0 -3 -3v-2h-2zm-9 2a1 1 0 0 1 1 1 1 1 0 0 1 -1 1v-2z" fill="#6993ec"/> </g> </svg> diff --git a/editor/icons/icon_mini_plane.svg b/editor/icons/icon_mini_plane.svg index 5d2ee937c0..e02fded99f 100644 --- a/editor/icons/icon_mini_plane.svg +++ b/editor/icons/icon_mini_plane.svg @@ -1,12 +1,5 @@ <svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1040.4)" fill="#f77070"> -<path d="m3 1048.4a3 3 0 0 0 3 -3h-2a1 1 0 0 1 -1 1v2z"/> -<path d="m3 1042.4a3 3 0 0 1 3 3h-2a1 1 0 0 0 -1 -1v-2z"/> -<rect transform="scale(-1)" x="-3" y="-1050.4" width="2" height="8"/> -<rect transform="scale(1,-1)" x="7" y="-1047.4" width="2" height="5"/> -<path d="m10 1050.4a3 3 0 0 1 -3 -3h2a1 1 0 0 0 1 1v2z"/> -<rect x="11" y="1044.4" width="2" height="6"/> -<path d="m13 1044.4a3 3 0 0 1 3 3h-2a1 1 0 0 0 -1 -1v-2z"/> -<rect x="14" y="1047.4" width="2" height="3"/> +<g transform="translate(0 -1040.4)"> +<path transform="translate(0 1040.4)" d="m1 2v8h2v-2a3 3 0 0 0 3 -3 3 3 0 0 0 -3 -3h-2zm6 0v5a3 3 0 0 0 3 3v-2a1 1 0 0 1 -1 -1v-5h-2zm-4 2a1 1 0 0 1 1 1 1 1 0 0 1 -1 1v-2zm8 0v6h2v-4a1 1 0 0 1 1 1v3h2v-3a3 3 0 0 0 -3 -3h-2z" fill="#f77070"/> </g> </svg> diff --git a/editor/icons/icon_mini_quat.svg b/editor/icons/icon_mini_quat.svg index 7baaf44089..c705fae2b6 100644 --- a/editor/icons/icon_mini_quat.svg +++ b/editor/icons/icon_mini_quat.svg @@ -1,12 +1,7 @@ <svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1040.4)"> -<path d="m3 1049.4a3 3 0 0 1 -3 -3h2a1 1 0 0 0 1 1v2z" fill="#ec69a3"/> -<path d="m3 1043.4a3 3 0 0 0 -3 3h2a1 1 0 0 1 1 -1v-2z" fill="#ec69a3"/> -<rect transform="scale(1,-1)" x="3" y="-1051.4" width="2" height="8" fill="#ec69a3"/> -<rect transform="scale(1,-1)" x="13" y="-1046.4" width="2" height="5" fill="#ec69a3"/> -<rect transform="scale(1,-1)" x="15" y="-1045.4" width="1" height="2" fill="#ec69a3"/> -<path d="m16 1049.4a3 3 0 0 1 -3 -3h2a1 1 0 0 0 1 1v2z" fill="#ec69a3"/> -<path d="m4 1043.4v3a3 3 0 0 0 3 3h2v-6h-2v4a1 1 0 0 1 -1 -1v-3h-2z" fill="#f298c0"/> -<path transform="translate(0 1040.4)" d="m11 3a3 3 0 0 0 -3 3 3 3 0 0 0 3 3h2v-6h-2zm0 2v2a1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1z" fill="#ec69a3"/> +<path transform="translate(0 1040.4)" d="m3 3a3 3 0 0 0 -3 3 3 3 0 0 0 3 3v2h2v-2.7695a3 3 0 0 0 2 0.76953h2v-6h-2v4a1 1 0 0 1 -1 -1v-3h-1-1-1zm0 2v2a1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1z" fill="#ec69a3"/> +<path d="m4 1043.4v3a3 3 0 0 0 3 3h2v-6h-2v4a1 1 0 0 1 -1 -1v-3z" fill="#fff" fill-opacity=".39216"/> +<path transform="translate(0 1040.4)" d="m13 1v2h-2a3 3 0 0 0 -3 3 3 3 0 0 0 3 3h2v-3a3 3 0 0 0 3 3v-2a1 1 0 0 1 -1 -1v-1h1v-2h-1v-2h-2zm-2 4v2a1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1z" fill="#ec69a3"/> </g> </svg> diff --git a/editor/icons/icon_mini_raw_array.svg b/editor/icons/icon_mini_raw_array.svg index 827e60d0e3..ebd6c9a225 100644 --- a/editor/icons/icon_mini_raw_array.svg +++ b/editor/icons/icon_mini_raw_array.svg @@ -1,9 +1,7 @@ <svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1040.4)"> <path transform="translate(0 1040.4)" d="m0 0v2 8 2h4v-2h-2v-8h2v-2h-2-2zm12 0v2h2v8h-2v2h4v-2-8-2h-2-2z" fill="#e0e0e0"/> -<rect x="2" y="1046.4" width="2" height="3" fill="#69ec9e"/> -<rect x="5" y="1043.4" width="1" height="2" fill="#69ec9e"/> -<path d="m5 1043.4a3 3 0 0 0 -3 3h2a1 1 0 0 1 1 -1v-2z" fill="#69ec9e"/> -<path d="m6 1049.4v-6h2v4a1 1 0 0 0 1 -1v-3h2v3 1a1 1 0 0 0 1 -1v-3h2v3a3 3 0 0 1 -3 3h-2v-0.1758a3 3 0 0 1 -1 0.1758h-2z" fill="#aaf4c8"/> +<path transform="translate(0 1040.4)" d="m5 3a3 3 0 0 0 -3 3v3h2v-3a1 1 0 0 1 1 -1h1v4h2a3 3 0 0 0 1 -0.17578v0.17578h2a3 3 0 0 0 3 -3v-3h-2v3a1 1 0 0 1 -1 1v-1-3h-2v3a1 1 0 0 1 -1 1v-4h-2-1z" fill="#69ec9e"/> +<path d="m6 1049.4v-6h2v4a1 1 0 0 0 1 -1v-3h2v3 1a1 1 0 0 0 1 -1v-3h2v3a3 3 0 0 1 -3 3h-2v-0.1758a3 3 0 0 1 -1 0.1758h-2z" fill="#fff" fill-opacity=".39216"/> </g> </svg> diff --git a/editor/icons/icon_mini_rect2.svg b/editor/icons/icon_mini_rect2.svg index d9e9413185..9dec66dfa1 100644 --- a/editor/icons/icon_mini_rect2.svg +++ b/editor/icons/icon_mini_rect2.svg @@ -1,19 +1,5 @@ <svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1040.4)" fill="#f191a5"> -<rect y="1047.4" width="2" height="3"/> -<path d="m3 1044.4a3 3 0 0 0 -3 3h2a1 1 0 0 1 1 -1v-2z"/> -<rect transform="scale(1,-1)" x="13" y="-1047.4" width="2" height="5"/> -<rect transform="scale(1,-1)" x="15" y="-1046.4" width="1" height="2"/> -<path d="m16 1050.4a3 3 0 0 1 -3 -3h2a1 1 0 0 0 1 1v2z"/> -<path d="m7 1044.4a3 3 0 0 0 -3 3h2a1 1 0 0 1 1 -1v-2z"/> -<rect transform="scale(1,-1)" x="7" y="-1050.4" width="1" height="2"/> -<path d="m7 1050.4a3 3 0 0 1 -3 -3h2a1 1 0 0 0 1 1v2z"/> -<rect x="12" y="1044.4" width="1" height="2"/> -<path d="m12 1044.4a3 3 0 0 0 -3 3h2a1 1 0 0 1 1 -1v-2z"/> -<rect transform="scale(1,-1)" x="12" y="-1050.4" width="1" height="2"/> -<path d="m12 1050.4a3 3 0 0 1 -3 -3h2a1 1 0 0 0 1 1v2z"/> -<path d="m7 1044.4a3 3 0 0 1 3 3h-2a1 1 0 0 0 -1 -1v-2z"/> -<rect x="6" y="1046.4" width="2" height="1"/> -<rect transform="scale(1,-1)" x="3" y="-1046.4" width="1" height="2"/> +<g transform="translate(0 -1040.4)"> +<path transform="translate(0 1040.4)" d="m13 2v2h-1a3 3 0 0 0 -2.5 1.3457 3 3 0 0 0 -2.5 -1.3457 3 3 0 0 0 -3 3 3 3 0 0 0 3 3h1v-2h-1a1 1 0 0 1 -1 -1h2 1a3 3 0 0 0 3 3h1v-2h-1a1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1h1v1a3 3 0 0 0 3 3v-2a1 1 0 0 1 -1 -1v-1h1v-2h-1v-2h-2zm-10 2a3 3 0 0 0 -3 3v3h2v-3a1 1 0 0 1 1 -1h1v-2h-1z" fill="#f191a5"/> </g> </svg> diff --git a/editor/icons/icon_mini_rid.svg b/editor/icons/icon_mini_rid.svg index 3fe12d0819..f1709a5acc 100644 --- a/editor/icons/icon_mini_rid.svg +++ b/editor/icons/icon_mini_rid.svg @@ -1,14 +1,5 @@ <svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1040.4)" fill="#69ec9a"> -<rect x="1" y="1047.4" width="2" height="3"/> -<rect x="7" y="1042.4" width="2" height="1.9999"/> -<rect x="7" y="1046.4" width="2" height="4"/> -<rect x="4" y="1044.4" width="1" height="2"/> -<path d="m4 1044.4a3 3 0 0 0 -3 3h2a1 1 0 0 1 1 -1v-2z"/> -<path d="m13 1044.4a3 3 0 0 0 -3 3h2a1 1 0 0 1 1 -1v-2z"/> -<path d="m13 1050.4a3 3 0 0 1 -3 -3h2a1 1 0 0 0 1 1v2z"/> -<rect x="14" y="1042.4" width="2" height="8"/> -<rect x="13" y="1044.4" width="1" height="2"/> -<rect x="13" y="1048.4" width="1" height="2"/> +<g transform="translate(0 -1040.4)"> +<path transform="translate(0 1040.4)" d="m7 2v2h2v-2h-2zm7 0v2h-1a3 3 0 0 0 -3 3 3 3 0 0 0 3 3h1 2v-8h-2zm-10 2a3 3 0 0 0 -3 3v3h2v-3a1 1 0 0 1 1 -1h1v-2h-1zm3 2v4h2v-4h-2zm6 0h1v2h-1a1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1z" fill="#69ec9a"/> </g> </svg> diff --git a/editor/icons/icon_mini_string.svg b/editor/icons/icon_mini_string.svg index 7212058fe6..17e565cd75 100644 --- a/editor/icons/icon_mini_string.svg +++ b/editor/icons/icon_mini_string.svg @@ -1,12 +1,5 @@ <svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1040.4)" fill="#6ba7ec"> -<path d="m5 1042.4a3 3 0 0 0 -3 3v2a1 1 0 0 1 -1 1v2a3 3 0 0 0 3 -3v-2a1 1 0 0 1 1 -1v-2z"/> -<rect transform="scale(1,-1)" x="7" y="-1047.4" width="2" height="5"/> -<rect transform="scale(1,-1)" x="9" y="-1046.4" width="2" height="2"/> -<path d="m10 1050.4a3 3 0 0 1 -3 -3h2a1 1 0 0 0 1 1v2z"/> -<path transform="translate(0 1040.4)" d="m15 4a3 3 0 0 0 -3 3v3h2v-3a1 1 0 0 1 1 -1h1v-2h-1z"/> -<rect y="1048.4" width="1" height="2"/> -<rect x="5" y="1042.4" width="1" height="2"/> -<rect transform="scale(1,-1)" x="10" y="-1050.4" width="1" height="2"/> +<g transform="translate(0 -1040.4)"> +<path transform="translate(0 1040.4)" d="m5 2a3 3 0 0 0 -3 3v2a1 1 0 0 1 -1 1h-1v2h1a3 3 0 0 0 3 -3v-2a1 1 0 0 1 1 -1h1v-2h-1zm2 0v5a3 3 0 0 0 3 3h1v-2h-1a1 1 0 0 1 -1 -1v-1h2v-2h-2v-2h-2zm8 2a3 3 0 0 0 -3 3v3h2v-3a1 1 0 0 1 1 -1h1v-2h-1z" fill="#6ba7ec"/> </g> </svg> diff --git a/editor/icons/icon_mini_string_array.svg b/editor/icons/icon_mini_string_array.svg index e0b927d3a9..af81cabce4 100644 --- a/editor/icons/icon_mini_string_array.svg +++ b/editor/icons/icon_mini_string_array.svg @@ -1,10 +1,7 @@ <svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1040.4)"> <path transform="translate(0 1040.4)" d="m0 0v2 8 2h2 2v-2h-2v-8h2v-2h-2-2zm12 0v2h2v8h-2v2h4v-2-10h-4z" fill="#e0e0e0"/> -<path d="m7 1042.4a3 3 0 0 0 -3 3v2a1 1 0 0 1 -1 1v2a3 3 0 0 0 3 -3v-2a1 1 0 0 1 1 -1v-2z" fill="#6ba7ec"/> -<path d="m14 1044.4a3 3 0 0 0 -3 3v3h2v-3a1 1 0 0 1 1 -1v-2z" fill="#6ba7ec"/> -<path d="m8 1042.4v5a3 3 0 0 0 3 3v-2a1 1 0 0 1 -1 -1v-1h1v-2h-1v-2h-2z" fill="#b5d3f6"/> -<rect x="7" y="1042.4" width="1" height="2" fill="#6ba7ec"/> -<rect x="2" y="1048.4" width="1" height="2" fill="#6ba7ec"/> +<path transform="translate(0 1040.4)" d="m7 2a3 3 0 0 0 -3 3v2a1 1 0 0 1 -1 1h-1v2h1a3 3 0 0 0 3 -3v-2a1 1 0 0 1 1 -1h1v3a3 3 0 0 0 3 3h2v-3a1 1 0 0 1 1 -1v-2a3 3 0 0 0 -3 3v1a1 1 0 0 1 -1 -1v-1h1v-2h-1v-2h-2-1z" fill="#6ba7ec"/> +<path d="m8 1042.4v5a3 3 0 0 0 3 3v-2a1 1 0 0 1 -1 -1v-1h1v-2h-1v-2h-2z" fill="#fff" fill-opacity=".39216"/> </g> </svg> diff --git a/editor/icons/icon_mini_transform.svg b/editor/icons/icon_mini_transform.svg index 43c4bb4a8f..53bad91efc 100644 --- a/editor/icons/icon_mini_transform.svg +++ b/editor/icons/icon_mini_transform.svg @@ -1,7 +1,6 @@ <svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1040.4)"> -<path d="m4 1042.4-0.9082 2.1816-1.0918-2.1816h-2l2 4-2 4h2l0.9082-2.1816 1.0918 2.1816h2l-2-4 2-4z" fill="#f6a86e"/> -<path d="m9 1042.4a3 3 0 0 0 -3 3v5h2v-2h1v-2h-1v-1a1 1 0 0 1 1 -1h1v-2h-1z" fill="#f8bf95"/> -<path transform="translate(0 1040.4)" d="m10 4v2 2 2h2v-2l1 1 1-1v2h2v-2-2-2h-2l-1 2-1-2h-2z" fill="#f6a86e"/> +<path transform="translate(0 1040.4)" d="m0 2l2 4-2 4h2l0.9082-2.1816 1.0918 2.1816h2l-2-4 2-4h-2l-0.9082 2.1816-1.0918-2.1816h-2zm6 8h2v-2h1v-2h-1v-1a1 1 0 0 1 1 -1h1v-2h-1a3 3 0 0 0 -3 3v5zm4-6v2 2 2h2v-2l1 1 1-1v2h2v-2-2-2h-2l-1 2-1-2h-2z" fill="#f6a86e"/> +<path d="m9 1042.4a3 3 0 0 0 -3 3v5h2v-2h1v-2h-1v-1a1 1 0 0 1 1 -1h1v-2h-1z" fill="#fff" fill-opacity=".39216"/> </g> </svg> diff --git a/editor/icons/icon_mini_transform2D.svg b/editor/icons/icon_mini_transform2D.svg index 38921ea85a..b4723d37c4 100644 --- a/editor/icons/icon_mini_transform2D.svg +++ b/editor/icons/icon_mini_transform2D.svg @@ -1,10 +1,6 @@ <svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1040.4)"> -<rect x="5" y="1048.4" width="5" height="2" fill="#ddf4aa"/> -<path d="m7 1050.4a2 2 0 0 1 -1.7321 -1 2 2 0 0 1 0 -2 2 2 0 0 1 1.7321 -1" fill="#ddf4aa"/> -<path d="m7 1042.4v2a1 1 0 0 1 1 1 1 1 0 0 1 -1 1v2a3 3 0 0 0 2.5977 -1.5 3 3 0 0 0 0 -3 3 3 0 0 0 -2.5977 -1.5z" fill="#ddf4aa"/> -<rect y="1042.4" width="6" height="2" fill="#c4ec69"/> -<rect x="2" y="1043.4" width="2" height="7" fill="#c4ec69"/> -<path transform="translate(0 1040.4)" d="m10 2v8h2a4 4 0 0 0 3.4648 -2 4 4 0 0 0 0 -4 4 4 0 0 0 -3.4648 -2h-2zm2 2a2 2 0 0 1 1.7324 1 2 2 0 0 1 0 2 2 2 0 0 1 -1.7324 1v-4z" fill="#c4ec69"/> +<path transform="translate(0 1040.4)" d="m0 2v2h2v6h2v-6h2v-2h-6zm7 0v2a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 2 2 0 0 0 -1.7324 1 2 2 0 0 0 -0.26562 1h-0.0019531v0.046875 1.9531h2 3 2a4 4 0 0 0 3.4648 -2 4 4 0 0 0 0 -4 4 4 0 0 0 -3.4648 -2h-2v6h-3a3 3 0 0 0 2.5977 -1.5 3 3 0 0 0 0 -3 3 3 0 0 0 -2.5977 -1.5zm5 2a2 2 0 0 1 1.7324 1 2 2 0 0 1 0 2 2 2 0 0 1 -1.7324 1v-4z" fill="#c4ec69"/> +<path transform="translate(0 1040.4)" d="m7 2v2a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 2 2 0 0 0 -1.7324 1 2 2 0 0 0 -0.26562 1h-0.0019531v0.046875 1.9531h2 3v-2h-3a3 3 0 0 0 2.5977 -1.5 3 3 0 0 0 0 -3 3 3 0 0 0 -2.5977 -1.5z" fill="#fff" fill-opacity=".39216"/> </g> </svg> diff --git a/editor/icons/icon_mini_variant.svg b/editor/icons/icon_mini_variant.svg index aeb23ed2bc..4b9a2a5f18 100644 --- a/editor/icons/icon_mini_variant.svg +++ b/editor/icons/icon_mini_variant.svg @@ -1,14 +1,5 @@ <svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1040.4)" fill="#69ecbd"> -<rect x="3" y="1044.4" width="2" height="6"/> -<rect x="6" y="1044.4" width="2" height="6"/> -<rect x="3" y="1044.4" width="1" height="2"/> -<path d="m3 1044.4a3 3 0 0 0 -3 3h2a1 1 0 0 1 1 -1v-2z"/> -<path d="m14 1050.4a3 3 0 0 1 -3 -3h2a1 1 0 0 0 1 1v2z"/> -<rect transform="scale(1,-1)" x="14" y="-1052.4" width="2" height="8"/> -<rect transform="scale(1,-1)" x="11" y="-1047.4" width="2" height="3"/> -<path d="m3 1050.4a3 3 0 0 1 -3 -3h2a1 1 0 0 0 1 1v2z"/> -<path d="m8 1044.4a3 3 0 0 1 3 3h-2a1 1 0 0 0 -1 -1v-2z"/> -<rect x="9" y="1047.4" width="2" height="3"/> +<g transform="translate(0 -1040.4)"> +<path transform="translate(0 1040.4)" d="m3 4a3 3 0 0 0 -3 3 3 3 0 0 0 3 3h2v-6h-2zm3 0v6h2v-4a1 1 0 0 1 1 1v3h2v-3a3 3 0 0 0 -3 -3h-2zm5 3a3 3 0 0 0 3 3v2h2v-8h-2v4a1 1 0 0 1 -1 -1v-3h-2v3zm-8-1v2a1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1z" fill="#69ecbd"/> </g> </svg> diff --git a/editor/icons/icon_mini_vector2.svg b/editor/icons/icon_mini_vector2.svg index 7abc73c41f..907e6ba84d 100644 --- a/editor/icons/icon_mini_vector2.svg +++ b/editor/icons/icon_mini_vector2.svg @@ -1,15 +1,6 @@ <svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1040.4)"> -<path d="m3 1050.4a3 3 0 0 0 3 -3h-2a1 1 0 0 1 -1 1v2z" fill="#bd91f1"/> -<rect x="4" y="1044.4" width="2" height="3" fill="#bd91f1"/> -<rect x="11" y="1048.4" width="5" height="2" fill="#dcc5f8"/> -<rect x="1" y="1044.4" width="2" height="6" fill="#bd91f1"/> -<rect x="9" y="1044.4" width="1" height="2" fill="#bd91f1"/> -<path d="m9 1044.4a3 3 0 0 0 -3 3h2a1 1 0 0 1 1 -1v-2z" fill="#bd91f1"/> -<rect transform="scale(1,-1)" x="9" y="-1050.4" width="1" height="2" fill="#bd91f1"/> -<path d="m9 1050.4a3 3 0 0 1 -3 -3h2a1 1 0 0 0 1 1v2z" fill="#bd91f1"/> -<path d="m13 1050.4a2 2 0 0 1 -1.7321 -1 2 2 0 0 1 0 -2 2 2 0 0 1 1.7321 -1" fill="#dcc5f8"/> -<path d="m13 1042.4v2a1 1 0 0 1 1 1 1 1 0 0 1 -1 1v2a3 3 0 0 0 2.5977 -1.5 3 3 0 0 0 0 -3 3 3 0 0 0 -2.5977 -1.5z" fill="#dcc5f8"/> -<rect x="12" y="1042.4" width="1" height="2" fill="#dcc5f8"/> +<path transform="translate(0 1040.4)" d="m12 2v2h1a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 2 2 0 0 0 -1.7324 1 2 2 0 0 0 -0.26562 1h-0.001953v2h5v-2h-3a3 3 0 0 0 2.5977 -1.5 3 3 0 0 0 0 -3 3 3 0 0 0 -2.5977 -1.5h-1zm-11 2v6h2a3 3 0 0 0 3 -3v-3h-2v3a1 1 0 0 1 -1 1v-4h-2zm5 3a3 3 0 0 0 3 3h1v-2h-1a1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1h1v-2h-1a3 3 0 0 0 -3 3z" fill="#bd91f1"/> +<path transform="translate(0 1040.4)" d="m12 2v2h1a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 2 2 0 0 0 -1.7324 1 2 2 0 0 0 -0.26562 1h-0.001953v2h5v-2h-3a3 3 0 0 0 2.5977 -1.5 3 3 0 0 0 0 -3 3 3 0 0 0 -2.5977 -1.5h-1z" fill="#fff" fill-opacity=".39216"/> </g> </svg> diff --git a/editor/icons/icon_mini_vector2_array.svg b/editor/icons/icon_mini_vector2_array.svg index 0070144ca5..e05eefc46a 100644 --- a/editor/icons/icon_mini_vector2_array.svg +++ b/editor/icons/icon_mini_vector2_array.svg @@ -1,12 +1,7 @@ <svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1040.4)"> -<rect y="1050.4" width="4" height="2" fill="#e0e0e0"/> -<rect y="1040.4" width="2" height="12" fill="#e0e0e0"/> -<rect y="1040.4" width="4" height="2" fill="#e0e0e0"/> -<rect transform="scale(-1,1)" x="-16" y="1050.4" width="4" height="2" fill="#e0e0e0"/> -<rect transform="scale(-1,1)" x="-16" y="1040.4" width="2" height="12" fill="#e0e0e0"/> -<rect transform="scale(-1,1)" x="-16" y="1040.4" width="4" height="2" fill="#e0e0e0"/> -<path transform="translate(0 1040.4)" d="m3 3v6h2a3 3 0 0 0 3 -3v-3h-2v3a1 1 0 0 1 -1 1v-4h-2z" fill="#bd91f1"/> -<path d="m9 1042.4v2h1a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 2 2 0 0 0 -1.7324 1 2 2 0 0 0 -0.26562 1h-0.00195v0.047 1.9531h2 3v-2h-3a3 3 0 0 0 2.5977 -1.5 3 3 0 0 0 0 -3 3 3 0 0 0 -2.5977 -1.5001h-1z" fill="#dcc5f8"/> +<path transform="translate(0 1040.4)" d="m0 0v2 10h2 2v-2h-2v-8h2v-2h-2-2zm12 0v2h2v8h-2v2h4v-2-10h-4z" fill="#e0e0e0"/> +<path transform="translate(0 1040.4)" d="m9 2v2h1a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 2 2 0 0 0 -1.7324 1 2 2 0 0 0 -0.26562 1h-0.0019531v0.046875 1.9531h2 3v-2h-3a3 3 0 0 0 2.5977 -1.5 3 3 0 0 0 0 -3 3 3 0 0 0 -2.5977 -1.5h-1zm-6 1v6h2a3 3 0 0 0 3 -3v-3h-2v3a1 1 0 0 1 -1 1v-4h-2z" fill="#bd91f1"/> +<path d="m9 1042.4v2h1a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 2 2 0 0 0 -1.7324 1 2 2 0 0 0 -0.26562 1h-0.00195v0.047 1.9531h2 3v-2h-3a3 3 0 0 0 2.5977 -1.5 3 3 0 0 0 0 -3 3 3 0 0 0 -2.5977 -1.5001h-1z" fill="#fff" fill-opacity=".39216"/> </g> </svg> diff --git a/editor/icons/icon_mini_vector3.svg b/editor/icons/icon_mini_vector3.svg index 88b6f1f53c..be1f8ec360 100644 --- a/editor/icons/icon_mini_vector3.svg +++ b/editor/icons/icon_mini_vector3.svg @@ -1,15 +1,6 @@ <svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1040.4)"> -<path d="m3.0004 1050.4a3 3 0 0 0 3 -3h-2a1 1 0 0 1 -1 1v2z" fill="#e286f0"/> -<rect x="4.0004" y="1044.4" width="2" height="3" fill="#e286f0"/> -<rect x="1.0004" y="1044.4" width="2" height="6" fill="#e286f0"/> -<rect x="9.0004" y="1044.4" width="1" height="2" fill="#e286f0"/> -<path d="m9.0004 1044.4a3 3 0 0 0 -3 3h2a1 1 0 0 1 1 -1v-2z" fill="#e286f0"/> -<rect transform="scale(1,-1)" x="9.0004" y="-1050.4" width="1" height="2" fill="#e286f0"/> -<path d="m9.0004 1050.4a3 3 0 0 1 -3 -3h2a1 1 0 0 0 1 1v2z" fill="#e286f0"/> -<path transform="translate(0 1040.4)" d="m13 2v1a1 1 0 0 1 1 1 1 1 0 0 1 -1 1v2a3 3 0 0 0 2.5977 -1.5 3 3 0 0 0 0 -3 3 3 0 0 0 -0.36328 -0.5h-2.2344z" fill="#eeb9f6"/> -<rect x="12" y="1042.4" width="3.9996" height="2" fill="#eeb9f6"/> -<path d="m13 1045.4v2a1 1 0 0 1 1 1 1 1 0 0 1 -1 1v2a3 3 0 0 0 2.5977 -1.5 3 3 0 0 0 0 -3 3 3 0 0 0 -2.5977 -1.5z" fill="#eeb9f6"/> -<rect x="12" y="1049.4" width="1" height="2" fill="#eeb9f6"/> +<path transform="translate(0 1040.4)" d="m12 2v2h2a1 1 0 0 1 -1 1v2a1 1 0 0 1 1 1 1 1 0 0 1 -1 1h-1v2h1a3 3 0 0 0 2.5977 -1.5 3 3 0 0 0 0 -3 3 3 0 0 0 -0.36523 -0.50195 3 3 0 0 0 0.36523 -0.49805 3 3 0 0 0 0.39844 -1.5h0.003906v-2h-4zm-11 2v6h2a3 3 0 0 0 3 -3v-3h-2v3a1 1 0 0 1 -1 1v-4h-2zm5 3a3 3 0 0 0 3 3h1v-2h-1a1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1h1v-2h-1a3 3 0 0 0 -3 3z" fill="#e286f0"/> +<path transform="translate(0 1040.4)" d="m12 2v2h2a1 1 0 0 1 -1 1v2a1 1 0 0 1 1 1 1 1 0 0 1 -1 1h-1v2h1a3 3 0 0 0 2.5977 -1.5 3 3 0 0 0 0 -3 3 3 0 0 0 -0.36523 -0.50195 3 3 0 0 0 0.36523 -0.49805 3 3 0 0 0 0.39844 -1.5h0.003906v-2h-4z" fill="#fff" fill-opacity=".39216"/> </g> </svg> diff --git a/editor/icons/icon_mini_vector3_array.svg b/editor/icons/icon_mini_vector3_array.svg index a1b880bdf0..e2843d2e68 100644 --- a/editor/icons/icon_mini_vector3_array.svg +++ b/editor/icons/icon_mini_vector3_array.svg @@ -1,12 +1,7 @@ <svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1040.4)"> -<rect y="1050.4" width="4" height="2" fill="#e0e0e0"/> -<rect y="1040.4" width="2" height="12" fill="#e0e0e0"/> -<rect y="1040.4" width="4" height="2" fill="#e0e0e0"/> -<rect transform="scale(-1,1)" x="-16" y="1050.4" width="4" height="2" fill="#e0e0e0"/> -<rect transform="scale(-1,1)" x="-16" y="1040.4" width="2" height="12" fill="#e0e0e0"/> -<rect transform="scale(-1,1)" x="-16" y="1040.4" width="4" height="2" fill="#e0e0e0"/> -<path transform="translate(0 1040.4)" d="m3 3v6h2a3 3 0 0 0 3 -3v-3h-2v3a1 1 0 0 1 -1 1v-4h-2z" fill="#e286f0"/> -<path transform="translate(0 1040.4)" d="m8 1v2h1 1a1 1 0 0 1 -1 1v2a1 1 0 0 1 1 1 1 1 0 0 1 -1 1h-1v2h1a3 3 0 0 0 2.5977 -1.5 3 3 0 0 0 0 -3 3 3 0 0 0 -0.36523 -0.50195 3 3 0 0 0 0.36523 -0.49805 3 3 0 0 0 0.39844 -1.5h0.003906v-2h-0.76562-2.2344-1z" fill="#eeb9f6"/> +<path transform="translate(0 1040.4)" d="m0 0v2 8 2h4v-2h-2v-8h2v-2h-2-2zm12 0v2h2v8h-2v2h4v-2-10h-4z" fill="#e0e0e0"/> +<path transform="translate(0 1040.4)" d="m8 1v2h1 1a1 1 0 0 1 -1 1v2a1 1 0 0 1 1 1 1 1 0 0 1 -1 1h-1v2h1a3 3 0 0 0 2.5977 -1.5 3 3 0 0 0 0 -3 3 3 0 0 0 -0.36523 -0.50195 3 3 0 0 0 0.36523 -0.49805 3 3 0 0 0 0.39844 -1.5h0.003906v-2h-0.76562-2.2344-1zm0 2h-2v3a1 1 0 0 1 -1 1v-4h-2v6h2a3 3 0 0 0 3 -3v-3z" fill="#e286f0"/> +<path transform="translate(0 1040.4)" d="m8 1v2h1 1a1 1 0 0 1 -1 1v2a1 1 0 0 1 1 1 1 1 0 0 1 -1 1h-1v2h1a3 3 0 0 0 2.5977 -1.5 3 3 0 0 0 0 -3 3 3 0 0 0 -0.36523 -0.50195 3 3 0 0 0 0.36523 -0.49805 3 3 0 0 0 0.39844 -1.5h0.003906v-2h-0.76562-2.2344-1z" fill="#fff" fill-opacity=".39216"/> </g> </svg> diff --git a/editor/icons/icon_multi_edit.svg b/editor/icons/icon_multi_edit.svg index b0de08316a..9a1cfe8e16 100644 --- a/editor/icons/icon_multi_edit.svg +++ b/editor/icons/icon_multi_edit.svg @@ -1,8 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#e0e0e0"> -<path d="m1.7071 1047.8-0.70711 3.5356l3.5355-0.7071 7.7782-7.7782-2.8284-2.8284zm9.1924-9.1924 2.8284 2.8285 1.4142-1.4142-2.8284-2.8285z"/> -<rect x="1" y="1037.4" width="2" height="2"/> -<rect x="1" y="1041.4" width="2" height="2"/> -<rect x="5" y="1037.4" width="2" height="2"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m2 1c-0.554 0-1 0.446-1 1v2h4v-2c0-0.554-0.446-1-1-1h-2zm-1 4v7l2 3 2-3v-7h-4zm1 1h1v5h-1v-5zm8 1v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2z" fill="#e0e0e0"/> </g> </svg> diff --git a/editor/icons/icon_multi_line.svg b/editor/icons/icon_multi_line.svg index 0cd8be93f6..d2e6d3818a 100644 --- a/editor/icons/icon_multi_line.svg +++ b/editor/icons/icon_multi_line.svg @@ -1,10 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#e0e0e0"> -<rect x="10" y="1037.4" width="5" height="1.9999"/> -<rect transform="rotate(90)" x="1037.4" y="-8" width="2" height="7"/> -<rect x="1" y="1041.4" width="11" height="1.9999"/> -<rect x="1" y="1045.4" width="4" height="1.9999"/> -<rect x="7" y="1045.4" width="8" height="1.9999"/> -<rect x="1" y="1049.4" width="13" height="1.9999"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m1 1v2h7v-2h-7zm9 0v2h5v-2h-5zm-9 4v2h11v-2h-11zm0 4v2h4v-2h-4zm6 0v2h8v-2h-8zm-6 4v2h13v-2h-13z" fill="#e0e0e0"/> </g> </svg> diff --git a/editor/icons/icon_multi_script.svg b/editor/icons/icon_multi_script.svg deleted file mode 100644 index b377f04da2..0000000000 --- a/editor/icons/icon_multi_script.svg +++ /dev/null @@ -1,6 +0,0 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#e0e0e0"> -<path transform="translate(0 1036.4)" d="m7 1l-0.56445 2.2578a5 5 0 0 0 -0.68945 0.2793l-1.9883-1.1934-1.4141 1.4141 1.1953 1.9941a5 5 0 0 0 -0.28516 0.68555l-2.2539 0.5625v2l2.2578 0.56445a5 5 0 0 0 0.2793 0.6875l-1.1934 1.9902 1.4141 1.4141 1.2422-0.74414v-4.9121h1a2 2 0 0 1 2 -2v-1h4.9121l0.74414-1.2422-1.4141-1.4141-1.9941 1.1953a5 5 0 0 0 -0.68555 -0.28516l-0.5625-2.2539h-2z"/> -<path d="m10 1043.4v3h-3v2h3v3h2v-3h3v-2h-3v-3z"/> -</g> -</svg> diff --git a/editor/icons/icon_node_warning.svg b/editor/icons/icon_node_warning.svg index 66663f7d62..8a1a3bd2ea 100644 --- a/editor/icons/icon_node_warning.svg +++ b/editor/icons/icon_node_warning.svg @@ -1,7 +1,3 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<g transform="translate(0 -1.6949e-5)"> -<path transform="translate(0 1036.4)" d="m8.0293 2.002a1.0001 1.0001 0 0 0 -0.88672 0.48438l-6 10a1.0001 1.0001 0 0 0 0.85742 1.5137h12a1.0001 1.0001 0 0 0 0.85742 -1.5137l-6-10a1.0001 1.0001 0 0 0 -0.82812 -0.48438zm-1.0293 2.998h2v5h-2v-5zm0 6h2v2h-2v-2z" color="#000000" color-rendering="auto" fill="#ffdd65" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="block-progression:tb;isolation:auto;mix-blend-mode:normal;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none;white-space:normal"/> -</g> -</g> +<path d="m8.0293 2.002a1.0001 1.0001 0 0 0 -0.88672 0.48438l-6 10a1.0001 1.0001 0 0 0 0.85742 1.5137h12a1.0001 1.0001 0 0 0 0.85742 -1.5137l-6-10a1.0001 1.0001 0 0 0 -0.82812 -0.48438zm-1.0293 2.998h2v5h-2v-5zm0 6h2v2h-2v-2z" color="#000000" color-rendering="auto" fill="#ffdd65" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="block-progression:tb;isolation:auto;mix-blend-mode:normal;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none;white-space:normal"/> </svg> diff --git a/editor/icons/icon_object.svg b/editor/icons/icon_object.svg index 223761d0d8..fe8cbc6f92 100644 --- a/editor/icons/icon_object.svg +++ b/editor/icons/icon_object.svg @@ -1,6 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#e0e0e0" fill-rule="evenodd"> -<path d="m8 1043.9v6l6-3v-6z"/> -<path transform="translate(0 1036.4)" d="m7.9629 1.002a1.0001 1.0001 0 0 0 -0.41016 0.10352l-6 3a1.0001 1.0001 0 0 0 -0.55273 0.89453v6a1.0001 1.0001 0 0 0 0.55273 0.89453l6 3a1.0001 1.0001 0 0 0 0.89453 0l6-3a1.0001 1.0001 0 0 0 0.55273 -0.89453v-6a1.0001 1.0001 0 0 0 -0.55273 -0.89453l-6-3a1.0001 1.0001 0 0 0 -0.48438 -0.10352zm0.037109 2.1172l3.7637 1.8809-3.7637 1.8828-3.7637-1.8828 3.7637-1.8809zm-5 3.498l4 2v3.7656l-4-2v-3.7656zm10 0v3.7656l-4 2v-3.7656l4-2z" color="#000000" color-rendering="auto" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="block-progression:tb;isolation:auto;mix-blend-mode:normal;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none;white-space:normal"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m7.9629 1.002a1.0001 1.0001 0 0 0 -0.41016 0.10352l-6 3a1.0001 1.0001 0 0 0 -0.55273 0.89453v6a1.0001 1.0001 0 0 0 0.55273 0.89453l6 3a1.0001 1.0001 0 0 0 0.89453 0l6-3a1.0001 1.0001 0 0 0 0.55273 -0.89453v-6a1.0001 1.0001 0 0 0 -0.55273 -0.89453l-6-3a1.0001 1.0001 0 0 0 -0.48438 -0.10352zm0.037109 2.1172l3.7637 1.8809-3.7637 1.8828-3.7637-1.8828 3.7637-1.8809zm-5 3.498l4 2v3.7656l-4-2v-3.7656z" fill="#e0e0e0" fill-rule="evenodd"/> </g> </svg> diff --git a/editor/icons/icon_override.svg b/editor/icons/icon_override.svg index 9c6fd9e177..4a797af6d8 100644 --- a/editor/icons/icon_override.svg +++ b/editor/icons/icon_override.svg @@ -1,6 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m5 1c-1.108 0-2 0.89199-2 2v1h4v-1h2v1h4v-1c0-1.108-0.89199-2-2-2h-6z" fill="#e0e0e0"/> -<path transform="translate(0 1036.4)" d="m3 6c-1.108 0-2 0.89199-2 2v5c0 1.108 0.89199 2 2 2h10c1.108 0 2-0.89199 2-2v-5c0-1.108-0.89199-2-2-2h-4v3h2l-3 4-3-4h2v-3h-4z" fill="#e0e0e0"/> +<path transform="translate(0 1036.4)" d="m5 1c-1.108 0-2 0.89199-2 2v1h4v-1h2v1h4v-1c0-1.108-0.89199-2-2-2h-6zm-2 5c-1.108 0-2 0.89199-2 2v5c0 1.108 0.89199 2 2 2h10c1.108 0 2-0.89199 2-2v-5c0-1.108-0.89199-2-2-2h-4v3h2l-3 4-3-4h2v-3h-4z" fill="#e0e0e0"/> </g> </svg> diff --git a/editor/icons/icon_packed_scene.svg b/editor/icons/icon_packed_scene.svg index 349ecd0a03..a853322537 100644 --- a/editor/icons/icon_packed_scene.svg +++ b/editor/icons/icon_packed_scene.svg @@ -1,8 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#e0e0e0"> -<path transform="translate(0 1036.4)" d="m1 7v6h2v2h12v-8h-14z"/> -<path d="m0.71129 1040.4 0.28871 1.9791l2.2438-0.3273-0.81826-1.9018-1.7143 0.25zm3.6933-0.5387 0.81826 1.9018 1.9791-0.2887-0.81826-1.9018-1.9791 0.2887zm3.9581-0.5775 0.81826 1.9018 1.9791-0.2887-0.81826-1.9018-1.9791 0.2887zm3.9581-0.5774 0.81826 1.9018 1.7143-0.25-0.28871-1.9791-2.2438 0.3273z"/> -<circle cx="3" cy="1049.4" r="2"/> -<circle cx="13" cy="1049.4" r="2"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m14.564 2-2.2441 0.32812 0.81836 1.9004 1.7148-0.25zm-4.2227 0.61523-1.9785 0.28906 0.81836 1.9023 1.9785-0.28906zm-3.959 0.57812-1.9785 0.28906 0.81836 1.9023 1.9785-0.28906zm-3.957 0.57812-1.7148 0.25l0.28906 1.9785 2.2441-0.32812zm-1.4258 3.2285v6c0 1.1046 0.89543 2 2 2h12v-8z" fill="#e0e0e0"/> </g> </svg> diff --git a/editor/icons/icon_panels_2.svg b/editor/icons/icon_panels_2.svg index 7a2c18ecc9..1f0fe8bc6b 100644 --- a/editor/icons/icon_panels_2.svg +++ b/editor/icons/icon_panels_2.svg @@ -1,6 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#e0e0e0"> -<rect y="1036.4" width="16" height="7"/> -<rect y="1045.4" width="16" height="7"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m0 0v7h16v-7h-16zm0 9v7h16v-7h-16z" fill="#e0e0e0"/> </g> </svg> diff --git a/editor/icons/icon_panels_2_alt.svg b/editor/icons/icon_panels_2_alt.svg index c411650136..78c2839f36 100644 --- a/editor/icons/icon_panels_2_alt.svg +++ b/editor/icons/icon_panels_2_alt.svg @@ -1,6 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#e0e0e0"> -<rect x="9" y="1036.4" width="7" height="16"/> -<rect y="1036.4" width="7" height="16"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m0 0v16h7v-16h-7zm9 0v16h7v-16h-7z" fill="#e0e0e0"/> </g> </svg> diff --git a/editor/icons/icon_panels_3.svg b/editor/icons/icon_panels_3.svg index ec5aa86540..37e1601f29 100644 --- a/editor/icons/icon_panels_3.svg +++ b/editor/icons/icon_panels_3.svg @@ -1,7 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#e0e0e0"> -<rect y="1036.4" width="16" height="7"/> -<rect x="9" y="1045.4" width="7" height="7"/> -<rect y="1045.4" width="7" height="7"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m0 0v7h16v-7h-16zm0 9v7h7v-7h-7zm9 0v7h7v-7h-7z" fill="#e0e0e0"/> </g> </svg> diff --git a/editor/icons/icon_panels_3_alt.svg b/editor/icons/icon_panels_3_alt.svg index 5f8c78d471..11ca8e2814 100644 --- a/editor/icons/icon_panels_3_alt.svg +++ b/editor/icons/icon_panels_3_alt.svg @@ -1,7 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#e0e0e0"> -<rect y="1045.4" width="7" height="7"/> -<rect x="9" y="1036.4" width="7" height="16"/> -<rect y="1036.4" width="7" height="7"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m0 0v7h7v-7h-7zm9 0v16h7v-16h-7zm-9 9v7h7v-7h-7z" fill="#e0e0e0"/> </g> </svg> diff --git a/editor/icons/icon_panels_4.svg b/editor/icons/icon_panels_4.svg index 093b40b603..8315c2a789 100644 --- a/editor/icons/icon_panels_4.svg +++ b/editor/icons/icon_panels_4.svg @@ -1,8 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#e0e0e0"> -<rect x="9" y="1045.4" width="7" height="7"/> -<rect y="1045.4" width="7" height="7"/> -<rect x="9" y="1036.4" width="7" height="7"/> -<rect y="1036.4" width="7" height="7"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m0 0v7h7v-7h-7zm9 0v7h7v-7h-7zm-9 9v7h7v-7h-7zm9 0v7h7v-7h-7z" fill="#e0e0e0"/> </g> </svg> diff --git a/editor/icons/icon_panorama_sky.svg b/editor/icons/icon_panorama_sky.svg index f3da955dbd..86c5af576f 100644 --- a/editor/icons/icon_panorama_sky.svg +++ b/editor/icons/icon_panorama_sky.svg @@ -7,8 +7,6 @@ </defs> <g transform="translate(0 -1037.4)"> <path d="m1 1039.4c4.2749 2.6091 10.765 2.7449 14 0v12c-3.5849-2.6849-9.7929-2.6544-14 0z" fill="url(#a)" stroke-width="15.242"/> -<rect x="2" y="1046.4" width="3" height="2" ry="1" fill="#fff"/> -<rect x="8" y="1044.4" width="4" height="2" ry="1" fill="#fff"/> -<rect x="10" y="1043.4" width="4" height="2" ry="1" fill="#fff"/> +<path transform="translate(0 1037.4)" d="m11 6c-0.554 0-1 0.446-1 1h-1c-0.554 0-1 0.446-1 1s0.446 1 1 1h2c0.554 0 1-0.446 1-1h1c0.554 0 1-0.446 1-1s-0.446-1-1-1h-2zm-8 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h1c0.554 0 1-0.446 1-1s-0.446-1-1-1h-1z" fill="#fff"/> </g> </svg> diff --git a/editor/icons/icon_parallax_background.svg b/editor/icons/icon_parallax_background.svg index dc0a7ba216..822e7149a9 100644 --- a/editor/icons/icon_parallax_background.svg +++ b/editor/icons/icon_parallax_background.svg @@ -1,15 +1,6 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1036.4)"> <ellipse cx="3" cy="1039.4" r="2" fill="#6e6e6e"/> -<path d="m1 1039.4a1 1 0 0 1 1 -1v1z" fill="#e0e0e0" fill-opacity=".99608"/> -<path transform="scale(-1,1)" d="m-15 1039.4a1 1 0 0 1 1 -1v1z" fill="#e0e0e0" fill-opacity=".99608"/> -<rect x="2" y="1038.4" width="12" height="1" fill="#e0e0e0" fill-opacity=".99608"/> -<rect x="2" y="1049.4" width="12" height="1" fill="#e0e0e0" fill-opacity=".99608"/> -<path transform="scale(1,-1)" d="m1-1049.4a1 1 0 0 1 1 -1v1z" fill="#e0e0e0" fill-opacity=".99608"/> -<path transform="scale(-1)" d="m-15-1049.4a1 1 0 0 1 1 -1v1z" fill="#e0e0e0" fill-opacity=".99608"/> -<rect x="1" y="1039.4" width="1" height="10" fill="#e0e0e0" fill-opacity=".99608"/> -<rect x="14" y="1039.4" width="1" height="10" fill="#e0e0e0" fill-opacity=".99608"/> -<path d="m7 1041.4-3 3 3 3z" fill="#e0e0e0" fill-opacity=".99608" fill-rule="evenodd"/> -<path d="m9 1041.4 3 3-3 3z" fill="#e0e0e0" fill-opacity=".99608" fill-rule="evenodd"/> +<path transform="translate(0 1036.4)" d="m2 2a1 1 0 0 0 -1 1v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1 -1v-10a1 1 0 0 0 -1 -1h-12zm0 1h12v10h-12v-10zm5 2l-3 3 3 3v-6zm2 0v6l3-3-3-3z" fill="#e0e0e0" fill-opacity=".99608"/> </g> </svg> diff --git a/editor/icons/icon_parallax_layer.svg b/editor/icons/icon_parallax_layer.svg index 776f7d6a6c..fbdf7f0d1f 100644 --- a/editor/icons/icon_parallax_layer.svg +++ b/editor/icons/icon_parallax_layer.svg @@ -1,8 +1,6 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1036.4)"> <ellipse cx="3" cy="1039.4" r="2" fill="#6e6e6e"/> -<path d="m7 1041.4-3 3 3 3z" fill="#a5b7f3" fill-opacity=".98824" fill-rule="evenodd"/> -<path d="m9 1041.4 3 3-3 3z" fill="#a5b7f3" fill-opacity=".98824" fill-rule="evenodd"/> -<path transform="translate(0 1036.4)" d="m3 1c-1.1046 0-2 0.89543-2 2v10c0 1.1046 0.89543 2 2 2h10c1.1046 0 2-0.89543 2-2v-10c0-1.1046-0.89543-2-2-2zm0 1h10c0.55228 9.6e-6 0.99999 0.44772 1 1v10c-1e-5 0.55228-0.44772 0.99999-1 1h-10c-0.55228-1e-5 -0.99999-0.44772-1-1v-10c9.6e-6 -0.55228 0.44772-0.99999 1-1z" fill="#a5b7f3" fill-opacity=".98824"/> +<path transform="translate(0 1036.4)" d="m3 1c-1.1046 0-2 0.89543-2 2v10c0 1.1046 0.89543 2 2 2h10c1.1046 0 2-0.89543 2-2v-10c0-1.1046-0.89543-2-2-2h-10zm0 1h10c0.55228 9.6e-6 0.99999 0.44772 1 1v10c-1e-5 0.55228-0.44772 0.99999-1 1h-10c-0.55228-1e-5 -0.99999-0.44772-1-1v-10c9.6e-6 -0.55228 0.44772-0.99999 1-1zm4 3l-3 3 3 3v-6zm2 0v6l3-3-3-3z" fill="#a5b7f3" fill-opacity=".98824" fill-rule="evenodd"/> </g> </svg> diff --git a/editor/icons/icon_path.svg b/editor/icons/icon_path.svg index 998fabb888..254aa4b324 100644 --- a/editor/icons/icon_path.svg +++ b/editor/icons/icon_path.svg @@ -1,7 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1036.4)"> -<circle cx="3" cy="1049.4" r="2" fill="#fc9c9c" fill-opacity=".99608"/> -<circle cx="13" cy="1039.4" r="2" fill="#fc9c9c" fill-opacity=".99608"/> -<path d="m3 1049.4c0-9 10-1 10-10" fill="none" stroke="#fc9c9c" stroke-opacity=".99608" stroke-width="2"/> +<path transform="translate(0 1036.4)" d="m13 1a2 2 0 0 0 -2 2 2 2 0 0 0 0.84961 1.6328c-0.19239 0.88508-0.55317 1.3394-0.98633 1.6426-0.64426 0.451-1.7129 0.60547-2.9629 0.73047s-2.6814 0.22053-3.9121 1.082c-0.89278 0.62493-1.5321 1.6522-1.8184 3.0957a2 2 0 0 0 -1.1699 1.8164 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -0.84961 -1.6328c0.19235-0.88496 0.55306-1.3373 0.98633-1.6406 0.64426-0.451 1.7129-0.60547 2.9629-0.73047s2.6814-0.22053 3.9121-1.082c0.8927-0.62488 1.5321-1.6538 1.8184-3.0977a2 2 0 0 0 1.1699 -1.8164 2 2 0 0 0 -2 -2z" fill="#fc9c9c" fill-opacity=".99608"/> </g> </svg> diff --git a/editor/icons/icon_path_2d.svg b/editor/icons/icon_path_2d.svg index 8d329b3f1f..0195bfe1d7 100644 --- a/editor/icons/icon_path_2d.svg +++ b/editor/icons/icon_path_2d.svg @@ -1,7 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#a5b7f3" fill-opacity=".98824"> -<circle cx="3" cy="1049.4" r="2"/> -<circle cx="13" cy="1039.4" r="2"/> -<path d="m12 1039.4c0 2.0648-0.49246 2.8244-1.1367 3.2754-0.64426 0.451-1.7129 0.6055-2.9629 0.7305s-2.6814 0.2205-3.9121 1.082c-1.2307 0.8615-1.9883 2.4769-1.9883 4.9121h2c0-2.0648 0.49246-2.8224 1.1367-3.2734 0.64426-0.451 1.7129-0.6055 2.9629-0.7305s2.6814-0.2205 3.9121-1.082c1.2307-0.8615 1.9883-2.4789 1.9883-4.9141h-2z" color="#000000" color-rendering="auto" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="block-progression:tb;isolation:auto;mix-blend-mode:normal;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none;white-space:normal"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m13 1a2 2 0 0 0 -2 2 2 2 0 0 0 0.84961 1.6328c-0.19239 0.88508-0.55317 1.3394-0.98633 1.6426-0.64426 0.451-1.7129 0.60547-2.9629 0.73047s-2.6814 0.22053-3.9121 1.082c-0.89278 0.62493-1.5321 1.6522-1.8184 3.0957a2 2 0 0 0 -1.1699 1.8164 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -0.84961 -1.6328c0.19235-0.88496 0.55306-1.3373 0.98633-1.6406 0.64426-0.451 1.7129-0.60547 2.9629-0.73047s2.6814-0.22053 3.9121-1.082c0.8927-0.62488 1.5321-1.6538 1.8184-3.0977a2 2 0 0 0 1.1699 -1.8164 2 2 0 0 0 -2 -2z" fill="#a5b7f3" fill-opacity=".98824"/> </g> </svg> diff --git a/editor/icons/icon_path_follow.svg b/editor/icons/icon_path_follow.svg index a614e2c861..bd3f585e54 100644 --- a/editor/icons/icon_path_follow.svg +++ b/editor/icons/icon_path_follow.svg @@ -1,7 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#fc9c9c" fill-opacity=".99608"> -<circle cx="3" cy="1049.4" r="2"/> -<path d="m12 1039.4c0 2.0648-0.49246 2.8244-1.1367 3.2754-0.64426 0.451-1.7129 0.6055-2.9629 0.7305s-2.6814 0.2205-3.9121 1.082c-1.2307 0.8615-1.9883 2.4769-1.9883 4.9121h2c0-2.0648 0.49246-2.8224 1.1367-3.2734 0.64426-0.451 1.7129-0.6055 2.9629-0.7305s2.6814-0.2205 3.9121-1.082c1.2307-0.8615 1.9883-2.4789 1.9883-4.9141h-2z" color="#000000" color-rendering="auto" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="block-progression:tb;isolation:auto;mix-blend-mode:normal;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none;white-space:normal"/> -<path d="m10 1040.4h6l-3-4z" fill-rule="evenodd"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m13 0l-3 4h1.9473c-0.1385 1.3203-0.5583 1.9074-1.084 2.2754-0.64426 0.451-1.7129 0.60547-2.9629 0.73047s-2.6814 0.22053-3.9121 1.082c-0.89278 0.62493-1.5321 1.6522-1.8184 3.0957a2 2 0 0 0 -1.1699 1.8164 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -0.84961 -1.6328c0.19235-0.88496 0.55306-1.3373 0.98633-1.6406 0.64426-0.451 1.7129-0.60547 2.9629-0.73047s2.6814-0.22053 3.9121-1.082c1.0528-0.73697 1.7552-2.032 1.9375-3.9141h2.0508l-3-4z" fill="#fc9c9c" fill-opacity=".99608"/> </g> </svg> diff --git a/editor/icons/icon_path_follow_2d.svg b/editor/icons/icon_path_follow_2d.svg index 97e21396af..7dc3015105 100644 --- a/editor/icons/icon_path_follow_2d.svg +++ b/editor/icons/icon_path_follow_2d.svg @@ -1,7 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#a5b7f3" fill-opacity=".98824"> -<circle cx="3" cy="1049.4" r="2"/> -<path d="m12 1039.4c0 2.0648-0.49246 2.8244-1.1367 3.2754-0.64426 0.451-1.7129 0.6055-2.9629 0.7305s-2.6814 0.2205-3.9121 1.082c-1.2307 0.8615-1.9883 2.4769-1.9883 4.9121h2c0-2.0648 0.49246-2.8224 1.1367-3.2734 0.64426-0.451 1.7129-0.6055 2.9629-0.7305s2.6814-0.2205 3.9121-1.082c1.2307-0.8615 1.9883-2.4789 1.9883-4.9141h-2z" color="#000000" color-rendering="auto" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="block-progression:tb;isolation:auto;mix-blend-mode:normal;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none;white-space:normal"/> -<path d="m10 1040.4h6l-3-4z" fill-rule="evenodd"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m13 0l-3 4h1.9473c-0.1385 1.3203-0.5583 1.9074-1.084 2.2754-0.64426 0.451-1.7129 0.60547-2.9629 0.73047s-2.6814 0.22053-3.9121 1.082c-0.89278 0.62493-1.5321 1.6522-1.8184 3.0957a2 2 0 0 0 -1.1699 1.8164 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -0.84961 -1.6328c0.19235-0.88496 0.55306-1.3373 0.98633-1.6406 0.64426-0.451 1.7129-0.60547 2.9629-0.73047s2.6814-0.22053 3.9121-1.082c1.0528-0.73697 1.7552-2.032 1.9375-3.9141h2.0508l-3-4z" fill="#a5b7f3" fill-opacity=".98824"/> </g> </svg> diff --git a/editor/icons/icon_pin.svg b/editor/icons/icon_pin.svg index b0f4ae4e99..332692fdd5 100644 --- a/editor/icons/icon_pin.svg +++ b/editor/icons/icon_pin.svg @@ -1,8 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#e0e0e0"> -<path d="m3 1046.4h10l-2-3h-6z" fill-rule="evenodd"/> -<path transform="translate(0 1036.4)" d="m4 1v1l1 1v3h6v-3l1-1v-1h-8z" fill-rule="evenodd"/> -<rect x="7" y="1047.4" width="2" height="2"/> -<path d="m7 1049.4 1 2 1-2h-2z" fill-rule="evenodd"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m4 1v1l1 1v3h6v-3l1-1v-1h-8zm1 6l-2 3h10l-2-3h-6zm2 4v2l1 2 1-2v-2h-2z" fill="#e0e0e0" fill-rule="evenodd"/> </g> </svg> diff --git a/editor/icons/icon_pin_joint.svg b/editor/icons/icon_pin_joint.svg index 028981a95a..cfbb8cbbcd 100644 --- a/editor/icons/icon_pin_joint.svg +++ b/editor/icons/icon_pin_joint.svg @@ -1,8 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#fc9c9c"> -<path d="m1.9289 1043.3 7.0711 7.071l0.70711-3.5355-4.2426-4.2426z" fill-rule="evenodd"/> -<path d="m9 1037.6-0.70711 0.7071v1.4142l-2.1213 2.1214 4.2426 4.2426 2.1213-2.1213h1.4142l0.70711-0.7071-5.6569-5.6569z" fill-rule="evenodd"/> -<rect transform="matrix(.70711 .70711 -.70711 .70711 0 0)" x="743.08" y="737.35" width="2" height="2"/> -<path d="m2.636 1048.2-0.70711 2.1213 2.1213-0.7071-1.4142-1.4142z" fill-rule="evenodd"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m9 1.2715l-0.70703 0.70703v1.4141l-2.1211 2.123 4.2422 4.2422 2.1211-2.1211h1.4141l0.70703-0.70703-5.6562-5.6582zm-3.5352 4.9512l-3.5352 0.70703 7.0703 7.0703 0.70703-3.5352-4.2422-4.2422zm-1.4141 4.2422l-1.4141 1.4141-0.70703 2.1211 2.1211-0.70703 1.4141-1.4141-1.4141-1.4141z" fill="#fc9c9c" fill-rule="evenodd"/> </g> </svg> diff --git a/editor/icons/icon_pin_pressed.svg b/editor/icons/icon_pin_pressed.svg index b0f4ae4e99..332692fdd5 100644 --- a/editor/icons/icon_pin_pressed.svg +++ b/editor/icons/icon_pin_pressed.svg @@ -1,8 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#e0e0e0"> -<path d="m3 1046.4h10l-2-3h-6z" fill-rule="evenodd"/> -<path transform="translate(0 1036.4)" d="m4 1v1l1 1v3h6v-3l1-1v-1h-8z" fill-rule="evenodd"/> -<rect x="7" y="1047.4" width="2" height="2"/> -<path d="m7 1049.4 1 2 1-2h-2z" fill-rule="evenodd"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m4 1v1l1 1v3h6v-3l1-1v-1h-8zm1 6l-2 3h10l-2-3h-6zm2 4v2l1 2 1-2v-2h-2z" fill="#e0e0e0" fill-rule="evenodd"/> </g> </svg> diff --git a/editor/icons/icon_play.svg b/editor/icons/icon_play.svg index 7b96840a44..47a2ca12cc 100644 --- a/editor/icons/icon_play.svg +++ b/editor/icons/icon_play.svg @@ -1,5 +1,7 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1036.4)"> -<path d="m4 1048.4v-8l7 4z" fill="#e0e0e0" fill-rule="evenodd" stroke="#e0e0e0" stroke-linejoin="round" stroke-width="2"/> +<g> +<path d="m4.9883 1039.4c-0.5469 0.01-0.98717 0.4511-0.98828 0.998v8c1.163e-4 0.7986 0.89011 1.275 1.5547 0.8321l6-4c0.59362-0.3959 0.59362-1.2682 0-1.6641l-6-4c-0.1678-0.1111-0.3652-0.1689-0.56641-0.166z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#e0e0e0" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> +</g> </g> </svg> diff --git a/editor/icons/icon_play_backwards.svg b/editor/icons/icon_play_backwards.svg index bb6ae76e0d..c6de746f05 100644 --- a/editor/icons/icon_play_backwards.svg +++ b/editor/icons/icon_play_backwards.svg @@ -1,5 +1,7 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1036.4)"> -<path d="m12 1048.4v-8l-7 4z" fill="#e0e0e0" fill-rule="evenodd" stroke="#e0e0e0" stroke-linejoin="round" stroke-width="2"/> +<g transform="matrix(-1 0 0 1 16 0)"> +<path d="m4.9883 1039.4c-0.5469 0.01-0.98717 0.4511-0.98828 0.998v8c1.163e-4 0.7986 0.89011 1.275 1.5547 0.8321l6-4c0.59362-0.3959 0.59362-1.2682 0-1.6641l-6-4c-0.1678-0.1111-0.3652-0.1689-0.56641-0.166z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#e0e0e0" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> +</g> </g> </svg> diff --git a/editor/icons/icon_play_custom.svg b/editor/icons/icon_play_custom.svg index 9da56dc19e..ddd2ee56d8 100644 --- a/editor/icons/icon_play_custom.svg +++ b/editor/icons/icon_play_custom.svg @@ -1,6 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#e0e0e0"> -<path transform="translate(0 1036.4)" d="m1 7v6a2 2 0 0 0 2 2h12v-8h-14zm3 1h4v1h4v5h-4-4v-5-1z"/> -<path d="m0.71129 1040.4 0.28871 1.9791l2.2438-0.3273-0.81826-1.9018-1.7143 0.25zm3.6933-0.5387 0.81826 1.9018 1.9791-0.2887-0.81826-1.9018-1.9791 0.2887zm3.9581-0.5775 0.81826 1.9018 1.9791-0.2887-0.81826-1.9018-1.9791 0.2887zm3.9581-0.5774 0.81826 1.9018 1.7143-0.25-0.28871-1.9791-2.2438 0.3273z"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m14.564 2l-2.2441 0.32812 0.81836 1.9004 1.7148-0.25-0.28906-1.9785zm-4.2227 0.61523l-1.9785 0.28906 0.81836 1.9023 1.9785-0.28906-0.81836-1.9023zm-3.959 0.57812l-1.9785 0.28906 0.81836 1.9023 1.9785-0.28906-0.81836-1.9023zm-3.957 0.57812l-1.7148 0.25 0.28906 1.9785 2.2441-0.32812-0.81836-1.9004zm-1.4258 3.2285v6a2 2 0 0 0 2 2h12v-8h-14zm3 1h4v1h4v5h-4-4v-5-1z" fill="#e0e0e0"/> </g> </svg> diff --git a/editor/icons/icon_play_scene.svg b/editor/icons/icon_play_scene.svg index aef7b9e803..4ba0f88bcf 100644 --- a/editor/icons/icon_play_scene.svg +++ b/editor/icons/icon_play_scene.svg @@ -1,8 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#e0e0e0"> -<path transform="translate(0 1036.4)" d="m1 7v6h2v2h12v-8h-14zm5 1l5 3-5 3v-6z"/> -<path d="m0.71129 1040.4 0.28871 1.9791l2.2438-0.3273-0.81826-1.9018-1.7143 0.25zm3.6933-0.5387 0.81826 1.9018 1.9791-0.2887-0.81826-1.9018-1.9791 0.2887zm3.9581-0.5775 0.81826 1.9018 1.9791-0.2887-0.81826-1.9018-1.9791 0.2887zm3.9581-0.5774 0.81826 1.9018 1.7143-0.25-0.28871-1.9791-2.2438 0.3273z"/> -<circle cx="3" cy="1049.4" r="2"/> -<circle cx="13" cy="1049.4" r="2"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m14.564 2-2.2441 0.32812 0.81836 1.9004 1.7148-0.25zm-4.2227 0.61523-1.9785 0.28906 0.81836 1.9023 1.9785-0.28906zm-3.959 0.57812-1.9785 0.28906 0.81836 1.9023 1.9785-0.28906zm-3.957 0.57812-1.7148 0.25l0.28906 1.9785 2.2441-0.32812zm-1.4258 3.2285v6c0 1.1046 0.89543 2 2 2h12v-8zm5 1 5 3-5 3z" fill="#e0e0e0"/> </g> </svg> diff --git a/editor/icons/icon_play_start.svg b/editor/icons/icon_play_start.svg index 9c75dca2a1..541a18e3d9 100644 --- a/editor/icons/icon_play_start.svg +++ b/editor/icons/icon_play_start.svg @@ -1,8 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#e0e0e0"> -<path d="m7.0001 1048.4v-8l7 4z" fill-rule="evenodd" stroke="#e0e0e0" stroke-linejoin="round" stroke-width="2"/> -<path d="m3 1039.4c0.55226 1e-4 0.99994 0.4477 1 1v8c-5.5e-5 0.5523-0.44774 0.9999-1 1h-1v-1h-1v-8h1v-1z" color="#000000" color-rendering="auto" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="block-progression:tb;isolation:auto;mix-blend-mode:normal;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none;white-space:normal"/> -<circle transform="scale(-1,1)" cx="-2" cy="1040.4" r="1"/> -<circle transform="scale(-1,1)" cx="-2" cy="1048.4" r="1"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m3 3a1 1 0 0 0 -1 1v8a1 1 0 0 0 1 1h1c0.55226-1e-4 0.99994-0.4477 1-1v-8c-5.5e-5 -0.5523-0.44774-0.9999-1-1h-1zm4.9746 0c-0.54154 0.014-0.97365 0.45635-0.97461 0.99805v8c-3.92e-4 0.8389 0.97003 1.3054 1.625 0.78125l5-4c0.49938-0.4004 0.49938-1.1601 0-1.5605l-5-4c-0.18422-0.1473-0.41459-0.22485-0.65039-0.21875z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#e0e0e0" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> </g> </svg> diff --git a/editor/icons/icon_play_start_backwards.svg b/editor/icons/icon_play_start_backwards.svg index eede120ae7..b1acc749e0 100644 --- a/editor/icons/icon_play_start_backwards.svg +++ b/editor/icons/icon_play_start_backwards.svg @@ -1,8 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#e0e0e0"> -<path d="m8.9999 1048.4v-8l-7 4z" fill-rule="evenodd" stroke="#e0e0e0" stroke-linejoin="round" stroke-width="2"/> -<path d="m13 1039.4c-0.55226 1e-4 -0.99994 0.4477-1 1v8c5.5e-5 0.5523 0.44774 0.9999 1 1h1v-1h1v-8h-1v-1z" color="#000000" color-rendering="auto" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="block-progression:tb;isolation:auto;mix-blend-mode:normal;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none;white-space:normal"/> -<circle cx="14" cy="1040.4" r="1"/> -<circle cx="14" cy="1048.4" r="1"/> +<g transform="translate(0 -1036.4)"> +<path d="m13 1039.4a1 1 0 0 1 1 1v8a1 1 0 0 1 -1 1h-1c-0.55226-1e-4 -0.99994-0.4477-1-1v-8c5.5e-5 -0.5523 0.44774-0.9999 1-1zm-4.9746 0c0.54154 0.014 0.97365 0.4563 0.97461 0.998v8c3.92e-4 0.8389-0.97003 1.3055-1.625 0.7813l-5-4c-0.49938-0.4004-0.49938-1.1601 0-1.5605l5-4c0.18422-0.1473 0.41459-0.2249 0.65039-0.2188z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#e0e0e0" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> </g> </svg> diff --git a/editor/icons/icon_popup_menu.svg b/editor/icons/icon_popup_menu.svg index 05e60d7d41..9181cb42a3 100644 --- a/editor/icons/icon_popup_menu.svg +++ b/editor/icons/icon_popup_menu.svg @@ -1,6 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#a5efac"> -<path transform="translate(0 1036.4)" d="m2 6a1 1 0 0 0 -1 1v7a1 1 0 0 0 1 1h12a1 1 0 0 0 1 -1v-7a1 1 0 0 0 -1 -1h-12zm1 2h10v2h-10v-2zm0 3h10v2h-10v-2z"/> -<path transform="translate(0 1036.4)" d="m1 1v4h6v-4h-6zm1 1h4l-2 2-2-2z"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m1 1v4h6v-4h-6zm1 1h4l-2 2-2-2zm0 4a1 1 0 0 0 -1 1v7a1 1 0 0 0 1 1h12a1 1 0 0 0 1 -1v-7a1 1 0 0 0 -1 -1h-12zm1 2h10v2h-10v-2zm0 3h10v2h-10v-2z" fill="#a5efac"/> </g> </svg> diff --git a/editor/icons/icon_popup_panel.svg b/editor/icons/icon_popup_panel.svg index ce4e7c283c..302b12670c 100644 --- a/editor/icons/icon_popup_panel.svg +++ b/editor/icons/icon_popup_panel.svg @@ -1,6 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#a5efac"> -<path transform="translate(0 1036.4)" d="m2 6c-0.55228 0-1 0.44772-1 1v7c0 0.55228 0.44772 1 1 1h12c0.55228 0 1-0.44772 1-1v-7c0-0.55228-0.44772-1-1-1z"/> -<path transform="translate(0 1036.4)" d="m1 1v4h6v-4h-6zm1 1h4l-2 2-2-2z"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m1 1v4h6v-4h-6zm1 1h4l-2 2-2-2zm0 4c-0.55228 0-1 0.44772-1 1v7c0 0.55228 0.44772 1 1 1h12c0.55228 0 1-0.44772 1-1v-7c0-0.55228-0.44772-1-1-1h-12z" fill="#a5efac"/> </g> </svg> diff --git a/editor/icons/icon_procedural_sky.svg b/editor/icons/icon_procedural_sky.svg index b3bc927409..47c933c202 100644 --- a/editor/icons/icon_procedural_sky.svg +++ b/editor/icons/icon_procedural_sky.svg @@ -7,8 +7,6 @@ </defs> <g transform="translate(0 -1037.4)"> <path d="m8 1040.4a7 7 0 0 0 -7 7 7 7 0 0 0 0.68555 3h12.631a7 7 0 0 0 0.68359 -3 7 7 0 0 0 -7 -7z" fill="url(#a)"/> -<rect x="2" y="1047.4" width="3" height="2" ry="1" fill="#fff"/> -<rect x="7" y="1045.4" width="4" height="2" ry="1" fill="#fff"/> -<rect x="9" y="1044.4" width="4" height="2" ry="1" fill="#fff"/> +<path transform="translate(0 1037.4)" d="m10 7c-0.554 0-1 0.446-1 1h-1c-0.554 0-1 0.446-1 1s0.446 1 1 1h2c0.554 0 1-0.446 1-1h1c0.554 0 1-0.446 1-1s-0.446-1-1-1h-2zm-7 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h1c0.554 0 1-0.446 1-1s-0.446-1-1-1h-1z" fill="#fff"/> </g> </svg> diff --git a/editor/icons/icon_progress_1.svg b/editor/icons/icon_progress_1.svg index 2df93a13f7..b793b88b45 100644 --- a/editor/icons/icon_progress_1.svg +++ b/editor/icons/icon_progress_1.svg @@ -1,12 +1,6 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1036.4)" fill="#e0e0e0"> <path d="m9 1037.4v3.0547a4 4 0 0 1 1.0273 0.4258l2.1582-2.1582a7 7 0 0 0 -3.1855 -1.3223z" fill-opacity=".99608"/> -<path d="m7 1037.4a7 7 0 0 0 -3.1855 1.3203l2.1582 2.1582a4 4 0 0 1 1.0273 -0.4277v-3.0508z" fill-opacity=".19608"/> -<path d="m2.4004 1040.2a7 7 0 0 0 -1.3223 3.1855h3.0547a4 4 0 0 1 0.42578 -1.0273l-2.1582-2.1582z" fill-opacity=".19608"/> -<path d="m13.6 1040.2-2.1582 2.1582a4 4 0 0 1 0.42774 1.0273h3.0508a7 7 0 0 0 -1.3203 -3.1855z" fill-opacity=".19608"/> -<path d="m1.0801 1045.4a7 7 0 0 0 1.3203 3.1855l2.1582-2.1582a4 4 0 0 1 -0.42773 -1.0273h-3.0508z" fill-opacity=".19608"/> -<path d="m11.867 1045.4a4 4 0 0 1 -0.42578 1.0273l2.1582 2.1582a7 7 0 0 0 1.3223 -3.1855h-3.0547z" fill-opacity=".19608"/> -<path d="m5.9727 1047.8-2.1582 2.1582a7 7 0 0 0 3.1855 1.3223v-3.0547a4 4 0 0 1 -1.0273 -0.4258z" fill-opacity=".19608"/> -<path d="m10.027 1047.8a4 4 0 0 1 -1.0273 0.4277v3.0508a7 7 0 0 0 3.1855 -1.3203l-2.1582-2.1582z" fill-opacity=".19608"/> +<path transform="translate(0 1036.4)" d="m7 1.0801a7 7 0 0 0 -3.1855 1.3203l2.1582 2.1582a4 4 0 0 1 1.0273 -0.42773v-3.0508zm-4.5996 2.7344a7 7 0 0 0 -1.3223 3.1855h3.0547a4 4 0 0 1 0.42578 -1.0273l-2.1582-2.1582zm11.199 0l-2.1582 2.1582a4 4 0 0 1 0.42774 1.0273h3.0508a7 7 0 0 0 -1.3203 -3.1855zm-12.52 5.1855a7 7 0 0 0 1.3203 3.1855l2.1582-2.1582a4 4 0 0 1 -0.42773 -1.0273h-3.0508zm10.787 0a4 4 0 0 1 -0.42578 1.0273l2.1582 2.1582a7 7 0 0 0 1.3223 -3.1855h-3.0547zm-5.8945 2.4414l-2.1582 2.1582a7 7 0 0 0 3.1855 1.3223v-3.0547a4 4 0 0 1 -1.0273 -0.42578zm4.0547 0a4 4 0 0 1 -1.0273 0.42774v3.0508a7 7 0 0 0 3.1855 -1.3203l-2.1582-2.1582z" fill-opacity=".19608"/> </g> </svg> diff --git a/editor/icons/icon_progress_2.svg b/editor/icons/icon_progress_2.svg index 9af1ff7c3d..26595912e1 100644 --- a/editor/icons/icon_progress_2.svg +++ b/editor/icons/icon_progress_2.svg @@ -1,12 +1,6 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1036.4)" fill="#e0e0e0"> -<path d="m9 1037.4v3.0547a4 4 0 0 1 1.0273 0.4258l2.1582-2.1582a7 7 0 0 0 -3.1855 -1.3223z" fill-opacity=".19608"/> -<path d="m7 1037.4a7 7 0 0 0 -3.1855 1.3203l2.1582 2.1582a4 4 0 0 1 1.0273 -0.4277v-3.0508z" fill-opacity=".19608"/> -<path d="m2.4004 1040.2a7 7 0 0 0 -1.3223 3.1855h3.0547a4 4 0 0 1 0.42578 -1.0273l-2.1582-2.1582z" fill-opacity=".19608"/> +<path transform="translate(0 1036.4)" d="m9 1.0781v3.0547a4 4 0 0 1 1.0273 0.42578l2.1582-2.1582a7 7 0 0 0 -3.1855 -1.3223zm-2 0.0019531a7 7 0 0 0 -3.1855 1.3203l2.1582 2.1582a4 4 0 0 1 1.0273 -0.42773v-3.0508zm-4.5996 2.7344a7 7 0 0 0 -1.3223 3.1855h3.0547a4 4 0 0 1 0.42578 -1.0273l-2.1582-2.1582zm-1.3203 5.1855a7 7 0 0 0 1.3203 3.1855l2.1582-2.1582a4 4 0 0 1 -0.42773 -1.0273h-3.0508zm10.787 0a4 4 0 0 1 -0.42578 1.0273l2.1582 2.1582a7 7 0 0 0 1.3223 -3.1855h-3.0547zm-5.8945 2.4414l-2.1582 2.1582a7 7 0 0 0 3.1855 1.3223v-3.0547a4 4 0 0 1 -1.0273 -0.42578zm4.0547 0a4 4 0 0 1 -1.0273 0.42774v3.0508a7 7 0 0 0 3.1855 -1.3203l-2.1582-2.1582z" fill-opacity=".19608"/> <path d="m13.6 1040.2-2.1582 2.1582a4 4 0 0 1 0.42774 1.0273h3.0508a7 7 0 0 0 -1.3203 -3.1855z" fill-opacity=".99608"/> -<path d="m1.0801 1045.4a7 7 0 0 0 1.3203 3.1855l2.1582-2.1582a4 4 0 0 1 -0.42773 -1.0273h-3.0508z" fill-opacity=".19608"/> -<path d="m11.867 1045.4a4 4 0 0 1 -0.42578 1.0273l2.1582 2.1582a7 7 0 0 0 1.3223 -3.1855h-3.0547z" fill-opacity=".19608"/> -<path d="m5.9727 1047.8-2.1582 2.1582a7 7 0 0 0 3.1855 1.3223v-3.0547a4 4 0 0 1 -1.0273 -0.4258z" fill-opacity=".19608"/> -<path d="m10.027 1047.8a4 4 0 0 1 -1.0273 0.4277v3.0508a7 7 0 0 0 3.1855 -1.3203l-2.1582-2.1582z" fill-opacity=".19608"/> </g> </svg> diff --git a/editor/icons/icon_progress_3.svg b/editor/icons/icon_progress_3.svg index 92489f013c..c618848106 100644 --- a/editor/icons/icon_progress_3.svg +++ b/editor/icons/icon_progress_3.svg @@ -1,12 +1,6 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1036.4)" fill="#e0e0e0"> -<path d="m9 1037.4v3.0547a4 4 0 0 1 1.0273 0.4258l2.1582-2.1582a7 7 0 0 0 -3.1855 -1.3223z" fill-opacity=".19608"/> -<path d="m7 1037.4a7 7 0 0 0 -3.1855 1.3203l2.1582 2.1582a4 4 0 0 1 1.0273 -0.4277v-3.0508z" fill-opacity=".19608"/> -<path d="m2.4004 1040.2a7 7 0 0 0 -1.3223 3.1855h3.0547a4 4 0 0 1 0.42578 -1.0273l-2.1582-2.1582z" fill-opacity=".19608"/> -<path d="m13.6 1040.2-2.1582 2.1582a4 4 0 0 1 0.42774 1.0273h3.0508a7 7 0 0 0 -1.3203 -3.1855z" fill-opacity=".19608"/> -<path d="m1.0801 1045.4a7 7 0 0 0 1.3203 3.1855l2.1582-2.1582a4 4 0 0 1 -0.42773 -1.0273h-3.0508z" fill-opacity=".19608"/> +<path transform="translate(0 1036.4)" d="m9 1.0781v3.0547a4 4 0 0 1 1.0273 0.42578l2.1582-2.1582a7 7 0 0 0 -3.1855 -1.3223zm-2 0.0019531a7 7 0 0 0 -3.1855 1.3203l2.1582 2.1582a4 4 0 0 1 1.0273 -0.42773v-3.0508zm-4.5996 2.7344a7 7 0 0 0 -1.3223 3.1855h3.0547a4 4 0 0 1 0.42578 -1.0273l-2.1582-2.1582zm11.199 0l-2.1582 2.1582a4 4 0 0 1 0.42774 1.0273h3.0508a7 7 0 0 0 -1.3203 -3.1855zm-12.52 5.1855a7 7 0 0 0 1.3203 3.1855l2.1582-2.1582a4 4 0 0 1 -0.42773 -1.0273h-3.0508zm4.8926 2.4414l-2.1582 2.1582a7 7 0 0 0 3.1855 1.3223v-3.0547a4 4 0 0 1 -1.0273 -0.42578zm4.0547 0a4 4 0 0 1 -1.0273 0.42774v3.0508a7 7 0 0 0 3.1855 -1.3203l-2.1582-2.1582z" fill-opacity=".19608"/> <path d="m11.867 1045.4a4 4 0 0 1 -0.42578 1.0273l2.1582 2.1582a7 7 0 0 0 1.3223 -3.1855h-3.0547z" fill-opacity=".99608"/> -<path d="m5.9727 1047.8-2.1582 2.1582a7 7 0 0 0 3.1855 1.3223v-3.0547a4 4 0 0 1 -1.0273 -0.4258z" fill-opacity=".19608"/> -<path d="m10.027 1047.8a4 4 0 0 1 -1.0273 0.4277v3.0508a7 7 0 0 0 3.1855 -1.3203l-2.1582-2.1582z" fill-opacity=".19608"/> </g> </svg> diff --git a/editor/icons/icon_progress_4.svg b/editor/icons/icon_progress_4.svg index 5acd6c3936..fa71f5e484 100644 --- a/editor/icons/icon_progress_4.svg +++ b/editor/icons/icon_progress_4.svg @@ -1,12 +1,6 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1036.4)" fill="#e0e0e0"> -<path d="m9 1037.4v3.0547a4 4 0 0 1 1.0273 0.4258l2.1582-2.1582a7 7 0 0 0 -3.1855 -1.3223z" fill-opacity=".19608"/> -<path d="m7 1037.4a7 7 0 0 0 -3.1855 1.3203l2.1582 2.1582a4 4 0 0 1 1.0273 -0.4277v-3.0508z" fill-opacity=".19608"/> -<path d="m2.4004 1040.2a7 7 0 0 0 -1.3223 3.1855h3.0547a4 4 0 0 1 0.42578 -1.0273l-2.1582-2.1582z" fill-opacity=".19608"/> -<path d="m13.6 1040.2-2.1582 2.1582a4 4 0 0 1 0.42774 1.0273h3.0508a7 7 0 0 0 -1.3203 -3.1855z" fill-opacity=".19608"/> -<path d="m1.0801 1045.4a7 7 0 0 0 1.3203 3.1855l2.1582-2.1582a4 4 0 0 1 -0.42773 -1.0273h-3.0508z" fill-opacity=".19608"/> -<path d="m11.867 1045.4a4 4 0 0 1 -0.42578 1.0273l2.1582 2.1582a7 7 0 0 0 1.3223 -3.1855h-3.0547z" fill-opacity=".19608"/> -<path d="m5.9727 1047.8-2.1582 2.1582a7 7 0 0 0 3.1855 1.3223v-3.0547a4 4 0 0 1 -1.0273 -0.4258z" fill-opacity=".19608"/> +<path transform="translate(0 1036.4)" d="m9 1.0781v3.0547a4 4 0 0 1 1.0273 0.42578l2.1582-2.1582a7 7 0 0 0 -3.1855 -1.3223zm-2 0.0019531a7 7 0 0 0 -3.1855 1.3203l2.1582 2.1582a4 4 0 0 1 1.0273 -0.42773v-3.0508zm-4.5996 2.7344a7 7 0 0 0 -1.3223 3.1855h3.0547a4 4 0 0 1 0.42578 -1.0273l-2.1582-2.1582zm11.199 0l-2.1582 2.1582a4 4 0 0 1 0.42774 1.0273h3.0508a7 7 0 0 0 -1.3203 -3.1855zm-12.52 5.1855a7 7 0 0 0 1.3203 3.1855l2.1582-2.1582a4 4 0 0 1 -0.42773 -1.0273h-3.0508zm10.787 0a4 4 0 0 1 -0.42578 1.0273l2.1582 2.1582a7 7 0 0 0 1.3223 -3.1855h-3.0547zm-5.8945 2.4414l-2.1582 2.1582a7 7 0 0 0 3.1855 1.3223v-3.0547a4 4 0 0 1 -1.0273 -0.42578z" fill-opacity=".19608"/> <path d="m10.027 1047.8a4 4 0 0 1 -1.0273 0.4277v3.0508a7 7 0 0 0 3.1855 -1.3203l-2.1582-2.1582z" fill-opacity=".99608"/> </g> </svg> diff --git a/editor/icons/icon_progress_5.svg b/editor/icons/icon_progress_5.svg index 8c4d1abcc3..90151fb9c9 100644 --- a/editor/icons/icon_progress_5.svg +++ b/editor/icons/icon_progress_5.svg @@ -1,12 +1,6 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1036.4)" fill="#e0e0e0"> -<path d="m9 1037.4v3.0547a4 4 0 0 1 1.0273 0.4258l2.1582-2.1582a7 7 0 0 0 -3.1855 -1.3223z" fill-opacity=".19608"/> -<path d="m7 1037.4a7 7 0 0 0 -3.1855 1.3203l2.1582 2.1582a4 4 0 0 1 1.0273 -0.4277v-3.0508z" fill-opacity=".19608"/> -<path d="m2.4004 1040.2a7 7 0 0 0 -1.3223 3.1855h3.0547a4 4 0 0 1 0.42578 -1.0273l-2.1582-2.1582z" fill-opacity=".19608"/> -<path d="m13.6 1040.2-2.1582 2.1582a4 4 0 0 1 0.42774 1.0273h3.0508a7 7 0 0 0 -1.3203 -3.1855z" fill-opacity=".19608"/> -<path d="m1.0801 1045.4a7 7 0 0 0 1.3203 3.1855l2.1582-2.1582a4 4 0 0 1 -0.42773 -1.0273h-3.0508z" fill-opacity=".19608"/> -<path d="m11.867 1045.4a4 4 0 0 1 -0.42578 1.0273l2.1582 2.1582a7 7 0 0 0 1.3223 -3.1855h-3.0547z" fill-opacity=".19608"/> +<path transform="translate(0 1036.4)" d="m9 1.0781v3.0547a4 4 0 0 1 1.0273 0.42578l2.1582-2.1582a7 7 0 0 0 -3.1855 -1.3223zm-2 0.0019531a7 7 0 0 0 -3.1855 1.3203l2.1582 2.1582a4 4 0 0 1 1.0273 -0.42773v-3.0508zm-4.5996 2.7344a7 7 0 0 0 -1.3223 3.1855h3.0547a4 4 0 0 1 0.42578 -1.0273l-2.1582-2.1582zm11.199 0l-2.1582 2.1582a4 4 0 0 1 0.42774 1.0273h3.0508a7 7 0 0 0 -1.3203 -3.1855zm-12.52 5.1855a7 7 0 0 0 1.3203 3.1855l2.1582-2.1582a4 4 0 0 1 -0.42773 -1.0273h-3.0508zm10.787 0a4 4 0 0 1 -0.42578 1.0273l2.1582 2.1582a7 7 0 0 0 1.3223 -3.1855h-3.0547zm-1.8398 2.4414a4 4 0 0 1 -1.0273 0.42774v3.0508a7 7 0 0 0 3.1855 -1.3203l-2.1582-2.1582z" fill-opacity=".19608"/> <path d="m5.9727 1047.8-2.1582 2.1582a7 7 0 0 0 3.1855 1.3223v-3.0547a4 4 0 0 1 -1.0273 -0.4258z" fill-opacity=".99608"/> -<path d="m10.027 1047.8a4 4 0 0 1 -1.0273 0.4277v3.0508a7 7 0 0 0 3.1855 -1.3203l-2.1582-2.1582z" fill-opacity=".19608"/> </g> </svg> diff --git a/editor/icons/icon_progress_6.svg b/editor/icons/icon_progress_6.svg index c91a5d7e9e..c1c43929ef 100644 --- a/editor/icons/icon_progress_6.svg +++ b/editor/icons/icon_progress_6.svg @@ -1,12 +1,6 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1036.4)" fill="#e0e0e0"> -<path d="m9 1037.4v3.0547a4 4 0 0 1 1.0273 0.4258l2.1582-2.1582a7 7 0 0 0 -3.1855 -1.3223z" fill-opacity=".19608"/> -<path d="m7 1037.4a7 7 0 0 0 -3.1855 1.3203l2.1582 2.1582a4 4 0 0 1 1.0273 -0.4277v-3.0508z" fill-opacity=".19608"/> -<path d="m2.4004 1040.2a7 7 0 0 0 -1.3223 3.1855h3.0547a4 4 0 0 1 0.42578 -1.0273l-2.1582-2.1582z" fill-opacity=".19608"/> -<path d="m13.6 1040.2-2.1582 2.1582a4 4 0 0 1 0.42774 1.0273h3.0508a7 7 0 0 0 -1.3203 -3.1855z" fill-opacity=".19608"/> +<path transform="translate(0 1036.4)" d="m9 1.0781v3.0547a4 4 0 0 1 1.0273 0.42578l2.1582-2.1582a7 7 0 0 0 -3.1855 -1.3223zm-2 0.0019531a7 7 0 0 0 -3.1855 1.3203l2.1582 2.1582a4 4 0 0 1 1.0273 -0.42773v-3.0508zm-4.5996 2.7344a7 7 0 0 0 -1.3223 3.1855h3.0547a4 4 0 0 1 0.42578 -1.0273l-2.1582-2.1582zm11.199 0l-2.1582 2.1582a4 4 0 0 1 0.42774 1.0273h3.0508a7 7 0 0 0 -1.3203 -3.1855zm-1.7324 5.1855a4 4 0 0 1 -0.42578 1.0273l2.1582 2.1582a7 7 0 0 0 1.3223 -3.1855h-3.0547zm-5.8945 2.4414l-2.1582 2.1582a7 7 0 0 0 3.1855 1.3223v-3.0547a4 4 0 0 1 -1.0273 -0.42578zm4.0547 0a4 4 0 0 1 -1.0273 0.42774v3.0508a7 7 0 0 0 3.1855 -1.3203l-2.1582-2.1582z" fill-opacity=".19608"/> <path d="m1.0801 1045.4a7 7 0 0 0 1.3203 3.1855l2.1582-2.1582a4 4 0 0 1 -0.42773 -1.0273h-3.0508z" fill-opacity=".99608"/> -<path d="m11.867 1045.4a4 4 0 0 1 -0.42578 1.0273l2.1582 2.1582a7 7 0 0 0 1.3223 -3.1855h-3.0547z" fill-opacity=".19608"/> -<path d="m5.9727 1047.8-2.1582 2.1582a7 7 0 0 0 3.1855 1.3223v-3.0547a4 4 0 0 1 -1.0273 -0.4258z" fill-opacity=".19608"/> -<path d="m10.027 1047.8a4 4 0 0 1 -1.0273 0.4277v3.0508a7 7 0 0 0 3.1855 -1.3203l-2.1582-2.1582z" fill-opacity=".19608"/> </g> </svg> diff --git a/editor/icons/icon_progress_7.svg b/editor/icons/icon_progress_7.svg index b28175215d..718cb799f8 100644 --- a/editor/icons/icon_progress_7.svg +++ b/editor/icons/icon_progress_7.svg @@ -1,12 +1,6 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1036.4)" fill="#e0e0e0"> -<path d="m9 1037.4v3.0547a4 4 0 0 1 1.0273 0.4258l2.1582-2.1582a7 7 0 0 0 -3.1855 -1.3223z" fill-opacity=".19608"/> -<path d="m7 1037.4a7 7 0 0 0 -3.1855 1.3203l2.1582 2.1582a4 4 0 0 1 1.0273 -0.4277v-3.0508z" fill-opacity=".19608"/> +<path transform="translate(0 1036.4)" d="m9 1.0781v3.0547a4 4 0 0 1 1.0273 0.42578l2.1582-2.1582a7 7 0 0 0 -3.1855 -1.3223zm-2 0.0019531a7 7 0 0 0 -3.1855 1.3203l2.1582 2.1582a4 4 0 0 1 1.0273 -0.42773v-3.0508zm6.5996 2.7344l-2.1582 2.1582a4 4 0 0 1 0.42774 1.0273h3.0508a7 7 0 0 0 -1.3203 -3.1855zm-12.52 5.1855a7 7 0 0 0 1.3203 3.1855l2.1582-2.1582a4 4 0 0 1 -0.42773 -1.0273h-3.0508zm10.787 0a4 4 0 0 1 -0.42578 1.0273l2.1582 2.1582a7 7 0 0 0 1.3223 -3.1855h-3.0547zm-5.8945 2.4414l-2.1582 2.1582a7 7 0 0 0 3.1855 1.3223v-3.0547a4 4 0 0 1 -1.0273 -0.42578zm4.0547 0a4 4 0 0 1 -1.0273 0.42774v3.0508a7 7 0 0 0 3.1855 -1.3203l-2.1582-2.1582z" fill-opacity=".19608"/> <path d="m2.4004 1040.2a7 7 0 0 0 -1.3223 3.1855h3.0547a4 4 0 0 1 0.42578 -1.0273l-2.1582-2.1582z" fill-opacity=".99608"/> -<path d="m13.6 1040.2-2.1582 2.1582a4 4 0 0 1 0.42774 1.0273h3.0508a7 7 0 0 0 -1.3203 -3.1855z" fill-opacity=".19608"/> -<path d="m1.0801 1045.4a7 7 0 0 0 1.3203 3.1855l2.1582-2.1582a4 4 0 0 1 -0.42773 -1.0273h-3.0508z" fill-opacity=".19608"/> -<path d="m11.867 1045.4a4 4 0 0 1 -0.42578 1.0273l2.1582 2.1582a7 7 0 0 0 1.3223 -3.1855h-3.0547z" fill-opacity=".19608"/> -<path d="m5.9727 1047.8-2.1582 2.1582a7 7 0 0 0 3.1855 1.3223v-3.0547a4 4 0 0 1 -1.0273 -0.4258z" fill-opacity=".19608"/> -<path d="m10.027 1047.8a4 4 0 0 1 -1.0273 0.4277v3.0508a7 7 0 0 0 3.1855 -1.3203l-2.1582-2.1582z" fill-opacity=".19608"/> </g> </svg> diff --git a/editor/icons/icon_progress_8.svg b/editor/icons/icon_progress_8.svg index f88fbe308d..b6033cc527 100644 --- a/editor/icons/icon_progress_8.svg +++ b/editor/icons/icon_progress_8.svg @@ -1,12 +1,6 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1036.4)" fill="#e0e0e0"> -<path d="m9 1037.4v3.0547a4 4 0 0 1 1.0273 0.4258l2.1582-2.1582a7 7 0 0 0 -3.1855 -1.3223z" fill-opacity=".19608"/> +<path transform="translate(0 1036.4)" d="m9 1.0781v3.0547a4 4 0 0 1 1.0273 0.42578l2.1582-2.1582a7 7 0 0 0 -3.1855 -1.3223zm-6.5996 2.7363a7 7 0 0 0 -1.3223 3.1855h3.0547a4 4 0 0 1 0.42578 -1.0273l-2.1582-2.1582zm11.199 0l-2.1582 2.1582a4 4 0 0 1 0.42774 1.0273h3.0508a7 7 0 0 0 -1.3203 -3.1855zm-12.52 5.1855a7 7 0 0 0 1.3203 3.1855l2.1582-2.1582a4 4 0 0 1 -0.42773 -1.0273h-3.0508zm10.787 0a4 4 0 0 1 -0.42578 1.0273l2.1582 2.1582a7 7 0 0 0 1.3223 -3.1855h-3.0547zm-5.8945 2.4414l-2.1582 2.1582a7 7 0 0 0 3.1855 1.3223v-3.0547a4 4 0 0 1 -1.0273 -0.42578zm4.0547 0a4 4 0 0 1 -1.0273 0.42774v3.0508a7 7 0 0 0 3.1855 -1.3203l-2.1582-2.1582z" fill-opacity=".19608"/> <path d="m7 1037.4a7 7 0 0 0 -3.1855 1.3203l2.1582 2.1582a4 4 0 0 1 1.0273 -0.4277v-3.0508z" fill-opacity=".99608"/> -<path d="m2.4004 1040.2a7 7 0 0 0 -1.3223 3.1855h3.0547a4 4 0 0 1 0.42578 -1.0273l-2.1582-2.1582z" fill-opacity=".19608"/> -<path d="m13.6 1040.2-2.1582 2.1582a4 4 0 0 1 0.42774 1.0273h3.0508a7 7 0 0 0 -1.3203 -3.1855z" fill-opacity=".19608"/> -<path d="m1.0801 1045.4a7 7 0 0 0 1.3203 3.1855l2.1582-2.1582a4 4 0 0 1 -0.42773 -1.0273h-3.0508z" fill-opacity=".19608"/> -<path d="m11.867 1045.4a4 4 0 0 1 -0.42578 1.0273l2.1582 2.1582a7 7 0 0 0 1.3223 -3.1855h-3.0547z" fill-opacity=".19608"/> -<path d="m5.9727 1047.8-2.1582 2.1582a7 7 0 0 0 3.1855 1.3223v-3.0547a4 4 0 0 1 -1.0273 -0.4258z" fill-opacity=".19608"/> -<path d="m10.027 1047.8a4 4 0 0 1 -1.0273 0.4277v3.0508a7 7 0 0 0 3.1855 -1.3203l-2.1582-2.1582z" fill-opacity=".19608"/> </g> </svg> diff --git a/editor/icons/icon_progress_bar.svg b/editor/icons/icon_progress_bar.svg index f068d3e810..e8fe90bca2 100644 --- a/editor/icons/icon_progress_bar.svg +++ b/editor/icons/icon_progress_bar.svg @@ -1,8 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#a5efac"> -<path transform="translate(0 1036.4)" d="m3 3c-1.1046 0-2 0.89543-2 2v6c0 1.1046 0.89543 2 2 2h10c1.1046 0 2-0.89543 2-2v-6c0-1.1046-0.89543-2-2-2zm0 2h10v6h-10z"/> -<rect x="4" y="1042.4" width="1" height="4"/> -<rect x="6" y="1042.4" width="1" height="4"/> -<rect x="8" y="1042.4" width="1" height="4"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m3 3c-1.1046 0-2 0.89543-2 2v6c0 1.1046 0.89543 2 2 2h10c1.1046 0 2-0.89543 2-2v-6c0-1.1046-0.89543-2-2-2h-10zm0 2h10v6h-10v-6zm1 1v4h1v-4h-1zm2 0v4h1v-4h-1zm2 0v4h1v-4h-1z" fill="#a5efac"/> </g> </svg> diff --git a/editor/icons/icon_proximity_group.svg b/editor/icons/icon_proximity_group.svg index 536060dc7e..4f977ca548 100644 --- a/editor/icons/icon_proximity_group.svg +++ b/editor/icons/icon_proximity_group.svg @@ -1,11 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#fc9c9c" fill-opacity=".99608"> -<rect x="1" y="1037.4" width="2" height="14"/> -<rect x="1" y="1037.4" width="14" height="2"/> -<rect transform="scale(-1)" x="-15" y="-1051.4" width="2" height="14"/> -<rect transform="scale(-1)" x="-15" y="-1051.4" width="14" height="2"/> -<circle cx="10.5" cy="1041.9" r="1.5"/> -<circle cx="5.5" cy="1046.9" r="1.5"/> -<circle cx="10.5" cy="1046.9" r="1.5"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m1 1v14h14v-14zm2 2h10v10h-10zm7.5 1c-0.82843 4.8e-6 -1.5 0.67157-1.5 1.5 4.8e-6 0.82843 0.67157 1.5 1.5 1.5 0.82842-4.8e-6 1.5-0.67157 1.5-1.5-5e-6 -0.82843-0.67158-1.5-1.5-1.5zm-5 5c-0.82843-4.8e-6 -1.5 0.67157-1.5 1.5-4.8e-6 0.82843 0.67157 1.5 1.5 1.5 0.82843 5e-6 1.5-0.67157 1.5-1.5 4.8e-6 -0.82843-0.67157-1.5-1.5-1.5zm5 0c-0.82843 4.8e-6 -1.5 0.67157-1.5 1.5 4.8e-6 0.82842 0.67157 1.5 1.5 1.5 0.82842-5e-6 1.5-0.67158 1.5-1.5-5e-6 -0.82843-0.67158-1.5-1.5-1.5z" fill="#fc9c9c" fill-opacity=".99608"/> </g> </svg> diff --git a/editor/icons/icon_quat.svg b/editor/icons/icon_quat.svg index 076770360c..fc99c33aeb 100644 --- a/editor/icons/icon_quat.svg +++ b/editor/icons/icon_quat.svg @@ -1,6 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#e0e0e0"> -<path transform="translate(0 1036.4)" d="m7 1v6h2v-6h-2zm0 12v2h2v-2h-2z"/> -<path d="m11 1039.8v2.0137a5 2 0 0 1 2 1.5957 5 2 0 0 1 -5 2 5 2 0 0 1 -5 -2 5 2 0 0 1 2 -1.5977v-2.0097a7 4 0 0 0 -4 3.6074 7 4 0 0 0 7 4 7 4 0 0 0 7 -4 7 4 0 0 0 -4 -3.6094z"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m7 1v6h2v-6h-2zm4 2.3906v2.0137a5 2 0 0 1 2 1.5957 5 2 0 0 1 -5 2 5 2 0 0 1 -5 -2 5 2 0 0 1 2 -1.5977v-2.0098a7 4 0 0 0 -4 3.6074 7 4 0 0 0 7 4 7 4 0 0 0 7 -4 7 4 0 0 0 -4 -3.6094zm-4 9.6094v2h2v-2h-2z" fill="#e0e0e0"/> </g> </svg> diff --git a/editor/icons/icon_range.svg b/editor/icons/icon_range.svg index e8b62cd723..4bf0170e55 100644 --- a/editor/icons/icon_range.svg +++ b/editor/icons/icon_range.svg @@ -1,9 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#a5efac"> -<rect x="1" y="1039.4" width="2" height="10"/> -<rect x="1" y="1043.4" width="13" height="2"/> -<rect x="13" y="1039.4" width="2" height="10"/> -<rect x="5" y="1041.4" width="2" height="6"/> -<rect x="9" y="1041.4" width="2" height="6"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m1 3v10h2v-4h2v2h2v-2h2v2h2v-2h2v4h2v-10h-2v4h-2v-2h-2v2h-2v-2h-2v2h-2v-4z" fill="#a5efac"/> </g> </svg> diff --git a/editor/icons/icon_rating_no_star.svg b/editor/icons/icon_rating_no_star.svg deleted file mode 100644 index f46f90eae9..0000000000 --- a/editor/icons/icon_rating_no_star.svg +++ /dev/null @@ -1,7 +0,0 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<g fill="#c3ae65"> -<path transform="translate(0 1036.4)" d="m8 1.7246-2.375 4.0977-4.625 1.0977 3.2363 3.4063-0.35938 4.6738 4.1387-1.9766 4.1582 1.9414-0.39648-4.6523 3.2227-3.3926-4.625-1.0977z" fill="#ffd684" fill-opacity=".58824"/> -</g> -</g> -</svg> diff --git a/editor/icons/icon_rating_star.svg b/editor/icons/icon_rating_star.svg deleted file mode 100644 index f4a0199007..0000000000 --- a/editor/icons/icon_rating_star.svg +++ /dev/null @@ -1,5 +0,0 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path d="m8 1038.1-2.3741 4.0973-4.6259 1.0978l3.2361 3.4074-0.35866 4.6735 4.1389-1.9766 4.1572 1.9421-0.39534-4.6532 3.2218-3.3932-4.6259-1.0978-2.3741-4.0973z" fill="#ffd684"/> -</g> -</svg> diff --git a/editor/icons/icon_ray_cast.svg b/editor/icons/icon_ray_cast.svg index ab2a9a58c8..97901fb010 100644 --- a/editor/icons/icon_ray_cast.svg +++ b/editor/icons/icon_ray_cast.svg @@ -1,6 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#fc9c9c" fill-opacity=".99608"> -<rect x="7" y="1037.4" width="2" height="9"/> -<path d="m4 1046.4h8l-4 5z" fill-rule="evenodd"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m7 1v9h-3l4 5 4-5h-3v-9h-2z" fill="#fc9c9c" fill-opacity=".99608"/> </g> </svg> diff --git a/editor/icons/icon_ray_shape.svg b/editor/icons/icon_ray_shape.svg index 4591b0a3f9..48c53eae70 100644 --- a/editor/icons/icon_ray_shape.svg +++ b/editor/icons/icon_ray_shape.svg @@ -1,9 +1,6 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1036.4)" fill-rule="evenodd"> -<path d="m8 1051.4-2-2v-7l2 2z" fill="#a2d2ff"/> -<path d="m8 1047.9-2-1.5v-4l2 2z" fill="#2998ff"/> -<path d="m8 1037.4-6 5 6 4z" fill="#a2d2ff"/> -<path d="m8 1051.4 2-2v-7l-2 2z" fill="#2998ff"/> -<path d="m8 1037.4 6 5-6 4z" fill="#2998ff"/> +<path transform="translate(0 1036.4)" d="m8 1l-6 5 4 2.666v4.334l2 2v-5-2-7z" fill="#a2d2ff"/> +<path transform="translate(0 1036.4)" d="m8 1v7 2l-2-1.334v1.334l2 1.5v3.5l2-2v-4.334l4-2.666-6-5z" fill="#2998ff"/> </g> </svg> diff --git a/editor/icons/icon_ray_shape_2d.svg b/editor/icons/icon_ray_shape_2d.svg index 89533b8407..318d92e4ea 100644 --- a/editor/icons/icon_ray_shape_2d.svg +++ b/editor/icons/icon_ray_shape_2d.svg @@ -1,6 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="none" stroke="#68b6ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"> -<path d="m8 1038.4v12"/> -<path d="m5 1047.4 3 3 3-3"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m8 1a1 1 0 0 0 -1 1v9.5859l-1.293-1.293a1 1 0 0 0 -0.7207 -0.29102 1 1 0 0 0 -0.69336 0.29102 1 1 0 0 0 0 1.4141l3 3a1.0001 1.0001 0 0 0 0.0039062 0.003907 1 1 0 0 0 0.050781 0.044921 1.0001 1.0001 0 0 0 0.03125 0.027344 1 1 0 0 0 0.048828 0.035156 1.0001 1.0001 0 0 0 0.023438 0.015625 1 1 0 0 0 0.076172 0.044922 1.0001 1.0001 0 0 0 0.0058593 0.003906 1 1 0 0 0 0.013672 0.007813 1.0001 1.0001 0 0 0 0.078125 0.035156 1 1 0 0 0 0.074219 0.025391 1.0001 1.0001 0 0 0 0.025391 0.009766 1 1 0 0 0 0.039062 0.009765 1.0001 1.0001 0 0 0 0.068359 0.013672 1.0001 1.0001 0 0 0 0.097656 0.011719 1.0001 1.0001 0 0 0 0.0078125 0 1 1 0 0 0 0.0625 0.003906 1 1 0 0 0 0.015625 -0.001953 1.0001 1.0001 0 0 0 0.083984 -0.003906 1 1 0 0 0 0.015625 -0.001953 1.0001 1.0001 0 0 0 0.083984 -0.013672 1.0001 1.0001 0 0 0 0.052734 -0.013672 1 1 0 0 0 0.058594 -0.015625 1.0001 1.0001 0 0 0 0.078125 -0.029297 1 1 0 0 0 0.013672 -0.00586 1.0001 1.0001 0 0 0 0.076172 -0.037109 1 1 0 0 0 0.013672 -0.007812 1.0001 1.0001 0 0 0 0.072266 -0.044922 1 1 0 0 0 0.011719 -0.007813 1.0001 1.0001 0 0 0 0.068359 -0.052734 1 1 0 0 0 0.011719 -0.009766 1.0001 1.0001 0 0 0 0.050781 -0.046875l0.0097657-0.011719 2.9902-2.9883a1 1 0 0 0 0 -1.4141 1 1 0 0 0 -1.4141 0l-1.293 1.293v-9.5859a1 1 0 0 0 -1 -1z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#68b6ff" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="filter-blend-mode:normal;filter-gaussianBlur-deviation:0;font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> </g> </svg> diff --git a/editor/icons/icon_real.svg b/editor/icons/icon_real.svg deleted file mode 100644 index 68f477f727..0000000000 --- a/editor/icons/icon_real.svg +++ /dev/null @@ -1,11 +0,0 @@ -<svg width="14" height="14" version="1.1" viewBox="0 0 14 14" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1038.4)" fill="#cf68ea"> -<rect x="3" y="1040.4" width="2" height="11"/> -<rect x="3" y="1039.4" width="4" height="2"/> -<path transform="translate(0 1038.4)" d="m7 1v2a2 2 0 0 1 2 2 2 2 0 0 1 -2 2v2a4 4 0 0 0 4 -4 4 4 0 0 0 -4 -4z"/> -<rect x="3" y="1045.4" width="4" height="2"/> -<rect transform="rotate(90)" x="1049.4" y="-12" width="2" height="2"/> -<path transform="translate(0 1038.4)" d="m8 7v2a2 2 0 0 1 2 2h2a4 4 0 0 0 -4 -4z"/> -<rect transform="rotate(90)" x="1045.4" y="-8" width="2" height="2"/> -</g> -</svg> diff --git a/editor/icons/icon_reference_rect.svg b/editor/icons/icon_reference_rect.svg index 6756d4bb2f..7a89e62e4e 100644 --- a/editor/icons/icon_reference_rect.svg +++ b/editor/icons/icon_reference_rect.svg @@ -1,12 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#a5efac"> -<rect x="1" y="1037.4" width="2" height="2"/> -<rect x="13" y="1037.4" width="2" height="2"/> -<rect x="4" y="1037.4" width="8" height="2"/> -<rect x="4" y="1049.4" width="8" height="2"/> -<rect x="13" y="1049.4" width="2" height="2"/> -<rect x="1" y="1049.4" width="2" height="2"/> -<rect transform="rotate(90)" x="1040.4" y="-3" width="8" height="2"/> -<rect transform="rotate(90)" x="1040.4" y="-15" width="8" height="2"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m1 1v2h2v-2h-2zm3 0v2h8v-2h-8zm9 0v2h2v-2h-2zm-12 3v8h2v-8h-2zm12 0v8h2v-8h-2zm-12 9v2h2v-2h-2zm3 0v2h8v-2h-8zm9 0v2h2v-2h-2z" fill="#a5efac"/> </g> </svg> diff --git a/editor/icons/icon_region_edit.svg b/editor/icons/icon_region_edit.svg index 484af3db71..c6ceef878c 100644 --- a/editor/icons/icon_region_edit.svg +++ b/editor/icons/icon_region_edit.svg @@ -1,13 +1,6 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1036.4)" fill="#e0e0e0"> <rect x="6" y="1042.4" width="6" height="6"/> -<rect x="6" y="1037.4" width="6" height="4" fill-opacity=".32549"/> -<rect x="1" y="1037.4" width="4" height="4" fill-opacity=".32549"/> -<rect x="1" y="1042.4" width="4" height="6" fill-opacity=".32549"/> -<rect x="1" y="1049.4" width="4" height="2" fill-opacity=".32549"/> -<rect x="6" y="1049.4" width="6" height="2" fill-opacity=".32549"/> -<rect x="13" y="1042.4" width="2" height="6" fill-opacity=".32549"/> -<rect x="13" y="1037.4" width="2" height="4" fill-opacity=".32549"/> -<rect x="13" y="1049.4" width="2" height="2" fill-opacity=".32549"/> +<path transform="translate(0 1036.4)" d="m1 1v4h4v-4h-4zm5 0v4h6v-4h-6zm7 0v4h2v-4h-2zm-12 5v6h4v-6h-4zm12 0v6h2v-6h-2zm-12 7v2h4v-2h-4zm5 0v2h6v-2h-6zm7 0v2h2v-2h-2z" fill-opacity=".32549"/> </g> </svg> diff --git a/editor/icons/icon_remote.svg b/editor/icons/icon_remote.svg deleted file mode 100644 index 2066464a82..0000000000 --- a/editor/icons/icon_remote.svg +++ /dev/null @@ -1,7 +0,0 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#e0e0e0"> -<circle cx="8" cy="1043.4" r="2"/> -<rect x="7" y="1044.4" width="2" height="7"/> -<path transform="translate(0 1036.4)" d="m8.0879 1a6 6 0 0 0 -4.3301 1.7578 6 6 0 0 0 0 8.4844l1.416-1.416a4 4 0 0 1 -1.1738 -2.8262 4 4 0 0 1 4 -4 4 4 0 0 1 4 4 4 4 0 0 1 -1.1738 2.8262l1.416 1.416a6 6 0 0 0 0 -8.4844 6 6 0 0 0 -4.1543 -1.7578z"/> -</g> -</svg> diff --git a/editor/icons/icon_remote_transform.svg b/editor/icons/icon_remote_transform.svg index 9cb1c67dfb..ab79ae2bb6 100644 --- a/editor/icons/icon_remote_transform.svg +++ b/editor/icons/icon_remote_transform.svg @@ -1,8 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path d="m12 1047.4a4 4 0 0 1 -2 3.4641 4 4 0 0 1 -4 0 4 4 0 0 1 -2 -3.4641h4z" fill="#fc9c9c"/> -<rect x="7" y="1045.4" width="2" height="4" ry="1" fill="#fc9c9c"/> -<path d="m1.9378 1041.9a7 7 0 0 1 6.0622 -3.5 7 7 0 0 1 6.0622 3.5" fill="none" stroke="#fc9c9c" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/> -<path d="m5.1022 1044.6a3 3 0 0 1 2.8978 -2.2235 3 3 0 0 1 2.8978 2.2235" fill="none" stroke="#fc9c9c" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/> +<g transform="translate(0 -1036.4)" fill="#fc9c9c"> +<path transform="translate(0 1036.4)" d="m8 1c-2.8565 0-5.4995 1.5262-6.9277 4a1 1 0 0 0 0.36523 1.3672 1 1 0 0 0 1.3672 -0.36719c1.0726-1.8578 3.0501-3 5.1953-3 2.1452 0 4.1227 1.1422 5.1953 3a1 1 0 0 0 1.3672 0.36719 1 1 0 0 0 0.36523 -1.3672c-1.4283-2.4738-4.0712-4-6.9277-4zm0 4c-1.8056 0-3.396 1.2207-3.8633 2.9648a1 1 0 0 0 0.70703 1.2246 1 1 0 0 0 1.2246 -0.70703c0.23553-0.8791 1.0216-1.4824 1.9316-1.4824s1.6961 0.60332 1.9316 1.4824a1 1 0 0 0 1.2246 0.70703 1 1 0 0 0 0.70703 -1.2246c-0.46732-1.7441-2.0577-2.9648-3.8633-2.9648zm0 4c-0.554 0-1 0.446-1 1v1h-3a4 4 0 0 0 2 3.4648 4 4 0 0 0 4 0 4 4 0 0 0 2 -3.4648h-3v-1c0-0.554-0.446-1-1-1z"/> </g> </svg> diff --git a/editor/icons/icon_remote_transform_2d.svg b/editor/icons/icon_remote_transform_2d.svg index f3c2d65e97..76b1d53cc7 100644 --- a/editor/icons/icon_remote_transform_2d.svg +++ b/editor/icons/icon_remote_transform_2d.svg @@ -1,8 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1036.4)"> -<path d="m12 1047.4a4 4 0 0 1 -2 3.4641 4 4 0 0 1 -4 0 4 4 0 0 1 -2 -3.4641h4z" fill="#a5b7f3" fill-opacity=".98824"/> -<rect x="7" y="1045.4" width="2" height="4" ry="1" fill="#a5b7f3" fill-opacity=".98824"/> -<path d="m1.9378 1041.9a7 7 0 0 1 6.0622 -3.5 7 7 0 0 1 6.0622 3.5" fill="none" stroke="#a5b7f3" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/> -<path d="m5.1022 1044.6a3 3 0 0 1 2.8978 -2.2235 3 3 0 0 1 2.8978 2.2235" fill="none" stroke="#a5b7f3" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/> +<path transform="translate(0 1036.4)" d="m8 1c-2.8565 0-5.4995 1.5262-6.9277 4a1 1 0 0 0 0.36523 1.3672 1 1 0 0 0 1.3672 -0.36719c1.0726-1.8578 3.0501-3 5.1953-3 2.1452 0 4.1227 1.1422 5.1953 3a1 1 0 0 0 1.3672 0.36719 1 1 0 0 0 0.36523 -1.3672c-1.4283-2.4738-4.0712-4-6.9277-4zm0 4c-1.8056 0-3.396 1.2207-3.8633 2.9648a1 1 0 0 0 0.70703 1.2246 1 1 0 0 0 1.2246 -0.70703c0.23553-0.8791 1.0216-1.4824 1.9316-1.4824s1.6961 0.60332 1.9316 1.4824a1 1 0 0 0 1.2246 0.70703 1 1 0 0 0 0.70703 -1.2246c-0.46732-1.7441-2.0577-2.9648-3.8633-2.9648zm0 4c-0.554 0-1 0.446-1 1v1h-3a4 4 0 0 0 2 3.4648 4 4 0 0 0 4 0 4 4 0 0 0 2 -3.4648h-3v-1c0-0.554-0.446-1-1-1z" fill="#a5b7f3" fill-opacity=".98824"/> </g> </svg> diff --git a/editor/icons/icon_remove.svg b/editor/icons/icon_remove.svg index 3b03aa9305..ee988ab719 100644 --- a/editor/icons/icon_remove.svg +++ b/editor/icons/icon_remove.svg @@ -1,7 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#e0e0e0" fill-opacity=".99608"> -<path transform="translate(0 1036.4)" d="m2 5v8a2 2 0 0 0 2 2h8a2 2 0 0 0 2 -2v-8h-12zm1 2h2v6h-2v-6zm4 0h2v6h-2v-6zm4 0h2v6h-2v-6z"/> -<rect x="1" y="1038.4" width="14" height="2"/> -<rect x="5" y="1037.4" width="6" height="2"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m5 1v1h-4v2h14v-2h-4v-1h-6zm-3 4v8a2 2 0 0 0 2 2h8a2 2 0 0 0 2 -2v-8h-12zm1 2h2v6h-2v-6zm4 0h2v6h-2v-6zm4 0h2v6h-2v-6z" fill="#e0e0e0" fill-opacity=".99608"/> </g> </svg> diff --git a/editor/icons/icon_resource_preloader.svg b/editor/icons/icon_resource_preloader.svg index 82f24d7400..2d186e17da 100644 --- a/editor/icons/icon_resource_preloader.svg +++ b/editor/icons/icon_resource_preloader.svg @@ -1,8 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1036.4)"> -<g fill="#e0e0e0" fill-rule="evenodd"> -<path transform="translate(0 1036.4)" d="m7.9629 1.002a1.0001 1.0001 0 0 0 -0.41016 0.10352l-6 3a1.0001 1.0001 0 0 0 -0.55273 0.89453v6a1.0001 1.0001 0 0 0 0.55273 0.89453l6 3a1.0001 1.0001 0 0 0 0.89453 0l6-3a1.0001 1.0001 0 0 0 0.55273 -0.89453v-6a1.0001 1.0001 0 0 0 -0.55273 -0.89453l-6-3a1.0001 1.0001 0 0 0 -0.48438 -0.10352zm0.037109 2.1172l3.7637 1.8809-3.7637 1.8828-3.7637-1.8828 3.7637-1.8809zm-5 3.5l4 2v3.7637l-4-2v-3.7637zm10 0v3.7637l-4 2v-3.7637l4-2z" color="#000000" color-rendering="auto" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="block-progression:tb;isolation:auto;mix-blend-mode:normal;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none;white-space:normal"/> -<path d="m11 1042.4-6-3-3 2 6 3z"/> -</g> +<path transform="translate(0 1036.4)" d="m7.9629 1.002a1.0001 1.0001 0 0 0 -0.41016 0.10352l-6 3a1.0001 1.0001 0 0 0 -0.55273 0.89453v6a1.0001 1.0001 0 0 0 0.55273 0.89453l6 3a1.0001 1.0001 0 0 0 0.89453 0l6-3a1.0001 1.0001 0 0 0 0.55273 -0.89453v-6a1.0001 1.0001 0 0 0 -0.55273 -0.89453l-6-3a1.0001 1.0001 0 0 0 -0.48438 -0.10352zm0.037109 2.1172l3.7637 1.8809-1.3809 0.69141-3.7637-1.8828 1.3809-0.68945zm-5 3.5l4 2v3.7637l-4-2v-3.7637zm10 0v3.7637l-4 2v-3.7637l4-2z" color="#000000" color-rendering="auto" fill="#e0e0e0" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="block-progression:tb;isolation:auto;mix-blend-mode:normal;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none;white-space:normal"/> </g> </svg> diff --git a/editor/icons/icon_rich_text_label.svg b/editor/icons/icon_rich_text_label.svg index c0b4039e3a..3227547b41 100644 --- a/editor/icons/icon_rich_text_label.svg +++ b/editor/icons/icon_rich_text_label.svg @@ -1,11 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#a5efac"> -<rect x="1" y="1037.4" width="8" height="2"/> -<rect x="1" y="1041.4" width="2" height="2"/> -<rect x="5" y="1041.4" width="4" height="2"/> -<rect x="1" y="1045.4" width="8" height="2"/> -<rect x="1" y="1049.4" width="4" height="2"/> -<rect x="7" y="1049.4" width="2" height="2"/> -<path d="m12 1048.4h-2l3 3 3-3h-2v-8h2l-3-3-3 3h2z"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m1 1v2h8v-2h-8zm12 0l-3 3h2v8h-2l3 3 3-3h-2v-8h2l-3-3zm-12 4v2h2v-2h-2zm4 0v2h4v-2h-4zm-4 4v2h8v-2h-8zm0 4v2h4v-2h-4zm6 0v2h2v-2h-2z" fill="#a5efac"/> </g> </svg> diff --git a/editor/icons/icon_rigid_body.svg b/editor/icons/icon_rigid_body.svg index 61aa52162d..bb87d914b6 100644 --- a/editor/icons/icon_rigid_body.svg +++ b/editor/icons/icon_rigid_body.svg @@ -1,6 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#fc9c9c" fill-opacity=".99608"> -<path transform="translate(0 1036.4)" d="m8 1a7 7 0 0 0 -7 7 7 7 0 0 0 0.035156 0.69922 7 7 0 0 0 0.27734 1.3691 7 7 0 0 0 0.91016 1.8848 7 7 0 0 0 0.30273 0.4082c7.85e-4 -0.00256 0.0011667-0.005252 0.0019532-0.007812a7 7 0 0 0 5.4727 2.6465 7 7 0 0 0 3.2422 -0.80273c0.001375 3.93e-4 0.002531 0.00156 0.003906 0.001953a7 7 0 0 0 0.035156 -0.021485 7 7 0 0 0 0.42578 -0.25 7 7 0 0 0 0.16992 -0.10352 7 7 0 0 0 0.36914 -0.26953 7 7 0 0 0 0.20508 -0.15625 7 7 0 0 0 0.3418 -0.30859 7 7 0 0 0 0.16406 -0.1543 7 7 0 0 0 0.33008 -0.36133 7 7 0 0 0 0.14062 -0.16016 7 7 0 0 0 0.27734 -0.37305 7 7 0 0 0 0.13867 -0.19531 7 7 0 0 0 0.21875 -0.36133 7 7 0 0 0 0.14258 -0.25 7 7 0 0 0 0.15625 -0.33398 7 7 0 0 0 0.13867 -0.31055 7 7 0 0 0 0.10742 -0.30859 7 7 0 0 0 0.11914 -0.35352 7 7 0 0 0 0.087891 -0.36914 7 7 0 0 0 0.066406 -0.29297 7 7 0 0 0 0.056641 -0.40039 7 7 0 0 0 0.037109 -0.3125 7 7 0 0 0 0.025391 -0.55273 7 7 0 0 0 -4.3848 -6.4883 7 7 0 0 0 -0.007812 -0.0039063 7 7 0 0 0 -0.001953 0 7 7 0 0 0 -0.61523 -0.21289 7 7 0 0 0 -0.044922 -0.015625 7 7 0 0 0 -0.0058594 -0.0019531 7 7 0 0 0 -0.55078 -0.13086 7 7 0 0 0 -0.14062 -0.03125 7 7 0 0 0 -0.55078 -0.072266 7 7 0 0 0 -0.14258 -0.017578 7 7 0 0 0 -0.55469 -0.025391zm1.9512 1.334a6 6 0 0 1 4.0488 5.666h-7a2 2 0 0 1 -0.94922 1.6992c1.345 2.0268 2.6013 3.2645 3.8965 3.9688a6 6 0 0 1 -1.9473 0.33203 6 6 0 0 1 -5.0547 -2.7695c0.23771-0.5785 0.50336-1.1403 0.82617-1.6563a2 2 0 0 1 -0.77148 -1.5742h-1a6 6 0 0 1 1.123 -3.4863c0.14632 0.65093 0.35776 1.2833 0.68359 1.8848a2 2 0 0 1 1.1934 -0.39844 2 2 0 0 1 1.0508 0.30078c1.3464-2.0289 2.6038-3.2631 3.9004-3.9668z"/> -<circle cx="5" cy="1044.4" r="2"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m8 1a7 7 0 0 0 -7 7 7 7 0 0 0 0.035156 0.69922 7 7 0 0 0 0.27734 1.3691 7 7 0 0 0 0.91016 1.8848 7 7 0 0 0 0.30273 0.4082c7.85e-4 -0.00256 0.0011667-0.005252 0.0019532-0.007812a7 7 0 0 0 5.4727 2.6465 7 7 0 0 0 3.2422 -0.80273c0.001374 3.93e-4 0.002531 0.00156 0.003906 0.001953a7 7 0 0 0 0.035156 -0.021485 7 7 0 0 0 0.42578 -0.25 7 7 0 0 0 0.16992 -0.10352 7 7 0 0 0 0.36914 -0.26953 7 7 0 0 0 0.20508 -0.15625 7 7 0 0 0 0.3418 -0.30859 7 7 0 0 0 0.16406 -0.1543 7 7 0 0 0 0.33008 -0.36133 7 7 0 0 0 0.14062 -0.16016 7 7 0 0 0 0.27734 -0.37305 7 7 0 0 0 0.13867 -0.19531 7 7 0 0 0 0.21875 -0.36133 7 7 0 0 0 0.14258 -0.25 7 7 0 0 0 0.15625 -0.33398 7 7 0 0 0 0.13867 -0.31055 7 7 0 0 0 0.10742 -0.30859 7 7 0 0 0 0.11914 -0.35352 7 7 0 0 0 0.087891 -0.36914 7 7 0 0 0 0.066406 -0.29297 7 7 0 0 0 0.056641 -0.40039 7 7 0 0 0 0.037109 -0.3125 7 7 0 0 0 0.025391 -0.55273 7 7 0 0 0 -4.3848 -6.4883 7 7 0 0 0 -0.007812 -0.0039063 7 7 0 0 0 -0.001953 0 7 7 0 0 0 -0.61523 -0.21289 7 7 0 0 0 -0.044922 -0.015625 7 7 0 0 0 -0.0058594 -0.0019531 7 7 0 0 0 -0.55078 -0.13086 7 7 0 0 0 -0.14062 -0.03125 7 7 0 0 0 -0.55078 -0.072266 7 7 0 0 0 -0.14258 -0.017578 7 7 0 0 0 -0.55469 -0.025391zm1.9512 1.334a6 6 0 0 1 4.0488 5.666h-7a2 2 0 0 0 -0.94922 -1.6992c1.3464-2.0289 2.6038-3.2631 3.9004-3.9668zm-6.8281 2.1797c0.14632 0.65093 0.35776 1.2833 0.68359 1.8848a2 2 0 0 0 -0.80664 1.6016h-1a6 6 0 0 1 1.123 -3.4863zm1.877 1.4863a2 2 0 0 0 -0.10938 0.0039062 2 2 0 0 1 0.10938 -0.0039062zm-0.18945 0.011719a2 2 0 0 0 -0.12109 0.013672 2 2 0 0 1 0.12109 -0.013672zm-0.44141 0.09375a2 2 0 0 0 -0.056641 0.019531 2 2 0 0 1 0.056641 -0.019531zm-1.3594 2.0605a2 2 0 0 0 0.013672 0.11914 2 2 0 0 1 -0.013672 -0.11914zm0.027344 0.20898a2 2 0 0 0 0.017578 0.080078 2 2 0 0 1 -0.017578 -0.080078zm0.73438 1.1992a2 2 0 0 0 1.2285 0.42578 2 2 0 0 0 1.0508 -0.30078c1.345 2.0268 2.6013 3.2645 3.8965 3.9688a6 6 0 0 1 -1.9473 0.33203 6 6 0 0 1 -5.0547 -2.7695c0.23771-0.5785 0.50336-1.1403 0.82617-1.6563z" fill="#fc9c9c" fill-opacity=".99608"/> </g> </svg> diff --git a/editor/icons/icon_rigid_body_2d.svg b/editor/icons/icon_rigid_body_2d.svg index c28e009e85..3f67f660fc 100644 --- a/editor/icons/icon_rigid_body_2d.svg +++ b/editor/icons/icon_rigid_body_2d.svg @@ -1,13 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1036.4)"> -<path d="m8 1037.4a7 7 0 0 0 -7 7 7 7 0 0 0 7 7 7 7 0 0 0 7 -7 7 7 0 0 0 -7 -7zm0 1a6 6 0 0 1 6 6 6 6 0 0 1 -6 6 6 6 0 0 1 -6 -6 6 6 0 0 1 6 -6z" fill="#a5b7f3" fill-opacity=".98824"/> -<path d="m8 1037.4a7 7 0 0 0 -5.0879 2.2051c0.10495 1.1207 0.35417 2.1959 0.89453 3.1933a2 2 0 0 1 1.1934 -0.3984 2 2 0 0 1 1.0508 0.3008c1.7873-2.6932 3.4181-3.9904 5.1914-4.4981a7 7 0 0 0 -3.2422 -0.8027zm-7 7a7 7 0 0 0 1.5254 4.3613c0.30281-0.9877 0.71628-1.9403 1.2461-2.7871a2 2 0 0 1 -0.77148 -1.5742h-2zm6 0a2 2 0 0 1 -0.94922 1.6992c1.7887 2.6953 3.4204 3.9932 5.1953 4.5a7 7 0 0 0 3.7539 -6.1992h-8z" fill="#a5b7f3" fill-opacity=".98824"/> -<circle cx="5" cy="1044.4" r="2" fill="#a5b7f3" fill-opacity=".98824"/> -<path d="m45 1037.4a7 7 0 0 0 -7 7 7 7 0 0 0 7 7 7 7 0 0 0 7 -7 7 7 0 0 0 -7 -7zm0 1a6 6 0 0 1 6 6 6 6 0 0 1 -6 6 6 6 0 0 1 -6 -6 6 6 0 0 1 6 -6z" fill="#a5b7f3" fill-opacity=".98824"/> -<path d="m38 1044.4c5 0.01 9 0.01 14 0-2-2.9934-5-4-7-4s-5 1.0066-7 4z" fill="#a5b7f3" fill-opacity=".98824" fill-rule="evenodd"/> -<path d="m38 1044.4c0 3.866 3.134 7 7 7s7-3.134 7-7c-2 2.9933-5 4-7 4s-5-1.0067-7-4z" fill="#a3b6f2"/> -<path d="m-9 1037.4a7 7 0 0 0 -7 7 7 7 0 0 0 7 7 7 7 0 0 0 7 -7 7 7 0 0 0 -7 -7zm0 1a6 6 0 0 1 6 6 6 6 0 0 1 -6 6 6 6 0 0 1 -6 -6 6 6 0 0 1 6 -6z" fill="#a3b6f2"/> -<circle cx="-9" cy="1044.4" r="2" fill="#a3b6f2"/> -<path d="m-9 1037.4a7 7 0 0 0 -3.5 0.9375l3.5 6.0625 3.5-6.0625a7 7 0 0 0 -3.5 -0.9375zm0 7 3.5 6.0625a7 7 0 0 0 2.5625 -2.5625 7 7 0 0 0 0.9375 -3.5h-7zh-7a7 7 0 0 0 0.9375 3.5 7 7 0 0 0 2.5625 2.5625l3.5-6.0625z" fill="#a3b6f2"/> +<path transform="translate(0 1036.4)" d="m8 1a7 7 0 0 0 -7 7 7 7 0 0 0 1.2227 3.9531 7 7 0 0 0 0.30273 0.4082c7.85e-4 -0.00256 0.0011667-0.005252 0.0019532-0.007812a7 7 0 0 0 5.4727 2.6465 7 7 0 0 0 3.2422 -0.80273c0.001375 3.93e-4 0.002531 0.00156 0.003906 0.001953a7 7 0 0 0 0.035156 -0.021485 7 7 0 0 0 0.42578 -0.25 7 7 0 0 0 0.16992 -0.10352 7 7 0 0 0 0.36914 -0.26953 7 7 0 0 0 0.20508 -0.15625 7 7 0 0 0 0.3418 -0.30859 7 7 0 0 0 0.16406 -0.1543 7 7 0 0 0 0.33008 -0.36133 7 7 0 0 0 0.14062 -0.16016 7 7 0 0 0 0.27734 -0.37305 7 7 0 0 0 0.13867 -0.19531 7 7 0 0 0 0.21875 -0.36133 7 7 0 0 0 0.14258 -0.25 7 7 0 0 0 0.15625 -0.33398 7 7 0 0 0 0.13867 -0.31055 7 7 0 0 0 0.10742 -0.30859 7 7 0 0 0 0.11914 -0.35352 7 7 0 0 0 0.087891 -0.36914 7 7 0 0 0 0.066406 -0.29297 7 7 0 0 0 0.056641 -0.40039 7 7 0 0 0 0.037109 -0.3125 7 7 0 0 0 0.025391 -0.55273 7 7 0 0 0 -4.3926 -6.4922 7 7 0 0 0 -0.001953 0 7 7 0 0 0 -0.66016 -0.22852 7 7 0 0 0 -0.0058594 -0.0019531 7 7 0 0 0 -0.55078 -0.13086 7 7 0 0 0 -0.14062 -0.03125 7 7 0 0 0 -0.55078 -0.072266 7 7 0 0 0 -0.14258 -0.017578 7 7 0 0 0 -0.55469 -0.025391zm1.9512 1.334a6 6 0 0 1 4.0488 5.666h-7a2 2 0 0 0 -0.94922 -1.6992c1.3464-2.0289 2.6038-3.2631 3.9004-3.9668zm-6.8281 2.1797c0.14632 0.65093 0.35776 1.2833 0.68359 1.8848a2 2 0 0 0 -0.80664 1.6016h-1a6 6 0 0 1 1.123 -3.4863zm1.877 1.4863a2 2 0 0 0 -0.10938 0.0039062 2 2 0 0 1 0.10938 -0.0039062zm-0.18945 0.011719a2 2 0 0 0 -0.12109 0.013672 2 2 0 0 1 0.12109 -0.013672zm-0.44141 0.09375a2 2 0 0 0 -0.056641 0.019531 2 2 0 0 1 0.056641 -0.019531zm-1.3594 2.0605a2 2 0 0 0 0.013672 0.11914 2 2 0 0 1 -0.013672 -0.11914zm0.027344 0.20898a2 2 0 0 0 0.017578 0.080078 2 2 0 0 1 -0.017578 -0.080078zm0.73438 1.1992a2 2 0 0 0 1.2285 0.42578 2 2 0 0 0 1.0508 -0.30078c1.345 2.0268 2.6013 3.2645 3.8965 3.9688a6 6 0 0 1 -1.9473 0.33203 6 6 0 0 1 -5.0547 -2.7695c0.23771-0.5785 0.50336-1.1403 0.82617-1.6563z" fill="#a5b7f3" fill-opacity=".98824"/> </g> </svg> diff --git a/editor/icons/icon_room_bounds.svg b/editor/icons/icon_room_bounds.svg index f092865568..4c5c3387f6 100644 --- a/editor/icons/icon_room_bounds.svg +++ b/editor/icons/icon_room_bounds.svg @@ -1,5 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m1 1v1 1h1v-1h1v-1h-1-1zm12 0v1h1v1h1v-1-1h-1-1zm-5.0371 0.0019531a1.0001 1.0001 0 0 0 -0.41016 0.10352l-6 3a1.0001 1.0001 0 0 0 -0.55273 0.89453v6a1.0001 1.0001 0 0 0 0.55273 0.89453l6 3a1.0001 1.0001 0 0 0 0.89453 0l6-3a1.0001 1.0001 0 0 0 0.55273 -0.89453v-6a1.0001 1.0001 0 0 0 -0.55273 -0.89453l-6-3a1.0001 1.0001 0 0 0 -0.48438 -0.10352zm1.0371 2.6172l4 2v3.7637l-4-2v-3.7637zm-1 5.5l3.7637 1.8809-3.7637 1.8828-3.7637-1.8828 3.7637-1.8809zm-7 3.8809v1 1h1 1v-1h-1v-1h-1zm13 0v1h-1v1h1 1v-1-1h-1z" color="#000000" color-rendering="auto" fill="#e0e0e0" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="block-progression:tb;isolation:auto;mix-blend-mode:normal;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none;white-space:normal"/> +<path transform="translate(0 1036.4)" d="m1 1v2h1v-1h1v-1zm12 0v1h1v1h1v-2zm-5.0371 0.00195c-0.14254 0.00487-0.28238 0.04016-0.41016 0.10352l-6 3c-0.33878 0.16944-0.55276 0.51574-0.55273 0.89453v6c-2.576e-5 0.37879 0.21395 0.72509 0.55273 0.89453l6 3c0.28156 0.14078 0.61297 0.14078 0.89453 0l6-3c0.33878-0.16944 0.55276-0.51574 0.55273-0.89453v-6c2.6e-5 -0.37879-0.21395-0.72509-0.55273-0.89453l-6-3c-0.15022-0.074574-0.31679-0.11017-0.48438-0.10352zm1.0371 2.6172l4 2v3.7637l-4-2zm-1 5.5l3.7637 1.8809-3.7637 1.8828-3.7637-1.8828zm-7 3.8809v2h2v-1h-1v-1zm13 0v1h-1v1h2v-2z" color="#000000" color-rendering="auto" fill="#e0e0e0" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="isolation:auto;mix-blend-mode:normal;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none;white-space:normal"/> </g> </svg> diff --git a/editor/icons/icon_rotate_0.svg b/editor/icons/icon_rotate_0.svg index d9ad4eedea..861e2415a5 100644 --- a/editor/icons/icon_rotate_0.svg +++ b/editor/icons/icon_rotate_0.svg @@ -1,6 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#e0e0e0"> -<rect x="7" y="1038.4" width="2" height="7"/> -<path transform="translate(0 1036.4)" d="m8 1a7 7 0 0 0 -7 7 7 7 0 0 0 7 7 7 7 0 0 0 7 -7 7 7 0 0 0 -7 -7zm0 2a5 5 0 0 1 5 5 5 5 0 0 1 -5 5 5 5 0 0 1 -5 -5 5 5 0 0 1 5 -5z"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m8 1a7 7 0 0 0 -7 7 7 7 0 0 0 7 7 7 7 0 0 0 7 -7 7 7 0 0 0 -7 -7zm1 2.1016a5 5 0 0 1 4 4.8984 5 5 0 0 1 -5 5 5 5 0 0 1 -5 -5 5 5 0 0 1 4 -4.8945v5.8945h2v-5.8984z" fill="#e0e0e0"/> </g> </svg> diff --git a/editor/icons/icon_rotate_180.svg b/editor/icons/icon_rotate_180.svg index 3344c16e3f..115ef13b7a 100644 --- a/editor/icons/icon_rotate_180.svg +++ b/editor/icons/icon_rotate_180.svg @@ -1,9 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#e0e0e0"> -<path d="m8 1038.4a6 6 0 0 1 6 6h-6z"/> -<rect x="7" y="1038.4" width="2" height="7"/> -<path transform="translate(0 1036.4)" d="m8 1a7 7 0 0 0 -7 7 7 7 0 0 0 7 7 7 7 0 0 0 7 -7 7 7 0 0 0 -7 -7zm0 2a5 5 0 0 1 5 5 5 5 0 0 1 -5 5 5 5 0 0 1 -5 -5 5 5 0 0 1 5 -5z"/> -<rect transform="scale(-1)" x="-9" y="-1050.4" width="2" height="7"/> -<path d="m14 1044.4a6 6 0 0 1 -6 6v-6z"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m8 1c-3.8541 0-7 3.1459-7 7 0 3.8542 3.1459 7 7 7 3.8541 0 7-3.1458 7-7 0-3.8541-3.1459-7-7-7zm0 2v10c-2.7733 0-5-2.2267-5-5 0-2.7732 2.2267-5 5-5z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#e0e0e0" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="filter-blend-mode:normal;filter-gaussianBlur-deviation:0;font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> </g> </svg> diff --git a/editor/icons/icon_rotate_270.svg b/editor/icons/icon_rotate_270.svg index 567e4edd5b..8c9e8d7736 100644 --- a/editor/icons/icon_rotate_270.svg +++ b/editor/icons/icon_rotate_270.svg @@ -1,10 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#e0e0e0"> -<path d="m8 1038.4a6 6 0 0 1 6 6h-6z"/> -<rect x="7" y="1038.4" width="2" height="7"/> -<path transform="translate(0 1036.4)" d="m8 1a7 7 0 0 0 -7 7 7 7 0 0 0 7 7 7 7 0 0 0 7 -7 7 7 0 0 0 -7 -7zm0 2a5 5 0 0 1 5 5 5 5 0 0 1 -5 5 5 5 0 0 1 -5 -5 5 5 0 0 1 5 -5z"/> -<rect transform="rotate(-90)" x="-1045.4" y="2" width="2" height="7"/> -<path d="m8 1050.4a6 6 0 0 1 -6 -6h6z"/> -<path d="m14 1044.4a6 6 0 0 1 -6 6v-6z"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m8 1a7 7 0 0 0 -7 7 7 7 0 0 0 7 7 7 7 0 0 0 7 -7 7 7 0 0 0 -7 -7zm0 2v5h-5a5 5 0 0 1 5 -5z" fill="#e0e0e0"/> </g> </svg> diff --git a/editor/icons/icon_rotate_90.svg b/editor/icons/icon_rotate_90.svg index 6a3a449db6..ed8cb1eeb6 100644 --- a/editor/icons/icon_rotate_90.svg +++ b/editor/icons/icon_rotate_90.svg @@ -1,8 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#e0e0e0"> -<path d="m8 1038.4a6 6 0 0 1 6 6h-6z"/> -<rect x="7" y="1038.4" width="2" height="7"/> -<path transform="translate(0 1036.4)" d="m8 1a7 7 0 0 0 -7 7 7 7 0 0 0 7 7 7 7 0 0 0 7 -7 7 7 0 0 0 -7 -7zm0 2a5 5 0 0 1 5 5 5 5 0 0 1 -5 5 5 5 0 0 1 -5 -5 5 5 0 0 1 5 -5z"/> -<rect transform="rotate(90)" x="1043.4" y="-14" width="2" height="7"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m8 1c-3.8541 0-7 3.1459-7 7 0 3.8542 3.1459 7 7 7 3.7179 0 6.7102-2.9486 6.9219-6.6152a1 1 0 0 0 0.078125 -0.38477 1 1 0 0 0 -0.078125 -0.38867 1 1 0 0 0 -0.001953 -0.0039062c-0.21589-3.6627-3.2049-6.6074-6.9199-6.6074zm0 2v5h5c0 2.7733-2.2267 5-5 5-2.7733 0-5-2.2267-5-5 0-2.7732 2.2267-5 5-5z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#e0e0e0" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="filter-blend-mode:normal;filter-gaussianBlur-deviation:0;font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> </g> </svg> diff --git a/editor/icons/icon_save.svg b/editor/icons/icon_save.svg index dae6693b26..d85b7ce452 100644 --- a/editor/icons/icon_save.svg +++ b/editor/icons/icon_save.svg @@ -1,7 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#e0e0e0"> -<path transform="translate(0 1036.4)" d="m3 1c-1.1046 0-2 0.89543-2 2v10c0 1.1046 0.89543 2 2 2h10c1.1046 0 2-0.89543 2-2v-8l-4-4zh8v6h-8zm5 8c1.1046 0 2 0.89543 2 2 0 1.1046-0.89543 2-2 2s-2-0.89543-2-2c0-1.1046 0.89543-2 2-2z"/> -<rect x="4" y="1037.4" width="3" height="5"/> -<path d="m11 1037.4h1l3 3v2h-4z" fill-rule="evenodd"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m3 1c-1.1046 0-2 0.89543-2 2v10c0 1.1046 0.89543 2 2 2h10c1.1046 0 2-0.89543 2-2v-7-1-1l-3-3h-1v5 1h-8v-6zm1 0v5h3v-5h-3zm4 8c1.1046 0 2 0.89543 2 2 0 1.1046-0.89543 2-2 2s-2-0.89543-2-2c0-1.1046 0.89543-2 2-2z" fill="#e0e0e0"/> </g> </svg> diff --git a/editor/icons/icon_scroll_bar.svg b/editor/icons/icon_scroll_bar.svg index f956615ff1..c58c31464d 100644 --- a/editor/icons/icon_scroll_bar.svg +++ b/editor/icons/icon_scroll_bar.svg @@ -1,7 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m3 3c-1.1046 0-2 0.89543-2 2v6c0 1.1046 0.89543 2 2 2h10c1.1046 0 2-0.89543 2-2v-6c0-1.1046-0.89543-2-2-2zm0 2h10v6h-10z" fill="#a5efac"/> -<rect x="4" y="1042.4" width="4" height="4" fill="none"/> -<rect x="4" y="1042.4" width="4" height="4" fill="#a5efac"/> +<path transform="translate(0 1036.4)" d="m3 3c-1.1046 0-2 0.89543-2 2v6c0 1.1046 0.89543 2 2 2h10c1.1046 0 2-0.89543 2-2v-6c0-1.1046-0.89543-2-2-2h-10zm0 2h10v6h-10v-6zm1 1v4h4v-4h-4z" fill="#a5efac"/> </g> </svg> diff --git a/editor/icons/icon_scroll_container.svg b/editor/icons/icon_scroll_container.svg index 83ca7f753d..786bae39ef 100644 --- a/editor/icons/icon_scroll_container.svg +++ b/editor/icons/icon_scroll_container.svg @@ -1,9 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#a5efac"> -<path transform="translate(0 1036.4)" d="m3 1c-1.1046 0-2 0.89543-2 2v10c0 1.1046 0.89543 2 2 2h10c1.1046 0 2-0.89543 2-2v-10c0-1.1046-0.89543-2-2-2zm0 2h10v10h-10z"/> -<path d="m10 1042.4v4l2-2z"/> -<path d="m6 1042.4v4l-2-2z"/> -<path d="m6 1042.4h4l-2-2z"/> -<path d="m6 1046.4h4l-2 2z"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m3 1c-1.1046 0-2 0.89543-2 2v10c0 1.1046 0.89543 2 2 2h10c1.1046 0 2-0.89543 2-2v-10c0-1.1046-0.89543-2-2-2h-10zm0 2h10v10h-10v-10zm5 1l-2 2h4l-2-2zm2 2v4l2-2-2-2zm0 4h-4l2 2 2-2zm-4 0v-4l-2 2 2 2z" fill="#a5efac"/> </g> </svg> diff --git a/editor/icons/icon_search.svg b/editor/icons/icon_search.svg index 6ef1d42815..9178e6c51c 100644 --- a/editor/icons/icon_search.svg +++ b/editor/icons/icon_search.svg @@ -1,6 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#e0e0e0" fill-opacity=".99608"> -<path d="m6 1037.4a5 5 0 0 0 -5 5 5 5 0 0 0 5 5 5 5 0 0 0 5 -5 5 5 0 0 0 -5 -5zm0 2a3 3 0 0 1 3 3 3 3 0 0 1 -3 3 3 3 0 0 1 -3 -3 3 3 0 0 1 3 -3z"/> -<rect transform="matrix(.70711 -.70711 .70711 .70711 0 0)" x="-733.82" y="745.3" width="2" height="7"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m6 1a5 5 0 0 0 -5 5 5 5 0 0 0 5 5 5 5 0 0 0 2.7539 -0.83203l4.3164 4.3164 1.4141-1.4141-4.3164-4.3164a5 5 0 0 0 0.83203 -2.7539 5 5 0 0 0 -5 -5zm0 2a3 3 0 0 1 3 3 3 3 0 0 1 -3 3 3 3 0 0 1 -3 -3 3 3 0 0 1 3 -3z" fill="#e0e0e0" fill-opacity=".99608"/> </g> </svg> diff --git a/editor/icons/icon_shader.svg b/editor/icons/icon_shader.svg index f77aa837c5..659d81519a 100644 --- a/editor/icons/icon_shader.svg +++ b/editor/icons/icon_shader.svg @@ -1,11 +1,12 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m2 1c-0.55226 1e-4 -0.99994 0.4477-1 1v1h2 6 3l-2-2h-8z" fill="#ff7070"/> -<path transform="translate(0 1036.4)" d="m1 3v2h2v-2h-2zm8 0v2h5l-2-2h-3z" fill="#ffeb70"/> -<path transform="translate(0 1036.4)" d="m1 5v2h2v-2h-2zm8 0v1c0 0.554 0.44599 1 1 1h3 2v-1l-1-1h-5z" fill="#9dff70"/> -<path transform="translate(0 1036.4)" d="m1 7v2h2v-2h-2zm12 0v2h2v-2h-2z" fill="#70ffb9"/> -<path transform="translate(0 1036.4)" d="m1 9v2h2v-2h-2zm12 0v2h2v-2h-2z" fill="#70deff"/> -<path transform="translate(0 1036.4)" d="m1 13v1c5.52e-5 0.5523 0.44774 0.9999 1 1h12c0.55226-1e-4 0.99994-0.4477 1-1v-1h-2-10-2z" fill="#ff70ac"/> -<path transform="translate(0 1036.4)" d="m1 11v2h2v-2h-2zm12 0v2h2v-2h-2z" fill="#9f70ff"/> +<g> +<path d="m2 1c-0.55226 1e-4 -0.99994 0.4477-1 1v12c5.52e-5 0.5523 0.44774 0.9999 1 1h12c0.55226-1e-4 0.99994-0.4477 1-1v-8l-5-5zm1 2h6v3c0 0.554 0.44599 1 1 1h3v6h-10z" fill="#e0e0e0"/> +<path d="m10 11h2v1h-2z" fill="#9f70ff"/> +<path d="m4 6h2v1h-2z" fill="#ffeb70"/> +<path d="m8 8h4v1h-4z" fill="#9dff70"/> +<path d="m7 6h1v1h-1z" fill="#70deff"/> +<path d="m4 11h5v1h-5z" fill="#ff70ac"/> +<path d="m4 4h3v1h-3z" fill="#ff7070"/> +<path d="m4 8h3v1h-3z" fill="#70ffb9"/> </g> </svg> diff --git a/editor/icons/icon_signal.svg b/editor/icons/icon_signal.svg index 74fbdf8520..85411702cd 100644 --- a/editor/icons/icon_signal.svg +++ b/editor/icons/icon_signal.svg @@ -1,9 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#ff8484"> -<rect x="5" y="1043.4" width="6" height="2"/> -<path transform="matrix(0 1.281 -.9245 0 -948.3 1038)" d="m8.1225-1036.6h-3.1225-3.1225l1.5612-2.7042 1.5612-2.7041 1.5612 2.7041z"/> -<rect x="1" y="1039.4" width="2" height="10"/> -<rect x="3" y="1047.4" width="4" height="2"/> -<rect x="3" y="1039.4" width="4" height="2"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m1 3v10h2 4v-2h-4v-6h4v-2h-4-2zm9 1v3h-5v2h5v3l2.5-2 2.5-2-2.5-2-2.5-2z" fill="#ff8484"/> </g> </svg> diff --git a/editor/icons/icon_signals.svg b/editor/icons/icon_signals.svg new file mode 100644 index 0000000000..97859370b7 --- /dev/null +++ b/editor/icons/icon_signals.svg @@ -0,0 +1,5 @@ +<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m4 2a1 1 0 0 0 -1 1 1 1 0 0 0 1 1c4.4301 0 8 3.5699 8 8a1 1 0 0 0 1 1 1 1 0 0 0 1 -1c0-5.511-4.489-10-10-10zm0 4a1 1 0 0 0 -1 1 1 1 0 0 0 1 1c2.221 0 4 1.779 4 4a1 1 0 0 0 1 1 1 1 0 0 0 1 -1c0-3.3018-2.6981-6-6-6zm0 4a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2z" fill="#e0e0e0"/> +</g> +</svg> diff --git a/editor/icons/icon_signals_and_groups.svg b/editor/icons/icon_signals_and_groups.svg new file mode 100644 index 0000000000..5dedbaa433 --- /dev/null +++ b/editor/icons/icon_signals_and_groups.svg @@ -0,0 +1,5 @@ +<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m6 0c-0.55228 0-1 0.4477-1 1s0.44772 1 1 1c4.4301 0 8 3.5699 8 8 0 0.5523 0.44772 1 1 1s1-0.4477 1-1c0-5.511-4.489-10-10-10zm0 4c-0.55228 0-1 0.4477-1 1s0.44772 1 1 1c2.221 0 4 1.779 4 4 0 0.5523 0.44772 1 1 1s1-0.4477 1-1c0-3.3018-2.6981-6-6-6zm-5 4a1.0001 1.0001 0 0 0 -1 1v6a1.0001 1.0001 0 0 0 1 1h6a1.0001 1.0001 0 0 0 1 -1v-6a1.0001 1.0001 0 0 0 -1 -1h-6zm1 2h4v4h-4v-4z" fill="#e0e0e0"/> +</g> +</svg> diff --git a/editor/icons/icon_skeleton.svg b/editor/icons/icon_skeleton.svg index 9716940906..d5c5f301bb 100644 --- a/editor/icons/icon_skeleton.svg +++ b/editor/icons/icon_skeleton.svg @@ -1,8 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#fc9c9c" fill-opacity=".99608"> -<path transform="translate(0 1036.4)" d="m6 2a4 4 0 0 0 -4 4 4 4 0 0 0 3 3.8691v-0.86914h1v1h1v-1h1 1v1h1v-1h1v0.86719a4 4 0 0 0 3 -3.8672 4 4 0 0 0 -4 -4h-4zm-1 3a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1zm6 0a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1zm-4 2h2v1h-2v-1z"/> -<path transform="translate(0 1036.4)" d="m4 9v4h1v-4h-1zm7 0v4h1v-4h-1zm-5 3v1 2h4v-2-1h-1v1h-2v-1h-1z"/> -<path d="m8 1049.4a2 2 0 0 1 -1 1.732 2 2 0 0 1 -2 0 2 2 0 0 1 -1 -1.732h2z"/> -<path d="m12 1049.4a2 2 0 0 1 -1 1.732 2 2 0 0 1 -2 0 2 2 0 0 1 -1 -1.732h2z"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m6 2a4 4 0 0 0 -4 4 4 4 0 0 0 2 3.4531v3.5469a2 2 0 0 0 1 1.7324 2 2 0 0 0 1 0.26562v0.001953h4v-0.001953a2 2 0 0 0 1 -0.26562 2 2 0 0 0 1 -1.7324v-3.5469a4 4 0 0 0 2 -3.4531 4 4 0 0 0 -4 -4h-4zm-1 3a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1zm6 0a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1zm-4 2h2v1h-2v-1zm-2 2h1v1h1v-1h1 1v1h1v-1h1v0.86719 3.1328h-1v-1h-1v1h-1-1v-1h-1v1h-1v-3.1309-0.86914z" fill="#fc9c9c" fill-opacity=".99608"/> </g> </svg> diff --git a/editor/icons/icon_slot.svg b/editor/icons/icon_slot.svg index f3d27ec55e..b31d7bfbc2 100644 --- a/editor/icons/icon_slot.svg +++ b/editor/icons/icon_slot.svg @@ -1,7 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#84ffb1"> -<rect x="1" y="1043.4" width="6" height="2"/> -<path transform="matrix(0 1.281 -.9245 0 -952.3 1038)" d="m8.1225-1036.6h-3.1225-3.1225l1.5612-2.7042 1.5612-2.7041 1.5612 2.7041z"/> -<path d="m15 1039.4v10h-2-4v-2h4v-6h-4v-2h4 2z"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m9 3v2h4v6h-4v2h4 2v-10h-2-4zm-3 1v3h-5v2h5v3l2.5-2 2.5-2-2.5-2-2.5-2z" fill="#84ffb1"/> </g> </svg> diff --git a/editor/icons/icon_snap.svg b/editor/icons/icon_snap.svg index 0195f7cfc6..0e535b11ce 100644 --- a/editor/icons/icon_snap.svg +++ b/editor/icons/icon_snap.svg @@ -1,93 +1,6 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<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" - version="1.1" - viewBox="0 0 16 16" - id="svg848" - sodipodi:docname="icon_snap.svg" - inkscape:version="0.92.2 5c3e80d, 2017-08-06"> - <metadata - id="metadata854"> - <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> - <defs - id="defs852" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="2558" - inkscape:window-height="1422" - id="namedview850" - showgrid="true" - inkscape:pagecheckerboard="true" - inkscape:zoom="26.317631" - inkscape:cx="-14.078109" - inkscape:cy="-1.3201296" - inkscape:window-x="1366" - inkscape:window-y="16" - inkscape:window-maximized="1" - inkscape:current-layer="svg848"> - <inkscape:grid - type="xygrid" - id="grid862" /> - </sodipodi:namedview> - <path - style="fill:#ff8484;stroke-width:1.48039925" - inkscape:connector-curvature="0" - id="path836" - d="m 3.9501321,14.20668 a 5.9215969,5.9215969 0 0 0 8.0890509,-2.167455 l -2.5641252,-1.4804 A 2.9607985,2.9607985 0 0 1 5.4305313,11.642553 2.9607985,2.9607985 0 0 1 4.3468039,7.5980268 L 1.7826772,6.1176278 A 5.9215969,5.9215969 0 0 0 3.9501321,14.20668 Z" /> - <rect - style="fill:#ff8484;stroke-width:1.48039925" - id="rect838" - height="2.9607985" - width="2.9607985" - y="-4.4066463" - x="-16.44585" - transform="rotate(-150)" /> - <rect - style="fill:#ff8484;stroke-width:1.48039925" - id="rect840" - height="2.9607985" - width="2.9607985" - y="-4.4066463" - x="-7.5634551" - transform="rotate(-150)" /> - <rect - style="fill:#ffffff;stroke-width:1.48039925" - id="rect842" - height="2.9607985" - width="2.9607985" - y="-1.4458472" - x="-16.44585" - transform="rotate(-150)" /> - <rect - style="fill:#ffffff;stroke-width:1.48039925" - id="rect844" - height="2.9607985" - width="2.9607985" - y="-1.4458472" - x="-7.5634551" - transform="rotate(-150)" /> +<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m3 3v2h2v-2h-2zm6 0v2h2v-2h-2zm-6 6v2h2v-2h-2zm4 4v2h2v-2h-2zm6 0v2h2v-2h-2z" fill="#e0e0e0"/> +<path transform="translate(0 1036.4)" d="m11 7a4 4 0 0 0 -4 4v2h2v-2a2 2 0 0 1 2 -2 2 2 0 0 1 2 2v2h2v-2a4 4 0 0 0 -4 -4z" fill="#fff" fill-opacity=".68627"/> +</g> </svg> diff --git a/editor/icons/icon_snap_grid.svg b/editor/icons/icon_snap_grid.svg index b479496327..7124bd918e 100644 --- a/editor/icons/icon_snap_grid.svg +++ b/editor/icons/icon_snap_grid.svg @@ -1,92 +1,6 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<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" - version="1.1" - viewBox="0 0 16 16" - id="svg913" - sodipodi:docname="icon_snap_grid.svg" - inkscape:version="0.92.2 5c3e80d, 2017-08-06"> - <metadata - id="metadata919"> - <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> - <defs - id="defs917" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="2558" - inkscape:window-height="1422" - id="namedview915" - showgrid="false" - inkscape:pagecheckerboard="true" - inkscape:zoom="52.635261" - inkscape:cx="6.4374987" - inkscape:cy="5.7074131" - inkscape:window-x="1366" - inkscape:window-y="16" - inkscape:window-maximized="1" - inkscape:current-layer="svg913" /> - <g - transform="translate(0 -1036.4)" - id="g911"> - <path - d="m3 1036.4v3h-3v2h3v4h-3v2h3v3h2v-3-2-4h4 2 3v-2h-3v-3h-2v3h-4v-3h-2z" - fill="#f3f3f3" - id="path899" /> - <path - d="m11 1043.4a4 4 0 0 0 -4 4h2a2 2 0 0 1 2 -2 2 2 0 0 1 2 2h2a4 4 0 0 0 -4 -4z" - fill="#ff8484" - id="path901" /> - <rect - x="7" - y="1047.4" - width="2" - height="2" - fill="#ff8484" - id="rect903" /> - <rect - x="13" - y="1047.4" - width="2" - height="2" - fill="#ff8484" - id="rect905" /> - <rect - x="7" - y="1049.4" - width="2" - height="2" - fill="#fff" - id="rect907" /> - <rect - x="13" - y="1049.4" - width="2" - height="2" - fill="#fff" - id="rect909" /> - </g> +<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m3 0v3h-3v2h3v4h-3v2h3v3h2v-9h9v-2h-3v-3h-2v3h-4v-3zm4 13v2h2v-2zm6 0v2h2v-2z" fill="#e0e0e0"/> +<path transform="translate(0 1036.4)" d="m11 7a4 4 0 0 0 -4 4v2h2v-2a2 2 0 0 1 2 -2 2 2 0 0 1 2 2v2h2v-2a4 4 0 0 0 -4 -4z" fill="#fff" fill-opacity=".68627"/> +</g> </svg> diff --git a/editor/icons/icon_sound_room_params.svg b/editor/icons/icon_sound_room_params.svg deleted file mode 100644 index ddec8a3cf9..0000000000 --- a/editor/icons/icon_sound_room_params.svg +++ /dev/null @@ -1,9 +0,0 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#e0e0e0"> -<path d="m8 1037.4-4 5h-3v4h3l4 5v-14z"/> -<path d="m13 1039.4v10h1v-10h-1z"/> -<path d="m10 1039.4v10h1v-10h-1z"/> -<rect x="9" y="1041.4" width="3" height="1"/> -<rect x="12" y="1046.4" width="3" height="1"/> -</g> -</svg> diff --git a/editor/icons/icon_spatial_sample_player.svg b/editor/icons/icon_spatial_sample_player.svg deleted file mode 100644 index 32f70cd2a6..0000000000 --- a/editor/icons/icon_spatial_sample_player.svg +++ /dev/null @@ -1,5 +0,0 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m8 1l-4 5h-3v4h3l4 5v-14zm5 2v10h1v-10h-1zm-3 3v5h1v-5h-1z" fill="#fc9c9c" fill-opacity=".99608"/> -</g> -</svg> diff --git a/editor/icons/icon_spatial_stream_player.svg b/editor/icons/icon_spatial_stream_player.svg deleted file mode 100644 index 20fadb59f8..0000000000 --- a/editor/icons/icon_spatial_stream_player.svg +++ /dev/null @@ -1,5 +0,0 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m5 2c-0.55228 0-1 0.44772-1 1v1 7h-2c-0.55228 0-1 0.44772-1 1v2c0 0.55228 0.44772 1 1 1h2 1c0.55228 0 1-0.44772 1-1v-3-7h6v5h-2c-0.55228 0-1 0.44772-1 1v2c0 0.55228 0.44772 1 1 1h3c0.55228 0 1-0.44772 1-1v-3-6c0-0.55228-0.44772-1-1-1h-7z" fill="#fc9c9c" fill-opacity=".99608"/> -</g> -</svg> diff --git a/editor/icons/icon_spin_box.svg b/editor/icons/icon_spin_box.svg index 965df69a02..c033df2c85 100644 --- a/editor/icons/icon_spin_box.svg +++ b/editor/icons/icon_spin_box.svg @@ -1,8 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#a5efac"> -<path transform="translate(0 1036.4)" d="m3 3c-1.1046 0-2 0.89543-2 2v6c0 1.1046 0.89543 2 2 2h7v-2h-7v-6h7v-2z"/> -<rect x="8" y="1041.4" width="2" height="6"/> -<path d="m11 1043.4h4l-2-3z" fill-rule="evenodd"/> -<path d="m11 1045.4h4l-2 3z" fill-rule="evenodd"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m3 3c-1.1046 0-2 0.89543-2 2v6c0 1.1046 0.89543 2 2 2h7v-2-6-2h-7zm10 1l-2 3h4l-2-3zm-10 1h5v6h-5v-6zm8 4l2 3 2-3h-4z" fill="#a5efac"/> </g> </svg> diff --git a/editor/icons/icon_sprite.svg b/editor/icons/icon_sprite.svg index 4feea4d265..09fc2f0979 100644 --- a/editor/icons/icon_sprite.svg +++ b/editor/icons/icon_sprite.svg @@ -1,5 +1,3 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m8 1a7 7 0 0 0 -7 7 7 7 0 0 0 7 7 7 7 0 0 0 7 -7 7 7 0 0 0 -7 -7zm-4 5a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1zm8 0a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1zm-7 3h6a3 3 0 0 1 -1.5 2.5977 3 3 0 0 1 -3 0 3 3 0 0 1 -1.5 -2.5977z" fill="#a5b7f3"/> -</g> +<path d="m5 1c-2.216 0-4 1.784-4 4v6c0 2.216 1.784 4 4 4h6c2.216 0 4-1.784 4-4v-6c0-2.216-1.784-4-4-4h-6zm-1 5c0.554 0 1 0.446 1 1v2c0 0.554-0.446 1-1 1s-1-0.446-1-1v-2c0-0.554 0.446-1 1-1zm8 0c0.554 0 1 0.446 1 1v2c0 0.554-0.446 1-1 1s-1-0.446-1-1v-2c0-0.554 0.446-1 1-1zm-1.8887 5.1074a1.0001 1.0001 0 0 1 0.7168 1.7207c-0.74987 0.74987-1.7676 1.1719-2.8281 1.1719s-2.0783-0.422-2.8281-1.1719a1.0001 1.0001 0 0 1 0.69727 -1.7168 1.0001 1.0001 0 0 1 0.7168 0.30273c0.37534 0.37535 0.88325 0.58594 1.4141 0.58594s1.0387-0.21059 1.4141-0.58594a1.0001 1.0001 0 0 1 0.69727 -0.30664z" fill="#a5b7f6" fill-opacity=".98824"/> </svg> diff --git a/editor/icons/icon_sprite_3d.svg b/editor/icons/icon_sprite_3d.svg index 0d5caae501..eb163e3f43 100644 --- a/editor/icons/icon_sprite_3d.svg +++ b/editor/icons/icon_sprite_3d.svg @@ -1,5 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m8 1a7 7 0 0 0 -7 7 7 7 0 0 0 7 7 7 7 0 0 0 7 -7 7 7 0 0 0 -7 -7zm-4 5a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1zm8 0a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1zm-7 3h6a3 3 0 0 1 -1.5 2.5977 3 3 0 0 1 -3 0 3 3 0 0 1 -1.5 -2.5977z" fill="#fc9c9c" fill-opacity=".99608"/> +<g fill="#fc9c9c"> +<path d="m5 1c-2.216 0-4 1.784-4 4v6c0 2.216 1.784 4 4 4h6c2.216 0 4-1.784 4-4v-6c0-2.216-1.784-4-4-4zm-1 5c0.554 0 1 0.446 1 1v2c0 0.554-0.446 1-1 1s-1-0.446-1-1v-2c0-0.554 0.446-1 1-1zm8 0c0.554 0 1 0.446 1 1v2c0 0.554-0.446 1-1 1s-1-0.446-1-1v-2c0-0.554 0.446-1 1-1zm-1.8887 5.1074a1.0001 1.0001 0 0 1 0.7168 1.7207c-0.74987 0.74987-1.7676 1.1719-2.8281 1.1719s-2.0783-0.422-2.8281-1.1719a1.0001 1.0001 0 0 1 0.69727 -1.7168 1.0001 1.0001 0 0 1 0.7168 0.30273c0.37534 0.37535 0.88325 0.58594 1.4141 0.58594s1.0387-0.21059 1.4141-0.58594a1.0001 1.0001 0 0 1 0.69727 -0.30664z" fill="#fc9c9c"/> </g> </svg> diff --git a/editor/icons/icon_sprite_frames.svg b/editor/icons/icon_sprite_frames.svg index e797819892..8123cbd6b4 100644 --- a/editor/icons/icon_sprite_frames.svg +++ b/editor/icons/icon_sprite_frames.svg @@ -1,5 +1,3 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m6 1a5 5 0 0 0 -5 5 5 5 0 0 0 5 5 5 5 0 0 0 5 -5 5 5 0 0 0 -5 -5zm-3 4a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1zm6 0a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1zm4 2v2h2v-2h-2zm-5.0039 0.49219a0.50005 0.50005 0 0 1 0.35742 0.86133c-0.61785 0.6179-1.4924 0.89648-2.3535 0.89648s-1.7357-0.27858-2.3535-0.89648a0.50005 0.50005 0 0 1 0.34766 -0.85742 0.50005 0.50005 0 0 1 0.35938 0.15039c0.38215 0.3822 1.0076 0.60352 1.6465 0.60352s1.2643-0.22132 1.6465-0.60352a0.50005 0.50005 0 0 1 0.34961 -0.1543zm2.0039 2.5078v2h2v-2h-2zm3 0v2h2v-2h-2zm-6 3v2h2v-2h-2zm3 0v2h2v-2h-2zm3 0v2h2v-2h-2z" fill="#e0e0e0"/> -</g> +<path d="m3 1c-1.108 0-2 0.89199-2 2v6c0 1.108 0.89199 2 2 2h6c1.108 0 2-0.89199 2-2v-6c0-1.108-0.89199-2-2-2h-6zm10 0v2h2v-2h-2zm-10 4c0.554 0 1 0.446 1 1v1c0 0.554-0.446 1-1 1s-1-0.446-1-1v-1c0-0.554 0.446-1 1-1zm6 0c0.554 0 1 0.446 1 1v1c0 0.554-0.446 1-1 1s-1-0.446-1-1v-1c0-0.554 0.446-1 1-1zm4 0v2h2v-2h-2zm-9 4h2 2a2 1 0 0 1 -1 0.86523 2 1 0 0 1 -2 0 2 1 0 0 1 -1 -0.86523zm9 0v2h2v-2h-2zm-12 4v2h2v-2h-2zm4 0v2h2v-2h-2zm4 0v2h2v-2h-2zm4 0v2h2v-2h-2z" fill="#e0e0e0"/> </svg> diff --git a/editor/icons/icon_status_error.svg b/editor/icons/icon_status_error.svg new file mode 100644 index 0000000000..072964b02d --- /dev/null +++ b/editor/icons/icon_status_error.svg @@ -0,0 +1,3 @@ +<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> +<path d="m8 1c-3.866 0-7 3.134-7 7 0 3.866 3.134 7 7 7 3.866 0 7-3.134 7-7 0-3.866-3.134-7-7-7zm-2.8281 2.7578l2.8281 2.8281 2.8281-2.8281 1.4141 1.4141-2.8281 2.8281 2.8281 2.8281-1.4141 1.4141-2.8281-2.8281-2.8281 2.8281-1.4141-1.4141 2.8281-2.8281-2.8281-2.8281 1.4141-1.4141z" fill="#ff5d5d"/> +</svg> diff --git a/editor/icons/icon_status_success.svg b/editor/icons/icon_status_success.svg new file mode 100644 index 0000000000..d1ddc08579 --- /dev/null +++ b/editor/icons/icon_status_success.svg @@ -0,0 +1,3 @@ +<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> +<path d="m8 1c-3.866 0-7 3.134-7 7 0 3.866 3.134 7 7 7 3.866 0 7-3.134 7-7 0-3.866-3.134-7-7-7zm3.293 3.877 1.4141 1.4141-5.707 5.709-3.707-3.709 1.4141-1.4141 2.293 2.293z" fill="#45ff8b"/> +</svg> diff --git a/editor/icons/icon_status_warning.svg b/editor/icons/icon_status_warning.svg new file mode 100644 index 0000000000..28364bb274 --- /dev/null +++ b/editor/icons/icon_status_warning.svg @@ -0,0 +1,3 @@ +<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> +<path d="m8 1a7 7 0 0 0 -7 7 7 7 0 0 0 7 7 7 7 0 0 0 7 -7 7 7 0 0 0 -7 -7zm-1 2h2v7h-2v-7zm0 8h2v2h-2v-2z" fill="#ffdd65"/> +</svg> diff --git a/editor/icons/icon_stream_player.svg b/editor/icons/icon_stream_player.svg deleted file mode 100644 index c135487de9..0000000000 --- a/editor/icons/icon_stream_player.svg +++ /dev/null @@ -1,5 +0,0 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m5 2c-0.55228 0-1 0.44772-1 1v1 7h-2c-0.55228 0-1 0.44772-1 1v2c0 0.55228 0.44772 1 1 1h2 1c0.55228 0 1-0.44772 1-1v-3-7h6v5h-2c-0.55228 0-1 0.44772-1 1v2c0 0.55228 0.44772 1 1 1h3c0.55228 0 1-0.44772 1-1v-3-6c0-0.55228-0.44772-1-1-1h-7z" fill="#e0e0e0"/> -</g> -</svg> diff --git a/editor/icons/icon_string.svg b/editor/icons/icon_string.svg deleted file mode 100644 index 515658aa1b..0000000000 --- a/editor/icons/icon_string.svg +++ /dev/null @@ -1,5 +0,0 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m5 1v2h2v10h-2v2h2a1 1 0 0 0 1 -1 1 1 0 0 0 1 1h2v-2h-2v-10h2v-2h-2a1 1 0 0 0 -1 1 1 1 0 0 0 -1 -1h-2z" fill="#e0e0e0"/> -</g> -</svg> diff --git a/editor/icons/icon_tool_pan.svg b/editor/icons/icon_tool_pan.svg index ff2b2eda1d..4c4866b999 100644 --- a/editor/icons/icon_tool_pan.svg +++ b/editor/icons/icon_tool_pan.svg @@ -1,13 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#e0e0e0" fill-opacity=".99608"> -<path transform="translate(0 1036.4)" d="m6 8v7h6v-2h2v-5h-8z"/> -<rect x="6" y="1039.4" width="2" height="8"/> -<rect x="9" y="1038.4" width="2" height="8"/> -<rect x="12" y="1040.4" width="2" height="8"/> -<circle cx="7" cy="1039.4" r="1"/> -<circle cx="10" cy="1038.4" r="1"/> -<circle cx="13" cy="1040.4" r="1"/> -<circle cx="12" cy="1049.4" r="2"/> -<path d="m3.5251 1045.6c-0.52015-0.3803-1.1943-0.4556-1.6499 0-0.45566 0.4556-0.45564 1.1943-2.36e-5 1.6499l4.1248 4.1248 1.6499-2.7593z"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m10 1a1 1 0 0 0 -1 1v6h-1v-5a1 1 0 0 0 -1 -1 1 1 0 0 0 -1 1v8 0.033203l-2.4746-1.8086c-0.52015-0.3803-1.1948-0.4556-1.6504 0-0.45566 0.4556-0.45561 1.1948 0 1.6504l4.125 4.125h6a2 2 0 0 0 2 -2v-5-4a1 1 0 0 0 -1 -1 1 1 0 0 0 -1 1v4h-1v-6a1 1 0 0 0 -1 -1z" fill="#e0e0e0" fill-opacity=".99608"/> </g> </svg> diff --git a/editor/icons/icon_track_discrete.svg b/editor/icons/icon_track_discrete.svg index 80c9062365..6000d55e99 100644 --- a/editor/icons/icon_track_discrete.svg +++ b/editor/icons/icon_track_discrete.svg @@ -1,7 +1,5 @@ <svg width="16" height="8" version="1.1" viewBox="0 0 16 8" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1044.4)" fill="#e0e0e0"> -<circle cx="2" cy="1050.4" r="1"/> -<circle cx="8" cy="1048.4" r="1"/> -<circle cx="14" cy="1046.4" r="1"/> +<g transform="translate(0 -1044.4)"> +<path transform="translate(0 1044.4)" d="m14 1a1 1 0 0 0 -1 1 1 1 0 0 0 1 1 1 1 0 0 0 1 -1 1 1 0 0 0 -1 -1zm-6 2a1 1 0 0 0 -1 1 1 1 0 0 0 1 1 1 1 0 0 0 1 -1 1 1 0 0 0 -1 -1zm-6 2a1 1 0 0 0 -1 1 1 1 0 0 0 1 1 1 1 0 0 0 1 -1 1 1 0 0 0 -1 -1z" fill="#e0e0e0"/> </g> </svg> diff --git a/editor/icons/icon_track_trigger.svg b/editor/icons/icon_track_trigger.svg index f614943845..fd2505463f 100644 --- a/editor/icons/icon_track_trigger.svg +++ b/editor/icons/icon_track_trigger.svg @@ -1,9 +1,5 @@ <svg width="16" height="8" version="1.1" viewBox="0 0 16 8" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1044.4)" fill="#e0e0e0"> -<circle cx="11" cy="1048.4" r="1"/> -<circle cx="14" cy="1046.4" r="1"/> -<rect x="1" y="1045.4" width="6" height="2"/> -<rect x="3" y="1047.4" width="2" height="4"/> -<circle cx="8" cy="1050.4" r="1"/> +<g transform="translate(0 -1044.4)"> +<path transform="translate(0 1044.4)" d="m1 1v2h2v4h2v-4h2v-2h-6zm13 0a1 1 0 0 0 -1 1 1 1 0 0 0 1 1 1 1 0 0 0 1 -1 1 1 0 0 0 -1 -1zm-3 2a1 1 0 0 0 -1 1 1 1 0 0 0 1 1 1 1 0 0 0 1 -1 1 1 0 0 0 -1 -1zm-3 2a1 1 0 0 0 -1 1 1 1 0 0 0 1 1 1 1 0 0 0 1 -1 1 1 0 0 0 -1 -1z" fill="#e0e0e0"/> </g> </svg> diff --git a/editor/icons/icon_unlock.svg b/editor/icons/icon_unlock.svg index 10ea82cbcf..591b3d0102 100644 --- a/editor/icons/icon_unlock.svg +++ b/editor/icons/icon_unlock.svg @@ -1,7 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#e0e0e0"> -<path transform="translate(0 1036.4)" d="m2 8v7h12v-7h-12zm5 2h2v3h-2v-3z"/> -<path transform="translate(0 1036.4)" d="m8 1c-0.87738 0.001545-1.7389 0.23394-2.498 0.67383l1 1.7324c0.45506-0.26449 0.97171-0.40459 1.498-0.40625 1.6569 0 3 1.3431 3 3h2c0-2.7614-2.2386-5-5-5z"/> -<rect x="11" y="1042.4" width="2" height="2"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m8 1c-0.87738 0.001545-1.7389 0.23394-2.498 0.67383l1 1.7324c0.45506-0.26449 0.97171-0.40459 1.498-0.40625 1.6569 0 3 1.3431 3 3v2h-9v7h12v-7h-1v-2c0-2.7614-2.2386-5-5-5zm-1 9h2v3h-2v-3z" fill="#e0e0e0"/> </g> </svg> diff --git a/editor/icons/icon_v_slider.svg b/editor/icons/icon_v_slider.svg index 2da5fc8dcd..45a61147ab 100644 --- a/editor/icons/icon_v_slider.svg +++ b/editor/icons/icon_v_slider.svg @@ -1,5 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m5.0156 0.98633a1.0001 1.0001 0 0 0 -0.25977 0.029297 2 2 0 0 0 -1.7559 1.9844 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -1.7539 -1.9824 1.0001 1.0001 0 0 0 -0.23047 -0.03125zm4.9844 0.013672a1 1 0 0 0 -1 1 1 1 0 0 0 1 1h2a1 1 0 0 0 1 -1 1 1 0 0 0 -1 -1h-2zm-4 5.8672a4 4 0 0 1 -1 0.13281 4 4 0 0 1 -1 -0.13086v5 1.1309 1a1.0001 1.0001 0 1 0 2 0v-1-1.1328-5zm5 0.13281a1 1 0 0 0 -1 1 1 1 0 0 0 1 1 1 1 0 0 0 1 -1 1 1 0 0 0 -1 -1zm-1 6a1 1 0 0 0 -1 1 1 1 0 0 0 1 1h2a1 1 0 0 0 1 -1 1 1 0 0 0 -1 -1h-2z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#a5efac" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> +<path transform="translate(0 1036.4)" d="m5 1a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2zm5 0c-0.55228 0-1 0.44772-1 1s0.44772 1 1 1h2c0.55228 0 1-0.44772 1-1s-0.44772-1-1-1h-2zm-4 5.8672c-0.32639 0.086294-0.6624 0.13092-1 0.13281-0.33752-0.0012549-0.67352-0.045224-1-0.13086v5 1.1309 1c-0.019125 1.3523 2.0191 1.3523 2 0v-1-1.1328-5zm5 0.13281c-0.55228 0-1 0.44772-1 1s0.44772 1 1 1 1-0.44772 1-1-0.44772-1-1-1zm-1 6c-0.55228 0-1 0.44772-1 1s0.44772 1 1 1h2c0.55228 0 1-0.44772 1-1s-0.44772-1-1-1h-2z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#a5efac" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> </g> </svg> diff --git a/editor/icons/icon_vector.svg b/editor/icons/icon_vector.svg deleted file mode 100644 index dda46edeaa..0000000000 --- a/editor/icons/icon_vector.svg +++ /dev/null @@ -1,6 +0,0 @@ -<svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1040.4)" fill="none" stroke="#b8ea68" stroke-width="2"> -<path d="m7 1047.4-4 4"/> -<path d="m7 1040.4v7h7"/> -</g> -</svg> diff --git a/editor/icons/icon_vector2.svg b/editor/icons/icon_vector2.svg deleted file mode 100644 index ab92e7bb60..0000000000 --- a/editor/icons/icon_vector2.svg +++ /dev/null @@ -1,5 +0,0 @@ -<svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1040.4)"> -<path d="m4 1041.4v9h9" fill="none" stroke="#b8ea68" stroke-width="2"/> -</g> -</svg> diff --git a/editor/icons/icon_vehicle_wheel.svg b/editor/icons/icon_vehicle_wheel.svg index fcee90e2e2..cbd33653e0 100644 --- a/editor/icons/icon_vehicle_wheel.svg +++ b/editor/icons/icon_vehicle_wheel.svg @@ -1,6 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#fc9c9c" fill-opacity=".99608"> -<path transform="translate(0 1036.4)" d="m8 1a7 7 0 0 0 -7 7 7 7 0 0 0 7 7 7 7 0 0 0 7 -7 7 7 0 0 0 -7 -7zm0 2a5 5 0 0 1 5 5 5 5 0 0 1 -5 5 5 5 0 0 1 -5 -5 5 5 0 0 1 5 -5z"/> -<path transform="translate(0 1036.4)" d="m8 4a4 4 0 0 0 -4 4 4 4 0 0 0 4 4 4 4 0 0 0 4 -4 4 4 0 0 0 -4 -4zm0 1a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1zm-2 2a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1zm4 0a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1zm-2 2a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1z"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m8 1a7 7 0 0 0 -7 7 7 7 0 0 0 7 7 7 7 0 0 0 7 -7 7 7 0 0 0 -7 -7zm0 2a5 5 0 0 1 5 5 5 5 0 0 1 -5 5 5 5 0 0 1 -5 -5 5 5 0 0 1 5 -5zm0 1a4 4 0 0 0 -4 4 4 4 0 0 0 4 4 4 4 0 0 0 4 -4 4 4 0 0 0 -4 -4zm0 1a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1zm-2 2a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1zm4 0a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1zm-2 2a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1z" fill="#fc9c9c" fill-opacity=".99608"/> </g> </svg> diff --git a/editor/icons/icon_video_player.svg b/editor/icons/icon_video_player.svg index cbee054665..84aae1f1e1 100644 --- a/editor/icons/icon_video_player.svg +++ b/editor/icons/icon_video_player.svg @@ -1,7 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1036.4)"> -<rect x="2" y="1038.4" width="12" height="12" ry="1" fill="none" stroke="#a5efac" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/> -<path d="m6 1045.4v-4l4 2z" fill="#a5efac" fill-rule="evenodd"/> -<rect x="3" y="1047.4" width="10" height="2" ry="0" fill="#a5efac"/> +<path transform="translate(0 1036.4)" d="m3 1c-1.0907 0-2 0.9093-2 2v10c0 1.0907 0.90929 2 2 2h10c1.0907 0 2-0.9093 2-2v-10c0-1.0907-0.90929-2-2-2h-10zm0 2h10v8h-10v-8zm3 2v4l4-2-4-2z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#a5efac" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="filter-blend-mode:normal;filter-gaussianBlur-deviation:0;font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> </g> </svg> diff --git a/editor/icons/icon_viewport_speed.svg b/editor/icons/icon_viewport_speed.svg new file mode 100644 index 0000000000..e64b5a8059 --- /dev/null +++ b/editor/icons/icon_viewport_speed.svg @@ -0,0 +1,4 @@ +<svg width="16" height="16" version="1.1" viewBox="0 0 4.2333333 4.2333333" xmlns="http://www.w3.org/2000/svg"> +<path d="m1.5875 0c-0.28858 0-0.52917 0.24059-0.52917 0.52917v0.61132c-0.085589-0.051-0.18113-0.0891-0.28525-0.0853-0.34849 0.0127-0.5952 0.37346-0.48059 0.70278l0.26355 0.79066c0.048664 0.14623 0.15979 0.24805 0.29249 0.30644l-0.60927 0.40669c-0.13121 0.0845-0.22102 0.22389-0.24133 0.3633-0.020312 0.13941 0.017471 0.26985 0.087333 0.37465s0.17614 0.19045 0.31264 0.22532c0.13634 0.0348 0.29946 6e-3 0.42788-0.0827h5.159e-4l1.0852-0.72348 0.26097 0.52192c0.11682 0.23391 0.39274 0.34829 0.64079 0.26561l0.79375-0.26458-0.00775 3e-3c0.15105-0.0454 0.27732-0.15615 0.33486-0.2863 0.057538-0.13015 0.055144-0.26773 0.014986-0.38809-0.03156-0.0946-0.10972-0.1687-0.19275-0.23617 0.069099-0.0546 0.1445-0.10364 0.18035-0.19325 0.051761-0.12941 0.045257-0.29292-0.02377-0.43098l-0.26459-0.52946c-0.089407-0.17933-0.27348-0.29308-0.47335-0.29305h-0.1111c0.052029-0.0817 0.1111-0.16214 0.1111-0.26458v-0.79375c0-0.28858-0.24059-0.52917-0.52917-0.52917z" color="#000000" color-rendering="auto" dominant-baseline="auto" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> +<path d="m1.5875 0.26458c-0.14658 0-0.26458 0.118-0.26458 0.26459v0.79375c0 0.14658 0.118 0.26458 0.26458 0.26458h0.26458v0.262a0.26461 0.26461 0 0 0 -0.083716 0.0165l-0.5426 0.18086-0.18087-0.5426a0.26461 0.26461 0 0 0 -0.262 -0.18448 0.26461 0.26461 0 0 0 -0.2403 0.3514l0.26458 0.79375a0.26461 0.26461 0 0 0 0.33486 0.16743l0.44545-0.14831v0.16174c0 0.0108 0.00495 0.02 0.0062 0.0305l-1.2113 0.80771a0.26461 0.26461 0 1 0 0.29352 0.44028l1.3379-0.89194 0.39532 0.79014a0.26461 0.26461 0 0 0 0.32039 0.1328l0.79375-0.26458a0.26461 0.26461 0 1 0 -0.16743 -0.50175l-0.57619 0.19172-0.25787-0.51625c0.072998-0.047 0.12402-0.12495 0.12402-0.21859v-0.26458h0.36587l0.1912 0.38292a0.26461 0.26461 0 1 0 0.47336 -0.23668l-0.26458-0.52916a0.26461 0.26461 0 0 0 -0.23668 -0.14625h-0.79375v-0.26458h0.26458c0.14658 0 0.26458-0.118 0.26458-0.26458v-0.79375c0-0.14659-0.118-0.26459-0.26458-0.26459zm0 0.52917h0.26458v0.52917h-0.26458z" fill="#fff" fill-opacity=".99608"/> +</svg> diff --git a/editor/icons/icon_viewport_sprite.svg b/editor/icons/icon_viewport_sprite.svg deleted file mode 100644 index 4b8bbeaeba..0000000000 --- a/editor/icons/icon_viewport_sprite.svg +++ /dev/null @@ -1,7 +0,0 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<rect x="20" y="1042.4" width="1" height="1" fill="#fefeff"/> -<rect x="29" y="1042.4" width="1" height="1" fill="#fefeff"/> -<path transform="translate(0 1036.4)" d="m3 2c-0.5304 8.01e-5 -1.0391 0.21085-1.4141 0.58594-0.37509 0.37501-0.58586 0.88366-0.58594 1.4141v8c8.03e-5 0.5304 0.21085 1.0391 0.58594 1.4141 0.37501 0.37509 0.88366 0.58586 1.4141 0.58594h10c1.1046 0 2-0.89543 2-2v-8c0-1.1046-0.89543-2-2-2h-10zm0 1h10c0.55228 9.6e-6 0.99999 0.44772 1 1v8c-1e-5 0.55228-0.44772 0.99999-1 1h-10c-0.55228-1e-5 -0.99999-0.44772-1-1v-8c9.6e-6 -0.55228 0.44772-0.99999 1-1zm1 3v2h2v-2h-2zm6 0v2h2v-2h-2zm-6 3v1h8v-1h-8z" fill="#a5b7f3" fill-opacity=".98824"/> -</g> -</svg> diff --git a/editor/icons/icon_viewport_zoom.svg b/editor/icons/icon_viewport_zoom.svg new file mode 100644 index 0000000000..18d4ec32ce --- /dev/null +++ b/editor/icons/icon_viewport_zoom.svg @@ -0,0 +1,6 @@ +<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> +<g> +<path d="m6 0c-3.3019 0-6 2.6981-6 6s2.6981 6 6 6h0.00195c0.88828 0 1.737-0.2588 2.5332-0.6367l3.8281 3.8281c0.39053 0.3904 1.0235 0.3904 1.4141 0l1.4141-1.4141c0.39033-0.3905 0.39033-1.0235 0-1.414l-3.791-3.791c0.02779-0.058 0.06588-0.1109 0.0918-0.17 0.05554-0.1268 0.08414-0.2638 0.08398-0.4023h1.4238c0.55226-1e-4 0.99994-0.4477 1-1v-1h1c0.55226-1e-4 0.99994-0.4477 1-1v-2c-5.5e-5 -0.5523-0.44774-0.9999-1-1h-1v-1c-5.5e-5 -0.5523-0.44774-0.9999-1-1h-2c-0.55226 1e-4 -0.99994 0.4477-1 1v1h-0.00977c1.44e-4 -0.3151-0.14822-0.6118-0.40039-0.8008-1.0353-0.7764-2.2938-1.1967-3.5879-1.1992h-0.00195z" color="#000000" color-rendering="auto" dominant-baseline="auto" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> +<path d="m6 1a5 5 0 0 0 -5 5 5 5 0 0 0 5 5 5 5 0 0 0 2.752 -0.83398l4.3184 4.3184 1.4141-1.4141-4.3184-4.3184a5 5 0 0 0 0.41016 -0.75195h-0.57617v-2h-1a3 3 0 0 1 -3 3 3 3 0 0 1 -3 -3 3 3 0 0 1 3 -3 3 3 0 0 1 2 0.76758v-1.7676h0.99023a5 5 0 0 0 -2.9902 -1zm5 0v2h-2v2h2v2h2v-2h2v-2h-2v-2z" fill="#fff"/> +</g> +</svg> diff --git a/editor/icons/icon_visual_shader_port.svg b/editor/icons/icon_visual_shader_port.svg index 0f5d00dbc4..da94e48a21 100644 --- a/editor/icons/icon_visual_shader_port.svg +++ b/editor/icons/icon_visual_shader_port.svg @@ -1,5 +1,7 @@ <svg width="10" height="10" version="1.1" viewBox="0 0 10 10" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0 -1042.4)"> -<path d="m2 1051.4v-8l6 4z" fill="#f3f3f3" fill-rule="evenodd" stroke="#e4e4e4" stroke-linejoin="round" stroke-width="2"/> +<g> +<path d="m1.9883 1042.4c-0.5469 0.01-0.98717 0.4511-0.98828 0.998v8c1.163e-4 0.7986 0.89011 1.275 1.5547 0.8321l6-4c0.59363-0.3959 0.59363-1.2682 0-1.6641l-6-4c-0.1678-0.1111-0.3652-0.1689-0.56641-0.166z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#fff" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> +</g> </g> </svg> diff --git a/editor/icons/icon_vu_empty.svg b/editor/icons/icon_vu_empty.svg deleted file mode 100644 index 76bb913e38..0000000000 --- a/editor/icons/icon_vu_empty.svg +++ /dev/null @@ -1,13 +0,0 @@ -<svg width="128" height="4" version="1.1" viewBox="0 0 128 4" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> -<defs> -<linearGradient id="a" x2="128" y1="2" y2="2" gradientUnits="userSpaceOnUse"> -<stop stop-color="#84ffb1" offset="0"/> -<stop stop-color="#e1dc7a" offset=".5"/> -<stop stop-color="#ff8484" offset="1"/> -</linearGradient> -</defs> -<g transform="translate(0 -1048.4)"> -<path transform="translate(0 1048.4)" d="m2 0a2 2 0 0 0 -2 2 2 2 0 0 0 2 2h75 3 2 3 15v-4h-15-3-2-3-75zm100 0v4h24a2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2h-24z" fill="url(#a)"/> -<path transform="translate(0 1048.4)" d="m2 0a2 2 0 0 0 -2 2 2 2 0 0 0 2 2h75 3 2 3 15v-4h-15-3-2-3-75zm100 0v4h24a2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2h-24z" fill-opacity=".23529"/> -</g> -</svg> diff --git a/editor/icons/icon_vu_full.svg b/editor/icons/icon_vu_full.svg deleted file mode 100644 index bacab2a83c..0000000000 --- a/editor/icons/icon_vu_full.svg +++ /dev/null @@ -1,12 +0,0 @@ -<svg width="128" height="4" version="1.1" viewBox="0 0 128 4" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> -<defs> -<linearGradient id="a" x2="128" y1="2" y2="2" gradientUnits="userSpaceOnUse"> -<stop stop-color="#84ffb1" offset="0"/> -<stop stop-color="#e1dc7a" offset=".5"/> -<stop stop-color="#ff8484" offset="1"/> -</linearGradient> -</defs> -<g transform="translate(0 -1048.4)"> -<path transform="translate(0 1048.4)" d="m2 0a2 2 0 0 0 -2 2 2 2 0 0 0 2 2h75 3 2 3 15v-4h-15-3-2-3-75zm100 0v4h24a2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2h-24z" fill="url(#a)"/> -</g> -</svg> diff --git a/editor/icons/icon_world.svg b/editor/icons/icon_world.svg index 4ea501e194..cf9b23b61b 100644 --- a/editor/icons/icon_world.svg +++ b/editor/icons/icon_world.svg @@ -1,6 +1,5 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#e0e0e0"> -<circle cx="6" cy="1046.4" r="5"/> -<circle cx="12" cy="1039.4" r="1"/> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m12 2a1 1 0 0 0 -1 1 1 1 0 0 0 1 1 1 1 0 0 0 1 -1 1 1 0 0 0 -1 -1zm-6 3a5 5 0 0 0 -5 5 5 5 0 0 0 5 5 5 5 0 0 0 5 -5 5 5 0 0 0 -5 -5z" fill="#e0e0e0"/> </g> </svg> diff --git a/editor/icons/icon_zoom_less.svg b/editor/icons/icon_zoom_less.svg index 46db300785..aebadf443f 100644 --- a/editor/icons/icon_zoom_less.svg +++ b/editor/icons/icon_zoom_less.svg @@ -1,5 +1,6 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<rect x="1" y="1043.4" width="14" height="1.9999" fill="#e0e0e0"/> +<g transform="translate(0 -1036.4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"> +<circle cx="8" cy="1044.4" r="8" fill-opacity=".39216" stroke-opacity=".98824"/> +<path transform="translate(0 1036.4)" d="m8 1a7 7 0 0 0 -7 7 7 7 0 0 0 7 7 7 7 0 0 0 7 -7 7 7 0 0 0 -7 -7zm-4 6h8v2h-8v-2z" fill="#e0e0e0"/> </g> </svg> diff --git a/editor/icons/icon_zoom_more.svg b/editor/icons/icon_zoom_more.svg index 3cf2c7fbb1..be1e13d145 100644 --- a/editor/icons/icon_zoom_more.svg +++ b/editor/icons/icon_zoom_more.svg @@ -1,12 +1,6 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<g transform="translate(-201.58 205.03)"> -<g transform="matrix(48.459 0 0 53.968 -126.63 -55836)"> -<g transform="translate(.51853 -.019888)" fill="#e0e0e0" fill-opacity=".99608"> -<rect x="6.3979" y="1050.1" width=".042995" height=".26205" rx="0" ry="0"/> -<rect x="6.2806" y="1050.2" width=".28011" height=".040944" rx="0" ry="0"/> -</g> -</g> -</g> +<g transform="translate(0 -1036.4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"> +<circle cx="8" cy="1044.4" r="8" fill-opacity=".39216" stroke-opacity=".98824"/> +<path transform="translate(0 1036.4)" d="m8 1a7 7 0 0 0 -7 7 7 7 0 0 0 7 7 7 7 0 0 0 7 -7 7 7 0 0 0 -7 -7zm-1 3h2v3h3v2h-3v3h-2v-3h-3v-2h3v-3z" fill="#e0e0e0"/> </g> </svg> diff --git a/editor/icons/icon_zoom_reset.svg b/editor/icons/icon_zoom_reset.svg index 053092445a..aa5ad03727 100644 --- a/editor/icons/icon_zoom_reset.svg +++ b/editor/icons/icon_zoom_reset.svg @@ -1,10 +1,6 @@ <svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#e0e0e0"> -<rect x="3" y="1037.4" width="2" height="14"/> -<rect x="12" y="1037.4" width="2" height="14"/> -<rect x="7" y="1046.4" width="2" height="2"/> -<rect x="7" y="1040.4" width="2" height="2"/> -<path d="m1 1040.4 2-3h2v3z" fill-rule="evenodd"/> -<path d="m10 1040.4 2-3h2v3z" fill-rule="evenodd"/> +<g transform="translate(0 -1036.4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"> +<circle cx="8" cy="1044.4" r="8" fill-opacity=".39216" stroke-opacity=".98824"/> +<path transform="translate(0 1036.4)" d="m8 1a7 7 0 0 0 -7 7 7 7 0 0 0 7 7 7 7 0 0 0 7 -7 7 7 0 0 0 -7 -7zm-0.029297 3.002a1.0001 1.0001 0 0 1 1.0293 0.99805v7h-2v-5.1309l-1.4453 0.96289-1.1094-1.6641 3-2a1.0001 1.0001 0 0 1 0.52539 -0.16602z" fill="#e0e0e0"/> </g> </svg> diff --git a/editor/import/editor_import_collada.cpp b/editor/import/editor_import_collada.cpp index b1991d755b..4d658438cd 100644 --- a/editor/import/editor_import_collada.cpp +++ b/editor/import/editor_import_collada.cpp @@ -381,6 +381,9 @@ Error ColladaImport::_create_material(const String &p_target) { String texfile = effect.get_texture_path(effect.diffuse.texture, collada); if (texfile != "") { + if (texfile.begins_with("/")) { + texfile = texfile.replace_first("/", "res://"); + } Ref<Texture> texture = ResourceLoader::load(texfile, "Texture"); if (texture.is_valid()) { @@ -402,6 +405,10 @@ Error ColladaImport::_create_material(const String &p_target) { String texfile = effect.get_texture_path(effect.specular.texture, collada); if (texfile != "") { + if (texfile.begins_with("/")) { + texfile = texfile.replace_first("/", "res://"); + } + Ref<Texture> texture = ResourceLoader::load(texfile, "Texture"); if (texture.is_valid()) { material->set_texture(SpatialMaterial::TEXTURE_METALLIC, texture); @@ -425,6 +432,10 @@ Error ColladaImport::_create_material(const String &p_target) { String texfile = effect.get_texture_path(effect.emission.texture, collada); if (texfile != "") { + if (texfile.begins_with("/")) { + texfile = texfile.replace_first("/", "res://"); + } + Ref<Texture> texture = ResourceLoader::load(texfile, "Texture"); if (texture.is_valid()) { @@ -451,6 +462,10 @@ Error ColladaImport::_create_material(const String &p_target) { String texfile = effect.get_texture_path(effect.bump.texture, collada); if (texfile != "") { + if (texfile.begins_with("/")) { + texfile = texfile.replace_first("/", "res://"); + } + Ref<Texture> texture = ResourceLoader::load(texfile, "Texture"); if (texture.is_valid()) { material->set_feature(SpatialMaterial::FEATURE_NORMAL_MAPPING, true); @@ -1091,7 +1106,6 @@ Error ColladaImport::_create_mesh_surfaces(bool p_optimize, Ref<ArrayMesh> &p_me for (int mi = 0; mi < p_morph_meshes.size(); mi++) { - //print_line("want surface "+itos(mi)+" has "+itos(p_morph_meshes[mi]->get_surface_count())); Array a = p_morph_meshes[mi]->surface_get_arrays(surface); //add valid weight and bone arrays if they exist, TODO check if they are unique to shape (generally not) @@ -1172,9 +1186,6 @@ Error ColladaImport::_create_resources(Collada::Node *p_node) { if (cd.control_vertices.has("TILT") && cd.sources.has(cd.control_vertices["TILT"])) tilts = &cd.sources[cd.control_vertices["TILT"]]; - if (tilts) { - print_line("FOUND TILTS!!!"); - } int pc = vertices.array.size() / 3; for (int i = 0; i < pc; i++) { @@ -1222,12 +1233,8 @@ Error ColladaImport::_create_resources(Collada::Node *p_node) { Vector<int> bone_remap; Vector<Ref<ArrayMesh> > morphs; - print_line("mesh: " + String(mi->get_name())); - if (ng->controller) { - print_line("has controller"); - String ngsource = ng->source; if (collada.state.skin_controller_data_map.has(ngsource)) { @@ -1240,9 +1247,6 @@ Error ColladaImport::_create_resources(Collada::Node *p_node) { ERR_FAIL_COND_V(skeletons.empty(), ERR_INVALID_DATA); String skname = skeletons[0]; - if (!node_map.has(skname)) { - print_line("no node for skeleton " + skname); - } ERR_FAIL_COND_V(!node_map.has(skname), ERR_INVALID_DATA); NodeMap nmsk = node_map[skname]; Skeleton *sk = Object::cast_to<Skeleton>(nmsk.node); @@ -1280,22 +1284,16 @@ Error ColladaImport::_create_resources(Collada::Node *p_node) { for (int i = 0; i < bone_remap.size(); i++) { String str = joint_src->sarray[i]; - if (!bone_remap_map.has(str)) { - print_line("bone not found for remap: " + str); - print_line("in skeleton: " + skname); - } ERR_FAIL_COND_V(!bone_remap_map.has(str), ERR_INVALID_DATA); bone_remap[i] = bone_remap_map[str]; } } if (collada.state.morph_controller_data_map.has(ngsource)) { - print_line("is morph " + ngsource); + //it's a morph!! morph = &collada.state.morph_controller_data_map[ngsource]; meshid = morph->mesh; - printf("KKmorph: %p\n", morph); - print_line("morph mshid: " + meshid); Vector<String> targets; diff --git a/editor/import/resource_importer_obj.cpp b/editor/import/resource_importer_obj.cpp index 6a936649c3..4541c77085 100644 --- a/editor/import/resource_importer_obj.cpp +++ b/editor/import/resource_importer_obj.cpp @@ -40,12 +40,8 @@ uint32_t EditorOBJImporter::get_import_flags() const { return IMPORT_SCENE; } -void EditorOBJImporter::get_extensions(List<String> *r_extensions) const { - r_extensions->push_back("obj"); -} - -Error EditorOBJImporter::_parse_material_library(const String &p_path, Map<String, Ref<SpatialMaterial> > &material_map, List<String> *r_missing_deps) { +static Error _parse_material_library(const String &p_path, Map<String, Ref<SpatialMaterial> > &material_map, List<String> *r_missing_deps) { FileAccessRef f = FileAccess::open(p_path, FileAccess::READ); ERR_FAIL_COND_V(!f, ERR_CANT_OPEN); @@ -134,7 +130,7 @@ Error EditorOBJImporter::_parse_material_library(const String &p_path, Map<Strin if (texture.is_valid()) { current->set_texture(SpatialMaterial::TEXTURE_ALBEDO, texture); - } else { + } else if (r_missing_deps) { r_missing_deps->push_back(path); } @@ -149,7 +145,7 @@ Error EditorOBJImporter::_parse_material_library(const String &p_path, Map<Strin if (texture.is_valid()) { current->set_texture(SpatialMaterial::TEXTURE_METALLIC, texture); - } else { + } else if (r_missing_deps) { r_missing_deps->push_back(path); } @@ -164,7 +160,7 @@ Error EditorOBJImporter::_parse_material_library(const String &p_path, Map<Strin if (texture.is_valid()) { current->set_texture(SpatialMaterial::TEXTURE_ROUGHNESS, texture); - } else { + } else if (r_missing_deps) { r_missing_deps->push_back(path); } } else if (l.begins_with("map_bump ")) { @@ -179,7 +175,7 @@ Error EditorOBJImporter::_parse_material_library(const String &p_path, Map<Strin if (texture.is_valid()) { current->set_feature(SpatialMaterial::FEATURE_NORMAL_MAPPING, true); current->set_texture(SpatialMaterial::TEXTURE_NORMAL, texture); - } else { + } else if (r_missing_deps) { r_missing_deps->push_back(path); } } else if (f->eof_reached()) { @@ -190,28 +186,16 @@ Error EditorOBJImporter::_parse_material_library(const String &p_path, Map<Strin return OK; } -Node *EditorOBJImporter::import_scene(const String &p_path, uint32_t p_flags, int p_bake_fps, List<String> *r_missing_deps, Error *r_err) { +static Error _parse_obj(const String &p_path, List<Ref<Mesh> > &r_meshes, bool p_single_mesh, bool p_generate_tangents, List<String> *r_missing_deps) { FileAccessRef f = FileAccess::open(p_path, FileAccess::READ); - if (r_err) { - *r_err = ERR_CANT_OPEN; - } - - ERR_FAIL_COND_V(!f, NULL); - - if (r_err) { - *r_err = OK; - } - - Spatial *scene = memnew(Spatial); + ERR_FAIL_COND_V(!f, ERR_CANT_OPEN); Ref<ArrayMesh> mesh; mesh.instance(); - Map<String, Ref<Material> > name_map; - - bool generate_tangents = p_flags & IMPORT_GENERATE_TANGENT_ARRAYS; + bool generate_tangents = p_generate_tangents; bool flip_faces = false; //bool flip_faces = p_options["force/flip_faces"]; //bool force_smooth = p_options["force/smooth_shading"]; @@ -239,7 +223,7 @@ Node *EditorOBJImporter::import_scene(const String &p_path, uint32_t p_flags, in if (l.begins_with("v ")) { //vertex Vector<String> v = l.split(" ", false); - ERR_FAIL_COND_V(v.size() < 4, NULL); + ERR_FAIL_COND_V(v.size() < 4, ERR_FILE_CORRUPT); Vector3 vtx; vtx.x = v[1].to_float(); vtx.y = v[2].to_float(); @@ -248,7 +232,7 @@ Node *EditorOBJImporter::import_scene(const String &p_path, uint32_t p_flags, in } else if (l.begins_with("vt ")) { //uv Vector<String> v = l.split(" ", false); - ERR_FAIL_COND_V(v.size() < 3, NULL); + ERR_FAIL_COND_V(v.size() < 3, ERR_FILE_CORRUPT); Vector2 uv; uv.x = v[1].to_float(); uv.y = 1.0 - v[2].to_float(); @@ -257,7 +241,7 @@ Node *EditorOBJImporter::import_scene(const String &p_path, uint32_t p_flags, in } else if (l.begins_with("vn ")) { //normal Vector<String> v = l.split(" ", false); - ERR_FAIL_COND_V(v.size() < 4, NULL); + ERR_FAIL_COND_V(v.size() < 4, ERR_FILE_CORRUPT); Vector3 nrm; nrm.x = v[1].to_float(); nrm.y = v[2].to_float(); @@ -267,19 +251,19 @@ Node *EditorOBJImporter::import_scene(const String &p_path, uint32_t p_flags, in //vertex Vector<String> v = l.split(" ", false); - ERR_FAIL_COND_V(v.size() < 4, NULL); + ERR_FAIL_COND_V(v.size() < 4, ERR_FILE_CORRUPT); //not very fast, could be sped up Vector<String> face[3]; face[0] = v[1].split("/"); face[1] = v[2].split("/"); - ERR_FAIL_COND_V(face[0].size() == 0, NULL); - ERR_FAIL_COND_V(face[0].size() != face[1].size(), NULL); + ERR_FAIL_COND_V(face[0].size() == 0, ERR_FILE_CORRUPT); + ERR_FAIL_COND_V(face[0].size() != face[1].size(), ERR_FILE_CORRUPT); for (int i = 2; i < v.size() - 1; i++) { face[2] = v[i + 1].split("/"); - ERR_FAIL_COND_V(face[0].size() != face[2].size(), NULL); + ERR_FAIL_COND_V(face[0].size() != face[2].size(), ERR_FILE_CORRUPT); for (int j = 0; j < 3; j++) { int idx = j; @@ -292,7 +276,7 @@ Node *EditorOBJImporter::import_scene(const String &p_path, uint32_t p_flags, in int norm = face[idx][2].to_int() - 1; if (norm < 0) norm += normals.size() + 1; - ERR_FAIL_INDEX_V(norm, normals.size(), NULL); + ERR_FAIL_INDEX_V(norm, normals.size(), ERR_FILE_CORRUPT); surf_tool->add_normal(normals[norm]); } @@ -300,14 +284,14 @@ Node *EditorOBJImporter::import_scene(const String &p_path, uint32_t p_flags, in int uv = face[idx][1].to_int() - 1; if (uv < 0) uv += uvs.size() + 1; - ERR_FAIL_INDEX_V(uv, uvs.size(), NULL); + ERR_FAIL_INDEX_V(uv, uvs.size(), ERR_FILE_CORRUPT); surf_tool->add_uv(uvs[uv]); } int vtx = face[idx][0].to_int() - 1; if (vtx < 0) vtx += vertices.size() + 1; - ERR_FAIL_INDEX_V(vtx, vertices.size(), NULL); + ERR_FAIL_INDEX_V(vtx, vertices.size(), ERR_FILE_CORRUPT); Vector3 vertex = vertices[vtx]; //if (weld_vertices) @@ -359,16 +343,13 @@ Node *EditorOBJImporter::import_scene(const String &p_path, uint32_t p_flags, in if (l.begins_with("o ") || f->eof_reached()) { - MeshInstance *mi = memnew(MeshInstance); - mi->set_name(name); - mi->set_mesh(mesh); - - scene->add_child(mi); - mi->set_owner(scene); - - mesh.instance(); - current_group = ""; - current_material = ""; + if (!p_single_mesh) { + mesh->set_name(name); + r_meshes.push_back(mesh); + mesh.instance(); + current_group = ""; + current_material = ""; + } } if (f->eof_reached()) { @@ -406,16 +387,40 @@ Node *EditorOBJImporter::import_scene(const String &p_path, uint32_t p_flags, in } } - /* - TODO, check existing materials and merge? - //re-apply materials if exist - for(int i=0;i<mesh->get_surface_count();i++) { + if (p_single_mesh) { + + r_meshes.push_back(mesh); + } + + return OK; +} + +Node *EditorOBJImporter::import_scene(const String &p_path, uint32_t p_flags, int p_bake_fps, List<String> *r_missing_deps, Error *r_err) { + + List<Ref<Mesh> > meshes; + + Error err = _parse_obj(p_path, meshes, false, p_flags & IMPORT_GENERATE_TANGENT_ARRAYS, r_missing_deps); + + if (err != OK) { + if (r_err) { + *r_err = err; + } + return NULL; + } + + Spatial *scene = memnew(Spatial); + + for (List<Ref<Mesh> >::Element *E = meshes.front(); E; E = E->next()) { + + MeshInstance *mi = memnew(MeshInstance); + mi->set_name(E->get()->get_name()); + scene->add_child(mi); + mi->set_owner(scene); + } - String n = mesh->surface_get_name(i); - if (name_map.has(n)) - mesh->surface_set_material(i,name_map[n]); + if (r_err) { + *r_err = OK; } -*/ return scene; } @@ -423,5 +428,68 @@ Ref<Animation> EditorOBJImporter::import_animation(const String &p_path, uint32_ return Ref<Animation>(); } + +void EditorOBJImporter::get_extensions(List<String> *r_extensions) const { + + r_extensions->push_back("obj"); +} + EditorOBJImporter::EditorOBJImporter() { } +//////////////////////////////////////////////////// + +String ResourceImporterOBJ::get_importer_name() const { + return "wavefront_obj"; +} +String ResourceImporterOBJ::get_visible_name() const { + return "OBJ As Mesh"; +} +void ResourceImporterOBJ::get_recognized_extensions(List<String> *p_extensions) const { + + p_extensions->push_back("obj"); +} +String ResourceImporterOBJ::get_save_extension() const { + return "mesh"; +} +String ResourceImporterOBJ::get_resource_type() const { + return "Mesh"; +} + +int ResourceImporterOBJ::get_preset_count() const { + return 0; +} +String ResourceImporterOBJ::get_preset_name(int p_idx) const { + return ""; +} + +void ResourceImporterOBJ::get_import_options(List<ImportOption> *r_options, int p_preset) const { + + r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "generate_tangents"), true)); +} +bool ResourceImporterOBJ::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const { + + return true; +} + +Error ResourceImporterOBJ::import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files) { + + List<Ref<Mesh> > meshes; + + Error err = _parse_obj(p_source_file, meshes, true, p_options["generate_tangents"], NULL); + + ERR_FAIL_COND_V(err != OK, err); + ERR_FAIL_COND_V(meshes.size() != 1, ERR_BUG); + + String save_path = p_save_path + ".mesh"; + + err = ResourceSaver::save(save_path, meshes.front()->get()); + + ERR_FAIL_COND_V(err != OK, err); + + r_gen_files->push_back(save_path); + + return OK; +} + +ResourceImporterOBJ::ResourceImporterOBJ() { +} diff --git a/editor/import/resource_importer_obj.h b/editor/import/resource_importer_obj.h index 247d58e148..7eeceeabbe 100644 --- a/editor/import/resource_importer_obj.h +++ b/editor/import/resource_importer_obj.h @@ -36,8 +36,6 @@ class EditorOBJImporter : public EditorSceneImporter { GDCLASS(EditorOBJImporter, EditorSceneImporter); - Error _parse_material_library(const String &p_path, Map<String, Ref<SpatialMaterial> > &material_map, List<String> *r_missing_deps); - public: virtual uint32_t get_import_flags() const; virtual void get_extensions(List<String> *r_extensions) const; @@ -47,4 +45,24 @@ public: EditorOBJImporter(); }; +class ResourceImporterOBJ : public ResourceImporter { + GDCLASS(ResourceImporterOBJ, ResourceImporter) +public: + virtual String get_importer_name() const; + virtual String get_visible_name() const; + virtual void get_recognized_extensions(List<String> *p_extensions) const; + virtual String get_save_extension() const; + virtual String get_resource_type() const; + + virtual int get_preset_count() const; + virtual String get_preset_name(int p_idx) const; + + virtual void get_import_options(List<ImportOption> *r_options, int p_preset = 0) const; + virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const; + + virtual Error import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = NULL); + + ResourceImporterOBJ(); +}; + #endif // RESOURCEIMPORTEROBJ_H diff --git a/editor/import/resource_importer_scene.cpp b/editor/import/resource_importer_scene.cpp index b448ab8920..6d5ff822ef 100644 --- a/editor/import/resource_importer_scene.cpp +++ b/editor/import/resource_importer_scene.cpp @@ -114,7 +114,7 @@ bool ResourceImporterScene::get_option_visibility(const String &p_option, const } int ResourceImporterScene::get_preset_count() const { - return 6; + return PRESET_MAX; } String ResourceImporterScene::get_preset_name(int p_idx) const { @@ -955,9 +955,9 @@ void ResourceImporterScene::get_import_options(List<ImportOption> *r_options, in } bool materials_out = p_preset == PRESET_SEPARATE_MATERIALS || p_preset == PRESET_SEPARATE_MESHES_AND_MATERIALS || p_preset == PRESET_MULTIPLE_SCENES_AND_MATERIALS || p_preset == PRESET_SEPARATE_MATERIALS_AND_ANIMATIONS || p_preset == PRESET_SEPARATE_MESHES_MATERIALS_AND_ANIMATIONS; - bool meshes_out = p_preset == PRESET_SEPARATE_MESHES || p_preset == PRESET_SEPARATE_MESHES_AND_MATERIALS || PRESET_SEPARATE_MESHES_AND_ANIMATIONS || PRESET_SEPARATE_MESHES_MATERIALS_AND_ANIMATIONS; + bool meshes_out = p_preset == PRESET_SEPARATE_MESHES || p_preset == PRESET_SEPARATE_MESHES_AND_MATERIALS || p_preset == PRESET_SEPARATE_MESHES_AND_ANIMATIONS || p_preset == PRESET_SEPARATE_MESHES_MATERIALS_AND_ANIMATIONS; bool scenes_out = p_preset == PRESET_MULTIPLE_SCENES || p_preset == PRESET_MULTIPLE_SCENES_AND_MATERIALS; - bool animations_out = p_preset == PRESET_SEPARATE_ANIMATIONS || PRESET_SEPARATE_MESHES_AND_ANIMATIONS || p_preset == PRESET_SEPARATE_MATERIALS_AND_ANIMATIONS || p_preset == PRESET_SEPARATE_MESHES_MATERIALS_AND_ANIMATIONS; + bool animations_out = p_preset == PRESET_SEPARATE_ANIMATIONS || p_preset == PRESET_SEPARATE_MESHES_AND_ANIMATIONS || p_preset == PRESET_SEPARATE_MATERIALS_AND_ANIMATIONS || p_preset == PRESET_SEPARATE_MESHES_MATERIALS_AND_ANIMATIONS; r_options->push_back(ImportOption(PropertyInfo(Variant::STRING, "nodes/custom_script", PROPERTY_HINT_FILE, script_ext_hint), "")); r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "nodes/storage", PROPERTY_HINT_ENUM, "Single Scene,Instanced Sub-Scenes"), scenes_out ? 1 : 0)); @@ -966,7 +966,7 @@ void ResourceImporterScene::get_import_options(List<ImportOption> *r_options, in r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "materials/keep_on_reimport"), materials_out ? true : false)); r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "meshes/compress"), true)); r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "meshes/ensure_tangents"), true)); - r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "meshes/storage", PROPERTY_HINT_ENUM, "Built-In,Files"), meshes_out ? true : false)); + r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "meshes/storage", PROPERTY_HINT_ENUM, "Built-In,Files"), meshes_out ? 1 : 0)); r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "external_files/store_in_subdir"), false)); r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "animation/import", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), true)); r_options->push_back(ImportOption(PropertyInfo(Variant::REAL, "animation/fps", PROPERTY_HINT_RANGE, "1,120,1"), 15)); diff --git a/editor/import/resource_importer_scene.h b/editor/import/resource_importer_scene.h index c3a66aa8b8..9c7e791719 100644 --- a/editor/import/resource_importer_scene.h +++ b/editor/import/resource_importer_scene.h @@ -96,6 +96,7 @@ class ResourceImporterScene : public ResourceImporter { PRESET_MULTIPLE_SCENES, PRESET_MULTIPLE_SCENES_AND_MATERIALS, + PRESET_MAX }; void _replace_owner(Node *p_node, Node *p_scene, Node *p_new_owner); @@ -118,6 +119,7 @@ public: virtual void get_import_options(List<ImportOption> *r_options, int p_preset = 0) const; virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const; + virtual int get_import_order() const { return 100; } //after everything void _make_external_resources(Node *p_node, const String &p_base_path, bool p_make_animations, bool p_make_materials, bool p_keep_materials, bool p_make_meshes, Map<Ref<Animation>, Ref<Animation> > &p_animations, Map<Ref<Material>, Ref<Material> > &p_materials, Map<Ref<ArrayMesh>, Ref<ArrayMesh> > &p_meshes); diff --git a/editor/import/resource_importer_wav.cpp b/editor/import/resource_importer_wav.cpp index 025dbbaacf..bd15ed535b 100644 --- a/editor/import/resource_importer_wav.cpp +++ b/editor/import/resource_importer_wav.cpp @@ -141,7 +141,7 @@ Error ResourceImporterWAV::import(const String &p_source_file, const String &p_s /* chunk size */ uint32_t chunksize = file->get_32(); - uint32_t file_pos = file->get_pos(); //save file pos, so we can skip to next chunk safely + uint32_t file_pos = file->get_position(); //save file pos, so we can skip to next chunk safely if (file->eof_reached()) { diff --git a/editor/import_dock.cpp b/editor/import_dock.cpp index 112e3abcb5..77fd6d883a 100644 --- a/editor/import_dock.cpp +++ b/editor/import_dock.cpp @@ -137,7 +137,7 @@ void ImportDock::set_edit_path(const String &p_path) { preset->get_popup()->add_separator(); preset->get_popup()->add_item(vformat(TTR("Set as Default for '%s'"), params->importer->get_visible_name()), ITEM_SET_AS_DEFAULT); - if (ProjectSettings::get_singleton()->has("importer_defaults/" + params->importer->get_importer_name())) { + if (ProjectSettings::get_singleton()->has_setting("importer_defaults/" + params->importer->get_importer_name())) { preset->get_popup()->add_item(TTR("Load Default"), ITEM_LOAD_DEFAULT); preset->get_popup()->add_separator(); preset->get_popup()->add_item(vformat(TTR("Clear Default for '%s'"), params->importer->get_visible_name()), ITEM_CLEAR_DEFAULT); @@ -281,7 +281,7 @@ void ImportDock::_preset_selected(int p_idx) { } break; case ITEM_LOAD_DEFAULT: { - ERR_FAIL_COND(!ProjectSettings::get_singleton()->has("importer_defaults/" + params->importer->get_importer_name())); + ERR_FAIL_COND(!ProjectSettings::get_singleton()->has_setting("importer_defaults/" + params->importer->get_importer_name())); Dictionary d = ProjectSettings::get_singleton()->get("importer_defaults/" + params->importer->get_importer_name()); List<Variant> v; diff --git a/editor/node_dock.cpp b/editor/node_dock.cpp index 7edaf0e5af..20392a67a7 100644 --- a/editor/node_dock.cpp +++ b/editor/node_dock.cpp @@ -56,10 +56,10 @@ void NodeDock::_bind_methods() { void NodeDock::_notification(int p_what) { if (p_what == NOTIFICATION_ENTER_TREE) { - connections_button->set_icon(get_icon("Connect", "EditorIcons")); + connections_button->set_icon(get_icon("Signals", "EditorIcons")); groups_button->set_icon(get_icon("Groups", "EditorIcons")); } else if (p_what == EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED) { - connections_button->set_icon(get_icon("Connect", "EditorIcons")); + connections_button->set_icon(get_icon("Signals", "EditorIcons")); groups_button->set_icon(get_icon("Groups", "EditorIcons")); } } diff --git a/editor/plugins/abstract_polygon_2d_editor.cpp b/editor/plugins/abstract_polygon_2d_editor.cpp new file mode 100644 index 0000000000..ffa4e36b5a --- /dev/null +++ b/editor/plugins/abstract_polygon_2d_editor.cpp @@ -0,0 +1,608 @@ +/*************************************************************************/ +/* abstract_polygon_2d_editor.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 "abstract_polygon_2d_editor.h" + +#include "canvas_item_editor_plugin.h" + +bool AbstractPolygon2DEditor::_is_empty() const { + + if (!_get_node()) + return true; + + const int n = _get_polygon_count(); + + for (int i = 0; i < n; i++) { + + Vector<Vector2> vertices = _get_polygon(i); + + if (vertices.size() != 0) + return false; + } + + return true; +} + +int AbstractPolygon2DEditor::_get_polygon_count() const { + + return 1; +} + +Variant AbstractPolygon2DEditor::_get_polygon(int p_idx) const { + + return _get_node()->get("polygon"); +} + +void AbstractPolygon2DEditor::_set_polygon(int p_idx, const Variant &p_polygon) const { + + _get_node()->set("polygon", p_polygon); +} + +void AbstractPolygon2DEditor::_action_set_polygon(int p_idx, const Variant &p_previous, const Variant &p_polygon) { + + Node2D *node = _get_node(); + undo_redo->add_do_method(node, "set_polygon", p_polygon); + undo_redo->add_undo_method(node, "set_polygon", p_previous); +} + +Vector2 AbstractPolygon2DEditor::_get_offset(int p_idx) const { + + return Vector2(0, 0); +} + +void AbstractPolygon2DEditor::_commit_action() { + + undo_redo->add_do_method(canvas_item_editor->get_viewport_control(), "update"); + undo_redo->add_undo_method(canvas_item_editor->get_viewport_control(), "update"); + undo_redo->commit_action(); +} + +void AbstractPolygon2DEditor::_action_add_polygon(const Variant &p_polygon) { + + _action_set_polygon(0, p_polygon); +} + +void AbstractPolygon2DEditor::_action_remove_polygon(int p_idx) { + + _action_set_polygon(p_idx, _get_polygon(p_idx), PoolVector<Vector2>()); +} + +void AbstractPolygon2DEditor::_action_set_polygon(int p_idx, const Variant &p_polygon) { + + _action_set_polygon(p_idx, _get_polygon(p_idx), p_polygon); +} + +bool AbstractPolygon2DEditor::_has_resource() const { + + return true; +} + +void AbstractPolygon2DEditor::_create_resource() { +} + +void AbstractPolygon2DEditor::_menu_option(int p_option) { + + switch (p_option) { + + case MODE_CREATE: { + + mode = MODE_CREATE; + button_create->set_pressed(true); + button_edit->set_pressed(false); + } break; + case MODE_EDIT: { + + mode = MODE_EDIT; + button_create->set_pressed(false); + button_edit->set_pressed(true); + } break; + } +} + +void AbstractPolygon2DEditor::_notification(int p_what) { + + switch (p_what) { + + case NOTIFICATION_READY: { + + button_create->set_icon(get_icon("Edit", "EditorIcons")); + button_edit->set_icon(get_icon("MovePoint", "EditorIcons")); + button_edit->set_pressed(true); + + get_tree()->connect("node_removed", this, "_node_removed"); + + create_resource->connect("confirmed", this, "_create_resource"); + + } break; + case NOTIFICATION_PHYSICS_PROCESS: { + + } break; + } +} + +void AbstractPolygon2DEditor::_node_removed(Node *p_node) { + + if (p_node == _get_node()) { + edit(NULL); + hide(); + + canvas_item_editor->get_viewport_control()->update(); + } +} + +void AbstractPolygon2DEditor::_wip_close() { + + if (wip.size() >= 3) { + + undo_redo->create_action(TTR("Create Poly")); + _action_add_polygon(wip); + _commit_action(); + + mode = MODE_EDIT; + button_edit->set_pressed(true); + button_create->set_pressed(false); + } + + wip.clear(); + wip_active = false; + edited_point = -1; +} + +bool AbstractPolygon2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) { + + if (!_get_node()) + return false; + + Ref<InputEventMouseButton> mb = p_event; + + if (!_has_resource()) { + + if (mb.is_valid() && mb->get_button_index() == 1 && mb->is_pressed()) { + create_resource->set_text(String("No polygon resource on this node.\nCreate and assign one?")); + create_resource->popup_centered_minsize(); + } + return (mb.is_valid() && mb->get_button_index() == 1); + } + + if (mb.is_valid()) { + + Transform2D xform = canvas_item_editor->get_canvas_transform() * _get_node()->get_global_transform(); + + Vector2 gpoint = mb->get_position(); + Vector2 cpoint = _get_node()->get_global_transform().affine_inverse().xform(canvas_item_editor->snap_point(canvas_item_editor->get_canvas_transform().affine_inverse().xform(mb->get_position()))); + + //first check if a point is to be added (segment split) + real_t grab_threshold = EDITOR_DEF("editors/poly_editor/point_grab_radius", 8); + + if (mode == MODE_CREATE) { + + if (mb->get_button_index() == BUTTON_LEFT && mb->is_pressed()) { + + if (!wip_active) { + + wip.clear(); + wip.push_back(cpoint); + wip_active = true; + edited_point_pos = cpoint; + edited_polygon = -1; + edited_point = 1; + canvas_item_editor->get_viewport_control()->update(); + return true; + } else { + + if (wip.size() > 1 && xform.xform(wip[0]).distance_to(gpoint) < grab_threshold) { + //wip closed + _wip_close(); + + return true; + } else { + + wip.push_back(cpoint); + edited_point = wip.size(); + canvas_item_editor->get_viewport_control()->update(); + return true; + + //add wip point + } + } + } else if (mb->get_button_index() == BUTTON_RIGHT && mb->is_pressed() && wip_active) { + _wip_close(); + } + } else if (mode == MODE_EDIT) { + + if (mb->get_button_index() == BUTTON_LEFT) { + + if (mb->is_pressed()) { + + if (mb->get_control()) { + + const int n_polygons = _get_polygon_count(); + + if (n_polygons >= 1) { + + Vector<Vector2> vertices = _get_polygon(n_polygons - 1); + + if (vertices.size() < 3) { + + vertices.push_back(cpoint); + undo_redo->create_action(TTR("Edit Poly")); + _action_set_polygon(n_polygons - 1, vertices); + _commit_action(); + return true; + } + } + + //search edges + int closest_poly = -1; + int closest_idx = -1; + Vector2 closest_pos; + real_t closest_dist = 1e10; + + for (int j = 0; j < n_polygons; j++) { + + PoolVector<Vector2> points = _get_polygon(j); + const Vector2 offset = _get_offset(j); + const int n_points = points.size(); + + for (int i = 0; i < n_points; i++) { + + Vector2 p[2] = { xform.xform(points[i] + offset), + xform.xform(points[(i + 1) % n_points] + offset) }; + + Vector2 cp = Geometry::get_closest_point_to_segment_2d(gpoint, p); + if (cp.distance_squared_to(points[0]) < CMP_EPSILON2 || cp.distance_squared_to(points[1]) < CMP_EPSILON2) + continue; //not valid to reuse point + + real_t d = cp.distance_to(gpoint); + if (d < closest_dist && d < grab_threshold) { + closest_poly = j; + closest_dist = d; + closest_pos = cp; + closest_idx = i; + } + } + } + + if (closest_idx >= 0) { + + Vector<Vector2> vertices = _get_polygon(closest_poly); + pre_move_edit = vertices; + vertices.insert(closest_idx + 1, xform.affine_inverse().xform(closest_pos)); + edited_point = closest_idx + 1; + edited_polygon = closest_poly; + edited_point_pos = xform.affine_inverse().xform(closest_pos); + + undo_redo->create_action(TTR("Insert Point")); + _action_set_polygon(closest_poly, vertices); + _commit_action(); + + return true; + } + } else { + + //look for points to move + int closest_poly = -1; + int closest_idx = -1; + Vector2 closest_pos; + real_t closest_dist = 1e10; + + const int n_polygons = _get_polygon_count(); + + for (int j = 0; j < n_polygons; j++) { + + PoolVector<Vector2> points = _get_polygon(j); + const Vector2 offset = _get_offset(j); + const int n_points = points.size(); + + for (int i = 0; i < n_points; i++) { + + Vector2 cp = xform.xform(points[i] + offset); + + real_t d = cp.distance_to(gpoint); + if (d < closest_dist && d < grab_threshold) { + closest_poly = j; + closest_dist = d; + closest_pos = cp; + closest_idx = i; + } + } + } + + if (closest_idx >= 0) { + + pre_move_edit = _get_polygon(closest_poly); + edited_polygon = closest_poly; + edited_point = closest_idx; + edited_point_pos = xform.affine_inverse().xform(closest_pos); + canvas_item_editor->get_viewport_control()->update(); + return true; + } + } + } else { + + if (edited_point != -1) { + + //apply + + Vector<Vector2> vertices = _get_polygon(edited_polygon); + ERR_FAIL_INDEX_V(edited_point, vertices.size(), false); + vertices[edited_point] = edited_point_pos - _get_offset(edited_polygon); + + undo_redo->create_action(TTR("Edit Poly")); + _action_set_polygon(edited_polygon, pre_move_edit, vertices); + _commit_action(); + + edited_point = -1; + return true; + } + } + } else if (mb->get_button_index() == BUTTON_RIGHT && mb->is_pressed() && edited_point == -1) { + + int closest_poly = -1; + int closest_idx = -1; + Vector2 closest_pos; + real_t closest_dist = 1e10; + const int n_polygons = _get_polygon_count(); + + for (int j = 0; j < n_polygons; j++) { + + PoolVector<Vector2> points = _get_polygon(j); + const int n_points = points.size(); + const Vector2 offset = _get_offset(j); + + for (int i = 0; i < n_points; i++) { + + Vector2 cp = xform.xform(points[i] + offset); + + real_t d = cp.distance_to(gpoint); + if (d < closest_dist && d < grab_threshold) { + closest_poly = j; + closest_dist = d; + closest_pos = cp; + closest_idx = i; + } + } + } + + if (closest_idx >= 0) { + + PoolVector<Vector2> vertices = _get_polygon(closest_poly); + + if (vertices.size() > 3) { + + vertices.remove(closest_idx); + + undo_redo->create_action(TTR("Edit Poly (Remove Point)")); + _action_set_polygon(closest_poly, vertices); + _commit_action(); + } else { + + undo_redo->create_action(TTR("Remove Poly And Point")); + _action_remove_polygon(closest_poly); + _commit_action(); + } + + if (_is_empty()) + _menu_option(MODE_CREATE); + return true; + } + } + } + } + + Ref<InputEventMouseMotion> mm = p_event; + + if (mm.is_valid()) { + + if (edited_point != -1 && (wip_active || (mm->get_button_mask() & BUTTON_MASK_LEFT))) { + + Vector2 gpoint = mm->get_position(); + Vector2 cpoint = _get_node()->get_global_transform().affine_inverse().xform(canvas_item_editor->snap_point(canvas_item_editor->get_canvas_transform().affine_inverse().xform(mm->get_position()))); + edited_point_pos = cpoint; + + if (!wip_active) { + + Vector<Vector2> vertices = _get_polygon(edited_polygon); + ERR_FAIL_INDEX_V(edited_point, vertices.size(), false); + vertices[edited_point] = cpoint - _get_offset(edited_polygon); + _set_polygon(edited_polygon, vertices); + } + + canvas_item_editor->get_viewport_control()->update(); + } + } + + return false; +} + +void AbstractPolygon2DEditor::forward_draw_over_canvas(Control *p_canvas) { + if (!_get_node()) + return; + + Control *vpc = canvas_item_editor->get_viewport_control(); + + Transform2D xform = canvas_item_editor->get_canvas_transform() * _get_node()->get_global_transform(); + Ref<Texture> handle = get_icon("EditorHandle", "EditorIcons"); + const int n_polygons = _get_polygon_count(); + + for (int j = -1; j < n_polygons; j++) { + + if (wip_active && wip_destructive && j != -1) + continue; + + PoolVector<Vector2> points; + Vector2 offset; + + if (wip_active && j == edited_polygon) { + + points = Variant(wip); + offset = Vector2(0, 0); + } else { + + if (j == -1) + continue; + points = _get_polygon(j); + offset = _get_offset(j); + } + + if (!wip_active && j == edited_polygon && edited_point >= 0 && EDITOR_DEF("editors/poly_editor/show_previous_outline", true)) { + + const Color col = Color(0.5, 0.5, 0.5); // FIXME polygon->get_outline_color(); + const int n = pre_move_edit.size(); + for (int i = 0; i < n; i++) { + + Vector2 p, p2; + p = pre_move_edit[i] + offset; + p2 = pre_move_edit[(i + 1) % n] + offset; + + Vector2 point = xform.xform(p); + Vector2 next_point = xform.xform(p2); + + vpc->draw_line(point, next_point, col, 2); + } + } + + const int n_points = points.size(); + const Color col = Color(1, 0.3, 0.1, 0.8); + + for (int i = 0; i < n_points; i++) { + + Vector2 p, p2; + p = (j == edited_polygon && i == edited_point) ? edited_point_pos : (points[i] + offset); + if (j == edited_polygon && ((wip_active && i == n_points - 1) || (((i + 1) % n_points) == edited_point))) + p2 = edited_point_pos; + else + p2 = points[(i + 1) % n_points] + offset; + + Vector2 point = xform.xform(p); + Vector2 next_point = xform.xform(p2); + + vpc->draw_line(point, next_point, col, 2); + vpc->draw_texture(handle, point - handle->get_size() * 0.5); + } + } +} + +void AbstractPolygon2DEditor::edit(Node *p_polygon) { + + if (!canvas_item_editor) { + canvas_item_editor = CanvasItemEditor::get_singleton(); + } + + if (p_polygon) { + + _set_node(p_polygon); + + //Enable the pencil tool if the polygon is empty + if (_is_empty()) + _menu_option(MODE_CREATE); + + wip.clear(); + wip_active = false; + edited_point = -1; + + canvas_item_editor->get_viewport_control()->update(); + + } else { + + _set_node(NULL); + } +} + +void AbstractPolygon2DEditor::_bind_methods() { + + ClassDB::bind_method(D_METHOD("_node_removed"), &AbstractPolygon2DEditor::_node_removed); + ClassDB::bind_method(D_METHOD("_menu_option"), &AbstractPolygon2DEditor::_menu_option); + ClassDB::bind_method(D_METHOD("_create_resource"), &AbstractPolygon2DEditor::_create_resource); +} + +AbstractPolygon2DEditor::AbstractPolygon2DEditor(EditorNode *p_editor, bool p_wip_destructive) { + + canvas_item_editor = NULL; + editor = p_editor; + undo_redo = editor->get_undo_redo(); + + wip_active = false; + edited_polygon = -1; + wip_destructive = p_wip_destructive; + + add_child(memnew(VSeparator)); + button_create = memnew(ToolButton); + add_child(button_create); + button_create->connect("pressed", this, "_menu_option", varray(MODE_CREATE)); + button_create->set_toggle_mode(true); + button_create->set_tooltip(TTR("Create a new polygon from scratch.")); + + button_edit = memnew(ToolButton); + add_child(button_edit); + button_edit->connect("pressed", this, "_menu_option", varray(MODE_EDIT)); + button_edit->set_toggle_mode(true); + button_edit->set_tooltip(TTR("Edit existing polygon:\nLMB: Move Point.\nCtrl+LMB: Split Segment.\nRMB: Erase Point.")); + + create_resource = memnew(ConfirmationDialog); + add_child(create_resource); + create_resource->get_ok()->set_text(TTR("Create")); + + mode = MODE_EDIT; +} + +void AbstractPolygon2DEditorPlugin::edit(Object *p_object) { + + polygon_editor->edit(Object::cast_to<Node>(p_object)); +} + +bool AbstractPolygon2DEditorPlugin::handles(Object *p_object) const { + + return p_object->is_class(klass); +} + +void AbstractPolygon2DEditorPlugin::make_visible(bool p_visible) { + + if (p_visible) { + + polygon_editor->show(); + } else { + + polygon_editor->hide(); + polygon_editor->edit(NULL); + } +} + +AbstractPolygon2DEditorPlugin::AbstractPolygon2DEditorPlugin(EditorNode *p_node, AbstractPolygon2DEditor *p_polygon_editor, String p_class) { + + editor = p_node; + polygon_editor = p_polygon_editor; + klass = p_class; + CanvasItemEditor::get_singleton()->add_control_to_menu_panel(polygon_editor); + + polygon_editor->hide(); +} + +AbstractPolygon2DEditorPlugin::~AbstractPolygon2DEditorPlugin() { +} diff --git a/editor/plugins/abstract_polygon_2d_editor.h b/editor/plugins/abstract_polygon_2d_editor.h new file mode 100644 index 0000000000..3e3bff6d0d --- /dev/null +++ b/editor/plugins/abstract_polygon_2d_editor.h @@ -0,0 +1,133 @@ +/*************************************************************************/ +/* abstract_polygon_2d_editor.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 ABSTRACT_POLYGON_2D_EDITOR_H +#define ABSTRACT_POLYGON_2D_EDITOR_H + +#include "editor/editor_node.h" +#include "editor/editor_plugin.h" +#include "scene/2d/polygon_2d.h" +#include "scene/gui/tool_button.h" + +/** + @author Juan Linietsky <reduzio@gmail.com> +*/ +class CanvasItemEditor; + +class AbstractPolygon2DEditor : public HBoxContainer { + + GDCLASS(AbstractPolygon2DEditor, HBoxContainer); + + ToolButton *button_create; + ToolButton *button_edit; + + int edited_polygon; + int edited_point; + Vector2 edited_point_pos; + Vector<Vector2> pre_move_edit; + Vector<Vector2> wip; + bool wip_active; + bool wip_destructive; + + CanvasItemEditor *canvas_item_editor; + EditorNode *editor; + Panel *panel; + ConfirmationDialog *create_resource; + +protected: + enum { + + MODE_CREATE, + MODE_EDIT, + MODE_CONT, + + }; + + int mode; + + UndoRedo *undo_redo; + + virtual void _menu_option(int p_option); + void _wip_close(); + + void _notification(int p_what); + void _node_removed(Node *p_node); + static void _bind_methods(); + + bool _is_empty() const; + void _commit_action(); + +protected: + virtual Node2D *_get_node() const = 0; + virtual void _set_node(Node *p_polygon) = 0; + + virtual int _get_polygon_count() const; + virtual Vector2 _get_offset(int p_idx) const; + virtual Variant _get_polygon(int p_idx) const; + virtual void _set_polygon(int p_idx, const Variant &p_polygon) const; + + virtual void _action_add_polygon(const Variant &p_polygon); + virtual void _action_remove_polygon(int p_idx); + virtual void _action_set_polygon(int p_idx, const Variant &p_polygon); + virtual void _action_set_polygon(int p_idx, const Variant &p_previous, const Variant &p_polygon); + + virtual bool _has_resource() const; + virtual void _create_resource(); + +public: + bool forward_gui_input(const Ref<InputEvent> &p_event); + void forward_draw_over_canvas(Control *p_canvas); + + void edit(Node *p_polygon); + AbstractPolygon2DEditor(EditorNode *p_editor, bool p_wip_destructive = true); +}; + +class AbstractPolygon2DEditorPlugin : public EditorPlugin { + + GDCLASS(AbstractPolygon2DEditorPlugin, EditorPlugin); + + AbstractPolygon2DEditor *polygon_editor; + EditorNode *editor; + String klass; + +public: + virtual bool forward_canvas_gui_input(const Ref<InputEvent> &p_event) { return polygon_editor->forward_gui_input(p_event); } + virtual void forward_draw_over_canvas(Control *p_canvas) { polygon_editor->forward_draw_over_canvas(p_canvas); } + + bool has_main_screen() const { return false; } + virtual String get_name() const { return klass; } + virtual void edit(Object *p_object); + virtual bool handles(Object *p_object) const; + virtual void make_visible(bool p_visible); + + AbstractPolygon2DEditorPlugin(EditorNode *p_node, AbstractPolygon2DEditor *p_polygon_editor, String p_class); + ~AbstractPolygon2DEditorPlugin(); +}; + +#endif // ABSTRACT_POLYGON_2D_EDITOR_H diff --git a/editor/plugins/animation_player_editor_plugin.cpp b/editor/plugins/animation_player_editor_plugin.cpp index c8db1763ab..2b9c625aa4 100644 --- a/editor/plugins/animation_player_editor_plugin.cpp +++ b/editor/plugins/animation_player_editor_plugin.cpp @@ -76,14 +76,14 @@ void AnimationPlayerEditor::_notification(int p_what) { } } } - frame->set_value(player->get_current_animation_pos()); - key_editor->set_anim_pos(player->get_current_animation_pos()); + frame->set_value(player->get_current_animation_position()); + key_editor->set_anim_pos(player->get_current_animation_position()); EditorNode::get_singleton()->get_property_editor()->refresh(); } else if (last_active) { //need the last frame after it stopped - frame->set_value(player->get_current_animation_pos()); + frame->set_value(player->get_current_animation_position()); } last_active = player->is_playing(); @@ -197,7 +197,7 @@ void AnimationPlayerEditor::_play_from_pressed() { if (current != "") { - float time = player->get_current_animation_pos(); + float time = player->get_current_animation_position(); if (current == player->get_current_animation() && player->is_playing()) { @@ -245,7 +245,7 @@ void AnimationPlayerEditor::_play_bw_from_pressed() { if (current != "") { - float time = player->get_current_animation_pos(); + float time = player->get_current_animation_position(); if (current == player->get_current_animation()) player->stop(); //so it wont blend with itself @@ -557,7 +557,7 @@ void AnimationPlayerEditor::_animation_blend() { String current = animation->get_item_text(animation->get_selected()); - blend_editor.dialog->popup_centered(Size2(400, 400)); + blend_editor.dialog->popup_centered(Size2(400, 400) * EDSCALE); blend_editor.tree->set_hide_root(true); blend_editor.tree->set_column_min_width(0, 10); @@ -944,7 +944,7 @@ void AnimationPlayerEditor::_seek_value_changed(float p_value, bool p_set) { } if (player->is_valid() && !p_set) { - float cpos = player->get_current_animation_pos(); + float cpos = player->get_current_animation_position(); player->seek_delta(pos, pos - cpos); } else { @@ -1426,7 +1426,7 @@ AnimationPlayerEditorPlugin::AnimationPlayerEditorPlugin(EditorNode *p_node) { editor->add_bottom_panel_item(TTR("Animation"), anim_editor); /* editor->get_viewport()->add_child(anim_editor); - anim_editor->set_area_as_parent_rect(); + anim_editor->set_anchors_and_margins_preset(Control::PRESET_WIDE); anim_editor->set_anchor( MARGIN_TOP, Control::ANCHOR_END); anim_editor->set_margin( MARGIN_TOP, 75 ); anim_editor->set_anchor( MARGIN_RIGHT, Control::ANCHOR_END); diff --git a/editor/plugins/animation_tree_editor_plugin.cpp b/editor/plugins/animation_tree_editor_plugin.cpp index 414b091475..22d23e1c72 100644 --- a/editor/plugins/animation_tree_editor_plugin.cpp +++ b/editor/plugins/animation_tree_editor_plugin.cpp @@ -63,7 +63,7 @@ Size2 AnimationTreeEditor::_get_maximum_size() { for (List<StringName>::Element *E = order.front(); E; E = E->next()) { - Point2 pos = anim_tree->node_get_pos(E->get()); + Point2 pos = anim_tree->node_get_position(E->get()); if (click_type == CLICK_NODE && click_node == E->get()) { @@ -257,7 +257,7 @@ void AnimationTreeEditor::_popup_edit_dialog() { filter_button->hide(); edit_check->hide(); - Point2 pos = anim_tree->node_get_pos(edited_node) - Point2(h_scroll->get_value(), v_scroll->get_value()); + Point2 pos = anim_tree->node_get_position(edited_node) - Point2(h_scroll->get_value(), v_scroll->get_value()); Ref<StyleBox> style = get_stylebox("panel", "PopupMenu"); Size2 size = get_node_size(edited_node); Point2 popup_pos(pos.x + style->get_margin(MARGIN_LEFT), pos.y + size.y - style->get_margin(MARGIN_BOTTOM)); @@ -479,7 +479,7 @@ void AnimationTreeEditor::_draw_node(const StringName &p_node) { Ref<Texture> slot_icon = get_icon("VisualShaderPort", "EditorIcons"); Size2 size = get_node_size(p_node); - Point2 pos = anim_tree->node_get_pos(p_node); + Point2 pos = anim_tree->node_get_position(p_node); if (click_type == CLICK_NODE && click_node == p_node) { pos += click_motion - click_pos; @@ -618,7 +618,7 @@ AnimationTreeEditor::ClickType AnimationTreeEditor::_locate_click(const Point2 & AnimationTreePlayer::NodeType type = anim_tree->node_get_type(node); - Point2 pos = anim_tree->node_get_pos(node); + Point2 pos = anim_tree->node_get_position(node); Size2 size = get_node_size(node); pos -= Point2(h_scroll->get_value(), v_scroll->get_value()); @@ -674,7 +674,7 @@ Point2 AnimationTreeEditor::_get_slot_pos(const StringName &p_node_id, bool p_in Ref<Texture> slot_icon = get_icon("VisualShaderPort", "EditorIcons"); Size2 size = get_node_size(p_node_id); - Point2 pos = anim_tree->node_get_pos(p_node_id); + Point2 pos = anim_tree->node_get_position(p_node_id); if (click_type == CLICK_NODE && click_node == p_node_id) { @@ -806,12 +806,12 @@ void AnimationTreeEditor::_gui_input(Ref<InputEvent> p_event) { } break; case CLICK_NODE: { - Point2 new_pos = anim_tree->node_get_pos(click_node) + (click_motion - click_pos); + Point2 new_pos = anim_tree->node_get_position(click_node) + (click_motion - click_pos); if (new_pos.x < 5) new_pos.x = 5; if (new_pos.y < 5) new_pos.y = 5; - anim_tree->node_set_pos(click_node, new_pos); + anim_tree->node_set_position(click_node, new_pos); } break; default: {} @@ -1081,7 +1081,7 @@ StringName AnimationTreeEditor::_add_node(int p_item) { } anim_tree->add_node((AnimationTreePlayer::NodeType)p_item, name); - anim_tree->node_set_pos(name, Point2(last_x, last_y)); + anim_tree->node_set_position(name, Point2(last_x, last_y)); order.push_back(name); last_x += 10; last_y += 10; @@ -1419,13 +1419,13 @@ void AnimationTreeEditorPlugin::make_visible(bool p_visible) { //editor->animation_panel_make_visible(true); button->show(); editor->make_bottom_panel_item_visible(anim_tree_editor); - anim_tree_editor->set_fixed_process(true); + anim_tree_editor->set_physics_process(true); } else { if (anim_tree_editor->is_visible_in_tree()) editor->hide_bottom_panel(); button->hide(); - anim_tree_editor->set_fixed_process(false); + anim_tree_editor->set_physics_process(false); } } diff --git a/editor/plugins/asset_library_editor_plugin.cpp b/editor/plugins/asset_library_editor_plugin.cpp index 626b4f5a7f..cd53264437 100644 --- a/editor/plugins/asset_library_editor_plugin.cpp +++ b/editor/plugins/asset_library_editor_plugin.cpp @@ -1434,7 +1434,7 @@ EditorAssetLibrary::EditorAssetLibrary(bool p_templates_only) { error_hb = memnew(HBoxContainer); library_main->add_child(error_hb); error_label = memnew(Label); - error_label->add_color_override("color", Color(1, 0.4, 0.3)); + error_label->add_color_override("color", get_color("error_color", "Editor")); error_hb->add_child(error_label); description = NULL; @@ -1478,7 +1478,7 @@ AssetLibraryEditorPlugin::AssetLibraryEditorPlugin(EditorNode *p_node) { addon_library = memnew(EditorAssetLibrary); addon_library->set_v_size_flags(Control::SIZE_EXPAND_FILL); editor->get_viewport()->add_child(addon_library); - addon_library->set_area_as_parent_rect(); + addon_library->set_anchors_and_margins_preset(Control::PRESET_WIDE); addon_library->hide(); } diff --git a/editor/plugins/canvas_item_editor_plugin.cpp b/editor/plugins/canvas_item_editor_plugin.cpp index 2e54cf1852..70a6954fb5 100644 --- a/editor/plugins/canvas_item_editor_plugin.cpp +++ b/editor/plugins/canvas_item_editor_plugin.cpp @@ -368,7 +368,7 @@ void CanvasItemEditor::_unhandled_key_input(const Ref<InputEvent> &p_ev) { } else if (set_pivot_shortcut.is_valid() && set_pivot_shortcut->is_shortcut(p_ev) && drag == DRAG_NONE && can_move_pivot) { if (!Input::get_singleton()->is_mouse_button_pressed(0)) { List<Node *> &selection = editor_selection->get_selected_node_list(); - Vector2 mouse_pos = viewport->get_local_mouse_pos(); + Vector2 mouse_pos = viewport->get_local_mouse_position(); if (selection.size() && viewport->get_rect().has_point(mouse_pos)) { //just in case, make it work if over viewport mouse_pos = transform.affine_inverse().xform(mouse_pos); @@ -990,9 +990,10 @@ void CanvasItemEditor::_prepare_drag(const Point2 &p_click_pos) { se->undo_pivot = Object::cast_to<Control>(canvas_item)->get_pivot_offset(); se->pre_drag_xform = canvas_item->get_global_transform_with_canvas(); + se->pre_drag_rect = canvas_item->get_item_rect(); } - if (selection.size() == 1 && Object::cast_to<Node2D>(selection[0])) { + if (selection.size() == 1 && Object::cast_to<Node2D>(selection[0]) && bone_ik_list.size() == 0) { drag = DRAG_NODE_2D; drag_point_from = Object::cast_to<Node2D>(selection[0])->get_global_position(); } else { @@ -1197,14 +1198,23 @@ void CanvasItemEditor::_update_cursor() { viewport->set_default_cursor_shape(c); } -void CanvasItemEditor::_viewport_base_gui_input(const Ref<InputEvent> &p_event) { +void CanvasItemEditor::_gui_input_viewport_base(const Ref<InputEvent> &p_event) { + + Ref<InputEventMouseMotion> m = p_event; + if (m.is_valid()) { + if (!viewport_base->has_focus() && (!get_focus_owner() || !get_focus_owner()->is_text_field())) + viewport_base->call_deferred("grab_focus"); + } +} + +void CanvasItemEditor::_gui_input_viewport(const Ref<InputEvent> &p_event) { { EditorNode *en = editor; EditorPluginList *over_plugin_list = en->get_editor_plugins_over(); if (!over_plugin_list->empty()) { - bool discard = over_plugin_list->forward_gui_input(transform, p_event); + bool discard = over_plugin_list->forward_gui_input(p_event); if (discard) { accept_event(); return; @@ -1219,50 +1229,26 @@ void CanvasItemEditor::_viewport_base_gui_input(const Ref<InputEvent> &p_event) if (b->get_button_index() == BUTTON_WHEEL_DOWN) { // Scroll or pan down if (bool(EditorSettings::get_singleton()->get("editors/2d/scroll_to_pan"))) { - v_scroll->set_value(v_scroll->get_value() + int(EditorSettings::get_singleton()->get("editors/2d/pan_speed")) / zoom * b->get_factor()); - + _update_scroll(0); + viewport->update(); } else { - - if (zoom < MIN_ZOOM) - return; - - float prev_zoom = zoom; - zoom = zoom * (1 - (0.05 * b->get_factor())); - { - Point2 ofs = viewport_scrollable->get_transform().affine_inverse().xform(b->get_position()); - ofs = ofs / prev_zoom - ofs / zoom; - h_scroll->set_value(h_scroll->get_value() + ofs.x); - v_scroll->set_value(v_scroll->get_value() + ofs.y); - } + _zoom_on_position(zoom * (1 - (0.05 * b->get_factor())), b->get_position()); } - _update_scroll(0); - viewport->update(); return; } if (b->get_button_index() == BUTTON_WHEEL_UP) { // Scroll or pan up if (bool(EditorSettings::get_singleton()->get("editors/2d/scroll_to_pan"))) { - v_scroll->set_value(v_scroll->get_value() - int(EditorSettings::get_singleton()->get("editors/2d/pan_speed")) / zoom * b->get_factor()); - + _update_scroll(0); + viewport->update(); } else { - if (zoom > MAX_ZOOM) return; - - float prev_zoom = zoom; - zoom = zoom * ((0.95 + (0.05 * b->get_factor())) / 0.95); - { - Point2 ofs = viewport_scrollable->get_transform().affine_inverse().xform(b->get_position()); - ofs = ofs / prev_zoom - ofs / zoom; - h_scroll->set_value(h_scroll->get_value() + ofs.x); - v_scroll->set_value(v_scroll->get_value() + ofs.y); - } + _zoom_on_position(zoom * ((0.95 + (0.05 * b->get_factor())) / 0.95), b->get_position()); } - _update_scroll(0); - viewport->update(); return; } @@ -1343,7 +1329,7 @@ void CanvasItemEditor::_viewport_base_gui_input(const Ref<InputEvent> &p_event) if (b->get_button_index() == BUTTON_LEFT && tool == TOOL_EDIT_PIVOT) { if (b->is_pressed()) { // Set the pivot point - Point2 mouse_pos = viewport_scrollable->get_transform().affine_inverse().xform(b->get_position()); + Point2 mouse_pos = b->get_position(); mouse_pos = transform.affine_inverse().xform(mouse_pos); mouse_pos = snap_point(mouse_pos, SNAP_DEFAULT, _get_single_item()); _edit_set_pivot(mouse_pos); @@ -1466,8 +1452,8 @@ void CanvasItemEditor::_viewport_base_gui_input(const Ref<InputEvent> &p_event) E->get().to }; - Vector2 p = Geometry::get_closest_point_to_segment_2d(viewport_scrollable->get_transform().affine_inverse().xform(b->get_position()), s); - float d = p.distance_to(viewport_scrollable->get_transform().affine_inverse().xform(b->get_position())); + Vector2 p = Geometry::get_closest_point_to_segment_2d(b->get_position(), s); + float d = p.distance_to(b->get_position()); if (d < bone_width && d < closest_dist) { Cbone = E; closest_dist = d; @@ -1529,7 +1515,7 @@ void CanvasItemEditor::_viewport_base_gui_input(const Ref<InputEvent> &p_event) CanvasItemEditorSelectedItem *se = editor_selection->get_node_editor_data<CanvasItemEditorSelectedItem>(canvas_item); ERR_FAIL_COND(!se); - Point2 click = viewport_scrollable->get_transform().affine_inverse().xform(b->get_position()); + Point2 click = b->get_position(); // Rotation if ((b->get_control() && tool == TOOL_SELECT) || tool == TOOL_ROTATE) { @@ -1541,6 +1527,7 @@ void CanvasItemEditor::_viewport_base_gui_input(const Ref<InputEvent> &p_event) if (Object::cast_to<Control>(canvas_item)) se->undo_pivot = Object::cast_to<Control>(canvas_item)->get_pivot_offset(); se->pre_drag_xform = canvas_item->get_global_transform_with_canvas(); + se->pre_drag_rect = canvas_item->get_item_rect(); return; } @@ -1563,6 +1550,7 @@ void CanvasItemEditor::_viewport_base_gui_input(const Ref<InputEvent> &p_event) if (Object::cast_to<Control>(canvas_item)) se->undo_pivot = Object::cast_to<Control>(canvas_item)->get_pivot_offset(); se->pre_drag_xform = canvas_item->get_global_transform_with_canvas(); + se->pre_drag_rect = canvas_item->get_item_rect(); return; } @@ -1574,6 +1562,7 @@ void CanvasItemEditor::_viewport_base_gui_input(const Ref<InputEvent> &p_event) drag_from = transform.affine_inverse().xform(click); se->undo_state = canvas_item->edit_get_state(); se->pre_drag_xform = canvas_item->get_global_transform_with_canvas(); + se->pre_drag_rect = canvas_item->get_item_rect(); return; } } @@ -1581,7 +1570,7 @@ void CanvasItemEditor::_viewport_base_gui_input(const Ref<InputEvent> &p_event) } // Multiple selected items - Point2 click = viewport_scrollable->get_transform().affine_inverse().xform(b->get_position()); + Point2 click = b->get_position(); if ((b->get_alt() || tool == TOOL_MOVE) && get_item_count()) { // Drag the nodes @@ -1641,12 +1630,9 @@ void CanvasItemEditor::_viewport_base_gui_input(const Ref<InputEvent> &p_event) // Mouse motion event _update_cursor(); - if (!viewport_base->has_focus() && (!get_focus_owner() || !get_focus_owner()->is_text_field())) - viewport_base->call_deferred("grab_focus"); - if (box_selecting) { // Update box selection - box_selecting_to = transform.affine_inverse().xform(viewport_scrollable->get_transform().affine_inverse().xform(m->get_position())); + box_selecting_to = transform.affine_inverse().xform(m->get_position()); viewport->update(); return; } @@ -1692,7 +1678,7 @@ void CanvasItemEditor::_viewport_base_gui_input(const Ref<InputEvent> &p_event) } Vector2 dfrom = drag_from; - Vector2 dto = transform.affine_inverse().xform(viewport_scrollable->get_transform().affine_inverse().xform(m->get_position())); + Vector2 dto = transform.affine_inverse().xform(m->get_position()); if (canvas_item->has_meta("_edit_lock_")) continue; @@ -2044,7 +2030,8 @@ void CanvasItemEditor::_viewport_base_gui_input(const Ref<InputEvent> &p_event) } void CanvasItemEditor::_draw_text_at_position(Point2 p_position, String p_string, Margin p_side) { - Color color = Color(0.8, 0.8, 0.8, 0.5); + Color color = get_color("font_color", "Editor"); + color.a = 0.8; Ref<Font> font = get_font("font", "Label"); Size2 text_size = font->get_string_size(p_string); switch (p_side) { @@ -2079,9 +2066,11 @@ void CanvasItemEditor::_draw_percentage_at_position(float p_value, Point2 p_posi } void CanvasItemEditor::_draw_rulers() { - Color graduation_color = Color(0.5, 0.5, 0.5, 1); + Color graduation_color = get_color("font_color", "Editor"); + graduation_color.a = 0.5; Color bg_color = get_color("dark_color_2", "Editor"); - Color font_color = Color(0.8, 0.8, 0.8, 1); + Color font_color = get_color("font_color", "Editor"); + font_color.a = 0.8; Ref<Font> font = get_font("rulers", "EditorFonts"); // The rule transform @@ -2176,19 +2165,20 @@ void CanvasItemEditor::_draw_grid() { Vector2 real_grid_offset; if (snap_relative && get_item_count() > 0) { Vector2 topleft = _find_topleftmost_point(); - real_grid_offset.x = fmod(topleft.x, grid_step.x * Math::pow(2.0, grid_step_multiplier)); - real_grid_offset.y = fmod(topleft.y, grid_step.y * Math::pow(2.0, grid_step_multiplier)); + real_grid_offset.x = fmod(topleft.x, grid_step.x * (real_t)Math::pow(2.0, grid_step_multiplier)); + real_grid_offset.y = fmod(topleft.y, grid_step.y * (real_t)Math::pow(2.0, grid_step_multiplier)); } else { real_grid_offset = grid_offset; } + const Color grid_minor_color = get_color("grid_minor_color", "Editor"); if (grid_step.x != 0) { for (int i = 0; i < s.width; i++) { int cell = Math::fast_ftoi(Math::floor((xform.xform(Vector2(i, 0)).x - real_grid_offset.x) / (grid_step.x * Math::pow(2.0, grid_step_multiplier)))); if (i == 0) last_cell = cell; if (last_cell != cell) - viewport->draw_line(Point2(i, 0), Point2(i, s.height), Color(0.3, 0.7, 1, 0.3)); + viewport->draw_line(Point2(i, 0), Point2(i, s.height), grid_minor_color); last_cell = cell; } } @@ -2199,7 +2189,7 @@ void CanvasItemEditor::_draw_grid() { if (i == 0) last_cell = cell; if (last_cell != cell) - viewport->draw_line(Point2(0, i), Point2(s.width, i), Color(0.3, 0.7, 1, 0.3)); + viewport->draw_line(Point2(0, i), Point2(s.width, i), grid_minor_color); last_cell = cell; } } @@ -2226,16 +2216,16 @@ void CanvasItemEditor::_draw_selection() { Rect2 rect = canvas_item->get_item_rect(); - if (drag != DRAG_NONE && drag != DRAG_PIVOT) { + if (show_helpers && drag != DRAG_NONE && drag != DRAG_PIVOT) { const Transform2D pre_drag_xform = transform * se->pre_drag_xform; const Color pre_drag_color = Color(0.4, 0.6, 1, 0.7); Vector2 pre_drag_endpoints[4] = { - pre_drag_xform.xform(rect.position), - pre_drag_xform.xform(rect.position + Vector2(rect.size.x, 0)), - pre_drag_xform.xform(rect.position + rect.size), - pre_drag_xform.xform(rect.position + Vector2(0, rect.size.y)) + pre_drag_xform.xform(se->pre_drag_rect.position), + pre_drag_xform.xform(se->pre_drag_rect.position + Vector2(se->pre_drag_rect.size.x, 0)), + pre_drag_xform.xform(se->pre_drag_rect.position + se->pre_drag_rect.size), + pre_drag_xform.xform(se->pre_drag_rect.position + Vector2(0, se->pre_drag_rect.size.y)) }; for (int i = 0; i < 4; i++) { @@ -2577,6 +2567,8 @@ void CanvasItemEditor::_draw_bones() { } void CanvasItemEditor::_draw_locks_and_groups(Node *p_node, const Transform2D &p_xform) { + ERR_FAIL_COND(!p_node); + RID viewport_ci = viewport->get_canvas_item(); Transform2D transform_ci = p_xform; @@ -2589,12 +2581,12 @@ void CanvasItemEditor::_draw_locks_and_groups(Node *p_node, const Transform2D &p } if (ci) { - Ref<Texture> lock = get_icon("Lock", "EditorIcons"); + Ref<Texture> lock = get_icon("LockViewport", "EditorIcons"); if (p_node->has_meta("_edit_lock_")) { lock->draw(viewport_ci, transform_ci.xform(Point2(0, 0))); } - Ref<Texture> group = get_icon("Group", "EditorIcons"); + Ref<Texture> group = get_icon("GroupViewport", "EditorIcons"); if (ci->has_meta("_edit_group_")) { Vector2 ofs = transform_ci.xform(Point2(0, 0)); if (ci->has_meta("_edit_lock_")) @@ -2605,6 +2597,8 @@ void CanvasItemEditor::_draw_locks_and_groups(Node *p_node, const Transform2D &p } void CanvasItemEditor::_build_bones_list(Node *p_node) { + ERR_FAIL_COND(!p_node); + for (int i = 0; i < p_node->get_child_count(); i++) { _build_bones_list(p_node->get_child(i)); } @@ -2626,6 +2620,8 @@ void CanvasItemEditor::_build_bones_list(Node *p_node) { } void CanvasItemEditor::_get_encompassing_rect(Node *p_node, Rect2 &r_rect, const Transform2D &p_xform) { + ERR_FAIL_COND(!p_node); + for (int i = 0; i < p_node->get_child_count(); i++) { _get_encompassing_rect(p_node->get_child(i), r_rect, p_xform); } @@ -2658,13 +2654,13 @@ void CanvasItemEditor::_draw_viewport() { all_group = false; } else { for (List<Node *>::Element *E = selection.front(); E; E = E->next()) { - if (Object::cast_to<Control>(E->get()) && !Object::cast_to<Control>(E->get())->has_meta("_edit_lock_")) { + if (Object::cast_to<CanvasItem>(E->get()) && !Object::cast_to<CanvasItem>(E->get())->has_meta("_edit_lock_")) { all_locked = false; break; } } for (List<Node *>::Element *E = selection.front(); E; E = E->next()) { - if (Object::cast_to<Control>(E->get()) && !Object::cast_to<Control>(E->get())->has_meta("_edit_group_")) { + if (Object::cast_to<CanvasItem>(E->get()) && !Object::cast_to<CanvasItem>(E->get())->has_meta("_edit_group_")) { all_group = false; break; } @@ -2683,21 +2679,22 @@ void CanvasItemEditor::_draw_viewport() { _draw_grid(); _draw_selection(); _draw_axis(); - _draw_locks_and_groups(editor->get_edited_scene(), transform); + if (editor->get_edited_scene()) + _draw_locks_and_groups(editor->get_edited_scene(), transform); RID ci = viewport->get_canvas_item(); VisualServer::get_singleton()->canvas_item_add_set_transform(ci, Transform2D()); EditorPluginList *over_plugin_list = editor->get_editor_plugins_over(); if (!over_plugin_list->empty()) { - over_plugin_list->forward_draw_over_canvas(transform, viewport); + over_plugin_list->forward_draw_over_canvas(viewport); } - _draw_focus(); + _draw_bones(); } void CanvasItemEditor::_notification(int p_what) { - if (p_what == NOTIFICATION_FIXED_PROCESS) { + if (p_what == NOTIFICATION_PHYSICS_PROCESS) { EditorNode::get_singleton()->get_scene_root()->set_snap_controls_to_pixels(GLOBAL_GET("gui/common/snap_controls_to_pixels")); @@ -2756,9 +2753,9 @@ void CanvasItemEditor::_notification(int p_what) { } if (all_control && has_control) - anchor_menu->show(); + presets_menu->show(); else - anchor_menu->hide(); + presets_menu->hide(); for (Map<ObjectID, BoneList>::Element *E = bone_list.front(); E; E = E->next()) { @@ -2790,57 +2787,15 @@ void CanvasItemEditor::_notification(int p_what) { select_sb->set_default_margin(Margin(i), 4); } - select_button->set_icon(get_icon("ToolSelect", "EditorIcons")); - list_select_button->set_icon(get_icon("ListSelect", "EditorIcons")); - move_button->set_icon(get_icon("ToolMove", "EditorIcons")); - rotate_button->set_icon(get_icon("ToolRotate", "EditorIcons")); - snap_button->set_icon(get_icon("Snap", "EditorIcons")); - snap_config_menu->set_icon(get_icon("GuiMiniTabMenu", "EditorIcons")); - skeleton_menu->set_icon(get_icon("Bone", "EditorIcons")); - pan_button->set_icon(get_icon("ToolPan", "EditorIcons")); - pivot_button->set_icon(get_icon("EditPivot", "EditorIcons")); - select_handle = get_icon("EditorHandle", "EditorIcons"); - anchor_handle = get_icon("EditorControlAnchor", "EditorIcons"); - lock_button->set_icon(get_icon("Lock", "EditorIcons")); - unlock_button->set_icon(get_icon("Unlock", "EditorIcons")); - group_button->set_icon(get_icon("Group", "EditorIcons")); - ungroup_button->set_icon(get_icon("Ungroup", "EditorIcons")); - key_insert_button->set_icon(get_icon("Key", "EditorIcons")); - - zoom_minus->set_icon(get_icon("ZoomLess", "EditorIcons")); - zoom_reset->set_icon(get_icon("ZoomReset", "EditorIcons")); - zoom_plus->set_icon(get_icon("ZoomMore", "EditorIcons")); - - anchor_menu->set_icon(get_icon("Anchor", "EditorIcons")); - PopupMenu *p = anchor_menu->get_popup(); - - p->add_icon_item(get_icon("ControlAlignTopLeft", "EditorIcons"), "Top Left", ANCHOR_ALIGN_TOP_LEFT); - p->add_icon_item(get_icon("ControlAlignTopRight", "EditorIcons"), "Top Right", ANCHOR_ALIGN_TOP_RIGHT); - p->add_icon_item(get_icon("ControlAlignBottomRight", "EditorIcons"), "Bottom Right", ANCHOR_ALIGN_BOTTOM_RIGHT); - p->add_icon_item(get_icon("ControlAlignBottomLeft", "EditorIcons"), "Bottom Left", ANCHOR_ALIGN_BOTTOM_LEFT); - p->add_separator(); - p->add_icon_item(get_icon("ControlAlignLeftCenter", "EditorIcons"), "Center Left", ANCHOR_ALIGN_CENTER_LEFT); - p->add_icon_item(get_icon("ControlAlignTopCenter", "EditorIcons"), "Center Top", ANCHOR_ALIGN_CENTER_TOP); - p->add_icon_item(get_icon("ControlAlignRightCenter", "EditorIcons"), "Center Right", ANCHOR_ALIGN_CENTER_RIGHT); - p->add_icon_item(get_icon("ControlAlignBottomCenter", "EditorIcons"), "Center Bottom", ANCHOR_ALIGN_CENTER_BOTTOM); - p->add_icon_item(get_icon("ControlAlignCenter", "EditorIcons"), "Center", ANCHOR_ALIGN_CENTER); - p->add_separator(); - p->add_icon_item(get_icon("ControlAlignLeftWide", "EditorIcons"), "Left Wide", ANCHOR_ALIGN_LEFT_WIDE); - p->add_icon_item(get_icon("ControlAlignTopWide", "EditorIcons"), "Top Wide", ANCHOR_ALIGN_TOP_WIDE); - p->add_icon_item(get_icon("ControlAlignRightWide", "EditorIcons"), "Right Wide", ANCHOR_ALIGN_RIGHT_WIDE); - p->add_icon_item(get_icon("ControlAlignBottomWide", "EditorIcons"), "Bottom Wide", ANCHOR_ALIGN_BOTTOM_WIDE); - p->add_icon_item(get_icon("ControlVcenterWide", "EditorIcons"), "VCenter Wide ", ANCHOR_ALIGN_VCENTER_WIDE); - p->add_icon_item(get_icon("ControlHcenterWide", "EditorIcons"), "HCenter Wide ", ANCHOR_ALIGN_HCENTER_WIDE); - p->add_separator(); - p->add_icon_item(get_icon("ControlAlignWide", "EditorIcons"), "Full Rect", ANCHOR_ALIGN_WIDE); - p->add_icon_item(get_icon("ControlAlignWide", "EditorIcons"), "Full Rect and Fit Parent", ANCHOR_ALIGN_WIDE_FIT); - AnimationPlayerEditor::singleton->get_key_editor()->connect("visibility_changed", this, "_keying_changed"); _keying_changed(); + } else if (p_what == EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED) { select_sb->set_texture(get_icon("EditorRect2D", "EditorIcons")); + } + if (p_what == NOTIFICATION_ENTER_TREE || p_what == EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED) { select_button->set_icon(get_icon("ToolSelect", "EditorIcons")); list_select_button->set_icon(get_icon("ListSelect", "EditorIcons")); move_button->set_icon(get_icon("ToolMove", "EditorIcons")); @@ -2856,32 +2811,62 @@ void CanvasItemEditor::_notification(int p_what) { unlock_button->set_icon(get_icon("Unlock", "EditorIcons")); group_button->set_icon(get_icon("Group", "EditorIcons")); ungroup_button->set_icon(get_icon("Ungroup", "EditorIcons")); + key_loc_button->set_icon(get_icon("KeyPosition", "EditorIcons")); + key_rot_button->set_icon(get_icon("KeyRotation", "EditorIcons")); + key_scale_button->set_icon(get_icon("KeyScale", "EditorIcons")); key_insert_button->set_icon(get_icon("Key", "EditorIcons")); - anchor_menu->set_icon(get_icon("Anchor", "EditorIcons")); - PopupMenu *p = anchor_menu->get_popup(); - p->clear(); + zoom_minus->set_icon(get_icon("ZoomLess", "EditorIcons")); + zoom_reset->set_icon(get_icon("ZoomReset", "EditorIcons")); + zoom_plus->set_icon(get_icon("ZoomMore", "EditorIcons")); + + presets_menu->set_icon(get_icon("ControlLayout", "EditorIcons")); + PopupMenu *p = presets_menu->get_popup(); - p->add_icon_item(get_icon("ControlAlignTopLeft", "EditorIcons"), "Top Left", ANCHOR_ALIGN_TOP_LEFT); - p->add_icon_item(get_icon("ControlAlignTopRight", "EditorIcons"), "Top Right", ANCHOR_ALIGN_TOP_RIGHT); - p->add_icon_item(get_icon("ControlAlignBottomRight", "EditorIcons"), "Bottom Right", ANCHOR_ALIGN_BOTTOM_RIGHT); - p->add_icon_item(get_icon("ControlAlignBottomLeft", "EditorIcons"), "Bottom Left", ANCHOR_ALIGN_BOTTOM_LEFT); + p->clear(); + p->add_icon_item(get_icon("ControlAlignTopLeft", "EditorIcons"), "Top Left", ANCHORS_AND_MARGINS_PRESET_TOP_LEFT); + p->add_icon_item(get_icon("ControlAlignTopRight", "EditorIcons"), "Top Right", ANCHORS_AND_MARGINS_PRESET_TOP_RIGHT); + p->add_icon_item(get_icon("ControlAlignBottomRight", "EditorIcons"), "Bottom Right", ANCHORS_AND_MARGINS_PRESET_BOTTOM_RIGHT); + p->add_icon_item(get_icon("ControlAlignBottomLeft", "EditorIcons"), "Bottom Left", ANCHORS_AND_MARGINS_PRESET_BOTTOM_LEFT); + p->add_separator(); + p->add_icon_item(get_icon("ControlAlignLeftCenter", "EditorIcons"), "Center Left", ANCHORS_AND_MARGINS_PRESET_CENTER_LEFT); + p->add_icon_item(get_icon("ControlAlignTopCenter", "EditorIcons"), "Center Top", ANCHORS_AND_MARGINS_PRESET_CENTER_TOP); + p->add_icon_item(get_icon("ControlAlignRightCenter", "EditorIcons"), "Center Right", ANCHORS_AND_MARGINS_PRESET_CENTER_RIGHT); + p->add_icon_item(get_icon("ControlAlignBottomCenter", "EditorIcons"), "Center Bottom", ANCHORS_AND_MARGINS_PRESET_CENTER_BOTTOM); + p->add_icon_item(get_icon("ControlAlignCenter", "EditorIcons"), "Center", ANCHORS_AND_MARGINS_PRESET_CENTER); p->add_separator(); - p->add_icon_item(get_icon("ControlAlignLeftCenter", "EditorIcons"), "Center Left", ANCHOR_ALIGN_CENTER_LEFT); - p->add_icon_item(get_icon("ControlAlignTopCenter", "EditorIcons"), "Center Top", ANCHOR_ALIGN_CENTER_TOP); - p->add_icon_item(get_icon("ControlAlignRightCenter", "EditorIcons"), "Center Right", ANCHOR_ALIGN_CENTER_RIGHT); - p->add_icon_item(get_icon("ControlAlignBottomCenter", "EditorIcons"), "Center Bottom", ANCHOR_ALIGN_CENTER_BOTTOM); - p->add_icon_item(get_icon("ControlAlignCenter", "EditorIcons"), "Center", ANCHOR_ALIGN_CENTER); + p->add_icon_item(get_icon("ControlAlignLeftWide", "EditorIcons"), "Left Wide", ANCHORS_AND_MARGINS_PRESET_LEFT_WIDE); + p->add_icon_item(get_icon("ControlAlignTopWide", "EditorIcons"), "Top Wide", ANCHORS_AND_MARGINS_PRESET_TOP_WIDE); + p->add_icon_item(get_icon("ControlAlignRightWide", "EditorIcons"), "Right Wide", ANCHORS_AND_MARGINS_PRESET_RIGHT_WIDE); + p->add_icon_item(get_icon("ControlAlignBottomWide", "EditorIcons"), "Bottom Wide", ANCHORS_AND_MARGINS_PRESET_BOTTOM_WIDE); + p->add_icon_item(get_icon("ControlVcenterWide", "EditorIcons"), "VCenter Wide ", ANCHORS_AND_MARGINS_PRESET_VCENTER_WIDE); + p->add_icon_item(get_icon("ControlHcenterWide", "EditorIcons"), "HCenter Wide ", ANCHORS_AND_MARGINS_PRESET_HCENTER_WIDE); p->add_separator(); - p->add_icon_item(get_icon("ControlAlignLeftWide", "EditorIcons"), "Left Wide", ANCHOR_ALIGN_LEFT_WIDE); - p->add_icon_item(get_icon("ControlAlignTopWide", "EditorIcons"), "Top Wide", ANCHOR_ALIGN_TOP_WIDE); - p->add_icon_item(get_icon("ControlAlignRightWide", "EditorIcons"), "Right Wide", ANCHOR_ALIGN_RIGHT_WIDE); - p->add_icon_item(get_icon("ControlAlignBottomWide", "EditorIcons"), "Bottom Wide", ANCHOR_ALIGN_BOTTOM_WIDE); - p->add_icon_item(get_icon("ControlVcenterWide", "EditorIcons"), "VCenter Wide ", ANCHOR_ALIGN_VCENTER_WIDE); - p->add_icon_item(get_icon("ControlHcenterWide", "EditorIcons"), "HCenter Wide ", ANCHOR_ALIGN_HCENTER_WIDE); + p->add_icon_item(get_icon("ControlAlignWide", "EditorIcons"), "Full Rect", ANCHORS_AND_MARGINS_PRESET_WIDE); p->add_separator(); - p->add_icon_item(get_icon("ControlAlignWide", "EditorIcons"), "Full Rect", ANCHOR_ALIGN_WIDE); - p->add_icon_item(get_icon("ControlAlignWide", "EditorIcons"), "Full Rect and Fit Parent", ANCHOR_ALIGN_WIDE_FIT); + p->add_submenu_item(TTR("Anchors only"), "Anchors"); + p->set_item_icon(20, get_icon("Anchor", "EditorIcons")); + + anchors_popup->clear(); + anchors_popup->add_icon_item(get_icon("ControlAlignTopLeft", "EditorIcons"), "Top Left", ANCHORS_PRESET_TOP_LEFT); + anchors_popup->add_icon_item(get_icon("ControlAlignTopRight", "EditorIcons"), "Top Right", ANCHORS_PRESET_TOP_RIGHT); + anchors_popup->add_icon_item(get_icon("ControlAlignBottomRight", "EditorIcons"), "Bottom Right", ANCHORS_PRESET_BOTTOM_RIGHT); + anchors_popup->add_icon_item(get_icon("ControlAlignBottomLeft", "EditorIcons"), "Bottom Left", ANCHORS_PRESET_BOTTOM_LEFT); + anchors_popup->add_separator(); + anchors_popup->add_icon_item(get_icon("ControlAlignLeftCenter", "EditorIcons"), "Center Left", ANCHORS_PRESET_CENTER_LEFT); + anchors_popup->add_icon_item(get_icon("ControlAlignTopCenter", "EditorIcons"), "Center Top", ANCHORS_PRESET_CENTER_TOP); + anchors_popup->add_icon_item(get_icon("ControlAlignRightCenter", "EditorIcons"), "Center Right", ANCHORS_PRESET_CENTER_RIGHT); + anchors_popup->add_icon_item(get_icon("ControlAlignBottomCenter", "EditorIcons"), "Center Bottom", ANCHORS_PRESET_CENTER_BOTTOM); + anchors_popup->add_icon_item(get_icon("ControlAlignCenter", "EditorIcons"), "Center", ANCHORS_PRESET_CENTER); + anchors_popup->add_separator(); + anchors_popup->add_icon_item(get_icon("ControlAlignLeftWide", "EditorIcons"), "Left Wide", ANCHORS_PRESET_LEFT_WIDE); + anchors_popup->add_icon_item(get_icon("ControlAlignTopWide", "EditorIcons"), "Top Wide", ANCHORS_PRESET_TOP_WIDE); + anchors_popup->add_icon_item(get_icon("ControlAlignRightWide", "EditorIcons"), "Right Wide", ANCHORS_PRESET_RIGHT_WIDE); + anchors_popup->add_icon_item(get_icon("ControlAlignBottomWide", "EditorIcons"), "Bottom Wide", ANCHORS_PRESET_BOTTOM_WIDE); + anchors_popup->add_icon_item(get_icon("ControlVcenterWide", "EditorIcons"), "VCenter Wide ", ANCHORS_PRESET_VCENTER_WIDE); + anchors_popup->add_icon_item(get_icon("ControlHcenterWide", "EditorIcons"), "HCenter Wide ", ANCHORS_PRESET_HCENTER_WIDE); + anchors_popup->add_separator(); + anchors_popup->add_icon_item(get_icon("ControlAlignWide", "EditorIcons"), "Full Rect", ANCHORS_PRESET_WIDE); } } @@ -3013,25 +2998,51 @@ void CanvasItemEditor::_update_scroll(float) { viewport_base->update(); } -void CanvasItemEditor::_set_anchors_preset(Control::LayoutPreset p_preset) { +void CanvasItemEditor::_set_anchors_and_margins_preset(Control::LayoutPreset p_preset) { List<Node *> &selection = editor_selection->get_selected_node_list(); - undo_redo->create_action(TTR("Change Anchors")); + undo_redo->create_action(TTR("Change Anchors and Margins")); for (List<Node *>::Element *E = selection.front(); E; E = E->next()) { Control *c = Object::cast_to<Control>(E->get()); undo_redo->add_do_method(c, "set_anchors_preset", p_preset); + switch (p_preset) { + case PRESET_TOP_LEFT: + case PRESET_TOP_RIGHT: + case PRESET_BOTTOM_LEFT: + case PRESET_BOTTOM_RIGHT: + case PRESET_CENTER_LEFT: + case PRESET_CENTER_TOP: + case PRESET_CENTER_RIGHT: + case PRESET_CENTER_BOTTOM: + case PRESET_CENTER: + undo_redo->add_do_method(c, "set_margins_preset", p_preset, Control::PRESET_MODE_KEEP_SIZE); + break; + case PRESET_LEFT_WIDE: + case PRESET_TOP_WIDE: + case PRESET_RIGHT_WIDE: + case PRESET_BOTTOM_WIDE: + case PRESET_VCENTER_WIDE: + case PRESET_HCENTER_WIDE: + case PRESET_WIDE: + undo_redo->add_do_method(c, "set_margins_preset", p_preset, Control::PRESET_MODE_MINSIZE); + break; + } undo_redo->add_undo_method(c, "set_anchor", MARGIN_LEFT, c->get_anchor(MARGIN_LEFT)); undo_redo->add_undo_method(c, "set_anchor", MARGIN_TOP, c->get_anchor(MARGIN_TOP)); undo_redo->add_undo_method(c, "set_anchor", MARGIN_RIGHT, c->get_anchor(MARGIN_RIGHT)); undo_redo->add_undo_method(c, "set_anchor", MARGIN_BOTTOM, c->get_anchor(MARGIN_BOTTOM)); + undo_redo->add_undo_method(c, "set_margin", MARGIN_LEFT, c->get_margin(MARGIN_LEFT)); + undo_redo->add_undo_method(c, "set_margin", MARGIN_TOP, c->get_margin(MARGIN_TOP)); + undo_redo->add_undo_method(c, "set_margin", MARGIN_RIGHT, c->get_margin(MARGIN_RIGHT)); + undo_redo->add_undo_method(c, "set_margin", MARGIN_BOTTOM, c->get_margin(MARGIN_BOTTOM)); } undo_redo->commit_action(); } -void CanvasItemEditor::_set_full_rect() { +void CanvasItemEditor::_set_anchors_preset(Control::LayoutPreset p_preset) { List<Node *> &selection = editor_selection->get_selected_node_list(); undo_redo->create_action(TTR("Change Anchors")); @@ -3039,49 +3050,42 @@ void CanvasItemEditor::_set_full_rect() { Control *c = Object::cast_to<Control>(E->get()); - undo_redo->add_do_method(c, "set_anchors_preset", PRESET_WIDE); - undo_redo->add_do_method(c, "set_margin", MARGIN_LEFT, 0); - undo_redo->add_do_method(c, "set_margin", MARGIN_TOP, 0); - undo_redo->add_do_method(c, "set_margin", MARGIN_RIGHT, 0); - undo_redo->add_do_method(c, "set_margin", MARGIN_BOTTOM, 0); + undo_redo->add_do_method(c, "set_anchors_preset", p_preset); undo_redo->add_undo_method(c, "set_anchor", MARGIN_LEFT, c->get_anchor(MARGIN_LEFT)); undo_redo->add_undo_method(c, "set_anchor", MARGIN_TOP, c->get_anchor(MARGIN_TOP)); undo_redo->add_undo_method(c, "set_anchor", MARGIN_RIGHT, c->get_anchor(MARGIN_RIGHT)); undo_redo->add_undo_method(c, "set_anchor", MARGIN_BOTTOM, c->get_anchor(MARGIN_BOTTOM)); - undo_redo->add_undo_method(c, "set_margin", MARGIN_LEFT, c->get_margin(MARGIN_LEFT)); - undo_redo->add_undo_method(c, "set_margin", MARGIN_TOP, c->get_margin(MARGIN_TOP)); - undo_redo->add_undo_method(c, "set_margin", MARGIN_RIGHT, c->get_margin(MARGIN_RIGHT)); - undo_redo->add_undo_method(c, "set_margin", MARGIN_BOTTOM, c->get_margin(MARGIN_BOTTOM)); } undo_redo->commit_action(); } -void CanvasItemEditor::_zoom_minus() { - if (zoom < MIN_ZOOM) +void CanvasItemEditor::_zoom_on_position(float p_zoom, Point2 p_position) { + if (p_zoom < MIN_ZOOM || p_zoom > MAX_ZOOM) return; - zoom /= 2.0; + + float prev_zoom = zoom; + zoom = p_zoom; + Point2 ofs = p_position; + ofs = ofs / prev_zoom - ofs / zoom; + h_scroll->set_value(h_scroll->get_value() + ofs.x); + v_scroll->set_value(v_scroll->get_value() + ofs.y); _update_scroll(0); viewport->update(); viewport_base->update(); } +void CanvasItemEditor::_zoom_minus() { + _zoom_on_position(zoom / 2.0, viewport_scrollable->get_size() / 2.0); +} + void CanvasItemEditor::_zoom_reset() { - zoom = 1; - _update_scroll(0); - viewport->update(); - viewport_base->update(); + _zoom_on_position(1.0, viewport_scrollable->get_size() / 2.0); } void CanvasItemEditor::_zoom_plus() { - if (zoom > MAX_ZOOM) - return; - - zoom *= 2.0; - _update_scroll(0); - viewport->update(); - viewport_base->update(); + _zoom_on_position(zoom * 2.0, viewport_scrollable->get_size() / 2.0); } void CanvasItemEditor::_toggle_snap(bool p_status) { @@ -3244,56 +3248,103 @@ void CanvasItemEditor::_popup_callback(int p_op) { viewport->update(); } break; - case ANCHOR_ALIGN_TOP_LEFT: { + + case ANCHORS_AND_MARGINS_PRESET_TOP_LEFT: { + _set_anchors_and_margins_preset(PRESET_TOP_LEFT); + } break; + case ANCHORS_AND_MARGINS_PRESET_TOP_RIGHT: { + _set_anchors_and_margins_preset(PRESET_TOP_RIGHT); + } break; + case ANCHORS_AND_MARGINS_PRESET_BOTTOM_LEFT: { + _set_anchors_and_margins_preset(PRESET_BOTTOM_LEFT); + } break; + case ANCHORS_AND_MARGINS_PRESET_BOTTOM_RIGHT: { + _set_anchors_and_margins_preset(PRESET_BOTTOM_RIGHT); + } break; + case ANCHORS_AND_MARGINS_PRESET_CENTER_LEFT: { + _set_anchors_and_margins_preset(PRESET_CENTER_LEFT); + } break; + case ANCHORS_AND_MARGINS_PRESET_CENTER_RIGHT: { + _set_anchors_and_margins_preset(PRESET_CENTER_RIGHT); + } break; + case ANCHORS_AND_MARGINS_PRESET_CENTER_TOP: { + _set_anchors_and_margins_preset(PRESET_CENTER_TOP); + } break; + case ANCHORS_AND_MARGINS_PRESET_CENTER_BOTTOM: { + _set_anchors_and_margins_preset(PRESET_CENTER_BOTTOM); + } break; + case ANCHORS_AND_MARGINS_PRESET_CENTER: { + _set_anchors_and_margins_preset(PRESET_CENTER); + } break; + case ANCHORS_AND_MARGINS_PRESET_TOP_WIDE: { + _set_anchors_and_margins_preset(PRESET_TOP_WIDE); + } break; + case ANCHORS_AND_MARGINS_PRESET_LEFT_WIDE: { + _set_anchors_and_margins_preset(PRESET_LEFT_WIDE); + } break; + case ANCHORS_AND_MARGINS_PRESET_RIGHT_WIDE: { + _set_anchors_and_margins_preset(PRESET_RIGHT_WIDE); + } break; + case ANCHORS_AND_MARGINS_PRESET_BOTTOM_WIDE: { + _set_anchors_and_margins_preset(PRESET_BOTTOM_WIDE); + } break; + case ANCHORS_AND_MARGINS_PRESET_VCENTER_WIDE: { + _set_anchors_and_margins_preset(PRESET_VCENTER_WIDE); + } break; + case ANCHORS_AND_MARGINS_PRESET_HCENTER_WIDE: { + _set_anchors_and_margins_preset(PRESET_HCENTER_WIDE); + } break; + case ANCHORS_AND_MARGINS_PRESET_WIDE: { + _set_anchors_and_margins_preset(Control::PRESET_WIDE); + } break; + + case ANCHORS_PRESET_TOP_LEFT: { _set_anchors_preset(PRESET_TOP_LEFT); } break; - case ANCHOR_ALIGN_TOP_RIGHT: { + case ANCHORS_PRESET_TOP_RIGHT: { _set_anchors_preset(PRESET_TOP_RIGHT); } break; - case ANCHOR_ALIGN_BOTTOM_LEFT: { + case ANCHORS_PRESET_BOTTOM_LEFT: { _set_anchors_preset(PRESET_BOTTOM_LEFT); } break; - case ANCHOR_ALIGN_BOTTOM_RIGHT: { + case ANCHORS_PRESET_BOTTOM_RIGHT: { _set_anchors_preset(PRESET_BOTTOM_RIGHT); } break; - case ANCHOR_ALIGN_CENTER_LEFT: { + case ANCHORS_PRESET_CENTER_LEFT: { _set_anchors_preset(PRESET_CENTER_LEFT); } break; - case ANCHOR_ALIGN_CENTER_RIGHT: { + case ANCHORS_PRESET_CENTER_RIGHT: { _set_anchors_preset(PRESET_CENTER_RIGHT); } break; - case ANCHOR_ALIGN_CENTER_TOP: { + case ANCHORS_PRESET_CENTER_TOP: { _set_anchors_preset(PRESET_CENTER_TOP); } break; - case ANCHOR_ALIGN_CENTER_BOTTOM: { + case ANCHORS_PRESET_CENTER_BOTTOM: { _set_anchors_preset(PRESET_CENTER_BOTTOM); } break; - case ANCHOR_ALIGN_CENTER: { + case ANCHORS_PRESET_CENTER: { _set_anchors_preset(PRESET_CENTER); } break; - case ANCHOR_ALIGN_TOP_WIDE: { + case ANCHORS_PRESET_TOP_WIDE: { _set_anchors_preset(PRESET_TOP_WIDE); } break; - case ANCHOR_ALIGN_LEFT_WIDE: { + case ANCHORS_PRESET_LEFT_WIDE: { _set_anchors_preset(PRESET_LEFT_WIDE); } break; - case ANCHOR_ALIGN_RIGHT_WIDE: { + case ANCHORS_PRESET_RIGHT_WIDE: { _set_anchors_preset(PRESET_RIGHT_WIDE); } break; - case ANCHOR_ALIGN_BOTTOM_WIDE: { + case ANCHORS_PRESET_BOTTOM_WIDE: { _set_anchors_preset(PRESET_BOTTOM_WIDE); } break; - case ANCHOR_ALIGN_VCENTER_WIDE: { + case ANCHORS_PRESET_VCENTER_WIDE: { _set_anchors_preset(PRESET_VCENTER_WIDE); } break; - case ANCHOR_ALIGN_HCENTER_WIDE: { + case ANCHORS_PRESET_HCENTER_WIDE: { _set_anchors_preset(PRESET_HCENTER_WIDE); } break; - case ANCHOR_ALIGN_WIDE: { - _set_anchors_preset(PRESET_WIDE); - } break; - case ANCHOR_ALIGN_WIDE_FIT: { - _set_full_rect(); + case ANCHORS_PRESET_WIDE: { + _set_anchors_preset(Control::PRESET_WIDE); } break; case ANIM_INSERT_KEY: @@ -3645,7 +3696,8 @@ void CanvasItemEditor::_bind_methods() { ClassDB::bind_method("_unhandled_key_input", &CanvasItemEditor::_unhandled_key_input); ClassDB::bind_method("_draw_viewport", &CanvasItemEditor::_draw_viewport); ClassDB::bind_method("_draw_viewport_base", &CanvasItemEditor::_draw_viewport_base); - ClassDB::bind_method("_viewport_base_gui_input", &CanvasItemEditor::_viewport_base_gui_input); + ClassDB::bind_method("_gui_input_viewport", &CanvasItemEditor::_gui_input_viewport); + ClassDB::bind_method("_gui_input_viewport_base", &CanvasItemEditor::_gui_input_viewport_base); ClassDB::bind_method("_snap_changed", &CanvasItemEditor::_snap_changed); ClassDB::bind_method(D_METHOD("_selection_result_pressed"), &CanvasItemEditor::_selection_result_pressed); ClassDB::bind_method(D_METHOD("_selection_menu_hide"), &CanvasItemEditor::_selection_menu_hide); @@ -3684,7 +3736,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { hb = memnew(HBoxContainer); add_child(hb); - hb->set_area_as_parent_rect(); + hb->set_anchors_and_margins_preset(Control::PRESET_WIDE); bottom_split = memnew(VSplitContainer); add_child(bottom_split); @@ -3696,8 +3748,9 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { viewport_base = memnew(Control); palette_split->add_child(viewport_base); + viewport_base->set_clip_contents(true); viewport_base->connect("draw", this, "_draw_viewport_base"); - viewport_base->connect("gui_input", this, "_viewport_base_gui_input"); + viewport_base->connect("gui_input", this, "_gui_input_viewport_base"); viewport_base->set_focus_mode(FOCUS_ALL); viewport_base->set_v_size_flags(SIZE_EXPAND_FILL); viewport_base->set_h_size_flags(SIZE_EXPAND_FILL); @@ -3706,21 +3759,22 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { viewport_base->add_child(viewport_scrollable); viewport_scrollable->set_mouse_filter(MOUSE_FILTER_PASS); viewport_scrollable->set_draw_behind_parent(true); - viewport_scrollable->set_area_as_parent_rect(); + viewport_scrollable->set_anchors_and_margins_preset(Control::PRESET_WIDE); viewport_scrollable->set_begin(Point2(RULER_WIDTH, RULER_WIDTH)); ViewportContainer *scene_tree = memnew(ViewportContainer); viewport_scrollable->add_child(scene_tree); scene_tree->set_stretch(true); - scene_tree->set_area_as_parent_rect(); + scene_tree->set_anchors_and_margins_preset(Control::PRESET_WIDE); scene_tree->add_child(p_editor->get_scene_root()); viewport = memnew(CanvasItemEditorViewport(p_editor, this)); viewport_scrollable->add_child(viewport); viewport->set_mouse_filter(MOUSE_FILTER_PASS); - viewport->set_area_as_parent_rect(); + viewport->set_anchors_and_margins_preset(Control::PRESET_WIDE); viewport->set_clip_contents(true); viewport->connect("draw", this, "_draw_viewport"); + viewport->connect("gui_input", this, "_gui_input_viewport"); h_scroll = memnew(HScrollBar); viewport->add_child(h_scroll); @@ -3808,7 +3862,6 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { snap_config_menu = memnew(MenuButton); hb->add_child(snap_config_menu); - snap_config_menu->get_popup()->connect("id_pressed", this, "_popup_callback"); snap_config_menu->set_h_size_flags(SIZE_SHRINK_END); snap_config_menu->set_tooltip(TTR("Snapping options")); @@ -3862,7 +3915,6 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { p = skeleton_menu->get_popup(); p->set_hide_on_checkable_item_selection(false); - p->connect("id_pressed", this, "_popup_callback"); p->add_shortcut(ED_SHORTCUT("canvas_item_editor/skeleton_make_bones", TTR("Make Bones"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_B), SKELETON_MAKE_BONES); p->add_shortcut(ED_SHORTCUT("canvas_item_editor/skeleton_clear_bones", TTR("Clear Bones")), SKELETON_CLEAR_BONES); p->add_separator(); @@ -3870,7 +3922,6 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { p->add_separator(); p->add_shortcut(ED_SHORTCUT("canvas_item_editor/skeleton_set_ik_chain", TTR("Make IK Chain")), SKELETON_SET_IK_CHAIN); p->add_shortcut(ED_SHORTCUT("canvas_item_editor/skeleton_clear_ik_chain", TTR("Clear IK Chain")), SKELETON_CLEAR_IK_CHAIN); - p->set_hide_on_checkable_item_selection(false); p->connect("id_pressed", this, "_popup_callback"); hb->add_child(memnew(VSeparator)); @@ -3888,43 +3939,42 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { p->add_shortcut(ED_SHORTCUT("canvas_item_editor/center_selection", TTR("Center Selection"), KEY_F), VIEW_CENTER_TO_SELECTION); p->add_shortcut(ED_SHORTCUT("canvas_item_editor/frame_selection", TTR("Frame Selection"), KEY_MASK_SHIFT | KEY_F), VIEW_FRAME_TO_SELECTION); - anchor_menu = memnew(MenuButton); - anchor_menu->set_text(TTR("Anchor")); - hb->add_child(anchor_menu); - anchor_menu->get_popup()->connect("id_pressed", this, "_popup_callback"); - anchor_menu->hide(); + presets_menu = memnew(MenuButton); + presets_menu->set_text(TTR("Layout")); + hb->add_child(presets_menu); + presets_menu->hide(); + + p = presets_menu->get_popup(); + p->connect("id_pressed", this, "_popup_callback"); - //p = anchor_menu->get_popup(); + anchors_popup = memnew(PopupMenu); + p->add_child(anchors_popup); + anchors_popup->set_name("Anchors"); + anchors_popup->connect("id_pressed", this, "_popup_callback"); animation_hb = memnew(HBoxContainer); hb->add_child(animation_hb); animation_hb->add_child(memnew(VSeparator)); animation_hb->hide(); - key_loc_button = memnew(Button("loc")); + key_loc_button = memnew(Button); key_loc_button->set_toggle_mode(true); key_loc_button->set_flat(true); key_loc_button->set_pressed(true); key_loc_button->set_focus_mode(FOCUS_NONE); - key_loc_button->add_color_override("font_color", Color(1, 0.6, 0.6)); - key_loc_button->add_color_override("font_color_pressed", Color(0.6, 1, 0.6)); key_loc_button->connect("pressed", this, "_popup_callback", varray(ANIM_INSERT_POS)); animation_hb->add_child(key_loc_button); - key_rot_button = memnew(Button("rot")); + key_rot_button = memnew(Button); key_rot_button->set_toggle_mode(true); key_rot_button->set_flat(true); key_rot_button->set_pressed(true); key_rot_button->set_focus_mode(FOCUS_NONE); - key_rot_button->add_color_override("font_color", Color(1, 0.6, 0.6)); - key_rot_button->add_color_override("font_color_pressed", Color(0.6, 1, 0.6)); key_rot_button->connect("pressed", this, "_popup_callback", varray(ANIM_INSERT_ROT)); animation_hb->add_child(key_rot_button); - key_scale_button = memnew(Button("scl")); + key_scale_button = memnew(Button); key_scale_button->set_toggle_mode(true); key_scale_button->set_flat(true); key_scale_button->set_focus_mode(FOCUS_NONE); - key_scale_button->add_color_override("font_color", Color(1, 0.6, 0.6)); - key_scale_button->add_color_override("font_color_pressed", Color(0.6, 1, 0.6)); key_scale_button->connect("pressed", this, "_popup_callback", varray(ANIM_INSERT_SCALE)); animation_hb->add_child(key_scale_button); key_insert_button = memnew(Button); @@ -4019,14 +4069,14 @@ void CanvasItemEditorPlugin::make_visible(bool p_visible) { if (p_visible) { canvas_item_editor->show(); - canvas_item_editor->set_fixed_process(true); + canvas_item_editor->set_physics_process(true); VisualServer::get_singleton()->viewport_set_hide_canvas(editor->get_scene_root()->get_viewport_rid(), false); canvas_item_editor->viewport_base->grab_focus(); } else { canvas_item_editor->hide(); - canvas_item_editor->set_fixed_process(false); + canvas_item_editor->set_physics_process(false); VisualServer::get_singleton()->viewport_set_hide_canvas(editor->get_scene_root()->get_viewport_rid(), true); } } @@ -4046,7 +4096,7 @@ CanvasItemEditorPlugin::CanvasItemEditorPlugin(EditorNode *p_node) { canvas_item_editor = memnew(CanvasItemEditor(editor)); canvas_item_editor->set_v_size_flags(Control::SIZE_EXPAND_FILL); editor->get_viewport()->add_child(canvas_item_editor); - canvas_item_editor->set_area_as_parent_rect(); + canvas_item_editor->set_anchors_and_margins_preset(Control::PRESET_WIDE); canvas_item_editor->hide(); } @@ -4168,7 +4218,7 @@ void CanvasItemEditorViewport::_create_nodes(Node *parent, Node *child, String & editor_data->get_undo_redo().add_do_property(child, property, texture); // make visible for certain node type - if (default_type == "Patch9Rect") { + if (default_type == "NinePatchRect") { editor_data->get_undo_redo().add_do_property(child, "rect/size", texture_size); } else if (default_type == "Polygon2D") { PoolVector<Vector2> list; @@ -4185,13 +4235,13 @@ void CanvasItemEditorViewport::_create_nodes(Node *parent, Node *child, String & pos = parent->call("get_global_position"); } Transform2D trans = canvas->get_canvas_transform(); - Point2 target_pos = (p_point - trans.get_origin()) / trans.get_scale().x - pos; - if (default_type == "Polygon2D" || default_type == "TouchScreenButton" || default_type == "TextureRect" || default_type == "Patch9Rect") { - target_pos -= texture_size / 2; + Point2 target_position = (p_point - trans.get_origin()) / trans.get_scale().x - pos; + if (default_type == "Polygon2D" || default_type == "TouchScreenButton" || default_type == "TextureRect" || default_type == "NinePatchRect") { + target_position -= texture_size / 2; } // there's nothing to be used as source position so snapping will work as absolute if enabled - target_pos = canvas->snap_point(target_pos); - editor_data->get_undo_redo().add_do_method(child, "set_position", target_pos); + target_position = canvas->snap_point(target_position); + editor_data->get_undo_redo().add_do_method(child, "set_position", target_position); } bool CanvasItemEditorViewport::_create_instance(Node *parent, String &path, const Point2 &p_point) { @@ -4262,7 +4312,7 @@ void CanvasItemEditorViewport::_perform_drop_data() { child = memnew(TouchScreenButton); else if (default_type == "TextureRect") child = memnew(TextureRect); - else if (default_type == "Patch9Rect") + else if (default_type == "NinePatchRect") child = memnew(NinePatchRect); else child = memnew(Sprite); // default @@ -4424,7 +4474,7 @@ CanvasItemEditorViewport::CanvasItemEditorViewport(EditorNode *p_node, CanvasIte types.push_back("TouchScreenButton"); // Control types.push_back("TextureRect"); - types.push_back("Patch9Rect"); + types.push_back("NinePatchRect"); target_node = NULL; editor = p_node; diff --git a/editor/plugins/canvas_item_editor_plugin.h b/editor/plugins/canvas_item_editor_plugin.h index af834507e0..a8183ba286 100644 --- a/editor/plugins/canvas_item_editor_plugin.h +++ b/editor/plugins/canvas_item_editor_plugin.h @@ -59,6 +59,7 @@ public: float prev_anchors[4]; Transform2D pre_drag_xform; + Rect2 pre_drag_rect; CanvasItemEditorSelectedItem() { prev_rot = 0; } }; @@ -97,23 +98,54 @@ class CanvasItemEditor : public VBoxContainer { UNLOCK_SELECTED, GROUP_SELECTED, UNGROUP_SELECTED, - ANCHOR_ALIGN_TOP_LEFT, - ANCHOR_ALIGN_TOP_RIGHT, - ANCHOR_ALIGN_BOTTOM_LEFT, - ANCHOR_ALIGN_BOTTOM_RIGHT, - ANCHOR_ALIGN_CENTER_LEFT, - ANCHOR_ALIGN_CENTER_RIGHT, - ANCHOR_ALIGN_CENTER_TOP, - ANCHOR_ALIGN_CENTER_BOTTOM, - ANCHOR_ALIGN_CENTER, - ANCHOR_ALIGN_TOP_WIDE, - ANCHOR_ALIGN_LEFT_WIDE, - ANCHOR_ALIGN_RIGHT_WIDE, - ANCHOR_ALIGN_BOTTOM_WIDE, - ANCHOR_ALIGN_VCENTER_WIDE, - ANCHOR_ALIGN_HCENTER_WIDE, - ANCHOR_ALIGN_WIDE, - ANCHOR_ALIGN_WIDE_FIT, + ANCHORS_AND_MARGINS_PRESET_TOP_LEFT, + ANCHORS_AND_MARGINS_PRESET_TOP_RIGHT, + ANCHORS_AND_MARGINS_PRESET_BOTTOM_LEFT, + ANCHORS_AND_MARGINS_PRESET_BOTTOM_RIGHT, + ANCHORS_AND_MARGINS_PRESET_CENTER_LEFT, + ANCHORS_AND_MARGINS_PRESET_CENTER_RIGHT, + ANCHORS_AND_MARGINS_PRESET_CENTER_TOP, + ANCHORS_AND_MARGINS_PRESET_CENTER_BOTTOM, + ANCHORS_AND_MARGINS_PRESET_CENTER, + ANCHORS_AND_MARGINS_PRESET_TOP_WIDE, + ANCHORS_AND_MARGINS_PRESET_LEFT_WIDE, + ANCHORS_AND_MARGINS_PRESET_RIGHT_WIDE, + ANCHORS_AND_MARGINS_PRESET_BOTTOM_WIDE, + ANCHORS_AND_MARGINS_PRESET_VCENTER_WIDE, + ANCHORS_AND_MARGINS_PRESET_HCENTER_WIDE, + ANCHORS_AND_MARGINS_PRESET_WIDE, + ANCHORS_PRESET_TOP_LEFT, + ANCHORS_PRESET_TOP_RIGHT, + ANCHORS_PRESET_BOTTOM_LEFT, + ANCHORS_PRESET_BOTTOM_RIGHT, + ANCHORS_PRESET_CENTER_LEFT, + ANCHORS_PRESET_CENTER_RIGHT, + ANCHORS_PRESET_CENTER_TOP, + ANCHORS_PRESET_CENTER_BOTTOM, + ANCHORS_PRESET_CENTER, + ANCHORS_PRESET_TOP_WIDE, + ANCHORS_PRESET_LEFT_WIDE, + ANCHORS_PRESET_RIGHT_WIDE, + ANCHORS_PRESET_BOTTOM_WIDE, + ANCHORS_PRESET_VCENTER_WIDE, + ANCHORS_PRESET_HCENTER_WIDE, + ANCHORS_PRESET_WIDE, + MARGINS_PRESET_TOP_LEFT, + MARGINS_PRESET_TOP_RIGHT, + MARGINS_PRESET_BOTTOM_LEFT, + MARGINS_PRESET_BOTTOM_RIGHT, + MARGINS_PRESET_CENTER_LEFT, + MARGINS_PRESET_CENTER_RIGHT, + MARGINS_PRESET_CENTER_TOP, + MARGINS_PRESET_CENTER_BOTTOM, + MARGINS_PRESET_CENTER, + MARGINS_PRESET_TOP_WIDE, + MARGINS_PRESET_LEFT_WIDE, + MARGINS_PRESET_RIGHT_WIDE, + MARGINS_PRESET_BOTTOM_WIDE, + MARGINS_PRESET_VCENTER_WIDE, + MARGINS_PRESET_HCENTER_WIDE, + MARGINS_PRESET_WIDE, ANIM_INSERT_KEY, ANIM_INSERT_KEY_EXISTING, ANIM_INSERT_POS, @@ -278,7 +310,10 @@ class CanvasItemEditor : public VBoxContainer { MenuButton *view_menu; HBoxContainer *animation_hb; MenuButton *animation_menu; - MenuButton *anchor_menu; + + MenuButton *presets_menu; + PopupMenu *anchors_and_margins_popup; + PopupMenu *anchors_popup; Button *key_loc_button; Button *key_rot_button; @@ -375,18 +410,21 @@ class CanvasItemEditor : public VBoxContainer { void _draw_locks_and_groups(Node *p_node, const Transform2D &p_xform); void _draw_viewport(); - - void _viewport_base_gui_input(const Ref<InputEvent> &p_event); void _draw_viewport_base(); + void _gui_input_viewport(const Ref<InputEvent> &p_event); + void _gui_input_viewport_base(const Ref<InputEvent> &p_event); + void _focus_selection(int p_op); void _snap_if_closer(Point2 p_value, Point2 p_target_snap, Point2 &r_current_snap, bool (&r_snapped)[2], real_t rotation = 0.0, float p_radius = 10.0); void _snap_other_nodes(Point2 p_value, Point2 &r_current_snap, bool (&r_snapped)[2], const Node *p_current, const CanvasItem *p_to_snap); void _set_anchors_preset(Control::LayoutPreset p_preset); - void _set_full_rect(); + void _set_margins_preset(Control::LayoutPreset p_preset); + void _set_anchors_and_margins_preset(Control::LayoutPreset p_preset); + void _zoom_on_position(float p_zoom, Point2 p_position = Point2()); void _zoom_minus(); void _zoom_reset(); void _zoom_plus(); diff --git a/editor/plugins/collision_polygon_2d_editor_plugin.cpp b/editor/plugins/collision_polygon_2d_editor_plugin.cpp index 38f95d8278..00e6d617a1 100644 --- a/editor/plugins/collision_polygon_2d_editor_plugin.cpp +++ b/editor/plugins/collision_polygon_2d_editor_plugin.cpp @@ -29,400 +29,20 @@ /*************************************************************************/ #include "collision_polygon_2d_editor_plugin.h" -#include "canvas_item_editor_plugin.h" -#include "editor/editor_settings.h" -#include "os/file_access.h" +Node2D *CollisionPolygon2DEditor::_get_node() const { -void CollisionPolygon2DEditor::_notification(int p_what) { - - switch (p_what) { - - case NOTIFICATION_READY: { - - button_create->set_icon(get_icon("Edit", "EditorIcons")); - button_edit->set_icon(get_icon("MovePoint", "EditorIcons")); - button_edit->set_pressed(true); - get_tree()->connect("node_removed", this, "_node_removed"); - - } break; - case NOTIFICATION_FIXED_PROCESS: { - - } break; - } -} -void CollisionPolygon2DEditor::_node_removed(Node *p_node) { - - if (p_node == node) { - node = NULL; - hide(); - canvas_item_editor->get_viewport_control()->update(); - } -} - -void CollisionPolygon2DEditor::_menu_option(int p_option) { - - switch (p_option) { - - case MODE_CREATE: { - - mode = MODE_CREATE; - button_create->set_pressed(true); - button_edit->set_pressed(false); - } break; - case MODE_EDIT: { - - mode = MODE_EDIT; - button_create->set_pressed(false); - button_edit->set_pressed(true); - } break; - } -} - -void CollisionPolygon2DEditor::_wip_close() { - - undo_redo->create_action(TTR("Create Poly")); - undo_redo->add_undo_method(node, "set_polygon", node->get_polygon()); - undo_redo->add_do_method(node, "set_polygon", wip); - undo_redo->add_do_method(canvas_item_editor->get_viewport_control(), "update"); - undo_redo->add_undo_method(canvas_item_editor->get_viewport_control(), "update"); - undo_redo->commit_action(); - wip.clear(); - wip_active = false; - mode = MODE_EDIT; - button_edit->set_pressed(true); - button_create->set_pressed(false); - edited_point = -1; -} - -bool CollisionPolygon2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) { - - if (!node) - return false; - - Ref<InputEventMouseButton> mb = p_event; - - if (mb.is_valid()) { - Transform2D xform = canvas_item_editor->get_canvas_transform() * node->get_global_transform(); - - Vector2 gpoint = mb->get_position(); - Vector2 cpoint = canvas_item_editor->get_canvas_transform().affine_inverse().xform(gpoint); - cpoint = canvas_item_editor->snap_point(cpoint); - cpoint = node->get_global_transform().affine_inverse().xform(cpoint); - - Vector<Vector2> poly = node->get_polygon(); - - //first check if a point is to be added (segment split) - real_t grab_threshold = EDITOR_DEF("editors/poly_editor/point_grab_radius", 8); - - switch (mode) { - - case MODE_CREATE: { - - if (mb->get_button_index() == BUTTON_LEFT && mb->is_pressed()) { - - if (!wip_active) { - - wip.clear(); - wip.push_back(cpoint); - wip_active = true; - edited_point_pos = cpoint; - canvas_item_editor->get_viewport_control()->update(); - edited_point = 1; - return true; - } else { - - if (wip.size() > 1 && xform.xform(wip[0]).distance_to(gpoint) < grab_threshold) { - //wip closed - _wip_close(); - - return true; - } else { - - wip.push_back(cpoint); - edited_point = wip.size(); - canvas_item_editor->get_viewport_control()->update(); - return true; - - //add wip point - } - } - } else if (mb->get_button_index() == BUTTON_RIGHT && mb->is_pressed() && wip_active) { - _wip_close(); - } - - } break; - - case MODE_EDIT: { - - if (mb->get_button_index() == BUTTON_LEFT) { - if (mb->is_pressed()) { - - if (mb->get_control()) { - - if (poly.size() < 3) { - - undo_redo->create_action(TTR("Edit Poly")); - undo_redo->add_undo_method(node, "set_polygon", poly); - poly.push_back(cpoint); - undo_redo->add_do_method(node, "set_polygon", poly); - undo_redo->add_do_method(canvas_item_editor->get_viewport_control(), "update"); - undo_redo->add_undo_method(canvas_item_editor->get_viewport_control(), "update"); - undo_redo->commit_action(); - return true; - } - - //search edges - int closest_idx = -1; - Vector2 closest_pos; - real_t closest_dist = 1e10; - for (int i = 0; i < poly.size(); i++) { - - Vector2 points[2] = { xform.xform(poly[i]), - xform.xform(poly[(i + 1) % poly.size()]) }; - - Vector2 cp = Geometry::get_closest_point_to_segment_2d(gpoint, points); - if (cp.distance_squared_to(points[0]) < CMP_EPSILON2 || cp.distance_squared_to(points[1]) < CMP_EPSILON2) - continue; //not valid to reuse point - - real_t d = cp.distance_to(gpoint); - if (d < closest_dist && d < grab_threshold) { - closest_dist = d; - closest_pos = cp; - closest_idx = i; - } - } - - if (closest_idx >= 0) { - - pre_move_edit = poly; - poly.insert(closest_idx + 1, xform.affine_inverse().xform(closest_pos)); - edited_point = closest_idx + 1; - edited_point_pos = xform.affine_inverse().xform(closest_pos); - node->set_polygon(poly); - canvas_item_editor->get_viewport_control()->update(); - return true; - } - } else { - - //look for points to move - - int closest_idx = -1; - Vector2 closest_pos; - real_t closest_dist = 1e10; - for (int i = 0; i < poly.size(); i++) { - - Vector2 cp = xform.xform(poly[i]); - - real_t d = cp.distance_to(gpoint); - if (d < closest_dist && d < grab_threshold) { - closest_dist = d; - closest_pos = cp; - closest_idx = i; - } - } - - if (closest_idx >= 0) { - - pre_move_edit = poly; - edited_point = closest_idx; - edited_point_pos = xform.affine_inverse().xform(closest_pos); - canvas_item_editor->get_viewport_control()->update(); - return true; - } - } - } else { - - if (edited_point != -1) { - - //apply - - ERR_FAIL_INDEX_V(edited_point, poly.size(), false); - poly[edited_point] = edited_point_pos; - undo_redo->create_action(TTR("Edit Poly")); - undo_redo->add_do_method(node, "set_polygon", poly); - undo_redo->add_undo_method(node, "set_polygon", pre_move_edit); - undo_redo->add_do_method(canvas_item_editor->get_viewport_control(), "update"); - undo_redo->add_undo_method(canvas_item_editor->get_viewport_control(), "update"); - undo_redo->commit_action(); - - edited_point = -1; - return true; - } - } - } else if (mb->get_button_index() == BUTTON_RIGHT && mb->is_pressed() && edited_point == -1) { - - int closest_idx = -1; - Vector2 closest_pos; - real_t closest_dist = 1e10; - for (int i = 0; i < poly.size(); i++) { - - Vector2 cp = xform.xform(poly[i]); - - real_t d = cp.distance_to(gpoint); - if (d < closest_dist && d < grab_threshold) { - closest_dist = d; - closest_pos = cp; - closest_idx = i; - } - } - - if (closest_idx >= 0) { - - undo_redo->create_action(TTR("Edit Poly (Remove Point)")); - undo_redo->add_undo_method(node, "set_polygon", poly); - poly.remove(closest_idx); - undo_redo->add_do_method(node, "set_polygon", poly); - undo_redo->add_do_method(canvas_item_editor->get_viewport_control(), "update"); - undo_redo->add_undo_method(canvas_item_editor->get_viewport_control(), "update"); - undo_redo->commit_action(); - return true; - } - } - - } break; - } - } - - Ref<InputEventMouseMotion> mm = p_event; - - if (mm.is_valid()) { - - if (edited_point != -1 && (wip_active || mm->get_button_mask() & BUTTON_MASK_LEFT)) { - - Vector2 gpoint = mm->get_position(); - Vector2 cpoint = canvas_item_editor->get_canvas_transform().affine_inverse().xform(gpoint); - cpoint = canvas_item_editor->snap_point(cpoint); - edited_point_pos = node->get_global_transform().affine_inverse().xform(cpoint); - - canvas_item_editor->get_viewport_control()->update(); - } - } - - return false; + return node; } -void CollisionPolygon2DEditor::_canvas_draw() { - - if (!node) - return; - - Control *vpc = canvas_item_editor->get_viewport_control(); - - Vector<Vector2> poly; - - if (wip_active) - poly = wip; - else - poly = node->get_polygon(); - Transform2D xform = canvas_item_editor->get_canvas_transform() * node->get_global_transform(); - Ref<Texture> handle = get_icon("EditorHandle", "EditorIcons"); +void CollisionPolygon2DEditor::_set_node(Node *p_polygon) { - for (int i = 0; i < poly.size(); i++) { - - Vector2 p, p2; - p = i == edited_point ? edited_point_pos : poly[i]; - if ((wip_active && i == poly.size() - 1) || (((i + 1) % poly.size()) == edited_point)) - p2 = edited_point_pos; - else - p2 = poly[(i + 1) % poly.size()]; - - Vector2 point = xform.xform(p); - Vector2 next_point = xform.xform(p2); - - Color col = Color(1, 0.3, 0.1, 0.8); - vpc->draw_line(point, next_point, col, 2); - vpc->draw_texture(handle, point - handle->get_size() * 0.5); - } + node = Object::cast_to<CollisionPolygon2D>(p_polygon); } -void CollisionPolygon2DEditor::edit(Node *p_collision_polygon) { - - if (!canvas_item_editor) { - canvas_item_editor = CanvasItemEditor::get_singleton(); - } - - if (p_collision_polygon) { - - node = Object::cast_to<CollisionPolygon2D>(p_collision_polygon); - //Enable the pencil tool if the polygon is empty - if (node->get_polygon().size() == 0) { - _menu_option(MODE_CREATE); - } - if (!canvas_item_editor->get_viewport_control()->is_connected("draw", this, "_canvas_draw")) - canvas_item_editor->get_viewport_control()->connect("draw", this, "_canvas_draw"); - wip.clear(); - wip_active = false; - edited_point = -1; - canvas_item_editor->get_viewport_control()->update(); - - } else { - node = NULL; - - if (canvas_item_editor->get_viewport_control()->is_connected("draw", this, "_canvas_draw")) - canvas_item_editor->get_viewport_control()->disconnect("draw", this, "_canvas_draw"); - } -} - -void CollisionPolygon2DEditor::_bind_methods() { - - ClassDB::bind_method(D_METHOD("_menu_option"), &CollisionPolygon2DEditor::_menu_option); - ClassDB::bind_method(D_METHOD("_canvas_draw"), &CollisionPolygon2DEditor::_canvas_draw); - ClassDB::bind_method(D_METHOD("_node_removed"), &CollisionPolygon2DEditor::_node_removed); -} - -CollisionPolygon2DEditor::CollisionPolygon2DEditor(EditorNode *p_editor) { - - node = NULL; - canvas_item_editor = NULL; - editor = p_editor; - undo_redo = editor->get_undo_redo(); - - add_child(memnew(VSeparator)); - button_create = memnew(ToolButton); - add_child(button_create); - button_create->connect("pressed", this, "_menu_option", varray(MODE_CREATE)); - button_create->set_toggle_mode(true); - button_create->set_tooltip(TTR("Create a new polygon from scratch.")); - - button_edit = memnew(ToolButton); - add_child(button_edit); - button_edit->connect("pressed", this, "_menu_option", varray(MODE_EDIT)); - button_edit->set_toggle_mode(true); - button_edit->set_tooltip(TTR("Edit existing polygon:\nLMB: Move Point.\nCtrl+LMB: Split Segment.\nRMB: Erase Point.")); - - mode = MODE_EDIT; - wip_active = false; -} - -void CollisionPolygon2DEditorPlugin::edit(Object *p_object) { - - collision_polygon_editor->edit(Object::cast_to<Node>(p_object)); -} - -bool CollisionPolygon2DEditorPlugin::handles(Object *p_object) const { - - return p_object->is_class("CollisionPolygon2D"); -} - -void CollisionPolygon2DEditorPlugin::make_visible(bool p_visible) { - - if (p_visible) { - collision_polygon_editor->show(); - } else { - - collision_polygon_editor->hide(); - collision_polygon_editor->edit(NULL); - } -} - -CollisionPolygon2DEditorPlugin::CollisionPolygon2DEditorPlugin(EditorNode *p_node) { - - editor = p_node; - collision_polygon_editor = memnew(CollisionPolygon2DEditor(p_node)); - CanvasItemEditor::get_singleton()->add_control_to_menu_panel(collision_polygon_editor); - - collision_polygon_editor->hide(); +CollisionPolygon2DEditor::CollisionPolygon2DEditor(EditorNode *p_editor) + : AbstractPolygon2DEditor(p_editor) { } -CollisionPolygon2DEditorPlugin::~CollisionPolygon2DEditorPlugin() { +CollisionPolygon2DEditorPlugin::CollisionPolygon2DEditorPlugin(EditorNode *p_node) + : AbstractPolygon2DEditorPlugin(p_node, memnew(CollisionPolygon2DEditor(p_node)), "CollisionPolygon2D") { } diff --git a/editor/plugins/collision_polygon_2d_editor_plugin.h b/editor/plugins/collision_polygon_2d_editor_plugin.h index 4715abd2e6..edf3bbcc08 100644 --- a/editor/plugins/collision_polygon_2d_editor_plugin.h +++ b/editor/plugins/collision_polygon_2d_editor_plugin.h @@ -30,78 +30,32 @@ #ifndef COLLISION_POLYGON_2D_EDITOR_PLUGIN_H #define COLLISION_POLYGON_2D_EDITOR_PLUGIN_H -#include "editor/editor_node.h" -#include "editor/editor_plugin.h" +#include "editor/plugins/abstract_polygon_2d_editor.h" #include "scene/2d/collision_polygon_2d.h" -#include "scene/gui/tool_button.h" /** @author Juan Linietsky <reduzio@gmail.com> */ -class CanvasItemEditor; +class CollisionPolygon2DEditor : public AbstractPolygon2DEditor { -class CollisionPolygon2DEditor : public HBoxContainer { + GDCLASS(CollisionPolygon2DEditor, AbstractPolygon2DEditor); - GDCLASS(CollisionPolygon2DEditor, HBoxContainer); - - UndoRedo *undo_redo; - enum Mode { - - MODE_CREATE, - MODE_EDIT, - - }; - - Mode mode; - - ToolButton *button_create; - ToolButton *button_edit; - - CanvasItemEditor *canvas_item_editor; - EditorNode *editor; - Panel *panel; CollisionPolygon2D *node; - MenuButton *options; - - int edited_point; - Vector2 edited_point_pos; - Vector<Vector2> pre_move_edit; - Vector<Vector2> wip; - bool wip_active; - - void _wip_close(); - void _canvas_draw(); - void _menu_option(int p_option); protected: - void _notification(int p_what); - void _node_removed(Node *p_node); - static void _bind_methods(); + virtual Node2D *_get_node() const; + virtual void _set_node(Node *p_polygon); public: - bool forward_gui_input(const Ref<InputEvent> &p_event); - void edit(Node *p_collision_polygon); CollisionPolygon2DEditor(EditorNode *p_editor); }; -class CollisionPolygon2DEditorPlugin : public EditorPlugin { - - GDCLASS(CollisionPolygon2DEditorPlugin, EditorPlugin); +class CollisionPolygon2DEditorPlugin : public AbstractPolygon2DEditorPlugin { - CollisionPolygon2DEditor *collision_polygon_editor; - EditorNode *editor; + GDCLASS(CollisionPolygon2DEditorPlugin, AbstractPolygon2DEditorPlugin); public: - virtual bool forward_canvas_gui_input(const Transform2D &p_canvas_xform, const Ref<InputEvent> &p_event) { return collision_polygon_editor->forward_gui_input(p_event); } - - virtual String get_name() const { return "CollisionPolygon2D"; } - bool has_main_screen() const { return false; } - virtual void edit(Object *p_object); - virtual bool handles(Object *p_object) const; - virtual void make_visible(bool p_visible); - CollisionPolygon2DEditorPlugin(EditorNode *p_node); - ~CollisionPolygon2DEditorPlugin(); }; #endif // COLLISION_POLYGON_2D_EDITOR_PLUGIN_H diff --git a/editor/plugins/collision_shape_2d_editor_plugin.cpp b/editor/plugins/collision_shape_2d_editor_plugin.cpp index 3e6165e552..005de096cd 100644 --- a/editor/plugins/collision_shape_2d_editor_plugin.cpp +++ b/editor/plugins/collision_shape_2d_editor_plugin.cpp @@ -302,7 +302,7 @@ void CollisionShape2DEditor::commit_handle(int idx, Variant &p_org) { undo_redo->commit_action(); } -bool CollisionShape2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) { +bool CollisionShape2DEditor::forward_canvas_gui_input(const Ref<InputEvent> &p_event) { if (!node) { return false; @@ -317,17 +317,17 @@ bool CollisionShape2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) { } Ref<InputEventMouseButton> mb = p_event; + Transform2D xform = canvas_item_editor->get_canvas_transform() * node->get_global_transform(); if (mb.is_valid()) { - Transform2D gt = canvas_item_editor->get_canvas_transform() * node->get_global_transform(); - - Point2 gpoint(mb->get_position().x, mb->get_position().y); + Vector2 gpoint = mb->get_position(); + Vector2 cpoint = node->get_global_transform().affine_inverse().xform(canvas_item_editor->snap_point(canvas_item_editor->get_canvas_transform().affine_inverse().xform(mb->get_position()))); if (mb->get_button_index() == BUTTON_LEFT) { if (mb->is_pressed()) { for (int i = 0; i < handles.size(); i++) { - if (gt.xform(handles[i]).distance_to(gpoint) < 8) { + if (xform.xform(handles[i]).distance_to(gpoint) < 8) { edit_handle = i; break; @@ -368,9 +368,7 @@ bool CollisionShape2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) { return false; } - Point2 gpoint = mm->get_position(); - Point2 cpoint = canvas_item_editor->get_canvas_transform().affine_inverse().xform(gpoint); - cpoint = canvas_item_editor->snap_point(cpoint); + Vector2 cpoint = canvas_item_editor->snap_point(canvas_item_editor->get_canvas_transform().affine_inverse().xform(mm->get_position())); cpoint = node->get_global_transform().affine_inverse().xform(cpoint); set_handle(edit_handle, cpoint); @@ -416,7 +414,7 @@ void CollisionShape2DEditor::_get_current_shape_type() { canvas_item_editor->get_viewport_control()->update(); } -void CollisionShape2DEditor::_canvas_draw() { +void CollisionShape2DEditor::forward_draw_over_canvas(Control *p_canvas) { if (!node) { return; @@ -432,7 +430,6 @@ void CollisionShape2DEditor::_canvas_draw() { return; } - Control *c = canvas_item_editor->get_viewport_control(); Transform2D gt = canvas_item_editor->get_canvas_transform() * node->get_global_transform(); Ref<Texture> h = get_icon("EditorHandle", "EditorIcons"); @@ -451,8 +448,8 @@ void CollisionShape2DEditor::_canvas_draw() { handles[0] = Point2(radius, -height); handles[1] = Point2(0, -(height + radius)); - c->draw_texture(h, gt.xform(handles[0]) - size); - c->draw_texture(h, gt.xform(handles[1]) - size); + p_canvas->draw_texture(h, gt.xform(handles[0]) - size); + p_canvas->draw_texture(h, gt.xform(handles[1]) - size); } break; @@ -462,7 +459,7 @@ void CollisionShape2DEditor::_canvas_draw() { handles.resize(1); handles[0] = Point2(shape->get_radius(), 0); - c->draw_texture(h, gt.xform(handles[0]) - size); + p_canvas->draw_texture(h, gt.xform(handles[0]) - size); } break; @@ -481,8 +478,8 @@ void CollisionShape2DEditor::_canvas_draw() { handles[0] = shape->get_normal() * shape->get_d(); handles[1] = shape->get_normal() * (shape->get_d() + 30.0); - c->draw_texture(h, gt.xform(handles[0]) - size); - c->draw_texture(h, gt.xform(handles[1]) - size); + p_canvas->draw_texture(h, gt.xform(handles[0]) - size); + p_canvas->draw_texture(h, gt.xform(handles[1]) - size); } break; @@ -492,7 +489,7 @@ void CollisionShape2DEditor::_canvas_draw() { handles.resize(1); handles[0] = Point2(0, shape->get_length()); - c->draw_texture(h, gt.xform(handles[0]) - size); + p_canvas->draw_texture(h, gt.xform(handles[0]) - size); } break; @@ -504,8 +501,8 @@ void CollisionShape2DEditor::_canvas_draw() { handles[0] = Point2(ext.x, 0); handles[1] = Point2(0, -ext.y); - c->draw_texture(h, gt.xform(handles[0]) - size); - c->draw_texture(h, gt.xform(handles[1]) - size); + p_canvas->draw_texture(h, gt.xform(handles[0]) - size); + p_canvas->draw_texture(h, gt.xform(handles[1]) - size); } break; @@ -516,8 +513,8 @@ void CollisionShape2DEditor::_canvas_draw() { handles[0] = shape->get_a(); handles[1] = shape->get_b(); - c->draw_texture(h, gt.xform(handles[0]) - size); - c->draw_texture(h, gt.xform(handles[1]) - size); + p_canvas->draw_texture(h, gt.xform(handles[0]) - size); + p_canvas->draw_texture(h, gt.xform(handles[1]) - size); } break; } @@ -532,18 +529,12 @@ void CollisionShape2DEditor::edit(Node *p_node) { if (p_node) { node = Object::cast_to<CollisionShape2D>(p_node); - if (!canvas_item_editor->get_viewport_control()->is_connected("draw", this, "_canvas_draw")) - canvas_item_editor->get_viewport_control()->connect("draw", this, "_canvas_draw"); - _get_current_shape_type(); } else { edit_handle = -1; shape_type = -1; - if (canvas_item_editor->get_viewport_control()->is_connected("draw", this, "_canvas_draw")) - canvas_item_editor->get_viewport_control()->disconnect("draw", this, "_canvas_draw"); - node = NULL; } @@ -552,7 +543,6 @@ void CollisionShape2DEditor::edit(Node *p_node) { void CollisionShape2DEditor::_bind_methods() { - ClassDB::bind_method("_canvas_draw", &CollisionShape2DEditor::_canvas_draw); ClassDB::bind_method("_get_current_shape_type", &CollisionShape2DEditor::_get_current_shape_type); } diff --git a/editor/plugins/collision_shape_2d_editor_plugin.h b/editor/plugins/collision_shape_2d_editor_plugin.h index ffa91952e0..d4fbe87fb3 100644 --- a/editor/plugins/collision_shape_2d_editor_plugin.h +++ b/editor/plugins/collision_shape_2d_editor_plugin.h @@ -68,13 +68,13 @@ class CollisionShape2DEditor : public Control { void commit_handle(int idx, Variant &p_org); void _get_current_shape_type(); - void _canvas_draw(); protected: static void _bind_methods(); public: - bool forward_gui_input(const Ref<InputEvent> &p_event); + bool forward_canvas_gui_input(const Ref<InputEvent> &p_event); + void forward_draw_over_canvas(Control *p_canvas); void edit(Node *p_node); CollisionShape2DEditor(EditorNode *p_editor); @@ -87,7 +87,8 @@ class CollisionShape2DEditorPlugin : public EditorPlugin { EditorNode *editor; public: - virtual bool forward_canvas_gui_input(const Transform2D &p_canvas_xform, const Ref<InputEvent> &p_event) { return collision_shape_2d_editor->forward_gui_input(p_event); } + virtual bool forward_canvas_gui_input(const Ref<InputEvent> &p_event) { return collision_shape_2d_editor->forward_canvas_gui_input(p_event); } + virtual void forward_draw_over_canvas(Control *p_canvas) { return collision_shape_2d_editor->forward_draw_over_canvas(p_canvas); } virtual String get_name() const { return "CollisionShape2D"; } bool has_main_screen() const { return false; } diff --git a/editor/plugins/cube_grid_theme_editor_plugin.cpp b/editor/plugins/cube_grid_theme_editor_plugin.cpp index 1c17daf425..2b31f192b3 100644 --- a/editor/plugins/cube_grid_theme_editor_plugin.cpp +++ b/editor/plugins/cube_grid_theme_editor_plugin.cpp @@ -241,7 +241,7 @@ MeshLibraryEditor::MeshLibraryEditor(EditorNode *p_editor) { file->connect("file_selected", this, "_import_scene_cbk"); Panel *panel = memnew(Panel); - panel->set_area_as_parent_rect(); + panel->set_anchors_and_margins_preset(Control::PRESET_WIDE); add_child(panel); MenuButton *options = memnew(MenuButton); panel->add_child(options); @@ -289,7 +289,7 @@ MeshLibraryEditorPlugin::MeshLibraryEditorPlugin(EditorNode *p_node) { theme_editor = memnew(MeshLibraryEditor(p_node)); p_node->get_viewport()->add_child(theme_editor); - theme_editor->set_area_as_parent_rect(); + theme_editor->set_anchors_and_margins_preset(Control::PRESET_WIDE); theme_editor->set_anchor(MARGIN_BOTTOM, Control::ANCHOR_BEGIN); theme_editor->set_end(Point2(0, 22)); theme_editor->hide(); diff --git a/editor/plugins/curve_editor_plugin.cpp b/editor/plugins/curve_editor_plugin.cpp index 615cf85aa4..2754aeed06 100644 --- a/editor/plugins/curve_editor_plugin.cpp +++ b/editor/plugins/curve_editor_plugin.cpp @@ -53,12 +53,12 @@ CurveEditor::CurveEditor() { _presets_menu = memnew(PopupMenu); _presets_menu->set_name("_presets_menu"); - _presets_menu->add_item("Flat0", PRESET_FLAT0); - _presets_menu->add_item("Flat1", PRESET_FLAT1); - _presets_menu->add_item("Linear", PRESET_LINEAR); - _presets_menu->add_item("Ease in", PRESET_EASE_IN); - _presets_menu->add_item("Ease out", PRESET_EASE_OUT); - _presets_menu->add_item("Smoothstep", PRESET_SMOOTHSTEP); + _presets_menu->add_item(TTR("Flat0"), PRESET_FLAT0); + _presets_menu->add_item(TTR("Flat1"), PRESET_FLAT1); + _presets_menu->add_item(TTR("Linear"), PRESET_LINEAR); + _presets_menu->add_item(TTR("Ease in"), PRESET_EASE_IN); + _presets_menu->add_item(TTR("Ease out"), PRESET_EASE_OUT); + _presets_menu->add_item(TTR("Smoothstep"), PRESET_SMOOTHSTEP); _presets_menu->connect("id_pressed", this, "_on_preset_item_selected"); _context_menu->add_child(_presets_menu); } @@ -188,7 +188,7 @@ void CurveEditor::on_gui_input(const Ref<InputEvent> &p_event) { } else { // Drag tangent - Vector2 point_pos = curve.get_point_pos(_selected_point); + Vector2 point_pos = curve.get_point_position(_selected_point); Vector2 control_pos = get_world_pos(mpos); Vector2 dir = (control_pos - point_pos).normalized(); @@ -344,19 +344,19 @@ void CurveEditor::open_context_menu(Vector2 pos) { _curve_ref->get_point_left_mode(_selected_point) == Curve::TANGENT_LINEAR : _curve_ref->get_point_right_mode(_selected_point) == Curve::TANGENT_LINEAR; - _context_menu->set_item_checked(CONTEXT_LINEAR, is_linear); + _context_menu->set_item_checked(_context_menu->get_item_index(CONTEXT_LINEAR), is_linear); } else { _context_menu->add_separator(); if (_selected_point > 0) { _context_menu->add_check_item(TTR("Left linear"), CONTEXT_LEFT_LINEAR); - _context_menu->set_item_checked(CONTEXT_LEFT_LINEAR, + _context_menu->set_item_checked(_context_menu->get_item_index(CONTEXT_LEFT_LINEAR), _curve_ref->get_point_left_mode(_selected_point) == Curve::TANGENT_LINEAR); } if (_selected_point + 1 < _curve_ref->get_point_count()) { _context_menu->add_check_item(TTR("Right linear"), CONTEXT_RIGHT_LINEAR); - _context_menu->set_item_checked(CONTEXT_RIGHT_LINEAR, + _context_menu->set_item_checked(_context_menu->get_item_index(CONTEXT_RIGHT_LINEAR), _curve_ref->get_point_right_mode(_selected_point) == Curve::TANGENT_LINEAR); } } @@ -378,7 +378,7 @@ int CurveEditor::get_point_at(Vector2 pos) const { const float r = _hover_radius * _hover_radius; for (int i = 0; i < curve.get_point_count(); ++i) { - Vector2 p = get_view_pos(curve.get_point_pos(i)); + Vector2 p = get_view_pos(curve.get_point_position(i)); if (p.distance_squared_to(pos) <= r) { return i; } @@ -525,8 +525,8 @@ Vector2 CurveEditor::get_tangent_view_pos(int i, TangentIndex tangent) const { else dir = Vector2(1, _curve_ref->get_point_right_tangent(i)); - Vector2 point_pos = get_view_pos(_curve_ref->get_point_pos(i)); - Vector2 control_pos = get_view_pos(_curve_ref->get_point_pos(i) + dir); + Vector2 point_pos = get_view_pos(_curve_ref->get_point_position(i)); + Vector2 control_pos = get_view_pos(_curve_ref->get_point_position(i) + dir); return point_pos + _tangents_length * (control_pos - point_pos).normalized(); } @@ -549,8 +549,8 @@ static void plot_curve_accurate(const Curve &curve, float step, T plot_func) { plot_func(Vector2(0, y), Vector2(1.f, y), true); } else { - Vector2 first_point = curve.get_point_pos(0); - Vector2 last_point = curve.get_point_pos(curve.get_point_count() - 1); + Vector2 first_point = curve.get_point_position(0); + Vector2 last_point = curve.get_point_position(curve.get_point_count() - 1); // Edge lines plot_func(Vector2(0, first_point.y), first_point, false); @@ -559,8 +559,8 @@ static void plot_curve_accurate(const Curve &curve, float step, T plot_func) { // Draw section by section, so that we get maximum precision near points. // It's an accurate representation, but slower than using the baked one. for (int i = 1; i < curve.get_point_count(); ++i) { - Vector2 a = curve.get_point_pos(i - 1); - Vector2 b = curve.get_point_pos(i); + Vector2 a = curve.get_point_position(i - 1); + Vector2 b = curve.get_point_position(i); Vector2 pos = a; Vector2 prev_pos = a; @@ -613,8 +613,8 @@ void CurveEditor::_draw() { Vector2 min_edge = get_world_pos(Vector2(0, view_size.y)); Vector2 max_edge = get_world_pos(Vector2(view_size.x, 0)); - const Color grid_color0(0, 0, 0, 0.5); - const Color grid_color1(0, 0, 0, 0.15); + const Color grid_color0 = get_color("grid_major_color", "Editor"); + const Color grid_color1 = get_color("grid_minor_color", "Editor"); draw_line(Vector2(min_edge.x, curve.get_min_value()), Vector2(max_edge.x, curve.get_min_value()), grid_color0); draw_line(Vector2(max_edge.x, curve.get_max_value()), Vector2(min_edge.x, curve.get_max_value()), grid_color0); draw_line(Vector2(0, min_edge.y), Vector2(0, max_edge.y), grid_color0); @@ -636,7 +636,7 @@ void CurveEditor::_draw() { Ref<Font> font = get_font("font", "Label"); float font_height = font->get_height(); - const Color text_color(1, 1, 1, 0.3); + const Color text_color = get_color("font_color", "Editor"); { // X axis @@ -664,10 +664,10 @@ void CurveEditor::_draw() { if (_selected_point >= 0) { - const Color tangent_color(0.5, 0.5, 1, 1); + const Color tangent_color = get_color("accent_color", "Editor"); int i = _selected_point; - Vector2 pos = curve.get_point_pos(i); + Vector2 pos = curve.get_point_position(i); if (i != 0) { Vector2 control_pos = get_tangent_view_pos(i, TANGENT_LEFT); @@ -686,8 +686,8 @@ void CurveEditor::_draw() { draw_set_transform_matrix(_world_to_view); - const Color line_color(1, 1, 1, 0.85); - const Color edge_line_color(1, 1, 1, 0.4); + const Color line_color = get_color("highlight_color", "Editor"); + const Color edge_line_color = get_color("font_color", "Editor"); CanvasItemPlotCurve plot_func(*this, line_color, edge_line_color); plot_curve_accurate(curve, 4.f / view_size.x, plot_func); @@ -714,11 +714,11 @@ void CurveEditor::_draw() { draw_set_transform_matrix(Transform2D()); - const Color point_color(1, 1, 1); - const Color selected_point_color(1, 0.5, 0.5); + const Color point_color = get_color("font_color", "Editor"); + const Color selected_point_color = get_color("accent_color", "Editor"); for (int i = 0; i < curve.get_point_count(); ++i) { - Vector2 pos = curve.get_point_pos(i); + Vector2 pos = curve.get_point_position(i); draw_rect(Rect2(get_view_pos(pos), Vector2(1, 1)).grow(3), i == _selected_point ? selected_point_color : point_color); // TODO Circles are prettier. Needs a fix! Or a texture //draw_circle(pos, 2, point_color); @@ -728,7 +728,7 @@ void CurveEditor::_draw() { if (_hover_point != -1) { const Color hover_color = line_color; - Vector2 pos = curve.get_point_pos(_hover_point); + Vector2 pos = curve.get_point_position(_hover_point); stroke_rect(Rect2(get_view_pos(pos), Vector2(1, 1)).grow(_hover_radius), hover_color); } diff --git a/editor/plugins/light_occluder_2d_editor_plugin.cpp b/editor/plugins/light_occluder_2d_editor_plugin.cpp index e6b921c539..485657d2c9 100644 --- a/editor/plugins/light_occluder_2d_editor_plugin.cpp +++ b/editor/plugins/light_occluder_2d_editor_plugin.cpp @@ -46,7 +46,7 @@ void LightOccluder2DEditor::_notification(int p_what) { create_poly->connect("confirmed", this, "_create_poly"); } break; - case NOTIFICATION_FIXED_PROCESS: { + case NOTIFICATION_PHYSICS_PROCESS: { } break; } @@ -119,9 +119,7 @@ bool LightOccluder2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) { Transform2D xform = canvas_item_editor->get_canvas_transform() * node->get_global_transform(); Vector2 gpoint = mb->get_position(); - Vector2 cpoint = canvas_item_editor->get_canvas_transform().affine_inverse().xform(gpoint); - cpoint = canvas_item_editor->snap_point(cpoint); - cpoint = node->get_global_transform().affine_inverse().xform(cpoint); + Vector2 cpoint = node->get_global_transform().affine_inverse().xform(canvas_item_editor->snap_point(canvas_item_editor->get_canvas_transform().affine_inverse().xform(mb->get_position()))); Vector<Vector2> poly = Variant(node->get_occluder_polygon()->get_polygon()); @@ -319,7 +317,8 @@ bool LightOccluder2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) { return false; } -void LightOccluder2DEditor::_canvas_draw() { + +void LightOccluder2DEditor::forward_draw_over_canvas(Control *p_canvas) { if (!node || !node->get_occluder_polygon().is_valid()) return; @@ -368,17 +367,12 @@ void LightOccluder2DEditor::edit(Node *p_collision_polygon) { if (p_collision_polygon) { node = Object::cast_to<LightOccluder2D>(p_collision_polygon); - if (!canvas_item_editor->get_viewport_control()->is_connected("draw", this, "_canvas_draw")) - canvas_item_editor->get_viewport_control()->connect("draw", this, "_canvas_draw"); wip.clear(); wip_active = false; edited_point = -1; canvas_item_editor->get_viewport_control()->update(); } else { node = NULL; - - if (canvas_item_editor->get_viewport_control()->is_connected("draw", this, "_canvas_draw")) - canvas_item_editor->get_viewport_control()->disconnect("draw", this, "_canvas_draw"); } } @@ -395,7 +389,6 @@ void LightOccluder2DEditor::_create_poly() { void LightOccluder2DEditor::_bind_methods() { ClassDB::bind_method(D_METHOD("_menu_option"), &LightOccluder2DEditor::_menu_option); - ClassDB::bind_method(D_METHOD("_canvas_draw"), &LightOccluder2DEditor::_canvas_draw); ClassDB::bind_method(D_METHOD("_node_removed"), &LightOccluder2DEditor::_node_removed); ClassDB::bind_method(D_METHOD("_create_poly"), &LightOccluder2DEditor::_create_poly); } @@ -430,7 +423,7 @@ LightOccluder2DEditor::LightOccluder2DEditor(EditorNode *p_editor) { void LightOccluder2DEditorPlugin::edit(Object *p_object) { - collision_polygon_editor->edit(Object::cast_to<Node>(p_object)); + light_occluder_editor->edit(Object::cast_to<Node>(p_object)); } bool LightOccluder2DEditorPlugin::handles(Object *p_object) const { @@ -441,21 +434,21 @@ bool LightOccluder2DEditorPlugin::handles(Object *p_object) const { void LightOccluder2DEditorPlugin::make_visible(bool p_visible) { if (p_visible) { - collision_polygon_editor->show(); + light_occluder_editor->show(); } else { - collision_polygon_editor->hide(); - collision_polygon_editor->edit(NULL); + light_occluder_editor->hide(); + light_occluder_editor->edit(NULL); } } LightOccluder2DEditorPlugin::LightOccluder2DEditorPlugin(EditorNode *p_node) { editor = p_node; - collision_polygon_editor = memnew(LightOccluder2DEditor(p_node)); - CanvasItemEditor::get_singleton()->add_control_to_menu_panel(collision_polygon_editor); + light_occluder_editor = memnew(LightOccluder2DEditor(p_node)); + CanvasItemEditor::get_singleton()->add_control_to_menu_panel(light_occluder_editor); - collision_polygon_editor->hide(); + light_occluder_editor->hide(); } LightOccluder2DEditorPlugin::~LightOccluder2DEditorPlugin() { diff --git a/editor/plugins/light_occluder_2d_editor_plugin.h b/editor/plugins/light_occluder_2d_editor_plugin.h index b270dcb6e5..068832d8ed 100644 --- a/editor/plugins/light_occluder_2d_editor_plugin.h +++ b/editor/plugins/light_occluder_2d_editor_plugin.h @@ -72,7 +72,6 @@ class LightOccluder2DEditor : public HBoxContainer { ConfirmationDialog *create_poly; void _wip_close(bool p_closed); - void _canvas_draw(); void _menu_option(int p_option); void _create_poly(); @@ -83,6 +82,7 @@ protected: public: Vector2 snap_point(const Vector2 &p_point) const; + void forward_draw_over_canvas(Control *p_canvas); bool forward_gui_input(const Ref<InputEvent> &p_event); void edit(Node *p_collision_polygon); LightOccluder2DEditor(EditorNode *p_editor); @@ -92,11 +92,12 @@ class LightOccluder2DEditorPlugin : public EditorPlugin { GDCLASS(LightOccluder2DEditorPlugin, EditorPlugin); - LightOccluder2DEditor *collision_polygon_editor; + LightOccluder2DEditor *light_occluder_editor; EditorNode *editor; public: - virtual bool forward_canvas_gui_input(const Transform2D &p_canvas_xform, const Ref<InputEvent> &p_event) { return collision_polygon_editor->forward_gui_input(p_event); } + virtual bool forward_canvas_gui_input(const Ref<InputEvent> &p_event) { return light_occluder_editor->forward_gui_input(p_event); } + virtual void forward_draw_over_canvas(Control *p_canvas) { return light_occluder_editor->forward_draw_over_canvas(p_canvas); } virtual String get_name() const { return "LightOccluder2D"; } bool has_main_screen() const { return false; } diff --git a/editor/plugins/line_2d_editor_plugin.cpp b/editor/plugins/line_2d_editor_plugin.cpp index 84620a75a5..0533aaa9c0 100644 --- a/editor/plugins/line_2d_editor_plugin.cpp +++ b/editor/plugins/line_2d_editor_plugin.cpp @@ -54,19 +54,13 @@ void Line2DEditor::_notification(int p_what) { } } -Vector2 Line2DEditor::mouse_to_local_pos(Vector2 gpos, bool alt) { - Transform2D xform = canvas_item_editor->get_canvas_transform() * node->get_global_transform(); - return !alt ? canvas_item_editor->snap_point(xform.affine_inverse().xform(gpos)) : node->get_global_transform().affine_inverse().xform(canvas_item_editor->snap_point(canvas_item_editor->get_canvas_transform().affine_inverse().xform(gpos))); -} - -int Line2DEditor::get_point_index_at(Vector2 gpos) { +int Line2DEditor::get_point_index_at(const Transform2D &xform, Vector2 gpos) { ERR_FAIL_COND_V(node == 0, -1); real_t grab_threshold = EDITOR_DEF("editors/poly_editor/point_grab_radius", 8); - Transform2D xform = canvas_item_editor->get_canvas_transform() * node->get_global_transform(); for (int i = 0; i < node->get_point_count(); ++i) { - Point2 p = xform.xform(node->get_point_pos(i)); + Point2 p = xform.xform(node->get_point_position(i)); if (gpos.distance_to(p) < grab_threshold) { return i; } @@ -75,7 +69,7 @@ int Line2DEditor::get_point_index_at(Vector2 gpos) { return -1; } -bool Line2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) { +bool Line2DEditor::forward_canvas_gui_input(const Ref<InputEvent> &p_event) { if (!node) return false; @@ -88,20 +82,20 @@ bool Line2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) { if (mb.is_valid()) { Vector2 gpoint = mb->get_position(); - Vector2 cpoint = mouse_to_local_pos(gpoint, mb->get_alt()); + Vector2 cpoint = node->get_global_transform().affine_inverse().xform(canvas_item_editor->snap_point(canvas_item_editor->get_canvas_transform().affine_inverse().xform(mb->get_position()))); if (mb->is_pressed() && _dragging == false) { - int i = get_point_index_at(gpoint); + int i = get_point_index_at(canvas_item_editor->get_canvas_transform() * node->get_global_transform(), gpoint); if (i != -1) { if (mb->get_button_index() == BUTTON_LEFT && !mb->get_shift() && mode == MODE_EDIT) { _dragging = true; action_point = i; - moving_from = node->get_point_pos(i); + moving_from = node->get_point_position(i); moving_screen_from = gpoint; } else if ((mb->get_button_index() == BUTTON_RIGHT && mode == MODE_EDIT) || (mb->get_button_index() == BUTTON_LEFT && mode == MODE_DELETE)) { undo_redo->create_action(TTR("Remove Point from Line2D")); undo_redo->add_do_method(node, "remove_point", i); - undo_redo->add_undo_method(node, "add_point", node->get_point_pos(i), i); + undo_redo->add_undo_method(node, "add_point", node->get_point_position(i), i); undo_redo->add_do_method(canvas_item_editor->get_viewport_control(), "update"); undo_redo->add_undo_method(canvas_item_editor->get_viewport_control(), "update"); undo_redo->commit_action(); @@ -121,7 +115,7 @@ bool Line2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) { _dragging = true; action_point = node->get_point_count() - 1; - moving_from = node->get_point_pos(action_point); + moving_from = node->get_point_position(action_point); moving_screen_from = gpoint; canvas_item_editor->get_viewport_control()->update(); @@ -131,8 +125,8 @@ bool Line2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) { if (!mb->is_pressed() && mb->get_button_index() == BUTTON_LEFT && _dragging) { undo_redo->create_action(TTR("Move Point in Line2D")); - undo_redo->add_do_method(node, "set_point_pos", action_point, cpoint); - undo_redo->add_undo_method(node, "set_point_pos", action_point, moving_from); + undo_redo->add_do_method(node, "set_point_position", action_point, cpoint); + undo_redo->add_undo_method(node, "set_point_position", action_point, moving_from); undo_redo->add_do_method(canvas_item_editor->get_viewport_control(), "update"); undo_redo->add_undo_method(canvas_item_editor->get_viewport_control(), "update"); undo_redo->commit_action(); @@ -146,8 +140,9 @@ bool Line2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) { if (mm.is_valid()) { if (_dragging) { - Vector2 cpoint = mouse_to_local_pos(mm->get_position(), mm->get_alt()); - node->set_point_pos(action_point, cpoint); + Vector2 gpoint = mm->get_position(); + Vector2 cpoint = node->get_global_transform().affine_inverse().xform(canvas_item_editor->snap_point(canvas_item_editor->get_canvas_transform().affine_inverse().xform(mm->get_position()))); + node->set_point_position(action_point, cpoint); canvas_item_editor->get_viewport_control()->update(); return true; } @@ -156,7 +151,7 @@ bool Line2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) { return false; } -void Line2DEditor::_canvas_draw() { +void Line2DEditor::forward_draw_over_canvas(Control *p_canvas) { if (!node) return; @@ -172,7 +167,7 @@ void Line2DEditor::_canvas_draw() { Control *vpc = canvas_item_editor->get_viewport_control(); for (int i = 0; i < len; ++i) { - Vector2 point = xform.xform(node->get_point_pos(i)); + Vector2 point = xform.xform(node->get_point_position(i)); vpc->draw_texture_rect(handle, Rect2(point - handle_size * 0.5, handle_size), false); } } @@ -190,13 +185,9 @@ void Line2DEditor::edit(Node *p_line2d) { if (p_line2d) { node = Object::cast_to<Line2D>(p_line2d); - if (!canvas_item_editor->get_viewport_control()->is_connected("draw", this, "_canvas_draw")) - canvas_item_editor->get_viewport_control()->connect("draw", this, "_canvas_draw"); if (!node->is_connected("visibility_changed", this, "_node_visibility_changed")) node->connect("visibility_changed", this, "_node_visibility_changed"); } else { - if (canvas_item_editor->get_viewport_control()->is_connected("draw", this, "_canvas_draw")) - canvas_item_editor->get_viewport_control()->disconnect("draw", this, "_canvas_draw"); // node may have been deleted at this point if (node && node->is_connected("visibility_changed", this, "_node_visibility_changed")) node->disconnect("visibility_changed", this, "_node_visibility_changed"); @@ -205,7 +196,6 @@ void Line2DEditor::edit(Node *p_line2d) { } void Line2DEditor::_bind_methods() { - ClassDB::bind_method(D_METHOD("_canvas_draw"), &Line2DEditor::_canvas_draw); ClassDB::bind_method(D_METHOD("_node_visibility_changed"), &Line2DEditor::_node_visibility_changed); ClassDB::bind_method(D_METHOD("_mode_selected"), &Line2DEditor::_mode_selected); } diff --git a/editor/plugins/line_2d_editor_plugin.h b/editor/plugins/line_2d_editor_plugin.h index dea0433084..6858680aed 100644 --- a/editor/plugins/line_2d_editor_plugin.h +++ b/editor/plugins/line_2d_editor_plugin.h @@ -40,27 +40,11 @@ class CanvasItemEditor; class Line2DEditor : public HBoxContainer { GDCLASS(Line2DEditor, HBoxContainer) - -public: - bool forward_gui_input(const Ref<InputEvent> &p_event); - void edit(Node *p_line2d); - Line2DEditor(EditorNode *p_editor); - -protected: - void _node_removed(Node *p_node); - void _notification(int p_what); - - Vector2 mouse_to_local_pos(Vector2 mpos); - - static void _bind_methods(); - private: void _mode_selected(int p_mode); - void _canvas_draw(); void _node_visibility_changed(); - int get_point_index_at(Vector2 gpos); - Vector2 mouse_to_local_pos(Vector2 gpos, bool alt); + int get_point_index_at(const Transform2D &xform, Vector2 gpos); UndoRedo *undo_redo; @@ -86,17 +70,26 @@ private: int action_point; Point2 moving_from; Point2 moving_screen_from; + +protected: + void _node_removed(Node *p_node); + void _notification(int p_what); + + static void _bind_methods(); + +public: + bool forward_canvas_gui_input(const Ref<InputEvent> &p_event); + void forward_draw_over_canvas(Control *p_canvas); + void edit(Node *p_line2d); + Line2DEditor(EditorNode *p_editor); }; class Line2DEditorPlugin : public EditorPlugin { GDCLASS(Line2DEditorPlugin, EditorPlugin) public: - virtual bool forward_canvas_gui_input( - const Transform2D &p_canvas_xform, - const Ref<InputEvent> &p_event) { - return line2d_editor->forward_gui_input(p_event); - } + virtual bool forward_canvas_gui_input(const Ref<InputEvent> &p_event) { return line2d_editor->forward_canvas_gui_input(p_event); } + virtual void forward_draw_over_canvas(Control *p_canvas) { return line2d_editor->forward_draw_over_canvas(p_canvas); } virtual String get_name() const { return "Line2D"; } bool has_main_screen() const { return false; } diff --git a/editor/plugins/material_editor_plugin.cpp b/editor/plugins/material_editor_plugin.cpp index d2767bf1b2..bd4891ccb7 100644 --- a/editor/plugins/material_editor_plugin.cpp +++ b/editor/plugins/material_editor_plugin.cpp @@ -30,8 +30,11 @@ // FIXME: Disabled as (according to reduz) users were complaining that it gets in the way // Waiting for PropertyEditor rewrite (planned for 3.1) to be refactored. -#if 0 + #include "material_editor_plugin.h" +#include "scene/3d/particles.h" + +#if 0 #include "scene/main/viewport.h" @@ -42,7 +45,7 @@ void MaterialEditor::_gui_input(InputEvent p_event) { void MaterialEditor::_notification(int p_what) { - if (p_what==NOTIFICATION_FIXED_PROCESS) { + if (p_what==NOTIFICATION_PHYSICS_PROCESS) { } @@ -335,7 +338,7 @@ MaterialEditor::MaterialEditor() { HBoxContainer *hb = memnew( HBoxContainer ); add_child(hb); - hb->set_area_as_parent_rect(2); + hb->set_anchors_and_margins_preset(Control::PRESET_WIDE, Control::PRESET_MODE_MINSIZE, 2); VBoxContainer *vb_shape = memnew( VBoxContainer ); hb->add_child(vb_shape); @@ -416,3 +419,87 @@ MaterialEditorPlugin::~MaterialEditorPlugin() } #endif + +String SpatialMaterialConversionPlugin::converts_to() const { + + return "ShaderMaterial"; +} +bool SpatialMaterialConversionPlugin::handles(const Ref<Resource> &p_resource) const { + + Ref<SpatialMaterial> mat = p_resource; + return mat.is_valid(); +} +Ref<Resource> SpatialMaterialConversionPlugin::convert(const Ref<Resource> &p_resource) { + + Ref<SpatialMaterial> mat = p_resource; + ERR_FAIL_COND_V(!mat.is_valid(), Ref<Resource>()); + + Ref<ShaderMaterial> smat; + smat.instance(); + + Ref<Shader> shader; + shader.instance(); + + String code = VS::get_singleton()->shader_get_code(mat->get_shader_rid()); + + shader->set_code(code); + + smat->set_shader(shader); + + List<PropertyInfo> params; + VS::get_singleton()->shader_get_param_list(mat->get_shader_rid(), ¶ms); + + for (List<PropertyInfo>::Element *E = params.front(); E; E = E->next()) { + + // Texture parameter has to be treated specially since SpatialMaterial saved it + // as RID but ShaderMaterial needs Texture itself + Ref<Texture> texture = mat->get_texture_by_name(E->get().name); + if (texture.is_valid()) { + smat->set_shader_param(E->get().name, texture); + } else { + Variant value = VS::get_singleton()->material_get_param(mat->get_rid(), E->get().name); + smat->set_shader_param(E->get().name, value); + } + } + + smat->set_render_priority(mat->get_render_priority()); + return smat; +} + +String ParticlesMaterialConversionPlugin::converts_to() const { + + return "ShaderMaterial"; +} +bool ParticlesMaterialConversionPlugin::handles(const Ref<Resource> &p_resource) const { + + Ref<ParticlesMaterial> mat = p_resource; + return mat.is_valid(); +} +Ref<Resource> ParticlesMaterialConversionPlugin::convert(const Ref<Resource> &p_resource) { + + Ref<ParticlesMaterial> mat = p_resource; + ERR_FAIL_COND_V(!mat.is_valid(), Ref<Resource>()); + + Ref<ShaderMaterial> smat; + smat.instance(); + + Ref<Shader> shader; + shader.instance(); + + String code = VS::get_singleton()->shader_get_code(mat->get_shader_rid()); + + shader->set_code(code); + + smat->set_shader(shader); + + List<PropertyInfo> params; + VS::get_singleton()->shader_get_param_list(mat->get_shader_rid(), ¶ms); + + for (List<PropertyInfo>::Element *E = params.front(); E; E = E->next()) { + Variant value = VS::get_singleton()->material_get_param(mat->get_rid(), E->get().name); + smat->set_shader_param(E->get().name, value); + } + + smat->set_render_priority(mat->get_render_priority()); + return smat; +} diff --git a/editor/plugins/material_editor_plugin.h b/editor/plugins/material_editor_plugin.h index 10d7997a52..52c73cb7d8 100644 --- a/editor/plugins/material_editor_plugin.h +++ b/editor/plugins/material_editor_plugin.h @@ -30,6 +30,7 @@ #ifndef MATERIAL_EDITOR_PLUGIN_H #define MATERIAL_EDITOR_PLUGIN_H +#include "editor/property_editor.h" // FIXME: Disabled as (according to reduz) users were complaining that it gets in the way // Waiting for PropertyEditor rewrite (planned for 3.1) to be refactored. #if 0 @@ -101,4 +102,21 @@ public: }; #endif + +class SpatialMaterialConversionPlugin : public EditorResourceConversionPlugin { + GDCLASS(SpatialMaterialConversionPlugin, EditorResourceConversionPlugin) +public: + virtual String converts_to() const; + virtual bool handles(const Ref<Resource> &p_resource) const; + virtual Ref<Resource> convert(const Ref<Resource> &p_resource); +}; + +class ParticlesMaterialConversionPlugin : public EditorResourceConversionPlugin { + GDCLASS(ParticlesMaterialConversionPlugin, EditorResourceConversionPlugin) +public: + virtual String converts_to() const; + virtual bool handles(const Ref<Resource> &p_resource) const; + virtual Ref<Resource> convert(const Ref<Resource> &p_resource); +}; + #endif // MATERIAL_EDITOR_PLUGIN_H diff --git a/editor/plugins/mesh_editor_plugin.cpp b/editor/plugins/mesh_editor_plugin.cpp index a77f022347..74618aecc2 100644 --- a/editor/plugins/mesh_editor_plugin.cpp +++ b/editor/plugins/mesh_editor_plugin.cpp @@ -47,7 +47,7 @@ void MeshEditor::_gui_input(Ref<InputEvent> p_event) { void MeshEditor::_notification(int p_what) { - if (p_what == NOTIFICATION_FIXED_PROCESS) { + if (p_what == NOTIFICATION_PHYSICS_PROCESS) { } if (p_what == NOTIFICATION_READY) { @@ -162,7 +162,7 @@ MeshEditor::MeshEditor() { HBoxContainer *hb = memnew(HBoxContainer); add_child(hb); - hb->set_area_as_parent_rect(2); + hb->set_anchors_and_margins_preset(Control::PRESET_WIDE, Control::PRESET_MODE_MINSIZE, 2); hb->add_spacer(); diff --git a/editor/plugins/navigation_mesh_generator.cpp b/editor/plugins/navigation_mesh_generator.cpp index 526db3a582..5d50e9c855 100644 --- a/editor/plugins/navigation_mesh_generator.cpp +++ b/editor/plugins/navigation_mesh_generator.cpp @@ -38,9 +38,11 @@ void NavigationMeshGenerator::_add_vertex(const Vector3 &p_vec3, Vector<float> & } void NavigationMeshGenerator::_add_mesh(const Ref<Mesh> &p_mesh, const Transform &p_xform, Vector<float> &p_verticies, Vector<int> &p_indices) { - int current_vertex_count = p_verticies.size() / 3; + int current_vertex_count = 0; for (int i = 0; i < p_mesh->get_surface_count(); i++) { + current_vertex_count = p_verticies.size() / 3; + if (p_mesh->surface_get_primitive_type(i) != Mesh::PRIMITIVE_TRIANGLES) continue; @@ -213,7 +215,7 @@ void NavigationMeshGenerator::_build_recast_navigation_mesh(Ref<NavigationMesh> ep->step(TTR("Eroding walkable area..."), 6); ERR_FAIL_COND(!rcErodeWalkableArea(&ctx, cfg.walkableRadius, *chf)); - ep->step(TTR("Partioning..."), 7); + ep->step(TTR("Partitioning..."), 7); if (p_nav_mesh->get_sample_partition_type() == NavigationMesh::SAMPLE_PARTITION_WATERSHED) { ERR_FAIL_COND(!rcBuildDistanceField(&ctx, *chf)); ERR_FAIL_COND(!rcBuildRegions(&ctx, *chf, 0, cfg.minRegionArea, cfg.mergeRegionArea)); diff --git a/editor/plugins/navigation_polygon_editor_plugin.cpp b/editor/plugins/navigation_polygon_editor_plugin.cpp index de8d4f9618..6560a8dac7 100644 --- a/editor/plugins/navigation_polygon_editor_plugin.cpp +++ b/editor/plugins/navigation_polygon_editor_plugin.cpp @@ -29,485 +29,101 @@ /*************************************************************************/ #include "navigation_polygon_editor_plugin.h" -#include "canvas_item_editor_plugin.h" -#include "editor/editor_settings.h" -#include "os/file_access.h" +Ref<NavigationPolygon> NavigationPolygonEditor::_ensure_navpoly() const { -void NavigationPolygonEditor::_notification(int p_what) { + Ref<NavigationPolygon> navpoly = node->get_navigation_polygon(); + if (!navpoly.is_valid()) { - switch (p_what) { - - case NOTIFICATION_READY: { - - button_create->set_icon(get_icon("Edit", "EditorIcons")); - button_edit->set_icon(get_icon("MovePoint", "EditorIcons")); - button_edit->set_pressed(true); - get_tree()->connect("node_removed", this, "_node_removed"); - create_nav->connect("confirmed", this, "_create_nav"); - - } break; - case NOTIFICATION_FIXED_PROCESS: { - - } break; + navpoly = Ref<NavigationPolygon>(memnew(NavigationPolygon)); + node->set_navigation_polygon(navpoly); } + return navpoly; } -void NavigationPolygonEditor::_node_removed(Node *p_node) { - if (p_node == node) { - node = NULL; - hide(); - canvas_item_editor->get_viewport_control()->update(); - } -} +Node2D *NavigationPolygonEditor::_get_node() const { -void NavigationPolygonEditor::_create_nav() { - - if (!node) - return; - - undo_redo->create_action(TTR("Create Navigation Polygon")); - undo_redo->add_do_method(node, "set_navigation_polygon", Ref<NavigationPolygon>(memnew(NavigationPolygon))); - undo_redo->add_undo_method(node, "set_navigation_polygon", Variant(REF())); - undo_redo->commit_action(); - _menu_option(MODE_CREATE); + return node; } -void NavigationPolygonEditor::_menu_option(int p_option) { +void NavigationPolygonEditor::_set_node(Node *p_polygon) { - switch (p_option) { - - case MODE_CREATE: { - - mode = MODE_CREATE; - button_create->set_pressed(true); - button_edit->set_pressed(false); - } break; - case MODE_EDIT: { - - mode = MODE_EDIT; - button_create->set_pressed(false); - button_edit->set_pressed(true); - } break; - } + node = Object::cast_to<NavigationPolygonInstance>(p_polygon); } -void NavigationPolygonEditor::_wip_close() { +int NavigationPolygonEditor::_get_polygon_count() const { - if (wip.size() >= 3) { - - undo_redo->create_action(TTR("Create Poly")); - undo_redo->add_undo_method(node->get_navigation_polygon().ptr(), "remove_outline", node->get_navigation_polygon()->get_outline_count()); - undo_redo->add_do_method(node->get_navigation_polygon().ptr(), "add_outline", wip); - undo_redo->add_do_method(node->get_navigation_polygon().ptr(), "make_polygons_from_outlines"); - undo_redo->add_undo_method(node->get_navigation_polygon().ptr(), "make_polygons_from_outlines"); - undo_redo->add_do_method(canvas_item_editor->get_viewport_control(), "update"); - undo_redo->add_undo_method(canvas_item_editor->get_viewport_control(), "update"); - undo_redo->commit_action(); - mode = MODE_EDIT; - button_edit->set_pressed(true); - button_create->set_pressed(false); - } - - wip.clear(); - wip_active = false; - edited_point = -1; + Ref<NavigationPolygon> navpoly = node->get_navigation_polygon(); + if (navpoly.is_valid()) + return navpoly->get_outline_count(); + else + return 0; } -bool NavigationPolygonEditor::forward_gui_input(const Ref<InputEvent> &p_event) { - - if (!node) - return false; - - if (node->get_navigation_polygon().is_null()) { - - Ref<InputEventMouseButton> mb = p_event; - - if (mb.is_valid() && mb->get_button_index() == 1 && mb->is_pressed()) { - create_nav->set_text("No NavigationPolygon resource on this node.\nCreate and assign one?"); - create_nav->popup_centered_minsize(); - } - return (mb.is_valid() && mb->get_button_index() == 1); - } - - Ref<InputEventMouseButton> mb = p_event; - - if (mb.is_valid()) { - - Transform2D xform = canvas_item_editor->get_canvas_transform() * node->get_global_transform(); - - Vector2 gpoint = mb->get_position(); - Vector2 cpoint = canvas_item_editor->get_canvas_transform().affine_inverse().xform(gpoint); - cpoint = canvas_item_editor->snap_point(cpoint); - cpoint = node->get_global_transform().affine_inverse().xform(cpoint); - - //first check if a point is to be added (segment split) - real_t grab_threshold = EDITOR_DEF("editors/poly_editor/point_grab_radius", 8); - - switch (mode) { - - case MODE_CREATE: { - - if (mb->get_button_index() == BUTTON_LEFT && mb->is_pressed()) { - - if (!wip_active) { - - wip.clear(); - wip.push_back(cpoint); - wip_active = true; - edited_point_pos = cpoint; - edited_outline = -1; - canvas_item_editor->get_viewport_control()->update(); - edited_point = 1; - return true; - } else { - - if (wip.size() > 1 && xform.xform(wip[0]).distance_to(gpoint) < grab_threshold) { - //wip closed - _wip_close(); - - return true; - } else { - - wip.push_back(cpoint); - edited_point = wip.size(); - canvas_item_editor->get_viewport_control()->update(); - return true; - - //add wip point - } - } - } else if (mb->get_button_index() == BUTTON_RIGHT && mb->is_pressed() && wip_active) { - _wip_close(); - } - - } break; - - case MODE_EDIT: { - - if (mb->get_button_index() == BUTTON_LEFT) { - if (mb->is_pressed()) { - - if (mb->get_control()) { - - //search edges - int closest_outline = -1; - int closest_idx = -1; - Vector2 closest_pos; - real_t closest_dist = 1e10; - - for (int j = 0; j < node->get_navigation_polygon()->get_outline_count(); j++) { - - PoolVector<Vector2> points = node->get_navigation_polygon()->get_outline(j); - - int pc = points.size(); - PoolVector<Vector2>::Read poly = points.read(); - - for (int i = 0; i < pc; i++) { - - Vector2 points[2] = { xform.xform(poly[i]), - xform.xform(poly[(i + 1) % pc]) }; - - Vector2 cp = Geometry::get_closest_point_to_segment_2d(gpoint, points); - if (cp.distance_squared_to(points[0]) < CMP_EPSILON2 || cp.distance_squared_to(points[1]) < CMP_EPSILON2) - continue; //not valid to reuse point - - real_t d = cp.distance_to(gpoint); - if (d < closest_dist && d < grab_threshold) { - closest_dist = d; - closest_outline = j; - closest_pos = cp; - closest_idx = i; - } - } - } - - if (closest_idx >= 0) { - - pre_move_edit = node->get_navigation_polygon()->get_outline(closest_outline); - PoolVector<Point2> poly = pre_move_edit; - poly.insert(closest_idx + 1, xform.affine_inverse().xform(closest_pos)); - edited_point = closest_idx + 1; - edited_outline = closest_outline; - edited_point_pos = xform.affine_inverse().xform(closest_pos); - node->get_navigation_polygon()->set_outline(closest_outline, poly); - canvas_item_editor->get_viewport_control()->update(); - return true; - } - } else { - - //look for points to move - int closest_outline = -1; - int closest_idx = -1; - Vector2 closest_pos; - real_t closest_dist = 1e10; - - for (int j = 0; j < node->get_navigation_polygon()->get_outline_count(); j++) { - - PoolVector<Vector2> points = node->get_navigation_polygon()->get_outline(j); - - int pc = points.size(); - PoolVector<Vector2>::Read poly = points.read(); +Variant NavigationPolygonEditor::_get_polygon(int p_idx) const { - for (int i = 0; i < pc; i++) { - - Vector2 cp = xform.xform(poly[i]); - - real_t d = cp.distance_to(gpoint); - if (d < closest_dist && d < grab_threshold) { - closest_dist = d; - closest_pos = cp; - closest_outline = j; - closest_idx = i; - } - } - } - - if (closest_idx >= 0) { - - pre_move_edit = node->get_navigation_polygon()->get_outline(closest_outline); - edited_point = closest_idx; - edited_outline = closest_outline; - edited_point_pos = xform.affine_inverse().xform(closest_pos); - canvas_item_editor->get_viewport_control()->update(); - return true; - } - } - } else { - - if (edited_point != -1) { - - //apply - - PoolVector<Vector2> poly = node->get_navigation_polygon()->get_outline(edited_outline); - ERR_FAIL_INDEX_V(edited_point, poly.size(), false); - poly.set(edited_point, edited_point_pos); - undo_redo->create_action(TTR("Edit Poly")); - undo_redo->add_do_method(node->get_navigation_polygon().ptr(), "set_outline", edited_outline, poly); - undo_redo->add_undo_method(node->get_navigation_polygon().ptr(), "set_outline", edited_outline, pre_move_edit); - undo_redo->add_do_method(node->get_navigation_polygon().ptr(), "make_polygons_from_outlines"); - undo_redo->add_undo_method(node->get_navigation_polygon().ptr(), "make_polygons_from_outlines"); - undo_redo->add_do_method(canvas_item_editor->get_viewport_control(), "update"); - undo_redo->add_undo_method(canvas_item_editor->get_viewport_control(), "update"); - undo_redo->commit_action(); - - edited_point = -1; - return true; - } - } - } else if (mb->get_button_index() == BUTTON_RIGHT && mb->is_pressed() && edited_point == -1) { - - int closest_outline = -1; - int closest_idx = -1; - Vector2 closest_pos; - real_t closest_dist = 1e10; - - for (int j = 0; j < node->get_navigation_polygon()->get_outline_count(); j++) { - - PoolVector<Vector2> points = node->get_navigation_polygon()->get_outline(j); - - int pc = points.size(); - PoolVector<Vector2>::Read poly = points.read(); - - for (int i = 0; i < pc; i++) { - - Vector2 cp = xform.xform(poly[i]); - - real_t d = cp.distance_to(gpoint); - if (d < closest_dist && d < grab_threshold) { - closest_dist = d; - closest_pos = cp; - closest_outline = j; - closest_idx = i; - } - } - } - - if (closest_idx >= 0) { - - PoolVector<Vector2> poly = node->get_navigation_polygon()->get_outline(closest_outline); - - if (poly.size() > 3) { - undo_redo->create_action(TTR("Edit Poly (Remove Point)")); - undo_redo->add_undo_method(node->get_navigation_polygon().ptr(), "set_outline", closest_outline, poly); - poly.remove(closest_idx); - undo_redo->add_do_method(node->get_navigation_polygon().ptr(), "set_outline", closest_outline, poly); - undo_redo->add_do_method(node->get_navigation_polygon().ptr(), "make_polygons_from_outlines"); - undo_redo->add_undo_method(node->get_navigation_polygon().ptr(), "make_polygons_from_outlines"); - undo_redo->add_do_method(canvas_item_editor->get_viewport_control(), "update"); - undo_redo->add_undo_method(canvas_item_editor->get_viewport_control(), "update"); - undo_redo->commit_action(); - } else { - - undo_redo->create_action(TTR("Remove Poly And Point")); - undo_redo->add_undo_method(node->get_navigation_polygon().ptr(), "add_outline_at_index", poly, closest_outline); - poly.remove(closest_idx); - undo_redo->add_do_method(node->get_navigation_polygon().ptr(), "remove_outline", closest_outline); - undo_redo->add_do_method(node->get_navigation_polygon().ptr(), "make_polygons_from_outlines"); - undo_redo->add_undo_method(node->get_navigation_polygon().ptr(), "make_polygons_from_outlines"); - undo_redo->add_do_method(canvas_item_editor->get_viewport_control(), "update"); - undo_redo->add_undo_method(canvas_item_editor->get_viewport_control(), "update"); - undo_redo->commit_action(); - } - return true; - } - } - - } break; - } - } - - Ref<InputEventMouseMotion> mm = p_event; - - if (mm.is_valid()) { - - if (edited_point != -1 && (wip_active || mm->get_button_mask() & BUTTON_MASK_LEFT)) { - - Vector2 gpoint = mm->get_position(); - Vector2 cpoint = canvas_item_editor->get_canvas_transform().affine_inverse().xform(gpoint); - cpoint = canvas_item_editor->snap_point(cpoint); - edited_point_pos = node->get_global_transform().affine_inverse().xform(cpoint); - - canvas_item_editor->get_viewport_control()->update(); - } - } - - return false; + Ref<NavigationPolygon> navpoly = node->get_navigation_polygon(); + if (navpoly.is_valid()) + return navpoly->get_outline(p_idx); + else + return Variant(Vector<Vector2>()); } -void NavigationPolygonEditor::_canvas_draw() { - if (!node) - return; +void NavigationPolygonEditor::_set_polygon(int p_idx, const Variant &p_polygon) const { - Control *vpc = canvas_item_editor->get_viewport_control(); - if (node->get_navigation_polygon().is_null()) - return; - - Transform2D xform = canvas_item_editor->get_canvas_transform() * node->get_global_transform(); - Ref<Texture> handle = get_icon("EditorHandle", "EditorIcons"); - - for (int j = -1; j < node->get_navigation_polygon()->get_outline_count(); j++) { - Vector<Vector2> poly; - - if (wip_active && j == edited_outline) { - poly = wip; - } else { - if (j == -1) - continue; - poly = Variant(node->get_navigation_polygon()->get_outline(j)); - } - - for (int i = 0; i < poly.size(); i++) { - - Vector2 p, p2; - p = (j == edited_outline && i == edited_point) ? edited_point_pos : poly[i]; - if (j == edited_outline && ((wip_active && i == poly.size() - 1) || (((i + 1) % poly.size()) == edited_point))) - p2 = edited_point_pos; - else - p2 = poly[(i + 1) % poly.size()]; - - Vector2 point = xform.xform(p); - Vector2 next_point = xform.xform(p2); - - Color col = Color(1, 0.3, 0.1, 0.8); - vpc->draw_line(point, next_point, col, 2); - vpc->draw_texture(handle, point - handle->get_size() * 0.5); - } - } + Ref<NavigationPolygon> navpoly = _ensure_navpoly(); + navpoly->set_outline(p_idx, p_polygon); + navpoly->make_polygons_from_outlines(); } -void NavigationPolygonEditor::edit(Node *p_collision_polygon) { - - if (!canvas_item_editor) { - canvas_item_editor = CanvasItemEditor::get_singleton(); - } - - if (p_collision_polygon) { +void NavigationPolygonEditor::_action_add_polygon(const Variant &p_polygon) { - node = Object::cast_to<NavigationPolygonInstance>(p_collision_polygon); - //Enable the pencil tool if the polygon is empty - if (!node->get_navigation_polygon().is_null()) { - if (node->get_navigation_polygon()->get_polygon_count() == 0) - _menu_option(MODE_CREATE); - } - if (!canvas_item_editor->get_viewport_control()->is_connected("draw", this, "_canvas_draw")) - canvas_item_editor->get_viewport_control()->connect("draw", this, "_canvas_draw"); - wip.clear(); - wip_active = false; - edited_point = -1; - canvas_item_editor->get_viewport_control()->update(); - - } else { - node = NULL; - - if (canvas_item_editor->get_viewport_control()->is_connected("draw", this, "_canvas_draw")) - canvas_item_editor->get_viewport_control()->disconnect("draw", this, "_canvas_draw"); - } + Ref<NavigationPolygon> navpoly = _ensure_navpoly(); + undo_redo->add_do_method(navpoly.ptr(), "add_outline", p_polygon); + undo_redo->add_undo_method(navpoly.ptr(), "remove_outline", navpoly->get_outline_count()); + undo_redo->add_do_method(navpoly.ptr(), "make_polygons_from_outlines"); + undo_redo->add_undo_method(navpoly.ptr(), "make_polygons_from_outlines"); } -void NavigationPolygonEditor::_bind_methods() { +void NavigationPolygonEditor::_action_remove_polygon(int p_idx) { - ClassDB::bind_method(D_METHOD("_menu_option"), &NavigationPolygonEditor::_menu_option); - ClassDB::bind_method(D_METHOD("_canvas_draw"), &NavigationPolygonEditor::_canvas_draw); - ClassDB::bind_method(D_METHOD("_node_removed"), &NavigationPolygonEditor::_node_removed); - ClassDB::bind_method(D_METHOD("_create_nav"), &NavigationPolygonEditor::_create_nav); + Ref<NavigationPolygon> navpoly = _ensure_navpoly(); + undo_redo->add_do_method(navpoly.ptr(), "remove_outline", p_idx); + undo_redo->add_undo_method(navpoly.ptr(), "add_outline_at_index", navpoly->get_outline(p_idx), p_idx); + undo_redo->add_do_method(navpoly.ptr(), "make_polygons_from_outlines"); + undo_redo->add_undo_method(navpoly.ptr(), "make_polygons_from_outlines"); } -NavigationPolygonEditor::NavigationPolygonEditor(EditorNode *p_editor) { - node = NULL; - canvas_item_editor = NULL; - editor = p_editor; - undo_redo = editor->get_undo_redo(); +void NavigationPolygonEditor::_action_set_polygon(int p_idx, const Variant &p_previous, const Variant &p_polygon) { - add_child(memnew(VSeparator)); - button_create = memnew(ToolButton); - add_child(button_create); - button_create->connect("pressed", this, "_menu_option", varray(MODE_CREATE)); - button_create->set_toggle_mode(true); - button_create->set_tooltip(TTR("Create a new polygon from scratch.")); - - button_edit = memnew(ToolButton); - add_child(button_edit); - button_edit->connect("pressed", this, "_menu_option", varray(MODE_EDIT)); - button_edit->set_toggle_mode(true); - button_edit->set_tooltip(TTR("Edit existing polygon:") + "\n" + TTR("LMB: Move Point.") + "\n" + TTR("Ctrl+LMB: Split Segment.") + "\n" + TTR("RMB: Erase Point.")); - create_nav = memnew(ConfirmationDialog); - add_child(create_nav); - create_nav->get_ok()->set_text(TTR("Create")); - - mode = MODE_EDIT; - wip_active = false; - edited_outline = -1; + Ref<NavigationPolygon> navpoly = _ensure_navpoly(); + undo_redo->add_do_method(navpoly.ptr(), "set_outline", p_idx, p_polygon); + undo_redo->add_undo_method(navpoly.ptr(), "set_outline", p_idx, p_previous); + undo_redo->add_do_method(navpoly.ptr(), "make_polygons_from_outlines"); + undo_redo->add_undo_method(navpoly.ptr(), "make_polygons_from_outlines"); } -void NavigationPolygonEditorPlugin::edit(Object *p_object) { +bool NavigationPolygonEditor::_has_resource() const { - collision_polygon_editor->edit(Object::cast_to<Node>(p_object)); + return node && node->get_navigation_polygon().is_valid(); } -bool NavigationPolygonEditorPlugin::handles(Object *p_object) const { - - return p_object->is_class("NavigationPolygonInstance"); -} +void NavigationPolygonEditor::_create_resource() { -void NavigationPolygonEditorPlugin::make_visible(bool p_visible) { + if (!node) + return; - if (p_visible) { - collision_polygon_editor->show(); - } else { + undo_redo->create_action(TTR("Create Navigation Polygon")); + undo_redo->add_do_method(node, "set_navigation_polygon", Ref<NavigationPolygon>(memnew(NavigationPolygon))); + undo_redo->add_undo_method(node, "set_navigation_polygon", Variant(REF())); + undo_redo->commit_action(); - collision_polygon_editor->hide(); - collision_polygon_editor->edit(NULL); - } + _menu_option(MODE_CREATE); } -NavigationPolygonEditorPlugin::NavigationPolygonEditorPlugin(EditorNode *p_node) { - - editor = p_node; - collision_polygon_editor = memnew(NavigationPolygonEditor(p_node)); - CanvasItemEditor::get_singleton()->add_control_to_menu_panel(collision_polygon_editor); - - collision_polygon_editor->hide(); +NavigationPolygonEditor::NavigationPolygonEditor(EditorNode *p_editor) + : AbstractPolygon2DEditor(p_editor) { } -NavigationPolygonEditorPlugin::~NavigationPolygonEditorPlugin() { +NavigationPolygonEditorPlugin::NavigationPolygonEditorPlugin(EditorNode *p_node) + : AbstractPolygon2DEditorPlugin(p_node, memnew(NavigationPolygonEditor(p_node)), "NavigationPolygonInstance") { } diff --git a/editor/plugins/navigation_polygon_editor_plugin.h b/editor/plugins/navigation_polygon_editor_plugin.h index 7dd555e9c9..54cc347a8c 100644 --- a/editor/plugins/navigation_polygon_editor_plugin.h +++ b/editor/plugins/navigation_polygon_editor_plugin.h @@ -30,83 +30,45 @@ #ifndef NAVIGATIONPOLYGONEDITORPLUGIN_H #define NAVIGATIONPOLYGONEDITORPLUGIN_H -#include "editor/editor_node.h" -#include "editor/editor_plugin.h" +#include "editor/plugins/abstract_polygon_2d_editor.h" #include "scene/2d/navigation_polygon.h" -#include "scene/gui/tool_button.h" /** @author Juan Linietsky <reduzio@gmail.com> */ -class CanvasItemEditor; +class NavigationPolygonEditor : public AbstractPolygon2DEditor { -class NavigationPolygonEditor : public HBoxContainer { + GDCLASS(NavigationPolygonEditor, AbstractPolygon2DEditor); - GDCLASS(NavigationPolygonEditor, HBoxContainer); - - UndoRedo *undo_redo; - enum Mode { - - MODE_CREATE, - MODE_EDIT, - - }; - - Mode mode; - - ToolButton *button_create; - ToolButton *button_edit; - - ConfirmationDialog *create_nav; - - CanvasItemEditor *canvas_item_editor; - EditorNode *editor; - Panel *panel; NavigationPolygonInstance *node; - MenuButton *options; - int edited_outline; - int edited_point; - Vector2 edited_point_pos; - PoolVector<Vector2> pre_move_edit; - Vector<Vector2> wip; - bool wip_active; + Ref<NavigationPolygon> _ensure_navpoly() const; - void _wip_close(); - void _canvas_draw(); - void _create_nav(); +protected: + virtual Node2D *_get_node() const; + virtual void _set_node(Node *p_polygon); - void _menu_option(int p_option); + virtual int _get_polygon_count() const; + virtual Variant _get_polygon(int p_idx) const; + virtual void _set_polygon(int p_idx, const Variant &p_polygon) const; -protected: - void _notification(int p_what); - void _node_removed(Node *p_node); - static void _bind_methods(); + virtual void _action_add_polygon(const Variant &p_polygon); + virtual void _action_remove_polygon(int p_idx); + virtual void _action_set_polygon(int p_idx, const Variant &p_previous, const Variant &p_polygon); + + virtual bool _has_resource() const; + virtual void _create_resource(); public: - bool forward_gui_input(const Ref<InputEvent> &p_event); - void edit(Node *p_collision_polygon); NavigationPolygonEditor(EditorNode *p_editor); }; -class NavigationPolygonEditorPlugin : public EditorPlugin { +class NavigationPolygonEditorPlugin : public AbstractPolygon2DEditorPlugin { - GDCLASS(NavigationPolygonEditorPlugin, EditorPlugin); - - NavigationPolygonEditor *collision_polygon_editor; - EditorNode *editor; + GDCLASS(NavigationPolygonEditorPlugin, AbstractPolygon2DEditorPlugin); public: - virtual bool forward_canvas_gui_input(const Transform2D &p_canvas_xform, const Ref<InputEvent> &p_event) { return collision_polygon_editor->forward_gui_input(p_event); } - - virtual String get_name() const { return "NavigationPolygonInstance"; } - bool has_main_screen() const { return false; } - virtual void edit(Object *p_object); - virtual bool handles(Object *p_object) const; - virtual void make_visible(bool p_visible); - NavigationPolygonEditorPlugin(EditorNode *p_node); - ~NavigationPolygonEditorPlugin(); }; #endif // NAVIGATIONPOLYGONEDITORPLUGIN_H diff --git a/editor/plugins/path_2d_editor_plugin.cpp b/editor/plugins/path_2d_editor_plugin.cpp index adc8d4f091..2174f08e23 100644 --- a/editor/plugins/path_2d_editor_plugin.cpp +++ b/editor/plugins/path_2d_editor_plugin.cpp @@ -46,7 +46,7 @@ void Path2DEditor::_notification(int p_what) { //button_edit->set_pressed(true); } break; - case NOTIFICATION_FIXED_PROCESS: { + case NOTIFICATION_PHYSICS_PROCESS: { } break; } @@ -76,10 +76,7 @@ bool Path2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) { Transform2D xform = canvas_item_editor->get_canvas_transform() * node->get_global_transform(); Vector2 gpoint = mb->get_position(); - Vector2 cpoint = - !mb->get_alt() ? - canvas_item_editor->snap_point(xform.affine_inverse().xform(gpoint)) : - node->get_global_transform().affine_inverse().xform(canvas_item_editor->snap_point(canvas_item_editor->get_canvas_transform().affine_inverse().xform(gpoint))); + Vector2 cpoint = node->get_global_transform().affine_inverse().xform(canvas_item_editor->snap_point(canvas_item_editor->get_canvas_transform().affine_inverse().xform(mb->get_position()))); real_t grab_threshold = EDITOR_DEF("editors/poly_editor/point_grab_radius", 8); @@ -89,9 +86,9 @@ bool Path2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) { for (int i = 0; i < curve->get_point_count(); i++) { - real_t dist_to_p = gpoint.distance_to(xform.xform(curve->get_point_pos(i))); - real_t dist_to_p_out = gpoint.distance_to(xform.xform(curve->get_point_pos(i) + curve->get_point_out(i))); - real_t dist_to_p_in = gpoint.distance_to(xform.xform(curve->get_point_pos(i) + curve->get_point_in(i))); + real_t dist_to_p = gpoint.distance_to(xform.xform(curve->get_point_position(i))); + real_t dist_to_p_out = gpoint.distance_to(xform.xform(curve->get_point_position(i) + curve->get_point_out(i))); + real_t dist_to_p_in = gpoint.distance_to(xform.xform(curve->get_point_position(i) + curve->get_point_in(i))); // Check for point movement start (for point + in/out controls). if (mb->get_button_index() == BUTTON_LEFT) { @@ -100,7 +97,7 @@ bool Path2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) { action = ACTION_MOVING_POINT; action_point = i; - moving_from = curve->get_point_pos(i); + moving_from = curve->get_point_position(i); moving_screen_from = gpoint; return true; } else if (mode == MODE_EDIT || mode == MODE_EDIT_CURVE) { @@ -129,7 +126,7 @@ bool Path2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) { undo_redo->create_action(TTR("Remove Point from Curve")); undo_redo->add_do_method(curve.ptr(), "remove_point", i); - undo_redo->add_undo_method(curve.ptr(), "add_point", curve->get_point_pos(i), curve->get_point_in(i), curve->get_point_out(i), i); + undo_redo->add_undo_method(curve.ptr(), "add_point", curve->get_point_position(i), curve->get_point_in(i), curve->get_point_out(i), i); undo_redo->add_do_method(canvas_item_editor->get_viewport_control(), "update"); undo_redo->add_undo_method(canvas_item_editor->get_viewport_control(), "update"); undo_redo->commit_action(); @@ -171,7 +168,7 @@ bool Path2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) { action = ACTION_MOVING_POINT; action_point = curve->get_point_count() - 1; - moving_from = curve->get_point_pos(action_point); + moving_from = curve->get_point_position(action_point); moving_screen_from = gpoint; canvas_item_editor->get_viewport_control()->update(); @@ -194,8 +191,8 @@ bool Path2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) { case ACTION_MOVING_POINT: { undo_redo->create_action(TTR("Move Point in Curve")); - undo_redo->add_do_method(curve.ptr(), "set_point_pos", action_point, cpoint); - undo_redo->add_undo_method(curve.ptr(), "set_point_pos", action_point, moving_from); + undo_redo->add_do_method(curve.ptr(), "set_point_position", action_point, cpoint); + undo_redo->add_undo_method(curve.ptr(), "set_point_position", action_point, moving_from); undo_redo->add_do_method(canvas_item_editor->get_viewport_control(), "update"); undo_redo->add_undo_method(canvas_item_editor->get_viewport_control(), "update"); undo_redo->commit_action(); @@ -239,10 +236,7 @@ bool Path2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) { // Handle point/control movement. Transform2D xform = canvas_item_editor->get_canvas_transform() * node->get_global_transform(); Vector2 gpoint = mm->get_position(); - Vector2 cpoint = - !mm->get_alt() ? - canvas_item_editor->snap_point(xform.affine_inverse().xform(gpoint)) : - node->get_global_transform().affine_inverse().xform(canvas_item_editor->snap_point(canvas_item_editor->get_canvas_transform().affine_inverse().xform(gpoint))); + Vector2 cpoint = node->get_global_transform().affine_inverse().xform(canvas_item_editor->snap_point(canvas_item_editor->get_canvas_transform().affine_inverse().xform(mm->get_position()))); Ref<Curve2D> curve = node->get_curve(); @@ -255,7 +249,7 @@ bool Path2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) { break; case ACTION_MOVING_POINT: { - curve->set_point_pos(action_point, cpoint); + curve->set_point_position(action_point, cpoint); } break; case ACTION_MOVING_IN: { @@ -274,7 +268,8 @@ bool Path2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) { return false; } -void Path2DEditor::_canvas_draw() { + +void Path2DEditor::forward_draw_over_canvas(Control *p_canvas) { if (!node) return; @@ -296,17 +291,17 @@ void Path2DEditor::_canvas_draw() { for (int i = 0; i < len; i++) { - Vector2 point = xform.xform(curve->get_point_pos(i)); + Vector2 point = xform.xform(curve->get_point_position(i)); vpc->draw_texture_rect(handle, Rect2(point - handle_size * 0.5, handle_size), false, Color(1, 1, 1, 1)); if (i < len - 1) { - Vector2 pointout = xform.xform(curve->get_point_pos(i) + curve->get_point_out(i)); + Vector2 pointout = xform.xform(curve->get_point_position(i) + curve->get_point_out(i)); vpc->draw_line(point, pointout, Color(0.5, 0.5, 1.0, 0.8), 1.0); vpc->draw_texture_rect(handle, Rect2(pointout - handle_size * 0.5, handle_size), false, Color(1, 0.5, 1, 0.3)); } if (i > 0) { - Vector2 pointin = xform.xform(curve->get_point_pos(i) + curve->get_point_in(i)); + Vector2 pointin = xform.xform(curve->get_point_position(i) + curve->get_point_in(i)); vpc->draw_line(point, pointin, Color(0.5, 0.5, 1.0, 0.8), 1.0); vpc->draw_texture_rect(handle, Rect2(pointin - handle_size * 0.5, handle_size), false, Color(1, 0.5, 1, 0.3)); } @@ -329,16 +324,11 @@ void Path2DEditor::edit(Node *p_path2d) { if (p_path2d) { node = Object::cast_to<Path2D>(p_path2d); - if (!canvas_item_editor->get_viewport_control()->is_connected("draw", this, "_canvas_draw")) - canvas_item_editor->get_viewport_control()->connect("draw", this, "_canvas_draw"); if (!node->is_connected("visibility_changed", this, "_node_visibility_changed")) node->connect("visibility_changed", this, "_node_visibility_changed"); } else { - if (canvas_item_editor->get_viewport_control()->is_connected("draw", this, "_canvas_draw")) - canvas_item_editor->get_viewport_control()->disconnect("draw", this, "_canvas_draw"); - // node may have been deleted at this point if (node && node->is_connected("visibility_changed", this, "_node_visibility_changed")) node->disconnect("visibility_changed", this, "_node_visibility_changed"); @@ -349,7 +339,6 @@ void Path2DEditor::edit(Node *p_path2d) { void Path2DEditor::_bind_methods() { //ClassDB::bind_method(D_METHOD("_menu_option"),&Path2DEditor::_menu_option); - ClassDB::bind_method(D_METHOD("_canvas_draw"), &Path2DEditor::_canvas_draw); ClassDB::bind_method(D_METHOD("_node_visibility_changed"), &Path2DEditor::_node_visibility_changed); ClassDB::bind_method(D_METHOD("_mode_selected"), &Path2DEditor::_mode_selected); } @@ -389,8 +378,8 @@ void Path2DEditor::_mode_selected(int p_mode) { if (node->get_curve()->get_point_count() < 3) return; - Vector2 begin = node->get_curve()->get_point_pos(0); - Vector2 end = node->get_curve()->get_point_pos(node->get_curve()->get_point_count() - 1); + Vector2 begin = node->get_curve()->get_point_position(0); + Vector2 end = node->get_curve()->get_point_position(node->get_curve()->get_point_count() - 1); if (begin.distance_to(end) < CMP_EPSILON) return; diff --git a/editor/plugins/path_2d_editor_plugin.h b/editor/plugins/path_2d_editor_plugin.h index f0f5d4d637..516e48c471 100644 --- a/editor/plugins/path_2d_editor_plugin.h +++ b/editor/plugins/path_2d_editor_plugin.h @@ -84,7 +84,6 @@ class Path2DEditor : public HBoxContainer { void _mode_selected(int p_mode); - void _canvas_draw(); void _node_visibility_changed(); friend class Path2DEditorPlugin; @@ -95,6 +94,7 @@ protected: public: bool forward_gui_input(const Ref<InputEvent> &p_event); + void forward_draw_over_canvas(Control *p_canvas); void edit(Node *p_path2d); Path2DEditor(EditorNode *p_editor); }; @@ -107,7 +107,8 @@ class Path2DEditorPlugin : public EditorPlugin { EditorNode *editor; public: - virtual bool forward_canvas_gui_input(const Transform2D &p_canvas_xform, const Ref<InputEvent> &p_event) { return path2d_editor->forward_gui_input(p_event); } + virtual bool forward_canvas_gui_input(const Ref<InputEvent> &p_event) { return path2d_editor->forward_gui_input(p_event); } + virtual void forward_draw_over_canvas(Control *p_canvas) { return path2d_editor->forward_draw_over_canvas(p_canvas); } virtual String get_name() const { return "Path2D"; } bool has_main_screen() const { return false; } diff --git a/editor/plugins/path_editor_plugin.cpp b/editor/plugins/path_editor_plugin.cpp index d0f2b19ed3..fa97c96614 100644 --- a/editor/plugins/path_editor_plugin.cpp +++ b/editor/plugins/path_editor_plugin.cpp @@ -64,7 +64,7 @@ Variant PathSpatialGizmo::get_handle_value(int p_idx) const { if (p_idx < c->get_point_count()) { - original = c->get_point_pos(p_idx); + original = c->get_point_position(p_idx); return original; } @@ -79,7 +79,7 @@ Variant PathSpatialGizmo::get_handle_value(int p_idx) const { else ofs = c->get_point_out(idx); - original = ofs + c->get_point_pos(idx); + original = ofs + c->get_point_position(idx); return ofs; } @@ -108,7 +108,7 @@ void PathSpatialGizmo::set_handle(int p_idx, Camera *p_camera, const Point2 &p_p } Vector3 local = gi.xform(inters); - c->set_point_pos(p_idx, local); + c->set_point_position(p_idx, local); } return; @@ -119,7 +119,7 @@ void PathSpatialGizmo::set_handle(int p_idx, Camera *p_camera, const Point2 &p_p int idx = p_idx / 2; int t = p_idx % 2; - Vector3 base = c->get_point_pos(idx); + Vector3 base = c->get_point_position(idx); Plane p(gt.xform(original), p_camera->get_transform().basis.get_axis(2)); @@ -148,12 +148,12 @@ void PathSpatialGizmo::commit_handle(int p_idx, const Variant &p_restore, bool p if (p_cancel) { - c->set_point_pos(p_idx, p_restore); + c->set_point_position(p_idx, p_restore); return; } - ur->create_action(TTR("Set Curve Point Pos")); - ur->add_do_method(c.ptr(), "set_point_pos", p_idx, c->get_point_pos(p_idx)); - ur->add_undo_method(c.ptr(), "set_point_pos", p_idx, p_restore); + ur->create_action(TTR("Set Curve Point Position")); + ur->add_do_method(c.ptr(), "set_point_position", p_idx, c->get_point_position(p_idx)); + ur->add_undo_method(c.ptr(), "set_point_position", p_idx, p_restore); ur->commit_action(); return; @@ -178,7 +178,7 @@ void PathSpatialGizmo::commit_handle(int p_idx, const Variant &p_restore, bool p c->set_point_in(p_idx, p_restore); return; } - ur->create_action(TTR("Set Curve In Pos")); + ur->create_action(TTR("Set Curve In Position")); ur->add_do_method(c.ptr(), "set_point_in", idx, c->get_point_in(idx)); ur->add_undo_method(c.ptr(), "set_point_in", idx, p_restore); ur->commit_action(); @@ -189,7 +189,7 @@ void PathSpatialGizmo::commit_handle(int p_idx, const Variant &p_restore, bool p c->set_point_out(idx, p_restore); return; } - ur->create_action(TTR("Set Curve Out Pos")); + ur->create_action(TTR("Set Curve Out Position")); ur->add_do_method(c.ptr(), "set_point_out", idx, c->get_point_out(idx)); ur->add_undo_method(c.ptr(), "set_point_out", idx, p_restore); ur->commit_action(); @@ -234,7 +234,7 @@ void PathSpatialGizmo::redraw() { for (int i = 0; i < c->get_point_count(); i++) { - Vector3 p = c->get_point_pos(i); + Vector3 p = c->get_point_position(i); handles.push_back(p); if (i > 0) { v3p.push_back(p); @@ -307,16 +307,16 @@ bool PathEditorPlugin::forward_spatial_gui_input(Camera *p_camera, const Ref<Inp if (rc >= 2) { PoolVector<Vector3>::Read r = v3a.read(); - if (p_camera->unproject_position(gt.xform(c->get_point_pos(0))).distance_to(mbpos) < click_dist) + if (p_camera->unproject_position(gt.xform(c->get_point_position(0))).distance_to(mbpos) < click_dist) return false; //nope, existing for (int i = 0; i < c->get_point_count() - 1; i++) { //find the offset and point index of the place to break up int j = idx; - if (p_camera->unproject_position(gt.xform(c->get_point_pos(i + 1))).distance_to(mbpos) < click_dist) + if (p_camera->unproject_position(gt.xform(c->get_point_position(i + 1))).distance_to(mbpos) < click_dist) return false; //nope, existing - while (j < rc && c->get_point_pos(i + 1) != r[j]) { + while (j < rc && c->get_point_position(i + 1) != r[j]) { Vector3 from = r[j]; Vector3 to = r[j + 1]; @@ -371,7 +371,7 @@ bool PathEditorPlugin::forward_spatial_gui_input(Camera *p_camera, const Ref<Inp if (c->get_point_count() == 0) org = path->get_transform().get_origin(); else - org = gt.xform(c->get_point_pos(c->get_point_count() - 1)); + org = gt.xform(c->get_point_position(c->get_point_count() - 1)); Plane p(org, p_camera->get_transform().basis.get_axis(2)); Vector3 ray_from = p_camera->project_ray_origin(mbpos); Vector3 ray_dir = p_camera->project_ray_normal(mbpos); @@ -392,9 +392,9 @@ bool PathEditorPlugin::forward_spatial_gui_input(Camera *p_camera, const Ref<Inp } else if (mb->is_pressed() && ((mb->get_button_index() == BUTTON_LEFT && curve_del->is_pressed()) || (mb->get_button_index() == BUTTON_RIGHT && curve_edit->is_pressed()))) { for (int i = 0; i < c->get_point_count(); i++) { - real_t dist_to_p = p_camera->unproject_position(gt.xform(c->get_point_pos(i))).distance_to(mbpos); - real_t dist_to_p_out = p_camera->unproject_position(gt.xform(c->get_point_pos(i) + c->get_point_out(i))).distance_to(mbpos); - real_t dist_to_p_in = p_camera->unproject_position(gt.xform(c->get_point_pos(i) + c->get_point_in(i))).distance_to(mbpos); + real_t dist_to_p = p_camera->unproject_position(gt.xform(c->get_point_position(i))).distance_to(mbpos); + real_t dist_to_p_out = p_camera->unproject_position(gt.xform(c->get_point_position(i) + c->get_point_out(i))).distance_to(mbpos); + real_t dist_to_p_in = p_camera->unproject_position(gt.xform(c->get_point_position(i) + c->get_point_in(i))).distance_to(mbpos); // Find the offset and point index of the place to break up. // Also check for the control points. @@ -403,7 +403,7 @@ bool PathEditorPlugin::forward_spatial_gui_input(Camera *p_camera, const Ref<Inp UndoRedo *ur = editor->get_undo_redo(); ur->create_action(TTR("Remove Path Point")); ur->add_do_method(c.ptr(), "remove_point", i); - ur->add_undo_method(c.ptr(), "add_point", c->get_point_pos(i), c->get_point_in(i), c->get_point_out(i), i); + ur->add_undo_method(c.ptr(), "add_point", c->get_point_position(i), c->get_point_in(i), c->get_point_out(i), i); ur->commit_action(); return true; } else if (dist_to_p_out < click_dist) { @@ -496,7 +496,7 @@ void PathEditorPlugin::_close_curve() { return; if (c->get_point_count() < 2) return; - c->add_point(c->get_point_pos(0), c->get_point_in(0), c->get_point_out(0)); + c->add_point(c->get_point_position(0), c->get_point_in(0), c->get_point_out(0)); } void PathEditorPlugin::_notification(int p_what) { diff --git a/editor/plugins/polygon_2d_editor_plugin.cpp b/editor/plugins/polygon_2d_editor_plugin.cpp index dbeb673933..a525983c75 100644 --- a/editor/plugins/polygon_2d_editor_plugin.cpp +++ b/editor/plugins/polygon_2d_editor_plugin.cpp @@ -35,15 +35,27 @@ #include "os/input.h" #include "os/keyboard.h" +Node2D *Polygon2DEditor::_get_node() const { + + return node; +} + +void Polygon2DEditor::_set_node(Node *p_polygon) { + + node = Object::cast_to<Polygon2D>(p_polygon); +} + +Vector2 Polygon2DEditor::_get_offset(int p_idx) const { + + return node->get_offset(); +} + void Polygon2DEditor::_notification(int p_what) { switch (p_what) { case NOTIFICATION_READY: { - button_create->set_icon(get_icon("Edit", "EditorIcons")); - button_edit->set_icon(get_icon("MovePoint", "EditorIcons")); - button_edit->set_pressed(true); button_uv->set_icon(get_icon("Uv", "EditorIcons")); uv_button[UV_MODE_EDIT_POINT]->set_icon(get_icon("ToolSelect", "EditorIcons")); @@ -55,40 +67,17 @@ void Polygon2DEditor::_notification(int p_what) { b_snap_enable->set_icon(get_icon("SnapGrid", "EditorIcons")); uv_icon_zoom->set_texture(get_icon("Zoom", "EditorIcons")); - get_tree()->connect("node_removed", this, "_node_removed"); - } break; - case NOTIFICATION_FIXED_PROCESS: { + case NOTIFICATION_PHYSICS_PROCESS: { } break; } } -void Polygon2DEditor::_node_removed(Node *p_node) { - - if (p_node == node) { - edit(NULL); - hide(); - - canvas_item_editor->get_viewport_control()->update(); - } -} void Polygon2DEditor::_menu_option(int p_option) { switch (p_option) { - case MODE_CREATE: { - - mode = MODE_CREATE; - button_create->set_pressed(true); - button_edit->set_pressed(false); - } break; - case MODE_EDIT: { - - mode = MODE_EDIT; - button_create->set_pressed(false); - button_edit->set_pressed(true); - } break; case MODE_EDIT_UV: { if (node->get_texture().is_null()) { @@ -153,6 +142,9 @@ void Polygon2DEditor::_menu_option(int p_option) { undo_redo->commit_action(); } break; + default: { + AbstractPolygon2DEditor::_menu_option(p_option); + } break; } } @@ -185,289 +177,6 @@ void Polygon2DEditor::_set_snap_step_y(float p_val) { uv_edit_draw->update(); } -void Polygon2DEditor::_wip_close() { - - undo_redo->create_action(TTR("Create Poly")); - undo_redo->add_undo_method(node, "set_polygon", node->get_polygon()); - undo_redo->add_do_method(node, "set_polygon", wip); - undo_redo->add_do_method(canvas_item_editor->get_viewport_control(), "update"); - undo_redo->add_undo_method(canvas_item_editor->get_viewport_control(), "update"); - undo_redo->commit_action(); - wip.clear(); - wip_active = false; - mode = MODE_EDIT; - button_edit->set_pressed(true); - button_create->set_pressed(false); - edited_point = -1; -} - -bool Polygon2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) { - - if (node == NULL) - return false; - - Ref<InputEventMouseButton> mb = p_event; - - if (mb.is_valid()) { - - Transform2D xform = canvas_item_editor->get_canvas_transform() * node->get_global_transform(); - - Vector2 gpoint = mb->get_position(); - Vector2 cpoint = canvas_item_editor->get_canvas_transform().affine_inverse().xform(gpoint); - cpoint = canvas_item_editor->snap_point(cpoint); - cpoint = node->get_global_transform().affine_inverse().xform(cpoint); - - Vector<Vector2> poly = Variant(node->get_polygon()); - - //first check if a point is to be added (segment split) - real_t grab_threshold = EDITOR_DEF("editors/poly_editor/point_grab_radius", 8); - - switch (mode) { - - case MODE_CREATE: { - - if (mb->get_button_index() == BUTTON_LEFT && mb->is_pressed()) { - - if (!wip_active) { - - wip.clear(); - wip.push_back(cpoint - node->get_offset()); - wip_active = true; - edited_point_pos = cpoint; - canvas_item_editor->get_viewport_control()->update(); - edited_point = 1; - return true; - } else { - - if (wip.size() > 1 && xform.xform(wip[0] + node->get_offset()).distance_to(gpoint) < grab_threshold) { - //wip closed - _wip_close(); - - return true; - } else { - - wip.push_back(cpoint - node->get_offset()); - edited_point = wip.size(); - canvas_item_editor->get_viewport_control()->update(); - return true; - - //add wip point - } - } - } else if (mb->get_button_index() == BUTTON_RIGHT && mb->is_pressed() && wip_active) { - _wip_close(); - } - - } break; - - case MODE_EDIT: { - - if (mb->get_button_index() == BUTTON_LEFT) { - if (mb->is_pressed()) { - - if (mb->get_control()) { - - if (poly.size() < 3) { - - undo_redo->create_action(TTR("Edit Poly")); - undo_redo->add_undo_method(node, "set_polygon", poly); - poly.push_back(cpoint); - undo_redo->add_do_method(node, "set_polygon", poly); - undo_redo->add_do_method(canvas_item_editor->get_viewport_control(), "update"); - undo_redo->add_undo_method(canvas_item_editor->get_viewport_control(), "update"); - undo_redo->commit_action(); - return true; - } - - //search edges - int closest_idx = -1; - Vector2 closest_pos; - real_t closest_dist = 1e10; - for (int i = 0; i < poly.size(); i++) { - - Vector2 points[2] = { xform.xform(poly[i] + node->get_offset()), - xform.xform(poly[(i + 1) % poly.size()] + node->get_offset()) }; - - Vector2 cp = Geometry::get_closest_point_to_segment_2d(gpoint, points); - if (cp.distance_squared_to(points[0]) < CMP_EPSILON2 || cp.distance_squared_to(points[1]) < CMP_EPSILON2) - continue; //not valid to reuse point - - real_t d = cp.distance_to(gpoint); - if (d < closest_dist && d < grab_threshold) { - closest_dist = d; - closest_pos = cp; - closest_idx = i; - } - } - - if (closest_idx >= 0) { - - pre_move_edit = poly; - poly.insert(closest_idx + 1, xform.affine_inverse().xform(closest_pos) - node->get_offset()); - edited_point = closest_idx + 1; - edited_point_pos = xform.affine_inverse().xform(closest_pos); - node->set_polygon(Variant(poly)); - canvas_item_editor->get_viewport_control()->update(); - return true; - } - } else { - - //look for points to move - - int closest_idx = -1; - Vector2 closest_pos; - real_t closest_dist = 1e10; - for (int i = 0; i < poly.size(); i++) { - - Vector2 cp = xform.xform(poly[i] + node->get_offset()); - - real_t d = cp.distance_to(gpoint); - if (d < closest_dist && d < grab_threshold) { - closest_dist = d; - closest_pos = cp; - closest_idx = i; - } - } - - if (closest_idx >= 0) { - - pre_move_edit = poly; - edited_point = closest_idx; - edited_point_pos = xform.affine_inverse().xform(closest_pos); - canvas_item_editor->get_viewport_control()->update(); - return true; - } - } - } else { - - if (edited_point != -1) { - - //apply - - ERR_FAIL_INDEX_V(edited_point, poly.size(), false); - poly[edited_point] = edited_point_pos - node->get_offset(); - undo_redo->create_action(TTR("Edit Poly")); - undo_redo->add_do_method(node, "set_polygon", poly); - undo_redo->add_undo_method(node, "set_polygon", pre_move_edit); - undo_redo->add_do_method(canvas_item_editor->get_viewport_control(), "update"); - undo_redo->add_undo_method(canvas_item_editor->get_viewport_control(), "update"); - undo_redo->commit_action(); - - edited_point = -1; - return true; - } - } - } else if (mb->get_button_index() == BUTTON_RIGHT && mb->is_pressed() && edited_point == -1) { - - int closest_idx = -1; - Vector2 closest_pos; - real_t closest_dist = 1e10; - for (int i = 0; i < poly.size(); i++) { - - Vector2 cp = xform.xform(poly[i] + node->get_offset()); - - real_t d = cp.distance_to(gpoint); - if (d < closest_dist && d < grab_threshold) { - closest_dist = d; - closest_pos = cp; - closest_idx = i; - } - } - - if (closest_idx >= 0) { - - undo_redo->create_action(TTR("Edit Poly (Remove Point)")); - undo_redo->add_undo_method(node, "set_polygon", poly); - poly.remove(closest_idx); - undo_redo->add_do_method(node, "set_polygon", poly); - undo_redo->add_do_method(canvas_item_editor->get_viewport_control(), "update"); - undo_redo->add_undo_method(canvas_item_editor->get_viewport_control(), "update"); - undo_redo->commit_action(); - return true; - } - } - - } break; - } - } - - Ref<InputEventMouseMotion> mm = p_event; - - if (mm.is_valid()) { - - if (edited_point != -1 && (wip_active || (mm->get_button_mask() & BUTTON_MASK_LEFT))) { - - Vector2 gpoint = mm->get_position(); - Vector2 cpoint = canvas_item_editor->get_canvas_transform().affine_inverse().xform(gpoint); - cpoint = canvas_item_editor->snap_point(cpoint); - edited_point_pos = node->get_global_transform().affine_inverse().xform(cpoint); - - if (!wip_active) { - - Vector<Vector2> poly = Variant(node->get_polygon()); - ERR_FAIL_INDEX_V(edited_point, poly.size(), false); - poly[edited_point] = edited_point_pos - node->get_offset(); - node->set_polygon(Variant(poly)); - } - - canvas_item_editor->get_viewport_control()->update(); - } - } - - return false; -} -void Polygon2DEditor::_canvas_draw() { - - if (!node) - return; - - Control *vpc = canvas_item_editor->get_viewport_control(); - - Vector<Vector2> poly; - - if (wip_active) - poly = wip; - else - poly = Variant(node->get_polygon()); - - Transform2D xform = canvas_item_editor->get_canvas_transform() * node->get_global_transform(); - Ref<Texture> handle = get_icon("EditorHandle", "EditorIcons"); - - if (!wip_active && edited_point >= 0 && EDITOR_DEF("editors/poly_editor/show_previous_outline", true)) { - - const Color col = node->get_color().contrasted(); - const int n = pre_move_edit.size(); - for (int i = 0; i < n; i++) { - - Vector2 p, p2; - p = pre_move_edit[i] + node->get_offset(); - p2 = pre_move_edit[(i + 1) % n] + node->get_offset(); - - Vector2 point = xform.xform(p); - Vector2 next_point = xform.xform(p2); - - vpc->draw_line(point, next_point, col, 2); - } - } - - for (int i = 0; i < poly.size(); i++) { - - Vector2 p, p2; - p = i == edited_point ? edited_point_pos : (poly[i] + node->get_offset()); - if ((wip_active && i == poly.size() - 1) || (((i + 1) % poly.size()) == edited_point)) - p2 = edited_point_pos; - else - p2 = poly[(i + 1) % poly.size()] + node->get_offset(); - - Vector2 point = xform.xform(p); - Vector2 next_point = xform.xform(p2); - - Color col = Color(1, 0.3, 0.1, 0.8); - vpc->draw_line(point, next_point, col, 2); - vpc->draw_texture(handle, point - handle->get_size() * 0.5); - } -} - void Polygon2DEditor::_uv_mode(int p_mode) { uv_mode = UVMode(p_mode); @@ -714,44 +423,12 @@ void Polygon2DEditor::_uv_draw() { updating_uv_scroll = false; } -void Polygon2DEditor::edit(Node *p_collision_polygon) { - - if (!canvas_item_editor) { - canvas_item_editor = CanvasItemEditor::get_singleton(); - } - - if (p_collision_polygon) { - - node = Object::cast_to<Polygon2D>(p_collision_polygon); - //Enable the pencil tool if the polygon is empty - if (node->get_polygon().size() == 0) { - _menu_option(MODE_CREATE); - } - if (!canvas_item_editor->get_viewport_control()->is_connected("draw", this, "_canvas_draw")) - canvas_item_editor->get_viewport_control()->connect("draw", this, "_canvas_draw"); - - wip.clear(); - wip_active = false; - edited_point = -1; - - } else { - - node = NULL; - - if (canvas_item_editor->get_viewport_control()->is_connected("draw", this, "_canvas_draw")) - canvas_item_editor->get_viewport_control()->disconnect("draw", this, "_canvas_draw"); - } -} - void Polygon2DEditor::_bind_methods() { - ClassDB::bind_method(D_METHOD("_menu_option"), &Polygon2DEditor::_menu_option); - ClassDB::bind_method(D_METHOD("_canvas_draw"), &Polygon2DEditor::_canvas_draw); ClassDB::bind_method(D_METHOD("_uv_mode"), &Polygon2DEditor::_uv_mode); ClassDB::bind_method(D_METHOD("_uv_draw"), &Polygon2DEditor::_uv_draw); ClassDB::bind_method(D_METHOD("_uv_input"), &Polygon2DEditor::_uv_input); ClassDB::bind_method(D_METHOD("_uv_scroll_changed"), &Polygon2DEditor::_uv_scroll_changed); - ClassDB::bind_method(D_METHOD("_node_removed"), &Polygon2DEditor::_node_removed); ClassDB::bind_method(D_METHOD("_set_use_snap"), &Polygon2DEditor::_set_use_snap); ClassDB::bind_method(D_METHOD("_set_show_grid"), &Polygon2DEditor::_set_show_grid); ClassDB::bind_method(D_METHOD("_set_snap_off_x"), &Polygon2DEditor::_set_snap_off_x); @@ -769,35 +446,17 @@ Vector2 Polygon2DEditor::snap_point(Vector2 p_target) const { return p_target; } -Polygon2DEditor::Polygon2DEditor(EditorNode *p_editor) { - - node = NULL; - canvas_item_editor = NULL; - editor = p_editor; - undo_redo = editor->get_undo_redo(); +Polygon2DEditor::Polygon2DEditor(EditorNode *p_editor) + : AbstractPolygon2DEditor(p_editor) { snap_step = Vector2(10, 10); use_snap = false; snap_show_grid = false; - add_child(memnew(VSeparator)); - button_create = memnew(ToolButton); - add_child(button_create); - button_create->connect("pressed", this, "_menu_option", varray(MODE_CREATE)); - button_create->set_toggle_mode(true); - - button_edit = memnew(ToolButton); - add_child(button_edit); - button_edit->connect("pressed", this, "_menu_option", varray(MODE_EDIT)); - button_edit->set_toggle_mode(true); - button_uv = memnew(ToolButton); add_child(button_uv); button_uv->connect("pressed", this, "_menu_option", varray(MODE_EDIT_UV)); - mode = MODE_EDIT; - wip_active = false; - uv_mode = UV_MODE_EDIT_POINT; uv_edit = memnew(AcceptDialog); add_child(uv_edit); @@ -937,35 +596,6 @@ Polygon2DEditor::Polygon2DEditor(EditorNode *p_editor) { uv_edit_draw->set_clip_contents(true); } -void Polygon2DEditorPlugin::edit(Object *p_object) { - - collision_polygon_editor->edit(Object::cast_to<Node>(p_object)); -} - -bool Polygon2DEditorPlugin::handles(Object *p_object) const { - - return p_object->is_class("Polygon2D"); -} - -void Polygon2DEditorPlugin::make_visible(bool p_visible) { - - if (p_visible) { - collision_polygon_editor->show(); - } else { - - collision_polygon_editor->hide(); - collision_polygon_editor->edit(NULL); - } -} - -Polygon2DEditorPlugin::Polygon2DEditorPlugin(EditorNode *p_node) { - - editor = p_node; - collision_polygon_editor = memnew(Polygon2DEditor(p_node)); - CanvasItemEditor::get_singleton()->add_control_to_menu_panel(collision_polygon_editor); - - collision_polygon_editor->hide(); -} - -Polygon2DEditorPlugin::~Polygon2DEditorPlugin() { +Polygon2DEditorPlugin::Polygon2DEditorPlugin(EditorNode *p_node) + : AbstractPolygon2DEditorPlugin(p_node, memnew(Polygon2DEditor(p_node)), "Polygon2D") { } diff --git a/editor/plugins/polygon_2d_editor_plugin.h b/editor/plugins/polygon_2d_editor_plugin.h index f9d6a6b4b6..90da3e61c1 100644 --- a/editor/plugins/polygon_2d_editor_plugin.h +++ b/editor/plugins/polygon_2d_editor_plugin.h @@ -30,26 +30,18 @@ #ifndef POLYGON_2D_EDITOR_PLUGIN_H #define POLYGON_2D_EDITOR_PLUGIN_H -#include "editor/editor_node.h" -#include "editor/editor_plugin.h" -#include "scene/2d/polygon_2d.h" -#include "scene/gui/tool_button.h" +#include "editor/plugins/abstract_polygon_2d_editor.h" /** @author Juan Linietsky <reduzio@gmail.com> */ -class CanvasItemEditor; +class Polygon2DEditor : public AbstractPolygon2DEditor { -class Polygon2DEditor : public HBoxContainer { + GDCLASS(Polygon2DEditor, AbstractPolygon2DEditor); - GDCLASS(Polygon2DEditor, HBoxContainer); - - UndoRedo *undo_redo; enum Mode { - MODE_CREATE, - MODE_EDIT, - MODE_EDIT_UV, + MODE_EDIT_UV = MODE_CONT, UVEDIT_POLYGON_TO_UV, UVEDIT_UV_TO_POLYGON, UVEDIT_UV_CLEAR @@ -64,7 +56,7 @@ class Polygon2DEditor : public HBoxContainer { UV_MODE_MAX }; - Mode mode; + Polygon2D *node; UVMode uv_mode; AcceptDialog *uv_edit; @@ -90,34 +82,19 @@ class Polygon2DEditor : public HBoxContainer { AcceptDialog *error; - ToolButton *button_create; - ToolButton *button_edit; ToolButton *button_uv; - CanvasItemEditor *canvas_item_editor; - EditorNode *editor; - Panel *panel; - Polygon2D *node; - MenuButton *options; - - int edited_point; - Vector2 edited_point_pos; - Vector<Vector2> pre_move_edit; - Vector<Vector2> wip; - bool wip_active; - bool use_snap; bool snap_show_grid; Vector2 snap_offset; Vector2 snap_step; + virtual void _menu_option(int p_option); + void _uv_scroll_changed(float); void _uv_input(const Ref<InputEvent> &p_input); void _uv_draw(); void _uv_mode(int p_mode); - void _wip_close(); - void _canvas_draw(); - void _menu_option(int p_option); void _set_use_snap(bool p_use); void _set_show_grid(bool p_show); @@ -127,36 +104,26 @@ class Polygon2DEditor : public HBoxContainer { void _set_snap_step_y(float p_val); protected: + virtual Node2D *_get_node() const; + virtual void _set_node(Node *p_polygon); + + virtual Vector2 _get_offset(int p_idx) const; + void _notification(int p_what); - void _node_removed(Node *p_node); static void _bind_methods(); Vector2 snap_point(Vector2 p_target) const; public: - bool forward_gui_input(const Ref<InputEvent> &p_event); - void edit(Node *p_collision_polygon); Polygon2DEditor(EditorNode *p_editor); }; -class Polygon2DEditorPlugin : public EditorPlugin { - - GDCLASS(Polygon2DEditorPlugin, EditorPlugin); +class Polygon2DEditorPlugin : public AbstractPolygon2DEditorPlugin { - Polygon2DEditor *collision_polygon_editor; - EditorNode *editor; + GDCLASS(Polygon2DEditorPlugin, AbstractPolygon2DEditorPlugin); public: - virtual bool forward_canvas_gui_input(const Transform2D &p_canvas_xform, const Ref<InputEvent> &p_event) { return collision_polygon_editor->forward_gui_input(p_event); } - - virtual String get_name() const { return "Polygon2D"; } - bool has_main_screen() const { return false; } - virtual void edit(Object *p_object); - virtual bool handles(Object *p_object) const; - virtual void make_visible(bool p_visible); - Polygon2DEditorPlugin(EditorNode *p_node); - ~Polygon2DEditorPlugin(); }; #endif // POLYGON_2D_EDITOR_PLUGIN_H diff --git a/editor/plugins/resource_preloader_editor_plugin.cpp b/editor/plugins/resource_preloader_editor_plugin.cpp index e157ddbf90..d421b3798b 100644 --- a/editor/plugins/resource_preloader_editor_plugin.cpp +++ b/editor/plugins/resource_preloader_editor_plugin.cpp @@ -38,7 +38,7 @@ void ResourcePreloaderEditor::_gui_input(Ref<InputEvent> p_event) { void ResourcePreloaderEditor::_notification(int p_what) { - if (p_what == NOTIFICATION_FIXED_PROCESS) { + if (p_what == NOTIFICATION_PHYSICS_PROCESS) { } if (p_what == NOTIFICATION_ENTER_TREE) { @@ -248,13 +248,13 @@ void ResourcePreloaderEditor::edit(ResourcePreloader *p_preloader) { } else { hide(); - set_fixed_process(false); + set_physics_process(false); } } Variant ResourcePreloaderEditor::get_drag_data_fw(const Point2 &p_point, Control *p_from) { - TreeItem *ti = tree->get_item_at_pos(p_point); + TreeItem *ti = tree->get_item_at_position(p_point); if (!ti) return Variant(); diff --git a/editor/plugins/script_editor_plugin.cpp b/editor/plugins/script_editor_plugin.cpp index 9af5885a17..ffda34653d 100644 --- a/editor/plugins/script_editor_plugin.cpp +++ b/editor/plugins/script_editor_plugin.cpp @@ -467,6 +467,8 @@ void ScriptEditor::_update_recent_scripts() { recent_scripts->add_separator(); recent_scripts->add_shortcut(ED_SHORTCUT("script_editor/clear_recent", TTR("Clear Recent Files"))); + + recent_scripts->set_as_minsize(); } void ScriptEditor::_open_recent_script(int p_idx) { @@ -474,7 +476,7 @@ void ScriptEditor::_open_recent_script(int p_idx) { // clear button if (p_idx == recent_scripts->get_item_count() - 1) { previous_scripts.clear(); - _update_recent_scripts(); + call_deferred("_update_recent_scripts"); return; } @@ -1167,6 +1169,8 @@ void ScriptEditor::_notification(int p_what) { script_forward->set_icon(get_icon("Forward", "EditorIcons")); script_back->set_icon(get_icon("Back", "EditorIcons")); + + recent_scripts->set_as_minsize(); } break; default: @@ -1278,7 +1282,11 @@ void ScriptEditor::_members_overview_selected(int p_idx) { if (!se) { return; } - se->goto_line(members_overview->get_item_metadata(p_idx)); + Dictionary state; + state["scroll_position"] = members_overview->get_item_metadata(p_idx); + state["column"] = 0; + state["row"] = members_overview->get_item_metadata(p_idx); + se->set_edit_state(state); se->ensure_focus(); } @@ -1403,8 +1411,10 @@ void ScriptEditor::_update_members_overview() { void ScriptEditor::_update_help_overview_visibility() { int selected = tab_container->get_current_tab(); - if (selected < 0 || selected >= tab_container->get_child_count()) + if (selected < 0 || selected >= tab_container->get_child_count()) { + help_overview->set_visible(false); return; + } Node *current = tab_container->get_child(tab_container->get_current_tab()); EditorHelp *se = Object::cast_to<EditorHelp>(current); @@ -1421,6 +1431,7 @@ void ScriptEditor::_update_help_overview_visibility() { } void ScriptEditor::_update_help_overview() { + help_overview->clear(); int selected = tab_container->get_current_tab(); if (selected < 0 || selected >= tab_container->get_child_count()) @@ -1432,8 +1443,6 @@ void ScriptEditor::_update_help_overview() { return; } - help_overview->clear(); - Vector<Pair<String, int> > sections = se->get_sections(); for (int i = 0; i < sections.size(); i++) { help_overview->add_item(sections[i].first); @@ -1441,9 +1450,6 @@ void ScriptEditor::_update_help_overview() { } } -void _help_overview_selected(int p_idx) { -} - void ScriptEditor::_update_script_colors() { bool script_temperature_enabled = EditorSettings::get_singleton()->get("text_editor/open_scripts/script_temperature_enabled"); @@ -1589,6 +1595,8 @@ void ScriptEditor::_update_script_names() { _update_members_overview(); _update_help_overview(); + _update_members_overview_visibility(); + _update_help_overview_visibility(); _update_script_colors(); } @@ -1683,9 +1691,8 @@ bool ScriptEditor::edit(const Ref<Script> &p_script, int p_line, int p_col, bool } ERR_FAIL_COND_V(!se, false); - // load script before adding as child else editor will crash at theme loading - se->set_edited_script(p_script); 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(); @@ -2237,6 +2244,7 @@ void ScriptEditor::_bind_methods() { ClassDB::bind_method("_live_auto_reload_running_scripts", &ScriptEditor::_live_auto_reload_running_scripts); ClassDB::bind_method("_unhandled_input", &ScriptEditor::_unhandled_input); ClassDB::bind_method("_script_changed", &ScriptEditor::_script_changed); + ClassDB::bind_method("_update_recent_scripts", &ScriptEditor::_update_recent_scripts); ClassDB::bind_method(D_METHOD("get_current_script"), &ScriptEditor::_get_current_script); ClassDB::bind_method(D_METHOD("get_open_scripts"), &ScriptEditor::_get_open_scripts); diff --git a/editor/plugins/script_text_editor.cpp b/editor/plugins/script_text_editor.cpp index c875ee7011..adf65c11e1 100644 --- a/editor/plugins/script_text_editor.cpp +++ b/editor/plugins/script_text_editor.cpp @@ -168,14 +168,34 @@ void ScriptTextEditor::_load_theme_settings() { text_edit->add_constant_override("line_spacing", EDITOR_DEF("text_editor/theme/line_spacing", 4)); + colors_cache.symbol_color = symbol_color; + colors_cache.keyword_color = keyword_color; + colors_cache.basetype_color = basetype_color; + colors_cache.type_color = type_color; + colors_cache.comment_color = comment_color; + colors_cache.string_color = string_color; + + theme_loaded = true; + if (!script.is_null()) + _set_theme_for_script(); +} + +void ScriptTextEditor::_set_theme_for_script() { + + if (!theme_loaded) + return; + + TextEdit *text_edit = code_editor->get_text_edit(); + 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); + text_edit->add_keyword_color(E->get(), colors_cache.keyword_color); } //colorize core types + const Color basetype_color = colors_cache.basetype_color; text_edit->add_keyword_color("String", basetype_color); text_edit->add_keyword_color("Vector2", basetype_color); text_edit->add_keyword_color("Rect2", basetype_color); @@ -210,7 +230,7 @@ void ScriptTextEditor::_load_theme_settings() { if (n.begins_with("_")) n = n.substr(1, n.length()); - text_edit->add_keyword_color(n, type_color); + text_edit->add_keyword_color(n, colors_cache.type_color); } //colorize comments @@ -223,7 +243,7 @@ void ScriptTextEditor::_load_theme_settings() { 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 == ""); + text_edit->add_color_region(beg, end, colors_cache.comment_color, end == ""); } //colorize strings @@ -235,7 +255,7 @@ void ScriptTextEditor::_load_theme_settings() { 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 == ""); + text_edit->add_color_region(beg, end, colors_cache.string_color, end == ""); } } @@ -263,10 +283,10 @@ void ScriptTextEditor::reload_text() { void ScriptTextEditor::_notification(int p_what) { - if (p_what == NOTIFICATION_READY) { - - //emit_signal("name_changed"); - _load_theme_settings(); + switch (p_what) { + case NOTIFICATION_READY: + _load_theme_settings(); + break; } } @@ -306,7 +326,7 @@ Variant ScriptTextEditor::get_edit_state() { Dictionary state; - state["scroll_pos"] = code_editor->get_text_edit()->get_v_scroll(); + state["scroll_position"] = 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(); @@ -509,9 +529,9 @@ void ScriptTextEditor::ensure_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()->set_v_scroll(state["scroll_position"]); code_editor->get_text_edit()->grab_focus(); //int scroll_pos; @@ -556,6 +576,8 @@ void ScriptTextEditor::set_edited_script(const Ref<Script> &p_script) { emit_signal("name_changed"); code_editor->update_line_and_column(); + + _set_theme_for_script(); } void ScriptTextEditor::_validate_script() { @@ -1397,7 +1419,7 @@ void ScriptTextEditor::_text_edit_gui_input(const Ref<InputEvent> &ev) { float alpha = color.size() > 3 ? color[3] : 1.0f; color_picker->set_pick_color(Color(color[0], color[1], color[2], alpha)); } - color_panel->set_position(get_global_transform().xform(get_local_mouse_pos())); + color_panel->set_position(get_global_transform().xform(get_local_mouse_position())); } else { have_color = false; } @@ -1445,17 +1467,19 @@ void ScriptTextEditor::_make_context_menu(bool p_selection, bool p_color) { context_menu->add_separator(); context_menu->add_item(TTR("Pick Color"), EDIT_PICK_COLOR); } - context_menu->set_position(get_global_transform().xform(get_local_mouse_pos())); + context_menu->set_position(get_global_transform().xform(get_local_mouse_position())); context_menu->set_size(Vector2(1, 1)); context_menu->popup(); } ScriptTextEditor::ScriptTextEditor() { + theme_loaded = false; + code_editor = memnew(CodeTextEditor); add_child(code_editor); code_editor->add_constant_override("separation", 0); - code_editor->set_area_as_parent_rect(); + code_editor->set_anchors_and_margins_preset(Control::PRESET_WIDE); 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); @@ -1557,11 +1581,7 @@ ScriptTextEditor::ScriptTextEditor() { static ScriptEditorBase *create_editor(const Ref<Script> &p_script) { - if (p_script->has_source_code()) { - return memnew(ScriptTextEditor); - } - - return NULL; + return memnew(ScriptTextEditor); } void ScriptTextEditor::register_editor() { diff --git a/editor/plugins/script_text_editor.h b/editor/plugins/script_text_editor.h index f8b7470ec8..83f3ea57c0 100644 --- a/editor/plugins/script_text_editor.h +++ b/editor/plugins/script_text_editor.h @@ -57,6 +57,17 @@ class ScriptTextEditor : public ScriptEditorBase { int color_line; String color_args; + struct ColorsCache { + Color symbol_color; + Color keyword_color; + Color basetype_color; + Color type_color; + Color comment_color; + Color string_color; + } colors_cache; + + bool theme_loaded; + enum { EDIT_UNDO, EDIT_REDO, @@ -101,6 +112,7 @@ protected: void _validate_script(); void _code_complete_script(const String &p_code, List<String> *r_options, bool &r_force); void _load_theme_settings(); + void _set_theme_for_script(); void _notification(int p_what); static void _bind_methods(); diff --git a/editor/plugins/shader_graph_editor_plugin.cpp b/editor/plugins/shader_graph_editor_plugin.cpp index 732344cb78..cd90d47896 100644 --- a/editor/plugins/shader_graph_editor_plugin.cpp +++ b/editor/plugins/shader_graph_editor_plugin.cpp @@ -54,7 +54,7 @@ void GraphColorRampEdit::_gui_input(const InputEvent& p_event) { if (p_event.type==InputEvent::MOUSE_BUTTON && p_event->get_button_index()==1 && p_event->is_pressed()) { update(); - int x = p_event->get_pos().x; + int x = p_event->get_position().x; int total_w = get_size().width-get_size().height-3; if (x>total_w+3) { @@ -333,7 +333,7 @@ void GraphCurveMapEdit::_gui_input(const InputEvent& p_event) { if (p_event.type==InputEvent::MOUSE_BUTTON && p_event->get_button_index()==1 && p_event->is_pressed()) { update(); - Point2 p = Vector2(p_event->get_pos().x,p_event->get_pos().y)/get_size(); + Point2 p = Vector2(p_event->get_position().x,p_event->get_position().y)/get_size(); p.y=1.0-p.y; grabbed=-1; grabbing=true; @@ -384,7 +384,7 @@ void GraphCurveMapEdit::_gui_input(const InputEvent& p_event) { if (p_event.type==InputEvent::MOUSE_MOTION && grabbing && grabbed != -1) { - Point2 p = Vector2(p_event->get_pos().x,p_event->get_pos().y)/get_size(); + Point2 p = Vector2(p_event->get_position().x,p_event->get_position().y)/get_size(); p.y=1.0-p.y; p.x = CLAMP(p.x,0.0,1.0); @@ -1205,7 +1205,7 @@ void ShaderGraphView::_move_node(int p_id,const Vector2& p_to) { ERR_FAIL_COND(!node_map.has(p_id)); node_map[p_id]->set_offset(p_to); - graph->node_set_pos(type,p_id,p_to); + graph->node_set_position(type,p_id,p_to); } void ShaderGraphView::_duplicate_nodes_request() @@ -2463,7 +2463,7 @@ void ShaderGraphView::_create_node(int p_id) { gn->connect("close_request",this,"_node_removed",varray(p_id),CONNECT_DEFERRED); graph_edit->add_child(gn); node_map[p_id]=gn; - gn->set_offset(graph->node_get_pos(type,p_id)); + gn->set_offset(graph->node_get_position(type,p_id)); } @@ -2657,7 +2657,7 @@ void ShaderGraphView::add_node(int p_type, const Vector2 &location) { while(true) { bool valid=true; for(List<int>::Element *E=existing.front();E;E=E->next()) { - Vector2 pos = graph->node_get_pos(type,E->get()); + Vector2 pos = graph->node_get_position(type,E->get()); if (init_ofs==pos) { init_ofs+=Vector2(20,20); valid=false; @@ -2672,7 +2672,7 @@ void ShaderGraphView::add_node(int p_type, const Vector2 &location) { UndoRedo *ur=EditorNode::get_singleton()->get_undo_redo(); ur->create_action(TTR("Add Shader Graph Node")); ur->add_do_method(graph.ptr(),"node_add",type,p_type,newid); - ur->add_do_method(graph.ptr(),"node_set_pos",type,newid,init_ofs); + ur->add_do_method(graph.ptr(),"node_set_position",type,newid,init_ofs); ur->add_undo_method(graph.ptr(),"node_remove",type,newid); ur->add_do_method(this,"_update_graph"); ur->add_undo_method(this,"_update_graph"); @@ -2765,7 +2765,7 @@ void ShaderGraphEditor::_add_node(int p_type) { void ShaderGraphEditor::_popup_requested(const Vector2 &p_position) { Vector2 scroll_ofs=graph_edits[tabs->get_current_tab()]->get_graph_edit()->get_scroll_ofs(); - next_location = get_local_mouse_pos() + scroll_ofs; + next_location = get_local_mouse_position() + scroll_ofs; popup->set_global_position(p_position); popup->set_size( Size2( 200, 0) ); popup->popup(); @@ -2921,7 +2921,7 @@ ShaderGraphEditorPlugin::ShaderGraphEditorPlugin(EditorNode *p_node, bool p_2d) //editor->get_viewport()->add_child(shader_editor); - //shader_editor->set_area_as_parent_rect(); + //shader_editor->set_anchors_and_margins_preset(Control::PRESET_WIDE); //shader_editor->hide(); } diff --git a/editor/plugins/spatial_editor_plugin.cpp b/editor/plugins/spatial_editor_plugin.cpp index 7a43c41b0e..f96cbabde7 100644 --- a/editor/plugins/spatial_editor_plugin.cpp +++ b/editor/plugins/spatial_editor_plugin.cpp @@ -49,19 +49,22 @@ #define DISTANCE_DEFAULT 4 -#define GIZMO_ARROW_SIZE 0.3 +#define GIZMO_ARROW_SIZE 0.35 #define GIZMO_RING_HALF_WIDTH 0.1 //#define GIZMO_SCALE_DEFAULT 0.28 #define GIZMO_SCALE_DEFAULT 0.15 #define GIZMO_PLANE_SIZE 0.2 #define GIZMO_PLANE_DST 0.3 -#define GIZMO_CIRCLE_SIZE 0.9 +#define GIZMO_CIRCLE_SIZE 1.1 +#define GIZMO_SCALE_OFFSET (GIZMO_CIRCLE_SIZE + 0.3) +#define GIZMO_ARROW_OFFSET (GIZMO_CIRCLE_SIZE + 0.3) #define ZOOM_MIN_DISTANCE 0.001 #define ZOOM_MULTIPLIER 1.08 #define ZOOM_INDICATOR_DELAY_S 1.5 -#define FREELOOK_MIN_SPEED 0.1 +#define FREELOOK_MIN_SPEED 0.01 +#define FREELOOK_SPEED_MULTIPLIER 1.08 #define MIN_Z 0.01 #define MAX_Z 10000 @@ -70,53 +73,93 @@ #define MAX_FOV 179 void SpatialEditorViewport::_update_camera(float p_interp_delta) { - if (orthogonal) { - //camera->set_orthogonal(size.width*cursor.distance,get_znear(),get_zfar()); - camera->set_orthogonal(2 * cursor.distance, 0.1, 8192); - } else - camera->set_perspective(get_fov(), get_znear(), get_zfar()); - //when not being manipulated, move softly - float free_orbit_inertia = EDITOR_DEF("editors/3d/free_orbit_inertia", 0.15); - float free_translation_inertia = EDITOR_DEF("editors/3d/free_translation_inertia", 0.15); - //when being manipulated, move more quickly - float manip_orbit_inertia = EDITOR_DEF("editors/3d/manipulation_orbit_inertia", 0.075); - float manip_translation_inertia = EDITOR_DEF("editors/3d/manipulation_translation_inertia", 0.075); - - //determine if being manipulated - bool manipulated = (Input::get_singleton()->get_mouse_button_mask() & (2 | 4)) || Input::get_singleton()->is_key_pressed(KEY_SHIFT) || Input::get_singleton()->is_key_pressed(KEY_ALT) || Input::get_singleton()->is_key_pressed(KEY_CONTROL); - - float orbit_inertia = MAX(0.00001, manipulated ? manip_orbit_inertia : free_orbit_inertia); - float translation_inertia = MAX(0.0001, manipulated ? manip_translation_inertia : free_translation_inertia); + bool is_orthogonal = camera->get_projection() == Camera::PROJECTION_ORTHOGONAL; Cursor old_camera_cursor = camera_cursor; camera_cursor = cursor; - camera_cursor.x_rot = Math::lerp(old_camera_cursor.x_rot, cursor.x_rot, MIN(1.f, p_interp_delta * (1 / orbit_inertia))); - camera_cursor.y_rot = Math::lerp(old_camera_cursor.y_rot, cursor.y_rot, MIN(1.f, p_interp_delta * (1 / orbit_inertia))); + if (p_interp_delta > 0) { + + //------- + // Perform smoothing + + if (is_freelook_active()) { - camera_cursor.pos = old_camera_cursor.pos.linear_interpolate(cursor.pos, MIN(1.f, p_interp_delta * (1 / translation_inertia))); - camera_cursor.distance = Math::lerp(old_camera_cursor.distance, cursor.distance, MIN(1.f, p_interp_delta * (1 / translation_inertia))); + // Higher inertia should increase "lag" (lerp with factor between 0 and 1) + // Inertia of zero should produce instant movement (lerp with factor of 1) in this case it returns a really high value and gets clamped to 1. + real_t inertia = EDITOR_GET("editors/3d/freelook/freelook_inertia"); + inertia = MAX(0.001, inertia); + real_t factor = (1.0 / inertia) * p_interp_delta; - if (p_interp_delta == 0 || is_freelook_active()) { - camera_cursor = cursor; + // We interpolate a different point here, because in freelook mode the focus point (cursor.pos) orbits around eye_pos + camera_cursor.eye_pos = old_camera_cursor.eye_pos.linear_interpolate(cursor.eye_pos, CLAMP(factor, 0, 1)); + //camera_cursor.pos = camera_cursor.eye_pos + (cursor.pos - cursor.eye_pos); + + float orbit_inertia = EDITOR_GET("editors/3d/navigation_feel/orbit_inertia"); + orbit_inertia = MAX(0.0001, orbit_inertia); + camera_cursor.x_rot = Math::lerp(old_camera_cursor.x_rot, cursor.x_rot, MIN(1.f, p_interp_delta * (1 / orbit_inertia))); + camera_cursor.y_rot = Math::lerp(old_camera_cursor.y_rot, cursor.y_rot, MIN(1.f, p_interp_delta * (1 / orbit_inertia))); + + Vector3 forward = to_camera_transform(camera_cursor).basis.xform(Vector3(0, 0, -1)); + camera_cursor.pos = camera_cursor.eye_pos + forward * camera_cursor.distance; + + } else { + + //when not being manipulated, move softly + float free_orbit_inertia = EDITOR_GET("editors/3d/navigation_feel/orbit_inertia"); + float free_translation_inertia = EDITOR_GET("editors/3d/navigation_feel/translation_inertia"); + //when being manipulated, move more quickly + float manip_orbit_inertia = EDITOR_GET("editors/3d/navigation_feel/manipulation_orbit_inertia"); + float manip_translation_inertia = EDITOR_GET("editors/3d/navigation_feel/manipulation_translation_inertia"); + + float zoom_inertia = EDITOR_GET("editors/3d/navigation_feel/zoom_inertia"); + + //determine if being manipulated + bool manipulated = Input::get_singleton()->get_mouse_button_mask() & (2 | 4); + manipulated |= Input::get_singleton()->is_key_pressed(KEY_SHIFT); + manipulated |= Input::get_singleton()->is_key_pressed(KEY_ALT); + manipulated |= Input::get_singleton()->is_key_pressed(KEY_CONTROL); + + float orbit_inertia = MAX(0.00001, manipulated ? manip_orbit_inertia : free_orbit_inertia); + float translation_inertia = MAX(0.0001, manipulated ? manip_translation_inertia : free_translation_inertia); + zoom_inertia = MAX(0.0001, zoom_inertia); + + camera_cursor.x_rot = Math::lerp(old_camera_cursor.x_rot, cursor.x_rot, MIN(1.f, p_interp_delta * (1 / orbit_inertia))); + camera_cursor.y_rot = Math::lerp(old_camera_cursor.y_rot, cursor.y_rot, MIN(1.f, p_interp_delta * (1 / orbit_inertia))); + + camera_cursor.pos = old_camera_cursor.pos.linear_interpolate(cursor.pos, MIN(1.f, p_interp_delta * (1 / translation_inertia))); + camera_cursor.distance = Math::lerp(old_camera_cursor.distance, cursor.distance, MIN(1.f, p_interp_delta * (1 / zoom_inertia))); + } } - float tolerance = 0.0001; + //------- + // Apply camera transform + + float tolerance = 0.001; bool equal = true; - if (Math::abs(old_camera_cursor.x_rot - camera_cursor.x_rot) > tolerance || Math::abs(old_camera_cursor.y_rot - camera_cursor.y_rot) > tolerance) + if (Math::abs(old_camera_cursor.x_rot - camera_cursor.x_rot) > tolerance || Math::abs(old_camera_cursor.y_rot - camera_cursor.y_rot) > tolerance) { equal = false; + } - if (equal && old_camera_cursor.pos.distance_squared_to(camera_cursor.pos) > tolerance * tolerance) + if (equal && old_camera_cursor.pos.distance_squared_to(camera_cursor.pos) > tolerance * tolerance) { equal = false; + } - if (equal && Math::abs(old_camera_cursor.distance - camera_cursor.distance) > tolerance) + if (equal && Math::abs(old_camera_cursor.distance - camera_cursor.distance) > tolerance) { equal = false; + } - if (!equal || p_interp_delta == 0 || is_freelook_active()) { + if (!equal || p_interp_delta == 0 || is_freelook_active() || is_orthogonal != orthogonal) { camera->set_global_transform(to_camera_transform(camera_cursor)); update_transform_gizmo_view(); + + if (orthogonal) { + //camera->set_orthogonal(size.width*cursor.distance,get_znear(),get_zfar()); + camera->set_orthogonal(2 * cursor.distance, 0.1, 8192); + } else + camera->set_perspective(get_fov(), get_znear(), get_zfar()); } } @@ -217,7 +260,7 @@ Transform SpatialEditorViewport::_get_camera_transform() const { return camera->get_global_transform(); } -Vector3 SpatialEditorViewport::_get_camera_pos() const { +Vector3 SpatialEditorViewport::_get_camera_position() const { return _get_camera_transform().origin; } @@ -464,8 +507,7 @@ void SpatialEditorViewport::_select_region() { Vector<Plane> frustum; - Vector3 cam_pos = _get_camera_pos(); - Set<Ref<SpatialEditorGizmo> > found_gizmos; + Vector3 cam_pos = _get_camera_position(); for (int i = 0; i < 4; i++) { @@ -485,6 +527,9 @@ void SpatialEditorViewport::_select_region() { frustum.push_back(far); Vector<ObjectID> instances = VisualServer::get_singleton()->instances_cull_convex(frustum, get_tree()->get_root()->get_world()->get_scenario()); + Vector<Spatial *> selected; + + Node *edited_scene = get_tree()->get_edited_scene_root(); for (int i = 0; i < instances.size(); i++) { @@ -497,11 +542,14 @@ void SpatialEditorViewport::_select_region() { if (!seg.is_valid()) continue; - if (found_gizmos.has(seg)) - continue; + Spatial *root_sp = sp; + while (root_sp && root_sp != edited_scene && root_sp->get_owner() != edited_scene && !edited_scene->is_editable_instance(root_sp->get_owner())) { + root_sp = Object::cast_to<Spatial>(root_sp->get_owner()); + } - if (seg->intersect_frustum(camera, frustum)) - _select(sp, true, false); + if (selected.find(root_sp) == -1) + if (seg->intersect_frustum(camera, frustum)) + _select(root_sp, true, false); } } @@ -525,8 +573,6 @@ void SpatialEditorViewport::_compute_edit(const Point2 &p_point) { List<Node *> &selection = editor_selection->get_selected_node_list(); - //Vector3 center; - //int nc=0; for (List<Node *>::Element *E = selection.front(); E; E = E->next()) { Spatial *sp = Object::cast_to<Spatial>(E->get()); @@ -538,14 +584,8 @@ void SpatialEditorViewport::_compute_edit(const Point2 &p_point) { continue; se->original = se->sp->get_global_transform(); - //center+=se->original.origin; - //nc++; + se->original_local = se->sp->get_transform(); } - - /* - if (nc) - _edit.center=center/float(nc); - */ } static int _get_key_modifier_setting(const String &p_property) { @@ -596,7 +636,7 @@ bool SpatialEditorViewport::_gizmo_select(const Vector2 &p_screenpos, bool p_hig for (int i = 0; i < 3; i++) { - Vector3 grabber_pos = gt.origin + gt.basis.get_axis(i) * gs; + Vector3 grabber_pos = gt.origin + gt.basis.get_axis(i) * gs * (GIZMO_ARROW_OFFSET + (GIZMO_ARROW_SIZE * 0.5)); float grabber_radius = gs * GIZMO_ARROW_SIZE; Vector3 r; @@ -611,7 +651,7 @@ bool SpatialEditorViewport::_gizmo_select(const Vector2 &p_screenpos, bool p_hig } bool is_plane_translate = false; - // second try + // plane select if (col_axis == -1) { col_d = 1e20; @@ -697,6 +737,43 @@ bool SpatialEditorViewport::_gizmo_select(const Vector2 &p_screenpos, bool p_hig } } + if (spatial_editor->get_tool_mode() == SpatialEditor::TOOL_MODE_SCALE) { + + int col_axis = -1; + float col_d = 1e20; + + for (int i = 0; i < 3; i++) { + + Vector3 grabber_pos = gt.origin + gt.basis.get_axis(i) * gs * GIZMO_SCALE_OFFSET; + float grabber_radius = gs * GIZMO_ARROW_SIZE; + + Vector3 r; + + if (Geometry::segment_intersects_sphere(ray_pos, ray_pos + ray * 10000.0, grabber_pos, grabber_radius, &r)) { + float d = r.distance_to(ray_pos); + if (d < col_d) { + col_d = d; + col_axis = i; + } + } + } + + if (col_axis != -1) { + + if (p_highlight_only) { + + spatial_editor->select_gizmo_highlight_axis(col_axis + 9); + + } else { + //handle scale + _edit.mode = TRANSFORM_SCALE; + _compute_edit(Point2(p_screenpos.x, p_screenpos.y)); + _edit.plane = TransformPlane(TRANSFORM_X_AXIS + col_axis); + } + return true; + } + } + if (p_highlight_only) spatial_editor->select_gizmo_highlight_axis(-1); @@ -797,20 +874,26 @@ void SpatialEditorViewport::_sinput(const Ref<InputEvent> &p_event) { Ref<InputEventMouseButton> b = p_event; if (b.is_valid()) { - + float zoom_factor = 1 + (ZOOM_MULTIPLIER - 1) * b->get_factor(); switch (b->get_button_index()) { case BUTTON_WHEEL_UP: { - scale_cursor_distance(is_freelook_active() ? ZOOM_MULTIPLIER : 1.0 / ZOOM_MULTIPLIER); + if (is_freelook_active()) + scale_freelook_speed(zoom_factor); + else + scale_cursor_distance(1.0 / zoom_factor); } break; case BUTTON_WHEEL_DOWN: { - scale_cursor_distance(is_freelook_active() ? 1.0 / ZOOM_MULTIPLIER : ZOOM_MULTIPLIER); + if (is_freelook_active()) + scale_freelook_speed(1.0 / zoom_factor); + else + scale_cursor_distance(zoom_factor); } break; case BUTTON_RIGHT: { - NavigationScheme nav_scheme = (NavigationScheme)EditorSettings::get_singleton()->get("editors/3d/navigation_scheme").operator int(); + NavigationScheme nav_scheme = (NavigationScheme)EditorSettings::get_singleton()->get("editors/3d/navigation/navigation_scheme").operator int(); if (b->is_pressed() && _edit.gizmo.is_valid()) { //restore @@ -856,11 +939,11 @@ void SpatialEditorViewport::_sinput(const Ref<InputEvent> &p_event) { if (b->is_pressed()) { int mod = _get_key_modifier(b); - if (mod == _get_key_modifier_setting("editors/3d/freelook_activation_modifier")) { - freelook_active = true; + if (mod == _get_key_modifier_setting("editors/3d/freelook/freelook_activation_modifier")) { + set_freelook_active(true); } } else { - freelook_active = false; + set_freelook_active(false); } if (freelook_active && !surface->has_focus()) { @@ -908,7 +991,7 @@ void SpatialEditorViewport::_sinput(const Ref<InputEvent> &p_event) { if (b->is_pressed()) { - NavigationScheme nav_scheme = (NavigationScheme)EditorSettings::get_singleton()->get("editors/3d/navigation_scheme").operator int(); + NavigationScheme nav_scheme = (NavigationScheme)EditorSettings::get_singleton()->get("editors/3d/navigation/navigation_scheme").operator int(); if ((nav_scheme == NAVIGATION_MAYA || nav_scheme == NAVIGATION_MODO) && b->get_alt()) { break; } @@ -1117,7 +1200,7 @@ void SpatialEditorViewport::_sinput(const Ref<InputEvent> &p_event) { _gizmo_select(_edit.mouse_pos, true); } - NavigationScheme nav_scheme = (NavigationScheme)EditorSettings::get_singleton()->get("editors/3d/navigation_scheme").operator int(); + NavigationScheme nav_scheme = (NavigationScheme)EditorSettings::get_singleton()->get("editors/3d/navigation/navigation_scheme").operator int(); NavigationMode nav_mode = NAVIGATION_NONE; if (_edit.gizmo.is_valid()) { @@ -1169,7 +1252,28 @@ void SpatialEditorViewport::_sinput(const Ref<InputEvent> &p_event) { case TRANSFORM_SCALE: { - Plane plane = Plane(_edit.center, _get_camera_normal()); + Vector3 motion_mask; + Plane plane; + bool plane_mv; + + switch (_edit.plane) { + case TRANSFORM_VIEW: + motion_mask = Vector3(0, 0, 0); + plane = Plane(_edit.center, _get_camera_normal()); + break; + case TRANSFORM_X_AXIS: + motion_mask = spatial_editor->get_gizmo_transform().basis.get_axis(0); + plane = Plane(_edit.center, motion_mask.cross(motion_mask.cross(_get_camera_normal())).normalized()); + break; + case TRANSFORM_Y_AXIS: + motion_mask = spatial_editor->get_gizmo_transform().basis.get_axis(1); + plane = Plane(_edit.center, motion_mask.cross(motion_mask.cross(_get_camera_normal())).normalized()); + break; + case TRANSFORM_Z_AXIS: + motion_mask = spatial_editor->get_gizmo_transform().basis.get_axis(2); + plane = Plane(_edit.center, motion_mask.cross(motion_mask.cross(_get_camera_normal())).normalized()); + break; + } Vector3 intersection; if (!plane.intersects_ray(ray_pos, ray, &intersection)) @@ -1179,42 +1283,78 @@ void SpatialEditorViewport::_sinput(const Ref<InputEvent> &p_event) { if (!plane.intersects_ray(_edit.click_ray_pos, _edit.click_ray, &click)) break; - float center_click_dist = click.distance_to(_edit.center); - float center_inters_dist = intersection.distance_to(_edit.center); - if (center_click_dist == 0) - break; + Vector3 motion = intersection - click; + print_line(String(intersection) + " --- " + String(click)); + if (motion_mask != Vector3()) { - float scale = (center_inters_dist / center_click_dist) * 100.0; + motion = motion_mask.dot(motion) * motion_mask; + } else { - if (_edit.snap || spatial_editor->is_snap_enabled()) { + float center_click_dist = click.distance_to(_edit.center); + float center_inters_dist = intersection.distance_to(_edit.center); + if (center_click_dist == 0) + break; - scale = Math::stepify(scale, spatial_editor->get_scale_snap()); + float scale = center_inters_dist - center_click_dist; + motion = Vector3(scale, scale, scale); } - set_message(vformat(TTR("Scaling to %s%%."), String::num(scale, 1))); - scale /= 100.0; + List<Node *> &selection = editor_selection->get_selected_node_list(); - Transform r; - r.basis.scale(Vector3(scale, scale, scale)); + bool local_coords = (spatial_editor->are_local_coords_enabled() && motion_mask != Vector3()); // Disable local transformation for TRANSFORM_VIEW - List<Node *> &selection = editor_selection->get_selected_node_list(); + float snap = 0; + if (_edit.snap || spatial_editor->is_snap_enabled()) { + + snap = spatial_editor->get_scale_snap() / 100; + } for (List<Node *>::Element *E = selection.front(); E; E = E->next()) { Spatial *sp = Object::cast_to<Spatial>(E->get()); - if (!sp) + if (!sp) { continue; + } SpatialEditorSelectedItem *se = editor_selection->get_node_editor_data<SpatialEditorSelectedItem>(sp); - if (!se) + if (!se) { continue; + } Transform original = se->original; - + Transform original_local = se->original_local; Transform base = Transform(Basis(), _edit.center); - Transform t = base * (r * (base.inverse() * original)); + Transform t; + Vector3 local_scale; - sp->set_global_transform(t); + if (local_coords) { + + Basis g = original.basis.orthonormalized(); + Vector3 local_motion = g.inverse().xform(motion); + + if (_edit.snap || spatial_editor->is_snap_enabled()) { + local_motion.snap(Vector3(snap, snap, snap)); + } + + local_scale = original_local.basis.get_scale() * (local_motion + Vector3(1, 1, 1)); + + } else { + + if (_edit.snap || spatial_editor->is_snap_enabled()) { + motion.snap(Vector3(snap, snap, snap)); + } + + Transform r; + r.basis.scale(motion + Vector3(1, 1, 1)); + t = base * (r * (base.inverse() * original)); + } + + // Apply scale + if (local_coords) { + sp->set_scale(local_scale); + } else { + sp->set_global_transform(t); + } } surface->update(); @@ -1341,6 +1481,7 @@ void SpatialEditorViewport::_sinput(const Ref<InputEvent> &p_event) { case TRANSFORM_ROTATE: { Plane plane; + Vector3 axis; switch (_edit.plane) { case TRANSFORM_VIEW: @@ -1348,12 +1489,15 @@ void SpatialEditorViewport::_sinput(const Ref<InputEvent> &p_event) { break; case TRANSFORM_X_AXIS: plane = Plane(_edit.center, spatial_editor->get_gizmo_transform().basis.get_axis(0)); + axis = Vector3(1, 0, 0); break; case TRANSFORM_Y_AXIS: plane = Plane(_edit.center, spatial_editor->get_gizmo_transform().basis.get_axis(1)); + axis = Vector3(0, 1, 0); break; case TRANSFORM_Z_AXIS: plane = Plane(_edit.center, spatial_editor->get_gizmo_transform().basis.get_axis(2)); + axis = Vector3(0, 0, 1); break; } @@ -1369,6 +1513,7 @@ void SpatialEditorViewport::_sinput(const Ref<InputEvent> &p_event) { Vector3 x_axis = plane.normal.cross(y_axis).normalized(); float angle = Math::atan2(x_axis.dot(intersection - _edit.center), y_axis.dot(intersection - _edit.center)); + if (_edit.snap || spatial_editor->is_snap_enabled()) { float snap = spatial_editor->get_rotate_snap(); @@ -1385,11 +1530,10 @@ void SpatialEditorViewport::_sinput(const Ref<InputEvent> &p_event) { set_message(vformat(TTR("Rotating %s degrees."), rtos(Math::rad2deg(angle)))); } - Transform r; - r.basis.rotate(plane.normal, angle); - List<Node *> &selection = editor_selection->get_selected_node_list(); + bool local_coords = spatial_editor->are_local_coords_enabled(); + for (List<Node *>::Element *E = selection.front(); E; E = E->next()) { Spatial *sp = Object::cast_to<Spatial>(E->get()); @@ -1400,27 +1544,33 @@ void SpatialEditorViewport::_sinput(const Ref<InputEvent> &p_event) { if (!se) continue; - Transform original = se->original; + Transform t; - Transform base = Transform(Basis(), _edit.center); - Transform t = base * r * base.inverse() * original; + if (local_coords) { - sp->set_global_transform(t); + Transform original_local = se->original_local; + Basis rot = Basis(axis, angle); + + t.basis = original_local.get_basis() * rot; + t.origin = original_local.origin; + + sp->set_transform(t); + + } else { + + Transform original = se->original; + Transform r; + Transform base = Transform(Basis(), _edit.center); + + r.basis.rotate(plane.normal, angle); + t = base * r * base.inverse() * original; + + sp->set_global_transform(t); + } } surface->update(); - /* - VisualServer::get_singleton()->poly_clear(indicators); - - Vector<Vector3> points; - Vector<Vector3> empty; - Vector<Color> colors; - points.push_back(intersection); - points.push_back(_edit.original.origin); - colors.push_back( Color(255,155,100) ); - colors.push_back( Color(255,155,100) ); - VisualServer::get_singleton()->poly_add_primitive(indicators,points,empty,colors,empty); - */ + } break; default: {} } @@ -1440,11 +1590,11 @@ void SpatialEditorViewport::_sinput(const Ref<InputEvent> &p_event) { int mod = _get_key_modifier(m); - if (mod == _get_key_modifier_setting("editors/3d/pan_modifier")) + if (mod == _get_key_modifier_setting("editors/3d/navigation/pan_modifier")) nav_mode = NAVIGATION_PAN; - else if (mod == _get_key_modifier_setting("editors/3d/zoom_modifier")) + else if (mod == _get_key_modifier_setting("editors/3d/navigation/zoom_modifier")) nav_mode = NAVIGATION_ZOOM; - else if (mod == _get_key_modifier_setting("editors/3d/orbit_modifier")) + else if (mod == _get_key_modifier_setting("editors/3d/navigation/orbit_modifier")) nav_mode = NAVIGATION_ORBIT; } else if (nav_scheme == NAVIGATION_MAYA) { @@ -1452,16 +1602,16 @@ void SpatialEditorViewport::_sinput(const Ref<InputEvent> &p_event) { nav_mode = NAVIGATION_PAN; } - } else if (EditorSettings::get_singleton()->get("editors/3d/emulate_3_button_mouse")) { + } else if (EditorSettings::get_singleton()->get("editors/3d/navigation/emulate_3_button_mouse")) { // Handle trackpad (no external mouse) use case int mod = _get_key_modifier(m); if (mod) { - if (mod == _get_key_modifier_setting("editors/3d/pan_modifier")) + if (mod == _get_key_modifier_setting("editors/3d/navigation/pan_modifier")) nav_mode = NAVIGATION_PAN; - else if (mod == _get_key_modifier_setting("editors/3d/zoom_modifier")) + else if (mod == _get_key_modifier_setting("editors/3d/navigation/zoom_modifier")) nav_mode = NAVIGATION_ZOOM; - else if (mod == _get_key_modifier_setting("editors/3d/orbit_modifier")) + else if (mod == _get_key_modifier_setting("editors/3d/navigation/orbit_modifier")) nav_mode = NAVIGATION_ORBIT; } } @@ -1494,7 +1644,7 @@ void SpatialEditorViewport::_sinput(const Ref<InputEvent> &p_event) { if (nav_scheme == NAVIGATION_MAYA && m->get_shift()) zoom_speed *= zoom_speed_modifier; - NavigationZoomStyle zoom_style = (NavigationZoomStyle)EditorSettings::get_singleton()->get("editors/3d/zoom_style").operator int(); + NavigationZoomStyle zoom_style = (NavigationZoomStyle)EditorSettings::get_singleton()->get("editors/3d/navigation/zoom_style").operator int(); if (zoom_style == NAVIGATION_ZOOM_HORIZONTAL) { if (m->get_relative().x > 0) scale_cursor_distance(1 - m->get_relative().x * zoom_speed); @@ -1512,7 +1662,7 @@ void SpatialEditorViewport::_sinput(const Ref<InputEvent> &p_event) { case NAVIGATION_ORBIT: { Point2i relative = _get_warped_mouse_motion(m); - real_t degrees_per_pixel = EditorSettings::get_singleton()->get("editors/3d/orbit_sensitivity"); + real_t degrees_per_pixel = EditorSettings::get_singleton()->get("editors/3d/navigation_feel/orbit_sensitivity"); real_t radians_per_pixel = Math::deg2rad(degrees_per_pixel); cursor.x_rot += relative.y * radians_per_pixel; @@ -1531,9 +1681,12 @@ void SpatialEditorViewport::_sinput(const Ref<InputEvent> &p_event) { if (!orthogonal) { Point2i relative = _get_warped_mouse_motion(m); - real_t degrees_per_pixel = EditorSettings::get_singleton()->get("editors/3d/orbit_sensitivity"); + real_t degrees_per_pixel = EditorSettings::get_singleton()->get("editors/3d/navigation_feel/orbit_sensitivity"); real_t radians_per_pixel = Math::deg2rad(degrees_per_pixel); + // Note: do NOT assume the camera has the "current" transform, because it is interpolated and may have "lag". + Transform prev_camera_transform = to_camera_transform(cursor); + cursor.x_rot += relative.y * radians_per_pixel; cursor.y_rot += relative.x * radians_per_pixel; if (cursor.x_rot > Math_PI / 2.0) @@ -1541,12 +1694,12 @@ void SpatialEditorViewport::_sinput(const Ref<InputEvent> &p_event) { if (cursor.x_rot < -Math_PI / 2.0) cursor.x_rot = -Math_PI / 2.0; - // Look is like Orbit, except the cursor translates, not the camera + // Look is like the opposite of Orbit: the focus point rotates around the camera Transform camera_transform = to_camera_transform(cursor); Vector3 pos = camera_transform.xform(Vector3(0, 0, 0)); - Vector3 diff = camera->get_translation() - pos; + Vector3 prev_pos = prev_camera_transform.xform(Vector3(0, 0, 0)); + Vector3 diff = prev_pos - pos; cursor.pos += diff; - freelook_target_position += diff; name = ""; _update_name(); @@ -1644,23 +1797,57 @@ void SpatialEditorViewport::_sinput(const Ref<InputEvent> &p_event) { } } +void SpatialEditorViewport::set_freelook_active(bool active_now) { + + if (!freelook_active && active_now) { + // Sync camera cursor to cursor to "cut" interpolation jumps due to changing referential + cursor = camera_cursor; + + // Make sure eye_pos is synced, because freelook referential is eye pos rather than orbit pos + Vector3 forward = to_camera_transform(cursor).basis.xform(Vector3(0, 0, -1)); + cursor.eye_pos = cursor.pos - cursor.distance * forward; + // Also sync the camera cursor, otherwise switching to freelook will be trippy if inertia is active + camera_cursor.eye_pos = cursor.eye_pos; + + if (EditorSettings::get_singleton()->get("editors/3d/freelook/freelook_speed_zoom_link")) { + // Re-adjust freelook speed from the current zoom level + real_t base_speed = EditorSettings::get_singleton()->get("editors/3d/freelook/freelook_base_speed"); + freelook_speed = base_speed * cursor.distance; + } + + } else if (freelook_active && !active_now) { + // Sync camera cursor to cursor to "cut" interpolation jumps due to changing referential + cursor = camera_cursor; + } + + freelook_active = active_now; +} + void SpatialEditorViewport::scale_cursor_distance(real_t scale) { // Prevents zero distance which would short-circuit any scaling if (cursor.distance < ZOOM_MIN_DISTANCE) cursor.distance = ZOOM_MIN_DISTANCE; - real_t prev_distance = cursor.distance; cursor.distance *= scale; if (cursor.distance < ZOOM_MIN_DISTANCE) cursor.distance = ZOOM_MIN_DISTANCE; - if (is_freelook_active()) { - // In freelook mode, cursor reference is reversed so it needs to be adjusted - Vector3 forward = camera->get_transform().basis.xform(Vector3(0, 0, -1)); - cursor.pos += (cursor.distance - prev_distance) * forward; - } + zoom_indicator_delay = ZOOM_INDICATOR_DELAY_S; + surface->update(); +} + +void SpatialEditorViewport::scale_freelook_speed(real_t scale) { + + // Prevents zero distance which would short-circuit any scaling + if (freelook_speed < FREELOOK_MIN_SPEED) + freelook_speed = FREELOOK_MIN_SPEED; + + freelook_speed *= scale; + + if (freelook_speed < FREELOOK_MIN_SPEED) + freelook_speed = FREELOOK_MIN_SPEED; zoom_indicator_delay = ZOOM_INDICATOR_DELAY_S; surface->update(); @@ -1668,7 +1855,7 @@ void SpatialEditorViewport::scale_cursor_distance(real_t scale) { Point2i SpatialEditorViewport::_get_warped_mouse_motion(const Ref<InputEventMouseMotion> &p_ev_mouse_motion) const { Point2i relative; - if (bool(EDITOR_DEF("editors/3d/warped_mouse_panning", false))) { + if (bool(EDITOR_DEF("editors/3d/navigation/warped_mouse_panning", false))) { relative = Input::get_singleton()->warp_mouse_motion(p_ev_mouse_motion, surface->get_global_rect()); } else { relative = p_ev_mouse_motion->get_relative(); @@ -1679,7 +1866,6 @@ Point2i SpatialEditorViewport::_get_warped_mouse_motion(const Ref<InputEventMous void SpatialEditorViewport::_update_freelook(real_t delta) { if (!is_freelook_active()) { - freelook_target_position = cursor.pos; return; } @@ -1722,21 +1908,15 @@ void SpatialEditorViewport::_update_freelook(real_t delta) { speed_modifier = true; } - real_t inertia = EDITOR_DEF("editors/3d/freelook_inertia", 0.2); - inertia = MAX(0, inertia); - const real_t base_speed = EDITOR_DEF("editors/3d/freelook_base_speed", 0.5); - const real_t modifier_speed_factor = EDITOR_DEF("editors/3d/freelook_modifier_speed_factor", 5); - - real_t speed = base_speed * cursor.distance; - if (speed_modifier) + real_t speed = freelook_speed; + if (speed_modifier) { + real_t modifier_speed_factor = EditorSettings::get_singleton()->get("editors/3d/freelook/freelook_modifier_speed_factor"); speed *= modifier_speed_factor; + } - // Higher inertia should increase "lag" (lerp with factor between 0 and 1) - // Inertia of zero should produce instant movement (lerp with factor of 1) in this case it returns a really high value and gets clamped to 1. - - freelook_target_position += direction * speed; - real_t factor = (1.0 / (inertia + 0.001)) * delta; - cursor.pos = cursor.pos.linear_interpolate(freelook_target_position, CLAMP(factor, 0, 1)); + Vector3 motion = direction * speed * delta; + cursor.pos += motion; + cursor.eye_pos += motion; } void SpatialEditorViewport::set_message(String p_message, float p_time) { @@ -1775,7 +1955,7 @@ void SpatialEditorViewport::_notification(int p_what) { } */ - real_t delta = get_tree()->get_idle_process_time(); + real_t delta = get_process_delta_time(); if (zoom_indicator_delay > 0) { zoom_indicator_delay -= delta; @@ -1786,7 +1966,7 @@ void SpatialEditorViewport::_notification(int p_what) { _update_freelook(delta); - _update_camera(get_process_delta_time()); + _update_camera(delta); Map<Node *, Object *> &selection = editor_selection->get_selection(); @@ -1837,7 +2017,7 @@ void SpatialEditorViewport::_notification(int p_what) { last_message = message; } - message_time -= get_fixed_process_delta_time(); + message_time -= get_physics_process_delta_time(); if (message_time < 0) surface->update(); } @@ -1915,7 +2095,7 @@ void SpatialEditorViewport::_notification(int p_what) { } // TODO That should be part of the drawing API... -static void stroke_rect(CanvasItem *ci, Rect2 rect, Color color, real_t width = 1.0) { +static void stroke_rect(CanvasItem &ci, Rect2 rect, Color color, real_t width = 1.0) { // a---b // | | @@ -1925,10 +2105,31 @@ static void stroke_rect(CanvasItem *ci, Rect2 rect, Color color, real_t width = Vector2 c(rect.position.x, rect.position.y + rect.size.y); Vector2 d(rect.position + rect.size); - ci->draw_line(a, b, color, width); - ci->draw_line(b, d, color, width); - ci->draw_line(d, c, color, width); - ci->draw_line(c, a, color, width); + ci.draw_line(a, b, color, width); + ci.draw_line(b, d, color, width); + ci.draw_line(d, c, color, width); + ci.draw_line(c, a, color, width); +} + +static void draw_indicator_bar(Control &surface, real_t fill, Ref<Texture> icon) { + + // Adjust bar size from control height + Vector2 surface_size = surface.get_size(); + real_t h = surface_size.y / 2.0; + real_t y = (surface_size.y - h) / 2.0; + + Rect2 r(10, y, 6, h); + real_t sy = r.size.y * fill; + + // Note: because this bar appears over the viewport, it has to stay readable for any background color + // Draw both neutral dark and bright colors to account this + surface.draw_rect(r, Color(1, 1, 1, 0.2)); + surface.draw_rect(Rect2(r.position.x, r.position.y + r.size.y - sy, r.size.x, sy), Color(1, 1, 1, 0.6)); + stroke_rect(surface, r.grow(1), Color(0, 0, 0, 0.7)); + + Vector2 icon_size = icon->get_size(); + Vector2 icon_pos = Vector2(r.position.x - (icon_size.x - r.size.x) / 2, r.position.y + r.size.y + 2); + surface.draw_texture(icon, icon_pos); } void SpatialEditorViewport::_draw() { @@ -1987,35 +2188,47 @@ void SpatialEditorViewport::_draw() { draw_rect = Rect2(Vector2(), s).clip(draw_rect); - stroke_rect(surface, draw_rect, Color(0.6, 0.6, 0.1, 0.5), 2.0); + stroke_rect(*surface, draw_rect, Color(0.6, 0.6, 0.1, 0.5), 2.0); } else { if (zoom_indicator_delay > 0.0) { - // Show indicative zoom factor - real_t min_distance = ZOOM_MIN_DISTANCE; // TODO Why not pick znear to limit zoom? - real_t max_distance = camera->get_zfar(); - real_t scale_length = (max_distance - min_distance); + if (is_freelook_active()) { + // Show speed + + real_t min_speed = FREELOOK_MIN_SPEED; + real_t max_speed = camera->get_zfar(); + real_t scale_length = (max_speed - min_speed); + + if (Math::abs(scale_length) > CMP_EPSILON) { + real_t logscale_t = 1.0 - Math::log(1 + freelook_speed - min_speed) / Math::log(1 + scale_length); + + // There is no real maximum speed so that factor can become negative, + // Let's make it look asymptotic instead (will decrease slower and slower). + if (logscale_t < 0.25) + logscale_t = 0.25 * Math::exp(4.0 * logscale_t - 1.0); + + draw_indicator_bar(*surface, 1.0 - logscale_t, get_icon("ViewportSpeed", "EditorIcons")); + } - if (Math::abs(scale_length) > CMP_EPSILON) { - real_t logscale_t = 1.0 - Math::log(1 + cursor.distance - min_distance) / Math::log(1 + scale_length); + } else { + // Show zoom - // There is no real maximum distance so that factor can become negative, - // Let's make it look asymptotic instead (will decrease slower and slower). - if (logscale_t < 0.25) - logscale_t = 0.25 * Math::exp(4.0 * logscale_t - 1.0); + real_t min_distance = ZOOM_MIN_DISTANCE; // TODO Why not pick znear to limit zoom? + real_t max_distance = camera->get_zfar(); + real_t scale_length = (max_distance - min_distance); - Vector2 surface_size = surface->get_size(); - real_t h = surface_size.y / 2.0; - real_t y = (surface_size.y - h) / 2.0; + if (Math::abs(scale_length) > CMP_EPSILON) { + real_t logscale_t = 1.0 - Math::log(1 + cursor.distance - min_distance) / Math::log(1 + scale_length); - Rect2 r(10, y, 6, h); - real_t sy = r.size.y * logscale_t; + // There is no real maximum distance so that factor can become negative, + // Let's make it look asymptotic instead (will decrease slower and slower). + if (logscale_t < 0.25) + logscale_t = 0.25 * Math::exp(4.0 * logscale_t - 1.0); - surface->draw_rect(r, Color(1, 1, 1, 0.2)); - surface->draw_rect(Rect2(r.position.x, r.position.y + r.size.y - sy, r.size.x, sy), Color(1, 1, 1, 0.6)); - stroke_rect(surface, r.grow(1), Color(0, 0, 0, 0.7)); + draw_indicator_bar(*surface, logscale_t, get_icon("ViewportZoom", "EditorIcons")); + } } } } @@ -2258,6 +2471,14 @@ void SpatialEditorViewport::_init_gizmo_instance(int p_idx) { //VS::get_singleton()->instance_geometry_set_flag(rotate_gizmo_instance[i],VS::INSTANCE_FLAG_DEPH_SCALE,true); VS::get_singleton()->instance_geometry_set_cast_shadows_setting(rotate_gizmo_instance[i], VS::SHADOW_CASTING_SETTING_OFF); VS::get_singleton()->instance_set_layer_mask(rotate_gizmo_instance[i], layer); + + scale_gizmo_instance[i] = VS::get_singleton()->instance_create(); + VS::get_singleton()->instance_set_base(scale_gizmo_instance[i], spatial_editor->get_scale_gizmo(i)->get_rid()); + VS::get_singleton()->instance_set_scenario(scale_gizmo_instance[i], get_tree()->get_root()->get_world()->get_scenario()); + VS::get_singleton()->instance_set_visible(scale_gizmo_instance[i], false); + //VS::get_singleton()->instance_geometry_set_flag(scale_gizmo_instance[i],VS::INSTANCE_FLAG_DEPH_SCALE,true); + VS::get_singleton()->instance_geometry_set_cast_shadows_setting(scale_gizmo_instance[i], VS::SHADOW_CASTING_SETTING_OFF); + VS::get_singleton()->instance_set_layer_mask(scale_gizmo_instance[i], layer); } } @@ -2267,6 +2488,7 @@ void SpatialEditorViewport::_finish_gizmo_instances() { VS::get_singleton()->free(move_gizmo_instance[i]); VS::get_singleton()->free(move_plane_gizmo_instance[i]); VS::get_singleton()->free(rotate_gizmo_instance[i]); + VS::get_singleton()->free(scale_gizmo_instance[i]); } } void SpatialEditorViewport::_toggle_camera_preview(bool p_activate) { @@ -2361,14 +2583,16 @@ void SpatialEditorViewport::update_transform_gizmo_view() { VisualServer::get_singleton()->instance_set_visible(move_plane_gizmo_instance[i], spatial_editor->is_gizmo_visible() && (spatial_editor->get_tool_mode() == SpatialEditor::TOOL_MODE_SELECT || spatial_editor->get_tool_mode() == SpatialEditor::TOOL_MODE_MOVE)); VisualServer::get_singleton()->instance_set_transform(rotate_gizmo_instance[i], xform); VisualServer::get_singleton()->instance_set_visible(rotate_gizmo_instance[i], spatial_editor->is_gizmo_visible() && (spatial_editor->get_tool_mode() == SpatialEditor::TOOL_MODE_SELECT || spatial_editor->get_tool_mode() == SpatialEditor::TOOL_MODE_ROTATE)); + VisualServer::get_singleton()->instance_set_transform(scale_gizmo_instance[i], xform); + VisualServer::get_singleton()->instance_set_visible(scale_gizmo_instance[i], spatial_editor->is_gizmo_visible() && (spatial_editor->get_tool_mode() == SpatialEditor::TOOL_MODE_SCALE)); } } void SpatialEditorViewport::set_state(const Dictionary &p_state) { - cursor.pos = p_state["pos"]; - cursor.x_rot = p_state["x_rot"]; - cursor.y_rot = p_state["y_rot"]; + cursor.pos = p_state["position"]; + cursor.x_rot = p_state["x_rotation"]; + cursor.y_rot = p_state["y_rotation"]; cursor.distance = p_state["distance"]; bool env = p_state["use_environment"]; bool orth = p_state["use_orthogonal"]; @@ -2410,9 +2634,9 @@ void SpatialEditorViewport::set_state(const Dictionary &p_state) { Dictionary SpatialEditorViewport::get_state() const { Dictionary d; - d["pos"] = cursor.pos; - d["x_rot"] = cursor.x_rot; - d["y_rot"] = cursor.y_rot; + d["position"] = cursor.pos; + d["x_rotation"] = cursor.x_rot; + d["y_rotation"] = cursor.y_rot; d["distance"] = cursor.distance; d["use_environment"] = camera->get_environment().is_valid(); d["use_orthogonal"] = camera->get_projection() == Camera::PROJECTION_ORTHOGONAL; @@ -2454,6 +2678,7 @@ void SpatialEditorViewport::reset() { cursor.y_rot = 0.5; cursor.distance = 4; cursor.region_select = false; + cursor.pos = Vector3(); _update_name(); } @@ -2540,8 +2765,14 @@ Vector3 SpatialEditorViewport::_get_instance_position(const Point2 &p_pos) const normal = hit_normal; } } - Vector3 center = preview_bounds->get_size() * 0.5; - return point + (center * normal); + Vector3 offset = Vector3(); + for (int i = 0; i < 3; i++) { + if (normal[i] > 0.0) + offset[i] = (preview_bounds->get_size()[i] - (preview_bounds->get_size()[i] + preview_bounds->get_position()[i])); + else if (normal[i] < 0.0) + offset[i] = -(preview_bounds->get_size()[i] + preview_bounds->get_position()[i]); + } + return point + offset; } Rect3 SpatialEditorViewport::_calculate_spatial_bounds(const Spatial *p_parent, const Rect3 p_bounds) { @@ -2829,7 +3060,7 @@ SpatialEditorViewport::SpatialEditorViewport(SpatialEditor *p_spatial_editor, Ed ViewportContainer *c = memnew(ViewportContainer); c->set_stretch(true); add_child(c); - c->set_area_as_parent_rect(); + c->set_anchors_and_margins_preset(Control::PRESET_WIDE); viewport = memnew(Viewport); viewport->set_disable_input(true); @@ -2837,7 +3068,7 @@ SpatialEditorViewport::SpatialEditorViewport(SpatialEditor *p_spatial_editor, Ed surface = memnew(Control); surface->set_drag_forwarding(this); add_child(surface); - surface->set_area_as_parent_rect(); + surface->set_anchors_and_margins_preset(Control::PRESET_WIDE); surface->set_clip_contents(true); camera = memnew(Camera); camera->set_disable_gizmo(true); @@ -2914,6 +3145,7 @@ SpatialEditorViewport::SpatialEditorViewport(SpatialEditor *p_spatial_editor, Ed accept = NULL; freelook_active = false; + freelook_speed = EditorSettings::get_singleton()->get("editors/3d/freelook/freelook_base_speed"); selection_menu = memnew(PopupMenu); add_child(selection_menu); @@ -3246,6 +3478,7 @@ void SpatialEditor::select_gizmo_highlight_axis(int p_axis) { move_gizmo[i]->surface_set_material(0, i == p_axis ? gizmo_hl : gizmo_color[i]); move_plane_gizmo[i]->surface_set_material(0, (i + 6) == p_axis ? gizmo_hl : plane_gizmo_color[i]); rotate_gizmo[i]->surface_set_material(0, (i + 3) == p_axis ? gizmo_hl : gizmo_color[i]); + scale_gizmo[i]->surface_set_material(0, (i + 9) == p_axis ? gizmo_hl : gizmo_color[i]); } } @@ -3256,7 +3489,7 @@ void SpatialEditor::update_transform_gizmo() { bool first = true; Basis gizmo_basis; - bool local_gizmo_coords = transform_menu->get_popup()->is_item_checked(transform_menu->get_popup()->get_item_index(MENU_TRANSFORM_LOCAL_COORDS)); + bool local_gizmo_coords = are_local_coords_enabled(); for (List<Node *>::Element *E = selection.front(); E; E = E->next()) { @@ -3707,20 +3940,13 @@ void SpatialEditor::_menu_item_pressed(int p_option) { void SpatialEditor::_init_indicators() { - //RID mat = VisualServer::get_singleton()->fixed_material_create(); - ///VisualServer::get_singleton()->fixed_material_set_flag(mat, VisualServer::FIXED_MATERIAL_FLAG_USE_ALPHA,true); - //VisualServer::get_singleton()->fixed_material_set_flag(mat, VisualServer::FIXED_MATERIAL_FLAG_USE_COLOR_ARRAY,true); - { indicator_mat.instance(); indicator_mat->set_flag(SpatialMaterial::FLAG_UNSHADED, true); - //indicator_mat->set_flag(SpatialMaterial::FLAG_ONTOP,true); indicator_mat->set_flag(SpatialMaterial::FLAG_ALBEDO_FROM_VERTEX_COLOR, true); indicator_mat->set_flag(SpatialMaterial::FLAG_SRGB_VERTEX_COLOR, true); - indicator_mat->set_feature(SpatialMaterial::FEATURE_TRANSPARENT, true); - PoolVector<Color> grid_colors[3]; PoolVector<Vector3> grid_points[3]; Vector<Color> origin_colors; @@ -3740,50 +3966,31 @@ void SpatialEditor::_init_indicators() { origin_colors.push_back(Color(axis.x, axis.y, axis.z)); origin_points.push_back(axis * 4096); origin_points.push_back(axis * -4096); -#define ORIGIN_GRID_SIZE 100 +#define ORIGIN_GRID_SIZE 50 for (int j = -ORIGIN_GRID_SIZE; j <= ORIGIN_GRID_SIZE; j++) { - for (int k = -ORIGIN_GRID_SIZE; k <= ORIGIN_GRID_SIZE; k++) { - - Vector3 p = axis_n1 * j + axis_n2 * k; - float trans = Math::pow(MAX(0, 1.0 - (Vector2(j, k).length() / ORIGIN_GRID_SIZE)), 2); - - Vector3 pj = axis_n1 * (j + 1) + axis_n2 * k; - float transj = Math::pow(MAX(0, 1.0 - (Vector2(j + 1, k).length() / ORIGIN_GRID_SIZE)), 2); - - Vector3 pk = axis_n1 * j + axis_n2 * (k + 1); - float transk = Math::pow(MAX(0, 1.0 - (Vector2(j, k + 1).length() / ORIGIN_GRID_SIZE)), 2); + Vector3 p1 = axis_n1 * j + axis_n2 * -ORIGIN_GRID_SIZE; + Vector3 p1_dest = p1 * (-axis_n2 + axis_n1); + Vector3 p2 = axis_n2 * j + axis_n1 * -ORIGIN_GRID_SIZE; + Vector3 p2_dest = p2 * (-axis_n1 + axis_n2); - Color trans_color = grid_color; - trans_color.a *= trans; - - Color transk_color = grid_color; - transk_color.a *= transk; - - Color transj_color = grid_color; - transj_color.a *= transj; - - if (j % 10 == 0 || k % 10 == 0) { - trans_color.a *= 2; - } - if ((k + 1) % 10 == 0) { - transk_color.a *= 2; - } - if ((j + 1) % 10 == 0) { - transj_color.a *= 2; - } + Color line_color = grid_color; + if (j == 0) { + continue; + } else if (j % 10 == 0) { + line_color *= 1.5; + } - grid_points[i].push_back(p); - grid_points[i].push_back(pk); - grid_colors[i].push_back(trans_color); - grid_colors[i].push_back(transk_color); + grid_points[i].push_back(p1); + grid_points[i].push_back(p1_dest); + grid_colors[i].push_back(line_color); + grid_colors[i].push_back(line_color); - grid_points[i].push_back(p); - grid_points[i].push_back(pj); - grid_colors[i].push_back(trans_color); - grid_colors[i].push_back(transj_color); - } + grid_points[i].push_back(p2); + grid_points[i].push_back(p2_dest); + grid_colors[i].push_back(line_color); + grid_colors[i].push_back(line_color); } grid[i] = VisualServer::get_singleton()->mesh_create(); @@ -3827,32 +4034,6 @@ void SpatialEditor::_init_indicators() { } { - cursor_mesh = VisualServer::get_singleton()->mesh_create(); - PoolVector<Vector3> cursor_points; - float cs = 0.25; - cursor_points.push_back(Vector3(+cs, 0, 0)); - cursor_points.push_back(Vector3(-cs, 0, 0)); - cursor_points.push_back(Vector3(0, +cs, 0)); - cursor_points.push_back(Vector3(0, -cs, 0)); - cursor_points.push_back(Vector3(0, 0, +cs)); - cursor_points.push_back(Vector3(0, 0, -cs)); - cursor_material.instance(); - cursor_material->set_albedo(Color(0, 1, 1)); - cursor_material->set_flag(SpatialMaterial::FLAG_UNSHADED, true); - - Array d; - d.resize(VS::ARRAY_MAX); - d[VS::ARRAY_VERTEX] = cursor_points; - VisualServer::get_singleton()->mesh_add_surface_from_arrays(cursor_mesh, VS::PRIMITIVE_LINES, d); - VisualServer::get_singleton()->mesh_surface_set_material(cursor_mesh, 0, cursor_material->get_rid()); - - cursor_instance = VisualServer::get_singleton()->instance_create2(cursor_mesh, get_tree()->get_root()->get_world()->get_scenario()); - VS::get_singleton()->instance_set_layer_mask(cursor_instance, 1 << SpatialEditorViewport::GIZMO_GRID_LAYER); - - VisualServer::get_singleton()->instance_geometry_set_cast_shadows_setting(cursor_instance, VS::SHADOW_CASTING_SETTING_OFF); - } - - { //move gizmo @@ -3870,6 +4051,7 @@ void SpatialEditor::_init_indicators() { move_gizmo[i] = Ref<ArrayMesh>(memnew(ArrayMesh)); move_plane_gizmo[i] = Ref<ArrayMesh>(memnew(ArrayMesh)); rotate_gizmo[i] = Ref<ArrayMesh>(memnew(ArrayMesh)); + scale_gizmo[i] = Ref<ArrayMesh>(memnew(ArrayMesh)); Ref<SpatialMaterial> mat = memnew(SpatialMaterial); mat->set_flag(SpatialMaterial::FLAG_UNSHADED, true); @@ -3892,25 +4074,25 @@ void SpatialEditor::_init_indicators() { Vector3 ivec3; ivec3[(i + 2) % 3] = 1; + //translate { Ref<SurfaceTool> surftool = memnew(SurfaceTool); surftool->begin(Mesh::PRIMITIVE_TRIANGLES); - //translate - + // Arrow profile const int arrow_points = 5; Vector3 arrow[5] = { nivec * 0.0 + ivec * 0.0, nivec * 0.01 + ivec * 0.0, - nivec * 0.01 + ivec * 1.0, - nivec * 0.1 + ivec * 1.0, - nivec * 0.0 + ivec * (1 + GIZMO_ARROW_SIZE), + nivec * 0.01 + ivec * GIZMO_ARROW_OFFSET, + nivec * 0.065 + ivec * GIZMO_ARROW_OFFSET, + nivec * 0.0 + ivec * (GIZMO_ARROW_OFFSET + GIZMO_ARROW_SIZE), }; int arrow_sides = 6; - for (int k = 0; k < 7; k++) { + for (int k = 0; k < 6; k++) { Basis ma(ivec, Math_PI * 2 * float(k) / arrow_sides); Basis mb(ivec, Math_PI * 2 * float(k + 1) / arrow_sides); @@ -3937,7 +4119,7 @@ void SpatialEditor::_init_indicators() { surftool->commit(move_gizmo[i]); } - // plane translation + // Plane Translation { Ref<SurfaceTool> surftool = memnew(SurfaceTool); surftool->begin(Mesh::PRIMITIVE_TRIANGLES); @@ -3980,6 +4162,7 @@ void SpatialEditor::_init_indicators() { surftool->commit(move_plane_gizmo[i]); } + // Rotate { Ref<SurfaceTool> surftool = memnew(SurfaceTool); @@ -3993,7 +4176,7 @@ void SpatialEditor::_init_indicators() { ivec * 0.02 + ivec2 * 0.02 + ivec2 * GIZMO_CIRCLE_SIZE, }; - for (int k = 0; k < 33; k++) { + for (int k = 0; k < 32; k++) { Basis ma(ivec, Math_PI * 2 * float(k) / 32); Basis mb(ivec, Math_PI * 2 * float(k + 1) / 32); @@ -4019,19 +4202,55 @@ void SpatialEditor::_init_indicators() { surftool->set_material(mat); surftool->commit(rotate_gizmo[i]); } - } - } - /*for(int i=0;i<4;i++) { + // Scale + { + Ref<SurfaceTool> surftool = memnew(SurfaceTool); + surftool->begin(Mesh::PRIMITIVE_TRIANGLES); - viewports[i]->init_gizmo_instance(i); - }*/ + // Cube arrow profile + const int arrow_points = 6; + Vector3 arrow[6] = { + nivec * 0.0 + ivec * 0.0, + nivec * 0.01 + ivec * 0.0, + nivec * 0.01 + ivec * 1.0 * GIZMO_SCALE_OFFSET, + nivec * 0.07 + ivec * 1.0 * GIZMO_SCALE_OFFSET, + nivec * 0.07 + ivec * 1.11 * GIZMO_SCALE_OFFSET, + nivec * 0.0 + ivec * 1.11 * GIZMO_SCALE_OFFSET, + }; - _generate_selection_box(); + int arrow_sides = 4; + + for (int k = 0; k < 4; k++) { + + Basis ma(ivec, Math_PI * 2 * float(k) / arrow_sides); + Basis mb(ivec, Math_PI * 2 * float(k + 1) / arrow_sides); - //Object::cast_to<EditorNode>(get_scene()->get_root_node())->get_scene_root()->add_child(camera); + for (int j = 0; j < arrow_points - 1; j++) { - //current_camera=camera; + Vector3 points[4] = { + ma.xform(arrow[j]), + mb.xform(arrow[j]), + mb.xform(arrow[j + 1]), + ma.xform(arrow[j + 1]), + }; + surftool->add_vertex(points[0]); + surftool->add_vertex(points[1]); + surftool->add_vertex(points[2]); + + surftool->add_vertex(points[0]); + surftool->add_vertex(points[2]); + surftool->add_vertex(points[3]); + } + } + + surftool->set_material(mat); + surftool->commit(scale_gizmo[i]); + } + } + } + + _generate_selection_box(); } void SpatialEditor::_finish_indicators() { @@ -4045,9 +4264,6 @@ void SpatialEditor::_finish_indicators() { //VisualServer::get_singleton()->free(poly); //VisualServer::get_singleton()->free(indicators_instance); //VisualServer::get_singleton()->free(indicators); - - VisualServer::get_singleton()->free(cursor_instance); - VisualServer::get_singleton()->free(cursor_mesh); } bool SpatialEditor::is_any_freelook_active() const { @@ -4209,7 +4425,7 @@ void SpatialEditor::_toggle_maximize_view(Object *p_viewport) { for (uint32_t i = 0; i < VIEWPORTS_COUNT; i++) { if (i == (uint32_t)index) - viewports[i]->set_area_as_parent_rect(); + viewports[i]->set_anchors_and_margins_preset(Control::PRESET_WIDE); else viewports[i]->hide(); } @@ -4644,7 +4860,7 @@ SpatialEditorPlugin::SpatialEditorPlugin(EditorNode *p_node) { spatial_editor->set_v_size_flags(Control::SIZE_EXPAND_FILL); editor->get_viewport()->add_child(spatial_editor); - //spatial_editor->set_area_as_parent_rect(); + //spatial_editor->set_anchors_and_margins_preset(Control::PRESET_WIDE); spatial_editor->hide(); spatial_editor->connect("transform_key_request", editor, "_transform_keyed"); diff --git a/editor/plugins/spatial_editor_plugin.h b/editor/plugins/spatial_editor_plugin.h index f8c8dabb7d..f2a9886f2a 100644 --- a/editor/plugins/spatial_editor_plugin.h +++ b/editor/plugins/spatial_editor_plugin.h @@ -131,7 +131,7 @@ private: float gizmo_scale; bool freelook_active; - Vector3 freelook_target_position; + real_t freelook_speed; PanelContainer *info; Label *info_label; @@ -157,7 +157,7 @@ private: Transform _get_camera_transform() const; int get_selected_count() const; - Vector3 _get_camera_pos() const; + Vector3 _get_camera_position() const; Vector3 _get_camera_normal() const; Vector3 _get_screen_to_space(const Vector3 &p_vector3); @@ -231,6 +231,7 @@ private: Vector3 pos; float x_rot, y_rot, distance; + Vector3 eye_pos; // Used in freelook mode bool region_select; Point2 region_begin, region_end; @@ -239,13 +240,20 @@ private: distance = 4; region_select = false; } - } cursor, camera_cursor; + }; + // Viewport camera supports movement smoothing, + // so one cursor is the real cursor, while the other can be an interpolated version. + Cursor cursor; // Immediate cursor + Cursor camera_cursor; // That one may be interpolated (don't modify this one except for smoothing purposes) void scale_cursor_distance(real_t scale); + void set_freelook_active(bool active_now); + void scale_freelook_speed(real_t scale); + real_t zoom_indicator_delay; - RID move_gizmo_instance[3], move_plane_gizmo_instance[3], rotate_gizmo_instance[3]; + RID move_gizmo_instance[3], move_plane_gizmo_instance[3], rotate_gizmo_instance[3], scale_gizmo_instance[3]; String last_message; String message; @@ -319,6 +327,7 @@ class SpatialEditorSelectedItem : public Object { public: Rect3 aabb; Transform original; // original location when moving + Transform original_local; Transform last_xform; // last transform Spatial *sp; RID sbox_instance; @@ -407,7 +416,7 @@ private: bool grid_enable[3]; //should be always visible if true bool grid_enabled; - Ref<ArrayMesh> move_gizmo[3], move_plane_gizmo[3], rotate_gizmo[3]; + Ref<ArrayMesh> move_gizmo[3], move_plane_gizmo[3], rotate_gizmo[3], scale_gizmo[3]; Ref<SpatialMaterial> gizmo_color[3]; Ref<SpatialMaterial> plane_gizmo_color[3]; Ref<SpatialMaterial> gizmo_hl; @@ -559,6 +568,7 @@ public: Ref<ArrayMesh> get_move_gizmo(int idx) const { return move_gizmo[idx]; } Ref<ArrayMesh> get_move_plane_gizmo(int idx) const { return move_plane_gizmo[idx]; } Ref<ArrayMesh> get_rotate_gizmo(int idx) const { return rotate_gizmo[idx]; } + Ref<ArrayMesh> get_scale_gizmo(int idx) const { return scale_gizmo[idx]; } void update_transform_gizmo(); diff --git a/editor/plugins/sprite_frames_editor_plugin.cpp b/editor/plugins/sprite_frames_editor_plugin.cpp index 7b40f69082..dc7acd9fdc 100644 --- a/editor/plugins/sprite_frames_editor_plugin.cpp +++ b/editor/plugins/sprite_frames_editor_plugin.cpp @@ -39,14 +39,14 @@ void SpriteFramesEditor::_gui_input(Ref<InputEvent> p_event) { void SpriteFramesEditor::_notification(int p_what) { - if (p_what == NOTIFICATION_FIXED_PROCESS) { + if (p_what == NOTIFICATION_PHYSICS_PROCESS) { } if (p_what == NOTIFICATION_ENTER_TREE) { - load->set_icon(get_icon("Folder", "EditorIcons")); - _delete->set_icon(get_icon("Del", "EditorIcons")); + load->set_icon(get_icon("Load", "EditorIcons")); + _delete->set_icon(get_icon("Remove", "EditorIcons")); new_anim->set_icon(get_icon("New", "EditorIcons")); - remove_anim->set_icon(get_icon("Del", "EditorIcons")); + remove_anim->set_icon(get_icon("Remove", "EditorIcons")); } if (p_what == NOTIFICATION_READY) { @@ -535,7 +535,7 @@ void SpriteFramesEditor::edit(SpriteFrames *p_frames) { } else { hide(); - //set_fixed_process(false); + //set_physics_process(false); } } @@ -544,7 +544,7 @@ Variant SpriteFramesEditor::get_drag_data_fw(const Point2 &p_point, Control *p_f if (!frames->has_animation(edited_anim)) return false; - int idx = tree->get_item_at_pos(p_point, true); + int idx = tree->get_item_at_position(p_point, true); if (idx < 0 || idx >= frames->get_frame_count(edited_anim)) return Variant(); @@ -609,7 +609,7 @@ void SpriteFramesEditor::drop_data_fw(const Point2 &p_point, const Variant &p_da if (!d.has("type")) return; - int at_pos = tree->get_item_at_pos(p_point, true); + int at_pos = tree->get_item_at_position(p_point, true); if (String(d["type"]) == "resource" && d.has("resource")) { RES r = d["resource"]; @@ -643,7 +643,7 @@ void SpriteFramesEditor::_bind_methods() { ClassDB::bind_method(D_METHOD("_empty2_pressed"), &SpriteFramesEditor::_empty2_pressed); ClassDB::bind_method(D_METHOD("_delete_pressed"), &SpriteFramesEditor::_delete_pressed); ClassDB::bind_method(D_METHOD("_paste_pressed"), &SpriteFramesEditor::_paste_pressed); - ClassDB::bind_method(D_METHOD("_file_load_request", "files", "atpos"), &SpriteFramesEditor::_file_load_request, DEFVAL(-1)); + ClassDB::bind_method(D_METHOD("_file_load_request", "files", "at_position"), &SpriteFramesEditor::_file_load_request, DEFVAL(-1)); ClassDB::bind_method(D_METHOD("_update_library", "skipsel"), &SpriteFramesEditor::_update_library, DEFVAL(false)); ClassDB::bind_method(D_METHOD("_up_pressed"), &SpriteFramesEditor::_up_pressed); ClassDB::bind_method(D_METHOD("_down_pressed"), &SpriteFramesEditor::_down_pressed); @@ -667,7 +667,7 @@ SpriteFramesEditor::SpriteFramesEditor() { VBoxContainer *vbc_animlist = memnew(VBoxContainer); split->add_child(vbc_animlist); - vbc_animlist->set_custom_minimum_size(Size2(150, 0)); + vbc_animlist->set_custom_minimum_size(Size2(150, 0) * EDSCALE); //vbc_animlist->set_v_size_flags(SIZE_EXPAND_FILL); VBoxContainer *sub_vb = memnew(VBoxContainer); @@ -678,12 +678,13 @@ SpriteFramesEditor::SpriteFramesEditor() { sub_vb->add_child(hbc_animlist); new_anim = memnew(Button); + new_anim->set_flat(true); hbc_animlist->add_child(new_anim); + new_anim->set_h_size_flags(SIZE_EXPAND_FILL); new_anim->connect("pressed", this, "_animation_add"); - hbc_animlist->add_spacer(); - remove_anim = memnew(Button); + remove_anim->set_flat(true); hbc_animlist->add_child(remove_anim); remove_anim->connect("pressed", this, "_animation_remove"); @@ -720,6 +721,7 @@ SpriteFramesEditor::SpriteFramesEditor() { //animations = memnew( ItemList ); load = memnew(Button); + load->set_flat(true); load->set_tooltip(TTR("Load Resource")); hbc->add_child(load); @@ -736,14 +738,15 @@ SpriteFramesEditor::SpriteFramesEditor() { hbc->add_child(empty2); move_up = memnew(Button); - move_up->set_text(TTR("Up")); + move_up->set_text(TTR("Move (Before)")); hbc->add_child(move_up); move_down = memnew(Button); - move_down->set_text(TTR("Down")); + move_down->set_text(TTR("Move (After)")); hbc->add_child(move_down); _delete = memnew(Button); + _delete->set_flat(true); hbc->add_child(_delete); file = memnew(EditorFileDialog); @@ -818,7 +821,7 @@ SpriteFramesEditorPlugin::SpriteFramesEditorPlugin(EditorNode *p_node) { editor = p_node; frames_editor = memnew(SpriteFramesEditor); - frames_editor->set_custom_minimum_size(Size2(0, 300)); + frames_editor->set_custom_minimum_size(Size2(0, 300) * EDSCALE); button = editor->add_bottom_panel_item("SpriteFrames", frames_editor); button->hide(); } diff --git a/editor/plugins/style_box_editor_plugin.cpp b/editor/plugins/style_box_editor_plugin.cpp index 478ca2e972..5c965e4a05 100644 --- a/editor/plugins/style_box_editor_plugin.cpp +++ b/editor/plugins/style_box_editor_plugin.cpp @@ -57,7 +57,7 @@ StyleBoxEditor::StyleBoxEditor() { panel = memnew(Panel); add_child(panel); - panel->set_area_as_parent_rect(); + panel->set_anchors_and_margins_preset(Control::PRESET_WIDE); Label *l = memnew(Label); l->set_text(TTR("StyleBox Preview:")); diff --git a/editor/plugins/texture_editor_plugin.cpp b/editor/plugins/texture_editor_plugin.cpp index 90dc4cf993..855e857d80 100644 --- a/editor/plugins/texture_editor_plugin.cpp +++ b/editor/plugins/texture_editor_plugin.cpp @@ -38,7 +38,7 @@ void TextureEditor::_gui_input(Ref<InputEvent> p_event) { void TextureEditor::_notification(int p_what) { - if (p_what == NOTIFICATION_FIXED_PROCESS) { + if (p_what == NOTIFICATION_PHYSICS_PROCESS) { } if (p_what == NOTIFICATION_READY) { diff --git a/editor/plugins/texture_region_editor_plugin.cpp b/editor/plugins/texture_region_editor_plugin.cpp index 651ba06374..740772e204 100644 --- a/editor/plugins/texture_region_editor_plugin.cpp +++ b/editor/plugins/texture_region_editor_plugin.cpp @@ -39,7 +39,7 @@ void draw_margin_line(Control *edit_draw, Vector2 from, Vector2 to) { Vector2 line = (to - from).normalized() * 10; while ((to - from).length_squared() > 200) { - edit_draw->draw_line(from, from + line, Color(0.97, 0.2, 0.2), 2); + edit_draw->draw_line(from, from + line, EditorNode::get_singleton()->get_theme_base()->get_color("mono_color", "Editor"), 2); from += line * 2; } } @@ -66,6 +66,7 @@ void TextureRegionEditor::_region_draw() { VS::get_singleton()->canvas_item_add_set_transform(edit_draw->get_canvas_item(), Transform2D()); if (snap_mode == SNAP_GRID) { + Color grid_color = get_color("grid_major_color", "Editor"); Size2 s = edit_draw->get_size(); int last_cell = 0; @@ -76,7 +77,7 @@ void TextureRegionEditor::_region_draw() { if (i == 0) last_cell = cell; if (last_cell != cell) - edit_draw->draw_line(Point2(i, 0), Point2(i, s.height), Color(0.3, 0.7, 1, 0.3)); + edit_draw->draw_line(Point2(i, 0), Point2(i, s.height), grid_color); last_cell = cell; } else @@ -85,7 +86,7 @@ void TextureRegionEditor::_region_draw() { if (i == 0) last_cell = cell; if (last_cell != cell) - edit_draw->draw_rect(Rect2(i - snap_separation.x * draw_zoom, 0, snap_separation.x * draw_zoom, s.height), Color(0.3, 0.7, 1, 0.3)); + edit_draw->draw_rect(Rect2(i - snap_separation.x * draw_zoom, 0, snap_separation.x * draw_zoom, s.height), grid_color); last_cell = cell; } } @@ -97,7 +98,7 @@ void TextureRegionEditor::_region_draw() { if (i == 0) last_cell = cell; if (last_cell != cell) - edit_draw->draw_line(Point2(0, i), Point2(s.width, i), Color(0.3, 0.7, 1, 0.3)); + edit_draw->draw_line(Point2(0, i), Point2(s.width, i), grid_color); last_cell = cell; } else @@ -106,7 +107,7 @@ void TextureRegionEditor::_region_draw() { if (i == 0) last_cell = cell; if (last_cell != cell) - edit_draw->draw_rect(Rect2(0, i - snap_separation.y * draw_zoom, s.width, snap_separation.y * draw_zoom), Color(0.3, 0.7, 1, 0.3)); + edit_draw->draw_rect(Rect2(0, i - snap_separation.y * draw_zoom, s.width, snap_separation.y * draw_zoom), grid_color); last_cell = cell; } } @@ -137,7 +138,7 @@ void TextureRegionEditor::_region_draw() { mtx.basis_xform(rect.position + rect.size), mtx.basis_xform(rect.position + Vector2(0, rect.size.y)) }; - Color color(0.9, 0.5, 0.5); + Color color = get_color("mono_color", "Editor"); for (int i = 0; i < 4; i++) { int prev = (i + 3) % 4; @@ -760,7 +761,7 @@ TextureRegionEditor::TextureRegionEditor(EditorNode *p_editor) { VBoxContainer *main_vb = memnew(VBoxContainer); add_child(main_vb); - main_vb->set_area_as_parent_rect(0); + main_vb->set_anchors_and_margins_preset(Control::PRESET_WIDE); HBoxContainer *hb_tools = memnew(HBoxContainer); main_vb->add_child(hb_tools); @@ -893,7 +894,7 @@ void TextureRegionEditorPlugin::edit(Object *p_object) { } bool TextureRegionEditorPlugin::handles(Object *p_object) const { - return p_object->is_class("Sprite") || p_object->is_class("Patch9Rect") || p_object->is_class("StyleBoxTexture") || p_object->is_class("AtlasTexture"); + return p_object->is_class("Sprite") || p_object->is_class("NinePatchRect") || p_object->is_class("StyleBoxTexture") || p_object->is_class("AtlasTexture"); } void TextureRegionEditorPlugin::make_visible(bool p_visible) { diff --git a/editor/plugins/theme_editor_plugin.cpp b/editor/plugins/theme_editor_plugin.cpp index 86ef1a489f..02ead3aee8 100644 --- a/editor/plugins/theme_editor_plugin.cpp +++ b/editor/plugins/theme_editor_plugin.cpp @@ -588,6 +588,8 @@ void ThemeEditor::_notification(int p_what) { time_left = 1.5; _refresh_interval(); } + } else if (p_what == NOTIFICATION_THEME_CHANGED) { + theme_menu->set_icon(get_icon("Theme", "EditorIcons")); } } @@ -607,7 +609,7 @@ ThemeEditor::ThemeEditor() { scroll = memnew(ScrollContainer); add_child(scroll); - scroll->set_area_as_parent_rect(3); + scroll->set_anchors_and_margins_preset(Control::PRESET_WIDE, Control::PRESET_MODE_MINSIZE, 3); scroll->set_margin(MARGIN_TOP, 30 * EDSCALE); //scroll->set_enable_h_scroll(true); scroll->set_enable_v_scroll(true); @@ -621,13 +623,15 @@ ThemeEditor::ThemeEditor() { main_vb = memnew(VBoxContainer); panel->add_child(main_vb); - main_vb->set_area_as_parent_rect(4 * EDSCALE); + main_vb->set_anchors_and_margins_preset(Control::PRESET_WIDE, Control::PRESET_MODE_MINSIZE, 4 * EDSCALE); HBoxContainer *hb_menu = memnew(HBoxContainer); main_vb->add_child(hb_menu); theme_menu = memnew(MenuButton); - theme_menu->set_text(TTR("Theme")); + theme_menu->set_text(TTR("Edit theme..")); + theme_menu->set_flat(false); + theme_menu->set_tooltip(TTR("Theme editing menu.")); theme_menu->get_popup()->add_item(TTR("Add Item"), POPUP_ADD); theme_menu->get_popup()->add_item(TTR("Add Class Items"), POPUP_CLASS_ADD); theme_menu->get_popup()->add_item(TTR("Remove Item"), POPUP_REMOVE); @@ -648,7 +652,7 @@ ThemeEditor::ThemeEditor() { main_hb->add_child(first_vb); //main_panel->add_child(panel); - //panel->set_area_as_parent_rect(); + //panel->set_anchors_and_margins_preset(Control::PRESET_WIDE); //panel->set_margin( MARGIN_TOP,20 ); first_vb->add_child(memnew(Label("Label"))); diff --git a/editor/plugins/tile_map_editor_plugin.cpp b/editor/plugins/tile_map_editor_plugin.cpp index b85ffd6c67..d12b3f1e0e 100644 --- a/editor/plugins/tile_map_editor_plugin.cpp +++ b/editor/plugins/tile_map_editor_plugin.cpp @@ -39,6 +39,14 @@ void TileMapEditor::_notification(int p_what) { switch (p_what) { + case NOTIFICATION_PROCESS: { + + if (bucket_queue.size() && canvas_item_editor) { + canvas_item_editor->update(); + } + + } break; + case NOTIFICATION_ENTER_TREE: { transp->set_icon(get_icon("Transpose", "EditorIcons")); @@ -221,7 +229,7 @@ struct _PaletteEntry { return name < p_rhs.name; } }; -} +} // namespace void TileMapEditor::_update_palette() { @@ -351,6 +359,10 @@ PoolVector<Vector2> TileMapEditor::_bucket_fill(const Point2i &p_start, bool era return PoolVector<Vector2>(); } + if (id == prev_id) { + return PoolVector<Vector2>(); + } + Rect2i r = node->get_item_rect(); r.position = r.position / node->get_cell_size(); r.size = r.size / node->get_cell_size(); @@ -378,20 +390,26 @@ PoolVector<Vector2> TileMapEditor::_bucket_fill(const Point2i &p_start, bool era bucket_cache = PoolVector<Vector2>(); bucket_cache_tile = prev_id; bucket_cache_rect = r; - } else { - return bucket_cache; + bucket_queue.clear(); } } PoolVector<Vector2> points; + int count = 0; + int limit = 0; + + if (preview) { + limit = 1024; + } else { + bucket_queue.clear(); + } - List<Point2i> queue; - queue.push_back(p_start); + bucket_queue.push_back(p_start); - while (queue.size()) { + while (bucket_queue.size()) { - Point2i n = queue.front()->get(); - queue.pop_front(); + Point2i n = bucket_queue.front()->get(); + bucket_queue.pop_front(); if (!r.has_point(n)) continue; @@ -409,10 +427,15 @@ PoolVector<Vector2> TileMapEditor::_bucket_fill(const Point2i &p_start, bool era points.push_back(n); } - queue.push_back(n + Point2i(0, 1)); - queue.push_back(n + Point2i(0, -1)); - queue.push_back(n + Point2i(1, 0)); - queue.push_back(n + Point2i(-1, 0)); + bucket_queue.push_back(Point2i(n.x, n.y + 1)); + bucket_queue.push_back(Point2i(n.x, n.y - 1)); + bucket_queue.push_back(Point2i(n.x + 1, n.y)); + bucket_queue.push_back(Point2i(n.x - 1, n.y)); + count++; + } + + if (limit > 0 && count >= limit) { + break; } } @@ -1129,7 +1152,7 @@ bool TileMapEditor::forward_gui_input(const Ref<InputEvent> &p_event) { return false; } -void TileMapEditor::_canvas_draw() { +void TileMapEditor::forward_draw_over_canvas(Control *p_canvas) { if (!node) return; @@ -1356,8 +1379,6 @@ void TileMapEditor::edit(Node *p_tile_map) { if (p_tile_map) { node = Object::cast_to<TileMap>(p_tile_map); - if (!canvas_item_editor->is_connected("draw", this, "_canvas_draw")) - canvas_item_editor->connect("draw", this, "_canvas_draw"); if (!canvas_item_editor->is_connected("mouse_entered", this, "_canvas_mouse_enter")) canvas_item_editor->connect("mouse_entered", this, "_canvas_mouse_enter"); if (!canvas_item_editor->is_connected("mouse_exited", this, "_canvas_mouse_exit")) @@ -1368,8 +1389,6 @@ void TileMapEditor::edit(Node *p_tile_map) { } else { node = NULL; - if (canvas_item_editor->is_connected("draw", this, "_canvas_draw")) - canvas_item_editor->disconnect("draw", this, "_canvas_draw"); if (canvas_item_editor->is_connected("mouse_entered", this, "_canvas_mouse_enter")) canvas_item_editor->disconnect("mouse_entered", this, "_canvas_mouse_enter"); if (canvas_item_editor->is_connected("mouse_exited", this, "_canvas_mouse_exit")) @@ -1405,7 +1424,6 @@ void TileMapEditor::_bind_methods() { ClassDB::bind_method(D_METHOD("_text_changed"), &TileMapEditor::_text_changed); ClassDB::bind_method(D_METHOD("_sbox_input"), &TileMapEditor::_sbox_input); ClassDB::bind_method(D_METHOD("_menu_option"), &TileMapEditor::_menu_option); - ClassDB::bind_method(D_METHOD("_canvas_draw"), &TileMapEditor::_canvas_draw); ClassDB::bind_method(D_METHOD("_canvas_mouse_enter"), &TileMapEditor::_canvas_mouse_enter); ClassDB::bind_method(D_METHOD("_canvas_mouse_exit"), &TileMapEditor::_canvas_mouse_exit); ClassDB::bind_method(D_METHOD("_tileset_settings_changed"), &TileMapEditor::_tileset_settings_changed); @@ -1644,6 +1662,7 @@ TileMapEditorPlugin::TileMapEditorPlugin(EditorNode *p_node) { tile_map_editor = memnew(TileMapEditor(p_node)); add_control_to_container(CONTAINER_CANVAS_EDITOR_SIDE, tile_map_editor); tile_map_editor->hide(); + tile_map_editor->set_process(true); } TileMapEditorPlugin::~TileMapEditorPlugin() { diff --git a/editor/plugins/tile_map_editor_plugin.h b/editor/plugins/tile_map_editor_plugin.h index de9b9e8e0d..73474a3f3d 100644 --- a/editor/plugins/tile_map_editor_plugin.h +++ b/editor/plugins/tile_map_editor_plugin.h @@ -113,6 +113,7 @@ class TileMapEditor : public VBoxContainer { Rect2i bucket_cache_rect; int bucket_cache_tile; PoolVector<Vector2> bucket_cache; + List<Point2i> bucket_queue; struct CellOp { int idx; @@ -162,7 +163,6 @@ class TileMapEditor : public VBoxContainer { void _text_changed(const String &p_text); void _sbox_input(const Ref<InputEvent> &p_ie); void _update_palette(); - void _canvas_draw(); void _menu_option(int p_option); void _set_cell(const Point2i &p_pos, int p_value, bool p_flip_h = false, bool p_flip_v = false, bool p_transpose = false, bool p_with_undo = false); @@ -182,6 +182,8 @@ public: HBoxContainer *get_toolbar() const { return toolbar; } bool forward_gui_input(const Ref<InputEvent> &p_event); + void forward_draw_over_canvas(Control *p_canvas); + void edit(Node *p_tile_map); TileMapEditor(EditorNode *p_editor); @@ -195,7 +197,8 @@ class TileMapEditorPlugin : public EditorPlugin { TileMapEditor *tile_map_editor; public: - virtual bool forward_canvas_gui_input(const Transform2D &p_canvas_xform, const Ref<InputEvent> &p_event) { return tile_map_editor->forward_gui_input(p_event); } + virtual bool forward_canvas_gui_input(const Ref<InputEvent> &p_event) { return tile_map_editor->forward_gui_input(p_event); } + virtual void forward_draw_over_canvas(Control *p_canvas) { tile_map_editor->forward_draw_over_canvas(p_canvas); } virtual String get_name() const { return "TileMap"; } bool has_main_screen() const { return false; } diff --git a/editor/plugins/tile_set_editor_plugin.cpp b/editor/plugins/tile_set_editor_plugin.cpp index 443c280428..f2f71ba6b1 100644 --- a/editor/plugins/tile_set_editor_plugin.cpp +++ b/editor/plugins/tile_set_editor_plugin.cpp @@ -238,7 +238,7 @@ void TileSetEditor::_bind_methods() { TileSetEditor::TileSetEditor(EditorNode *p_editor) { Panel *panel = memnew(Panel); - panel->set_area_as_parent_rect(); + panel->set_anchors_and_margins_preset(Control::PRESET_WIDE); add_child(panel); MenuButton *options = memnew(MenuButton); panel->add_child(options); @@ -293,7 +293,7 @@ TileSetEditorPlugin::TileSetEditorPlugin(EditorNode *p_node) { tileset_editor = memnew(TileSetEditor(p_node)); p_node->get_viewport()->add_child(tileset_editor); - tileset_editor->set_area_as_parent_rect(); + tileset_editor->set_anchors_and_margins_preset(Control::PRESET_WIDE); tileset_editor->set_anchor(MARGIN_BOTTOM, Control::ANCHOR_BEGIN); tileset_editor->set_end(Point2(0, 22)); tileset_editor->hide(); diff --git a/editor/progress_dialog.cpp b/editor/progress_dialog.cpp index 376d9d3158..09f5375bb4 100644 --- a/editor/progress_dialog.cpp +++ b/editor/progress_dialog.cpp @@ -49,7 +49,7 @@ void BackgroundProgress::_add_task(const String &p_task, const String &p_label, Control *ec = memnew(Control); ec->set_h_size_flags(SIZE_EXPAND_FILL); ec->set_v_size_flags(SIZE_EXPAND_FILL); - t.progress->set_area_as_parent_rect(); + t.progress->set_anchors_and_margins_preset(Control::PRESET_WIDE); ec->add_child(t.progress); ec->set_custom_minimum_size(Size2(80, 5) * EDSCALE); t.hb->add_child(ec); @@ -222,7 +222,7 @@ ProgressDialog::ProgressDialog() { main = memnew(VBoxContainer); add_child(main); - main->set_area_as_parent_rect(); + main->set_anchors_and_margins_preset(Control::PRESET_WIDE); set_exclusive(true); last_progress_tick = 0; singleton = this; diff --git a/editor/project_export.cpp b/editor/project_export.cpp index f4318a670c..eac5720b43 100644 --- a/editor/project_export.cpp +++ b/editor/project_export.cpp @@ -71,7 +71,7 @@ void ProjectExportDialog::popup_export() { _update_presets(); // Restore valid window bounds or pop up at default size. - if (EditorSettings::get_singleton()->has("interface/dialogs/export_bounds")) { + if (EditorSettings::get_singleton()->has_setting("interface/dialogs/export_bounds")) { popup(EditorSettings::get_singleton()->get("interface/dialogs/export_bounds")); } else { popup_centered_ratio(); @@ -434,7 +434,7 @@ void ProjectExportDialog::_delete_preset_confirm() { Variant ProjectExportDialog::get_drag_data_fw(const Point2 &p_point, Control *p_from) { if (p_from == presets) { - int pos = presets->get_item_at_pos(p_point, true); + int pos = presets->get_item_at_position(p_point, true); if (pos >= 0) { Dictionary d; @@ -455,7 +455,7 @@ Variant ProjectExportDialog::get_drag_data_fw(const Point2 &p_point, Control *p_ } } else if (p_from == patches) { - TreeItem *item = patches->get_item_at_pos(p_point); + TreeItem *item = patches->get_item_at_position(p_point); if (item && item->get_cell_mode(0) == TreeItem::CELL_MODE_CHECK) { @@ -482,7 +482,7 @@ bool ProjectExportDialog::can_drop_data_fw(const Point2 &p_point, const Variant if (!d.has("type") || String(d["type"]) != "export_preset") return false; - if (presets->get_item_at_pos(p_point, true) < 0 && !presets->is_pos_at_end_of_items(p_point)) + if (presets->get_item_at_position(p_point, true) < 0 && !presets->is_pos_at_end_of_items(p_point)) return false; } else if (p_from == patches) { @@ -492,7 +492,7 @@ bool ProjectExportDialog::can_drop_data_fw(const Point2 &p_point, const Variant patches->set_drop_mode_flags(Tree::DROP_MODE_ON_ITEM); - TreeItem *item = patches->get_item_at_pos(p_point); + TreeItem *item = patches->get_item_at_position(p_point); if (!item) { @@ -511,8 +511,8 @@ void ProjectExportDialog::drop_data_fw(const Point2 &p_point, const Variant &p_d int to_pos = -1; - if (presets->get_item_at_pos(p_point, true) >= 0) { - to_pos = presets->get_item_at_pos(p_point, true); + if (presets->get_item_at_position(p_point, true) >= 0) { + to_pos = presets->get_item_at_position(p_point, true); } if (to_pos == -1 && !presets->is_pos_at_end_of_items(p_point)) @@ -541,7 +541,7 @@ void ProjectExportDialog::drop_data_fw(const Point2 &p_point, const Variant &p_d int from_pos = d["patch"]; - TreeItem *item = patches->get_item_at_pos(p_point); + TreeItem *item = patches->get_item_at_position(p_point); if (!item) return; @@ -733,8 +733,12 @@ void ProjectExportDialog::_export_project_to_path(const String &p_path) { ERR_FAIL_COND(platform.is_null()); Error err = platform->export_project(current, export_debug->is_pressed(), p_path, 0); - if (err != OK) + if (err != OK) { + error_dialog->set_text(TTR("Export templates for this platform are missing/corrupted: ") + platform->get_name()); + error_dialog->show(); + error_dialog->popup_centered_minsize(Size2(300, 80)); ERR_PRINT("Failed to export project"); + } } void ProjectExportDialog::_bind_methods() { @@ -894,7 +898,7 @@ ProjectExportDialog::ProjectExportDialog() { Panel *features_panel = memnew(Panel); custom_feature_display = memnew(RichTextLabel); features_panel->add_child(custom_feature_display); - custom_feature_display->set_area_as_parent_rect(10 * EDSCALE); + custom_feature_display->set_anchors_and_margins_preset(Control::PRESET_WIDE, Control::PRESET_MODE_MINSIZE, 10 * EDSCALE); custom_feature_display->set_v_size_flags(SIZE_EXPAND_FILL); feature_vb->add_margin_child(TTR("Feature List:"), features_panel, true); sections->add_child(feature_vb); @@ -915,6 +919,7 @@ ProjectExportDialog::ProjectExportDialog() { updating = false; + get_cancel()->set_text(TTR("Close")); get_ok()->set_text(TTR("Export PCK/Zip")); export_button = add_button(TTR("Export Project"), !OS::get_singleton()->get_swap_ok_cancel(), "export"); @@ -929,7 +934,7 @@ ProjectExportDialog::ProjectExportDialog() { export_error = memnew(Label); main_vb->add_child(export_error); export_error->hide(); - export_error->add_color_override("font_color", Color(1, 0.5, 0.5)); + export_error->add_color_override("font_color", get_color("error_color", "Editor")); export_templates_error = memnew(HBoxContainer); main_vb->add_child(export_templates_error); @@ -937,9 +942,15 @@ ProjectExportDialog::ProjectExportDialog() { Label *export_error2 = memnew(Label); export_templates_error->add_child(export_error2); - export_error2->add_color_override("font_color", Color(1, 0.5, 0.5)); + export_error2->add_color_override("font_color", get_color("error_color", "Editor")); export_error2->set_text(" - " + TTR("Export templates for this platform are missing:") + " "); + error_dialog = memnew(AcceptDialog); + error_dialog->set_title("Error"); + error_dialog->set_text(TTR("Export templates for this platform are missing/corrupted:") + " "); + main_vb->add_child(error_dialog); + error_dialog->hide(); + LinkButton *download_templates = memnew(LinkButton); download_templates->set_text(TTR("Manage Export Templates")); export_templates_error->add_child(download_templates); diff --git a/editor/project_export.h b/editor/project_export.h index 61de0f739a..288b0c290f 100644 --- a/editor/project_export.h +++ b/editor/project_export.h @@ -72,6 +72,7 @@ private: Button *button_export; bool updating; + AcceptDialog *error_dialog; ConfirmationDialog *delete_confirm; OptionButton *export_filter; diff --git a/editor/project_manager.cpp b/editor/project_manager.cpp index 78d544fdcf..d1210ee26a 100644 --- a/editor/project_manager.cpp +++ b/editor/project_manager.cpp @@ -51,9 +51,9 @@ #include "version.h" #include "version_hash.gen.h" -class NewProjectDialog : public ConfirmationDialog { +class ProjectDialog : public ConfirmationDialog { - GDCLASS(NewProjectDialog, ConfirmationDialog); + GDCLASS(ProjectDialog, ConfirmationDialog); public: enum Mode { @@ -64,20 +64,56 @@ public: }; private: + enum MessageType { + MESSAGE_ERROR, + MESSAGE_WARNING, + MESSAGE_SUCCESS + }; + Mode mode; Button *browse; - Label *pp, *pn; - Label *error; + Button *create_dir; + Container *name_container; + Container *path_container; + Label *msg; LineEdit *project_path; LineEdit *project_name; + ToolButton *status_btn; FileDialog *fdialog; String zip_path; String zip_title; AcceptDialog *dialog_error; + String fav_dir; + + String created_folder_path; + + void set_message(const String &p_msg, MessageType p_type = MESSAGE_SUCCESS) { + msg->set_text(p_msg); + if (p_msg == "") { + status_btn->set_icon(get_icon("StatusSuccess", "EditorIcons")); + return; + } + msg->hide(); + switch (p_type) { + case MESSAGE_ERROR: + msg->add_color_override("font_color", get_color("error_color", "Editor")); + status_btn->set_icon(get_icon("StatusError", "EditorIcons")); + msg->show(); + break; + case MESSAGE_WARNING: + msg->add_color_override("font_color", get_color("warning_color", "Editor")); + status_btn->set_icon(get_icon("StatusWarning", "EditorIcons")); + break; + case MESSAGE_SUCCESS: + msg->add_color_override("font_color", get_color("success_color", "Editor")); + status_btn->set_icon(get_icon("StatusSuccess", "EditorIcons")); + break; + } + } String _test_path() { - error->set_text(""); + set_message(" "); get_ok()->set_disabled(true); DirAccess *d = DirAccess::create(DirAccess::ACCESS_FILESYSTEM); String valid_path; @@ -88,7 +124,7 @@ private: } if (valid_path == "") { - error->set_text(TTR("Invalid project path, the path must exist!")); + set_message(TTR("The path does not exists."), MESSAGE_ERROR); memdelete(d); return ""; } @@ -97,16 +133,35 @@ private: if (valid_path != "" && !d->file_exists("project.godot")) { - error->set_text(TTR("Invalid project path, project.godot must exist.")); + set_message(TTR("Please choose a 'project.godot' file."), MESSAGE_ERROR); memdelete(d); return ""; } + } else if (mode == MODE_NEW) { + + // check if the specified folder is empty, even though this is not an error, it is good to check here + d->list_dir_begin(); + bool is_empty = true; + String n = d->get_next(); + while (n != String()) { + if (!n.begins_with(".")) { // i dont know if this is enough to guarantee an empty dir + is_empty = false; + break; + } + n = d->get_next(); + } + d->list_dir_end(); + + if (!is_empty) { + set_message(TTR("Your project will be created in a non empty folder (you might want to create a new folder)."), MESSAGE_WARNING); + } + } else { if (d->file_exists("project.godot")) { - error->set_text(TTR("Invalid project path, project.godot must not exist.")); + set_message(TTR("Please choose a folder that does not contain a 'project.godot' file."), MESSAGE_ERROR); memdelete(d); return ""; } @@ -122,16 +177,23 @@ private: String sp = _test_path(); if (sp != "") { - sp = sp.replace("\\", "/"); - int lidx = sp.find_last("/"); + // set the project name to the select folder name + if (project_name->get_text() == "") { + sp = sp.replace("\\", "/"); + int lidx = sp.find_last("/"); + + if (lidx != -1) { + sp = sp.substr(lidx + 1, sp.length()); + } + if (sp == "" && mode == MODE_IMPORT) + sp = TTR("Imported Project"); - if (lidx != -1) { - sp = sp.substr(lidx + 1, sp.length()); + project_name->set_text(sp); } - if (sp == "" && mode == MODE_IMPORT) - sp = TTR("Imported Project"); + } - project_name->set_text(sp); + if (created_folder_path != "" && created_folder_path != p_path) { + _remove_created_folder(); } } @@ -140,13 +202,17 @@ private: String p = p_path; if (mode == MODE_IMPORT) { if (p.ends_with("project.godot")) { - p = p.get_base_dir(); + get_ok()->set_disabled(false); + } else { + set_message(TTR("Please choose a 'project.godot' file."), MESSAGE_ERROR); + get_ok()->set_disabled(true); + return; } } String sp = p.simplify_path(); project_path->set_text(sp); - _path_text_changed(sp); + set_message(TTR(" ")); // just so it does not disappear get_ok()->call_deferred("grab_focus"); } @@ -155,12 +221,13 @@ private: String p = p_path; String sp = p.simplify_path(); project_path->set_text(sp); - _path_text_changed(sp); get_ok()->call_deferred("grab_focus"); } void _browse_path() { + fdialog->set_current_dir(project_path->get_text()); + if (mode == MODE_IMPORT) { fdialog->set_mode(FileDialog::MODE_OPEN_FILE); @@ -172,34 +239,46 @@ private: fdialog->popup_centered_ratio(); } - void _text_changed(const String &p_text) { - _test_path(); - error->set_text(""); - if (p_text == "") { + void _create_folder() { - error->set_text(TTR("Name cannot be empty")); - get_ok()->set_disabled(true); + if (project_name->get_text() == "" || created_folder_path != "") { return; } - get_ok()->set_disabled(false); + + DirAccess *d = DirAccess::create(DirAccess::ACCESS_FILESYSTEM); + if (d->change_dir(project_path->get_text()) == OK) { + if (!d->dir_exists(project_name->get_text())) { + if (d->make_dir(project_name->get_text()) == OK) { + d->change_dir(project_name->get_text()); + project_path->set_text(d->get_current_dir()); + created_folder_path = d->get_current_dir(); + create_dir->set_disabled(true); + } + } + } + memdelete(d); } - void _name_changed(const String &p_text) { + void _text_changed(const String &p_text) { + + if (mode != MODE_NEW) + return; + + _test_path(); + + if (p_text == "") + set_message(TTR("It would be a good idea to name your project."), MESSAGE_WARNING); } void ok_pressed() { - String dir = _test_path(); - if (dir == "") { - error->set_text(TTR("Invalid project path (changed anything?).")); - return; - } + String dir = project_path->get_text(); if (mode == MODE_RENAME) { String dir = _test_path(); if (dir == "") { - error->set_text(TTR("Invalid project path (changed anything?).")); + set_message(TTR("Invalid project path (changed anything?)."), MESSAGE_ERROR); return; } @@ -207,13 +286,13 @@ private: current->add_singleton(ProjectSettings::Singleton("Current")); if (current->setup(dir, "")) { - error->set_text(TTR("Couldn't get project.godot in project path.")); + set_message(TTR("Couldn't get project.godot in project path."), MESSAGE_ERROR); } else { ProjectSettings::CustomMap edited_settings; edited_settings["application/config/name"] = project_name->get_text(); if (current->save_custom(dir.plus_file("/project.godot"), edited_settings, Vector<String>(), true)) { - error->set_text(TTR("Couldn't edit project.godot in project path.")); + set_message(TTR("Couldn't edit project.godot in project path."), MESSAGE_ERROR); } } @@ -232,13 +311,13 @@ private: initial_settings["rendering/environment/default_environment"] = "res://default_env.tres"; if (ProjectSettings::get_singleton()->save_custom(dir.plus_file("/project.godot"), initial_settings, Vector<String>(), false)) { - error->set_text(TTR("Couldn't create project.godot in project path.")); + set_message(TTR("Couldn't create project.godot in project path."), MESSAGE_ERROR); } else { ResourceSaver::save(dir.plus_file("/icon.png"), get_icon("DefaultProjectIcon", "EditorIcons")); FileAccess *f = FileAccess::open(dir.plus_file("/default_env.tres"), FileAccess::WRITE); if (!f) { - error->set_text(TTR("Couldn't create project.godot in project path.")); + set_message(TTR("Couldn't create project.godot in project path."), MESSAGE_ERROR); } else { f->store_line("[gd_resource type=\"Environment\" load_steps=2 format=2]"); f->store_line("[sub_resource type=\"ProceduralSky\" id=1]"); @@ -356,14 +435,40 @@ private: } } + void _remove_created_folder() { + + if (created_folder_path != "") { + DirAccess *d = DirAccess::create(DirAccess::ACCESS_FILESYSTEM); + d->remove(created_folder_path); + memdelete(d); + + create_dir->set_disabled(false); + created_folder_path = ""; + } + } + + void _toggle_message() { + msg->set_visible(!msg->is_visible()); + } + + void cancel_pressed() { + + _remove_created_folder(); + + project_path->clear(); + project_name->clear(); + } + protected: static void _bind_methods() { - ClassDB::bind_method("_browse_path", &NewProjectDialog::_browse_path); - ClassDB::bind_method("_text_changed", &NewProjectDialog::_text_changed); - ClassDB::bind_method("_path_text_changed", &NewProjectDialog::_path_text_changed); - ClassDB::bind_method("_path_selected", &NewProjectDialog::_path_selected); - ClassDB::bind_method("_file_selected", &NewProjectDialog::_file_selected); + ClassDB::bind_method("_browse_path", &ProjectDialog::_browse_path); + ClassDB::bind_method("_create_folder", &ProjectDialog::_create_folder); + ClassDB::bind_method("_text_changed", &ProjectDialog::_text_changed); + ClassDB::bind_method("_path_text_changed", &ProjectDialog::_path_text_changed); + ClassDB::bind_method("_path_selected", &ProjectDialog::_path_selected); + ClassDB::bind_method("_file_selected", &ProjectDialog::_file_selected); + ClassDB::bind_method("_toggle_message", &ProjectDialog::_toggle_message); ADD_SIGNAL(MethodInfo("project_created")); ADD_SIGNAL(MethodInfo("project_renamed")); } @@ -390,129 +495,129 @@ public: if (mode == MODE_RENAME) { project_path->set_editable(false); - browse->set_disabled(true); + browse->hide(); set_title(TTR("Rename Project")); get_ok()->set_text(TTR("Rename")); - pp->set_text(TTR("Project Path:")); - pn->set_text(TTR("Project Name:")); - pn->show(); - project_name->show(); + name_container->show(); - String dir = _test_path(); - if (dir == "") { - error->set_text(TTR("Invalid project path (changed anything?).")); - return; - } ProjectSettings *current = memnew(ProjectSettings); current->add_singleton(ProjectSettings::Singleton("Current")); - if (current->setup(dir, "")) { - error->set_text(TTR("Couldn't get project.godot in project path.")); - } else { - if (current->has("application/config/name")) { - String appname = current->get("application/config/name"); - project_name->set_text(appname); - } + if (current->setup(project_path->get_text(), "")) { + set_message(TTR("Couldn't get project.godot in the project path."), MESSAGE_ERROR); + } else if (current->has_setting("application/config/name")) { + project_name->set_text(current->get("application/config/name")); } - - popup_centered(Size2(500, 125) * EDSCALE); project_name->grab_focus(); + create_dir->hide(); + status_btn->hide(); + } else { - project_path->clear(); - project_name->clear(); + fav_dir = EditorSettings::get_singleton()->get("filesystem/directories/default_project_path"); + if (fav_dir != "") { + project_path->set_text(fav_dir); + fdialog->set_current_dir(fav_dir); + } else { + DirAccess *d = DirAccess::create(DirAccess::ACCESS_FILESYSTEM); + project_path->set_text(d->get_current_dir()); + fdialog->set_current_dir(d->get_current_dir()); + memdelete(d); + } + project_name->set_text(TTR("New Game Project")); + project_path->set_editable(true); browse->set_disabled(false); + browse->show(); + create_dir->show(); + status_btn->show(); if (mode == MODE_IMPORT) { set_title(TTR("Import Existing Project")); get_ok()->set_text(TTR("Import")); - pp->set_text(TTR("Project Path (Must Exist):")); - pn->set_text(TTR("Project Name:")); - pn->hide(); - project_name->hide(); - - popup_centered(Size2(500, 125) * EDSCALE); + name_container->hide(); + project_path->grab_focus(); } else if (mode == MODE_NEW) { set_title(TTR("Create New Project")); get_ok()->set_text(TTR("Create")); - pp->set_text(TTR("Project Path:")); - pn->set_text(TTR("Project Name:")); - pn->show(); - project_name->show(); + name_container->show(); + project_name->grab_focus(); - popup_centered(Size2(500, 145) * EDSCALE); } else if (mode == MODE_INSTALL) { set_title(TTR("Install Project:") + " " + zip_title); get_ok()->set_text(TTR("Install")); - pp->set_text(TTR("Project Path:")); - pn->hide(); - project_name->hide(); - - popup_centered(Size2(500, 125) * EDSCALE); + name_container->hide(); + project_path->grab_focus(); } - project_path->grab_focus(); _test_path(); } + + popup_centered(Size2(500, 125) * EDSCALE); } - NewProjectDialog() { + ProjectDialog() { VBoxContainer *vb = memnew(VBoxContainer); add_child(vb); - //set_child_rect(vb); + + name_container = memnew(VBoxContainer); + vb->add_child(name_container); Label *l = memnew(Label); + l->set_text(TTR("Project Name:")); + name_container->add_child(l); + + HBoxContainer *pnhb = memnew(HBoxContainer); + name_container->add_child(pnhb); + + project_name = memnew(LineEdit); + project_name->set_h_size_flags(SIZE_EXPAND_FILL); + pnhb->add_child(project_name); + + create_dir = memnew(Button); + pnhb->add_child(create_dir); + create_dir->set_text(TTR("Create folder")); + create_dir->connect("pressed", this, "_create_folder"); + + path_container = memnew(VBoxContainer); + vb->add_child(path_container); + + l = memnew(Label); l->set_text(TTR("Project Path:")); - vb->add_child(l); - pp = l; + path_container->add_child(l); - project_path = memnew(LineEdit); - MarginContainer *mc = memnew(MarginContainer); - vb->add_child(mc); HBoxContainer *pphb = memnew(HBoxContainer); - mc->add_child(pphb); - pphb->add_child(project_path); + path_container->add_child(pphb); + + project_path = memnew(LineEdit); project_path->set_h_size_flags(SIZE_EXPAND_FILL); + pphb->add_child(project_path); + + // status button + status_btn = memnew(ToolButton); + status_btn->connect("pressed", this, "_toggle_message"); + pphb->add_child(status_btn); browse = memnew(Button); - pphb->add_child(browse); browse->set_text(TTR("Browse")); browse->connect("pressed", this, "_browse_path"); + pphb->add_child(browse); - l = memnew(Label); - l->set_text(TTR("Project Name:")); - l->set_position(Point2(5, 50)); - vb->add_child(l); - pn = l; - - project_name = memnew(LineEdit); - mc = memnew(MarginContainer); - vb->add_child(mc); - mc->add_child(project_name); - project_name->set_text(TTR("New Game Project")); - - l = memnew(Label); - l->set_text(TTR("That's a BINGO!")); - vb->add_child(l); - error = l; - l->add_color_override("font_color", Color(1, 0.4, 0.3, 0.8)); - l->set_align(Label::ALIGN_CENTER); - - DirAccess *d = DirAccess::create(DirAccess::ACCESS_FILESYSTEM); - project_path->set_text(d->get_current_dir()); - memdelete(d); + msg = memnew(Label); + msg->set_text(TTR("That's a BINGO!")); + msg->set_align(Label::ALIGN_CENTER); + msg->hide(); + vb->add_child(msg); fdialog = memnew(FileDialog); - add_child(fdialog); fdialog->set_access(FileDialog::ACCESS_FILESYSTEM); - fdialog->set_current_dir(EditorSettings::get_singleton()->get("filesystem/directories/default_project_path")); + add_child(fdialog); project_name->connect("text_changed", this, "_text_changed"); project_path->connect("text_changed", this, "_path_text_changed"); fdialog->connect("dir_selected", this, "_path_selected"); @@ -564,7 +669,7 @@ void ProjectManager::_panel_draw(Node *p_hb) { hb->draw_line(Point2(0, hb->get_size().y + 1), Point2(hb->get_size().x - 10, hb->get_size().y + 1), get_color("guide_color", "Tree")); if (selected_list.has(hb->get_meta("name"))) { - hb->draw_style_box(gui_base->get_stylebox("selected", "Tree"), Rect2(Point2(), hb->get_size() - Size2(10, 0))); + hb->draw_style_box(gui_base->get_stylebox("selected", "Tree"), Rect2(Point2(), hb->get_size() - Size2(10, 0) * EDSCALE)); } } @@ -645,6 +750,9 @@ void ProjectManager::_unhandled_input(const Ref<InputEvent> &p_ev) { if (!k->is_pressed()) return; + if (tabs->get_current_tab() != 0) + return; + bool scancode_handled = true; switch (k->get_scancode()) { @@ -987,15 +1095,15 @@ void ProjectManager::_on_project_created(const String &dir) { } } if (has_already) { - _update_scroll_pos(dir); + _update_scroll_position(dir); } else { _load_recent_projects(); - _update_scroll_pos(dir); + _update_scroll_position(dir); } _open_project(); } -void ProjectManager::_update_scroll_pos(const String &dir) { +void ProjectManager::_update_scroll_position(const String &dir) { for (int i = 0; i < scroll_childs->get_child_count(); i++) { HBoxContainer *hb = Object::cast_to<HBoxContainer>(scroll_childs->get_child(i)); Label *fpath = Object::cast_to<Label>(hb->get_node(NodePath("project/path"))); @@ -1168,13 +1276,13 @@ void ProjectManager::_scan_projects() { void ProjectManager::_new_project() { - npdialog->set_mode(NewProjectDialog::MODE_NEW); + npdialog->set_mode(ProjectDialog::MODE_NEW); npdialog->show_dialog(); } void ProjectManager::_import_project() { - npdialog->set_mode(NewProjectDialog::MODE_IMPORT); + npdialog->set_mode(ProjectDialog::MODE_IMPORT); npdialog->show_dialog(); } @@ -1188,7 +1296,7 @@ void ProjectManager::_rename_project() { const String &selected = E->key(); String path = EditorSettings::get_singleton()->get("projects/" + selected); npdialog->set_project_path(path); - npdialog->set_mode(NewProjectDialog::MODE_RENAME); + npdialog->set_mode(ProjectDialog::MODE_RENAME); npdialog->show_dialog(); } } @@ -1224,7 +1332,7 @@ void ProjectManager::_exit_dialog() { void ProjectManager::_install_project(const String &p_zip_path, const String &p_title) { - npdialog->set_mode(NewProjectDialog::MODE_INSTALL); + npdialog->set_mode(ProjectDialog::MODE_INSTALL); npdialog->set_zip_path(p_zip_path); npdialog->set_zip_title(p_title); npdialog->show_dialog(); @@ -1294,7 +1402,7 @@ void ProjectManager::_bind_methods() { ClassDB::bind_method("_load_recent_projects", &ProjectManager::_load_recent_projects); ClassDB::bind_method("_on_project_renamed", &ProjectManager::_on_project_renamed); ClassDB::bind_method("_on_project_created", &ProjectManager::_on_project_created); - ClassDB::bind_method("_update_scroll_pos", &ProjectManager::_update_scroll_pos); + ClassDB::bind_method("_update_scroll_position", &ProjectManager::_update_scroll_position); ClassDB::bind_method("_panel_draw", &ProjectManager::_panel_draw); ClassDB::bind_method("_panel_input", &ProjectManager::_panel_input); ClassDB::bind_method("_unhandled_input", &ProjectManager::_unhandled_input); @@ -1313,9 +1421,10 @@ ProjectManager::ProjectManager() { EditorSettings::get_singleton()->set_optimize_save(false); //just write settings as they came { - int dpi_mode = EditorSettings::get_singleton()->get("interface/hidpi_mode"); + int dpi_mode = EditorSettings::get_singleton()->get("interface/editor/hidpi_mode"); if (dpi_mode == 0) { - editor_set_scale(OS::get_singleton()->get_screen_dpi(0) >= 192 && OS::get_singleton()->get_screen_size(OS::get_singleton()->get_current_screen()).x > 2000 ? 2.0 : 1.0); + const int screen = OS::get_singleton()->get_current_screen(); + editor_set_scale(OS::get_singleton()->get_screen_dpi(screen) >= 192 && OS::get_singleton()->get_screen_size(screen).x > 2000 ? 2.0 : 1.0); } else if (dpi_mode == 1) { editor_set_scale(0.75); } else if (dpi_mode == 2) { @@ -1329,21 +1438,21 @@ ProjectManager::ProjectManager() { FileDialog::set_default_show_hidden_files(EditorSettings::get_singleton()->get("filesystem/file_dialog/show_hidden_files")); - set_area_as_parent_rect(); + set_anchors_and_margins_preset(Control::PRESET_WIDE); set_theme(create_editor_theme()); gui_base = memnew(Control); add_child(gui_base); - gui_base->set_area_as_parent_rect(); + gui_base->set_anchors_and_margins_preset(Control::PRESET_WIDE); gui_base->set_theme(create_custom_theme()); Panel *panel = memnew(Panel); gui_base->add_child(panel); - panel->set_area_as_parent_rect(); + panel->set_anchors_and_margins_preset(Control::PRESET_WIDE); VBoxContainer *vb = memnew(VBoxContainer); panel->add_child(vb); - vb->set_area_as_parent_rect(20 * EDSCALE); + vb->set_anchors_and_margins_preset(Control::PRESET_WIDE, Control::PRESET_MODE_MINSIZE, 20 * EDSCALE); vb->set_margin(MARGIN_TOP, 4 * EDSCALE); vb->set_margin(MARGIN_BOTTOM, -4 * EDSCALE); vb->add_constant_override("separation", 15 * EDSCALE); @@ -1511,7 +1620,7 @@ ProjectManager::ProjectManager() { OS::get_singleton()->set_low_processor_usage_mode(true); - npdialog = memnew(NewProjectDialog); + npdialog = memnew(ProjectDialog); gui_base->add_child(npdialog); npdialog->connect("project_renamed", this, "_on_project_renamed"); diff --git a/editor/project_manager.h b/editor/project_manager.h index 67fe0b503f..bfae0b2297 100644 --- a/editor/project_manager.h +++ b/editor/project_manager.h @@ -37,7 +37,7 @@ #include "scene/gui/tool_button.h" #include "scene/gui/tree.h" -class NewProjectDialog; +class ProjectDialog; class ProjectListFilter; class ProjectManager : public Control { @@ -60,7 +60,7 @@ class ProjectManager : public Control { ConfirmationDialog *multi_scan_ask; AcceptDialog *run_error_diag; AcceptDialog *dialog_error; - NewProjectDialog *npdialog; + ProjectDialog *npdialog; ScrollContainer *scroll; VBoxContainer *scroll_childs; Map<String, String> selected_list; // name -> main_scene @@ -90,7 +90,7 @@ class ProjectManager : public Control { void _load_recent_projects(); void _on_project_created(const String &dir); void _on_project_renamed(); - void _update_scroll_pos(const String &dir); + void _update_scroll_position(const String &dir); void _scan_dir(DirAccess *da, float pos, float total, List<String> *r_projects); void _install_project(const String &p_zip_path, const String &p_title); diff --git a/editor/project_settings_editor.cpp b/editor/project_settings_editor.cpp index 1f65589643..723d7b14ff 100644 --- a/editor/project_settings_editor.cpp +++ b/editor/project_settings_editor.cpp @@ -146,7 +146,7 @@ void ProjectSettingsEditor::_action_edited() { String action_prop = "input/" + new_name; - if (ProjectSettings::get_singleton()->has(action_prop)) { + if (ProjectSettings::get_singleton()->has_setting(action_prop)) { ti->set_text(0, old_name); add_at = "input/" + old_name; @@ -707,7 +707,7 @@ void ProjectSettingsEditor::_update_actions() { void ProjectSettingsEditor::popup_project_settings() { // Restore valid window bounds or pop up at default size. - if (EditorSettings::get_singleton()->has("interface/dialogs/project_settings_bounds")) { + if (EditorSettings::get_singleton()->has_setting("interface/dialogs/project_settings_bounds")) { popup(EditorSettings::get_singleton()->get("interface/dialogs/project_settings_bounds")); } else { popup_centered_ratio(); @@ -753,7 +753,7 @@ void ProjectSettingsEditor::_item_add() { undo_redo->add_do_property(ProjectSettings::get_singleton(), name, value); - if (ProjectSettings::get_singleton()->has(name)) { + if (ProjectSettings::get_singleton()->has_setting(name)) { undo_redo->add_undo_property(ProjectSettings::get_singleton(), name, ProjectSettings::get_singleton()->get(name)); } else { undo_redo->add_undo_property(ProjectSettings::get_singleton(), name, Variant()); @@ -782,7 +782,7 @@ void ProjectSettingsEditor::_item_del() { String property = globals_editor->get_current_section().plus_file(path); - if (!ProjectSettings::get_singleton()->has(property)) { + if (!ProjectSettings::get_singleton()->has_setting(property)) { EditorNode::get_singleton()->show_warning(TTR("No property '" + property + "' exists.")); return; } @@ -823,7 +823,7 @@ void ProjectSettingsEditor::_action_check(String p_action) { action_add->set_disabled(true); return; } - if (ProjectSettings::get_singleton()->has("input/" + p_action)) { + if (ProjectSettings::get_singleton()->has_setting("input/" + p_action)) { action_add->set_text(TTR("Already existing")); action_add->set_disabled(true); return; @@ -907,6 +907,8 @@ void ProjectSettingsEditor::_copy_to_platform_about_to_show() { presets.insert("pvrtc"); presets.insert("debug"); presets.insert("release"); + presets.insert("32"); + presets.insert("64"); for (int i = 0; i < EditorExport::get_singleton()->get_export_platform_count(); i++) { List<String> p; @@ -963,7 +965,7 @@ void ProjectSettingsEditor::_copy_to_platform(int p_which) { String new_path = property + "." + feature; undo_redo->add_do_method(ProjectSettings::get_singleton(), "set", new_path, value); - if (ProjectSettings::get_singleton()->has(new_path)) { + if (ProjectSettings::get_singleton()->has_setting(new_path)) { undo_redo->add_undo_method(ProjectSettings::get_singleton(), "set", new_path, ProjectSettings::get_singleton()->get(new_path)); } @@ -1040,7 +1042,7 @@ void ProjectSettingsEditor::_translation_res_add(const String &p_path) { Variant prev; Dictionary remaps; - if (ProjectSettings::get_singleton()->has("locale/translation_remaps")) { + if (ProjectSettings::get_singleton()->has_setting("locale/translation_remaps")) { remaps = ProjectSettings::get_singleton()->get("locale/translation_remaps"); prev = remaps; } @@ -1066,7 +1068,7 @@ void ProjectSettingsEditor::_translation_res_option_file_open() { } void ProjectSettingsEditor::_translation_res_option_add(const String &p_path) { - ERR_FAIL_COND(!ProjectSettings::get_singleton()->has("locale/translation_remaps")); + ERR_FAIL_COND(!ProjectSettings::get_singleton()->has_setting("locale/translation_remaps")); Dictionary remaps = ProjectSettings::get_singleton()->get("locale/translation_remaps"); @@ -1103,7 +1105,7 @@ void ProjectSettingsEditor::_translation_res_option_changed() { if (updating_translations) return; - if (!ProjectSettings::get_singleton()->has("locale/translation_remaps")) + if (!ProjectSettings::get_singleton()->has_setting("locale/translation_remaps")) return; Dictionary remaps = ProjectSettings::get_singleton()->get("locale/translation_remaps"); @@ -1145,7 +1147,7 @@ void ProjectSettingsEditor::_translation_res_delete(Object *p_item, int p_column if (updating_translations) return; - if (!ProjectSettings::get_singleton()->has("locale/translation_remaps")) + if (!ProjectSettings::get_singleton()->has_setting("locale/translation_remaps")) return; Dictionary remaps = ProjectSettings::get_singleton()->get("locale/translation_remaps"); @@ -1172,7 +1174,7 @@ void ProjectSettingsEditor::_translation_res_option_delete(Object *p_item, int p if (updating_translations) return; - if (!ProjectSettings::get_singleton()->has("locale/translation_remaps")) + if (!ProjectSettings::get_singleton()->has_setting("locale/translation_remaps")) return; Dictionary remaps = ProjectSettings::get_singleton()->get("locale/translation_remaps"); @@ -1187,7 +1189,7 @@ void ProjectSettingsEditor::_translation_res_option_delete(Object *p_item, int p ERR_FAIL_COND(!remaps.has(key)); PoolStringArray r = remaps[key]; - ERR_FAIL_INDEX(idx, remaps.size()); + ERR_FAIL_INDEX(idx, r.size()); r.remove(idx); remaps[key] = r; @@ -1213,7 +1215,7 @@ void ProjectSettingsEditor::_update_translations() { translation_list->clear(); TreeItem *root = translation_list->create_item(NULL); translation_list->set_hide_root(true); - if (ProjectSettings::get_singleton()->has("locale/translations")) { + if (ProjectSettings::get_singleton()->has_setting("locale/translations")) { PoolStringArray translations = ProjectSettings::get_singleton()->get("locale/translations"); for (int i = 0; i < translations.size(); i++) { @@ -1251,7 +1253,7 @@ void ProjectSettingsEditor::_update_translations() { langnames += names[i]; } - if (ProjectSettings::get_singleton()->has("locale/translation_remaps")) { + if (ProjectSettings::get_singleton()->has_setting("locale/translation_remaps")) { Dictionary remaps = ProjectSettings::get_singleton()->get("locale/translation_remaps"); List<Variant> rk; @@ -1504,7 +1506,6 @@ ProjectSettingsEditor::ProjectSettingsEditor(EditorData *p_data) { Control *input_base = memnew(Control); input_base->set_name(TTR("Input Map")); - input_base->set_area_as_parent_rect(); tab_container->add_child(input_base); VBoxContainer *vbc = memnew(VBoxContainer); @@ -1552,7 +1553,7 @@ ProjectSettingsEditor::ProjectSettingsEditor(EditorData *p_data) { l = memnew(Label); l->set_text(TTR("Press a Key..")); - l->set_area_as_parent_rect(); + l->set_anchors_and_margins_preset(Control::PRESET_WIDE); l->set_align(Label::ALIGN_CENTER); l->set_margin(MARGIN_TOP, 20); l->set_anchor_and_margin(MARGIN_BOTTOM, ANCHOR_BEGIN, 30); diff --git a/editor/property_editor.cpp b/editor/property_editor.cpp index b7300b9610..b7cc9347f2 100644 --- a/editor/property_editor.cpp +++ b/editor/property_editor.cpp @@ -53,6 +53,49 @@ #include "scene/resources/packed_scene.h" #include "scene/scene_string_names.h" +void EditorResourceConversionPlugin::_bind_methods() { + + MethodInfo mi; + mi.name = "_convert"; + mi.return_val.type = Variant::OBJECT; + mi.return_val.class_name = "Resource"; + mi.return_val.hint = PROPERTY_HINT_RESOURCE_TYPE; + mi.return_val.hint_string = "Resource"; + mi.arguments.push_back(mi.return_val); + mi.arguments[0].name = "resource"; + + BIND_VMETHOD(mi) + + mi.name = "_handles"; + mi.return_val = PropertyInfo(Variant::BOOL, ""); + + BIND_VMETHOD(MethodInfo(Variant::BOOL, "_converts_to")); +} + +String EditorResourceConversionPlugin::converts_to() const { + + if (get_script_instance()) + return get_script_instance()->call("_converts_to"); + + return ""; +} + +bool EditorResourceConversionPlugin::handles(const Ref<Resource> &p_resource) const { + + if (get_script_instance()) + return get_script_instance()->call("_handles", p_resource); + + return false; +} + +Ref<Resource> EditorResourceConversionPlugin::convert(const Ref<Resource> &p_resource) { + + if (get_script_instance()) + return get_script_instance()->call("_convert", p_resource); + + return Ref<Resource>(); +} + void CustomPropertyEditor::_notification(int p_what) { if (p_what == NOTIFICATION_DRAW) { @@ -213,6 +256,20 @@ void CustomPropertyEditor::_menu_option(int p_which) { } break; default: { + if (p_which >= CONVERT_BASE_ID) { + + int to_type = p_which - CONVERT_BASE_ID; + + Vector<Ref<EditorResourceConversionPlugin> > conversions = EditorNode::get_singleton()->find_resource_conversion_plugin(RES(v)); + + ERR_FAIL_INDEX(to_type, conversions.size()); + + Ref<Resource> new_res = conversions[to_type]->convert(v); + + v = new_res; + emit_signal("variant_changed"); + break; + } ERR_FAIL_COND(inheritors_array.empty()); String intype = inheritors_array[p_which - TYPE_BASE_ID]; @@ -319,7 +376,7 @@ bool CustomPropertyEditor::edit(Object *p_owner, const String &p_name, Variant:: if (hint == PROPERTY_HINT_RANGE) { int c = hint_text.get_slice_count(","); - float min = 0, max = 100, step = 1; + float min = 0, max = 100, step = type == Variant::REAL ? .01 : 1; if (c >= 1) { if (!hint_text.get_slice(",", 0).empty()) @@ -804,7 +861,7 @@ bool CustomPropertyEditor::edit(Object *p_owner, const String &p_name, Variant:: names.push_back(TTR("Assign")); names.push_back(TTR("Clear")); - if (owner->is_class("Node") && (v.get_type() == Variant::NODE_PATH) && Object::cast_to<Node>(owner)->has_node(v)) + if (owner && owner->is_class("Node") && (v.get_type() == Variant::NODE_PATH) && Object::cast_to<Node>(owner)->has_node(v)) names.push_back(TTR("Select Node")); config_action_buttons(names); @@ -903,6 +960,27 @@ bool CustomPropertyEditor::edit(Object *p_owner, const String &p_name, Variant:: } } + if (!RES(v).is_null()) { + + Vector<Ref<EditorResourceConversionPlugin> > conversions = EditorNode::get_singleton()->find_resource_conversion_plugin(RES(v)); + if (conversions.size()) { + menu->add_separator(); + } + for (int i = 0; i < conversions.size(); i++) { + String what = conversions[i]->converts_to(); + Ref<Texture> icon; + if (has_icon(what, "EditorIcons")) { + + icon = get_icon(what, "EditorIcons"); + } else { + + icon = get_icon(what, "Resource"); + } + + menu->add_icon_item(icon, vformat(TTR("Convert To %s"), what), CONVERT_BASE_ID + i); + } + } + menu->set_position(get_position()); menu->popup(); hide(); @@ -1811,7 +1889,7 @@ CustomPropertyEditor::CustomPropertyEditor() { text_edit = memnew(TextEdit); add_child(text_edit); - text_edit->set_area_as_parent_rect(5); + text_edit->set_anchors_and_margins_preset(Control::PRESET_WIDE, Control::PRESET_MODE_MINSIZE, 5); text_edit->set_margin(MARGIN_BOTTOM, -30); text_edit->hide(); @@ -1870,12 +1948,12 @@ CustomPropertyEditor::CustomPropertyEditor() { spinbox = memnew(SpinBox); add_child(spinbox); - spinbox->set_area_as_parent_rect(5); + spinbox->set_anchors_and_margins_preset(Control::PRESET_WIDE, Control::PRESET_MODE_MINSIZE, 5); spinbox->connect("value_changed", this, "_range_modified"); slider = memnew(HSlider); add_child(slider); - slider->set_area_as_parent_rect(5); + slider->set_anchors_and_margins_preset(Control::PRESET_WIDE, Control::PRESET_MODE_MINSIZE, 5); slider->connect("value_changed", this, "_range_modified"); create_dialog = NULL; @@ -2355,7 +2433,7 @@ bool PropertyEditor::_is_drop_valid(const Dictionary &p_drag_data, const Diction void PropertyEditor::_mark_drop_fields(TreeItem *p_at) { if (_is_drop_valid(get_viewport()->gui_get_drag_data(), p_at->get_metadata(0))) - p_at->set_custom_bg_color(1, Color(0.7, 0.5, 0.2), true); + p_at->set_custom_bg_color(1, get_color("accent_color", "Editor"), true); if (p_at->get_children()) { _mark_drop_fields(p_at->get_children()); @@ -2368,7 +2446,7 @@ void PropertyEditor::_mark_drop_fields(TreeItem *p_at) { Variant PropertyEditor::get_drag_data_fw(const Point2 &p_point, Control *p_from) { - TreeItem *item = tree->get_item_at_pos(p_point); + TreeItem *item = tree->get_item_at_position(p_point); if (!item) return Variant(); @@ -2376,7 +2454,7 @@ Variant PropertyEditor::get_drag_data_fw(const Point2 &p_point, Control *p_from) if (!d.has("name")) return Variant(); - int col = tree->get_column_at_pos(p_point); + int col = tree->get_column_at_position(p_point); if (col == 0) { Dictionary dp; @@ -2407,11 +2485,11 @@ Variant PropertyEditor::get_drag_data_fw(const Point2 &p_point, Control *p_from) bool PropertyEditor::can_drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from) const { - TreeItem *item = tree->get_item_at_pos(p_point); + TreeItem *item = tree->get_item_at_position(p_point); if (!item) return false; - int col = tree->get_column_at_pos(p_point); + int col = tree->get_column_at_position(p_point); if (col != 1) return false; @@ -2419,11 +2497,11 @@ bool PropertyEditor::can_drop_data_fw(const Point2 &p_point, const Variant &p_da } void PropertyEditor::drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from) { - TreeItem *item = tree->get_item_at_pos(p_point); + TreeItem *item = tree->get_item_at_position(p_point); if (!item) return; - int col = tree->get_column_at_pos(p_point); + int col = tree->get_column_at_position(p_point); if (col != 1) return; @@ -2507,10 +2585,10 @@ void PropertyEditor::_notification(int p_what) { } } - if (p_what == NOTIFICATION_FIXED_PROCESS) { + if (p_what == NOTIFICATION_PHYSICS_PROCESS) { if (refresh_countdown > 0) { - refresh_countdown -= get_fixed_process_delta_time(); + refresh_countdown -= get_physics_process_delta_time(); if (refresh_countdown <= 0) { TreeItem *root = tree->get_root(); _refresh_item(root); @@ -2880,7 +2958,7 @@ void PropertyEditor::update_tree() { item->set_metadata(1, p.name); if (draw_red) - item->set_custom_color(0, Color(0.8, 0.4, 0.20)); + item->set_custom_color(0, get_color("error_color", "Editor")); if (p.name == selected_property) { @@ -2954,7 +3032,7 @@ void PropertyEditor::update_tree() { if (p.hint == PROPERTY_HINT_SPRITE_FRAME || p.hint == PROPERTY_HINT_RANGE || p.hint == PROPERTY_HINT_EXP_RANGE) { int c = p.hint_string.get_slice_count(","); - float min = 0, max = 100, step = 1; + float min = 0, max = 100, step = p.type == Variant::REAL ? .01 : 1; if (c >= 1) { min = p.hint_string.get_slice(",", 0).to_double(); @@ -3460,14 +3538,14 @@ void PropertyEditor::_draw_transparency(Object *t, const Rect2 &p_rect) { return; Color color = obj->get(ti->get_metadata(1)); - Ref<Texture> arrow = tree->get_icon("select_arrow"); + Ref<Texture> arrow = tree->get_icon("select_option"); // make a little space between consecutive color fields Rect2 area = p_rect; area.position.y += 1; area.size.height -= 2; area.size.width -= arrow->get_size().width + 5; - tree->draw_texture_rect(get_icon("Transparent", "EditorIcons"), area, true); + tree->draw_texture_rect(get_icon("GuiMiniCheckerboard", "EditorIcons"), area, true); tree->draw_rect(area, color); } @@ -4149,7 +4227,7 @@ PropertyEditor::PropertyEditor() { tree->set_drag_forwarding(this); - set_fixed_process(true); + set_physics_process(true); custom_editor = memnew(CustomPropertyEditor); add_child(custom_editor); @@ -4179,7 +4257,7 @@ PropertyEditor::PropertyEditor() { use_filter = false; subsection_selectable = false; property_selectable = false; - show_type_icons = EDITOR_DEF("interface/show_type_icons", false); + show_type_icons = EDITOR_DEF("interface/editor/show_type_icons", false); } PropertyEditor::~PropertyEditor() { diff --git a/editor/property_editor.h b/editor/property_editor.h index bfd5ee401e..e69ca8bcd5 100644 --- a/editor/property_editor.h +++ b/editor/property_editor.h @@ -53,6 +53,19 @@ class PropertyValueEvaluator; class CreateDialog; class PropertySelector; +class EditorResourceConversionPlugin : public Reference { + + GDCLASS(EditorResourceConversionPlugin, Reference) + +protected: + static void _bind_methods(); + +public: + virtual String converts_to() const; + virtual bool handles(const Ref<Resource> &p_resource) const; + virtual Ref<Resource> convert(const Ref<Resource> &p_resource); +}; + class CustomPropertyEditor : public Popup { GDCLASS(CustomPropertyEditor, Popup); @@ -68,7 +81,8 @@ class CustomPropertyEditor : public Popup { OBJ_MENU_PASTE = 5, OBJ_MENU_NEW_SCRIPT = 6, OBJ_MENU_SHOW_IN_FILE_SYSTEM = 7, - TYPE_BASE_ID = 100 + TYPE_BASE_ID = 100, + CONVERT_BASE_ID = 1000 }; enum { diff --git a/editor/scene_tree_dock.cpp b/editor/scene_tree_dock.cpp index 2fcba7e3c0..f3e59932c4 100644 --- a/editor/scene_tree_dock.cpp +++ b/editor/scene_tree_dock.cpp @@ -270,6 +270,18 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) { switch (p_tool) { case TOOL_NEW: { + + String preferred = ""; + Node *current_edited_scene_root = EditorNode::get_singleton()->get_edited_scene(); + + if (current_edited_scene_root) { + + if (ClassDB::is_parent_class(current_edited_scene_root->get_class_name(), "Node2D")) + preferred = "Node2D"; + else if (ClassDB::is_parent_class(current_edited_scene_root->get_class_name(), "Spatial")) + preferred = "Spatial"; + } + create_dialog->set_preferred_search_result_type(preferred); create_dialog->popup_create(true); } break; case TOOL_INSTANCE: { diff --git a/editor/scene_tree_editor.cpp b/editor/scene_tree_editor.cpp index 87b4d2a867..a6e0af05b2 100644 --- a/editor/scene_tree_editor.cpp +++ b/editor/scene_tree_editor.cpp @@ -185,7 +185,7 @@ bool SceneTreeEditor::_add_nodes(Node *p_node, TreeItem *p_parent) { if (part_of_subscene) { //item->set_selectable(0,marked_selectable); - item->set_custom_color(0, get_color("error_color", "Editor").linear_interpolate(get_color("warning_color", "Editor"), 0.4)); + item->set_custom_color(0, get_color("disabled_font_color", "Editor")); } else if (marked.has(p_node)) { @@ -215,9 +215,9 @@ bool SceneTreeEditor::_add_nodes(Node *p_node, TreeItem *p_parent) { bool has_groups = p_node->has_persistent_groups(); if (has_connections && has_groups) { - item->add_button(0, get_icon("ConnectionAndGroups", "EditorIcons"), BUTTON_SIGNALS, false, TTR("Node has connection(s) and group(s)\nClick to show signals dock.")); + item->add_button(0, get_icon("SignalsAndGroups", "EditorIcons"), BUTTON_SIGNALS, false, TTR("Node has connection(s) and group(s)\nClick to show signals dock.")); } else if (has_connections) { - item->add_button(0, get_icon("Connect", "EditorIcons"), BUTTON_SIGNALS, false, TTR("Node has connections.\nClick to show signals dock.")); + item->add_button(0, get_icon("Signals", "EditorIcons"), BUTTON_SIGNALS, false, TTR("Node has connections.\nClick to show signals dock.")); } else if (has_groups) { item->add_button(0, get_icon("Groups", "EditorIcons"), BUTTON_GROUPS, false, TTR("Node is in group(s).\nClick to show groups dock.")); } @@ -345,7 +345,7 @@ void SceneTreeEditor::_update_visibility_color(Node *p_node, TreeItem *p_item) { Color color(1, 1, 1, 1); bool visible_on_screen = p_node->call("is_visible_in_tree"); if (!visible_on_screen) { - color = Color(0.6, 0.6, 0.6, 1); + color.a = 0.6; } int idx = p_item->get_button_by_id(0, BUTTON_VISIBILITY); p_item->set_button_color(0, idx, color); @@ -817,11 +817,11 @@ bool SceneTreeEditor::can_drop_data_fw(const Point2 &p_point, const Variant &p_d if (!d.has("type")) return false; - TreeItem *item = tree->get_item_at_pos(p_point); + TreeItem *item = tree->get_item_at_position(p_point); if (!item) return false; - int section = tree->get_drop_section_at_pos(p_point); + int section = tree->get_drop_section_at_position(p_point); if (section < -1 || (section == -1 && !item->get_parent())) return false; @@ -860,10 +860,10 @@ void SceneTreeEditor::drop_data_fw(const Point2 &p_point, const Variant &p_data, if (!can_drop_data_fw(p_point, p_data, p_from)) return; - TreeItem *item = tree->get_item_at_pos(p_point); + TreeItem *item = tree->get_item_at_position(p_point); if (!item) return; - int section = tree->get_drop_section_at_pos(p_point); + int section = tree->get_drop_section_at_position(p_point); if (section < -1) return; @@ -950,7 +950,7 @@ void SceneTreeEditor::_bind_methods() { 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::POOL_STRING_ARRAY, "files"), PropertyInfo(Variant::NODE_PATH, "to_path"), PropertyInfo(Variant::INT, "type"))); ADD_SIGNAL(MethodInfo("script_dropped", PropertyInfo(Variant::STRING, "file"), PropertyInfo(Variant::NODE_PATH, "to_path"))); - ADD_SIGNAL(MethodInfo("rmb_pressed", PropertyInfo(Variant::VECTOR2, "pos"))); + ADD_SIGNAL(MethodInfo("rmb_pressed", PropertyInfo(Variant::VECTOR2, "position"))); ADD_SIGNAL(MethodInfo("open")); ADD_SIGNAL(MethodInfo("open_script")); diff --git a/editor/script_create_dialog.cpp b/editor/script_create_dialog.cpp index 089c054b59..00f44ad9b0 100644 --- a/editor/script_create_dialog.cpp +++ b/editor/script_create_dialog.cpp @@ -88,7 +88,7 @@ bool ScriptCreateDialog::_validate(const String &p_string) { continue; } - bool valid_char = (p_string[i] >= '0' && p_string[i] <= '9') || (p_string[i] >= 'a' && p_string[i] <= 'z') || (p_string[i] >= 'A' && p_string[i] <= 'Z') || p_string[i] == '_' || (is_val_path && (p_string[i] == '/' || p_string[i] == '.')); + bool valid_char = (p_string[i] >= '0' && p_string[i] <= '9') || (p_string[i] >= 'a' && p_string[i] <= 'z') || (p_string[i] >= 'A' && p_string[i] <= 'Z') || p_string[i] == '_' || p_string[i] == '-' || (is_val_path && (p_string[i] == '/' || p_string[i] == '.')); if (!valid_char) return false; diff --git a/editor/script_editor_debugger.cpp b/editor/script_editor_debugger.cpp index 76e75cff0a..ef61aad341 100644 --- a/editor/script_editor_debugger.cpp +++ b/editor/script_editor_debugger.cpp @@ -649,8 +649,8 @@ void ScriptEditorDebugger::_parse_message(const String &p_msg, const Array &p_da metric.frame_number = p_data[0]; metric.frame_time = p_data[1]; metric.idle_time = p_data[2]; - metric.fixed_time = p_data[3]; - metric.fixed_frame_time = p_data[4]; + metric.physics_time = p_data[3]; + metric.physics_frame_time = p_data[4]; int frame_data_amount = p_data[6]; int frame_function_amount = p_data[7]; @@ -663,10 +663,10 @@ void ScriptEditorDebugger::_parse_message(const String &p_msg, const Array &p_da EditorProfiler::Metric::Category::Item item; item.calls = 1; item.line = 0; - item.name = "Fixed Time"; - item.total = metric.fixed_time; + item.name = "Physics Time"; + item.total = metric.physics_time; item.self = item.total; - item.signature = "fixed_time"; + item.signature = "physics_time"; frame_time.items.push_back(item); @@ -677,10 +677,10 @@ void ScriptEditorDebugger::_parse_message(const String &p_msg, const Array &p_da frame_time.items.push_back(item); - item.name = "Fixed Frame Time"; - item.total = metric.fixed_frame_time; + item.name = "Physics Frame Time"; + item.total = metric.physics_frame_time; item.self = item.total; - item.signature = "fixed_frame_time"; + item.signature = "physics_frame_time"; frame_time.items.push_back(item); @@ -1045,6 +1045,8 @@ void ScriptEditorDebugger::_notification(int p_what) { tabs->add_style_override("panel", editor->get_gui_base()->get_stylebox("DebuggerPanel", "EditorStyles")); tabs->add_style_override("tab_fg", editor->get_gui_base()->get_stylebox("DebuggerTabFG", "EditorStyles")); tabs->add_style_override("tab_bg", editor->get_gui_base()->get_stylebox("DebuggerTabBG", "EditorStyles")); + tabs->set_margin(MARGIN_LEFT, -EditorNode::get_singleton()->get_gui_base()->get_stylebox("BottomPanelDebuggerOverride", "EditorStyles")->get_margin(MARGIN_LEFT)); + tabs->set_margin(MARGIN_RIGHT, EditorNode::get_singleton()->get_gui_base()->get_stylebox("BottomPanelDebuggerOverride", "EditorStyles")->get_margin(MARGIN_RIGHT)); } break; } } @@ -1065,7 +1067,7 @@ void ScriptEditorDebugger::start() { int remote_port = (int)EditorSettings::get_singleton()->get("network/debug/remote_port"); if (server->listen(remote_port) != OK) { - EditorNode::get_log()->add_message(String("** Error listening on port ") + itos(remote_port) + String(" **")); + EditorNode::get_log()->add_message(String("Error listening on port ") + itos(remote_port), true); return; } set_process(true); @@ -1622,7 +1624,10 @@ ScriptEditorDebugger::ScriptEditorDebugger(EditorNode *p_editor) { tabs->add_style_override("panel", editor->get_gui_base()->get_stylebox("DebuggerPanel", "EditorStyles")); tabs->add_style_override("tab_fg", editor->get_gui_base()->get_stylebox("DebuggerTabFG", "EditorStyles")); tabs->add_style_override("tab_bg", editor->get_gui_base()->get_stylebox("DebuggerTabBG", "EditorStyles")); - tabs->set_area_as_parent_rect(); + + tabs->set_anchors_and_margins_preset(Control::PRESET_WIDE); + tabs->set_margin(MARGIN_LEFT, -editor->get_gui_base()->get_stylebox("BottomPanelDebuggerOverride", "EditorStyles")->get_margin(MARGIN_LEFT)); + tabs->set_margin(MARGIN_RIGHT, editor->get_gui_base()->get_stylebox("BottomPanelDebuggerOverride", "EditorStyles")->get_margin(MARGIN_RIGHT)); add_child(tabs); { //debugger diff --git a/editor/script_editor_debugger.h b/editor/script_editor_debugger.h index 64ac2535a9..d0faab5892 100644 --- a/editor/script_editor_debugger.h +++ b/editor/script_editor_debugger.h @@ -166,9 +166,6 @@ class ScriptEditorDebugger : public Control { void _method_changed(Object *p_base, const StringName &p_name, VARIANT_ARG_DECLARE); void _property_changed(Object *p_base, const StringName &p_property, const Variant &p_value); - static void _method_changeds(void *p_ud, Object *p_base, const StringName &p_name, VARIANT_ARG_DECLARE); - static void _property_changeds(void *p_ud, Object *p_base, const StringName &p_property, const Variant &p_value); - void _error_selected(int p_idx); void _error_stack_selected(int p_idx); @@ -196,6 +193,9 @@ public: void set_live_debugging(bool p_enable); + static void _method_changeds(void *p_ud, Object *p_base, const StringName &p_name, VARIANT_ARG_DECLARE); + static void _property_changeds(void *p_ud, Object *p_base, const StringName &p_property, const Variant &p_value); + void live_debug_create_node(const NodePath &p_parent, const String &p_type, const String &p_name); void live_debug_instance_node(const NodePath &p_parent, const String &p_path, const String &p_name); void live_debug_remove_node(const NodePath &p_at); diff --git a/editor/settings_config_dialog.cpp b/editor/settings_config_dialog.cpp index 05e3feedb5..c052845be9 100644 --- a/editor/settings_config_dialog.cpp +++ b/editor/settings_config_dialog.cpp @@ -35,6 +35,7 @@ #include "os/keyboard.h" #include "project_settings.h" #include "scene/gui/margin_container.h" +#include "script_editor_debugger.h" void EditorSettingsDialog::ok_pressed() { @@ -58,6 +59,8 @@ void EditorSettingsDialog::_settings_property_edited(const String &p_name) { // color theme is changed if (full_name == "text_editor/theme/color_theme") { property_editor->get_property_editor()->update_tree(); + } else if (full_name == "interface/theme/accent_color" || full_name == "interface/theme/base_color" || full_name == "interface/theme/contrast") { + EditorSettings::get_singleton()->set_manually("interface/theme/preset", 6); // set preset to Custom } } @@ -89,9 +92,10 @@ void EditorSettingsDialog::popup_edit_settings() { search_box->grab_focus(); _update_shortcuts(); + set_process_unhandled_input(true); // Restore valid window bounds or pop up at default size. - if (EditorSettings::get_singleton()->has("interface/dialogs/editor_settings_bounds")) { + if (EditorSettings::get_singleton()->has_setting("interface/dialogs/editor_settings_bounds")) { popup(EditorSettings::get_singleton()->get("interface/dialogs/editor_settings_bounds")); } else { popup_centered_ratio(0.7); @@ -119,19 +123,62 @@ void EditorSettingsDialog::_filter_shortcuts(const String &p_filter) { _update_shortcuts(); } +void EditorSettingsDialog::_undo_redo_callback(void *p_self, const String &p_name) { + EditorNode::get_log()->add_message(p_name); +} + void EditorSettingsDialog::_notification(int p_what) { switch (p_what) { + case NOTIFICATION_READY: { + ScriptEditorDebugger *sed = ScriptEditor::get_singleton()->get_debugger(); + undo_redo->set_method_notify_callback(sed->_method_changeds, sed); + undo_redo->set_property_notify_callback(sed->_property_changeds, sed); + undo_redo->set_commit_notify_callback(_undo_redo_callback, this); + } break; case NOTIFICATION_ENTER_TREE: { clear_button->set_icon(get_icon("Close", "EditorIcons")); shortcut_clear_button->set_icon(get_icon("Close", "EditorIcons")); } break; case NOTIFICATION_POPUP_HIDE: { EditorSettings::get_singleton()->set("interface/dialogs/editor_settings_bounds", get_rect()); + set_process_unhandled_input(false); } break; } } +void EditorSettingsDialog::_unhandled_input(const Ref<InputEvent> &p_event) { + + Ref<InputEventKey> k = p_event; + + if (k.is_valid() && is_window_modal_on_top()) { + + if (k->is_pressed()) { + + bool handled = false; + + if (ED_IS_SHORTCUT("editor/undo", p_event)) { + String action = undo_redo->get_current_action_name(); + if (action != "") + EditorNode::get_log()->add_message("UNDO: " + action); + undo_redo->undo(); + handled = true; + } + if (ED_IS_SHORTCUT("editor/redo", p_event)) { + undo_redo->redo(); + String action = undo_redo->get_current_action_name(); + if (action != "") + EditorNode::get_log()->add_message("REDO: " + action); + handled = true; + } + + if (handled) { + accept_event(); + } + } + } +} + void EditorSettingsDialog::_update_shortcuts() { shortcuts->clear(); @@ -210,30 +257,28 @@ void EditorSettingsDialog::_shortcut_button_pressed(Object *p_item, int p_column if (!sc.is_valid()) return; //pointless, there is nothing - UndoRedo *ur = EditorNode::get_singleton()->get_undo_redo(); - ur->create_action("Erase Shortcut"); - ur->add_do_method(sc.ptr(), "set_shortcut", Ref<InputEvent>()); - ur->add_undo_method(sc.ptr(), "set_shortcut", sc->get_shortcut()); - ur->add_do_method(this, "_update_shortcuts"); - ur->add_undo_method(this, "_update_shortcuts"); - ur->add_do_method(this, "_settings_changed"); - ur->add_undo_method(this, "_settings_changed"); - ur->commit_action(); + undo_redo->create_action("Erase Shortcut"); + undo_redo->add_do_method(sc.ptr(), "set_shortcut", Ref<InputEvent>()); + undo_redo->add_undo_method(sc.ptr(), "set_shortcut", sc->get_shortcut()); + undo_redo->add_do_method(this, "_update_shortcuts"); + undo_redo->add_undo_method(this, "_update_shortcuts"); + undo_redo->add_do_method(this, "_settings_changed"); + undo_redo->add_undo_method(this, "_settings_changed"); + undo_redo->commit_action(); } else if (p_idx == 2) { //revert to original if (!sc.is_valid()) return; //pointless, there is nothing Ref<InputEvent> original = sc->get_meta("original"); - UndoRedo *ur = EditorNode::get_singleton()->get_undo_redo(); - ur->create_action("Restore Shortcut"); - ur->add_do_method(sc.ptr(), "set_shortcut", original); - ur->add_undo_method(sc.ptr(), "set_shortcut", sc->get_shortcut()); - ur->add_do_method(this, "_update_shortcuts"); - ur->add_undo_method(this, "_update_shortcuts"); - ur->add_do_method(this, "_settings_changed"); - ur->add_undo_method(this, "_settings_changed"); - ur->commit_action(); + undo_redo->create_action("Restore Shortcut"); + undo_redo->add_do_method(sc.ptr(), "set_shortcut", original); + undo_redo->add_undo_method(sc.ptr(), "set_shortcut", sc->get_shortcut()); + undo_redo->add_do_method(this, "_update_shortcuts"); + undo_redo->add_undo_method(this, "_update_shortcuts"); + undo_redo->add_do_method(this, "_settings_changed"); + undo_redo->add_undo_method(this, "_settings_changed"); + undo_redo->commit_action(); } } @@ -274,19 +319,19 @@ void EditorSettingsDialog::_press_a_key_confirm() { Ref<ShortCut> sc = EditorSettings::get_singleton()->get_shortcut(shortcut_configured); - UndoRedo *ur = EditorNode::get_singleton()->get_undo_redo(); - ur->create_action("Change Shortcut '" + shortcut_configured + "'"); - ur->add_do_method(sc.ptr(), "set_shortcut", ie); - ur->add_undo_method(sc.ptr(), "set_shortcut", sc->get_shortcut()); - ur->add_do_method(this, "_update_shortcuts"); - ur->add_undo_method(this, "_update_shortcuts"); - ur->add_do_method(this, "_settings_changed"); - ur->add_undo_method(this, "_settings_changed"); - ur->commit_action(); + undo_redo->create_action("Change Shortcut '" + shortcut_configured + "'"); + undo_redo->add_do_method(sc.ptr(), "set_shortcut", ie); + undo_redo->add_undo_method(sc.ptr(), "set_shortcut", sc->get_shortcut()); + undo_redo->add_do_method(this, "_update_shortcuts"); + undo_redo->add_undo_method(this, "_update_shortcuts"); + undo_redo->add_do_method(this, "_settings_changed"); + undo_redo->add_undo_method(this, "_settings_changed"); + undo_redo->commit_action(); } void EditorSettingsDialog::_bind_methods() { + ClassDB::bind_method(D_METHOD("_unhandled_input"), &EditorSettingsDialog::_unhandled_input); ClassDB::bind_method(D_METHOD("_settings_save"), &EditorSettingsDialog::_settings_save); ClassDB::bind_method(D_METHOD("_settings_changed"), &EditorSettingsDialog::_settings_changed); ClassDB::bind_method(D_METHOD("_settings_property_edited"), &EditorSettingsDialog::_settings_property_edited); @@ -303,6 +348,7 @@ EditorSettingsDialog::EditorSettingsDialog() { set_title(TTR("Editor Settings")); set_resizable(true); + undo_redo = memnew(UndoRedo); tabs = memnew(TabContainer); tabs->set_tab_align(TabContainer::ALIGN_LEFT); @@ -334,6 +380,7 @@ EditorSettingsDialog::EditorSettingsDialog() { property_editor->get_property_editor()->set_use_filter(true); property_editor->register_search_box(search_box); property_editor->set_v_size_flags(Control::SIZE_EXPAND_FILL); + property_editor->get_property_editor()->set_undo_redo(undo_redo); vbc->add_child(property_editor); property_editor->get_property_editor()->connect("property_edited", this, "_settings_property_edited"); @@ -374,7 +421,7 @@ EditorSettingsDialog::EditorSettingsDialog() { l = memnew(Label); l->set_text(TTR("Press a Key..")); - l->set_area_as_parent_rect(); + l->set_anchors_and_margins_preset(Control::PRESET_WIDE); l->set_align(Label::ALIGN_CENTER); l->set_margin(MARGIN_TOP, 20); l->set_anchor_and_margin(MARGIN_BOTTOM, ANCHOR_BEGIN, 30); @@ -397,3 +444,7 @@ EditorSettingsDialog::EditorSettingsDialog() { updating = false; } + +EditorSettingsDialog::~EditorSettingsDialog() { + memdelete(undo_redo); +} diff --git a/editor/settings_config_dialog.h b/editor/settings_config_dialog.h index 8a66d5098c..a03b15c06d 100644 --- a/editor/settings_config_dialog.h +++ b/editor/settings_config_dialog.h @@ -50,6 +50,7 @@ class EditorSettingsDialog : public AcceptDialog { Timer *timer; + UndoRedo *undo_redo; Tree *shortcuts; ConfirmationDialog *press_a_key; @@ -65,6 +66,7 @@ class EditorSettingsDialog : public AcceptDialog { void _settings_property_edited(const String &p_name); void _settings_save(); + void _unhandled_input(const Ref<InputEvent> &p_event); void _notification(int p_what); void _press_a_key_confirm(); @@ -78,6 +80,8 @@ class EditorSettingsDialog : public AcceptDialog { void _update_shortcuts(); void _shortcut_button_pressed(Object *p_item, int p_column, int p_idx); + static void _undo_redo_callback(void *p_self, const String &p_name); + protected: static void _bind_methods(); @@ -85,6 +89,7 @@ public: void popup_edit_settings(); EditorSettingsDialog(); + ~EditorSettingsDialog(); }; #endif // SETTINGS_CONFIG_DIALOG_H diff --git a/editor/spatial_editor_gizmos.cpp b/editor/spatial_editor_gizmos.cpp index 9c7ea506aa..3f8d93d976 100644 --- a/editor/spatial_editor_gizmos.cpp +++ b/editor/spatial_editor_gizmos.cpp @@ -211,9 +211,10 @@ void EditorSpatialGizmo::add_unscaled_billboard(const Ref<Material> &p_material, instances.push_back(ins); } -void EditorSpatialGizmo::add_collision_triangles(const Ref<TriangleMesh> &p_tmesh) { +void EditorSpatialGizmo::add_collision_triangles(const Ref<TriangleMesh> &p_tmesh, const Rect3 &p_bounds) { collision_mesh = p_tmesh; + collision_mesh_bounds = p_bounds; } void EditorSpatialGizmo::add_collision_segments(const Vector<Vector3> &p_lines) { @@ -297,11 +298,11 @@ void EditorSpatialGizmo::add_handles(const Vector<Vector3> &p_handles, bool p_bi } } -void EditorSpatialGizmo::add_solid_box(Ref<Material> &p_material, Vector3 size) { +void EditorSpatialGizmo::add_solid_box(Ref<Material> &p_material, Vector3 p_size) { ERR_FAIL_COND(!spatial_node); CubeMesh cubem; - cubem.set_size(size); + cubem.set_size(p_size); Ref<ArrayMesh> m = memnew(ArrayMesh); m->add_surface_from_arrays(cubem.surface_get_primitive_type(0), cubem.surface_get_arrays(0)); m->surface_set_material(0, p_material); @@ -359,6 +360,29 @@ bool EditorSpatialGizmo::intersect_frustum(const Camera *p_camera, const Vector< return false; } + if (collision_mesh_bounds.size != Vector3(0.0, 0.0, 0.0)) { + Transform t = spatial_node->get_global_transform(); + const Plane *p = p_frustum.ptr(); + int fc = p_frustum.size(); + + Vector3 mins = t.xform(collision_mesh_bounds.get_position()); + Vector3 max = t.xform(collision_mesh_bounds.get_position() + collision_mesh_bounds.get_size()); + + bool any_out = false; + + for (int j = 0; j < fc; j++) { + + if (p[j].distance_to(mins) > 0 || p[j].distance_to(max) > 0) { + + any_out = true; + break; + } + } + + if (!any_out) + return true; + } + return false; } @@ -637,7 +661,7 @@ void EditorSpatialGizmo::_bind_methods() { ClassDB::bind_method(D_METHOD("add_lines", "lines", "material", "billboard"), &EditorSpatialGizmo::add_lines, DEFVAL(false)); ClassDB::bind_method(D_METHOD("add_mesh", "mesh", "billboard", "skeleton"), &EditorSpatialGizmo::add_mesh, DEFVAL(false), DEFVAL(RID())); ClassDB::bind_method(D_METHOD("add_collision_segments", "segments"), &EditorSpatialGizmo::add_collision_segments); - ClassDB::bind_method(D_METHOD("add_collision_triangles", "triangles"), &EditorSpatialGizmo::add_collision_triangles); + ClassDB::bind_method(D_METHOD("add_collision_triangles", "triangles", "bounds"), &EditorSpatialGizmo::add_collision_triangles); ClassDB::bind_method(D_METHOD("add_unscaled_billboard", "material", "default_scale"), &EditorSpatialGizmo::add_unscaled_billboard, DEFVAL(1)); ClassDB::bind_method(D_METHOD("add_handles", "handles", "billboard", "secondary"), &EditorSpatialGizmo::add_handles, DEFVAL(false), DEFVAL(false)); ClassDB::bind_method(D_METHOD("set_spatial_node", "node"), &EditorSpatialGizmo::_set_spatial_node); @@ -720,7 +744,7 @@ static float _find_closest_angle_to_half_pi_arc(const Vector3 &p_from, const Vec } //min_p = p_arc_xform.affine_inverse().xform(min_p); - float a = Vector2(min_p.x, -min_p.z).angle(); + float a = (Math_PI * 0.5) - Vector2(min_p.x, -min_p.z).angle(); return a * 180.0 / Math_PI; } @@ -869,7 +893,7 @@ void LightSpatialGizmo::redraw() { if (Object::cast_to<SpotLight>(light)) { - Ref<Material> material = create_material("light_spot_material", gizmo_color, true); + Ref<Material> material = create_material("light_spot_material", gizmo_color); Ref<Material> icon = create_icon_material("light_spot_icon", SpatialEditor::get_singleton()->get_icon("GizmoSpotLight", "EditorIcons")); clear(); @@ -1249,8 +1273,10 @@ void MeshInstanceSpatialGizmo::redraw() { return; //none Ref<TriangleMesh> tm = m->generate_triangle_mesh(); - if (tm.is_valid()) - add_collision_triangles(tm); + if (tm.is_valid()) { + Rect3 aabb; + add_collision_triangles(tm, aabb); + } } MeshInstanceSpatialGizmo::MeshInstanceSpatialGizmo(MeshInstance *p_mesh) { diff --git a/editor/spatial_editor_gizmos.h b/editor/spatial_editor_gizmos.h index d63a804055..afe64c723c 100644 --- a/editor/spatial_editor_gizmos.h +++ b/editor/spatial_editor_gizmos.h @@ -78,6 +78,7 @@ class EditorSpatialGizmo : public SpatialEditorGizmo { Vector<Vector3> collision_segments; Ref<TriangleMesh> collision_mesh; + Rect3 collision_mesh_bounds; struct Handle { Vector3 pos; @@ -99,7 +100,7 @@ protected: void add_lines(const Vector<Vector3> &p_lines, const Ref<Material> &p_material, bool p_billboard = false); void add_mesh(const Ref<ArrayMesh> &p_mesh, bool p_billboard = false, const RID &p_skeleton = RID()); void add_collision_segments(const Vector<Vector3> &p_lines); - void add_collision_triangles(const Ref<TriangleMesh> &p_tmesh); + void add_collision_triangles(const Ref<TriangleMesh> &p_tmesh, const Rect3 &p_bounds = Rect3()); void add_unscaled_billboard(const Ref<Material> &p_material, float p_scale = 1); void add_handles(const Vector<Vector3> &p_handles, bool p_billboard = false, bool p_secondary = false); void add_solid_box(Ref<Material> &p_material, Vector3 size); diff --git a/editor/translations/ar.po b/editor/translations/ar.po index ac273ea41e..bf0d4bac00 100644 --- a/editor/translations/ar.po +++ b/editor/translations/ar.po @@ -3,14 +3,16 @@ # This file is distributed under the same license as the Godot source code. # # athomield <athomield@hotmail.com>, 2017. +# Basil Al-Khateeb <basil.y.alkhateeb@gmail.com>, 2017. # Mohammmad Khashashneh <mohammad.rasmi@gmail.com>, 2016. +# omar anwar aglan <omar.aglan91@yahoo.com>, 2017. # OWs Tetra <owstetra@gmail.com>, 2017. # msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2017-03-29 16:30+0000\n" -"Last-Translator: OWs Tetra <owstetra@gmail.com>\n" +"PO-Revision-Date: 2017-09-29 19:44+0000\n" +"Last-Translator: omar anwar aglan <omar.aglan91@yahoo.com>\n" "Language-Team: Arabic <https://hosted.weblate.org/projects/godot-engine/" "godot/ar/>\n" "Language: ar\n" @@ -18,716 +20,470 @@ 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.13-dev\n" +"X-Generator: Weblate 2.17-dev\n" #: editor/animation_editor.cpp msgid "Disabled" -msgstr "" +msgstr "معطل" #: editor/animation_editor.cpp msgid "All Selection" -msgstr "" +msgstr "ÙƒÙÙ„ Ø§Ù„Ù…ÙØØ¯Ø¯" #: editor/animation_editor.cpp msgid "Move Add Key" -msgstr "" +msgstr "ØªØØ±Ùƒ أض٠مÙÙØªØ§Ø" #: editor/animation_editor.cpp msgid "Anim Change Transition" -msgstr "" +msgstr "Ø§Ù„ØØ±ÙƒØ© تغير إنتقال" #: editor/animation_editor.cpp msgid "Anim Change Transform" -msgstr "" +msgstr "Ø§Ù„ØØ±ÙƒØ© تغير تبديل" #: editor/animation_editor.cpp msgid "Anim Change Value" -msgstr "" +msgstr "Ø§Ù„ØØ±ÙƒØ© تغير القيمة" #: editor/animation_editor.cpp msgid "Anim Change Call" -msgstr "" +msgstr "Ø§Ù„ØØ±ÙƒØ© تغير الخانة" #: editor/animation_editor.cpp msgid "Anim Add Track" -msgstr "" +msgstr "Ø§Ù„ØØ±ÙƒØ© Ø¥Ø¶Ø§ÙØ© مسار" #: editor/animation_editor.cpp msgid "Anim Duplicate Keys" -msgstr "" +msgstr "Ø§Ù„ØØ±ÙƒØ© تكرار Ø§Ù„Ù…ÙØ§ØªÙŠØ" #: editor/animation_editor.cpp msgid "Move Anim Track Up" -msgstr "" +msgstr "ØªØØ±Ùƒ Ø§Ù„ØØ±ÙƒØ© متابعة" #: editor/animation_editor.cpp msgid "Move Anim Track Down" -msgstr "" +msgstr "ØªØØ±ÙŠÙƒ Ø§Ù„ØØ±ÙƒØ© تتبع أسÙÙ„" #: editor/animation_editor.cpp msgid "Remove Anim Track" -msgstr "" +msgstr "Ø¥Ù…Ø³Ø Ù…Ø³Ø§Ø± Ø§Ù„ØØ±ÙƒØ©" #: editor/animation_editor.cpp msgid "Set Transitions to:" -msgstr "" +msgstr "ØØ¯Ø¯ التØÙˆÙ„ات إلي:" #: editor/animation_editor.cpp msgid "Anim Track Rename" -msgstr "" +msgstr "إعادة تسمية مسار Ø§Ù„ØØ±ÙƒØ©" #: editor/animation_editor.cpp msgid "Anim Track Change Interpolation" -msgstr "" +msgstr "تغير إدخال مسار Ø§Ù„ØØ±ÙƒØ©" #: editor/animation_editor.cpp msgid "Anim Track Change Value Mode" -msgstr "" +msgstr "وضع تغير قيمة مسار Ø§Ù„ØØ±ÙƒØ©" #: editor/animation_editor.cpp msgid "Anim Track Change Wrap Mode" -msgstr "" +msgstr "وضع تغيير ل٠مسار Ø§Ù„ØØ±ÙƒØ©" #: editor/animation_editor.cpp msgid "Edit Node Curve" -msgstr "" +msgstr "تعديل منØÙ†ÙŠ Ø§Ù„Ø¹Ù‚Ø¯Ø©" #: editor/animation_editor.cpp msgid "Edit Selection Curve" -msgstr "" +msgstr "تعديل المنØÙ†ÙŠ Ø§Ù„Ù…ØØ¯Ø¯" #: editor/animation_editor.cpp msgid "Anim Delete Keys" -msgstr "ØØ°Ù الأطر الرئيسة" +msgstr "ØØ°Ù Ù…ÙØ§ØªÙŠØ Ø§Ù„ØØ±ÙƒØ©" #: editor/animation_editor.cpp editor/plugins/tile_map_editor_plugin.cpp msgid "Duplicate Selection" -msgstr "" +msgstr "تكرير Ø§Ù„Ù…ØØ¯Ø¯" #: editor/animation_editor.cpp msgid "Duplicate Transposed" -msgstr "" +msgstr "تكرير النقل" #: editor/animation_editor.cpp msgid "Remove Selection" -msgstr "" +msgstr "إزالة Ø§Ù„ØªØØ¯ÙŠØ¯" #: editor/animation_editor.cpp msgid "Continuous" -msgstr "" +msgstr "متواصل" #: editor/animation_editor.cpp msgid "Discrete" -msgstr "" +msgstr "متقطع" #: editor/animation_editor.cpp msgid "Trigger" -msgstr "" +msgstr "Ù…ÙØ·Ù„Ù‚" #: editor/animation_editor.cpp msgid "Anim Add Key" -msgstr "" +msgstr "Ø¥Ø¶Ø§ÙØ© Ù…ÙØªØ§Ø ØØ±ÙƒØ©" #: editor/animation_editor.cpp msgid "Anim Move Keys" -msgstr "" +msgstr "Ù…ÙØªØ§Ø ØØ±ÙƒØ©" #: editor/animation_editor.cpp msgid "Scale Selection" -msgstr "" +msgstr "تكبير Ø§Ù„Ù…ØØ¯Ø¯" #: editor/animation_editor.cpp msgid "Scale From Cursor" -msgstr "" +msgstr "تكبير من المؤشر" #: editor/animation_editor.cpp msgid "Goto Next Step" -msgstr "" +msgstr "إذهب إلي الخطوة التالية" #: editor/animation_editor.cpp msgid "Goto Prev Step" -msgstr "" +msgstr "إذهب إلي الخطوة السابقة" #: editor/animation_editor.cpp editor/plugins/curve_editor_plugin.cpp #: editor/property_editor.cpp msgid "Linear" -msgstr "" +msgstr "خطي" #: editor/animation_editor.cpp editor/plugins/theme_editor_plugin.cpp msgid "Constant" -msgstr "" +msgstr "ثابت" #: editor/animation_editor.cpp msgid "In" -msgstr "" +msgstr "داخل" #: editor/animation_editor.cpp msgid "Out" -msgstr "" +msgstr "خارج" #: editor/animation_editor.cpp msgid "In-Out" -msgstr "" +msgstr "داخل-خارج" #: editor/animation_editor.cpp msgid "Out-In" -msgstr "" +msgstr "خارج-داخل" #: editor/animation_editor.cpp msgid "Transitions" -msgstr "" +msgstr "تØÙˆÙ„ات" #: editor/animation_editor.cpp msgid "Optimize Animation" -msgstr "" +msgstr "ØªØØ³ÙŠÙ† Ø§Ù„ØØ±ÙƒØ©" #: editor/animation_editor.cpp msgid "Clean-Up Animation" -msgstr "" +msgstr "ØªÙ†Ø¸ÙŠÙ Ø§Ù„ØØ±ÙƒØ©" #: editor/animation_editor.cpp msgid "Create NEW track for %s and insert key?" -msgstr "" +msgstr "أنشئ مسار جديد لـ %s Ùˆ أدخل Ù…ÙØªØ§ØØŸ" #: editor/animation_editor.cpp msgid "Create %d NEW tracks and insert keys?" -msgstr "" +msgstr "أنشئ %d مسارات جديدة Ùˆ أدخل Ù…ÙØ§ØªÙŠØØŸ" #: editor/animation_editor.cpp editor/create_dialog.cpp -#: editor/editor_audio_buses.cpp +#: editor/editor_audio_buses.cpp editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp #: editor/plugins/mesh_instance_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp editor/project_manager.cpp #: editor/script_create_dialog.cpp msgid "Create" -msgstr "" +msgstr "أنشئ" #: editor/animation_editor.cpp msgid "Anim Create & Insert" -msgstr "" +msgstr "أنشي ØØ±ÙƒØ© وأدخلها" #: editor/animation_editor.cpp msgid "Anim Insert Track & Key" -msgstr "" +msgstr "أنشي مسار ØØ±ÙƒØ© Ùˆ Ù…ÙØªØ§Ø" #: editor/animation_editor.cpp msgid "Anim Insert Key" -msgstr "" +msgstr "Ø£Ø¶Ù Ù…ÙØªØ§Ø ØØ±ÙƒØ©" #: editor/animation_editor.cpp msgid "Change Anim Len" -msgstr "" +msgstr "تغيير خط Ø§Ù„ØØ±ÙƒØ©" #: editor/animation_editor.cpp msgid "Change Anim Loop" -msgstr "" +msgstr "تغيير تكرير Ø§Ù„ØØ±ÙƒØ©" #: editor/animation_editor.cpp msgid "Anim Create Typed Value Key" -msgstr "" +msgstr "أنشي Ù…ÙØªØ§Ø ØØ±ÙƒØ© ذا قيمة مكتوبة" #: editor/animation_editor.cpp msgid "Anim Insert" -msgstr "" +msgstr "إدخال ØØ±ÙƒØ©" #: editor/animation_editor.cpp msgid "Anim Scale Keys" -msgstr "" +msgstr "Ù…ÙØªØ§Ø تكبير ØØ±ÙƒØ©" #: editor/animation_editor.cpp msgid "Anim Add Call Track" -msgstr "" +msgstr "أض٠خانة مسار ØØ±ÙƒØ©" #: editor/animation_editor.cpp msgid "Animation zoom." -msgstr "" +msgstr "تكبير Ø§Ù„ØØ±ÙƒØ©." #: editor/animation_editor.cpp msgid "Length (s):" -msgstr "" +msgstr "الطول (ثانية):" #: editor/animation_editor.cpp msgid "Animation length (in seconds)." -msgstr "" +msgstr "طول الأنميشين (بالثواني)." #: editor/animation_editor.cpp msgid "Step (s):" -msgstr "" +msgstr "خطوة (ثانية):" #: editor/animation_editor.cpp msgid "Cursor step snap (in seconds)." -msgstr "" +msgstr "المؤشر خطوة خطوة (بالثواني)." #: editor/animation_editor.cpp msgid "Enable/Disable looping in animation." -msgstr "" +msgstr "تمكين/تعطيل التكرار ÙÙŠ Ø§Ù„ØØ±ÙƒØ©." #: editor/animation_editor.cpp msgid "Add new tracks." -msgstr "" +msgstr "أض٠مسارات جديدة." #: editor/animation_editor.cpp msgid "Move current track up." -msgstr "" +msgstr "ØªØØ±ÙŠÙƒ المسار Ø§Ù„ØØ§Ù„ÙŠ للأعلى." #: editor/animation_editor.cpp msgid "Move current track down." -msgstr "" +msgstr "ØªØØ±ÙŠÙƒ المسار Ø§Ù„ØØ§Ù„ÙŠ للاسÙÙ„." #: editor/animation_editor.cpp msgid "Remove selected track." -msgstr "" +msgstr "ازالة المسار Ø§Ù„Ù…ØØ¯Ø¯." #: editor/animation_editor.cpp msgid "Track tools" -msgstr "" +msgstr "أدوات المسار" #: editor/animation_editor.cpp msgid "Enable editing of individual keys by clicking them." -msgstr "" +msgstr "Ø§Ù„Ø³Ù…Ø§Ø Ø¨ØªØ¹Ø¯ÙŠÙ„ ازرار Ù…Ù†ÙØµÙ„Ø© بالضغط عليها." #: editor/animation_editor.cpp msgid "Anim. Optimizer" -msgstr "" +msgstr "Ù…ÙØØ³Ù† Ø§Ù„ØØ±ÙƒØ©" #: editor/animation_editor.cpp msgid "Max. Linear Error:" -msgstr "" +msgstr "أقصي أخطاء خطية:" #: editor/animation_editor.cpp msgid "Max. Angular Error:" -msgstr "" +msgstr "أقصي أخطاء زواية:" #: editor/animation_editor.cpp msgid "Max Optimizable Angle:" -msgstr "" +msgstr "أقصي زواية ØªØØ³ÙŠÙ†:" #: editor/animation_editor.cpp msgid "Optimize" -msgstr "" +msgstr "ØªØØ³ÙŠÙ†" #: editor/animation_editor.cpp msgid "Select an AnimationPlayer from the Scene Tree to edit animations." -msgstr "" +msgstr "خدد مشغل ØØ±ÙƒØ© من شجرة المشهد لكي تعدل Ø§Ù„ØØ±ÙƒØ©." #: editor/animation_editor.cpp msgid "Key" -msgstr "" +msgstr "Ù…ÙØªØ§Ø" #: editor/animation_editor.cpp msgid "Transition" -msgstr "" +msgstr "تØÙˆÙ„" #: editor/animation_editor.cpp msgid "Scale Ratio:" -msgstr "" +msgstr "نسبة التكبير:" #: editor/animation_editor.cpp msgid "Call Functions in Which Node?" -msgstr "" +msgstr "إستدعاء وظائ٠ÙÙŠ أي عقدة؟" #: editor/animation_editor.cpp msgid "Remove invalid keys" -msgstr "" +msgstr "Ø¥Ù…Ø³Ø Ø§Ù„Ù…ÙØ§ØªÙŠØ Ø§Ù„ÙØ§Ø³Ø¯Ø©" #: editor/animation_editor.cpp msgid "Remove unresolved and empty tracks" -msgstr "" +msgstr "Ø¥Ù…Ø³Ø Ø§Ù„Ù…Ø³Ø§Ø±Ø§Øª Ø§Ù„ÙØ§Ø±ØºØ© أو الغير Ù…ØÙ„ولة" #: editor/animation_editor.cpp msgid "Clean-up all animations" -msgstr "" +msgstr "تنظي٠جميع Ø§Ù„ØØ±ÙƒØ§Øª" #: editor/animation_editor.cpp msgid "Clean-Up Animation(s) (NO UNDO!)" -msgstr "" +msgstr "ØªÙ†Ø¸ÙŠÙ Ø§Ù„ØØ±ÙƒØ©(ات) (بلا عودة)" #: editor/animation_editor.cpp msgid "Clean-Up" -msgstr "" +msgstr "تنظيÙ" #: editor/array_property_edit.cpp msgid "Resize Array" -msgstr "" +msgstr "تغيير ØØ¬Ù… المصÙÙˆÙØ©" #: editor/array_property_edit.cpp msgid "Change Array Value Type" -msgstr "" +msgstr "تغيير نوع القيم ÙÙŠ المصÙÙˆÙØ©" #: editor/array_property_edit.cpp msgid "Change Array Value" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Free" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp -msgid "Version:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Contents:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "View Files" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_help.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp -msgid "Description:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -#: editor/project_manager.cpp -msgid "Install" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp -#: editor/connections_dialog.cpp editor/export_template_manager.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -#: editor/project_settings_editor.cpp editor/property_editor.cpp -#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Close" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve hostname:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Connection error, please try again." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't connect." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't connect to host:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response from host:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Request failed, return code:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Req. Failed." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Request failed, too many redirects" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Redirect Loop." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Bad download hash, assuming file has been tampered with." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Expected:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Got:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed sha256 hash check" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Asset Download Error:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -msgid "Success!" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Fetching:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Resolving.." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Error making request" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Idle" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Retry" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Download Error" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Download for this asset is already in progress!" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "first" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "prev" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "next" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "last" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "All" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/property_selector.cpp editor/quick_open.cpp -#: editor/settings_config_dialog.cpp -msgid "Search:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Search" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/project_manager.cpp -msgid "Import" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Plugins" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Sort:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Reverse" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Category:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Site:" -msgstr "الموقع:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Official" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -msgid "Community" -msgstr "مجتمع" - -#: editor/asset_library_editor_plugin.cpp -msgid "Testing" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Assets ZIP File" -msgstr "مل٠اصول مضغوطة" - -#: editor/call_dialog.cpp -msgid "Method List For '%s':" -msgstr "" - -#: editor/call_dialog.cpp modules/visual_script/visual_script_editor.cpp -msgid "Call" -msgstr "نداء" - -#: editor/call_dialog.cpp -msgid "Method List:" -msgstr "" - -#: editor/call_dialog.cpp -msgid "Arguments:" -msgstr "" - -#: editor/call_dialog.cpp -msgid "Return:" -msgstr "" +msgstr "تغيير قيمة ÙÙŠ المصÙÙˆÙØ©" #: editor/code_editor.cpp msgid "Go to Line" -msgstr "" +msgstr "إذهب إلي الخط" #: editor/code_editor.cpp msgid "Line Number:" -msgstr "" +msgstr "رقم الخط:" #: editor/code_editor.cpp msgid "No Matches" -msgstr "" +msgstr "لا مطابقة" #: editor/code_editor.cpp msgid "Replaced %d occurrence(s)." -msgstr "" +msgstr "Ø¥Ø³ØªØ¨ÙØ¯Ù„ %d ØØ§Ø¯Ø«Ø©(ØÙˆØ§Ø¯Ø«)." #: editor/code_editor.cpp msgid "Replace" -msgstr "" +msgstr "إستبدال" #: editor/code_editor.cpp msgid "Replace All" -msgstr "" +msgstr "إستبدال الكل" #: editor/code_editor.cpp msgid "Match Case" -msgstr "" +msgstr "قضية تشابه" #: editor/code_editor.cpp msgid "Whole Words" -msgstr "" +msgstr "كل الكلمات" #: editor/code_editor.cpp msgid "Selection Only" -msgstr "" +msgstr "Ø§Ù„Ù…ØØ¯Ø¯ Ùقط" + +#: editor/code_editor.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp +msgid "Search" +msgstr "Ø¨ØØ«" #: editor/code_editor.cpp editor/editor_help.cpp msgid "Find" -msgstr "" +msgstr "جد" #: editor/code_editor.cpp msgid "Next" -msgstr "" +msgstr "التالي" #: editor/code_editor.cpp msgid "Not found!" -msgstr "" +msgstr "لم يوجد!" #: editor/code_editor.cpp msgid "Replace By" -msgstr "" +msgstr "إستبدلت بـ" #: editor/code_editor.cpp msgid "Case Sensitive" -msgstr "" +msgstr "ØØ³Ø§Ø³Ø© Ù„ØØ§Ù„Ø© Ø§Ù„Ø£ØØ±Ù" #: editor/code_editor.cpp msgid "Backwards" -msgstr "" +msgstr "إلي الخلÙ" #: editor/code_editor.cpp msgid "Prompt On Replace" -msgstr "" +msgstr "تأكيد عند الإستبدال" #: editor/code_editor.cpp msgid "Skip" -msgstr "" +msgstr "تخطي" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom In" -msgstr "" +msgstr "تقريب" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom Out" -msgstr "" +msgstr "إبعاد" #: editor/code_editor.cpp msgid "Reset Zoom" -msgstr "" +msgstr "إرجاع التكبير" #: editor/code_editor.cpp editor/script_editor_debugger.cpp msgid "Line:" -msgstr "" +msgstr "الخط:" #: editor/code_editor.cpp msgid "Col:" -msgstr "" +msgstr "العمود:" #: editor/connections_dialog.cpp msgid "Method in target Node must be specified!" -msgstr "" +msgstr "الميثود ÙÙŠ العقدة الهد٠يجب أن ØªØØ¯Ø¯!" #: editor/connections_dialog.cpp msgid "" "Target method not found! Specify a valid method or attach a script to target " "Node." msgstr "" +"الميثود الهد٠لا يمكن إيجاده! ØØ¯Ø¯ ميثود ØµØ§Ù„Ø Ø£Ùˆ صل كود برمجي إلي العقدة " +"الهدÙ." #: editor/connections_dialog.cpp msgid "Connect To Node:" -msgstr "" +msgstr "صلها بالعقدة:" #: editor/connections_dialog.cpp editor/editor_autoload_settings.cpp #: editor/groups_editor.cpp editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp msgid "Add" -msgstr "" +msgstr "أضÙ" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/plugins/animation_tree_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp msgid "Remove" -msgstr "" +msgstr "إمسØ" #: editor/connections_dialog.cpp msgid "Add Extra Call Argument:" @@ -739,31 +495,45 @@ msgstr "" #: editor/connections_dialog.cpp msgid "Path to Node:" -msgstr "" +msgstr "مسار العقدة:" #: editor/connections_dialog.cpp msgid "Make Function" -msgstr "" +msgstr "إصنع دالة" #: editor/connections_dialog.cpp msgid "Deferred" -msgstr "" +msgstr "مؤجل" #: editor/connections_dialog.cpp msgid "Oneshot" -msgstr "" +msgstr "لقطة ÙˆØ§ØØ¯Ø©" + +#: editor/connections_dialog.cpp editor/dependency_editor.cpp +#: editor/export_template_manager.cpp +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Close" +msgstr "اغلاق" #: editor/connections_dialog.cpp msgid "Connect" -msgstr "" +msgstr "وصل" #: editor/connections_dialog.cpp msgid "Connect '%s' to '%s'" -msgstr "" +msgstr "وصل '%s' إلي '%s'" #: editor/connections_dialog.cpp msgid "Connecting Signal:" -msgstr "" +msgstr "يوصل الإشارة:" #: editor/connections_dialog.cpp msgid "Create Subscription" @@ -771,89 +541,110 @@ msgstr "عمل اشتراك" #: editor/connections_dialog.cpp msgid "Connect.." -msgstr "" +msgstr "يتصل..." #: editor/connections_dialog.cpp #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Disconnect" -msgstr "" +msgstr "قطع الاتصال" -#: editor/connections_dialog.cpp editor/node_dock.cpp +#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" -msgstr "" +msgstr "الإشارات" #: editor/create_dialog.cpp msgid "Create New" -msgstr "" +msgstr "إصنع جديد" #: editor/create_dialog.cpp editor/editor_file_dialog.cpp #: editor/filesystem_dock.cpp msgid "Favorites:" -msgstr "" +msgstr "Ø§Ù„Ù…ÙØ¶Ù„Ø©:" #: editor/create_dialog.cpp editor/editor_file_dialog.cpp msgid "Recent:" -msgstr "" +msgstr "Ø§Ù„ØØ§Ù„ÙŠ:" + +#: editor/create_dialog.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp +#: editor/quick_open.cpp editor/settings_config_dialog.cpp +msgid "Search:" +msgstr "Ø¨ØØ«:" #: editor/create_dialog.cpp editor/editor_help.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp #: editor/quick_open.cpp msgid "Matches:" -msgstr "" +msgstr "يطابق:" + +#: editor/create_dialog.cpp editor/editor_help.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp +#: editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "الوصÙ:" #: editor/dependency_editor.cpp msgid "Search Replacement For:" -msgstr "" +msgstr "Ø§Ù„Ø¨ØØ« عن بديل لـ:" #: editor/dependency_editor.cpp msgid "Dependencies For:" -msgstr "" +msgstr "تابعة لـ:" #: editor/dependency_editor.cpp msgid "" "Scene '%s' is currently being edited.\n" "Changes will not take effect unless reloaded." msgstr "" +"المشهد '%s' هو ØØ§Ù„ياً جاري تعديله.\n" +"التغييرات لن ØªØØµÙ„ ØØªÙŠ ÙŠØªÙ… إعادة التشغيل." #: editor/dependency_editor.cpp msgid "" "Resource '%s' is in use.\n" "Changes will take effect when reloaded." msgstr "" +"المورد '%s' قيد الإستخدام.\n" +"التغييرات ستظهر بعد إعادة التشغيل." #: editor/dependency_editor.cpp msgid "Dependencies" -msgstr "" +msgstr "التبعيات" #: editor/dependency_editor.cpp msgid "Resource" -msgstr "" +msgstr "مورد" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp #: editor/project_manager.cpp editor/project_settings_editor.cpp #: editor/script_create_dialog.cpp msgid "Path" -msgstr "" +msgstr "مسار" #: editor/dependency_editor.cpp msgid "Dependencies:" -msgstr "" +msgstr "التبعيات:" #: editor/dependency_editor.cpp msgid "Fix Broken" -msgstr "" +msgstr "Ø£ØµÙ„Ø Ø§Ù„Ù…Ø¹Ø·ÙˆØ¨" #: editor/dependency_editor.cpp msgid "Dependency Editor" -msgstr "" +msgstr "Ù…ØØ±Ø± التبعيات" #: editor/dependency_editor.cpp msgid "Search Replacement Resource:" -msgstr "" +msgstr "Ø§Ù„Ø¨ØØ« عن مورد بديل:" #: editor/dependency_editor.cpp msgid "Owners Of:" -msgstr "" +msgstr "ملاك:" + +#: editor/dependency_editor.cpp +msgid "Remove selected files from the project? (no undo)" +msgstr "Ø¥Ù…Ø³Ø Ø§Ù„Ù…Ù„ÙØ§Øª Ø§Ù„Ù…ØØ¯Ø¯Ø© من المشروع؟ (لا رجعة)" #: editor/dependency_editor.cpp msgid "" @@ -861,447 +652,477 @@ msgid "" "work.\n" "Remove them anyway? (no undo)" msgstr "" +"المل٠الذي ÙŠÙ…Ø³Ø Ù…Ø·Ù„ÙˆØ¨ من موارد أخري لكل تعمل جيداً.\n" +"Ø¥Ù…Ø³Ø Ø¹Ù„ÙŠ أية ØØ§Ù„ØŸ (لا رجعة)" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (no undo)" -msgstr "" +#, fuzzy +msgid "Cannot remove:\n" +msgstr "لا يمكن الØÙ„." #: editor/dependency_editor.cpp msgid "Error loading:" -msgstr "" +msgstr "خطآ ÙÙŠ التØÙ…يل:" #: editor/dependency_editor.cpp msgid "Scene failed to load due to missing dependencies:" -msgstr "" +msgstr "ÙØ´Ù„ ÙÙŠ تØÙ…يل المشهد بسبب وجود Ù…Ù„ÙØ§Øª Ù…Ùقودة يعتمد المشهد عليها:" #: editor/dependency_editor.cpp editor/editor_node.cpp msgid "Open Anyway" -msgstr "" +msgstr "Ø¥ÙØªØ علي أية ØØ§Ù„" #: editor/dependency_editor.cpp msgid "Which action should be taken?" -msgstr "" +msgstr "ماذا يجب أن ÙŠÙÙØ¹Ù„ØŸ" #: editor/dependency_editor.cpp msgid "Fix Dependencies" -msgstr "" +msgstr "Ø£ØµÙ„Ø Ø§Ù„ØªØ¨Ø¹ÙŠØ§Øª" #: editor/dependency_editor.cpp msgid "Errors loading!" -msgstr "" +msgstr "اخطاء ÙÙŠ التØÙ…يل!" #: editor/dependency_editor.cpp msgid "Permanently delete %d item(s)? (No undo!)" -msgstr "" +msgstr "Ø¥Ù…Ø³Ø Ù†Ù‡Ø§Ø¦ÙŠØ§ %d عنصر(عناصر)ØŸ (بلا رجعة!)" #: editor/dependency_editor.cpp msgid "Owns" -msgstr "" +msgstr "يملك" #: editor/dependency_editor.cpp msgid "Resources Without Explicit Ownership:" -msgstr "" +msgstr "موارد من غير مالك صريØ:" #: editor/dependency_editor.cpp editor/editor_node.cpp msgid "Orphan Resource Explorer" -msgstr "" +msgstr "Ù…ØªØµÙØ الموارد Ø£ÙˆØ±ÙØ§Ù†" #: editor/dependency_editor.cpp msgid "Delete selected files?" -msgstr "" +msgstr "Ø¥Ù…Ø³Ø Ø§Ù„Ù…Ù„ÙØ§Øª Ø§Ù„Ù…ØØ¯Ø¯Ø©ØŸ" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_node.cpp editor/filesystem_dock.cpp #: editor/plugins/item_list_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" -msgstr "" +msgstr "مسØ" #: editor/editor_about.cpp msgid "Thanks from the Godot community!" -msgstr "" +msgstr "شكراً من مجتمع Godot!" #: editor/editor_about.cpp msgid "Thanks!" -msgstr "" +msgstr "شكراً!" #: editor/editor_about.cpp msgid "Godot Engine contributors" -msgstr "" +msgstr "المسهامين ÙÙŠ Ù…ØØ±Ùƒ Godot" + +#: editor/editor_about.cpp +msgid "Project Founders" +msgstr "مؤسسون المشروع" + +#: editor/editor_about.cpp +msgid "Lead Developer" +msgstr "قائد المطوريين" + +#: editor/editor_about.cpp editor/project_manager.cpp +msgid "Project Manager" +msgstr "مدير المشروع" + +#: editor/editor_about.cpp +msgid "Developers" +msgstr "المطورون" #: editor/editor_about.cpp msgid "Authors" +msgstr "المالكون" + +#: editor/editor_about.cpp +msgid "Platinum Sponsors" msgstr "" #: editor/editor_about.cpp -msgid "Project Founders" +msgid "Gold Sponsors" msgstr "" #: editor/editor_about.cpp -msgid "Lead Developer" +msgid "Mini Sponsors" msgstr "" -#: editor/editor_about.cpp editor/project_manager.cpp -msgid "Project Manager" +#: editor/editor_about.cpp +msgid "Gold Donors" msgstr "" #: editor/editor_about.cpp -msgid "Developers" +msgid "Silver Donors" msgstr "" #: editor/editor_about.cpp -msgid "License" +msgid "Bronze Donors" msgstr "" #: editor/editor_about.cpp -msgid "Thirdparty License" +msgid "Donors" msgstr "" #: editor/editor_about.cpp +msgid "License" +msgstr "الترخيص" + +#: editor/editor_about.cpp +msgid "Thirdparty License" +msgstr "ترخيص الطر٠الثالث" + +#: editor/editor_about.cpp msgid "" "Godot Engine relies on a number of thirdparty free and open source " "libraries, all compatible with the terms of its MIT license. The following " "is an exhaustive list of all such thirdparty components with their " "respective copyright statements and license terms." msgstr "" +"Ù…ØØ±Ùƒ \"Godot\" يعتمد على عدد من المكتبات Ùˆ المكونات البرمجية لملاك اخرين Ùˆ " +"لكنها مجانية Ùˆ Ù…ÙØªÙˆØØ© المصدر، Ùˆ كلها متÙقة مع شروط الاستخدام لرخصة \"MIT\". " +"ÙÙŠ ما يلي قائمة تØÙˆÙŠ Ø¬Ù…ÙŠØ¹ هذه المكونات Ø§Ø¶Ø§ÙØ© الى ØÙ‚وق النشر Ùˆ شروط الاستخدام " +"الخاصة بها." #: editor/editor_about.cpp msgid "All Components" -msgstr "" +msgstr "كل المكونات" #: editor/editor_about.cpp msgid "Components" -msgstr "" +msgstr "مكونات" #: editor/editor_about.cpp msgid "Licenses" -msgstr "" +msgstr "تراخيص" #: editor/editor_asset_installer.cpp editor/project_manager.cpp msgid "Error opening package file, not in zip format." -msgstr "" +msgstr "خطأ Ø¹Ù†Ø¯ÙØªØ Ù…Ù„Ù Ø§Ù„ØØ²Ù…Ø© بسبب أن المل٠ليس ÙÙŠ صيغة \"ZIP\"." #: editor/editor_asset_installer.cpp msgid "Uncompressing Assets" -msgstr "" +msgstr "ÙŠÙكك الضغط عن الأصول" #: editor/editor_asset_installer.cpp editor/project_manager.cpp msgid "Package Installed Successfully!" -msgstr "" +msgstr "Ø§Ù„ØØ²Ù…Ø© تم تثبيتها بنجاØ!" + +#: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Success!" +msgstr "تم بنجاØ!" + +#: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp +msgid "Install" +msgstr "تثبيت" #: editor/editor_asset_installer.cpp msgid "Package Installer" -msgstr "" +msgstr "مثبت Ø§Ù„ØØ²Ù…" #: editor/editor_audio_buses.cpp msgid "Speakers" -msgstr "" +msgstr "مكبرات الصوت" #: editor/editor_audio_buses.cpp msgid "Add Effect" -msgstr "" +msgstr "أض٠تأثير" #: editor/editor_audio_buses.cpp msgid "Rename Audio Bus" -msgstr "" +msgstr "إعادة تسمية بيوس الصوت" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Solo" -msgstr "" +msgstr "تبديل بيوس الصوت إلي ÙØ±Ø¯ÙŠ" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Mute" -msgstr "" +msgstr "تبديل بيوس الصوت إلي صامت" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Bypass Effects" -msgstr "" +msgstr "تبديل بيوس الصوت إلي موثرات التبديل" #: editor/editor_audio_buses.cpp msgid "Select Audio Bus Send" -msgstr "" +msgstr "ØØ¯Ø¯ بيوس الصوت للإرسال" #: editor/editor_audio_buses.cpp msgid "Add Audio Bus Effect" -msgstr "" +msgstr "أض٠موثرات إلي بيوس الصوت" #: editor/editor_audio_buses.cpp msgid "Move Bus Effect" -msgstr "" +msgstr "ØØ±Ùƒ مؤثر البيوس" #: editor/editor_audio_buses.cpp msgid "Delete Bus Effect" -msgstr "" +msgstr "Ù…Ø³Ø ØªØ£Ø«ÙŠØ± البيوس" #: editor/editor_audio_buses.cpp msgid "Audio Bus, Drag and Drop to rearrange." -msgstr "" - -#: editor/editor_audio_buses.cpp -msgid "Bus options" -msgstr "" +msgstr "بيوس الصوت، Ø³ØØ¨ وإسقاط لإعادة الترتيب." #: editor/editor_audio_buses.cpp msgid "Solo" -msgstr "" +msgstr "ÙØ±Ø¯ÙŠ" #: editor/editor_audio_buses.cpp msgid "Mute" -msgstr "" +msgstr "صامت" #: editor/editor_audio_buses.cpp msgid "Bypass" -msgstr "" +msgstr "تخطي" + +#: editor/editor_audio_buses.cpp +msgid "Bus options" +msgstr "إعدادات البيوس" #: editor/editor_audio_buses.cpp editor/plugins/tile_map_editor_plugin.cpp #: editor/scene_tree_dock.cpp msgid "Duplicate" -msgstr "" +msgstr "تكرير" + +#: editor/editor_audio_buses.cpp +#, fuzzy +msgid "Reset Volume" +msgstr "إرجاع التكبير" #: editor/editor_audio_buses.cpp msgid "Delete Effect" -msgstr "" +msgstr "Ø¥Ù…Ø³Ø Ø§Ù„ØªØ£Ø«ÙŠØ±" #: editor/editor_audio_buses.cpp msgid "Add Audio Bus" -msgstr "" +msgstr "أض٠بيوس الصوت" #: editor/editor_audio_buses.cpp msgid "Master bus can't be deleted!" -msgstr "" +msgstr "البيوس الأساسي لا يمكن Ù…Ø³ØØ©!" #: editor/editor_audio_buses.cpp msgid "Delete Audio Bus" -msgstr "" +msgstr "Ø¥Ù…Ø³Ø Ø¨ÙŠÙˆØ³ الصوت" #: editor/editor_audio_buses.cpp msgid "Duplicate Audio Bus" -msgstr "" +msgstr "تكرير بيوس الصوت" #: editor/editor_audio_buses.cpp #, fuzzy +msgid "Reset Bus Volume" +msgstr "إرجاع التكبير" + +#: editor/editor_audio_buses.cpp msgid "Move Audio Bus" -msgstr "عملية ØªØØ±ÙŠÙƒ" +msgstr "ØªØØ±ÙŠÙƒ بيوس الصوت" #: editor/editor_audio_buses.cpp msgid "Save Audio Bus Layout As.." -msgstr "" +msgstr "Ø¥ØÙظ نسق بيوس الصوت كـ..." #: editor/editor_audio_buses.cpp msgid "Location for New Layout.." -msgstr "" +msgstr "المكان للنسق الجديد..." #: editor/editor_audio_buses.cpp msgid "Open Audio Bus Layout" -msgstr "" +msgstr "Ø¥ÙØªØ نسق بيوس الصوت" #: editor/editor_audio_buses.cpp msgid "There is no 'res://default_bus_layout.tres' file." -msgstr "" +msgstr "ليس هناك مل٠'res://default_bus_layout.tres'." #: editor/editor_audio_buses.cpp msgid "Invalid file, not an audio bus layout." -msgstr "" +msgstr "مل٠خطأ، ليس مل٠نسق بيوس الصوت." #: editor/editor_audio_buses.cpp msgid "Add Bus" -msgstr "" +msgstr "أض٠بيوس" #: editor/editor_audio_buses.cpp msgid "Create a new Bus Layout." -msgstr "" +msgstr "إصنع نسق بيوس جديد." -#: editor/editor_audio_buses.cpp editor/script_create_dialog.cpp +#: editor/editor_audio_buses.cpp editor/property_editor.cpp +#: editor/script_create_dialog.cpp msgid "Load" -msgstr "" +msgstr "تØÙ…يل" #: editor/editor_audio_buses.cpp msgid "Load an existing Bus Layout." -msgstr "" +msgstr "تØÙ…يل نسق بيوس موجود مسبقاً." #: editor/editor_audio_buses.cpp #: editor/plugins/animation_player_editor_plugin.cpp msgid "Save As" -msgstr "" +msgstr "ØÙظ بأسم" #: editor/editor_audio_buses.cpp msgid "Save this Bus Layout to a file." -msgstr "" +msgstr "Ø¥ØÙظ نسق البيوس هذا إلي ملÙ." #: editor/editor_audio_buses.cpp editor/import_dock.cpp msgid "Load Default" -msgstr "" +msgstr "تØÙ…يل Ø§Ù„Ø¥ÙØªØ±Ø§Ø¶ÙŠ" #: editor/editor_audio_buses.cpp msgid "Load the default Bus Layout." -msgstr "" +msgstr "تØÙ…يل نسق البيوس Ø§Ù„Ø¥ÙØªØ±Ø§Ø¶ÙŠ." #: editor/editor_autoload_settings.cpp msgid "Invalid name." -msgstr "" +msgstr "اسم غير صالØ." #: editor/editor_autoload_settings.cpp msgid "Valid characters:" -msgstr "" +msgstr "Ø§Ù„Ø£ØØ±Ù Ø§Ù„ØµØ§Ù„ØØ©:" #: editor/editor_autoload_settings.cpp msgid "Invalid name. Must not collide with an existing engine class name." -msgstr "" +msgstr "إسم غير ØµØ§Ù„ØØŒ يجب أن لا يتصادم مع أسم ÙØµÙ„ خاص Ø¨Ø§Ù„Ù…ØØ±Ùƒ." #: editor/editor_autoload_settings.cpp msgid "Invalid name. Must not collide with an existing buit-in type name." -msgstr "" +msgstr "إسم غير ØµØ§Ù„ØØŒ يجب أن لا يتصادم مع الأسماء المبنية تلقائياً الموجودة." #: editor/editor_autoload_settings.cpp msgid "Invalid name. Must not collide with an existing global constant name." -msgstr "" +msgstr "إسم غير ØµØ§Ù„ØØŒ يجب أن لا يتصادم مع أسم ثابت عالمياص موجود Ø¨Ø§Ù„ÙØ¹Ù„." #: editor/editor_autoload_settings.cpp msgid "Invalid Path." -msgstr "" +msgstr "مسار غير صالØ." #: editor/editor_autoload_settings.cpp msgid "File does not exist." -msgstr "" +msgstr "المل٠غير موجود." #: editor/editor_autoload_settings.cpp msgid "Not in resource path." -msgstr "" +msgstr "ليس ÙÙŠ مسار الموارد." #: editor/editor_autoload_settings.cpp msgid "Add AutoLoad" -msgstr "" +msgstr "Ø¥Ø¶Ø§ÙØ© للتØÙ…يل التلقائي" #: editor/editor_autoload_settings.cpp msgid "Autoload '%s' already exists!" -msgstr "" +msgstr "التØÙ…يل التلقائي '%s' موجود اصلا!" #: editor/editor_autoload_settings.cpp msgid "Rename Autoload" -msgstr "" +msgstr "اعادة تسمية التØÙ…يل التلقائي" #: editor/editor_autoload_settings.cpp msgid "Toggle AutoLoad Globals" -msgstr "" +msgstr "تبديل التØÙ…يل التلقائي العام" #: editor/editor_autoload_settings.cpp msgid "Move Autoload" -msgstr "" +msgstr "نقل التØÙ…يل التلقائي" #: editor/editor_autoload_settings.cpp msgid "Remove Autoload" -msgstr "" +msgstr "ازالة التØÙ…يل التلقائي" #: editor/editor_autoload_settings.cpp msgid "Enable" -msgstr "" +msgstr "تمكين" #: editor/editor_autoload_settings.cpp msgid "Rearrange Autoloads" -msgstr "" +msgstr "اعادة ترتيب التØÙ…يلات التلقائية" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp scene/gui/file_dialog.cpp +#: scene/gui/file_dialog.cpp msgid "Path:" -msgstr "" +msgstr "المسار:" #: editor/editor_autoload_settings.cpp msgid "Node Name:" -msgstr "" +msgstr "إسم العقدة:" -#: editor/editor_autoload_settings.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp editor/project_manager.cpp +#: editor/editor_autoload_settings.cpp editor/project_manager.cpp msgid "Name" -msgstr "" +msgstr "الأسم" #: editor/editor_autoload_settings.cpp msgid "Singleton" -msgstr "" +msgstr "Ø§Ù„ÙØ±Ø¯ÙŠØ©" #: editor/editor_autoload_settings.cpp msgid "List:" -msgstr "" +msgstr "القائمة:" #: editor/editor_data.cpp msgid "Updating Scene" -msgstr "" +msgstr "ÙŠÙØØ¯Ø« المشهد" #: editor/editor_data.cpp msgid "Storing local changes.." -msgstr "" +msgstr "جاري تخزين التعديلات المØÙ„ية.." #: editor/editor_data.cpp msgid "Updating scene.." -msgstr "" +msgstr "ÙŠÙØØ¯Ø« المشهد..." #: editor/editor_dir_dialog.cpp msgid "Please select a base directory first" -msgstr "" +msgstr "من ÙØ¶Ù„Ùƒ ØØ¯Ø¯ الوجهة الأساسية أولاً" #: editor/editor_dir_dialog.cpp msgid "Choose a Directory" -msgstr "" +msgstr "ØØ¯Ø¯ الوجهة" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Create Folder" -msgstr "" +msgstr "أنشئ مجلد" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: editor/editor_plugin_settings.cpp editor/plugins/theme_editor_plugin.cpp -#: editor/project_export.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp +#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp +#: scene/gui/file_dialog.cpp msgid "Name:" -msgstr "" +msgstr "الأسم:" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Could not create folder." -msgstr "" +msgstr "لا يمكن إنشاء المجلد." #: editor/editor_dir_dialog.cpp msgid "Choose" -msgstr "" +msgstr "إختر" #: editor/editor_export.cpp msgid "Storing File:" -msgstr "" +msgstr "تخزين الملÙ:" #: editor/editor_export.cpp msgid "Packing" -msgstr "" +msgstr "ÙŠÙŽØØ²Ù…\"ينتج المل٠المضغوط\"" #: editor/editor_export.cpp platform/javascript/export/export.cpp msgid "Template file not found:\n" -msgstr "" - -#: editor/editor_export.cpp -msgid "Added:" -msgstr "" - -#: editor/editor_export.cpp -msgid "Removed:" -msgstr "" - -#: editor/editor_export.cpp -msgid "Error saving atlas:" -msgstr "" - -#: editor/editor_export.cpp -msgid "Could not save atlas subtexture:" -msgstr "" - -#: editor/editor_export.cpp -msgid "Exporting for %s" -msgstr "" - -#: editor/editor_export.cpp -msgid "Setting Up.." -msgstr "" +msgstr "مل٠النموذج غير موجود:\n" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" -msgstr "" +msgstr "المل٠موجود، إستبدال؟" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "All Recognized" @@ -1309,305 +1130,411 @@ msgstr "جميع الأنواع المعتمدة" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "All Files (*)" -msgstr "" +msgstr "كل Ø§Ù„Ù…Ù„ÙØ§Øª (*)" #: editor/editor_file_dialog.cpp editor/editor_help.cpp editor/editor_node.cpp #: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp #: editor/property_selector.cpp editor/quick_open.cpp scene/gui/file_dialog.cpp msgid "Open" -msgstr "" +msgstr "Ø¥ÙØªØ" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Open a File" -msgstr "" +msgstr "Ø¥ÙØªØ ملÙ" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Open File(s)" -msgstr "" +msgstr "Ø¥ÙØªØ ملÙ(ات)" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Open a Directory" -msgstr "" +msgstr "Ø¥ÙØªØ وجهة" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Open a File or Directory" -msgstr "" +msgstr "Ø¥ÙØªØ مل٠أو وجهة" #: editor/editor_file_dialog.cpp editor/editor_node.cpp #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp msgid "Save" -msgstr "" +msgstr "ØÙظ" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Save a File" -msgstr "" +msgstr "ØÙظ ملÙ" #: editor/editor_file_dialog.cpp msgid "Go Back" -msgstr "" +msgstr "إرجع للخلÙ" #: editor/editor_file_dialog.cpp msgid "Go Forward" -msgstr "" +msgstr "إذهب للأمام" #: editor/editor_file_dialog.cpp msgid "Go Up" -msgstr "" +msgstr "إذهب للأعلي" #: editor/editor_file_dialog.cpp msgid "Refresh" -msgstr "" +msgstr "ØªØØ¯ÙŠØ«" #: editor/editor_file_dialog.cpp msgid "Toggle Hidden Files" -msgstr "" +msgstr "أظهر Ø§Ù„Ù…Ù„ÙØ§Øª المخÙية" #: editor/editor_file_dialog.cpp msgid "Toggle Favorite" -msgstr "" +msgstr "أظهر المÙÙØ¶Ù„Ø©" #: editor/editor_file_dialog.cpp msgid "Toggle Mode" -msgstr "" +msgstr "أظهر المود" #: editor/editor_file_dialog.cpp msgid "Focus Path" -msgstr "" +msgstr "مسار التركيز" #: editor/editor_file_dialog.cpp msgid "Move Favorite Up" -msgstr "" +msgstr "ØØ±Ùƒ المÙÙØ¶Ù„Ø© للأعلي" #: editor/editor_file_dialog.cpp msgid "Move Favorite Down" -msgstr "" +msgstr "ØØ±Ùƒ المÙÙØ¶Ù„Ø© للأسÙÙ„" + +#: editor/editor_file_dialog.cpp +#, fuzzy +msgid "Go to parent folder" +msgstr "لا يمكن إنشاء المجلد." #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Directories & Files:" -msgstr "" +msgstr "الوجهات ÙˆØ§Ù„Ù…Ù„ÙØ§Øª:" #: editor/editor_file_dialog.cpp msgid "Preview:" -msgstr "" +msgstr "إستعراض:" #: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp #: scene/gui/file_dialog.cpp msgid "File:" -msgstr "" +msgstr "الملÙ:" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Filter:" -msgstr "" +msgstr "Ø§Ù„Ù…ÙØµÙÙŠ:" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Must use a valid extension." -msgstr "" +msgstr "يجب أن يستخدم صيغة صØÙŠØØ©." #: editor/editor_file_system.cpp msgid "ScanSources" -msgstr "" +msgstr "ÙØØµ المصادر" #: editor/editor_file_system.cpp msgid "(Re)Importing Assets" -msgstr "" +msgstr "إعادة إستيراد الأصول" #: editor/editor_help.cpp editor/editor_node.cpp #: editor/plugins/script_editor_plugin.cpp msgid "Search Help" -msgstr "" +msgstr "Ø¥Ø¨ØØ« ÙÙŠ المساعدة" #: editor/editor_help.cpp msgid "Class List:" -msgstr "" +msgstr "قائمة Ø§Ù„ÙØµÙˆÙ„:" #: editor/editor_help.cpp msgid "Search Classes" +msgstr "Ø¥Ø¨ØØ« ÙÙŠ Ø§Ù„ÙØµÙˆÙ„" + +#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +msgid "Top" msgstr "" #: editor/editor_help.cpp editor/property_editor.cpp msgid "Class:" -msgstr "" +msgstr "Ø§Ù„ÙØµÙ„:" #: editor/editor_help.cpp editor/scene_tree_editor.cpp msgid "Inherits:" -msgstr "" +msgstr "يرث:" #: editor/editor_help.cpp msgid "Inherited by:" -msgstr "" +msgstr "مورث بواسطة:" #: editor/editor_help.cpp msgid "Brief Description:" -msgstr "" +msgstr "وص٠مختصر:" + +#: editor/editor_help.cpp +#, fuzzy +msgid "Members" +msgstr "الأعضاء:" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Members:" -msgstr "" +msgstr "الأعضاء:" + +#: editor/editor_help.cpp +#, fuzzy +msgid "Public Methods" +msgstr "الطرق العامة:" #: editor/editor_help.cpp msgid "Public Methods:" -msgstr "" +msgstr "الطرق العامة:" + +#: editor/editor_help.cpp +#, fuzzy +msgid "GUI Theme Items" +msgstr "عناصر ثيم واجهة المستخدم:" #: editor/editor_help.cpp msgid "GUI Theme Items:" -msgstr "" +msgstr "عناصر ثيم واجهة المستخدم:" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Signals:" -msgstr "" +msgstr "الإشارات:" + +#: editor/editor_help.cpp +#, fuzzy +msgid "Enumerations" +msgstr "التعدادات:" #: editor/editor_help.cpp msgid "Enumerations:" -msgstr "" +msgstr "التعدادات:" #: editor/editor_help.cpp msgid "enum " -msgstr "" +msgstr "التعداد " + +#: editor/editor_help.cpp +#, fuzzy +msgid "Constants" +msgstr "الثوابت:" #: editor/editor_help.cpp msgid "Constants:" -msgstr "" +msgstr "الثوابت:" #: editor/editor_help.cpp #, fuzzy +msgid "Description" +msgstr "الوصÙ:" + +#: editor/editor_help.cpp +msgid "Properties" +msgstr "" + +#: editor/editor_help.cpp msgid "Property Description:" -msgstr "عمل اشتراك" +msgstr "وص٠الملكية:" + +#: editor/editor_help.cpp +msgid "" +"There is currently no description for this property. Please help us by " +"[color=$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp +#, fuzzy +msgid "Methods" +msgstr "قائمة الطرق:" #: editor/editor_help.cpp msgid "Method Description:" +msgstr "وص٠الطريقة:" + +#: editor/editor_help.cpp +msgid "" +"There is currently no description for this method. Please help us by [color=" +"$color][url=$url]contributing one[/url][/color]!" msgstr "" #: editor/editor_help.cpp msgid "Search Text" -msgstr "" +msgstr "Ø¥Ø¨ØØ« عن كتابة" #: editor/editor_log.cpp msgid "Output:" -msgstr "" +msgstr "الخرج:" #: editor/editor_log.cpp editor/plugins/animation_tree_editor_plugin.cpp -#: editor/plugins/rich_text_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_editor_debugger.cpp scene/gui/line_edit.cpp -#: scene/gui/text_edit.cpp +#: editor/property_editor.cpp editor/script_editor_debugger.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Clear" -msgstr "" +msgstr "خالي" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Error saving resource!" -msgstr "" +msgstr "خطأ ÙÙŠ ØÙظ المورد!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Save Resource As.." -msgstr "" +msgstr "ØÙظ المورد باسم..." -#: editor/editor_node.cpp editor/export_template_manager.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "I see.." -msgstr "" +msgstr "أنا أري.." #: editor/editor_node.cpp msgid "Can't open file for writing:" -msgstr "" +msgstr "لا يمكن ÙØªØ المل٠للكتابة:" #: editor/editor_node.cpp msgid "Requested file format unknown:" -msgstr "" +msgstr "صيغة المل٠المطلوب غير Ù…Ø¹Ø±ÙˆÙØ©:" #: editor/editor_node.cpp msgid "Error while saving." +msgstr "خطأ خلال الØÙظ." + +#: editor/editor_node.cpp +#, fuzzy +msgid "Can't open '%s'." +msgstr "لا يمكن الØÙ„." + +#: editor/editor_node.cpp +#, fuzzy +msgid "Error while parsing '%s'." +msgstr "خطأ خلال الØÙظ." + +#: editor/editor_node.cpp +msgid "Unexpected end of file '%s'." msgstr "" #: editor/editor_node.cpp -msgid "Saving Scene" +msgid "Missing '%s' or its dependencies." msgstr "" #: editor/editor_node.cpp +#, fuzzy +msgid "Error while loading '%s'." +msgstr "خطأ خلال الØÙظ." + +#: editor/editor_node.cpp +msgid "Saving Scene" +msgstr "ØÙظ المشهد" + +#: editor/editor_node.cpp msgid "Analyzing" -msgstr "" +msgstr "ÙŠØÙ„Ù„" #: editor/editor_node.cpp msgid "Creating Thumbnail" -msgstr "" +msgstr "ينشئ الصورة المصغرة" #: editor/editor_node.cpp msgid "This operation can't be done without a tree root." -msgstr "" +msgstr "هذه العملية لا يمكنها الإكتمال من غير جزر الشجرة." #: editor/editor_node.cpp msgid "" "Couldn't save scene. Likely dependencies (instances) couldn't be satisfied." -msgstr "" +msgstr "لا يمكن ØÙظ المشهد. علي ما يبدو التبعيات (الأمثلة) لا يمكن ملئها." #: editor/editor_node.cpp msgid "Failed to load resource." -msgstr "" +msgstr "ÙØ´Ù„ تØÙ…يل المورد." #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" -msgstr "" +msgstr "لا يمكن تØÙ…يل مكتبة الميش من أجل الدمج!" #: editor/editor_node.cpp msgid "Error saving MeshLibrary!" -msgstr "" +msgstr "خطأ ÙÙŠ ØÙظ مكتبة الميش!" #: editor/editor_node.cpp msgid "Can't load TileSet for merging!" -msgstr "" +msgstr "لا يمكن تØÙ…يل مجموعة البلاط من أجل الدمج!" #: editor/editor_node.cpp msgid "Error saving TileSet!" -msgstr "" +msgstr "خطأ ÙÙŠ ØÙظ مجموعة البلاط!" #: editor/editor_node.cpp msgid "Error trying to save layout!" -msgstr "" +msgstr "خطآ ÙÙŠ Ù…ØØ§ÙˆÙ„Ø© ØÙظ النسق!" #: editor/editor_node.cpp msgid "Default editor layout overridden." -msgstr "" +msgstr "تخطي نسق Ø§Ù„Ù…ÙØØ±Ø± Ø§Ù„Ø¥ÙØªØ±Ø§Ø¶ÙŠ." #: editor/editor_node.cpp msgid "Layout name not found!" -msgstr "" +msgstr "إسم النسق غير موجود!" #: editor/editor_node.cpp msgid "Restored default layout to base settings." +msgstr "إسترجاع النسق Ø§Ù„Ø¥ÙØªØ±Ø§Ø¶ÙŠ Ø¥Ù„ÙŠ الإعدادات الأساسية." + +#: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was imported, so it's not editable.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." msgstr "" #: editor/editor_node.cpp -msgid "Copy Params" +msgid "" +"This resource belongs to a scene that was instanced or inherited.\n" +"Changes to it will not be kept when saving the current scene." msgstr "" #: editor/editor_node.cpp -msgid "Paste Params" +msgid "" +"This resource was imported, so it's not editable. Change its settings in the " +"import panel and then re-import." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This scene was imported, so changes to it will not be kept.\n" +"Instancing it or inheriting will allow making changes to it.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." msgstr "" +#: editor/editor_node.cpp +msgid "Copy Params" +msgstr "إنسخ Ø§Ù„Ù…ÙØ¹Ø§Ù…Ù„" + +#: editor/editor_node.cpp +msgid "Paste Params" +msgstr "لصق Ø§Ù„Ù…ÙØ¹Ø§Ù…Ù„" + #: editor/editor_node.cpp editor/plugins/resource_preloader_editor_plugin.cpp msgid "Paste Resource" -msgstr "" +msgstr "لصق الموارد" #: editor/editor_node.cpp msgid "Copy Resource" -msgstr "" +msgstr "نسخ الموارد" #: editor/editor_node.cpp msgid "Make Built-In" -msgstr "" +msgstr "إجعله Ù…ÙØ¯Ù…ج" #: editor/editor_node.cpp msgid "Make Sub-Resources Unique" -msgstr "" +msgstr "إجعل الموارد الجانبية مميزة" #: editor/editor_node.cpp msgid "Open in Help" -msgstr "" +msgstr "Ø¥ÙØªØ ÙÙŠ المساعدة" #: editor/editor_node.cpp msgid "There is no defined scene to run." -msgstr "" +msgstr "ليس هناك مشهد Ù…ØØ¯Ø¯ ليتم تشغيله." #: editor/editor_node.cpp msgid "" @@ -1615,6 +1542,8 @@ msgid "" "You can change it later in \"Project Settings\" under the 'application' " "category." msgstr "" +"لا مشهد أساسي تم ØªØØ¯ÙŠØ¯Ù‡ØŒ ØØ¯Ø¯ ÙˆØ§ØØ¯ØŸ\n" +"يمكنك تغييره لاØÙ‚اً ÙÙŠ \"إعدادات المشروع\" ØªØØª قسم 'التطبيق'." #: editor/editor_node.cpp msgid "" @@ -1622,6 +1551,8 @@ msgid "" "You can change it later in \"Project Settings\" under the 'application' " "category." msgstr "" +"المشهد Ø§Ù„Ù…ÙØØ¯Ø¯ '%s' غير موجود، ØØ¯Ø¯ مشهد ØµØ§Ù„ØØŸ\n" +"يمكنك تغييره لاØÙ‚اً ÙÙŠ \"إعدادات المشروع\" ØªØØª قسم 'التطبيق'." #: editor/editor_node.cpp msgid "" @@ -1632,7 +1563,7 @@ msgstr "" #: editor/editor_node.cpp msgid "Current scene was never saved, please save it prior to running." -msgstr "" +msgstr "المشهد Ø§Ù„ØØ§Ù„ÙŠ لم يتم ØÙظه. الرجاء ØÙظ المشهد قبل تشغيله Ùˆ اختباره." #: editor/editor_node.cpp msgid "Could not start subprocess!" @@ -1656,15 +1587,15 @@ msgstr "" #: editor/editor_node.cpp msgid "Save & Close" -msgstr "" +msgstr "ØÙظ Ùˆ اغلاق" #: editor/editor_node.cpp msgid "Save changes to '%s' before closing?" -msgstr "" +msgstr "هل تريد ØÙظ التغييرات Ù„'%s' قبل الاغلاق؟" #: editor/editor_node.cpp msgid "Save Scene As.." -msgstr "" +msgstr "ØÙظ المشهد Ùƒ.." #: editor/editor_node.cpp msgid "No" @@ -1676,7 +1607,7 @@ msgstr "" #: editor/editor_node.cpp msgid "This scene has never been saved. Save before running?" -msgstr "" +msgstr "هذا المشهد لم يتم ØÙظه. هل تود ØÙظه قبل تشغيله؟" #: editor/editor_node.cpp editor/scene_tree_dock.cpp msgid "This operation can't be done without a scene." @@ -1696,11 +1627,11 @@ msgstr "" #: editor/editor_node.cpp msgid "Current scene not saved. Open anyway?" -msgstr "" +msgstr "لم يتم ØÙظ المشهد Ø§Ù„ØØ§Ù„ÙŠ. استمر Ø¨Ø§Ù„ÙØªØ على اية ØØ§Ù„ØŸ" #: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." -msgstr "" +msgstr "لا يمكن اعادة تØÙ…يل مشهد لم يتم ØÙظه من قبل." #: editor/editor_node.cpp msgid "Revert" @@ -1728,15 +1659,23 @@ msgstr "" #: editor/editor_node.cpp msgid "Save & Quit" -msgstr "" +msgstr "ØÙظ Ùˆ خروج" #: editor/editor_node.cpp msgid "Save changes to the following scene(s) before quitting?" -msgstr "" +msgstr "هل تريد ØÙظ التغييرات للمشاهد التالية قبل الخروج؟" #: editor/editor_node.cpp msgid "Save changes the following scene(s) before opening Project Manager?" msgstr "" +"هل تود ØÙظ التغييرات التي اجريت على المشاهد Ø§Ù„ØØ§Ù„ية قبل ÙØªØ Ù†Ø§ÙØ°Ø© ادارة " +"المشروع؟" + +#: editor/editor_node.cpp +msgid "" +"This option is deprecated. Situations where refresh must be forced are now " +"considered a bug. Please report." +msgstr "" #: editor/editor_node.cpp msgid "Pick a Main Scene" @@ -1765,7 +1704,7 @@ msgid "" msgstr "" #: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Ugh" msgstr "" @@ -1774,18 +1713,20 @@ 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 "" +"خطا ÙÙŠ تØÙ…يل المشهد، يجب ان يكون المشهد ÙÙŠ Ù†ÙØ³ المل٠الخاص بالمشروع. يمكنك " +"استخدام Ù†Ø§ÙØ°Ø© \"الاستيراد\" Ù„ÙØªØ المشهد٫ ثم اØÙظه ÙÙŠ مل٠المشروع." #: editor/editor_node.cpp -msgid "Error loading scene." +msgid "Scene '%s' has broken dependencies:" msgstr "" #: editor/editor_node.cpp -msgid "Scene '%s' has broken dependencies:" +msgid "Clear Recent Scenes" msgstr "" #: editor/editor_node.cpp msgid "Save Layout" -msgstr "" +msgstr "ØÙظ التخطيط" #: editor/editor_node.cpp msgid "Delete Layout" @@ -1816,7 +1757,7 @@ msgstr "" msgid "Toggle distraction-free mode." msgstr "" -#: editor/editor_node.cpp editor/io_plugins/editor_scene_import_plugin.cpp +#: editor/editor_node.cpp msgid "Scene" msgstr "" @@ -1854,11 +1795,11 @@ msgstr "" #: editor/editor_node.cpp msgid "Save Scene" -msgstr "" +msgstr "ØÙظ المشهد" #: editor/editor_node.cpp msgid "Save all Scenes" -msgstr "" +msgstr "ØÙظ جميع المشاهد" #: editor/editor_node.cpp msgid "Close Scene" @@ -2035,6 +1976,10 @@ msgstr "" msgid "Issue Tracker" msgstr "" +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +msgid "Community" +msgstr "مجتمع" + #: editor/editor_node.cpp msgid "About" msgstr "" @@ -2043,7 +1988,7 @@ msgstr "" msgid "Play the project." msgstr "" -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Play" msgstr "" @@ -2059,7 +2004,7 @@ msgstr "" msgid "Stop the scene." msgstr "" -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Stop" msgstr "" @@ -2109,11 +2054,11 @@ msgstr "" #: editor/editor_node.cpp msgid "Save the currently edited resource." -msgstr "" +msgstr "ØÙظ المورد الذي يتم تعديله ØØ§Ù„يا." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Save As.." -msgstr "" +msgstr "ØÙظ باسم..." #: editor/editor_node.cpp msgid "Go to the previous edited object in history." @@ -2132,6 +2077,15 @@ msgid "Object properties." msgstr "" #: editor/editor_node.cpp +msgid "Changes may be lost!" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Import" +msgstr "إستيراد" + +#: editor/editor_node.cpp msgid "FileSystem" msgstr "" @@ -2145,15 +2099,7 @@ msgstr "" #: editor/editor_node.cpp msgid "Don't Save" -msgstr "" - -#: editor/editor_node.cpp editor/editor_reimport_dialog.cpp -msgid "Re-Import" -msgstr "" - -#: editor/editor_node.cpp editor/editor_plugin_settings.cpp -msgid "Update" -msgstr "" +msgstr "لا تقم بالØÙظ" #: editor/editor_node.cpp msgid "Import Templates From ZIP File" @@ -2215,11 +2161,28 @@ msgstr "" msgid "Open the previous Editor" msgstr "" +#: editor/editor_plugin.cpp +msgid "Creating Mesh Previews" +msgstr "" + +#: editor/editor_plugin.cpp +msgid "Thumbnail.." +msgstr "" + #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" msgstr "" #: editor/editor_plugin_settings.cpp +msgid "Update" +msgstr "" + +#: editor/editor_plugin_settings.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Version:" +msgstr "الاصدار:" + +#: editor/editor_plugin_settings.cpp msgid "Author:" msgstr "" @@ -2271,26 +2234,6 @@ msgstr "" msgid "Frame #:" msgstr "" -#: editor/editor_reimport_dialog.cpp -msgid "Please wait for scan to complete." -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Current scene must be saved to re-import." -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Save & Re-Import" -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Importing" -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Import Changed Resources" -msgstr "" - #: editor/editor_run_native.cpp msgid "Select device from the list" msgstr "" @@ -2400,10 +2343,6 @@ msgid "Importing:" msgstr "" #: editor/export_template_manager.cpp -msgid "Loading Export Templates" -msgstr "" - -#: editor/export_template_manager.cpp msgid "Current Version:" msgstr "" @@ -2436,9 +2375,17 @@ msgid "Cannot navigate to '" msgstr "" #: editor/filesystem_dock.cpp +msgid "View items as a grid of thumbnails" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "View items as a list" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "" "\n" -"Status: Needs Re-Import" +"Status: Import of file failed. Please fix file and reimport manually." msgstr "" #: editor/filesystem_dock.cpp @@ -2448,87 +2395,91 @@ msgid "" msgstr "" #: editor/filesystem_dock.cpp -msgid "Same source and destination files, doing nothing." +msgid "Cannot move/rename resources root." msgstr "" #: editor/filesystem_dock.cpp -msgid "Target file exists, can't overwrite. Delete first." +msgid "Cannot move a folder into itself.\n" msgstr "" #: editor/filesystem_dock.cpp -msgid "Same source and destination paths, doing nothing." -msgstr "" +#, fuzzy +msgid "Error moving:\n" +msgstr "خطآ ÙÙŠ التØÙ…يل:" #: editor/filesystem_dock.cpp -msgid "Can't move directories to within themselves." -msgstr "" +#, fuzzy +msgid "Unable to update dependencies:\n" +msgstr "ÙØ´Ù„ ÙÙŠ تØÙ…يل المشهد بسبب وجود Ù…Ù„ÙØ§Øª Ù…Ùقودة يعتمد المشهد عليها:" #: editor/filesystem_dock.cpp -msgid "Can't rename deps for:\n" +msgid "No name provided" msgstr "" #: editor/filesystem_dock.cpp -msgid "Error moving file:\n" +msgid "Provided name contains invalid characters" msgstr "" #: editor/filesystem_dock.cpp -msgid "Error moving dir:\n" +msgid "No name provided." msgstr "" #: editor/filesystem_dock.cpp -msgid "Can't operate on '..'" -msgstr "" +#, fuzzy +msgid "Name contains invalid characters." +msgstr "Ø§Ù„Ø£ØØ±Ù Ø§Ù„ØµØ§Ù„ØØ©:" #: editor/filesystem_dock.cpp -msgid "Pick New Name and Location For:" +msgid "A file or folder with this name already exists." msgstr "" #: editor/filesystem_dock.cpp -msgid "No files selected!" +msgid "Renaming file:" msgstr "" #: editor/filesystem_dock.cpp -msgid "Expand all" +msgid "Renaming folder:" msgstr "" #: editor/filesystem_dock.cpp -msgid "Collapse all" +msgid "Expand all" msgstr "" #: editor/filesystem_dock.cpp -msgid "Show In File Manager" +msgid "Collapse all" msgstr "" #: editor/filesystem_dock.cpp -msgid "Instance" +msgid "Copy Path" msgstr "" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." +msgid "Rename.." msgstr "" #: editor/filesystem_dock.cpp -msgid "View Owners.." +msgid "Move To.." msgstr "" #: editor/filesystem_dock.cpp -msgid "Copy Path" -msgstr "" +#, fuzzy +msgid "New Folder.." +msgstr "أنشئ مجلد" #: editor/filesystem_dock.cpp -msgid "Rename or Move.." +msgid "Show In File Manager" msgstr "" #: editor/filesystem_dock.cpp -msgid "Move To.." +msgid "Instance" msgstr "" #: editor/filesystem_dock.cpp -msgid "Info" +msgid "Edit Dependencies.." msgstr "" #: editor/filesystem_dock.cpp -msgid "Re-Import.." +msgid "View Owners.." msgstr "" #: editor/filesystem_dock.cpp @@ -2561,6 +2512,11 @@ msgstr "" msgid "Move" msgstr "" +#: editor/filesystem_dock.cpp editor/plugins/animation_tree_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Rename" +msgstr "" + #: editor/groups_editor.cpp msgid "Add to Group" msgstr "" @@ -2574,6 +2530,10 @@ msgid "Import as Single Scene" msgstr "" #: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials" msgstr "" @@ -2586,6 +2546,18 @@ msgid "Import with Separate Objects+Materials" msgstr "" #: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Materials+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Materials+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes" msgstr "" @@ -2594,38 +2566,31 @@ msgid "Import as Multiple Scenes+Materials" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Import Scene" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Importing Scene.." msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Running Custom Script.." msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Couldn't load post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Invalid/broken script for post-import (check console):" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Error running post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Saving.." msgstr "" @@ -2653,579 +2618,54 @@ msgstr "" msgid "Reimport" msgstr "" -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "No bit masks to import!" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path is empty." -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must be a complete resource path." -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must exist." -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Save path is empty!" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Import BitMasks" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s):" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Target Path:" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Accept" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Bit Mask" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No source font file!" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No target font resource!" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "" -"Invalid file extension.\n" -"Please use .font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Can't load/process source font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Couldn't save font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font Size:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Dest Resource:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "The quick brown fox jumps over the lazy dog." -msgstr "أبجد هوز ØØ·ÙŠ ÙƒÙ„Ù…Ù† ØµØ¹ÙØµ قرشت ثخذ ضظغ." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Test:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Options:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Font Import" -msgstr "" - -#: 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 "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Failed opening as BMFont file." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error initializing FreeType." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Unknown font format." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error loading font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Invalid font size." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Invalid font custom source." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/plugins/theme_editor_plugin.cpp -msgid "Font" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "No meshes to import!" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Single Mesh Import" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Source Mesh(es):" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Mesh" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Surface %d" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "No samples to import!" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Import Audio Samples" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Source Sample(s):" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Audio Sample" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "New Clip" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Animation Options" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Flags" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Bake FPS:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Optimizer" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Linear Error" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angular Error" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angle" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Clips" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Start(s)" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "End(s)" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Loop" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Filters" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source path is empty." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't load post-import script." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Invalid/broken script for post-import." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Error importing scene." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import 3D Scene" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source Scene:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Same as Target Scene" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Shared" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Target Texture Folder:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Post-Process Script:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Custom Root Node Type:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Auto" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Root Node Name:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "The Following Files are Missing:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Anyway" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp scene/gui/dialogs.cpp -msgid "Cancel" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import & Open" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Edited scene has not been saved, open imported scene anyway?" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Image:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Can't import a file over itself:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't localize path: %s (already local)" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "3D Scene Animation" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Uncompressed" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossless (PNG)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossy (WebP)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress (VRAM)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Format" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Compression Quality (WebP):" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Options" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Please specify some files!" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "At least one file needed for Atlas." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Error importing:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Only one file is required for large texture." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Max Texture Size:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for Atlas (2D)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cell Size:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Large Texture" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Textures (2D)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture" +#: editor/multi_node_edit.cpp +msgid "MultiNode Set" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Base Atlas Texture" +#: editor/node_dock.cpp +msgid "Groups" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s)" +#: editor/node_dock.cpp +msgid "Select a Node to edit Signals and Groups." msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 2D" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create Poly" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 3D" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures" +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Insert Point" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "2D Texture" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly (Remove Point)" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "3D Texture" +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Remove Poly And Point" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Atlas Texture" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create a new polygon from scratch." msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp +#: editor/plugins/abstract_polygon_2d_editor.cpp msgid "" -"NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files to " -"the project." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Crop empty space." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Texture" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Load Source Image" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Slicing" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Inserting" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Saving" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save large texture:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Build Atlas For:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Loading Image:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't load image:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Converting Images" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cropping Images" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Blitting Images" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save atlas image:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save converted texture:" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid source!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid translation source!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Column" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/script_create_dialog.cpp -msgid "Language" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No items to import!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No target path!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translations" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Couldn't import!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translation" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Source CSV:" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Ignore First Row" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Compress" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Add to Project (project.godot)" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Languages:" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Translation" -msgstr "" - -#: editor/multi_node_edit.cpp -msgid "MultiNode Set" -msgstr "" - -#: editor/node_dock.cpp -msgid "Groups" -msgstr "" - -#: editor/node_dock.cpp -msgid "Select a Node to edit Signals and Groups." +"Edit existing polygon:\n" +"LMB: Move Point.\n" +"Ctrl+LMB: Split Segment.\n" +"RMB: Erase Point." msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp @@ -3309,7 +2749,7 @@ msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation backwards from current pos. (A)" -msgstr "" +msgstr "تشغيل Ø§Ù„ØØ±ÙƒØ© المختارة بشكل عكسي من الموقع Ø§Ù„ØØ§Ù„ÙŠ. (زر A)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation backwards from end. (Shift+A)" @@ -3325,7 +2765,7 @@ msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation from current pos. (D)" -msgstr "" +msgstr "تشغيل Ø§Ù„ØØ±ÙƒØ© المختارة من الموقع Ø§Ù„ØØ§Ù„ÙŠ. (زر D)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Animation position (in seconds)." @@ -3381,7 +2821,6 @@ msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp #: editor/script_create_dialog.cpp msgid "Error!" @@ -3491,10 +2930,6 @@ msgid "Delete Input" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Rename" -msgstr "" - -#: editor/plugins/animation_tree_editor_plugin.cpp msgid "Animation tree is valid." msgstr "" @@ -3550,64 +2985,181 @@ msgstr "" msgid "Filters.." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing %d Triangles:" -msgstr "" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Free" +msgstr "مجاني/ÙØ§Ø±Øº" -#: editor/plugins/baked_light_baker.cpp -msgid "Triangle #" -msgstr "" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Contents:" +msgstr "Ø§Ù„Ù…ØØªÙˆÙŠØ§Øª:" -#: editor/plugins/baked_light_baker.cpp -msgid "Light Baker Setup:" -msgstr "" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "View Files" +msgstr "إظهار Ø§Ù„Ù…Ù„ÙØ§Øª" -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing Geometry" -msgstr "" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve hostname:" +msgstr "لا يمكن ØÙ„ أسم Ø§Ù„Ù…ÙØ¶ÙŠÙ:" -#: editor/plugins/baked_light_baker.cpp -msgid "Fixing Lights" -msgstr "" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve." +msgstr "لا يمكن الØÙ„." -#: editor/plugins/baked_light_baker.cpp -msgid "Making BVH" -msgstr "" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connection error, please try again." +msgstr "خطأ ÙÙŠ الإتصال، من ÙØ¶Ù„Ùƒ ØØ§ÙˆÙ„ مجدداً." -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Light Octree" -msgstr "" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't connect." +msgstr "لا يمكن إتمام الاتصال." -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Octree Texture" -msgstr "" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't connect to host:" +msgstr "لا يمكن الإتصال Ø¨Ø§Ù„Ù…ÙØ¶ÙŠÙ:" -#: editor/plugins/baked_light_baker.cpp -msgid "Transfer to Lightmaps:" -msgstr "" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response from host:" +msgstr "لا إستجابة من Ø§Ù„Ù…ÙØ¶ÙŠÙ:" -#: editor/plugins/baked_light_baker.cpp -msgid "Allocating Texture #" -msgstr "" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response." +msgstr "لا يوجد إستجابة." -#: editor/plugins/baked_light_baker.cpp -msgid "Baking Triangle #" -msgstr "" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, return code:" +msgstr "ÙØ´Ù„ إتمام الطلب٫ الرمز الذي تم إرجاعه:" -#: editor/plugins/baked_light_baker.cpp -msgid "Post-Processing Texture #" -msgstr "" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Req. Failed." +msgstr "ÙØ´Ù„ الطلب." -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Bake!" -msgstr "" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, too many redirects" +msgstr "ÙØ´Ù„ الطلب٫ السبب هو اعادة التØÙˆÙŠÙ„ مرات اكثر من اللازم" -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Reset the lightmap octree baking process (start over)." -msgstr "" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Redirect Loop." +msgstr "اعادة توجيه ØÙ„قة التكرار." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed:" +msgstr "ÙØ´Ù„:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Bad download hash, assuming file has been tampered with." +msgstr "تجزئة تØÙ…يل سيئة، من المتوقع أن يكون المل٠قد تم العبث به." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Expected:" +msgstr "ما كان متوقعاً:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Got:" +msgstr "ما تم Ø§Ù„ØØµÙˆÙ„ عليه:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed sha256 hash check" +msgstr "ÙØ´Ù„ التاكد من ترميز sha256" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Asset Download Error:" +msgstr "خطأ ÙÙŠ تنزيل الأصول:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Fetching:" +msgstr "يجلب:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Resolving.." +msgstr "جاري الØÙ„..." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connecting.." +msgstr "جاري الاتصال..." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Requesting.." +msgstr "جار الطلب..." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Error making request" +msgstr "خطأ ÙÙŠ إنشاء الطلب" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Idle" +msgstr "عاطل" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Retry" +msgstr "إعادة Ø§Ù„Ù…ØØ§ÙˆÙ„Ø©" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download Error" +msgstr "خطأ ÙÙŠ التØÙ…يل" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download for this asset is already in progress!" +msgstr "تØÙ…يل هذه الأصول قيد التنÙيذ أصلاً!" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "first" +msgstr "الأول" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "prev" +msgstr "السابق" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "next" +msgstr "التالي" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "last" +msgstr "الأخير" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "All" +msgstr "الكل" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Plugins" +msgstr "Ø¥Ø¶Ø§ÙØ§Øª" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Sort:" +msgstr "ترتيب:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Reverse" +msgstr "عكس" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Category:" +msgstr "Ø§Ù„ÙØ¦Ø©:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Site:" +msgstr "الموقع:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Support.." +msgstr "الدعم..." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Official" +msgstr "رسمياً" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Testing" +msgstr "تجربة" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Assets ZIP File" +msgstr "مل٠أصول مضغوط" #: editor/plugins/camera_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp msgid "Preview" msgstr "" @@ -3650,11 +3202,15 @@ msgid "Edit CanvasItem" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Change Anchors" +msgid "Anchors only" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Change Anchors and Margins" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom (%):" +msgid "Change Anchors" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3706,59 +3262,72 @@ msgid "Pan Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Lock the selected object in place (can't be moved)." +msgid "Toggles snapping" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Unlock the selected object (can be moved)." +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Makes sure the object's children are not selectable." +msgid "Snapping options" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Restores the object's children's ability to be selected." +msgid "Snap to grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp -#: editor/project_settings_editor.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Edit" +msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +msgid "Configure Snap..." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +msgid "Snap Relative" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Rotation Snap" +msgid "Use Pixel Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap Relative" +msgid "Smart snapping" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." +msgid "Snap to parent" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Pixel Snap" +msgid "Snap to node anchor" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Skeleton.." +msgid "Snap to node sides" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to other nodes" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Lock the selected object in place (can't be moved)." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Unlock the selected object (can be moved)." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Makes sure the object's children are not selectable." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Restores the object's children's ability to be selected." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3787,11 +3356,16 @@ msgid "View" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Reset" +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Set.." +msgid "Show helpers" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show rulers" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3803,8 +3377,9 @@ msgid "Frame Selection" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Anchor" -msgstr "" +#, fuzzy +msgid "Layout" +msgstr "ØÙظ التخطيط" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Keys" @@ -3827,11 +3402,20 @@ msgid "Clear Pose" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Set a Value" +msgid "Drag pivot from mouse position" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Set pivot at mouse position" +msgstr "عملية ØªØØ±ÙŠÙƒ" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Multiply grid step by 2" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap (Pixels):" +msgid "Divide grid step by 2" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3842,23 +3426,28 @@ msgstr "" msgid "Adding %s..." msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Create Node" msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Error instancing scene from %s" msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "OK :(" msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "No parent to instance a child at." msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "This operation requires a single selected node." msgstr "" @@ -3872,45 +3461,6 @@ msgid "" "Drag & drop + Alt : Change node type" msgstr "" -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Create Poly" -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly" -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly (Remove Point)" -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Create a new polygon from scratch." -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -msgid "" -"Edit existing polygon:\n" -"LMB: Move Point.\n" -"Ctrl+LMB: Split Segment.\n" -"RMB: Erase Point." -msgstr "" - #: editor/plugins/collision_polygon_editor_plugin.cpp msgid "Create Poly3D" msgstr "" @@ -3920,14 +3470,6 @@ msgid "Set Handle" msgstr "" #: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Creating Mesh Library" -msgstr "" - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Thumbnail.." -msgstr "" - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Remove item %d?" msgstr "" @@ -3950,6 +3492,26 @@ msgid "Update from Scene" msgstr "" #: editor/plugins/curve_editor_plugin.cpp +msgid "Flat0" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Flat1" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Ease in" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Ease out" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Smoothstep" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp msgid "Modify Curve Point" msgstr "" @@ -4027,22 +3589,18 @@ msgid "Create Occluder Polygon" msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Edit existing polygon:" msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "LMB: Move Point." msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Ctrl+LMB: Split Segment." msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "RMB: Erase Point." msgstr "" @@ -4143,6 +3701,10 @@ msgid "Create Outline" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Body" msgstr "" @@ -4270,12 +3832,73 @@ msgstr "" msgid "Populate" msgstr "" -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Create Navigation Polygon" +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Bake!" +msgstr "" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Bake the navigation mesh.\n" +msgstr "" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Clear the navigation mesh." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Setting up Configuration..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Calculating grid size..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating heightfield..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Marking walkable triangles..." +msgstr "جاري تخزين التعديلات المØÙ„ية.." + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Constructing compact heightfield..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Eroding walkable area..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Partioning..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating contours..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating polymesh..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Converting to native navigation mesh..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Navigation Mesh Generator Setup:" +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Parsing Geometry..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Done!" msgstr "" #: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Remove Poly And Point" +msgid "Create Navigation Polygon" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4449,16 +4072,19 @@ msgid "Curve Point #" msgstr "" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Point Pos" -msgstr "" +#, fuzzy +msgid "Set Curve Point Position" +msgstr "عملية ØªØØ±ÙŠÙƒ" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve In Pos" -msgstr "" +#, fuzzy +msgid "Set Curve In Position" +msgstr "عملية ØªØØ±ÙŠÙƒ" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Out Pos" -msgstr "" +#, fuzzy +msgid "Set Curve Out Position" +msgstr "عملية ØªØØ±ÙŠÙƒ" #: editor/plugins/path_editor_plugin.cpp msgid "Split Path" @@ -4518,6 +4144,14 @@ msgid "Scale Polygon" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon->UV" msgstr "" @@ -4572,63 +4206,10 @@ msgstr "" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "" -#: editor/plugins/rich_text_editor_plugin.cpp -msgid "Parse BBCode" -msgstr "" - -#: editor/plugins/sample_editor_plugin.cpp -msgid "Length:" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Open Sample File(s)" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "ERROR: Couldn't load sample!" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Add Sample" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Rename Sample" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Delete Sample" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "16 Bits" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "8 Bits" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Stereo" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Mono" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/script_editor_debugger.cpp -msgid "Format" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Pitch" -msgstr "" - #: editor/plugins/script_editor_plugin.cpp msgid "Clear Recent Files" msgstr "" @@ -4719,6 +4300,10 @@ msgstr "" msgid "Close All" msgstr "" +#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp +msgid "Run" +msgstr "" + #: editor/plugins/script_editor_plugin.cpp msgid "Toggle Scripts Panel" msgstr "" @@ -4760,18 +4345,6 @@ msgid "Debug with external editor" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Window" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Left" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Right" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp msgid "Open Godot online documentation" msgstr "" @@ -4854,7 +4427,7 @@ msgstr "" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Copy" msgstr "" @@ -5117,10 +4690,6 @@ msgid "View Plane Transform." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Scaling to %s%%." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." msgstr "" @@ -5137,10 +4706,6 @@ msgid "Top View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Top" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "" @@ -5368,6 +4933,10 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Configure Snap.." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Local Coords" msgstr "" @@ -5513,6 +5082,10 @@ msgid "Speed (FPS):" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Loop" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animation Frames" msgstr "" @@ -5525,12 +5098,14 @@ msgid "Insert Empty (After)" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Up" -msgstr "" +#, fuzzy +msgid "Move (Before)" +msgstr "عملية ØªØØ±ÙŠÙƒ" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Down" -msgstr "" +#, fuzzy +msgid "Move (After)" +msgstr "عملية ØªØØ±ÙŠÙƒ" #: editor/plugins/style_box_editor_plugin.cpp msgid "StyleBox Preview:" @@ -5692,6 +5267,10 @@ msgid "Style" msgstr "" #: editor/plugins/theme_editor_plugin.cpp +msgid "Font" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp msgid "Color" msgstr "" @@ -5740,7 +5319,7 @@ msgid "Mirror Y" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Bucket" +msgid "Paint Tile" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp @@ -5804,6 +5383,10 @@ msgid "Delete preset '%s'?" msgstr "" #: editor/project_export.cpp +msgid "Export templates for this platform are missing/corrupted: " +msgstr "" + +#: editor/project_export.cpp msgid "Presets" msgstr "" @@ -5874,19 +5457,30 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +msgid "Export templates for this platform are missing/corrupted:" +msgstr "" + +#: editor/project_export.cpp msgid "Export With Debug" msgstr "" #: editor/project_manager.cpp -msgid "Invalid project path, the path must exist!" +#, fuzzy +msgid "The path does not exists." +msgstr "المل٠غير موجود." + +#: editor/project_manager.cpp +msgid "Please choose a 'project.godot' file." msgstr "" #: editor/project_manager.cpp -msgid "Invalid project path, project.godot must not exist." +msgid "" +"Your project will be created in a non empty folder (you might want to create " +"a new folder)." msgstr "" #: editor/project_manager.cpp -msgid "Invalid project path, project.godot must exist." +msgid "Please choose a folder that does not contain a 'project.godot' file." msgstr "" #: editor/project_manager.cpp @@ -5894,10 +5488,26 @@ msgid "Imported Project" msgstr "" #: editor/project_manager.cpp +msgid " " +msgstr "" + +#: editor/project_manager.cpp +msgid "It would be a good idea to name your project." +msgstr "" + +#: editor/project_manager.cpp msgid "Invalid project path (changed anything?)." msgstr "" #: editor/project_manager.cpp +msgid "Couldn't get project.godot in project path." +msgstr "" + +#: editor/project_manager.cpp +msgid "Couldn't edit project.godot in project path." +msgstr "" + +#: editor/project_manager.cpp msgid "Couldn't create project.godot in project path." msgstr "" @@ -5906,23 +5516,23 @@ msgid "The following files failed extraction from package:" msgstr "" #: editor/project_manager.cpp -msgid "Import Existing Project" +msgid "Rename Project" msgstr "" #: editor/project_manager.cpp -msgid "Project Path (Must Exist):" +msgid "Couldn't get project.godot in the project path." msgstr "" #: editor/project_manager.cpp -msgid "Project Name:" +msgid "New Game Project" msgstr "" #: editor/project_manager.cpp -msgid "Create New Project" +msgid "Import Existing Project" msgstr "" #: editor/project_manager.cpp -msgid "Project Path:" +msgid "Create New Project" msgstr "" #: editor/project_manager.cpp @@ -5930,11 +5540,20 @@ msgid "Install Project:" msgstr "" #: editor/project_manager.cpp -msgid "Browse" +msgid "Project Name:" msgstr "" #: editor/project_manager.cpp -msgid "New Game Project" +#, fuzzy +msgid "Create folder" +msgstr "أنشئ مجلد" + +#: editor/project_manager.cpp +msgid "Project Path:" +msgstr "" + +#: editor/project_manager.cpp +msgid "Browse" msgstr "" #: editor/project_manager.cpp @@ -5946,6 +5565,11 @@ msgid "Unnamed Project" msgstr "" #: editor/project_manager.cpp +#, fuzzy +msgid "Can't open project" +msgstr "لا يمكن إتمام الاتصال." + +#: editor/project_manager.cpp msgid "Are you sure to open more than one project?" msgstr "" @@ -5981,10 +5605,6 @@ msgid "Project List" msgstr "" #: editor/project_manager.cpp -msgid "Run" -msgstr "" - -#: editor/project_manager.cpp msgid "Scan" msgstr "" @@ -6041,17 +5661,14 @@ msgid "Add Input Action Event" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Meta+" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Shift+" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Alt+" msgstr "" @@ -6112,7 +5729,7 @@ msgstr "" msgid "Joypad Axis Index:" msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Axis" msgstr "" @@ -6132,31 +5749,31 @@ msgstr "" msgid "Add Event" msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Device" msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Button" msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Left Button." msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Right Button." msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Middle Button." msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Up." msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Down." msgstr "" @@ -6165,7 +5782,7 @@ msgid "Add Global Property" msgstr "" #: editor/project_settings_editor.cpp -msgid "Select an setting item first!" +msgid "Select a setting item first!" msgstr "" #: editor/project_settings_editor.cpp @@ -6181,6 +5798,15 @@ msgid "Delete Item" msgstr "" #: editor/project_settings_editor.cpp +#, fuzzy +msgid "Can't contain '/' or ':'" +msgstr "لا يمكن الإتصال Ø¨Ø§Ù„Ù…ÙØ¶ÙŠÙ:" + +#: editor/project_settings_editor.cpp +msgid "Already existing" +msgstr "" + +#: editor/project_settings_editor.cpp msgid "Error saving settings." msgstr "" @@ -6329,10 +5955,20 @@ msgid "New Script" msgstr "" #: editor/property_editor.cpp +#, fuzzy +msgid "Make Unique" +msgstr "إجعل الموارد الجانبية مميزة" + +#: editor/property_editor.cpp msgid "Show in File System" msgstr "" #: editor/property_editor.cpp +#, fuzzy +msgid "Convert To %s" +msgstr "صلها بالعقدة:" + +#: editor/property_editor.cpp msgid "Error loading file: Not a resource!" msgstr "" @@ -6369,6 +6005,10 @@ msgid "Select Property" msgstr "" #: editor/property_selector.cpp +msgid "Select Virtual Method" +msgstr "" + +#: editor/property_selector.cpp msgid "Select Method" msgstr "" @@ -6396,26 +6036,6 @@ msgstr "" msgid "Reparent" msgstr "" -#: editor/resources_dock.cpp -msgid "Create New Resource" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Open Resource" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Save Resource" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Resource Tools" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Make Local" -msgstr "" - #: editor/run_settings_dialog.cpp msgid "Run Mode:" msgstr "" @@ -6542,14 +6162,6 @@ msgid "Sub-Resources:" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Edit Groups" -msgstr "" - -#: editor/scene_tree_dock.cpp -msgid "Edit Connections" -msgstr "" - -#: editor/scene_tree_dock.cpp msgid "Clear Inheritance" msgstr "" @@ -6732,6 +6344,15 @@ msgid "Invalid base path" msgstr "" #: editor/script_create_dialog.cpp +msgid "Directory of the same name exists" +msgstr "" + +#: editor/script_create_dialog.cpp +#, fuzzy +msgid "File exists, will be reused" +msgstr "المل٠موجود، إستبدال؟" + +#: editor/script_create_dialog.cpp msgid "Invalid extension" msgstr "" @@ -6773,6 +6394,10 @@ msgid "Load existing script file" msgstr "" #: editor/script_create_dialog.cpp +msgid "Language" +msgstr "" + +#: editor/script_create_dialog.cpp msgid "Inherits" msgstr "" @@ -6813,6 +6438,10 @@ msgid "Function:" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Errors" msgstr "" @@ -6893,6 +6522,10 @@ msgid "Type" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Format" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Usage" msgstr "" @@ -6968,6 +6601,22 @@ msgstr "" msgid "Change Probe Extents" msgstr "" +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Library" +msgstr "" + +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Status" +msgstr "" + +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Libraries: " +msgstr "" + +#: modules/gdnative/register_types.cpp +msgid "GDNative" +msgstr "" + #: modules/gdscript/gd_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp #, fuzzy @@ -6976,7 +6625,7 @@ msgstr "" "ØµÙ†Ù Ø¥ØØ¯Ù‰ المتغيرات المدخلة (arguments) غير صØÙŠØ ÙÙŠ ()convert . إستعمل ثابتة " "_*TYPE" -#: modules/gdscript/gd_functions.cpp +#: modules/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h #: modules/visual_script/visual_script_builtin_funcs.cpp #, fuzzy msgid "Not enough bytes for decoding bytes, or invalid format." @@ -7037,10 +6686,6 @@ msgid "GridMap Duplicate Selection" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Paint" -msgstr "" - -#: modules/gridmap/grid_map_editor_plugin.cpp msgid "Snap View" msgstr "" @@ -7132,12 +6777,8 @@ msgstr "" msgid "Pick Distance:" msgstr "" -#: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Tiles" -msgstr "" - -#: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Areas" +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "Builds" msgstr "" #: modules/visual_script/visual_script.cpp @@ -7328,10 +6969,18 @@ msgid "Return" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Call" +msgstr "نداء" + +#: modules/visual_script/visual_script_editor.cpp msgid "Get" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Script already has function '%s'" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Input Value" msgstr "" @@ -7472,23 +7121,23 @@ msgstr "" #: platform/javascript/export/export.cpp msgid "Run in Browser" -msgstr "" +msgstr "تشغيل ÙÙŠ Ø§Ù„Ù…ØªØµÙØ" #: platform/javascript/export/export.cpp msgid "Run exported HTML in the system's default browser." -msgstr "" +msgstr "شغل مل٠HTML Ø§Ù„Ù…ÙØµØ¯Ø± ÙÙŠ Ø§Ù„Ù…ØªØµÙØ Ø§Ù„Ø¥ÙØªØ±Ø§Ø¶ÙŠ Ù„Ù„Ù†Ø¸Ø§Ù…." #: platform/javascript/export/export.cpp msgid "Could not write file:\n" -msgstr "" +msgstr "لا يمكن كتابة الملÙ:\n" #: platform/javascript/export/export.cpp msgid "Could not read file:\n" -msgstr "" +msgstr "لا يمكن قرأة الملÙ:\n" #: platform/javascript/export/export.cpp msgid "Could not open template for export:\n" -msgstr "" +msgstr "لا يمكن ÙØªØ القالب من أجل التصدير.\n" #: scene/2d/animated_sprite.cpp msgid "" @@ -7690,6 +7339,12 @@ msgid "" "order for AnimatedSprite3D to display frames." msgstr "" +#: scene/3d/vehicle_body.cpp +msgid "" +"VehicleWheel serves to provide a wheel system to a VehicleBody. Please use " +"it as a child of a VehicleBody." +msgstr "" + #: scene/gui/color_picker.cpp msgid "Raw Mode" msgstr "" @@ -7699,16 +7354,16 @@ msgid "Add current color as a preset" msgstr "" #: scene/gui/dialogs.cpp -msgid "Alert!" +msgid "Cancel" msgstr "" #: scene/gui/dialogs.cpp -msgid "Please Confirm..." -msgstr "" +msgid "Alert!" +msgstr "تنبيه!" -#: scene/gui/input_action.cpp -msgid "Ctrl+" -msgstr "" +#: scene/gui/dialogs.cpp +msgid "Please Confirm..." +msgstr "يرجى التاكيد..." #: scene/gui/popup.cpp msgid "" @@ -7738,5 +7393,51 @@ msgid "" "texture to some node for display." msgstr "" +#: scene/resources/dynamic_font.cpp +msgid "Error initializing FreeType." +msgstr "" + +#: scene/resources/dynamic_font.cpp +msgid "Unknown font format." +msgstr "" + +#: scene/resources/dynamic_font.cpp +msgid "Error loading font." +msgstr "" + +#: scene/resources/dynamic_font.cpp +msgid "Invalid font size." +msgstr "" + +#~ msgid "Method List For '%s':" +#~ msgstr "قائمة الطرق لـ '%s':" + +#~ msgid "Arguments:" +#~ msgstr "البراهين:" + +#~ msgid "Return:" +#~ msgstr "العودة:" + +#~ msgid "Added:" +#~ msgstr "تم Ø¥Ø¶Ø§ÙØªÙ‡:" + +#~ msgid "Removed:" +#~ msgstr "Ù…ÙØ³ÙØ:" + +#~ msgid "Error saving atlas:" +#~ msgstr "خطأ ÙÙŠ ØÙظ الأطلس:" + +#~ msgid "Could not save atlas subtexture:" +#~ msgstr "لا يمكن ØÙظ النسيج Ø§Ù„ÙØ±Ø¹ÙŠ Ù„Ù„Ø£Ø·Ù„Ø³:" + +#~ msgid "Exporting for %s" +#~ msgstr "التصدير كـ %s" + +#~ msgid "Setting Up.." +#~ msgstr "جاري الإعداد.." + +#~ msgid "The quick brown fox jumps over the lazy dog." +#~ msgstr "أبجد هوز ØØ·ÙŠ ÙƒÙ„Ù…Ù† ØµØ¹ÙØµ قرشت ثخذ ضظغ." + #~ msgid "Samples" #~ msgstr "عينات (صوتية)" diff --git a/editor/translations/bg.po b/editor/translations/bg.po index 2ac4e53dd8..8906562216 100644 --- a/editor/translations/bg.po +++ b/editor/translations/bg.po @@ -192,10 +192,9 @@ msgid "Create %d NEW tracks and insert keys?" msgstr "" #: editor/animation_editor.cpp editor/create_dialog.cpp -#: editor/editor_audio_buses.cpp +#: editor/editor_audio_buses.cpp editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp #: editor/plugins/mesh_instance_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp editor/project_manager.cpp #: editor/script_create_dialog.cpp msgid "Create" @@ -357,262 +356,6 @@ msgstr "" msgid "Change Array Value" msgstr "" -#: editor/asset_library_editor_plugin.cpp -msgid "Free" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp -msgid "Version:" -msgstr "ВерÑиÑ:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Contents:" -msgstr "Съдържание:" - -#: editor/asset_library_editor_plugin.cpp -msgid "View Files" -msgstr "Преглед на файловете" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_help.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp -msgid "Description:" -msgstr "ОпиÑание:" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -#: editor/project_manager.cpp -msgid "Install" -msgstr "ИнÑталиране" - -#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp -#: editor/connections_dialog.cpp editor/export_template_manager.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -#: editor/project_settings_editor.cpp editor/property_editor.cpp -#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Close" -msgstr "ЗатварÑне" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve hostname:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Connection error, please try again." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't connect." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't connect to host:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response from host:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Request failed, return code:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Req. Failed." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Request failed, too many redirects" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Redirect Loop." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Bad download hash, assuming file has been tampered with." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Expected:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Got:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed sha256 hash check" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Asset Download Error:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -msgid "Success!" -msgstr "Готово!" - -#: editor/asset_library_editor_plugin.cpp -msgid "Fetching:" -msgstr "ИзтеглÑне:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Resolving.." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "Свързване.." - -#: editor/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "Запитване.." - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Error making request" -msgstr "Имаше грешка при зареждане на Ñцената." - -#: editor/asset_library_editor_plugin.cpp -msgid "Idle" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Retry" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Download Error" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Download for this asset is already in progress!" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "first" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "prev" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "next" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "last" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "All" -msgstr "Ð’Ñички" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/property_selector.cpp editor/quick_open.cpp -#: editor/settings_config_dialog.cpp -msgid "Search:" -msgstr "ТърÑене:" - -#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Search" -msgstr "ТърÑене" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/project_manager.cpp -msgid "Import" -msgstr "ВнаÑÑне" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Plugins" -msgstr "ПриÑтавки" - -#: editor/asset_library_editor_plugin.cpp -msgid "Sort:" -msgstr "Подреждане:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Reverse" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Category:" -msgstr "КатегориÑ:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Site:" -msgstr "МÑÑто:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "Поддръжка" - -#: editor/asset_library_editor_plugin.cpp -msgid "Official" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -msgid "Community" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Testing" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Assets ZIP File" -msgstr "" - -#: editor/call_dialog.cpp -msgid "Method List For '%s':" -msgstr "" - -#: editor/call_dialog.cpp modules/visual_script/visual_script_editor.cpp -msgid "Call" -msgstr "" - -#: editor/call_dialog.cpp -msgid "Method List:" -msgstr "" - -#: editor/call_dialog.cpp -msgid "Arguments:" -msgstr "" - -#: editor/call_dialog.cpp -msgid "Return:" -msgstr "" - #: editor/code_editor.cpp msgid "Go to Line" msgstr "" @@ -649,6 +392,14 @@ msgstr "" msgid "Selection Only" msgstr "" +#: editor/code_editor.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp +msgid "Search" +msgstr "ТърÑене" + #: editor/code_editor.cpp editor/editor_help.cpp msgid "Find" msgstr "" @@ -681,11 +432,11 @@ msgstr "" msgid "Skip" msgstr "" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom In" msgstr "" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom Out" msgstr "" @@ -752,6 +503,20 @@ msgstr "" msgid "Oneshot" msgstr "" +#: editor/connections_dialog.cpp editor/dependency_editor.cpp +#: editor/export_template_manager.cpp +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Close" +msgstr "ЗатварÑне" + #: editor/connections_dialog.cpp msgid "Connect" msgstr "" @@ -777,7 +542,7 @@ msgstr "" msgid "Disconnect" msgstr "" -#: editor/connections_dialog.cpp editor/node_dock.cpp +#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" msgstr "" @@ -794,12 +559,25 @@ msgstr "Любими:" msgid "Recent:" msgstr "" +#: editor/create_dialog.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp +#: editor/quick_open.cpp editor/settings_config_dialog.cpp +msgid "Search:" +msgstr "ТърÑене:" + #: editor/create_dialog.cpp editor/editor_help.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp #: editor/quick_open.cpp msgid "Matches:" msgstr "" +#: editor/create_dialog.cpp editor/editor_help.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp +#: editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "ОпиÑание:" + #: editor/dependency_editor.cpp msgid "Search Replacement For:" msgstr "" @@ -855,6 +633,10 @@ msgid "Owners Of:" msgstr "" #: editor/dependency_editor.cpp +msgid "Remove selected files from the project? (no undo)" +msgstr "" + +#: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" @@ -862,7 +644,7 @@ msgid "" msgstr "" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (no undo)" +msgid "Cannot remove:\n" msgstr "" #: editor/dependency_editor.cpp @@ -929,10 +711,6 @@ msgid "Godot Engine contributors" msgstr "" #: editor/editor_about.cpp -msgid "Authors" -msgstr "" - -#: editor/editor_about.cpp #, fuzzy msgid "Project Founders" msgstr "ДиÑпечер на проектите" @@ -950,6 +728,38 @@ msgid "Developers" msgstr "" #: editor/editor_about.cpp +msgid "Authors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Platinum Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Mini Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Silver Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Bronze Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Donors" +msgstr "" + +#: editor/editor_about.cpp msgid "License" msgstr "" @@ -993,6 +803,16 @@ msgid "Package Installed Successfully!" msgstr "" #: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Success!" +msgstr "Готово!" + +#: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp +msgid "Install" +msgstr "ИнÑталиране" + +#: editor/editor_asset_installer.cpp msgid "Package Installer" msgstr "" @@ -1041,11 +861,6 @@ msgid "Audio Bus, Drag and Drop to rearrange." msgstr "" #: editor/editor_audio_buses.cpp -#, fuzzy -msgid "Bus options" -msgstr "ÐаÑтройки за отÑтранÑване на грешки" - -#: editor/editor_audio_buses.cpp msgid "Solo" msgstr "" @@ -1057,12 +872,21 @@ msgstr "" msgid "Bypass" msgstr "" +#: editor/editor_audio_buses.cpp +#, fuzzy +msgid "Bus options" +msgstr "ÐаÑтройки за отÑтранÑване на грешки" + #: editor/editor_audio_buses.cpp editor/plugins/tile_map_editor_plugin.cpp #: editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "" #: editor/editor_audio_buses.cpp +msgid "Reset Volume" +msgstr "" + +#: editor/editor_audio_buses.cpp msgid "Delete Effect" msgstr "" @@ -1084,6 +908,10 @@ msgid "Duplicate Audio Bus" msgstr "" #: editor/editor_audio_buses.cpp +msgid "Reset Bus Volume" +msgstr "" + +#: editor/editor_audio_buses.cpp msgid "Move Audio Bus" msgstr "" @@ -1115,7 +943,8 @@ msgstr "" msgid "Create a new Bus Layout." msgstr "" -#: editor/editor_audio_buses.cpp editor/script_create_dialog.cpp +#: editor/editor_audio_buses.cpp editor/property_editor.cpp +#: editor/script_create_dialog.cpp msgid "Load" msgstr "" @@ -1206,7 +1035,7 @@ msgid "Rearrange Autoloads" msgstr "" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp scene/gui/file_dialog.cpp +#: scene/gui/file_dialog.cpp msgid "Path:" msgstr "Път:" @@ -1214,9 +1043,7 @@ msgstr "Път:" msgid "Node Name:" msgstr "" -#: editor/editor_autoload_settings.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp editor/project_manager.cpp +#: editor/editor_autoload_settings.cpp editor/project_manager.cpp msgid "Name" msgstr "" @@ -1250,18 +1077,19 @@ msgid "Choose a Directory" msgstr "" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Create Folder" msgstr "Създаване на папка" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: editor/editor_plugin_settings.cpp editor/plugins/theme_editor_plugin.cpp -#: editor/project_export.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp +#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp +#: scene/gui/file_dialog.cpp msgid "Name:" msgstr "Име:" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Could not create folder." msgstr "ÐеуÑпешно Ñъздаване на папка." @@ -1281,30 +1109,6 @@ msgstr "" msgid "Template file not found:\n" msgstr "" -#: editor/editor_export.cpp -msgid "Added:" -msgstr "" - -#: editor/editor_export.cpp -msgid "Removed:" -msgstr "" - -#: editor/editor_export.cpp -msgid "Error saving atlas:" -msgstr "" - -#: editor/editor_export.cpp -msgid "Could not save atlas subtexture:" -msgstr "" - -#: editor/editor_export.cpp -msgid "Exporting for %s" -msgstr "ИзнаÑÑне за %s" - -#: editor/editor_export.cpp -msgid "Setting Up.." -msgstr "" - #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "Файлът ÑъщеÑтвува. ИÑкате ли да го презапишете?" @@ -1389,6 +1193,11 @@ msgstr "" msgid "Move Favorite Down" msgstr "" +#: editor/editor_file_dialog.cpp +#, fuzzy +msgid "Go to parent folder" +msgstr "ÐеуÑпешно Ñъздаване на папка." + #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Directories & Files:" msgstr "Папки и файлове:" @@ -1431,6 +1240,10 @@ msgstr "" msgid "Search Classes" msgstr "" +#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +msgid "Top" +msgstr "" + #: editor/editor_help.cpp editor/property_editor.cpp msgid "Class:" msgstr "" @@ -1447,15 +1260,28 @@ msgstr "" msgid "Brief Description:" msgstr "" +#: editor/editor_help.cpp +msgid "Members" +msgstr "" + #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "" #: editor/editor_help.cpp +#, fuzzy +msgid "Public Methods" +msgstr "Изберете метод" + +#: editor/editor_help.cpp msgid "Public Methods:" msgstr "" #: editor/editor_help.cpp +msgid "GUI Theme Items" +msgstr "" + +#: editor/editor_help.cpp msgid "GUI Theme Items:" msgstr "" @@ -1464,6 +1290,11 @@ msgid "Signals:" msgstr "" #: editor/editor_help.cpp +#, fuzzy +msgid "Enumerations" +msgstr "Преходи" + +#: editor/editor_help.cpp msgid "Enumerations:" msgstr "" @@ -1472,18 +1303,49 @@ msgid "enum " msgstr "" #: editor/editor_help.cpp +#, fuzzy +msgid "Constants" +msgstr "ПоÑтоÑнно" + +#: editor/editor_help.cpp msgid "Constants:" msgstr "" #: editor/editor_help.cpp +#, fuzzy +msgid "Description" +msgstr "ОпиÑание:" + +#: editor/editor_help.cpp +msgid "Properties" +msgstr "" + +#: editor/editor_help.cpp msgid "Property Description:" msgstr "" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this property. Please help us by " +"[color=$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp +#, fuzzy +msgid "Methods" +msgstr "Изберете метод" + +#: editor/editor_help.cpp msgid "Method Description:" msgstr "" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this method. Please help us by [color=" +"$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp msgid "Search Text" msgstr "" @@ -1492,24 +1354,21 @@ msgid "Output:" msgstr "" #: editor/editor_log.cpp editor/plugins/animation_tree_editor_plugin.cpp -#: editor/plugins/rich_text_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_editor_debugger.cpp scene/gui/line_edit.cpp -#: scene/gui/text_edit.cpp +#: editor/property_editor.cpp editor/script_editor_debugger.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Clear" msgstr "ИзчиÑтване" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Error saving resource!" msgstr "" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Save Resource As.." msgstr "" -#: editor/editor_node.cpp editor/export_template_manager.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "I see.." msgstr "" @@ -1526,6 +1385,29 @@ msgid "Error while saving." msgstr "" #: editor/editor_node.cpp +msgid "Can't open '%s'." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Error while parsing '%s'." +msgstr "Имаше грешка при внаÑÑнето на Ñцената." + +#: editor/editor_node.cpp +msgid "Unexpected end of file '%s'." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Missing '%s' or its dependencies." +msgstr "Сцената '%s' има нарушени завиÑимоÑти:" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Error while loading '%s'." +msgstr "Имаше грешка при зареждане на Ñцената." + +#: editor/editor_node.cpp msgid "Saving Scene" msgstr "Запазване на Ñцената" @@ -1583,6 +1465,33 @@ msgid "Restored default layout to base settings." msgstr "" #: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was imported, so it's not editable.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was instanced or inherited.\n" +"Changes to it will not be kept when saving the current scene." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource was imported, so it's not editable. Change its settings in the " +"import panel and then re-import." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This scene was imported, so changes to it will not be kept.\n" +"Instancing it or inheriting will allow making changes to it.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp msgid "Copy Params" msgstr "" @@ -1748,6 +1657,12 @@ msgid "Save changes the following scene(s) before opening Project Manager?" msgstr "" #: editor/editor_node.cpp +msgid "" +"This option is deprecated. Situations where refresh must be forced are now " +"considered a bug. Please report." +msgstr "" + +#: editor/editor_node.cpp msgid "Pick a Main Scene" msgstr "Изберете главна Ñцена" @@ -1774,7 +1689,7 @@ msgid "" msgstr "" #: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Ugh" msgstr "" @@ -1785,14 +1700,15 @@ msgid "" msgstr "" #: editor/editor_node.cpp -msgid "Error loading scene." -msgstr "Имаше грешка при зареждане на Ñцената." - -#: editor/editor_node.cpp msgid "Scene '%s' has broken dependencies:" msgstr "Сцената '%s' има нарушени завиÑимоÑти:" #: editor/editor_node.cpp +#, fuzzy +msgid "Clear Recent Scenes" +msgstr "ЗатварÑне на Ñцената" + +#: editor/editor_node.cpp msgid "Save Layout" msgstr "" @@ -1825,7 +1741,7 @@ msgstr "" msgid "Toggle distraction-free mode." msgstr "" -#: editor/editor_node.cpp editor/io_plugins/editor_scene_import_plugin.cpp +#: editor/editor_node.cpp msgid "Scene" msgstr "Сцена" @@ -2044,6 +1960,10 @@ msgstr "" msgid "Issue Tracker" msgstr "" +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +msgid "Community" +msgstr "" + #: editor/editor_node.cpp msgid "About" msgstr "ОтноÑно" @@ -2052,7 +1972,7 @@ msgstr "ОтноÑно" msgid "Play the project." msgstr "Възпроизвеждане на проекта." -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Play" msgstr "" @@ -2068,7 +1988,7 @@ msgstr "ПреуÑтановÑване на Ñцената" msgid "Stop the scene." msgstr "Спиране на Ñцената." -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Stop" msgstr "" @@ -2141,6 +2061,15 @@ msgid "Object properties." msgstr "" #: editor/editor_node.cpp +msgid "Changes may be lost!" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Import" +msgstr "ВнаÑÑне" + +#: editor/editor_node.cpp msgid "FileSystem" msgstr "" @@ -2156,14 +2085,6 @@ msgstr "" msgid "Don't Save" msgstr "" -#: editor/editor_node.cpp editor/editor_reimport_dialog.cpp -msgid "Re-Import" -msgstr "Повторно внаÑÑне" - -#: editor/editor_node.cpp editor/editor_plugin_settings.cpp -msgid "Update" -msgstr "" - #: editor/editor_node.cpp msgid "Import Templates From ZIP File" msgstr "ВнаÑÑне на шаблони от архив във формат ZIP" @@ -2225,11 +2146,28 @@ msgstr "" msgid "Open the previous Editor" msgstr "" +#: editor/editor_plugin.cpp +msgid "Creating Mesh Previews" +msgstr "" + +#: editor/editor_plugin.cpp +msgid "Thumbnail.." +msgstr "" + #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" msgstr "ИнÑталирани приÑтавки:" #: editor/editor_plugin_settings.cpp +msgid "Update" +msgstr "" + +#: editor/editor_plugin_settings.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Version:" +msgstr "ВерÑиÑ:" + +#: editor/editor_plugin_settings.cpp msgid "Author:" msgstr "" @@ -2281,27 +2219,6 @@ msgstr "" msgid "Frame #:" msgstr "" -#: editor/editor_reimport_dialog.cpp -msgid "Please wait for scan to complete." -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Current scene must be saved to re-import." -msgstr "" -"За да Ñе извърши повторното внаÑÑне, текущата Ñцена трÑбва да бъде запазена." - -#: editor/editor_reimport_dialog.cpp -msgid "Save & Re-Import" -msgstr "Запазване и повторно внаÑÑне" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Importing" -msgstr "Извършва Ñе повторно внаÑÑне" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Import Changed Resources" -msgstr "" - #: editor/editor_run_native.cpp msgid "Select device from the list" msgstr "" @@ -2413,10 +2330,6 @@ msgid "Importing:" msgstr "ВнаÑÑне:" #: editor/export_template_manager.cpp -msgid "Loading Export Templates" -msgstr "" - -#: editor/export_template_manager.cpp msgid "Current Version:" msgstr "" @@ -2451,82 +2364,78 @@ msgid "Cannot navigate to '" msgstr "" #: editor/filesystem_dock.cpp -#, fuzzy -msgid "" -"\n" -"Status: Needs Re-Import" -msgstr "Запазване и повторно внаÑÑне" - -#: editor/filesystem_dock.cpp -msgid "" -"\n" -"Source: " +msgid "View items as a grid of thumbnails" msgstr "" #: editor/filesystem_dock.cpp -msgid "Same source and destination files, doing nothing." +msgid "View items as a list" msgstr "" #: editor/filesystem_dock.cpp -msgid "Target file exists, can't overwrite. Delete first." +msgid "" +"\n" +"Status: Import of file failed. Please fix file and reimport manually." msgstr "" #: editor/filesystem_dock.cpp -msgid "Same source and destination paths, doing nothing." +msgid "" +"\n" +"Source: " msgstr "" #: editor/filesystem_dock.cpp -msgid "Can't move directories to within themselves." +msgid "Cannot move/rename resources root." msgstr "" #: editor/filesystem_dock.cpp -msgid "Can't rename deps for:\n" +msgid "Cannot move a folder into itself.\n" msgstr "" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Error moving file:\n" +msgid "Error moving:\n" msgstr "Имаше грешка при внаÑÑнето:" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Error moving dir:\n" -msgstr "Имаше грешка при внаÑÑнето:" +msgid "Unable to update dependencies:\n" +msgstr "Сцената '%s' има нарушени завиÑимоÑти:" #: editor/filesystem_dock.cpp -msgid "Can't operate on '..'" +msgid "No name provided" msgstr "" #: editor/filesystem_dock.cpp -msgid "Pick New Name and Location For:" +msgid "Provided name contains invalid characters" msgstr "" #: editor/filesystem_dock.cpp -msgid "No files selected!" +msgid "No name provided." msgstr "" #: editor/filesystem_dock.cpp -msgid "Expand all" +msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp -msgid "Collapse all" +msgid "A file or folder with this name already exists." msgstr "" #: editor/filesystem_dock.cpp -msgid "Show In File Manager" -msgstr "" +#, fuzzy +msgid "Renaming file:" +msgstr "Имаше грешка при внаÑÑнето:" #: editor/filesystem_dock.cpp -msgid "Instance" +msgid "Renaming folder:" msgstr "" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." +msgid "Expand all" msgstr "" #: editor/filesystem_dock.cpp -msgid "View Owners.." +msgid "Collapse all" msgstr "" #: editor/filesystem_dock.cpp @@ -2534,7 +2443,7 @@ msgid "Copy Path" msgstr "" #: editor/filesystem_dock.cpp -msgid "Rename or Move.." +msgid "Rename.." msgstr "" #: editor/filesystem_dock.cpp @@ -2542,12 +2451,25 @@ msgid "Move To.." msgstr "" #: editor/filesystem_dock.cpp -msgid "Info" +#, fuzzy +msgid "New Folder.." +msgstr "Създаване на папка" + +#: editor/filesystem_dock.cpp +msgid "Show In File Manager" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Instance" msgstr "" #: editor/filesystem_dock.cpp -msgid "Re-Import.." -msgstr "Повторно внаÑÑне.." +msgid "Edit Dependencies.." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "View Owners.." +msgstr "" #: editor/filesystem_dock.cpp msgid "Previous Directory" @@ -2579,6 +2501,11 @@ msgstr "" msgid "Move" msgstr "" +#: editor/filesystem_dock.cpp editor/plugins/animation_tree_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Rename" +msgstr "" + #: editor/groups_editor.cpp msgid "Add to Group" msgstr "" @@ -2593,6 +2520,11 @@ msgid "Import as Single Scene" msgstr "ВнаÑÑне на Ñцената.." #: editor/import/resource_importer_scene.cpp +#, fuzzy +msgid "Import with Separate Animations" +msgstr "ВнаÑÑне на анимации.." + +#: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials" msgstr "" @@ -2605,6 +2537,18 @@ msgid "Import with Separate Objects+Materials" msgstr "" #: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Materials+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Materials+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp #, fuzzy msgid "Import as Multiple Scenes" msgstr "ВнаÑÑне на триизмерна Ñцена" @@ -2614,38 +2558,31 @@ msgid "Import as Multiple Scenes+Materials" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Import Scene" msgstr "ВнаÑÑне на Ñцена" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Importing Scene.." msgstr "ВнаÑÑне на Ñцената.." #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Running Custom Script.." msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Couldn't load post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Invalid/broken script for post-import (check console):" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Error running post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Saving.." msgstr "" @@ -2674,579 +2611,54 @@ msgstr "" msgid "Reimport" msgstr "Повторно внаÑÑне" -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "No bit masks to import!" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path is empty." -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must be a complete resource path." -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must exist." -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Save path is empty!" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Import BitMasks" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s):" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Target Path:" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Accept" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Bit Mask" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No source font file!" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No target font resource!" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "" -"Invalid file extension.\n" -"Please use .font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Can't load/process source font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Couldn't save font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font Size:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Dest Resource:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "The quick brown fox jumps over the lazy dog." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Test:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Options:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Font Import" -msgstr "ВнаÑÑне на шрифт" - -#: 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 "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Failed opening as BMFont file." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error initializing FreeType." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Unknown font format." -msgstr "Ðепознат формат за шрифтове." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error loading font." -msgstr "Грешка при зареждането на шрифта." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Invalid font size." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Invalid font custom source." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/plugins/theme_editor_plugin.cpp -msgid "Font" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "No meshes to import!" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Single Mesh Import" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Source Mesh(es):" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Mesh" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Surface %d" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "No samples to import!" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Import Audio Samples" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Source Sample(s):" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Audio Sample" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "New Clip" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Animation Options" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Flags" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Bake FPS:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Optimizer" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Linear Error" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angular Error" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angle" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Clips" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Start(s)" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "End(s)" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Loop" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Filters" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source path is empty." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't load post-import script." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Invalid/broken script for post-import." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Error importing scene." -msgstr "Имаше грешка при внаÑÑнето на Ñцената." - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import 3D Scene" -msgstr "ВнаÑÑне на триизмерна Ñцена" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source Scene:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Same as Target Scene" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Shared" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Target Texture Folder:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Post-Process Script:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Custom Root Node Type:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Auto" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Root Node Name:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "The Following Files are Missing:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Anyway" -msgstr "ВнаÑÑне въпреки това" - -#: editor/io_plugins/editor_scene_import_plugin.cpp scene/gui/dialogs.cpp -msgid "Cancel" -msgstr "Отказ" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import & Open" -msgstr "ВнаÑÑне и отварÑне" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Edited scene has not been saved, open imported scene anyway?" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Image:" -msgstr "ВнаÑÑне на изображение:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Can't import a file over itself:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't localize path: %s (already local)" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "3D Scene Animation" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Uncompressed" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossless (PNG)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossy (WebP)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress (VRAM)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Format" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Compression Quality (WebP):" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Options" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Please specify some files!" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "At least one file needed for Atlas." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Error importing:" -msgstr "Имаше грешка при внаÑÑнето:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Only one file is required for large texture." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Max Texture Size:" +#: editor/multi_node_edit.cpp +msgid "MultiNode Set" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for Atlas (2D)" -msgstr "ВнаÑÑне на текÑтури за ÐÑ‚Ð»Ð°Ñ (двуизмерно)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cell Size:" +#: editor/node_dock.cpp +msgid "Groups" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Large Texture" +#: editor/node_dock.cpp +msgid "Select a Node to edit Signals and Groups." msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Textures (2D)" -msgstr "ВнаÑÑне на големи текÑтури (двуизмерно)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create Poly" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Base Atlas Texture" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s)" +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Insert Point" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 2D" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly (Remove Point)" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 3D" +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Remove Poly And Point" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures" -msgstr "ВнаÑÑне на текÑтури" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "2D Texture" -msgstr "Двуизмерна текÑтура" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "3D Texture" -msgstr "Триизмерна текÑтура" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Atlas Texture" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create a new polygon from scratch." msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp +#: editor/plugins/abstract_polygon_2d_editor.cpp msgid "" -"NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files to " -"the project." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Crop empty space." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Texture" -msgstr "ВнаÑÑне на голÑма текÑтура" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Load Source Image" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Slicing" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Inserting" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Saving" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save large texture:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Build Atlas For:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Loading Image:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't load image:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Converting Images" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cropping Images" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Blitting Images" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save atlas image:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save converted texture:" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid source!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid translation source!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Column" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/script_create_dialog.cpp -msgid "Language" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No items to import!" -msgstr "ÐÑма артикули за внаÑÑне!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No target path!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translations" -msgstr "ВнаÑÑне на преводи" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Couldn't import!" -msgstr "ÐеуÑпешно внаÑÑне!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translation" -msgstr "ВнаÑÑне на превода" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Source CSV:" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Ignore First Row" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Compress" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Add to Project (project.godot)" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Languages:" -msgstr "ВнаÑÑне на езици:" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Translation" -msgstr "" - -#: editor/multi_node_edit.cpp -msgid "MultiNode Set" -msgstr "" - -#: editor/node_dock.cpp -msgid "Groups" -msgstr "" - -#: editor/node_dock.cpp -msgid "Select a Node to edit Signals and Groups." +"Edit existing polygon:\n" +"LMB: Move Point.\n" +"Ctrl+LMB: Split Segment.\n" +"RMB: Erase Point." msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp @@ -3402,7 +2814,6 @@ msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp #: editor/script_create_dialog.cpp msgid "Error!" @@ -3513,10 +2924,6 @@ msgid "Delete Input" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Rename" -msgstr "" - -#: editor/plugins/animation_tree_editor_plugin.cpp msgid "Animation tree is valid." msgstr "" @@ -3572,64 +2979,182 @@ msgstr "" msgid "Filters.." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing %d Triangles:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Free" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Contents:" +msgstr "Съдържание:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "View Files" +msgstr "Преглед на файловете" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve hostname:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Triangle #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connection error, please try again." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Light Baker Setup:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't connect." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing Geometry" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't connect to host:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Fixing Lights" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response from host:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Making BVH" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Light Octree" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, return code:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Octree Texture" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Req. Failed." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Transfer to Lightmaps:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, too many redirects" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Allocating Texture #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Redirect Loop." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Baking Triangle #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Post-Processing Texture #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Bad download hash, assuming file has been tampered with." msgstr "" -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Bake!" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Expected:" msgstr "" -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Reset the lightmap octree baking process (start over)." +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Got:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed sha256 hash check" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Asset Download Error:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Fetching:" +msgstr "ИзтеглÑне:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Resolving.." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connecting.." +msgstr "Свързване.." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Requesting.." +msgstr "Запитване.." + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Error making request" +msgstr "Имаше грешка при зареждане на Ñцената." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Idle" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Retry" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download Error" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download for this asset is already in progress!" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "first" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "prev" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "next" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "last" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "All" +msgstr "Ð’Ñички" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Plugins" +msgstr "ПриÑтавки" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Sort:" +msgstr "Подреждане:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Reverse" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Category:" +msgstr "КатегориÑ:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Site:" +msgstr "МÑÑто:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Support.." +msgstr "Поддръжка" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Official" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Testing" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Assets ZIP File" msgstr "" #: editor/plugins/camera_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp msgid "Preview" msgstr "" @@ -3672,11 +3197,15 @@ msgid "Edit CanvasItem" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Change Anchors" +msgid "Anchors only" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom (%):" +msgid "Change Anchors and Margins" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Change Anchors" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3728,59 +3257,72 @@ msgid "Pan Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Lock the selected object in place (can't be moved)." +msgid "Toggles snapping" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Unlock the selected object (can be moved)." +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Makes sure the object's children are not selectable." +msgid "Snapping options" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Restores the object's children's ability to be selected." +msgid "Snap to grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp -#: editor/project_settings_editor.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Edit" +msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +msgid "Configure Snap..." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +msgid "Snap Relative" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Rotation Snap" +msgid "Use Pixel Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap Relative" +msgid "Smart snapping" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." +msgid "Snap to parent" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Pixel Snap" +msgid "Snap to node anchor" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Skeleton.." +msgid "Snap to node sides" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to other nodes" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Lock the selected object in place (can't be moved)." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Unlock the selected object (can be moved)." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Makes sure the object's children are not selectable." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Restores the object's children's ability to be selected." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3809,11 +3351,16 @@ msgid "View" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Reset" +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show helpers" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Set.." +msgid "Show rulers" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3825,7 +3372,7 @@ msgid "Frame Selection" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Anchor" +msgid "Layout" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3849,11 +3396,19 @@ msgid "Clear Pose" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Set a Value" +msgid "Drag pivot from mouse position" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Set pivot at mouse position" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Multiply grid step by 2" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap (Pixels):" +msgid "Divide grid step by 2" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3864,23 +3419,28 @@ msgstr "" msgid "Adding %s..." msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Create Node" msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Error instancing scene from %s" msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "OK :(" msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "No parent to instance a child at." msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "This operation requires a single selected node." msgstr "" @@ -3894,45 +3454,6 @@ msgid "" "Drag & drop + Alt : Change node type" msgstr "" -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Create Poly" -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly" -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly (Remove Point)" -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Create a new polygon from scratch." -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -msgid "" -"Edit existing polygon:\n" -"LMB: Move Point.\n" -"Ctrl+LMB: Split Segment.\n" -"RMB: Erase Point." -msgstr "" - #: editor/plugins/collision_polygon_editor_plugin.cpp msgid "Create Poly3D" msgstr "" @@ -3942,14 +3463,6 @@ msgid "Set Handle" msgstr "" #: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Creating Mesh Library" -msgstr "" - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Thumbnail.." -msgstr "" - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Remove item %d?" msgstr "" @@ -3972,6 +3485,26 @@ msgid "Update from Scene" msgstr "ОбновÑване от Ñцена" #: editor/plugins/curve_editor_plugin.cpp +msgid "Flat0" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Flat1" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Ease in" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Ease out" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Smoothstep" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp msgid "Modify Curve Point" msgstr "" @@ -4048,22 +3581,18 @@ msgid "Create Occluder Polygon" msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Edit existing polygon:" msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "LMB: Move Point." msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Ctrl+LMB: Split Segment." msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "RMB: Erase Point." msgstr "" @@ -4164,6 +3693,10 @@ msgid "Create Outline" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Body" msgstr "" @@ -4291,12 +3824,72 @@ msgstr "" msgid "Populate" msgstr "" -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Create Navigation Polygon" +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Bake!" +msgstr "" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Bake the navigation mesh.\n" +msgstr "" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Clear the navigation mesh." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Setting up Configuration..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Calculating grid size..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating heightfield..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Marking walkable triangles..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Constructing compact heightfield..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Eroding walkable area..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Partioning..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating contours..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating polymesh..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Converting to native navigation mesh..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Navigation Mesh Generator Setup:" +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Parsing Geometry..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Done!" msgstr "" #: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Remove Poly And Point" +msgid "Create Navigation Polygon" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4470,15 +4063,15 @@ msgid "Curve Point #" msgstr "" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Point Pos" +msgid "Set Curve Point Position" msgstr "" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve In Pos" +msgid "Set Curve In Position" msgstr "" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Out Pos" +msgid "Set Curve Out Position" msgstr "" #: editor/plugins/path_editor_plugin.cpp @@ -4538,6 +4131,14 @@ msgid "Scale Polygon" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon->UV" msgstr "" @@ -4592,63 +4193,10 @@ msgstr "" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "ПоÑтавÑне" -#: editor/plugins/rich_text_editor_plugin.cpp -msgid "Parse BBCode" -msgstr "" - -#: editor/plugins/sample_editor_plugin.cpp -msgid "Length:" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Open Sample File(s)" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "ERROR: Couldn't load sample!" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Add Sample" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Rename Sample" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Delete Sample" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "16 Bits" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "8 Bits" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Stereo" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Mono" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/script_editor_debugger.cpp -msgid "Format" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Pitch" -msgstr "" - #: editor/plugins/script_editor_plugin.cpp msgid "Clear Recent Files" msgstr "" @@ -4739,6 +4287,10 @@ msgstr "" msgid "Close All" msgstr "ЗатварÑне на вÑичко" +#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp +msgid "Run" +msgstr "ПуÑкане" + #: editor/plugins/script_editor_plugin.cpp msgid "Toggle Scripts Panel" msgstr "" @@ -4780,18 +4332,6 @@ msgid "Debug with external editor" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Window" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Left" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Right" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp msgid "Open Godot online documentation" msgstr "" @@ -4874,7 +4414,7 @@ msgstr "ИзрÑзване" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Copy" msgstr "Копиране" @@ -5138,10 +4678,6 @@ msgid "View Plane Transform." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Scaling to %s%%." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." msgstr "" @@ -5158,10 +4694,6 @@ msgid "Top View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Top" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "" @@ -5391,6 +4923,10 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Configure Snap.." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Local Coords" msgstr "" @@ -5536,6 +5072,10 @@ msgid "Speed (FPS):" msgstr "СкороÑÑ‚ (кадри в Ñекунда):" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Loop" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animation Frames" msgstr "" @@ -5548,11 +5088,12 @@ msgid "Insert Empty (After)" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Up" -msgstr "" +#, fuzzy +msgid "Move (Before)" +msgstr "ПоÑтавÑне на възелите" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Down" +msgid "Move (After)" msgstr "" #: editor/plugins/style_box_editor_plugin.cpp @@ -5715,6 +5256,10 @@ msgid "Style" msgstr "" #: editor/plugins/theme_editor_plugin.cpp +msgid "Font" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp msgid "Color" msgstr "" @@ -5764,7 +5309,7 @@ msgid "Mirror Y" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Bucket" +msgid "Paint Tile" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp @@ -5828,6 +5373,10 @@ msgid "Delete preset '%s'?" msgstr "" #: editor/project_export.cpp +msgid "Export templates for this platform are missing/corrupted: " +msgstr "" + +#: editor/project_export.cpp msgid "Presets" msgstr "" @@ -5899,19 +5448,30 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +msgid "Export templates for this platform are missing/corrupted:" +msgstr "" + +#: editor/project_export.cpp msgid "Export With Debug" msgstr "" #: editor/project_manager.cpp -msgid "Invalid project path, the path must exist!" -msgstr "ÐедейÑтвителен път. ПътÑÑ‚ трÑбва да ÑъщеÑтвува!" +msgid "The path does not exists." +msgstr "" + +#: editor/project_manager.cpp +#, fuzzy +msgid "Please choose a 'project.godot' file." +msgstr "МолÑ, изнеÑете извън папката на проекта!" #: editor/project_manager.cpp -msgid "Invalid project path, project.godot must not exist." +msgid "" +"Your project will be created in a non empty folder (you might want to create " +"a new folder)." msgstr "" #: editor/project_manager.cpp -msgid "Invalid project path, project.godot must exist." +msgid "Please choose a folder that does not contain a 'project.godot' file." msgstr "" #: editor/project_manager.cpp @@ -5919,10 +5479,26 @@ msgid "Imported Project" msgstr "ВнеÑен проект" #: editor/project_manager.cpp +msgid " " +msgstr "" + +#: editor/project_manager.cpp +msgid "It would be a good idea to name your project." +msgstr "" + +#: editor/project_manager.cpp msgid "Invalid project path (changed anything?)." msgstr "" #: editor/project_manager.cpp +msgid "Couldn't get project.godot in project path." +msgstr "" + +#: editor/project_manager.cpp +msgid "Couldn't edit project.godot in project path." +msgstr "" + +#: editor/project_manager.cpp msgid "Couldn't create project.godot in project path." msgstr "" @@ -5931,11 +5507,28 @@ msgid "The following files failed extraction from package:" msgstr "" #: editor/project_manager.cpp +#, fuzzy +msgid "Rename Project" +msgstr "Ðов проект" + +#: editor/project_manager.cpp +msgid "Couldn't get project.godot in the project path." +msgstr "" + +#: editor/project_manager.cpp +msgid "New Game Project" +msgstr "" + +#: editor/project_manager.cpp msgid "Import Existing Project" msgstr "ВнаÑÑне на ÑъщеÑтвуващ проект" #: editor/project_manager.cpp -msgid "Project Path (Must Exist):" +msgid "Create New Project" +msgstr "Създаване на нов проект" + +#: editor/project_manager.cpp +msgid "Install Project:" msgstr "" #: editor/project_manager.cpp @@ -5943,26 +5536,19 @@ msgid "Project Name:" msgstr "Име:" #: editor/project_manager.cpp -msgid "Create New Project" -msgstr "Създаване на нов проект" +#, fuzzy +msgid "Create folder" +msgstr "Създаване на папка" #: editor/project_manager.cpp msgid "Project Path:" msgstr "Път:" #: editor/project_manager.cpp -msgid "Install Project:" -msgstr "" - -#: editor/project_manager.cpp msgid "Browse" msgstr "Разглеждане" #: editor/project_manager.cpp -msgid "New Game Project" -msgstr "" - -#: editor/project_manager.cpp msgid "That's a BINGO!" msgstr "" @@ -5971,6 +5557,11 @@ msgid "Unnamed Project" msgstr "" #: editor/project_manager.cpp +#, fuzzy +msgid "Can't open project" +msgstr "Създаване на нов проект" + +#: editor/project_manager.cpp msgid "Are you sure to open more than one project?" msgstr "" @@ -6006,10 +5597,6 @@ msgid "Project List" msgstr "СпиÑък Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð¸" #: editor/project_manager.cpp -msgid "Run" -msgstr "ПуÑкане" - -#: editor/project_manager.cpp msgid "Scan" msgstr "Сканиране" @@ -6067,17 +5654,14 @@ msgid "Add Input Action Event" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Meta+" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Shift+" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Alt+" msgstr "" @@ -6138,7 +5722,7 @@ msgstr "" msgid "Joypad Axis Index:" msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Axis" msgstr "ОÑ" @@ -6158,31 +5742,31 @@ msgstr "" msgid "Add Event" msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Device" msgstr "УÑтройÑтво" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Button" msgstr "Копче" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Left Button." msgstr "ЛÑво копче." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Right Button." msgstr "ДÑÑно копче." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Middle Button." msgstr "Средно копче." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Up." msgstr "Колелцето нагоре." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Down." msgstr "Колелцето надолу." @@ -6191,7 +5775,7 @@ msgid "Add Global Property" msgstr "" #: editor/project_settings_editor.cpp -msgid "Select an setting item first!" +msgid "Select a setting item first!" msgstr "" #: editor/project_settings_editor.cpp @@ -6208,6 +5792,14 @@ msgid "Delete Item" msgstr "" #: editor/project_settings_editor.cpp +msgid "Can't contain '/' or ':'" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Already existing" +msgstr "" + +#: editor/project_settings_editor.cpp msgid "Error saving settings." msgstr "" @@ -6357,10 +5949,18 @@ msgid "New Script" msgstr "Ðов Ñкрипт" #: editor/property_editor.cpp +msgid "Make Unique" +msgstr "" + +#: editor/property_editor.cpp msgid "Show in File System" msgstr "" #: editor/property_editor.cpp +msgid "Convert To %s" +msgstr "" + +#: editor/property_editor.cpp msgid "Error loading file: Not a resource!" msgstr "" @@ -6398,6 +5998,11 @@ msgid "Select Property" msgstr "Изберете ÑвойÑтво" #: editor/property_selector.cpp +#, fuzzy +msgid "Select Virtual Method" +msgstr "Изберете метод" + +#: editor/property_selector.cpp msgid "Select Method" msgstr "Изберете метод" @@ -6425,26 +6030,6 @@ msgstr "" msgid "Reparent" msgstr "" -#: editor/resources_dock.cpp -msgid "Create New Resource" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Open Resource" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Save Resource" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Resource Tools" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Make Local" -msgstr "" - #: editor/run_settings_dialog.cpp msgid "Run Mode:" msgstr "" @@ -6571,14 +6156,6 @@ msgid "Sub-Resources:" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Edit Groups" -msgstr "" - -#: editor/scene_tree_dock.cpp -msgid "Edit Connections" -msgstr "" - -#: editor/scene_tree_dock.cpp msgid "Clear Inheritance" msgstr "" @@ -6767,6 +6344,15 @@ msgid "Invalid base path" msgstr "" #: editor/script_create_dialog.cpp +msgid "Directory of the same name exists" +msgstr "" + +#: editor/script_create_dialog.cpp +#, fuzzy +msgid "File exists, will be reused" +msgstr "Файлът ÑъщеÑтвува. ИÑкате ли да го презапишете?" + +#: editor/script_create_dialog.cpp msgid "Invalid extension" msgstr "" @@ -6807,6 +6393,10 @@ msgid "Load existing script file" msgstr "" #: editor/script_create_dialog.cpp +msgid "Language" +msgstr "" + +#: editor/script_create_dialog.cpp msgid "Inherits" msgstr "" @@ -6848,6 +6438,10 @@ msgid "Function:" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Errors" msgstr "Грешки" @@ -6928,6 +6522,10 @@ msgid "Type" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Format" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Usage" msgstr "" @@ -7003,6 +6601,23 @@ msgstr "" msgid "Change Probe Extents" msgstr "" +#: modules/gdnative/gd_native_library_editor.cpp +#, fuzzy +msgid "Library" +msgstr "ИзнаÑÑне на библиотеката" + +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Status" +msgstr "" + +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Libraries: " +msgstr "" + +#: modules/gdnative/register_types.cpp +msgid "GDNative" +msgstr "" + #: modules/gdscript/gd_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Invalid type argument to convert(), use TYPE_* constants." @@ -7010,7 +6625,7 @@ msgstr "" "Ðевалиден агрумент тип на convert(), използвайте конÑтантите започващи Ñ " "TYPE_*." -#: modules/gdscript/gd_functions.cpp +#: modules/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "ÐедоÑтатъчно байтове за разкодиране или недейÑтвителен формат." @@ -7068,10 +6683,6 @@ msgid "GridMap Duplicate Selection" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Paint" -msgstr "" - -#: modules/gridmap/grid_map_editor_plugin.cpp msgid "Snap View" msgstr "" @@ -7167,13 +6778,8 @@ msgstr "ÐаÑтройки" msgid "Pick Distance:" msgstr "" -#: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy -msgid "Tiles" -msgstr "Файл:" - -#: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Areas" +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "Builds" msgstr "" #: modules/visual_script/visual_script.cpp @@ -7365,10 +6971,18 @@ msgid "Return" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Call" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Get" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Script already has function '%s'" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Input Value" msgstr "" @@ -7756,6 +7370,12 @@ msgid "" "order for AnimatedSprite3D to display frames." msgstr "" +#: scene/3d/vehicle_body.cpp +msgid "" +"VehicleWheel serves to provide a wheel system to a VehicleBody. Please use " +"it as a child of a VehicleBody." +msgstr "" + #: scene/gui/color_picker.cpp msgid "Raw Mode" msgstr "" @@ -7765,6 +7385,10 @@ msgid "Add current color as a preset" msgstr "" #: scene/gui/dialogs.cpp +msgid "Cancel" +msgstr "Отказ" + +#: scene/gui/dialogs.cpp msgid "Alert!" msgstr "Тревога!" @@ -7772,10 +7396,6 @@ msgstr "Тревога!" msgid "Please Confirm..." msgstr "МолÑ, потвърдете..." -#: scene/gui/input_action.cpp -msgid "Ctrl+" -msgstr "" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -7804,6 +7424,106 @@ msgid "" "texture to some node for display." msgstr "" +#: scene/resources/dynamic_font.cpp +msgid "Error initializing FreeType." +msgstr "" + +#: scene/resources/dynamic_font.cpp +msgid "Unknown font format." +msgstr "Ðепознат формат за шрифтове." + +#: scene/resources/dynamic_font.cpp +msgid "Error loading font." +msgstr "Грешка при зареждането на шрифта." + +#: scene/resources/dynamic_font.cpp +msgid "Invalid font size." +msgstr "" + +#~ msgid "Exporting for %s" +#~ msgstr "ИзнаÑÑне за %s" + +#~ msgid "Re-Import" +#~ msgstr "Повторно внаÑÑне" + +#~ msgid "Current scene must be saved to re-import." +#~ msgstr "" +#~ "За да Ñе извърши повторното внаÑÑне, текущата Ñцена трÑбва да бъде " +#~ "запазена." + +#~ msgid "Save & Re-Import" +#~ msgstr "Запазване и повторно внаÑÑне" + +#~ msgid "Re-Importing" +#~ msgstr "Извършва Ñе повторно внаÑÑне" + +#, fuzzy +#~ msgid "" +#~ "\n" +#~ "Status: Needs Re-Import" +#~ msgstr "Запазване и повторно внаÑÑне" + +#~ msgid "Re-Import.." +#~ msgstr "Повторно внаÑÑне.." + +#~ msgid "Font Import" +#~ msgstr "ВнаÑÑне на шрифт" + +#~ msgid "Import 3D Scene" +#~ msgstr "ВнаÑÑне на триизмерна Ñцена" + +#~ msgid "Import Anyway" +#~ msgstr "ВнаÑÑне въпреки това" + +#~ msgid "Import & Open" +#~ msgstr "ВнаÑÑне и отварÑне" + +#~ msgid "Import Image:" +#~ msgstr "ВнаÑÑне на изображение:" + +#~ msgid "Error importing:" +#~ msgstr "Имаше грешка при внаÑÑнето:" + +#~ msgid "Import Textures for Atlas (2D)" +#~ msgstr "ВнаÑÑне на текÑтури за ÐÑ‚Ð»Ð°Ñ (двуизмерно)" + +#~ msgid "Import Large Textures (2D)" +#~ msgstr "ВнаÑÑне на големи текÑтури (двуизмерно)" + +#~ msgid "Import Textures" +#~ msgstr "ВнаÑÑне на текÑтури" + +#~ msgid "2D Texture" +#~ msgstr "Двуизмерна текÑтура" + +#~ msgid "3D Texture" +#~ msgstr "Триизмерна текÑтура" + +#~ msgid "Import Large Texture" +#~ msgstr "ВнаÑÑне на голÑма текÑтура" + +#~ msgid "No items to import!" +#~ msgstr "ÐÑма артикули за внаÑÑне!" + +#~ msgid "Import Translations" +#~ msgstr "ВнаÑÑне на преводи" + +#~ msgid "Couldn't import!" +#~ msgstr "ÐеуÑпешно внаÑÑне!" + +#~ msgid "Import Translation" +#~ msgstr "ВнаÑÑне на превода" + +#~ msgid "Import Languages:" +#~ msgstr "ВнаÑÑне на езици:" + +#~ msgid "Invalid project path, the path must exist!" +#~ msgstr "ÐедейÑтвителен път. ПътÑÑ‚ трÑбва да ÑъщеÑтвува!" + +#, fuzzy +#~ msgid "Tiles" +#~ msgstr "Файл:" + #~ msgid "Close scene? (Unsaved changes will be lost)" #~ msgstr "Да Ñе затвори ли Ñцената? (незаразените промени ще Ñе загубÑÑ‚)" @@ -7829,9 +7549,6 @@ msgstr "" #~ "За да изпълнÑва звук, SamplePlayer трÑбва да има един SampleLibrary " #~ "реÑÑƒÑ€Ñ Ð² параметъра 'samples'." -#~ msgid "Please export outside the project folder!" -#~ msgstr "МолÑ, изнеÑете извън папката на проекта!" - #~ msgid "Error exporting project!" #~ msgstr "Имаше грешка при изнаÑÑне на проекта!" diff --git a/editor/translations/bn.po b/editor/translations/bn.po index 64b0c0c528..560a88ca53 100644 --- a/editor/translations/bn.po +++ b/editor/translations/bn.po @@ -193,10 +193,9 @@ msgid "Create %d NEW tracks and insert keys?" msgstr "%d à¦à¦° জনà§à¦¯ নতà§à¦¨ টà§à¦°à§à¦¯à¦¾à¦•/পথ-সমূহ তৈরি করতে à¦à¦¬à¦‚ চাবিসমূহ পà§à¦°à¦¬à§‡à¦¶ করাতে চান?" #: editor/animation_editor.cpp editor/create_dialog.cpp -#: editor/editor_audio_buses.cpp +#: editor/editor_audio_buses.cpp editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp #: editor/plugins/mesh_instance_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp editor/project_manager.cpp #: editor/script_create_dialog.cpp msgid "Create" @@ -359,271 +358,6 @@ msgstr "শà§à¦°à§‡à¦£à§€à¦¬à¦¿à¦¨à§à¦¯à¦¾à¦¸/সারির মানের msgid "Change Array Value" msgstr "শà§à¦°à§‡à¦£à§€à¦¬à¦¿à¦¨à§à¦¯à¦¾à¦¸/সারির মান পরিবরà§à¦¤à¦¨ করà§à¦¨" -#: editor/asset_library_editor_plugin.cpp -msgid "Free" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp -msgid "Version:" -msgstr "সংসà§à¦•রণ:" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Contents:" -msgstr "ধà§à¦°à§à¦¬à¦•সমূহ:" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "View Files" -msgstr "ফাইল" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_help.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp -msgid "Description:" -msgstr "বরà§à¦£à¦¨à¦¾:" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -#: editor/project_manager.cpp -msgid "Install" -msgstr "ইনà§à¦¸à¦Ÿà¦²" - -#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp -#: editor/connections_dialog.cpp editor/export_template_manager.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -#: editor/project_settings_editor.cpp editor/property_editor.cpp -#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Close" -msgstr "বনà§à¦§ করà§à¦¨" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve hostname:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Connection error, please try again." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Can't connect." -msgstr "সংযোগ.." - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Can't connect to host:" -msgstr "নোডের সাথে সংযà§à¦•à§à¦¤ করà§à¦¨:" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response from host:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Request failed, return code:" -msgstr "আবেদনকৃত ফাইল ফরমà§à¦¯à¦¾à¦Ÿ/ধরণ অজানা:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Req. Failed." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Request failed, too many redirects" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Redirect Loop." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Bad download hash, assuming file has been tampered with." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Expected:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Got:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed sha256 hash check" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Asset Download Error:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -msgid "Success!" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Fetching:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Resolving.." -msgstr "সংরকà§à¦·à¦¿à¦¤ হচà§à¦›à§‡.." - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Connecting.." -msgstr "সংযোগ.." - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Requesting.." -msgstr "পরীকà§à¦·à¦¾à¦®à§‚লক উৎস" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Error making request" -msgstr "রিসোরà§à¦¸ সংরকà§à¦·à¦£à§‡ সমসà§à¦¯à¦¾ হয়েছে!" - -#: editor/asset_library_editor_plugin.cpp -msgid "Idle" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Retry" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Download Error" -msgstr "নীচে" - -#: editor/asset_library_editor_plugin.cpp -msgid "Download for this asset is already in progress!" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "first" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "prev" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "next" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "last" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "All" -msgstr "সকল" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/property_selector.cpp editor/quick_open.cpp -#: editor/settings_config_dialog.cpp -msgid "Search:" -msgstr "অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨ করà§à¦¨:" - -#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Search" -msgstr "অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨ করà§à¦¨" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/project_manager.cpp -msgid "Import" -msgstr "ইমà§à¦ªà§‹à¦°à§à¦Ÿ" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Plugins" -msgstr "পà§à¦²à¦¾à¦—ইন-সমূহ" - -#: editor/asset_library_editor_plugin.cpp -msgid "Sort:" -msgstr "সাজান:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Reverse" -msgstr "উলà§à¦Ÿà¦¾à¦¨/বিপরীত দিকে ফিরান" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Category:" -msgstr "বিà¦à¦¾à¦—:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Site:" -msgstr "ওয়েবসাইট:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "সমরà§à¦¥à¦¨.." - -#: editor/asset_library_editor_plugin.cpp -msgid "Official" -msgstr "অফিসিয়াল/পà§à¦°à¦¾à¦¥à¦®à¦¿à¦• উৎস" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -msgid "Community" -msgstr "কমিউনিটি/যৌথ-সামাজিক উৎস" - -#: editor/asset_library_editor_plugin.cpp -msgid "Testing" -msgstr "পরীকà§à¦·à¦¾à¦®à§‚লক উৎস" - -#: editor/asset_library_editor_plugin.cpp -msgid "Assets ZIP File" -msgstr "পà§à¦°à¦¯à¦¼à§‡à¦¾à¦œà¦¨à§€à¦¯à¦¼ উপকরণসমূহের ZIP ফাইল" - -#: editor/call_dialog.cpp -msgid "Method List For '%s':" -msgstr "'%s' à¦à¦° জনà§à¦¯ মেথডের তালিকা:" - -#: editor/call_dialog.cpp modules/visual_script/visual_script_editor.cpp -msgid "Call" -msgstr "ডাকà§à¦¨ (Call)" - -#: editor/call_dialog.cpp -msgid "Method List:" -msgstr "মেথডের তালিকা:" - -#: editor/call_dialog.cpp -msgid "Arguments:" -msgstr "মান/আরà§à¦—à§à¦®à§‡à¦¨à§à¦Ÿ-সমূহ:" - -#: editor/call_dialog.cpp -msgid "Return:" -msgstr "পà§à¦°à¦¤à§à¦¯à¦¾à¦¬à¦°à§à¦¤à¦¨:" - #: editor/code_editor.cpp msgid "Go to Line" msgstr "লাইন-ঠযান" @@ -661,6 +395,14 @@ msgstr "সমà§à¦ªà§‚রà§à¦£ শবà§à¦¦" msgid "Selection Only" msgstr "শà§à¦§à§à¦®à¦¾à¦¤à§à¦° নিরà§à¦¬à¦¾à¦šà¦¿à¦¤à¦¸à¦®à§‚হ" +#: editor/code_editor.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp +msgid "Search" +msgstr "অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨ করà§à¦¨" + #: editor/code_editor.cpp editor/editor_help.cpp msgid "Find" msgstr "সনà§à¦§à¦¾à¦¨ করà§à¦¨" @@ -693,11 +435,11 @@ msgstr "পà§à¦°à¦¤à¦¿à¦¸à§à¦¥à¦¾à¦ªà¦¨à§‡ অবহিত করà§à¦¨" msgid "Skip" msgstr "অতিকà§à¦°à¦® করে যান" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom In" msgstr "সমà§à¦ªà§à¦°à¦¸à¦¾à¦°à¦¿à¦¤ করà§à¦¨ (জà§à¦®à§ ইন)" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom Out" msgstr "সংকà§à¦šà¦¿à¦¤ করà§à¦¨ (জà§à¦®à§ আউট)" @@ -766,6 +508,20 @@ msgstr "বিলমà§à¦¬à¦¿à¦¤" msgid "Oneshot" msgstr "ওয়ান-শট" +#: editor/connections_dialog.cpp editor/dependency_editor.cpp +#: editor/export_template_manager.cpp +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Close" +msgstr "বনà§à¦§ করà§à¦¨" + #: editor/connections_dialog.cpp msgid "Connect" msgstr "সংযোগ" @@ -791,7 +547,7 @@ msgstr "সংযোগ.." msgid "Disconnect" msgstr "সংযোগ বিচà§à¦›à¦¿à¦¨à§à¦¨ করà§à¦¨" -#: editor/connections_dialog.cpp editor/node_dock.cpp +#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" msgstr "সংকেতসমূহ" @@ -808,12 +564,25 @@ msgstr "ফেবরিট/পà§à¦°à¦¿à¦¯à¦¼-সমূহ:" msgid "Recent:" msgstr "সামà§à¦ªà§à¦°à¦¤à¦¿à¦•:" +#: editor/create_dialog.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp +#: editor/quick_open.cpp editor/settings_config_dialog.cpp +msgid "Search:" +msgstr "অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨ করà§à¦¨:" + #: editor/create_dialog.cpp editor/editor_help.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp #: editor/quick_open.cpp msgid "Matches:" msgstr "মিলসমূহ:" +#: editor/create_dialog.cpp editor/editor_help.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp +#: editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "বরà§à¦£à¦¨à¦¾:" + #: editor/dependency_editor.cpp msgid "Search Replacement For:" msgstr "à¦à¦° জনà§à¦¯ পà§à¦°à¦¤à¦¿à¦¸à§à¦¥à¦¾à¦ªà¦•ের অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨ করà§à¦¨:" @@ -873,6 +642,10 @@ msgid "Owners Of:" msgstr "সà§à¦¬à¦¤à§à¦¬à¦¾à¦§à¦¿à¦•ারীসমূহ:" #: editor/dependency_editor.cpp +msgid "Remove selected files from the project? (no undo)" +msgstr "নিরà§à¦¬à¦¾à¦šà¦¿à¦¤ ফাইলসমূহ পà§à¦°à¦•লà§à¦ª হতে অপসারণ করবেন? (অফেরৎযোগà§à¦¯)" + +#: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" @@ -883,8 +656,8 @@ msgstr "" "তবà§à¦“ তাদের অপসারণ করবেন? (অফেরৎযোগà§à¦¯)" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (no undo)" -msgstr "নিরà§à¦¬à¦¾à¦šà¦¿à¦¤ ফাইলসমূহ পà§à¦°à¦•লà§à¦ª হতে অপসারণ করবেন? (অফেরৎযোগà§à¦¯)" +msgid "Cannot remove:\n" +msgstr "" #: editor/dependency_editor.cpp msgid "Error loading:" @@ -951,11 +724,6 @@ msgstr "" #: editor/editor_about.cpp #, fuzzy -msgid "Authors" -msgstr "লেখক:" - -#: editor/editor_about.cpp -#, fuzzy msgid "Project Founders" msgstr "পà§à¦°à¦•লà§à¦ª মà§à¦¯à¦¾à¦¨à§‡à¦œà¦¾à¦°" @@ -972,6 +740,40 @@ msgid "Developers" msgstr "" #: editor/editor_about.cpp +#, fuzzy +msgid "Authors" +msgstr "লেখক:" + +#: editor/editor_about.cpp +msgid "Platinum Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Mini Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Silver Donors" +msgstr "" + +#: editor/editor_about.cpp +#, fuzzy +msgid "Bronze Donors" +msgstr "কà§à¦²à§‹à¦¨ করে নীচে নিন" + +#: editor/editor_about.cpp +msgid "Donors" +msgstr "" + +#: editor/editor_about.cpp msgid "License" msgstr "" @@ -1015,6 +817,16 @@ msgid "Package Installed Successfully!" msgstr "পà§à¦¯à¦¾à¦•েজ ইনà§à¦¸à¦Ÿà¦² সফল হয়েছে!" #: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Success!" +msgstr "" + +#: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp +msgid "Install" +msgstr "ইনà§à¦¸à¦Ÿà¦²" + +#: editor/editor_asset_installer.cpp #, fuzzy msgid "Package Installer" msgstr "পà§à¦¯à¦¾à¦•েজ ইনà§à¦¸à¦Ÿà¦² সফল হয়েছে!" @@ -1068,11 +880,6 @@ msgid "Audio Bus, Drag and Drop to rearrange." msgstr "" #: editor/editor_audio_buses.cpp -#, fuzzy -msgid "Bus options" -msgstr "ডিবাগের সিদà§à¦§à¦¾à¦¨à§à¦¤à¦¸à¦®à§‚হ" - -#: editor/editor_audio_buses.cpp msgid "Solo" msgstr "" @@ -1084,6 +891,11 @@ msgstr "" msgid "Bypass" msgstr "" +#: editor/editor_audio_buses.cpp +#, fuzzy +msgid "Bus options" +msgstr "ডিবাগের সিদà§à¦§à¦¾à¦¨à§à¦¤à¦¸à¦®à§‚হ" + #: editor/editor_audio_buses.cpp editor/plugins/tile_map_editor_plugin.cpp #: editor/scene_tree_dock.cpp msgid "Duplicate" @@ -1091,6 +903,11 @@ msgstr "পà§à¦°à¦¤à¦¿à¦²à¦¿à¦ªà¦¿" #: editor/editor_audio_buses.cpp #, fuzzy +msgid "Reset Volume" +msgstr "সমà§à¦ªà§à¦°à¦¸à¦¾à¦°à¦¨/সংকোচন অপসারণ করà§à¦¨ (রিসেট জà§à¦®à§)" + +#: editor/editor_audio_buses.cpp +#, fuzzy msgid "Delete Effect" msgstr "নিরà§à¦¬à¦¾à¦šà¦¿à¦¤ সমূহ অপসারণ করà§à¦¨" @@ -1115,6 +932,11 @@ msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨ পà§à¦°à¦¤à¦¿à¦²à¦¿à¦ªà¦¿ করà§à¦¨" #: editor/editor_audio_buses.cpp #, fuzzy +msgid "Reset Bus Volume" +msgstr "সমà§à¦ªà§à¦°à¦¸à¦¾à¦°à¦¨/সংকোচন অপসারণ করà§à¦¨ (রিসেট জà§à¦®à§)" + +#: editor/editor_audio_buses.cpp +#, fuzzy msgid "Move Audio Bus" msgstr "পà§à¦°à¦•à§à¦°à¦¿à¦¯à¦¼à¦¾ সà§à¦¥à¦¾à¦¨à¦¾à¦¨à§à¦¤à¦° করà§à¦¨" @@ -1151,7 +973,8 @@ msgstr "%s সংযà§à¦•à§à¦¤ করà§à¦¨" msgid "Create a new Bus Layout." msgstr "নতà§à¦¨ রিসোরà§à¦¸ তৈরি করà§à¦¨" -#: editor/editor_audio_buses.cpp editor/script_create_dialog.cpp +#: editor/editor_audio_buses.cpp editor/property_editor.cpp +#: editor/script_create_dialog.cpp msgid "Load" msgstr "লোড" @@ -1249,7 +1072,7 @@ msgid "Rearrange Autoloads" msgstr "Autoload সমূহ পà§à¦¨à¦°à§à¦¬à¦¿à¦¨à§à¦¯à¦¸à§à¦¤ করà§à¦¨" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp scene/gui/file_dialog.cpp +#: scene/gui/file_dialog.cpp msgid "Path:" msgstr "পথ:" @@ -1257,9 +1080,7 @@ msgstr "পথ:" msgid "Node Name:" msgstr "নোডের নাম:" -#: editor/editor_autoload_settings.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp editor/project_manager.cpp +#: editor/editor_autoload_settings.cpp editor/project_manager.cpp msgid "Name" msgstr "নাম" @@ -1293,18 +1114,19 @@ msgid "Choose a Directory" msgstr "à¦à¦•টি সà§à¦¥à¦¾à¦¨ পছনà§à¦¦ করà§à¦¨" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Create Folder" msgstr "ফোলà§à¦¡à¦¾à¦° তৈরি করà§à¦¨" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: editor/editor_plugin_settings.cpp editor/plugins/theme_editor_plugin.cpp -#: editor/project_export.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp +#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp +#: scene/gui/file_dialog.cpp msgid "Name:" msgstr "নাম:" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Could not create folder." msgstr "ফোলà§à¦¡à¦¾à¦° তৈরী করা সমà§à¦à¦¬ হয়নি।" @@ -1324,30 +1146,6 @@ msgstr "পà§à¦¯à¦¾à¦•/গà§à¦šà§à¦›à¦¿à¦¤ করা" msgid "Template file not found:\n" msgstr "" -#: editor/editor_export.cpp -msgid "Added:" -msgstr "সংযোজিত:" - -#: editor/editor_export.cpp -msgid "Removed:" -msgstr "অপসারিত:" - -#: editor/editor_export.cpp -msgid "Error saving atlas:" -msgstr "à¦à¦Ÿà¦²à¦¾à¦¸/মানচিতà§à¦°à¦¾à¦¬à¦²à§€ সংরকà§à¦·à¦£à§‡ সমসà§à¦¯à¦¾ হয়েছে:" - -#: editor/editor_export.cpp -msgid "Could not save atlas subtexture:" -msgstr "à¦à¦Ÿà¦²à¦¾à¦¸/মানচিতà§à¦°à¦¾à¦¬à¦²à§€à¦° উপ-গঠনবিনà§à¦¯à¦¾à¦¸ (subtexture) সংরকà§à¦·à¦£ অসমরà§à¦¥ হয়েছে:" - -#: editor/editor_export.cpp -msgid "Exporting for %s" -msgstr "%s à¦à¦° জনà§à¦¯ à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿ (export) হচà§à¦›à§‡" - -#: editor/editor_export.cpp -msgid "Setting Up.." -msgstr "সà§à¦¥à¦¾à¦ªà¦¿à¦¤/বিনà§à¦¯à¦¸à§à¦¤ হচà§à¦›à§‡.." - #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "à¦à¦•ই নামের ফাইল উপসà§à¦¥à¦¿à¦¤, তা মà§à¦›à§‡ লিখবেন?" @@ -1432,6 +1230,11 @@ msgstr "ফেবরিট/পà§à¦°à¦¿à¦¯à¦¼à¦•ে উপরের দিকে msgid "Move Favorite Down" msgstr "ফেবরিট/পà§à¦°à¦¿à¦¯à¦¼à¦•ে নিচের দিকে নামান" +#: editor/editor_file_dialog.cpp +#, fuzzy +msgid "Go to parent folder" +msgstr "ফোলà§à¦¡à¦¾à¦° তৈরী করা সমà§à¦à¦¬ হয়নি।" + #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Directories & Files:" msgstr "পথ à¦à¦¬à¦‚ ফাইল:" @@ -1475,6 +1278,10 @@ msgstr "কà§à¦²à¦¾à¦¸à§‡à¦° তালিকা:" msgid "Search Classes" msgstr "কà§à¦²à¦¾à¦¸à§‡à¦° অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨ করà§à¦¨" +#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +msgid "Top" +msgstr "শীরà§à¦·" + #: editor/editor_help.cpp editor/property_editor.cpp msgid "Class:" msgstr "কà§à¦²à¦¾à¦¸:" @@ -1491,15 +1298,30 @@ msgstr "গৃহীত হয়েছে:" msgid "Brief Description:" msgstr "সংকà§à¦·à¦¿à¦ªà§à¦¤ বরà§à¦£à¦¨à¦¾:" +#: editor/editor_help.cpp +#, fuzzy +msgid "Members" +msgstr "সদসà§à¦¯à¦—ণ (Members):" + #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "সদসà§à¦¯à¦—ণ (Members):" #: editor/editor_help.cpp +#, fuzzy +msgid "Public Methods" +msgstr "সরà§à¦¬à¦œà¦¨à§€à¦¨/পà§à¦°à¦•াশà§à¦¯ মেথডসমূহ:" + +#: editor/editor_help.cpp msgid "Public Methods:" msgstr "সরà§à¦¬à¦œà¦¨à§€à¦¨/পà§à¦°à¦•াশà§à¦¯ মেথডসমূহ:" #: editor/editor_help.cpp +#, fuzzy +msgid "GUI Theme Items" +msgstr "GUI থিম à¦à¦° বসà§à¦¤à§à¦¸à¦®à§‚হ:" + +#: editor/editor_help.cpp msgid "GUI Theme Items:" msgstr "GUI থিম à¦à¦° বসà§à¦¤à§à¦¸à¦®à§‚হ:" @@ -1509,6 +1331,11 @@ msgstr "সিগনà§à¦¯à¦¾à¦²à¦¸/সংকেতসমূহ:" #: editor/editor_help.cpp #, fuzzy +msgid "Enumerations" +msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨à¦¸à¦®à§‚হ" + +#: editor/editor_help.cpp +#, fuzzy msgid "Enumerations:" msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨à¦¸à¦®à§‚হ" @@ -1517,18 +1344,50 @@ msgid "enum " msgstr "" #: editor/editor_help.cpp +#, fuzzy +msgid "Constants" +msgstr "ধà§à¦°à§à¦¬à¦•সমূহ:" + +#: editor/editor_help.cpp msgid "Constants:" msgstr "ধà§à¦°à§à¦¬à¦•সমূহ:" #: editor/editor_help.cpp +#, fuzzy +msgid "Description" +msgstr "বরà§à¦£à¦¨à¦¾:" + +#: editor/editor_help.cpp +#, fuzzy +msgid "Properties" +msgstr "পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿-সমূহ:" + +#: editor/editor_help.cpp msgid "Property Description:" msgstr "মান/পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿à¦° বরà§à¦£à¦¨à¦¾:" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this property. Please help us by " +"[color=$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp +#, fuzzy +msgid "Methods" +msgstr "মেথডের তালিকা:" + +#: editor/editor_help.cpp msgid "Method Description:" msgstr "মেথডের বরà§à¦£à§à¦¨à¦¾:" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this method. Please help us by [color=" +"$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp msgid "Search Text" msgstr "টেকà§à¦¸à¦Ÿ অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨ করà§à¦¨" @@ -1538,24 +1397,21 @@ msgid "Output:" msgstr " আউটপà§à¦Ÿ/ফলাফল:" #: editor/editor_log.cpp editor/plugins/animation_tree_editor_plugin.cpp -#: editor/plugins/rich_text_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_editor_debugger.cpp scene/gui/line_edit.cpp -#: scene/gui/text_edit.cpp +#: editor/property_editor.cpp editor/script_editor_debugger.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Clear" msgstr "পরিসà§à¦•ার করà§à¦¨/কà§à¦²à§€à§Ÿà¦¾à¦°" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Error saving resource!" msgstr "রিসোরà§à¦¸ সংরকà§à¦·à¦£à§‡ সমসà§à¦¯à¦¾ হয়েছে!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Save Resource As.." msgstr "রিসোরà§à¦¸ à¦à¦‡à¦°à§‚পে সংরকà§à¦·à¦£ করà§à¦¨.." -#: editor/editor_node.cpp editor/export_template_manager.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "I see.." msgstr "বà§à¦à¦²à¦¾à¦®.." @@ -1572,6 +1428,30 @@ msgid "Error while saving." msgstr "সংরকà§à¦·à¦£à§‡à¦° সময় সমসà§à¦¯à¦¾ হয়েছে।" #: editor/editor_node.cpp +#, fuzzy +msgid "Can't open '%s'." +msgstr "'..' তে পরিচালনা করা সমà§à¦à¦¬ নয়" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Error while parsing '%s'." +msgstr "সংরকà§à¦·à¦£à§‡à¦° সময় সমসà§à¦¯à¦¾ হয়েছে।" + +#: editor/editor_node.cpp +msgid "Unexpected end of file '%s'." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Missing '%s' or its dependencies." +msgstr "'%s' দৃশà§à¦¯à¦Ÿà¦¿à¦° অসংলগà§à¦¨ নিরà§à¦à¦°à¦¤à¦¾ রয়েছে:" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Error while loading '%s'." +msgstr "সংরকà§à¦·à¦£à§‡à¦° সময় সমসà§à¦¯à¦¾ হয়েছে।" + +#: editor/editor_node.cpp msgid "Saving Scene" msgstr "দৃশà§à¦¯ সংরকà§à¦·à¦¿à¦¤ হচà§à¦›à§‡" @@ -1632,6 +1512,33 @@ msgid "Restored default layout to base settings." msgstr "সাধারণ লেআউট/নকশা আদি সেটিংসে পà§à¦°à¦¤à§à¦¯à¦¾à¦¬à¦°à§à¦¤à¦¿à¦¤ হয়েছে।" #: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was imported, so it's not editable.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was instanced or inherited.\n" +"Changes to it will not be kept when saving the current scene." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource was imported, so it's not editable. Change its settings in the " +"import panel and then re-import." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This scene was imported, so changes to it will not be kept.\n" +"Instancing it or inheriting will allow making changes to it.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp msgid "Copy Params" msgstr "মানসমূহ পà§à¦°à¦¤à¦¿à¦²à¦¿à¦ªà¦¿/কপি করà§à¦¨" @@ -1810,6 +1717,12 @@ msgid "Save changes the following scene(s) before opening Project Manager?" msgstr "" #: editor/editor_node.cpp +msgid "" +"This option is deprecated. Situations where refresh must be forced are now " +"considered a bug. Please report." +msgstr "" + +#: editor/editor_node.cpp msgid "Pick a Main Scene" msgstr "à¦à¦•টি মà§à¦–à§à¦¯ দৃশà§à¦¯ মনোনীত করà§à¦¨" @@ -1836,7 +1749,7 @@ msgid "" msgstr "" #: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Ugh" msgstr "আহà§â€Œ" @@ -1849,14 +1762,15 @@ msgstr "" "(Import)' বà§à¦¯à¦¬à¦¹à¦¾à¦° করে দৃশà§à¦¯à¦Ÿà¦¿ খà§à¦²à§à¦¨, তারপর তা পà§à¦°à¦•লà§à¦ªà§‡à¦° পথের à¦à¦¿à¦¤à¦°à§‡ সংরকà§à¦·à¦£ করà§à¦¨à¥¤" #: editor/editor_node.cpp -msgid "Error loading scene." -msgstr "দৃশà§à¦¯ লোডে সমসà§à¦¯à¦¾ হয়েছে।" - -#: editor/editor_node.cpp msgid "Scene '%s' has broken dependencies:" msgstr "'%s' দৃশà§à¦¯à¦Ÿà¦¿à¦° অসংলগà§à¦¨ নিরà§à¦à¦°à¦¤à¦¾ রয়েছে:" #: editor/editor_node.cpp +#, fuzzy +msgid "Clear Recent Scenes" +msgstr "বোনà§â€Œ/হাড় পরিষà§à¦•ার করà§à¦¨" + +#: editor/editor_node.cpp msgid "Save Layout" msgstr "লেআউট/নকশা সংরকà§à¦·à¦£ করà§à¦¨" @@ -1890,7 +1804,7 @@ msgstr "বিকà§à¦·à§‡à¦ª-হীন মোড" msgid "Toggle distraction-free mode." msgstr "বিকà§à¦·à§‡à¦ª-হীন মোড" -#: editor/editor_node.cpp editor/io_plugins/editor_scene_import_plugin.cpp +#: editor/editor_node.cpp msgid "Scene" msgstr "দৃশà§à¦¯" @@ -2134,6 +2048,10 @@ msgstr "" msgid "Issue Tracker" msgstr "" +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +msgid "Community" +msgstr "কমিউনিটি/যৌথ-সামাজিক উৎস" + #: editor/editor_node.cpp msgid "About" msgstr "সমà§à¦¬à¦¨à§à¦§à§‡/সমà§à¦ªà¦°à§à¦•ে" @@ -2142,7 +2060,7 @@ msgstr "সমà§à¦¬à¦¨à§à¦§à§‡/সমà§à¦ªà¦°à§à¦•ে" msgid "Play the project." msgstr "পà§à¦°à¦•লà§à¦ªà¦Ÿà¦¿ চালান।" -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Play" msgstr "চালান" @@ -2158,7 +2076,7 @@ msgstr "দৃশà§à¦¯à¦•ে বিরতি দিন" msgid "Stop the scene." msgstr "দৃশà§à¦¯à¦Ÿà¦¿à¦•ে থামান।" -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Stop" msgstr "থামান" @@ -2231,6 +2149,16 @@ msgid "Object properties." msgstr "বসà§à¦¤à§à¦° বৈশিষà§à¦Ÿà§à¦¯à¦¸à¦®à§‚হ।" #: editor/editor_node.cpp +#, fuzzy +msgid "Changes may be lost!" +msgstr "ছবির গà§à¦°à§à¦ª পরিবরà§à¦¤à¦¨ করà§à¦¨" + +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Import" +msgstr "ইমà§à¦ªà§‹à¦°à§à¦Ÿ" + +#: editor/editor_node.cpp msgid "FileSystem" msgstr "ফাইলসিসà§à¦Ÿà§‡à¦®" @@ -2246,14 +2174,6 @@ msgstr "আউটপà§à¦Ÿ/ফলাফল" msgid "Don't Save" msgstr "" -#: editor/editor_node.cpp editor/editor_reimport_dialog.cpp -msgid "Re-Import" -msgstr "পà§à¦¨-ইমà§à¦ªà§‹à¦°à§à¦Ÿ" - -#: editor/editor_node.cpp editor/editor_plugin_settings.cpp -msgid "Update" -msgstr "হালনাগাদ" - #: editor/editor_node.cpp msgid "Import Templates From ZIP File" msgstr "ZIP ফাইল হতে টেমপà§à¦²à§‡à¦Ÿ-সমূহ ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨" @@ -2321,11 +2241,29 @@ msgstr "à¦à¦¡à¦¿à¦Ÿà¦°à§‡ খà§à¦²à§à¦¨" msgid "Open the previous Editor" msgstr "à¦à¦¡à¦¿à¦Ÿà¦°à§‡ খà§à¦²à§à¦¨" +#: editor/editor_plugin.cpp +#, fuzzy +msgid "Creating Mesh Previews" +msgstr "মেস লাইবà§à¦°à§‡à¦°à¦¿ তৈরি হচà§à¦›à§‡" + +#: editor/editor_plugin.cpp +msgid "Thumbnail.." +msgstr "থামà§à¦¬à¦¨à§‡à¦‡à¦².." + #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" msgstr "ইনà§à¦¸à¦Ÿà¦²-কৃত পà§à¦²à¦¾à¦—ইন-সমূহ:" #: editor/editor_plugin_settings.cpp +msgid "Update" +msgstr "হালনাগাদ" + +#: editor/editor_plugin_settings.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Version:" +msgstr "সংসà§à¦•রণ:" + +#: editor/editor_plugin_settings.cpp msgid "Author:" msgstr "লেখক:" @@ -2377,26 +2315,6 @@ msgstr "সà§à¦¬à§€à¦¯à¦¼" msgid "Frame #:" msgstr "ফà§à¦°à§‡à¦® #:" -#: editor/editor_reimport_dialog.cpp -msgid "Please wait for scan to complete." -msgstr "সà§à¦•à§à¦¯à¦¾à¦¨ সমà§à¦ªà¦¨à§à¦¨ হওয়া পরà§à¦¯à¦¨à§à¦¤ অনà§à¦—à§à¦°à¦¹ করে অপেকà§à¦·à¦¾ করà§à¦¨à¥¤" - -#: editor/editor_reimport_dialog.cpp -msgid "Current scene must be saved to re-import." -msgstr "পà§à¦¨à¦°à¦¾à§Ÿ-ইমà§à¦ªà§‹à¦°à§à¦Ÿ করতে বরà§à¦¤à¦®à¦¾à¦¨ দৃশà§à¦¯à¦Ÿà¦¿à¦•ে অবশà§à¦¯à¦‡ সংরকà§à¦·à¦£ করতে হবে।" - -#: editor/editor_reimport_dialog.cpp -msgid "Save & Re-Import" -msgstr "সংরকà§à¦·à¦£ à¦à¦¬à¦‚ পà§à¦¨-ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Importing" -msgstr "পà§à¦¨à¦°à¦¾à§Ÿ ইমà§à¦ªà§‹à¦°à§à¦Ÿ হচà§à¦›à§‡" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Import Changed Resources" -msgstr "পà§à¦¨-ইমà§à¦ªà§‹à¦°à§à¦Ÿà§‡ রিসোরà§à¦¸-সমূহ পরিবরà§à¦¤à¦¿à¦¤ হয়েছে" - #: editor/editor_run_native.cpp msgid "Select device from the list" msgstr "" @@ -2513,10 +2431,6 @@ msgid "Importing:" msgstr "ইমà§à¦ªà§‹à¦°à§à¦Ÿ হচà§à¦›à§‡:" #: editor/export_template_manager.cpp -msgid "Loading Export Templates" -msgstr "à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿ টেমপà§à¦²à§‡à¦Ÿà¦¸à¦®à§‚হ লোড হচà§à¦›à§‡" - -#: editor/export_template_manager.cpp #, fuzzy msgid "Current Version:" msgstr "বরà§à¦¤à¦®à¦¾à¦¨ দৃশà§à¦¯" @@ -2557,11 +2471,18 @@ msgid "Cannot navigate to '" msgstr "" #: editor/filesystem_dock.cpp -#, fuzzy +msgid "View items as a grid of thumbnails" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "View items as a list" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "" "\n" -"Status: Needs Re-Import" -msgstr "সংরকà§à¦·à¦£ à¦à¦¬à¦‚ পà§à¦¨-ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨" +"Status: Import of file failed. Please fix file and reimport manually." +msgstr "" #: editor/filesystem_dock.cpp #, fuzzy @@ -2571,46 +2492,57 @@ msgid "" msgstr "উৎস:" #: editor/filesystem_dock.cpp -msgid "Same source and destination files, doing nothing." -msgstr "ফাইলà§à¦—à§à¦²à§‹à¦° à¦à¦•ই উৎস à¦à¦¬à¦‚ গনà§à¦¤à¦¬à§à¦¯à¦¸à§à¦¥à¦¾à¦¨, কিছà§à¦‡ করা হচà§à¦›à§‡ না।" +#, fuzzy +msgid "Cannot move/rename resources root." +msgstr "ফনà§à¦Ÿà§‡à¦° উৎস লোড/পà§à¦°à¦¸à§‡à¦¸ করা সমà§à¦à¦¬ হচà§à¦›à§‡ না।" #: editor/filesystem_dock.cpp -msgid "Target file exists, can't overwrite. Delete first." -msgstr "" +#, fuzzy +msgid "Cannot move a folder into itself.\n" +msgstr "ফাইলকে তার নিজের উপরেই ইমà§à¦ªà§‹à¦°à§à¦Ÿ করা সমà§à¦à¦¬ নয়:" + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Error moving:\n" +msgstr "ইমà§à¦ªà§‹à¦°à§à¦Ÿà§‡ সমসà§à¦¯à¦¾ হয়েছে:" #: editor/filesystem_dock.cpp -msgid "Same source and destination paths, doing nothing." -msgstr "পথগà§à¦²à§‹à¦° à¦à¦•ই উৎস à¦à¦¬à¦‚ গনà§à¦¤à¦¬à§à¦¯à¦¸à§à¦¥à¦¾à¦¨, কিছà§à¦‡ করা হচà§à¦›à§‡ না।" +#, fuzzy +msgid "Unable to update dependencies:\n" +msgstr "'%s' দৃশà§à¦¯à¦Ÿà¦¿à¦° অসংলগà§à¦¨ নিরà§à¦à¦°à¦¤à¦¾ রয়েছে:" #: editor/filesystem_dock.cpp -msgid "Can't move directories to within themselves." -msgstr "সà§à¦¥à¦¾à¦¨à¦¸à¦®à§‚হকে তাদের মাà¦à§‡à¦‡ সà§à¦¥à¦¾à¦¨à¦¾à¦¨à§à¦¤à¦° করা সমà§à¦à¦¬ নয়।" +msgid "No name provided" +msgstr "" #: editor/filesystem_dock.cpp -msgid "Can't rename deps for:\n" +msgid "Provided name contains invalid characters" msgstr "" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Error moving file:\n" -msgstr "ছবি লোডে সমসà§à¦¯à¦¾ হয়েছে:" +msgid "No name provided." +msgstr "পà§à¦¨à¦ƒà¦¨à¦¾à¦®à¦•রণ করà§à¦¨ অথবা সরান.." #: editor/filesystem_dock.cpp #, fuzzy -msgid "Error moving dir:\n" -msgstr "ইমà§à¦ªà§‹à¦°à§à¦Ÿà§‡ সমসà§à¦¯à¦¾ হয়েছে:" +msgid "Name contains invalid characters." +msgstr "গà§à¦°à¦¹à¦¨à¦¯à§‹à¦—à§à¦¯ অকà§à¦·à¦°à¦¸à¦®à§‚হ:" #: editor/filesystem_dock.cpp -msgid "Can't operate on '..'" -msgstr "'..' তে পরিচালনা করা সমà§à¦à¦¬ নয়" +#, fuzzy +msgid "A file or folder with this name already exists." +msgstr "গà§à¦°à§à¦ªà§‡à¦° নাম ইতিমধà§à¦¯à§‡à¦‡ আছে!" #: editor/filesystem_dock.cpp -msgid "Pick New Name and Location For:" -msgstr "নতà§à¦¨ নাম à¦à¦¬à¦‚ অবসà§à¦¥à¦¾à¦¨ বাছাই করà§à¦¨:" +#, fuzzy +msgid "Renaming file:" +msgstr "চলক/à¦à§‡à¦°à¦¿à§Ÿà§‡à¦¬à¦²-à¦à¦° নামানà§à¦¤à¦° করà§à¦¨" #: editor/filesystem_dock.cpp -msgid "No files selected!" -msgstr "কোনো ফাইল নিরà§à¦¬à¦¾à¦šà¦¿à¦¤ হয়নি!" +#, fuzzy +msgid "Renaming folder:" +msgstr "নোড পà§à¦¨à¦ƒà¦¨à¦¾à¦®à¦•রণ করà§à¦¨" #: editor/filesystem_dock.cpp #, fuzzy @@ -2622,40 +2554,38 @@ msgid "Collapse all" msgstr "" #: editor/filesystem_dock.cpp -msgid "Show In File Manager" -msgstr "ফাইল-মà§à¦¯à¦¾à¦¨à§‡à¦œà¦¾à¦°à§‡ দেখà§à¦¨" - -#: editor/filesystem_dock.cpp -msgid "Instance" -msgstr "ইনসà§à¦Ÿà§à¦¯à¦¾à¦¨à§à¦¸" +msgid "Copy Path" +msgstr "পথ পà§à¦°à¦¤à¦¿à¦²à¦¿à¦ªà¦¿/কপি করà§à¦¨" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "নিরà§à¦à¦°à¦¤à¦¾à¦¸à¦®à§‚হ সমà§à¦ªà¦¾à¦¦à¦¨ করà§à¦¨.." +#, fuzzy +msgid "Rename.." +msgstr "পà§à¦¨à¦ƒà¦¨à¦¾à¦®à¦•রণ করà§à¦¨" #: editor/filesystem_dock.cpp -msgid "View Owners.." -msgstr "সà§à¦¬à¦¤à§à¦¬à¦¾à¦§à¦¿à¦•ারীদের দেখà§à¦¨.." +msgid "Move To.." +msgstr "à¦à¦–ানে সরান.." #: editor/filesystem_dock.cpp -msgid "Copy Path" -msgstr "পথ পà§à¦°à¦¤à¦¿à¦²à¦¿à¦ªà¦¿/কপি করà§à¦¨" +#, fuzzy +msgid "New Folder.." +msgstr "ফোলà§à¦¡à¦¾à¦° তৈরি করà§à¦¨" #: editor/filesystem_dock.cpp -msgid "Rename or Move.." -msgstr "পà§à¦¨à¦ƒà¦¨à¦¾à¦®à¦•রণ করà§à¦¨ অথবা সরান.." +msgid "Show In File Manager" +msgstr "ফাইল-মà§à¦¯à¦¾à¦¨à§‡à¦œà¦¾à¦°à§‡ দেখà§à¦¨" #: editor/filesystem_dock.cpp -msgid "Move To.." -msgstr "à¦à¦–ানে সরান.." +msgid "Instance" +msgstr "ইনসà§à¦Ÿà§à¦¯à¦¾à¦¨à§à¦¸" #: editor/filesystem_dock.cpp -msgid "Info" -msgstr "তথà§à¦¯" +msgid "Edit Dependencies.." +msgstr "নিরà§à¦à¦°à¦¤à¦¾à¦¸à¦®à§‚হ সমà§à¦ªà¦¾à¦¦à¦¨ করà§à¦¨.." #: editor/filesystem_dock.cpp -msgid "Re-Import.." -msgstr "পà§à¦¨-ইমà§à¦ªà§‹à¦°à§à¦Ÿ.." +msgid "View Owners.." +msgstr "সà§à¦¬à¦¤à§à¦¬à¦¾à¦§à¦¿à¦•ারীদের দেখà§à¦¨.." #: editor/filesystem_dock.cpp msgid "Previous Directory" @@ -2687,6 +2617,11 @@ msgstr "" msgid "Move" msgstr "সরান" +#: editor/filesystem_dock.cpp editor/plugins/animation_tree_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Rename" +msgstr "পà§à¦¨à¦ƒà¦¨à¦¾à¦®à¦•রণ করà§à¦¨" + #: editor/groups_editor.cpp msgid "Add to Group" msgstr "গà§à¦°à§à¦ª/দলে যোগ করà§à¦¨" @@ -2701,6 +2636,11 @@ msgid "Import as Single Scene" msgstr "দৃশà§à¦¯ ইমà§à¦ªà§‹à¦°à§à¦Ÿ করা হচà§à¦›à§‡.." #: editor/import/resource_importer_scene.cpp +#, fuzzy +msgid "Import with Separate Animations" +msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨à¦¸à¦®à§‚হ ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨.." + +#: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials" msgstr "" @@ -2713,6 +2653,18 @@ msgid "Import with Separate Objects+Materials" msgstr "" #: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Materials+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Materials+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp #, fuzzy msgid "Import as Multiple Scenes" msgstr "3D দৃশà§à¦¯ ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨" @@ -2722,38 +2674,31 @@ msgid "Import as Multiple Scenes+Materials" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Import Scene" msgstr "দৃশà§à¦¯ ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Importing Scene.." msgstr "দৃশà§à¦¯ ইমà§à¦ªà§‹à¦°à§à¦Ÿ করা হচà§à¦›à§‡.." #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Running Custom Script.." msgstr "সà§à¦¬à¦¨à¦¿à¦°à§à¦®à¦¿à¦¤ সà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ চালানো হচà§à¦›à§‡.." #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Couldn't load post-import script:" msgstr "ইমà§à¦ªà§‹à¦°à§à¦Ÿ-পরবরà§à¦¤à§€ সà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ লোড করা সমà§à¦à¦¬ হয়নি:" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Invalid/broken script for post-import (check console):" msgstr "ইমà§à¦ªà§‹à¦°à§à¦Ÿ-পরবরà§à¦¤à§€ সà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ অকারà§à¦¯à¦•র/তà§à¦°à§à¦Ÿà¦¿à¦ªà§‚রà§à¦£ (কনসোল দেখà§à¦¨):" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Error running post-import script:" msgstr "ইমà§à¦ªà§‹à¦°à§à¦Ÿ-পরবরà§à¦¤à§€ সà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ চালানোয় সমসà§à¦¯à¦¾ হয়েছে:" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Saving.." msgstr "সংরকà§à¦·à¦¿à¦¤ হচà§à¦›à§‡.." @@ -2784,590 +2729,56 @@ msgstr "পà§à¦°à¦¿à¦¸à§‡à¦Ÿ.." msgid "Reimport" msgstr "পà§à¦¨-ইমà§à¦ªà§‹à¦°à§à¦Ÿ" -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "No bit masks to import!" -msgstr "ইমà§à¦ªà§‹à¦°à§à¦Ÿ করার জনà§à¦¯ কোনো বিট মাসà§à¦• নেই!" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path is empty." -msgstr "উদà§à¦¦à§‡à¦¶à§à¦¯à¦¿à¦¤ পথটি খালি।" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must be a complete resource path." -msgstr "উদà§à¦¦à§‡à¦¶à§à¦¯à¦¿à¦¤ পথটি অবশà§à¦¯à¦‡ à¦à¦•টি সমà§à¦ªà§à¦°à§à¦£ রিসোরà§à¦¸ পথ হতে হবে।" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must exist." -msgstr "উদà§à¦¦à§‡à¦¶à§à¦¯à¦¿à¦¤ পথটি অবশà§à¦¯à¦‡ বিদà§à¦¯à¦®à¦¾à¦¨ হতে হবে।" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Save path is empty!" -msgstr "সংরকà§à¦·à¦£à§‡à¦° পথটি খালি!" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Import BitMasks" -msgstr "BitMasks ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s):" -msgstr "টেকà§à¦¸à¦¾à¦°(সমূহ)-à¦à¦° উৎস:" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Target Path:" -msgstr "উদà§à¦¦à§‡à¦¶à§à¦¯à¦¿à¦¤ পথ:" +#: editor/multi_node_edit.cpp +msgid "MultiNode Set" +msgstr "মালà§à¦Ÿà¦¿-নোড সà§à¦¥à¦¾à¦ªà¦¨ করà§à¦¨" -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Accept" -msgstr "গà§à¦°à¦¹à¦£ করà§à¦¨" +#: editor/node_dock.cpp +msgid "Groups" +msgstr "দলসমূহ" -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Bit Mask" -msgstr "বিট-মাসà§à¦• (Bit Mask)" +#: editor/node_dock.cpp +msgid "Select a Node to edit Signals and Groups." +msgstr "সিগনà§à¦¯à¦¾à¦²-সমূহ à¦à¦¬à¦‚ দলসমূহ সমà§à¦ªà¦¾à¦¦à¦¨ করতে à¦à¦•টি নোড নিরà§à¦¬à¦¾à¦šà¦¨ করà§à¦¨à¥¤" -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No source font file!" -msgstr "ফনà§à¦Ÿà§‡à¦° কোনো উৎস ফাইল নেই!" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create Poly" +msgstr "Poly তৈরি করà§à¦¨" -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No target font resource!" -msgstr "ফনà§à¦Ÿà§‡à¦° কোনো উদà§à¦¦à§‡à¦¶à§à¦¯à¦¿à¦¤ রিসোরà§à¦¸ নেই!" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly" +msgstr "Poly সমà§à¦ªà¦¾à¦¦à¦¨ করà§à¦¨" -#: editor/io_plugins/editor_font_import_plugin.cpp +#: editor/plugins/abstract_polygon_2d_editor.cpp #, fuzzy -msgid "" -"Invalid file extension.\n" -"Please use .font." -msgstr "" -"ফাইলের অগà§à¦°à¦¹à¦¨à¦¯à§‹à¦—à§à¦¯ à¦à¦•à§à¦¸à¦Ÿà§‡à¦¨à¦¶à¦¨à¥¤\n" -"অনà§à¦—à§à¦°à¦¹ করে .fnt বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨à¥¤" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Can't load/process source font." -msgstr "ফনà§à¦Ÿà§‡à¦° উৎস লোড/পà§à¦°à¦¸à§‡à¦¸ করা সমà§à¦à¦¬ হচà§à¦›à§‡ না।" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Couldn't save font." -msgstr "ফনà§à¦Ÿ সংরকà§à¦·à¦£ করা সমà§à¦à¦¬ হয়নি।" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font:" -msgstr "ফনà§à¦Ÿà§‡à¦° উৎস:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font Size:" -msgstr "উৎস ফনà§à¦Ÿà§‡à¦° আকার:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Dest Resource:" -msgstr "রিসোরà§à¦¸à§‡à¦° গনà§à¦¤à¦¬à§à¦¯à¦¸à§à¦¥à¦¾à¦¨:" - -#: 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.)।" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Test:" -msgstr "পরীকà§à¦·à¦¾:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Options:" -msgstr "সিদà§à¦§à¦¾à¦¨à§à¦¤à¦¸à¦®à§‚হ (অপশন):" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Font Import" -msgstr "ফনà§à¦Ÿ ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨" - -#: 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 "" -"à¦à¦‡ ফাইলটি ইতিমধà§à¦¯à§‡à¦‡ à¦à¦•টি Godot ফনà§à¦Ÿ ফাইল, পরিবরà§à¦¤à§‡ অনà§à¦—à§à¦°à¦¹ করে BMFont ধরণের ফাইল " -"পà§à¦°à¦¦à¦¾à¦¨ করà§à¦¨à¥¤" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Failed opening as BMFont file." -msgstr "BMFont ফাইল খোলা বà§à¦¯à¦°à§à¦¥ হয়েছে।" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error initializing FreeType." -msgstr "FreeType আরমà§à¦à§‡ সমসà§à¦¯à¦¾ হয়েছে।" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Unknown font format." -msgstr "অজানা ধরনের ফনà§à¦Ÿà¥¤" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error loading font." -msgstr "ফনà§à¦Ÿ তà§à¦²à¦¤à§‡/লোডে সমসà§à¦¯à¦¾ হয়েছে।" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Invalid font size." -msgstr "ফনà§à¦Ÿà§‡à¦° আকার অগà§à¦°à¦¹à¦¨à¦¯à§‹à¦—à§à¦¯à¥¤" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Invalid font custom source." -msgstr "সà§à¦¬à¦¨à¦¿à¦°à§à¦®à¦¿à¦¤ ফনà§à¦Ÿà§‡à¦° অগà§à¦°à¦¹à¦¨à¦¯à§‹à¦—à§à¦¯ উৎস।" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/plugins/theme_editor_plugin.cpp -msgid "Font" -msgstr "ফনà§à¦Ÿ" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "No meshes to import!" -msgstr "ইমà§à¦ªà§‹à¦°à§à¦Ÿ করার মতো কোনো মেস নেই!" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Single Mesh Import" -msgstr "à¦à¦•ক মেস ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Source Mesh(es):" -msgstr "মেস(সমূহ)-à¦à¦° উৎস:" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Mesh" -msgstr "মেস" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Surface %d" -msgstr "পৃষà§à¦ তল %d" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "No samples to import!" -msgstr "ইমà§à¦ªà§‹à¦°à§à¦Ÿ করার মতো কোনো নমà§à¦¨à¦¾ নেই!" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Import Audio Samples" -msgstr "শবà§à¦¦à§‡à¦° নমà§à¦¨à¦¾à¦¸à¦®à§‚হ ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Source Sample(s):" -msgstr "নমà§à¦¨à¦¾(সমূহ)-à¦à¦° উৎস:" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Audio Sample" -msgstr "শবà§à¦¦à§‡à¦° নমà§à¦¨à¦¾" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "New Clip" -msgstr "নতà§à¦¨ কà§à¦²à¦¿à¦ª" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Animation Options" -msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨à§‡à¦° সিদà§à¦§à¦¾à¦¨à§à¦¤à¦¸à¦®à§‚হ" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Flags" -msgstr "পতাকাসমূহ" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Bake FPS:" -msgstr "সিদà§à¦§ FPS:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Optimizer" -msgstr "পরিমারà§à¦œà¦•" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Linear Error" -msgstr "সরà§à¦¬à§‡à¦¾à¦šà§à¦š রৈখিক à¦à§à¦²/সমসà§à¦¯à¦¾" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angular Error" -msgstr "সরà§à¦¬à§‡à¦¾à¦šà§à¦š কৌণিক à¦à§à¦²/সমসà§à¦¯à¦¾" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angle" -msgstr "সরà§à¦¬à§‡à¦¾à¦šà§à¦š কোণ" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Clips" -msgstr "কà§à¦²à¦¿à¦ªà¦¸à¦®à§‚হ" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Start(s)" -msgstr "আরমà§à¦(সমূহ)" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "End(s)" -msgstr "সমাপà§à¦¤à¦¿(সমূহ)" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Loop" -msgstr "লà§à¦ª" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Filters" -msgstr "ফিলà§à¦Ÿà¦¾à¦°à¦¸à¦®à§‚হ" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source path is empty." -msgstr "উৎসের পথটি খালি।" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't load post-import script." -msgstr "ইমà§à¦ªà§‹à¦°à§à¦Ÿ-পরবরà§à¦¤à§€ সà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ লোড করা সমà§à¦à¦¬ হয়নি।" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Invalid/broken script for post-import." -msgstr "ইমà§à¦ªà§‹à¦°à§à¦Ÿ-পরবরà§à¦¤à§€ সà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ অকারà§à¦¯à¦•র/তà§à¦°à§à¦Ÿà¦¿à¦ªà§‚রà§à¦£à¥¤" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Error importing scene." -msgstr "দৃশà§à¦¯ ইমà§à¦ªà§‹à¦°à§à¦Ÿà§‡ সমসà§à¦¯à¦¾ হয়েছে।" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import 3D Scene" -msgstr "3D দৃশà§à¦¯ ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source Scene:" -msgstr "উৎস দৃশà§à¦¯:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Same as Target Scene" -msgstr "উদà§à¦¦à§‡à¦¶à§à¦¯à¦¿à¦¤ দৃশà§à¦¯à§‡à¦° নà§à¦¯à¦¾à§Ÿ" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Shared" -msgstr "শেয়ারকৃত" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Target Texture Folder:" -msgstr "গঠনবিনà§à¦¯à¦¾à¦¸à§‡à¦° উদà§à¦¦à§‡à¦¶à§à¦¯à¦¿à¦¤ ফোলà§à¦¡à¦¾à¦°:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Post-Process Script:" -msgstr "পà§à¦°à¦•à§à¦°à¦¿à¦¯à¦¼à¦¾-পরবরà§à¦¤à§€ সà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Custom Root Node Type:" -msgstr "সà§à¦¬à¦¨à¦¿à¦°à§à¦®à¦¿à¦¤ মূল নোডের ধরণ:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Auto" -msgstr "সà§à¦¬à§Ÿà¦‚কà§à¦°à¦¿à§Ÿ" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Root Node Name:" -msgstr "মূল নোডের নাম:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "The Following Files are Missing:" -msgstr "নিমà§à¦¨à§‹à¦•à§à¦¤ ফাইলসমূহ অনà§à¦ªà¦¸à§à¦¥à¦¿à¦¤:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Anyway" -msgstr "যেকোনো উপায়েই ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨" - -#: editor/io_plugins/editor_scene_import_plugin.cpp scene/gui/dialogs.cpp -msgid "Cancel" -msgstr "বাতিল" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import & Open" -msgstr "ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨ à¦à¦¬à¦‚ খà§à¦²à§à¦¨" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Edited scene has not been saved, open imported scene anyway?" -msgstr "সমà§à¦ªà¦¾à¦¦à¦¿à¦¤ দৃশà§à¦¯ সংরকà§à¦·à¦£ করা হয়নি, তবà§à¦“ ইমà§à¦ªà§‹à¦°à§à¦Ÿ করা দৃশà§à¦¯à¦Ÿà¦¿ খà§à¦²à¦¬à§‡à¦¨?" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Image:" -msgstr "ছবি ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Can't import a file over itself:" -msgstr "ফাইলকে তার নিজের উপরেই ইমà§à¦ªà§‹à¦°à§à¦Ÿ করা সমà§à¦à¦¬ নয়:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't localize path: %s (already local)" -msgstr "পথ সà§à¦¥à¦¾à¦¨à§€à¦¯à¦¼à¦•রণ সমà§à¦à¦¬ হচà§à¦›à§‡ না: %s (ইতিমধà§à¦¯à§‡à¦‡ সà§à¦¥à¦¾à¦¨à§€à¦¯à¦¼)" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "3D Scene Animation" -msgstr "3D দৃশà§à¦¯à§‡à¦° অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Uncompressed" -msgstr "অসংকà§à¦šà¦¿à¦¤" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossless (PNG)" -msgstr "ধà§à¦¬à¦‚সবিহীন সঙà§à¦•োচন (PNG)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossy (WebP)" -msgstr "ধà§à¦¬à¦‚সাতà§à¦®à¦• সঙà§à¦•োচন (WebP)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress (VRAM)" -msgstr "সঙà§à¦•োচন (VRAM)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Format" -msgstr "গঠনবিনà§à¦¯à¦¾à¦¸à§‡à¦° ফরমà§à¦¯à¦¾à¦Ÿ" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Compression Quality (WebP):" -msgstr "গঠনবিনà§à¦¯à¦¾à¦¸ সঙà§à¦•োচনের গà§à¦£à¦®à¦¾à¦¨ (WebP):" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Options" -msgstr "গঠনবিনà§à¦¯à¦¾à¦¸à§‡à¦° সিদà§à¦§à¦¾à¦¨à§à¦¤ (অপশন)-সমূহ" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Please specify some files!" -msgstr "অনà§à¦—à§à¦°à¦¹ করে কিছৠফাইল নিরà§à¦¦à¦¿à¦·à§à¦Ÿ করে দিন!" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "At least one file needed for Atlas." -msgstr "à¦à¦Ÿà¦²à¦¾à¦¸/মানচিতà§à¦°à¦¾à¦¬à¦²à§€à¦° জনà§à¦¯ কমপকà§à¦·à§‡ à¦à¦•টি ফাইল পà§à¦°à¦¯à¦¼à§‹à¦œà¦¨à¥¤" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Error importing:" -msgstr "ইমà§à¦ªà§‹à¦°à§à¦Ÿà§‡ সমসà§à¦¯à¦¾ হয়েছে:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Only one file is required for large texture." -msgstr "বৃহৎ গঠনবিনà§à¦¯à¦¾à¦¸à§‡à¦° জনà§à¦¯ শà§à¦§à§à¦®à¦¾à¦¤à§à¦° à¦à¦•টি ফাইল পà§à¦°à§Ÿà§‹à¦œà¦¨à¥¤" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Max Texture Size:" -msgstr "গঠনবিনà§à¦¯à¦¾à¦¸à§‡à¦° সরà§à¦¬à§‡à¦¾à¦šà§à¦š আকার:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for Atlas (2D)" -msgstr "à¦à¦Ÿà¦²à¦¾à¦¸/মানচিতà§à¦°à¦¾à¦¬à¦²à§€à¦° জনà§à¦¯ গঠনবিনà§à¦¯à¦¾à¦¸ ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨ (2D)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cell Size:" -msgstr "সেল (Cell)-à¦à¦° আকার:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Large Texture" -msgstr "বৃহৎ গঠনবিনà§à¦¯à¦¾à¦¸" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Textures (2D)" -msgstr "বৃহৎ গঠনবিনà§à¦¯à¦¾à¦¸ ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨ (2D)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture" -msgstr "গঠনবিনà§à¦¯à¦¾à¦¸à§‡à¦° উৎস" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Base Atlas Texture" -msgstr "গোড়ার à¦à¦Ÿà¦²à¦¾à¦¸/মানচিতà§à¦°à¦¾à¦¬à¦²à§€à¦° গঠনবিনà§à¦¯à¦¾à¦¸" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s)" -msgstr "গঠনবিনà§à¦¯à¦¾à¦¸(সমূহ)-à¦à¦° উৎস" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 2D" -msgstr "2D-à¦à¦° জনà§à¦¯ গঠনবিনà§à¦¯à¦¾à¦¸à¦¸à¦®à§‚হ ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 3D" -msgstr "3D-à¦à¦° জনà§à¦¯ গঠনবিনà§à¦¯à¦¾à¦¸à¦¸à¦®à§‚হ ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures" -msgstr "গঠনবিনà§à¦¯à¦¾à¦¸à¦¸à¦®à§‚হ ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨" +msgid "Insert Point" +msgstr "সনà§à¦¨à¦¿à¦¬à§‡à¦¶à¦¿à¦¤ হচà§à¦›à§‡" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "2D Texture" -msgstr "2D গঠনবিনà§à¦¯à¦¾à¦¸" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly (Remove Point)" +msgstr "Poly সমà§à¦ªà¦¾à¦¦à¦¨ করà§à¦¨ (বিনà§à¦¦à§ অপসারণ করà§à¦¨)" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "3D Texture" -msgstr "3D গঠনবিনà§à¦¯à¦¾à¦¸" +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Remove Poly And Point" +msgstr "পলি à¦à¦¬à¦‚ বিনà§à¦¦à§ অপসারণ করà§à¦¨" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Atlas Texture" -msgstr "à¦à¦Ÿà¦²à¦¾à¦¸/মানচিতà§à¦°à¦¾à¦¬à¦²à§€à¦° গঠনবিনà§à¦¯à¦¾à¦¸" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create a new polygon from scratch." +msgstr "আরমà§à¦ হতে নতà§à¦¨ polygon তৈরি করà§à¦¨à¥¤" -#: editor/io_plugins/editor_texture_import_plugin.cpp +#: editor/plugins/abstract_polygon_2d_editor.cpp msgid "" -"NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files to " -"the project." +"Edit existing polygon:\n" +"LMB: Move Point.\n" +"Ctrl+LMB: Split Segment.\n" +"RMB: Erase Point." msgstr "" -"নোটিশ: 2D টেকà§à¦¸à¦šà¦¾à¦° (texture) ইমà§à¦ªà§‹à¦°à§à¦Ÿ (import) করা অতà§à¦¯à¦¾à¦¬à¦¶à§à¦¯à¦• নয়। শà§à¦§à§à¦®à¦¾à¦¤à§à¦° png/jpg " -"ফাইলসমূহ পà§à¦°à¦•লà§à¦ªà§‡ পà§à¦°à¦¤à¦¿à¦²à¦¿à¦ªà¦¿/কপি করà§à¦¨à¥¤" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Crop empty space." -msgstr "খালি সà§à¦¥à¦¾à¦¨ ছেà¦à¦Ÿà§‡ ফেলà§à¦¨à¥¤" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture" -msgstr "গঠনবিনà§à¦¯à¦¾à¦¸" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Texture" -msgstr "বৃহৎ গঠনবিনà§à¦¯à¦¾à¦¸ ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Load Source Image" -msgstr "উৎস হতে ছবি লোড করà§à¦¨" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Slicing" -msgstr "টà§à¦•রো করà§à¦¨" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Inserting" -msgstr "সনà§à¦¨à¦¿à¦¬à§‡à¦¶à¦¿à¦¤ হচà§à¦›à§‡" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Saving" -msgstr "সংরকà§à¦·à¦¿à¦¤ হচà§à¦›à§‡" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save large texture:" -msgstr "বৃহৎ গঠনবিনà§à¦¯à¦¾à¦¸ সংরকà§à¦·à¦£ করা সমà§à¦à¦¬ হচà§à¦›à§‡ না:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Build Atlas For:" -msgstr "à¦à¦Ÿà¦²à¦¾à¦¸/মানচিতà§à¦°à¦¾à¦¬à¦²à§€ নিরà§à¦®à¦¾à¦£ করà§à¦¨:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Loading Image:" -msgstr "ছবি লোড করা হচà§à¦›à§‡:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't load image:" -msgstr "ছবি লোড করা সমà§à¦à¦¬ হচà§à¦›à§‡ না:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Converting Images" -msgstr "ছবিসমূহ রূপানà§à¦¤à¦° করা হচà§à¦›à§‡" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cropping Images" -msgstr "ছবিসমূহ ছাà¦à¦Ÿà¦¾ হচà§à¦›à§‡" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Blitting Images" -msgstr "ছবিসমূহ বà§à¦²à¦¿à¦Ÿà¦¿à¦‚ (Blitting) করা হচà§à¦›à§‡" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save atlas image:" -msgstr "à¦à¦Ÿà¦²à¦¾à¦¸/মানচিতà§à¦°à¦¾à¦¬à¦²à§€à¦° ছবি সংরকà§à¦·à¦£ করা সমà§à¦à¦¬ হচà§à¦›à§‡ না:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save converted texture:" -msgstr "রূপানà§à¦¤à¦°à¦¿à¦¤ গঠনবিনà§à¦¯à¦¾à¦¸ সংরকà§à¦·à¦£ করা সমà§à¦à¦¬ হচà§à¦›à§‡ না:" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid source!" -msgstr "অকারà§à¦¯à¦•র উৎস!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid translation source!" -msgstr "অকারà§à¦¯à¦•র অনà§à¦¬à¦¾à¦¦à§‡à¦° উৎস!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Column" -msgstr "কলাম" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/script_create_dialog.cpp -msgid "Language" -msgstr "à¦à¦¾à¦·à¦¾" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No items to import!" -msgstr "ইমà§à¦ªà§‹à¦°à§à¦Ÿ করার মতো কোনো বসà§à¦¤à§ নেই!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No target path!" -msgstr "কোনো উদà§à¦¦à§‡à¦¶à§à¦¯à¦¿à¦¤ পথ নেই!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translations" -msgstr "অনà§à¦¬à¦¾à¦¦à¦¸à¦®à§‚হ ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Couldn't import!" -msgstr "ইমà§à¦ªà§‹à¦°à§à¦Ÿ করা সমà§à¦à¦¬ হচà§à¦›à§‡ না!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translation" -msgstr "অনà§à¦¬à¦¾à¦¦ ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Source CSV:" -msgstr "CSV-à¦à¦° উৎস:" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Ignore First Row" -msgstr "পà§à¦°à¦¥à¦® সারি অগà§à¦°à¦¾à¦¹à§à¦¯ করà§à¦¨" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Compress" -msgstr "সঙà§à¦•োচন করà§à¦¨" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -#, fuzzy -msgid "Add to Project (project.godot)" -msgstr "পà§à¦°à¦•লà§à¦ªà§‡ সংযà§à¦•à§à¦¤ করà§à¦¨ (engine.cfg)" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Languages:" -msgstr "à¦à¦¾à¦·à¦¾à¦¸à¦®à§‚হ ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨:" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Translation" -msgstr "অনà§à¦¬à¦¾à¦¦" - -#: editor/multi_node_edit.cpp -msgid "MultiNode Set" -msgstr "মালà§à¦Ÿà¦¿-নোড সà§à¦¥à¦¾à¦ªà¦¨ করà§à¦¨" - -#: editor/node_dock.cpp -msgid "Groups" -msgstr "দলসমূহ" - -#: editor/node_dock.cpp -msgid "Select a Node to edit Signals and Groups." -msgstr "সিগনà§à¦¯à¦¾à¦²-সমূহ à¦à¦¬à¦‚ দলসমূহ সমà§à¦ªà¦¾à¦¦à¦¨ করতে à¦à¦•টি নোড নিরà§à¦¬à¦¾à¦šà¦¨ করà§à¦¨à¥¤" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Toggle Autoplay" @@ -3523,7 +2934,6 @@ msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨à§‡à¦° নাম:" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp #: editor/script_create_dialog.cpp msgid "Error!" @@ -3634,10 +3044,6 @@ msgid "Delete Input" msgstr "ইনপà§à¦Ÿ অপসারণ করà§à¦¨" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Rename" -msgstr "পà§à¦¨à¦ƒà¦¨à¦¾à¦®à¦•রণ করà§à¦¨" - -#: editor/plugins/animation_tree_editor_plugin.cpp msgid "Animation tree is valid." msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨à§‡à¦° তালিকাটি কারà§à¦¯à¦•র।" @@ -3693,65 +3099,191 @@ msgstr "নোড ফিলà§à¦Ÿà¦¾à¦°à¦¸à¦®à§‚হ সমà§à¦ªà¦¾à¦¦à¦¨ কর msgid "Filters.." msgstr "ফিলà§à¦Ÿà¦¾à¦°à¦¸à¦®à§‚হ.." -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing %d Triangles:" -msgstr "%d টি তà§à¦°à¦¿à¦à§à¦œ বিশà§à¦²à§‡à¦·à¦£ করা হচà§à¦›à§‡:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Free" +msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Triangle #" -msgstr "তà§à¦°à¦¿à¦à§à¦œ #" +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Contents:" +msgstr "ধà§à¦°à§à¦¬à¦•সমূহ:" -#: editor/plugins/baked_light_baker.cpp -msgid "Light Baker Setup:" -msgstr "লাইটà§â€Œ সিদà§à¦§/বেকà§â€Œ-à¦à¦° সেটআপ:" +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "View Files" +msgstr "ফাইল" -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing Geometry" -msgstr "জà§à¦¯à¦¾à¦®à¦¿à¦¤à¦¿à¦•-আকার বিশà§à¦²à§‡à¦·à¦£ করা হচà§à¦›à§‡" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve hostname:" +msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Fixing Lights" -msgstr "লাইটà§â€Œà¦¸à¦®à§‚হ ঠিক করা হচà§à¦›à§‡" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve." +msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Making BVH" -msgstr "BVH তৈরি করা হচà§à¦›à§‡" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connection error, please try again." +msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Light Octree" -msgstr "লাইটের ওকটà§à¦°à§€ (octree) তৈরি করা হচà§à¦›à§‡" +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Can't connect." +msgstr "সংযোগ.." -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Octree Texture" -msgstr "ওকটà§à¦°à§€ (octree) গঠনবিনà§à¦¯à¦¾à¦¸ তৈরি করা হচà§à¦›à§‡" +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Can't connect to host:" +msgstr "নোডের সাথে সংযà§à¦•à§à¦¤ করà§à¦¨:" -#: editor/plugins/baked_light_baker.cpp -msgid "Transfer to Lightmaps:" -msgstr "লাইটà§à¦®à§à¦¯à¦¾à¦ªà§‡ হসà§à¦¤à¦¾à¦¨à§à¦¤à¦° করà§à¦¨:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response from host:" +msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Allocating Texture #" -msgstr "গঠনবিনà§à¦¯à¦¾à¦¸ বণà§à¦Ÿà¦¿à¦¤ হচà§à¦›à§‡ #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response." +msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Baking Triangle #" -msgstr "তà§à¦°à¦¿à¦à§à¦œ সিদà§à¦§/বেকà§â€Œ করা হচà§à¦›à§‡ #" +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Request failed, return code:" +msgstr "আবেদনকৃত ফাইল ফরমà§à¦¯à¦¾à¦Ÿ/ধরণ অজানা:" -#: editor/plugins/baked_light_baker.cpp -msgid "Post-Processing Texture #" -msgstr "গঠনবিনà§à¦¯à¦¾à¦¸à§‡à¦° পà§à¦°à¦•à§à¦°à¦¿à¦¯à¦¼à¦¾-পরবরà§à¦¤à§€ পà§à¦°à¦•à§à¦°à¦¿à¦¯à¦¼à¦¾à¦•রণ #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Req. Failed." +msgstr "" -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Bake!" -msgstr "সিদà§à¦§/বেকà§â€Œ!" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, too many redirects" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Redirect Loop." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Bad download hash, assuming file has been tampered with." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Expected:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Got:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed sha256 hash check" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Asset Download Error:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Fetching:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Resolving.." +msgstr "সংরকà§à¦·à¦¿à¦¤ হচà§à¦›à§‡.." + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Connecting.." +msgstr "সংযোগ.." + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Requesting.." +msgstr "পরীকà§à¦·à¦¾à¦®à§‚লক উৎস" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Error making request" +msgstr "রিসোরà§à¦¸ সংরকà§à¦·à¦£à§‡ সমসà§à¦¯à¦¾ হয়েছে!" -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Reset the lightmap octree baking process (start over)." +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Idle" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Retry" msgstr "" -"লাইটà§à¦®à§à¦¯à¦¾à¦ª ওকটà§à¦°à§€à¦° (octree) সিদà§à¦§/বেকà§â€Œ-à¦à¦° পà§à¦°à¦•à§à¦°à¦¿à¦¯à¦¼à¦¾à¦•রণ পà§à¦¨:সà§à¦¥à¦¾à¦ªà¦¨ করà§à¦¨ (পà§à¦¨à¦°à¦¾à¦°à¦®à§à¦)।" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Download Error" +msgstr "নীচে" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download for this asset is already in progress!" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "first" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "prev" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "next" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "last" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "All" +msgstr "সকল" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Plugins" +msgstr "পà§à¦²à¦¾à¦—ইন-সমূহ" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Sort:" +msgstr "সাজান:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Reverse" +msgstr "উলà§à¦Ÿà¦¾à¦¨/বিপরীত দিকে ফিরান" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Category:" +msgstr "বিà¦à¦¾à¦—:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Site:" +msgstr "ওয়েবসাইট:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Support.." +msgstr "সমরà§à¦¥à¦¨.." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Official" +msgstr "অফিসিয়াল/পà§à¦°à¦¾à¦¥à¦®à¦¿à¦• উৎস" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Testing" +msgstr "পরীকà§à¦·à¦¾à¦®à§‚লক উৎস" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Assets ZIP File" +msgstr "পà§à¦°à¦¯à¦¼à§‡à¦¾à¦œà¦¨à§€à¦¯à¦¼ উপকরণসমূহের ZIP ফাইল" #: editor/plugins/camera_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp msgid "Preview" msgstr "পà§à¦°à¦¿à¦à¦¿à¦‰" @@ -3794,12 +3326,18 @@ msgid "Edit CanvasItem" msgstr "CanvasItem সমà§à¦ªà¦¾à¦¦à¦¨ করà§à¦¨" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Change Anchors" +#, fuzzy +msgid "Anchors only" +msgstr "অà§à¦¯à¦¾à¦‚কর" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Change Anchors and Margins" msgstr "অà§à¦¯à¦¾à¦‚করসমূহ পরিবরà§à¦¤à¦¨ করà§à¦¨" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom (%):" -msgstr "জà§à¦®à§ (%):" +msgid "Change Anchors" +msgstr "অà§à¦¯à¦¾à¦‚করসমূহ পরিবরà§à¦¤à¦¨ করà§à¦¨" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Paste Pose" @@ -3851,60 +3389,78 @@ msgid "Pan Mode" msgstr "পà§à¦¯à¦¾à¦¨ মোড" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Lock the selected object in place (can't be moved)." -msgstr "নিরà§à¦¬à¦¾à¦šà¦¿à¦¤ বসà§à¦¤à§à¦Ÿà¦¿à¦•ে à¦à¦‡ সà§à¦¥à¦¾à¦¨à§‡ আটকিয়ে রাখà§à¦¨ (সরানো সমà§à¦à¦¬ হবেনা)।" +#, fuzzy +msgid "Toggles snapping" +msgstr "ছেদবিনà§à¦¦à§ অদলবদল করà§à¦¨ (টগল বà§à¦°à§‡à¦•পয়েনà§à¦Ÿ)" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Unlock the selected object (can be moved)." -msgstr "নিরà§à¦¬à¦¾à¦šà¦¿à¦¤ বসà§à¦¤à§à¦Ÿà¦¿à¦•ে মà§à¦•à§à¦¤ করà§à¦¨ (সরানো সমà§à¦à¦¬ হবে)।" +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "সà§à¦¨à§à¦¯à¦¾à¦ª বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Makes sure the object's children are not selectable." -msgstr "বসà§à¦¤à§à¦° অনà§à¦¤à¦°à§à¦à§à¦•à§à¦¤-সমূহ যাতে নিরà§à¦¬à¦¾à¦šà¦¨à¦¯à§‹à¦—à§à¦¯ না হয় তা নিশà§à¦šà¦¿à¦¤ করে।" +#, fuzzy +msgid "Snapping options" +msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨à§‡à¦° সিদà§à¦§à¦¾à¦¨à§à¦¤à¦¸à¦®à§‚হ" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Restores the object's children's ability to be selected." -msgstr "বসà§à¦¤à§à¦° অনà§à¦¤à¦°à§à¦à§à¦•à§à¦¤-সমূহের নিরà§à¦¬à¦¾à¦šà¦¨à¦¯à§‹à¦—à§à¦¯à¦¤à¦¾ পà§à¦¨à¦°à¦¾à§Ÿ ফিরিয়ে আনে।" +#, fuzzy +msgid "Snap to grid" +msgstr "সà§à¦¨à§à¦¯à¦¾à¦ª মোড:" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp -#: editor/project_settings_editor.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Edit" -msgstr "সমà§à¦ªà¦¾à¦¦à¦¨ করà§à¦¨ (Edit)" +msgid "Use Rotation Snap" +msgstr "ঘূরà§à¦£à¦¨ সà§à¦¨à§à¦¯à¦¾à¦ª বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" -msgstr "সà§à¦¨à§à¦¯à¦¾à¦ª বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨" +#, fuzzy +msgid "Configure Snap..." +msgstr "সà§à¦¨à§à¦¯à¦¾à¦ª কনফিগার করà§à¦¨.." #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" -msgstr "গà§à¦°à¦¿à¦¡ দেখান" +msgid "Snap Relative" +msgstr "আপেকà§à¦·à¦¿à¦• সà§à¦¨à§à¦¯à¦¾à¦ª" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Rotation Snap" -msgstr "ঘূরà§à¦£à¦¨ সà§à¦¨à§à¦¯à¦¾à¦ª বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨" +msgid "Use Pixel Snap" +msgstr "পিকà§à¦¸à§‡à¦² সà§à¦¨à§à¦¯à¦¾à¦ª বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap Relative" -msgstr "আপেকà§à¦·à¦¿à¦• সà§à¦¨à§à¦¯à¦¾à¦ª" +msgid "Smart snapping" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "সà§à¦¨à§à¦¯à¦¾à¦ª কনফিগার করà§à¦¨.." +#, fuzzy +msgid "Snap to parent" +msgstr "ধারক/বাহক পরà§à¦¯à¦¨à§à¦¤ বিসà§à¦¤à§ƒà¦¤ করà§à¦¨" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Pixel Snap" -msgstr "পিকà§à¦¸à§‡à¦² সà§à¦¨à§à¦¯à¦¾à¦ª বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨" +msgid "Snap to node anchor" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to node sides" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to other nodes" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Skeleton.." -msgstr "সà§à¦•েলেটন/কাঠাম.." +msgid "Lock the selected object in place (can't be moved)." +msgstr "নিরà§à¦¬à¦¾à¦šà¦¿à¦¤ বসà§à¦¤à§à¦Ÿà¦¿à¦•ে à¦à¦‡ সà§à¦¥à¦¾à¦¨à§‡ আটকিয়ে রাখà§à¦¨ (সরানো সমà§à¦à¦¬ হবেনা)।" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Unlock the selected object (can be moved)." +msgstr "নিরà§à¦¬à¦¾à¦šà¦¿à¦¤ বসà§à¦¤à§à¦Ÿà¦¿à¦•ে মà§à¦•à§à¦¤ করà§à¦¨ (সরানো সমà§à¦à¦¬ হবে)।" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Makes sure the object's children are not selectable." +msgstr "বসà§à¦¤à§à¦° অনà§à¦¤à¦°à§à¦à§à¦•à§à¦¤-সমূহ যাতে নিরà§à¦¬à¦¾à¦šà¦¨à¦¯à§‹à¦—à§à¦¯ না হয় তা নিশà§à¦šà¦¿à¦¤ করে।" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Restores the object's children's ability to be selected." +msgstr "বসà§à¦¤à§à¦° অনà§à¦¤à¦°à§à¦à§à¦•à§à¦¤-সমূহের নিরà§à¦¬à¦¾à¦šà¦¨à¦¯à§‹à¦—à§à¦¯à¦¤à¦¾ পà§à¦¨à¦°à¦¾à§Ÿ ফিরিয়ে আনে।" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Make Bones" @@ -3932,12 +3488,19 @@ msgid "View" msgstr "দৃশà§à¦¯/পরিদরà§à¦¶à¦¨" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Reset" -msgstr "জà§à¦®à§ পà§à¦¨:সà§à¦¥à¦¾à¦ªà¦¨ করà§à¦¨" +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "গà§à¦°à¦¿à¦¡ দেখান" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Set.." -msgstr "জà§à¦®à§ নিরà§à¦§à¦¾à¦°à¦£ করà§à¦¨.." +#, fuzzy +msgid "Show helpers" +msgstr "বোনà§â€Œ/হাড় দেখান" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show rulers" +msgstr "বোনà§â€Œ/হাড় দেখান" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -3948,8 +3511,9 @@ msgid "Frame Selection" msgstr "নিরà§à¦¬à¦¾à¦šà¦¨à¦•ে ফà§à¦°à§‡à¦®à¦à§‚কà§à¦¤ করà§à¦¨" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Anchor" -msgstr "অà§à¦¯à¦¾à¦‚কর" +#, fuzzy +msgid "Layout" +msgstr "লেআউট/নকশা সংরকà§à¦·à¦£ করà§à¦¨" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Keys" @@ -3972,12 +3536,21 @@ msgid "Clear Pose" msgstr "à¦à¦™à§à¦—ি পরিষà§à¦•ার করà§à¦¨" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Set a Value" -msgstr "à¦à¦•টি মান নিরà§à¦§à¦¾à¦°à¦£ করà§à¦¨" +msgid "Drag pivot from mouse position" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Set pivot at mouse position" +msgstr "বহিঃ-বকà§à¦°à¦°à§‡à¦–ার সà§à¦¥à¦¾à¦¨ নিরà§à¦§à¦¾à¦°à¦£ করà§à¦¨" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Multiply grid step by 2" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap (Pixels):" -msgstr "সà§à¦¨à§à¦¯à¦¾à¦ª (পিকà§à¦¸à§‡à¦²à¦¸à¦®à§‚হ):" +msgid "Divide grid step by 2" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Add %s" @@ -3987,23 +3560,28 @@ msgstr "%s সংযà§à¦•à§à¦¤ করà§à¦¨" msgid "Adding %s..." msgstr "%s সংযà§à¦•à§à¦¤ হচà§à¦›à§‡..." -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Create Node" msgstr "নোড তৈরি করà§à¦¨" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Error instancing scene from %s" msgstr "%s হতে দৃশà§à¦¯ ইনসà§à¦Ÿà§à¦¯à¦¾à¦¨à§à¦¸ করাতে সমসà§à¦¯à¦¾ হয়েছে" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "OK :(" msgstr "ঠিক আছে :(" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "No parent to instance a child at." msgstr "ইনসà§à¦Ÿà§à¦¯à¦¾à¦¨à§à¦¸ করার জনà§à¦¯ পà§à¦°à§Ÿà§‹à¦œà¦¨à§€à§Ÿ ধারক উপসà§à¦¥à¦¿à¦¤ নেই।" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "This operation requires a single selected node." msgstr "à¦à¦‡ কাজটি করার জনà§à¦¯ à¦à¦•টি à¦à¦•ক নিরà§à¦¬à¦¾à¦šà¦¿à¦¤ নোড পà§à¦°à§Ÿà§‹à¦œà¦¨à¥¤" @@ -4019,45 +3597,6 @@ msgstr "" "টানà§à¦¨ à¦à¦¬à¦‚ ফেলà§à¦¨ + শিফট কী (Shift) : সহোদর নোড সংযোজন করতে\n" "টানà§à¦¨ à¦à¦¬à¦‚ ফেলà§à¦¨ + অলà§à¦Ÿà¦¾à¦° কী (Alt) : নোডের ধরণ পরিবরà§à¦¤à¦¨ করতে" -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Create Poly" -msgstr "Poly তৈরি করà§à¦¨" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly" -msgstr "Poly সমà§à¦ªà¦¾à¦¦à¦¨ করà§à¦¨" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly (Remove Point)" -msgstr "Poly সমà§à¦ªà¦¾à¦¦à¦¨ করà§à¦¨ (বিনà§à¦¦à§ অপসারণ করà§à¦¨)" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Create a new polygon from scratch." -msgstr "আরমà§à¦ হতে নতà§à¦¨ polygon তৈরি করà§à¦¨à¥¤" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -msgid "" -"Edit existing polygon:\n" -"LMB: Move Point.\n" -"Ctrl+LMB: Split Segment.\n" -"RMB: Erase Point." -msgstr "" - #: editor/plugins/collision_polygon_editor_plugin.cpp msgid "Create Poly3D" msgstr "Poly3D তৈরি করà§à¦¨" @@ -4067,14 +3606,6 @@ msgid "Set Handle" msgstr "হà§à¦¯à¦¾à¦¨à§à¦¡à§‡à¦² সà§à¦¥à¦¾à¦ªà¦¨ করà§à¦¨" #: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Creating Mesh Library" -msgstr "মেস লাইবà§à¦°à§‡à¦°à¦¿ তৈরি হচà§à¦›à§‡" - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Thumbnail.." -msgstr "থামà§à¦¬à¦¨à§‡à¦‡à¦².." - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Remove item %d?" msgstr "%d টি বসà§à¦¤à§ অপসারণ করবেন?" @@ -4097,6 +3628,28 @@ msgid "Update from Scene" msgstr "দৃশà§à¦¯ হতে হালনাগাদ করà§à¦¨" #: editor/plugins/curve_editor_plugin.cpp +msgid "Flat0" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Flat1" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +#, fuzzy +msgid "Ease in" +msgstr "আনà§à¦¤-সহজাগমন" + +#: editor/plugins/curve_editor_plugin.cpp +#, fuzzy +msgid "Ease out" +msgstr "বহিঃ-সহজাগমন" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Smoothstep" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp #, fuzzy msgid "Modify Curve Point" msgstr "Curve Map পরিবরà§à¦¤à¦¨ করà§à¦¨" @@ -4181,22 +3734,18 @@ msgid "Create Occluder Polygon" msgstr "অকলà§à¦¡à¦¾à¦° (occluder) পলিগন তৈরি করà§à¦¨" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Edit existing polygon:" msgstr "বিদà§à¦¯à¦®à¦¾à¦¨ পলিগন সমà§à¦ªà¦¾à¦¦à¦¨ করà§à¦¨:" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "LMB: Move Point." msgstr "মাউসের বাম বোতাম: বিনà§à¦¦à§ সরান।" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Ctrl+LMB: Split Segment." msgstr "কনà§à¦Ÿà§à¦°à§‹à¦² + মাউসের বাম বোতাম: অংশ বিà¦à¦•à§à¦¤ করà§à¦¨à¥¤" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "RMB: Erase Point." msgstr "মাউসের ডান বোতাম: বিনà§à¦¦à§ মà§à¦›à§‡ ফেলà§à¦¨à¥¤" @@ -4301,6 +3850,10 @@ msgid "Create Outline" msgstr "পà§à¦°à¦¾à¦¨à§à¦¤à¦°à§‡à¦–া তৈরি করà§à¦¨" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh" +msgstr "মেস" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Body" msgstr "সà§à¦¥à¦¿à¦¤-টà§à¦°à¦¾à¦‡à¦®à§‡à¦¸ বডি তৈরি করà§à¦¨" @@ -4428,14 +3981,83 @@ msgstr "যথেচà§à¦› মাপ:" msgid "Populate" msgstr "পপà§à¦²à§‡à¦Ÿ" +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Bake!" +msgstr "সিদà§à¦§/বেকà§â€Œ!" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +#, fuzzy +msgid "Bake the navigation mesh.\n" +msgstr "Navigation Mesh তৈরি করà§à¦¨" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +#, fuzzy +msgid "Clear the navigation mesh." +msgstr "Navigation Mesh তৈরি করà§à¦¨" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Setting up Configuration..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Calculating grid size..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Creating heightfield..." +msgstr "লাইটের ওকটà§à¦°à§€ (octree) তৈরি করা হচà§à¦›à§‡" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Marking walkable triangles..." +msgstr "অনà§à¦¬à¦¾à¦¦-সমà§à¦à¦¬ শবà§à¦¦à¦®à¦¾à¦²à¦¾/বাকà§à¦¯-সমূহ.." + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Constructing compact heightfield..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Eroding walkable area..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Partioning..." +msgstr "সতরà§à¦•তা" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Creating contours..." +msgstr "ওকটà§à¦°à§€ (octree) গঠনবিনà§à¦¯à¦¾à¦¸ তৈরি করা হচà§à¦›à§‡" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Creating polymesh..." +msgstr "পà§à¦°à¦¾à¦¨à§à¦¤à¦°à§‡à¦–া মেস তৈরি করà§à¦¨.." + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Converting to native navigation mesh..." +msgstr "Navigation Mesh তৈরি করà§à¦¨" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Navigation Mesh Generator Setup:" +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Parsing Geometry..." +msgstr "জà§à¦¯à¦¾à¦®à¦¿à¦¤à¦¿à¦•-আকার বিশà§à¦²à§‡à¦·à¦£ করা হচà§à¦›à§‡" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Done!" +msgstr "" + #: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Create Navigation Polygon" msgstr "Navigation Polygon তৈরি করà§à¦¨" -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Remove Poly And Point" -msgstr "পলি à¦à¦¬à¦‚ বিনà§à¦¦à§ অপসারণ করà§à¦¨" - #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Clear Emission Mask" msgstr "Emission Mask পরিসà§à¦•ার করà§à¦¨" @@ -4621,15 +4243,18 @@ msgid "Curve Point #" msgstr "বকà§à¦°à¦°à§‡à¦–ার বিনà§à¦¦à§ #" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Point Pos" +#, fuzzy +msgid "Set Curve Point Position" msgstr "বকà§à¦°à¦°à§‡à¦–ার বিনà§à¦¦à§à¦° সà§à¦¥à¦¾à¦¨ নিরà§à¦§à¦¾à¦°à¦£ করà§à¦¨" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve In Pos" +#, fuzzy +msgid "Set Curve In Position" msgstr "আনà§à¦¤-বকà§à¦°à¦°à§‡à¦–ার সà§à¦¥à¦¾à¦¨ নিরà§à¦§à¦¾à¦°à¦£ করà§à¦¨" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Out Pos" +#, fuzzy +msgid "Set Curve Out Position" msgstr "বহিঃ-বকà§à¦°à¦°à§‡à¦–ার সà§à¦¥à¦¾à¦¨ নিরà§à¦§à¦¾à¦°à¦£ করà§à¦¨" #: editor/plugins/path_editor_plugin.cpp @@ -4691,6 +4316,14 @@ msgid "Scale Polygon" msgstr "পলিগন মাপ করà§à¦¨" #: editor/plugins/polygon_2d_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit" +msgstr "সমà§à¦ªà¦¾à¦¦à¦¨ করà§à¦¨ (Edit)" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon->UV" msgstr "পলিগন->UV" @@ -4745,63 +4378,10 @@ msgstr "রিসোরà§à¦¸ লোড করà§à¦¨" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "পà§à¦°à¦¤à¦¿à¦²à§‡à¦ªà¦¨/পেসà§à¦Ÿ করà§à¦¨" -#: editor/plugins/rich_text_editor_plugin.cpp -msgid "Parse BBCode" -msgstr "BBCode বিশà§à¦²à§‡à¦·à¦£ করà§à¦¨" - -#: editor/plugins/sample_editor_plugin.cpp -msgid "Length:" -msgstr "লমà§à¦¬à¦¾:" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Open Sample File(s)" -msgstr "নমà§à¦¨à¦¾ ফাইল(সমূহ) খà§à¦²à§à¦¨" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "ERROR: Couldn't load sample!" -msgstr "সমসà§à¦¯à¦¾: নমà§à¦¨à¦¾ লোড করা সমà§à¦à¦¬ হয়নি!" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Add Sample" -msgstr "নমà§à¦¨à¦¾ যোগ করà§à¦¨" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Rename Sample" -msgstr "নমà§à¦¨à¦¾ পà§à¦¨à¦ƒà¦¨à¦¾à¦®à¦•রণ করà§à¦¨" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Delete Sample" -msgstr "নমà§à¦¨à¦¾ অপসারণ করà§à¦¨" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "16 Bits" -msgstr "১৬ বিটসà§â€Œ" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "8 Bits" -msgstr "à§® বিটসà§â€Œ" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Stereo" -msgstr "সà§à¦Ÿà§‡à¦°à¦¿à¦“" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Mono" -msgstr "মনো" - -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/script_editor_debugger.cpp -msgid "Format" -msgstr "ফরমà§à¦¯à¦¾à¦Ÿ" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Pitch" -msgstr "পিচà§â€Œ" - #: editor/plugins/script_editor_plugin.cpp #, fuzzy msgid "Clear Recent Files" @@ -4893,6 +4473,10 @@ msgstr "ডকà§à¦®à§‡à¦¨à§à¦Ÿà¦¸à¦®à§‚হ বনà§à¦§ করà§à¦¨" msgid "Close All" msgstr "সবগà§à¦²à¦¿ বনà§à¦§ করà§à¦¨" +#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp +msgid "Run" +msgstr "চালান" + #: editor/plugins/script_editor_plugin.cpp #, fuzzy msgid "Toggle Scripts Panel" @@ -4936,18 +4520,6 @@ msgid "Debug with external editor" msgstr "à¦à¦¡à¦¿à¦Ÿà¦°à§‡ খà§à¦²à§à¦¨" #: editor/plugins/script_editor_plugin.cpp -msgid "Window" -msgstr "উইনà§à¦¡à§‹" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Left" -msgstr "বামে সরান" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Right" -msgstr "ডানে সরান" - -#: editor/plugins/script_editor_plugin.cpp #, fuzzy msgid "Open Godot online documentation" msgstr "রেফারেনà§à¦¸à§‡à¦° ডকà§à¦®à§‡à¦¨à§à¦Ÿà§‡à¦¶à¦¨à§‡ খà§à¦à¦œà§à¦¨à¥¤" @@ -5035,7 +4607,7 @@ msgstr "করà§à¦¤à¦¨/কাট করà§à¦¨" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Copy" msgstr "পà§à¦°à¦¤à¦¿à¦²à¦¿à¦ªà¦¿/কপি করà§à¦¨" @@ -5301,10 +4873,6 @@ msgid "View Plane Transform." msgstr "পà§à¦²à§‡à¦¨-à¦à¦° রà§à¦ªà¦¾à¦¨à§à¦¤à¦° দেখà§à¦¨à¥¤" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Scaling to %s%%." -msgstr "%s%% -ঠমাপিত হচà§à¦›à§‡à¥¤" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." msgstr "%s ডিগà§à¦°à¦¿ ঘূরà§à¦£à¦¿à¦¤ হচà§à¦›à§‡à¥¤" @@ -5321,10 +4889,6 @@ msgid "Top View." msgstr "শীরà§à¦· দরà§à¦¶à¦¨à¥¤" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Top" -msgstr "শীরà§à¦·" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "পশà§à¦šà¦¾à§Ž দরà§à¦¶à¦¨à¥¤" @@ -5570,6 +5134,10 @@ msgid "Transform" msgstr "রà§à¦ªà¦¾à¦¨à§à¦¤à¦°" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Configure Snap.." +msgstr "সà§à¦¨à§à¦¯à¦¾à¦ª কনফিগার করà§à¦¨.." + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Local Coords" msgstr "সà§à¦¥à¦¾à¦¨à§€à§Ÿ সà§à¦¥à¦¾à¦¨à¦¾à¦™à§à¦•সমূহ" @@ -5715,6 +5283,10 @@ msgid "Speed (FPS):" msgstr "গতি (FPS):" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Loop" +msgstr "লà§à¦ª" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animation Frames" msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨à§‡à¦° ফà§à¦°à§‡à¦®à¦¸à¦®à§‚হ" @@ -5727,12 +5299,14 @@ msgid "Insert Empty (After)" msgstr "খালি বসà§à¦¤à§ যà§à¦•à§à¦¤ করà§à¦¨ (পরে)" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Up" -msgstr "উপরে" +#, fuzzy +msgid "Move (Before)" +msgstr "নোড(সমূহ) অপসারণ করà§à¦¨" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Down" -msgstr "নীচে" +#, fuzzy +msgid "Move (After)" +msgstr "বামে সরান" #: editor/plugins/style_box_editor_plugin.cpp msgid "StyleBox Preview:" @@ -5896,6 +5470,10 @@ msgid "Style" msgstr "সà§à¦Ÿà¦¾à¦‡à¦²" #: editor/plugins/theme_editor_plugin.cpp +msgid "Font" +msgstr "ফনà§à¦Ÿ" + +#: editor/plugins/theme_editor_plugin.cpp msgid "Color" msgstr "রঙ" @@ -5947,8 +5525,9 @@ msgid "Mirror Y" msgstr "পà§à¦°à¦¤à¦¿à¦¬à¦¿à¦®à§à¦¬ Y" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Bucket" -msgstr "বাকেটà§â€Œ" +#, fuzzy +msgid "Paint Tile" +msgstr "TileMap আà¦à¦•à§à¦¨" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Pick Tile" @@ -6014,6 +5593,10 @@ msgid "Delete preset '%s'?" msgstr "নিরà§à¦¬à¦¾à¦šà¦¿à¦¤ ফাইলসমূহ অপসারণ করবেন?" #: editor/project_export.cpp +msgid "Export templates for this platform are missing/corrupted: " +msgstr "" + +#: editor/project_export.cpp #, fuzzy msgid "Presets" msgstr "পà§à¦°à¦¿à¦¸à§‡à¦Ÿ.." @@ -6098,34 +5681,62 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +msgid "Export templates for this platform are missing/corrupted:" +msgstr "" + +#: editor/project_export.cpp #, fuzzy msgid "Export With Debug" msgstr "Tile Set à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨" #: editor/project_manager.cpp -msgid "Invalid project path, the path must exist!" -msgstr "অকারà§à¦¯à¦•র পà§à¦°à¦•লà§à¦ªà§‡à¦° পথ, পথটি অবশà§à¦¯à¦‡ বিদà§à¦¯à¦®à¦¾à¦¨ হতে হবে!" +#, fuzzy +msgid "The path does not exists." +msgstr "ফাইলটি বিদà§à¦¯à¦®à¦¾à¦¨ নয়।" #: editor/project_manager.cpp #, fuzzy -msgid "Invalid project path, project.godot must not exist." -msgstr "অকারà§à¦¯à¦•র পà§à¦°à¦•লà§à¦ªà§‡à¦° পথ, engine.cfg অবশà§à¦¯à¦‡ অনà§à¦ªà¦¸à§à¦¥à¦¿à¦¤ হতে হবে।" +msgid "Please choose a 'project.godot' file." +msgstr "অনà§à¦—à§à¦°à¦¹ করে পà§à¦°à¦•লà§à¦ªà§‡à¦° ফোলà§à¦¡à¦¾à¦°à§‡à¦° বাইরে à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨!" #: editor/project_manager.cpp -#, fuzzy -msgid "Invalid project path, project.godot must exist." -msgstr "অকারà§à¦¯à¦•র পà§à¦°à¦•লà§à¦ªà§‡à¦° পথ, engine.cfg অবশà§à¦¯à¦‡ উপসà§à¦¥à¦¿à¦¤ হতে হবে।" +msgid "" +"Your project will be created in a non empty folder (you might want to create " +"a new folder)." +msgstr "" + +#: editor/project_manager.cpp +msgid "Please choose a folder that does not contain a 'project.godot' file." +msgstr "" #: editor/project_manager.cpp msgid "Imported Project" msgstr "পà§à¦°à¦•লà§à¦ª ইমà§à¦ªà§‹à¦°à§à¦Ÿ করা হয়েছে" #: editor/project_manager.cpp +msgid " " +msgstr "" + +#: editor/project_manager.cpp +msgid "It would be a good idea to name your project." +msgstr "" + +#: editor/project_manager.cpp msgid "Invalid project path (changed anything?)." msgstr "অকারà§à¦¯à¦•র পà§à¦°à¦•লà§à¦ªà§‡à¦° পথ (কোনোকিছৠপরিবরà§à¦¤à¦¨ করেছেন?)।" #: editor/project_manager.cpp #, fuzzy +msgid "Couldn't get project.godot in project path." +msgstr "পà§à¦°à¦•লà§à¦ªà§‡à¦° পথে engine.cfg তৈরি করা সমà§à¦à¦¬ হয়নি।" + +#: editor/project_manager.cpp +#, fuzzy +msgid "Couldn't edit project.godot in project path." +msgstr "পà§à¦°à¦•লà§à¦ªà§‡à¦° পথে engine.cfg তৈরি করা সমà§à¦à¦¬ হয়নি।" + +#: editor/project_manager.cpp +#, fuzzy msgid "Couldn't create project.godot in project path." msgstr "পà§à¦°à¦•লà§à¦ªà§‡à¦° পথে engine.cfg তৈরি করা সমà§à¦à¦¬ হয়নি।" @@ -6134,38 +5745,49 @@ msgid "The following files failed extraction from package:" msgstr "পà§à¦¯à¦¾à¦•েজ হতে নীমà§à¦¨à§‹à¦•à§à¦¤ ফাইলসমূহ à¦à¦•à§à¦¸à¦Ÿà§à¦°à¦¾à¦•à§à¦Ÿ করা অসফল হয়েছে:" #: editor/project_manager.cpp +#, fuzzy +msgid "Rename Project" +msgstr "নামহীন পà§à¦°à¦•লà§à¦ª" + +#: editor/project_manager.cpp +#, fuzzy +msgid "Couldn't get project.godot in the project path." +msgstr "পà§à¦°à¦•লà§à¦ªà§‡à¦° পথে engine.cfg তৈরি করা সমà§à¦à¦¬ হয়নি।" + +#: editor/project_manager.cpp +msgid "New Game Project" +msgstr "নতà§à¦¨ গেম পà§à¦°à¦•লà§à¦ª" + +#: editor/project_manager.cpp msgid "Import Existing Project" msgstr "বিদà§à¦¯à¦®à¦¾à¦¨ পà§à¦°à¦•লà§à¦ª ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨" #: editor/project_manager.cpp -msgid "Project Path (Must Exist):" -msgstr "পà§à¦°à¦•লà§à¦ªà§‡à¦° পথ (অবশà§à¦¯à¦‡ বিদà§à¦¯à¦®à¦¾à¦¨ হতে হবে):" +msgid "Create New Project" +msgstr "নতà§à¦¨ পà§à¦°à¦•লà§à¦ª তৈরি করà§à¦¨" + +#: editor/project_manager.cpp +msgid "Install Project:" +msgstr "পà§à¦°à¦•লà§à¦ª ইনà§à¦¸à¦Ÿà¦² করà§à¦¨:" #: editor/project_manager.cpp msgid "Project Name:" msgstr "পà§à¦°à¦•লà§à¦ªà§‡à¦° নাম:" #: editor/project_manager.cpp -msgid "Create New Project" -msgstr "নতà§à¦¨ পà§à¦°à¦•লà§à¦ª তৈরি করà§à¦¨" +#, fuzzy +msgid "Create folder" +msgstr "ফোলà§à¦¡à¦¾à¦° তৈরি করà§à¦¨" #: editor/project_manager.cpp msgid "Project Path:" msgstr "পà§à¦°à¦•লà§à¦ªà§‡à¦° পথ:" #: editor/project_manager.cpp -msgid "Install Project:" -msgstr "পà§à¦°à¦•লà§à¦ª ইনà§à¦¸à¦Ÿà¦² করà§à¦¨:" - -#: editor/project_manager.cpp msgid "Browse" msgstr "বà§à¦°à¦¾à¦‰à¦¸" #: editor/project_manager.cpp -msgid "New Game Project" -msgstr "নতà§à¦¨ গেম পà§à¦°à¦•লà§à¦ª" - -#: editor/project_manager.cpp msgid "That's a BINGO!" msgstr "দারà§à¦£ খবর!" @@ -6174,6 +5796,11 @@ msgid "Unnamed Project" msgstr "নামহীন পà§à¦°à¦•লà§à¦ª" #: editor/project_manager.cpp +#, fuzzy +msgid "Can't open project" +msgstr "সংযোগ.." + +#: editor/project_manager.cpp msgid "Are you sure to open more than one project?" msgstr "à¦à¦•ধিক পà§à¦°à¦•লà§à¦ª খোলায় আপনি সà§à¦¨à¦¿à¦¶à§à¦šà¦¿à¦¤?" @@ -6215,10 +5842,6 @@ msgid "Project List" msgstr "পà§à¦°à¦•লà§à¦ªà§‡à¦° তালিকা" #: editor/project_manager.cpp -msgid "Run" -msgstr "চালান" - -#: editor/project_manager.cpp msgid "Scan" msgstr "সà§à¦•à§à¦¯à¦¾à¦¨" @@ -6277,17 +5900,14 @@ msgid "Add Input Action Event" msgstr "ইনপà§à¦Ÿ অà§à¦¯à¦¾à¦•শন ইà¦à§‡à¦¨à§à¦Ÿ যোগ করà§à¦¨" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Meta+" msgstr "Meta+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Shift+" msgstr "Shift+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Alt+" msgstr "Alt+" @@ -6349,7 +5969,7 @@ msgstr "পরিবরà§à¦¤à¦¨ করà§à¦¨" msgid "Joypad Axis Index:" msgstr "জয়সà§à¦Ÿà¦¿à¦• অকà§à¦· ইনà§à¦¡à§‡à¦•à§à¦¸:" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Axis" msgstr "অকà§à¦·" @@ -6371,31 +5991,31 @@ msgstr "ইনপà§à¦Ÿ অà§à¦¯à¦¾à¦•শন ইà¦à§‡à¦¨à§à¦Ÿ মà§à¦›à§‡ ঠmsgid "Add Event" msgstr "খালি বসà§à¦¤à§ যোগ করà§à¦¨" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Device" msgstr "ডিà¦à¦¾à¦‡à¦¸/যনà§à¦¤à§à¦°" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Button" msgstr "বাটন/বোতাম" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Left Button." msgstr "বাম বোতাম/বাটন।" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Right Button." msgstr "ডান বোতাম/বাটন।" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Middle Button." msgstr "মাঠবোতাম/বাটন।" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Up." msgstr "মাউসের চাকা উপরের দিকে চকà§à¦•র।" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Down." msgstr "মাউসের চাকা নিচের দিকে চকà§à¦•র।" @@ -6405,7 +6025,7 @@ msgid "Add Global Property" msgstr "গেটার (Getter) à¦à¦° বৈশিষà§à¦Ÿà§à¦¯à§‡ যà§à¦•à§à¦¤ করà§à¦¨" #: editor/project_settings_editor.cpp -msgid "Select an setting item first!" +msgid "Select a setting item first!" msgstr "" #: editor/project_settings_editor.cpp @@ -6424,6 +6044,16 @@ msgid "Delete Item" msgstr "ইনপà§à¦Ÿ অপসারণ করà§à¦¨" #: editor/project_settings_editor.cpp +#, fuzzy +msgid "Can't contain '/' or ':'" +msgstr "নোডের সাথে সংযà§à¦•à§à¦¤ করà§à¦¨:" + +#: editor/project_settings_editor.cpp +#, fuzzy +msgid "Already existing" +msgstr "সà§à¦¥à¦¾à§Ÿà§€à§Ÿà¦¤à¦¾ টগল করà§à¦¨" + +#: editor/project_settings_editor.cpp msgid "Error saving settings." msgstr "সংরকà§à¦·à¦£à§‡ সমসà§à¦¯à¦¾ হয়েছে।" @@ -6576,10 +6206,20 @@ msgstr "নতà§à¦¨ সà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ" #: editor/property_editor.cpp #, fuzzy +msgid "Make Unique" +msgstr "বোনà§â€Œ/হাড় তৈরি করà§à¦¨" + +#: editor/property_editor.cpp +#, fuzzy msgid "Show in File System" msgstr "ফাইলসিসà§à¦Ÿà§‡à¦®" #: editor/property_editor.cpp +#, fuzzy +msgid "Convert To %s" +msgstr "à¦à¦¤à§‡ রূপানà§à¦¤à¦° করà§à¦¨.." + +#: editor/property_editor.cpp msgid "Error loading file: Not a resource!" msgstr "ফাইল লোডে সমসà§à¦¯à¦¾: রিসোরà§à¦¸ নয়!" @@ -6618,6 +6258,11 @@ msgid "Select Property" msgstr "গà§à¦£à¦¾à¦—à§à¦£/বৈশিষà§à¦Ÿà§à¦¯ বাছাই করà§à¦¨" #: editor/property_selector.cpp +#, fuzzy +msgid "Select Virtual Method" +msgstr "মেথড/পদà§à¦§à¦¤à¦¿ বাছাই করà§à¦¨" + +#: editor/property_selector.cpp msgid "Select Method" msgstr "মেথড/পদà§à¦§à¦¤à¦¿ বাছাই করà§à¦¨" @@ -6645,26 +6290,6 @@ msgstr "সারà§à¦¬à¦œà¦¨à§€à¦¨ রূপানà§à¦¤à¦° রাখà§à¦¨" msgid "Reparent" msgstr "নতà§à¦¨ অà¦à¦¿à¦à¦¾à¦¬à¦• দান করà§à¦¨" -#: editor/resources_dock.cpp -msgid "Create New Resource" -msgstr "নতà§à¦¨ রিসোরà§à¦¸ তৈরি করà§à¦¨" - -#: editor/resources_dock.cpp -msgid "Open Resource" -msgstr "রিসোরà§à¦¸ খà§à¦²à§à¦¨" - -#: editor/resources_dock.cpp -msgid "Save Resource" -msgstr "রিসোরà§à¦¸ সংরকà§à¦·à¦£ করà§à¦¨" - -#: editor/resources_dock.cpp -msgid "Resource Tools" -msgstr "রিসোরà§à¦¸-à¦à¦° সরঞà§à¦œà¦¾à¦®à¦¸à¦®à§‚হ" - -#: editor/resources_dock.cpp -msgid "Make Local" -msgstr "সà§à¦¥à¦¾à¦¨à§€à§Ÿ করà§à¦¨" - #: editor/run_settings_dialog.cpp msgid "Run Mode:" msgstr "চালানোর মোড:" @@ -6796,14 +6421,6 @@ msgid "Sub-Resources:" msgstr "রিসোরà§à¦¸à¦¸à¦®à§‚হ:" #: editor/scene_tree_dock.cpp -msgid "Edit Groups" -msgstr "গà§à¦°à§à¦ªà¦¸à¦®à§‚হ সমà§à¦ªà¦¾à¦¦à¦¨ করà§à¦¨" - -#: editor/scene_tree_dock.cpp -msgid "Edit Connections" -msgstr "সংযোগসমূহ সমà§à¦ªà¦¾à¦¦à¦¨ করà§à¦¨" - -#: editor/scene_tree_dock.cpp msgid "Clear Inheritance" msgstr "উতà§à¦¤à¦°à¦¾à¦§à¦¿à¦•ারতà§à¦¬ পরিসà§à¦•ার করà§à¦¨" @@ -6992,6 +6609,15 @@ msgid "Invalid base path" msgstr "বেস পথ অগà§à¦°à¦¹à¦£à¦¯à§‹à¦—à§à¦¯" #: editor/script_create_dialog.cpp +msgid "Directory of the same name exists" +msgstr "" + +#: editor/script_create_dialog.cpp +#, fuzzy +msgid "File exists, will be reused" +msgstr "à¦à¦•ই নামের ফাইল উপসà§à¦¥à¦¿à¦¤, তা মà§à¦›à§‡ লিখবেন?" + +#: editor/script_create_dialog.cpp msgid "Invalid extension" msgstr "অগà§à¦°à¦¹à¦£à¦¯à§‹à¦—à§à¦¯ à¦à¦•à§à¦¸à¦Ÿà§‡à¦¨à¦¶à¦¨" @@ -7037,6 +6663,10 @@ msgid "Load existing script file" msgstr "বিদà§à¦¯à¦®à¦¾à¦¨ সà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ লোড করà§à¦¨" #: editor/script_create_dialog.cpp +msgid "Language" +msgstr "à¦à¦¾à¦·à¦¾" + +#: editor/script_create_dialog.cpp #, fuzzy msgid "Inherits" msgstr "গà§à¦°à¦¹à¦£ করে:" @@ -7081,6 +6711,10 @@ msgid "Function:" msgstr "ফাংশন:" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Errors" msgstr "সমসà§à¦¯à¦¾à¦¸à¦®à§‚হ" @@ -7161,6 +6795,10 @@ msgid "Type" msgstr "ধরণ" #: editor/script_editor_debugger.cpp +msgid "Format" +msgstr "ফরমà§à¦¯à¦¾à¦Ÿ" + +#: editor/script_editor_debugger.cpp msgid "Usage" msgstr "বà§à¦¯à¦¬à¦¹à¦¾à¦°" @@ -7236,12 +6874,30 @@ msgstr "" msgid "Change Probe Extents" msgstr "পà§à¦°à§‹à¦¬à§‡à¦° (Probe) পরিবà§à¦¯à¦¾à¦ªà§à¦¤à¦¿ পরিবরà§à¦¤à¦¨ করà§à¦¨" +#: modules/gdnative/gd_native_library_editor.cpp +#, fuzzy +msgid "Library" +msgstr "MeshLibrary (মেস-লাইবà§à¦°à§‡à¦°à¦¿).." + +#: modules/gdnative/gd_native_library_editor.cpp +#, fuzzy +msgid "Status" +msgstr "অবসà§à¦¥à¦¾:" + +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Libraries: " +msgstr "" + +#: modules/gdnative/register_types.cpp +msgid "GDNative" +msgstr "" + #: 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/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "বিনà§à¦¯à¦¾à¦¸ জানার জনà§à¦¯ যথেষà§à¦Ÿ বাইট নেই, অথবা à¦à§à¦² ফরমà§à¦¯à¦¾à¦Ÿà¥¤" @@ -7293,10 +6949,6 @@ msgid "GridMap Duplicate Selection" msgstr "নিরà§à¦¬à¦¾à¦šà¦¿à¦¤ সমূহ অনà§à¦²à¦¿à¦ªà¦¿ করà§à¦¨" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Paint" -msgstr "" - -#: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy msgid "Snap View" msgstr "শীরà§à¦· দরà§à¦¶à¦¨" @@ -7400,13 +7052,8 @@ msgstr "সà§à¦¨à§à¦¯à¦¾à¦ª সেটিংস" msgid "Pick Distance:" msgstr "ইনà§à¦¸à¦Ÿà§à¦¯à¦¾à¦¨à§à¦¸:" -#: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy -msgid "Tiles" -msgstr "ফাইল" - -#: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Areas" +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "Builds" msgstr "" #: modules/visual_script/visual_script.cpp @@ -7620,10 +7267,18 @@ msgid "Return" msgstr "ফেরৎ পাঠান (Return)" #: modules/visual_script/visual_script_editor.cpp +msgid "Call" +msgstr "ডাকà§à¦¨ (Call)" + +#: modules/visual_script/visual_script_editor.cpp msgid "Get" msgstr "মান পান (Get)" #: modules/visual_script/visual_script_editor.cpp +msgid "Script already has function '%s'" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Change Input Value" msgstr "ইনপà§à¦Ÿ নাম পরিবরà§à¦¤à¦¨ করà§à¦¨" @@ -8030,6 +7685,12 @@ msgstr "" "AnimatedSprite3D দà§à¦¬à¦¾à¦°à¦¾ ফà§à¦°à§‡à¦® দেখাতে SpriteFrames রিসোরà§à¦¸ অবশà§à¦¯à¦‡ তৈরি করতে হবে " "অথবা 'Frames' à¦à¦° মান-ঠনিরà§à¦§à¦¾à¦°à¦¨ করে দিতে হবে।" +#: scene/3d/vehicle_body.cpp +msgid "" +"VehicleWheel serves to provide a wheel system to a VehicleBody. Please use " +"it as a child of a VehicleBody." +msgstr "" + #: scene/gui/color_picker.cpp #, fuzzy msgid "Raw Mode" @@ -8040,6 +7701,10 @@ msgid "Add current color as a preset" msgstr "" #: scene/gui/dialogs.cpp +msgid "Cancel" +msgstr "বাতিল" + +#: scene/gui/dialogs.cpp msgid "Alert!" msgstr "সতরà§à¦•তা!" @@ -8047,10 +7712,6 @@ msgstr "সতরà§à¦•তা!" msgid "Please Confirm..." msgstr "অনà§à¦—à§à¦°à¦¹ করে নিশà§à¦šà¦¿à¦¤ করà§à¦¨..." -#: scene/gui/input_action.cpp -msgid "Ctrl+" -msgstr "Ctrl+" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -8086,6 +7747,619 @@ msgstr "" "আকার ধারণ করতে পারে। অনà§à¦¯à¦¥à¦¾à§Ÿ, à¦à¦Ÿà¦¿à¦•ে à¦à¦•টি RenderTarget করà§à¦¨ à¦à¦¬à¦‚ à¦à¦° অà¦à§à¦¯à¦¨à§à¦¤à¦°à§€à¦£ " "দৃশà§à¦¯à¦¾à¦¬à¦²à¦¿à¦•ে (texture) দৃশà§à¦¯à¦®à¦¾à¦¨ করতে কোনো নোডে হসà§à¦¤à¦¾à¦¨à§à¦¤à¦° করà§à¦¨à¥¤" +#: scene/resources/dynamic_font.cpp +msgid "Error initializing FreeType." +msgstr "FreeType আরমà§à¦à§‡ সমসà§à¦¯à¦¾ হয়েছে।" + +#: scene/resources/dynamic_font.cpp +msgid "Unknown font format." +msgstr "অজানা ধরনের ফনà§à¦Ÿà¥¤" + +#: scene/resources/dynamic_font.cpp +msgid "Error loading font." +msgstr "ফনà§à¦Ÿ তà§à¦²à¦¤à§‡/লোডে সমসà§à¦¯à¦¾ হয়েছে।" + +#: scene/resources/dynamic_font.cpp +msgid "Invalid font size." +msgstr "ফনà§à¦Ÿà§‡à¦° আকার অগà§à¦°à¦¹à¦¨à¦¯à§‹à¦—à§à¦¯à¥¤" + +#~ msgid "Method List For '%s':" +#~ msgstr "'%s' à¦à¦° জনà§à¦¯ মেথডের তালিকা:" + +#~ msgid "Arguments:" +#~ msgstr "মান/আরà§à¦—à§à¦®à§‡à¦¨à§à¦Ÿ-সমূহ:" + +#~ msgid "Return:" +#~ msgstr "পà§à¦°à¦¤à§à¦¯à¦¾à¦¬à¦°à§à¦¤à¦¨:" + +#~ msgid "Added:" +#~ msgstr "সংযোজিত:" + +#~ msgid "Removed:" +#~ msgstr "অপসারিত:" + +#~ msgid "Error saving atlas:" +#~ msgstr "à¦à¦Ÿà¦²à¦¾à¦¸/মানচিতà§à¦°à¦¾à¦¬à¦²à§€ সংরকà§à¦·à¦£à§‡ সমসà§à¦¯à¦¾ হয়েছে:" + +#~ msgid "Could not save atlas subtexture:" +#~ msgstr "à¦à¦Ÿà¦²à¦¾à¦¸/মানচিতà§à¦°à¦¾à¦¬à¦²à§€à¦° উপ-গঠনবিনà§à¦¯à¦¾à¦¸ (subtexture) সংরকà§à¦·à¦£ অসমরà§à¦¥ হয়েছে:" + +#~ msgid "Exporting for %s" +#~ msgstr "%s à¦à¦° জনà§à¦¯ à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿ (export) হচà§à¦›à§‡" + +#~ msgid "Setting Up.." +#~ msgstr "সà§à¦¥à¦¾à¦ªà¦¿à¦¤/বিনà§à¦¯à¦¸à§à¦¤ হচà§à¦›à§‡.." + +#~ msgid "Error loading scene." +#~ msgstr "দৃশà§à¦¯ লোডে সমসà§à¦¯à¦¾ হয়েছে।" + +#~ msgid "Re-Import" +#~ msgstr "পà§à¦¨-ইমà§à¦ªà§‹à¦°à§à¦Ÿ" + +#~ msgid "Please wait for scan to complete." +#~ msgstr "সà§à¦•à§à¦¯à¦¾à¦¨ সমà§à¦ªà¦¨à§à¦¨ হওয়া পরà§à¦¯à¦¨à§à¦¤ অনà§à¦—à§à¦°à¦¹ করে অপেকà§à¦·à¦¾ করà§à¦¨à¥¤" + +#~ msgid "Current scene must be saved to re-import." +#~ msgstr "পà§à¦¨à¦°à¦¾à§Ÿ-ইমà§à¦ªà§‹à¦°à§à¦Ÿ করতে বরà§à¦¤à¦®à¦¾à¦¨ দৃশà§à¦¯à¦Ÿà¦¿à¦•ে অবশà§à¦¯à¦‡ সংরকà§à¦·à¦£ করতে হবে।" + +#~ msgid "Save & Re-Import" +#~ msgstr "সংরকà§à¦·à¦£ à¦à¦¬à¦‚ পà§à¦¨-ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨" + +#~ msgid "Re-Importing" +#~ msgstr "পà§à¦¨à¦°à¦¾à§Ÿ ইমà§à¦ªà§‹à¦°à§à¦Ÿ হচà§à¦›à§‡" + +#~ msgid "Re-Import Changed Resources" +#~ msgstr "পà§à¦¨-ইমà§à¦ªà§‹à¦°à§à¦Ÿà§‡ রিসোরà§à¦¸-সমূহ পরিবরà§à¦¤à¦¿à¦¤ হয়েছে" + +#~ msgid "Loading Export Templates" +#~ msgstr "à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿ টেমপà§à¦²à§‡à¦Ÿà¦¸à¦®à§‚হ লোড হচà§à¦›à§‡" + +#, fuzzy +#~ msgid "" +#~ "\n" +#~ "Status: Needs Re-Import" +#~ msgstr "সংরকà§à¦·à¦£ à¦à¦¬à¦‚ পà§à¦¨-ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨" + +#~ msgid "Same source and destination files, doing nothing." +#~ msgstr "ফাইলà§à¦—à§à¦²à§‹à¦° à¦à¦•ই উৎস à¦à¦¬à¦‚ গনà§à¦¤à¦¬à§à¦¯à¦¸à§à¦¥à¦¾à¦¨, কিছà§à¦‡ করা হচà§à¦›à§‡ না।" + +#~ msgid "Same source and destination paths, doing nothing." +#~ msgstr "পথগà§à¦²à§‹à¦° à¦à¦•ই উৎস à¦à¦¬à¦‚ গনà§à¦¤à¦¬à§à¦¯à¦¸à§à¦¥à¦¾à¦¨, কিছà§à¦‡ করা হচà§à¦›à§‡ না।" + +#~ msgid "Can't move directories to within themselves." +#~ msgstr "সà§à¦¥à¦¾à¦¨à¦¸à¦®à§‚হকে তাদের মাà¦à§‡à¦‡ সà§à¦¥à¦¾à¦¨à¦¾à¦¨à§à¦¤à¦° করা সমà§à¦à¦¬ নয়।" + +#, fuzzy +#~ msgid "Error moving file:\n" +#~ msgstr "ছবি লোডে সমসà§à¦¯à¦¾ হয়েছে:" + +#~ msgid "Pick New Name and Location For:" +#~ msgstr "নতà§à¦¨ নাম à¦à¦¬à¦‚ অবসà§à¦¥à¦¾à¦¨ বাছাই করà§à¦¨:" + +#~ msgid "No files selected!" +#~ msgstr "কোনো ফাইল নিরà§à¦¬à¦¾à¦šà¦¿à¦¤ হয়নি!" + +#~ msgid "Info" +#~ msgstr "তথà§à¦¯" + +#~ msgid "Re-Import.." +#~ msgstr "পà§à¦¨-ইমà§à¦ªà§‹à¦°à§à¦Ÿ.." + +#~ msgid "No bit masks to import!" +#~ msgstr "ইমà§à¦ªà§‹à¦°à§à¦Ÿ করার জনà§à¦¯ কোনো বিট মাসà§à¦• নেই!" + +#~ msgid "Target path is empty." +#~ msgstr "উদà§à¦¦à§‡à¦¶à§à¦¯à¦¿à¦¤ পথটি খালি।" + +#~ msgid "Target path must be a complete resource path." +#~ msgstr "উদà§à¦¦à§‡à¦¶à§à¦¯à¦¿à¦¤ পথটি অবশà§à¦¯à¦‡ à¦à¦•টি সমà§à¦ªà§à¦°à§à¦£ রিসোরà§à¦¸ পথ হতে হবে।" + +#~ msgid "Target path must exist." +#~ msgstr "উদà§à¦¦à§‡à¦¶à§à¦¯à¦¿à¦¤ পথটি অবশà§à¦¯à¦‡ বিদà§à¦¯à¦®à¦¾à¦¨ হতে হবে।" + +#~ msgid "Save path is empty!" +#~ msgstr "সংরকà§à¦·à¦£à§‡à¦° পথটি খালি!" + +#~ msgid "Import BitMasks" +#~ msgstr "BitMasks ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨" + +#~ msgid "Source Texture(s):" +#~ msgstr "টেকà§à¦¸à¦¾à¦°(সমূহ)-à¦à¦° উৎস:" + +#~ msgid "Target Path:" +#~ msgstr "উদà§à¦¦à§‡à¦¶à§à¦¯à¦¿à¦¤ পথ:" + +#~ msgid "Accept" +#~ msgstr "গà§à¦°à¦¹à¦£ করà§à¦¨" + +#~ msgid "Bit Mask" +#~ msgstr "বিট-মাসà§à¦• (Bit Mask)" + +#~ msgid "No source font file!" +#~ msgstr "ফনà§à¦Ÿà§‡à¦° কোনো উৎস ফাইল নেই!" + +#~ msgid "No target font resource!" +#~ msgstr "ফনà§à¦Ÿà§‡à¦° কোনো উদà§à¦¦à§‡à¦¶à§à¦¯à¦¿à¦¤ রিসোরà§à¦¸ নেই!" + +#, fuzzy +#~ msgid "" +#~ "Invalid file extension.\n" +#~ "Please use .font." +#~ msgstr "" +#~ "ফাইলের অগà§à¦°à¦¹à¦¨à¦¯à§‹à¦—à§à¦¯ à¦à¦•à§à¦¸à¦Ÿà§‡à¦¨à¦¶à¦¨à¥¤\n" +#~ "অনà§à¦—à§à¦°à¦¹ করে .fnt বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨à¥¤" + +#~ msgid "Couldn't save font." +#~ msgstr "ফনà§à¦Ÿ সংরকà§à¦·à¦£ করা সমà§à¦à¦¬ হয়নি।" + +#~ msgid "Source Font:" +#~ msgstr "ফনà§à¦Ÿà§‡à¦° উৎস:" + +#~ msgid "Source Font Size:" +#~ msgstr "উৎস ফনà§à¦Ÿà§‡à¦° আকার:" + +#~ msgid "Dest Resource:" +#~ msgstr "রিসোরà§à¦¸à§‡à¦° গনà§à¦¤à¦¬à§à¦¯à¦¸à§à¦¥à¦¾à¦¨:" + +#~ msgid "The quick brown fox jumps over the lazy dog." +#~ msgstr "" +#~ "বাদামী রঙà§à¦—ের দà§à¦°à§à¦¤ শিয়ালটি অলস কà§à¦•à§à¦°à§‡à¦° উপর দিয়ে লাফিয়ে যায় (The quick brown " +#~ "fox jumps over the lazy dog.)।" + +#~ msgid "Test:" +#~ msgstr "পরীকà§à¦·à¦¾:" + +#~ msgid "Options:" +#~ msgstr "সিদà§à¦§à¦¾à¦¨à§à¦¤à¦¸à¦®à§‚হ (অপশন):" + +#~ msgid "Font Import" +#~ msgstr "ফনà§à¦Ÿ ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨" + +#~ msgid "" +#~ "This file is already a Godot font file, please supply a BMFont type file " +#~ "instead." +#~ msgstr "" +#~ "à¦à¦‡ ফাইলটি ইতিমধà§à¦¯à§‡à¦‡ à¦à¦•টি Godot ফনà§à¦Ÿ ফাইল, পরিবরà§à¦¤à§‡ অনà§à¦—à§à¦°à¦¹ করে BMFont ধরণের " +#~ "ফাইল পà§à¦°à¦¦à¦¾à¦¨ করà§à¦¨à¥¤" + +#~ msgid "Failed opening as BMFont file." +#~ msgstr "BMFont ফাইল খোলা বà§à¦¯à¦°à§à¦¥ হয়েছে।" + +#~ msgid "Invalid font custom source." +#~ msgstr "সà§à¦¬à¦¨à¦¿à¦°à§à¦®à¦¿à¦¤ ফনà§à¦Ÿà§‡à¦° অগà§à¦°à¦¹à¦¨à¦¯à§‹à¦—à§à¦¯ উৎস।" + +#~ msgid "No meshes to import!" +#~ msgstr "ইমà§à¦ªà§‹à¦°à§à¦Ÿ করার মতো কোনো মেস নেই!" + +#~ msgid "Single Mesh Import" +#~ msgstr "à¦à¦•ক মেস ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨" + +#~ msgid "Source Mesh(es):" +#~ msgstr "মেস(সমূহ)-à¦à¦° উৎস:" + +#~ msgid "Surface %d" +#~ msgstr "পৃষà§à¦ তল %d" + +#~ msgid "No samples to import!" +#~ msgstr "ইমà§à¦ªà§‹à¦°à§à¦Ÿ করার মতো কোনো নমà§à¦¨à¦¾ নেই!" + +#~ msgid "Import Audio Samples" +#~ msgstr "শবà§à¦¦à§‡à¦° নমà§à¦¨à¦¾à¦¸à¦®à§‚হ ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨" + +#~ msgid "Source Sample(s):" +#~ msgstr "নমà§à¦¨à¦¾(সমূহ)-à¦à¦° উৎস:" + +#~ msgid "Audio Sample" +#~ msgstr "শবà§à¦¦à§‡à¦° নমà§à¦¨à¦¾" + +#~ msgid "New Clip" +#~ msgstr "নতà§à¦¨ কà§à¦²à¦¿à¦ª" + +#~ msgid "Flags" +#~ msgstr "পতাকাসমূহ" + +#~ msgid "Bake FPS:" +#~ msgstr "সিদà§à¦§ FPS:" + +#~ msgid "Optimizer" +#~ msgstr "পরিমারà§à¦œà¦•" + +#~ msgid "Max Linear Error" +#~ msgstr "সরà§à¦¬à§‡à¦¾à¦šà§à¦š রৈখিক à¦à§à¦²/সমসà§à¦¯à¦¾" + +#~ msgid "Max Angular Error" +#~ msgstr "সরà§à¦¬à§‡à¦¾à¦šà§à¦š কৌণিক à¦à§à¦²/সমসà§à¦¯à¦¾" + +#~ msgid "Max Angle" +#~ msgstr "সরà§à¦¬à§‡à¦¾à¦šà§à¦š কোণ" + +#~ msgid "Clips" +#~ msgstr "কà§à¦²à¦¿à¦ªà¦¸à¦®à§‚হ" + +#~ msgid "Start(s)" +#~ msgstr "আরমà§à¦(সমূহ)" + +#~ msgid "End(s)" +#~ msgstr "সমাপà§à¦¤à¦¿(সমূহ)" + +#~ msgid "Filters" +#~ msgstr "ফিলà§à¦Ÿà¦¾à¦°à¦¸à¦®à§‚হ" + +#~ msgid "Source path is empty." +#~ msgstr "উৎসের পথটি খালি।" + +#~ msgid "Couldn't load post-import script." +#~ msgstr "ইমà§à¦ªà§‹à¦°à§à¦Ÿ-পরবরà§à¦¤à§€ সà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ লোড করা সমà§à¦à¦¬ হয়নি।" + +#~ msgid "Invalid/broken script for post-import." +#~ msgstr "ইমà§à¦ªà§‹à¦°à§à¦Ÿ-পরবরà§à¦¤à§€ সà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ অকারà§à¦¯à¦•র/তà§à¦°à§à¦Ÿà¦¿à¦ªà§‚রà§à¦£à¥¤" + +#~ msgid "Error importing scene." +#~ msgstr "দৃশà§à¦¯ ইমà§à¦ªà§‹à¦°à§à¦Ÿà§‡ সমসà§à¦¯à¦¾ হয়েছে।" + +#~ msgid "Import 3D Scene" +#~ msgstr "3D দৃশà§à¦¯ ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨" + +#~ msgid "Source Scene:" +#~ msgstr "উৎস দৃশà§à¦¯:" + +#~ msgid "Same as Target Scene" +#~ msgstr "উদà§à¦¦à§‡à¦¶à§à¦¯à¦¿à¦¤ দৃশà§à¦¯à§‡à¦° নà§à¦¯à¦¾à§Ÿ" + +#~ msgid "Shared" +#~ msgstr "শেয়ারকৃত" + +#~ msgid "Target Texture Folder:" +#~ msgstr "গঠনবিনà§à¦¯à¦¾à¦¸à§‡à¦° উদà§à¦¦à§‡à¦¶à§à¦¯à¦¿à¦¤ ফোলà§à¦¡à¦¾à¦°:" + +#~ msgid "Post-Process Script:" +#~ msgstr "পà§à¦°à¦•à§à¦°à¦¿à¦¯à¦¼à¦¾-পরবরà§à¦¤à§€ সà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ:" + +#~ msgid "Custom Root Node Type:" +#~ msgstr "সà§à¦¬à¦¨à¦¿à¦°à§à¦®à¦¿à¦¤ মূল নোডের ধরণ:" + +#~ msgid "Auto" +#~ msgstr "সà§à¦¬à§Ÿà¦‚কà§à¦°à¦¿à§Ÿ" + +#~ msgid "Root Node Name:" +#~ msgstr "মূল নোডের নাম:" + +#~ msgid "The Following Files are Missing:" +#~ msgstr "নিমà§à¦¨à§‹à¦•à§à¦¤ ফাইলসমূহ অনà§à¦ªà¦¸à§à¦¥à¦¿à¦¤:" + +#~ msgid "Import Anyway" +#~ msgstr "যেকোনো উপায়েই ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨" + +#~ msgid "Import & Open" +#~ msgstr "ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨ à¦à¦¬à¦‚ খà§à¦²à§à¦¨" + +#~ msgid "Edited scene has not been saved, open imported scene anyway?" +#~ msgstr "সমà§à¦ªà¦¾à¦¦à¦¿à¦¤ দৃশà§à¦¯ সংরকà§à¦·à¦£ করা হয়নি, তবà§à¦“ ইমà§à¦ªà§‹à¦°à§à¦Ÿ করা দৃশà§à¦¯à¦Ÿà¦¿ খà§à¦²à¦¬à§‡à¦¨?" + +#~ msgid "Import Image:" +#~ msgstr "ছবি ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨:" + +#~ msgid "Couldn't localize path: %s (already local)" +#~ msgstr "পথ সà§à¦¥à¦¾à¦¨à§€à¦¯à¦¼à¦•রণ সমà§à¦à¦¬ হচà§à¦›à§‡ না: %s (ইতিমধà§à¦¯à§‡à¦‡ সà§à¦¥à¦¾à¦¨à§€à¦¯à¦¼)" + +#~ msgid "3D Scene Animation" +#~ msgstr "3D দৃশà§à¦¯à§‡à¦° অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨" + +#~ msgid "Uncompressed" +#~ msgstr "অসংকà§à¦šà¦¿à¦¤" + +#~ msgid "Compress Lossless (PNG)" +#~ msgstr "ধà§à¦¬à¦‚সবিহীন সঙà§à¦•োচন (PNG)" + +#~ msgid "Compress Lossy (WebP)" +#~ msgstr "ধà§à¦¬à¦‚সাতà§à¦®à¦• সঙà§à¦•োচন (WebP)" + +#~ msgid "Compress (VRAM)" +#~ msgstr "সঙà§à¦•োচন (VRAM)" + +#~ msgid "Texture Format" +#~ msgstr "গঠনবিনà§à¦¯à¦¾à¦¸à§‡à¦° ফরমà§à¦¯à¦¾à¦Ÿ" + +#~ msgid "Texture Compression Quality (WebP):" +#~ msgstr "গঠনবিনà§à¦¯à¦¾à¦¸ সঙà§à¦•োচনের গà§à¦£à¦®à¦¾à¦¨ (WebP):" + +#~ msgid "Texture Options" +#~ msgstr "গঠনবিনà§à¦¯à¦¾à¦¸à§‡à¦° সিদà§à¦§à¦¾à¦¨à§à¦¤ (অপশন)-সমূহ" + +#~ msgid "Please specify some files!" +#~ msgstr "অনà§à¦—à§à¦°à¦¹ করে কিছৠফাইল নিরà§à¦¦à¦¿à¦·à§à¦Ÿ করে দিন!" + +#~ msgid "At least one file needed for Atlas." +#~ msgstr "à¦à¦Ÿà¦²à¦¾à¦¸/মানচিতà§à¦°à¦¾à¦¬à¦²à§€à¦° জনà§à¦¯ কমপকà§à¦·à§‡ à¦à¦•টি ফাইল পà§à¦°à¦¯à¦¼à§‹à¦œà¦¨à¥¤" + +#~ msgid "Error importing:" +#~ msgstr "ইমà§à¦ªà§‹à¦°à§à¦Ÿà§‡ সমসà§à¦¯à¦¾ হয়েছে:" + +#~ msgid "Only one file is required for large texture." +#~ msgstr "বৃহৎ গঠনবিনà§à¦¯à¦¾à¦¸à§‡à¦° জনà§à¦¯ শà§à¦§à§à¦®à¦¾à¦¤à§à¦° à¦à¦•টি ফাইল পà§à¦°à§Ÿà§‹à¦œà¦¨à¥¤" + +#~ msgid "Max Texture Size:" +#~ msgstr "গঠনবিনà§à¦¯à¦¾à¦¸à§‡à¦° সরà§à¦¬à§‡à¦¾à¦šà§à¦š আকার:" + +#~ msgid "Import Textures for Atlas (2D)" +#~ msgstr "à¦à¦Ÿà¦²à¦¾à¦¸/মানচিতà§à¦°à¦¾à¦¬à¦²à§€à¦° জনà§à¦¯ গঠনবিনà§à¦¯à¦¾à¦¸ ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨ (2D)" + +#~ msgid "Cell Size:" +#~ msgstr "সেল (Cell)-à¦à¦° আকার:" + +#~ msgid "Large Texture" +#~ msgstr "বৃহৎ গঠনবিনà§à¦¯à¦¾à¦¸" + +#~ msgid "Import Large Textures (2D)" +#~ msgstr "বৃহৎ গঠনবিনà§à¦¯à¦¾à¦¸ ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨ (2D)" + +#~ msgid "Source Texture" +#~ msgstr "গঠনবিনà§à¦¯à¦¾à¦¸à§‡à¦° উৎস" + +#~ msgid "Base Atlas Texture" +#~ msgstr "গোড়ার à¦à¦Ÿà¦²à¦¾à¦¸/মানচিতà§à¦°à¦¾à¦¬à¦²à§€à¦° গঠনবিনà§à¦¯à¦¾à¦¸" + +#~ msgid "Source Texture(s)" +#~ msgstr "গঠনবিনà§à¦¯à¦¾à¦¸(সমূহ)-à¦à¦° উৎস" + +#~ msgid "Import Textures for 2D" +#~ msgstr "2D-à¦à¦° জনà§à¦¯ গঠনবিনà§à¦¯à¦¾à¦¸à¦¸à¦®à§‚হ ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨" + +#~ msgid "Import Textures for 3D" +#~ msgstr "3D-à¦à¦° জনà§à¦¯ গঠনবিনà§à¦¯à¦¾à¦¸à¦¸à¦®à§‚হ ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨" + +#~ msgid "Import Textures" +#~ msgstr "গঠনবিনà§à¦¯à¦¾à¦¸à¦¸à¦®à§‚হ ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨" + +#~ msgid "2D Texture" +#~ msgstr "2D গঠনবিনà§à¦¯à¦¾à¦¸" + +#~ msgid "3D Texture" +#~ msgstr "3D গঠনবিনà§à¦¯à¦¾à¦¸" + +#~ msgid "Atlas Texture" +#~ msgstr "à¦à¦Ÿà¦²à¦¾à¦¸/মানচিতà§à¦°à¦¾à¦¬à¦²à§€à¦° গঠনবিনà§à¦¯à¦¾à¦¸" + +#~ msgid "" +#~ "NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files " +#~ "to the project." +#~ msgstr "" +#~ "নোটিশ: 2D টেকà§à¦¸à¦šà¦¾à¦° (texture) ইমà§à¦ªà§‹à¦°à§à¦Ÿ (import) করা অতà§à¦¯à¦¾à¦¬à¦¶à§à¦¯à¦• নয়। শà§à¦§à§à¦®à¦¾à¦¤à§à¦° png/" +#~ "jpg ফাইলসমূহ পà§à¦°à¦•লà§à¦ªà§‡ পà§à¦°à¦¤à¦¿à¦²à¦¿à¦ªà¦¿/কপি করà§à¦¨à¥¤" + +#~ msgid "Crop empty space." +#~ msgstr "খালি সà§à¦¥à¦¾à¦¨ ছেà¦à¦Ÿà§‡ ফেলà§à¦¨à¥¤" + +#~ msgid "Texture" +#~ msgstr "গঠনবিনà§à¦¯à¦¾à¦¸" + +#~ msgid "Import Large Texture" +#~ msgstr "বৃহৎ গঠনবিনà§à¦¯à¦¾à¦¸ ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨" + +#~ msgid "Load Source Image" +#~ msgstr "উৎস হতে ছবি লোড করà§à¦¨" + +#~ msgid "Slicing" +#~ msgstr "টà§à¦•রো করà§à¦¨" + +#~ msgid "Saving" +#~ msgstr "সংরকà§à¦·à¦¿à¦¤ হচà§à¦›à§‡" + +#~ msgid "Couldn't save large texture:" +#~ msgstr "বৃহৎ গঠনবিনà§à¦¯à¦¾à¦¸ সংরকà§à¦·à¦£ করা সমà§à¦à¦¬ হচà§à¦›à§‡ না:" + +#~ msgid "Build Atlas For:" +#~ msgstr "à¦à¦Ÿà¦²à¦¾à¦¸/মানচিতà§à¦°à¦¾à¦¬à¦²à§€ নিরà§à¦®à¦¾à¦£ করà§à¦¨:" + +#~ msgid "Loading Image:" +#~ msgstr "ছবি লোড করা হচà§à¦›à§‡:" + +#~ msgid "Couldn't load image:" +#~ msgstr "ছবি লোড করা সমà§à¦à¦¬ হচà§à¦›à§‡ না:" + +#~ msgid "Converting Images" +#~ msgstr "ছবিসমূহ রূপানà§à¦¤à¦° করা হচà§à¦›à§‡" + +#~ msgid "Cropping Images" +#~ msgstr "ছবিসমূহ ছাà¦à¦Ÿà¦¾ হচà§à¦›à§‡" + +#~ msgid "Blitting Images" +#~ msgstr "ছবিসমূহ বà§à¦²à¦¿à¦Ÿà¦¿à¦‚ (Blitting) করা হচà§à¦›à§‡" + +#~ msgid "Couldn't save atlas image:" +#~ msgstr "à¦à¦Ÿà¦²à¦¾à¦¸/মানচিতà§à¦°à¦¾à¦¬à¦²à§€à¦° ছবি সংরকà§à¦·à¦£ করা সমà§à¦à¦¬ হচà§à¦›à§‡ না:" + +#~ msgid "Couldn't save converted texture:" +#~ msgstr "রূপানà§à¦¤à¦°à¦¿à¦¤ গঠনবিনà§à¦¯à¦¾à¦¸ সংরকà§à¦·à¦£ করা সমà§à¦à¦¬ হচà§à¦›à§‡ না:" + +#~ msgid "Invalid source!" +#~ msgstr "অকারà§à¦¯à¦•র উৎস!" + +#~ msgid "Invalid translation source!" +#~ msgstr "অকারà§à¦¯à¦•র অনà§à¦¬à¦¾à¦¦à§‡à¦° উৎস!" + +#~ msgid "Column" +#~ msgstr "কলাম" + +#~ msgid "No items to import!" +#~ msgstr "ইমà§à¦ªà§‹à¦°à§à¦Ÿ করার মতো কোনো বসà§à¦¤à§ নেই!" + +#~ msgid "No target path!" +#~ msgstr "কোনো উদà§à¦¦à§‡à¦¶à§à¦¯à¦¿à¦¤ পথ নেই!" + +#~ msgid "Import Translations" +#~ msgstr "অনà§à¦¬à¦¾à¦¦à¦¸à¦®à§‚হ ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨" + +#~ msgid "Couldn't import!" +#~ msgstr "ইমà§à¦ªà§‹à¦°à§à¦Ÿ করা সমà§à¦à¦¬ হচà§à¦›à§‡ না!" + +#~ msgid "Import Translation" +#~ msgstr "অনà§à¦¬à¦¾à¦¦ ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨" + +#~ msgid "Source CSV:" +#~ msgstr "CSV-à¦à¦° উৎস:" + +#~ msgid "Ignore First Row" +#~ msgstr "পà§à¦°à¦¥à¦® সারি অগà§à¦°à¦¾à¦¹à§à¦¯ করà§à¦¨" + +#~ msgid "Compress" +#~ msgstr "সঙà§à¦•োচন করà§à¦¨" + +#, fuzzy +#~ msgid "Add to Project (project.godot)" +#~ msgstr "পà§à¦°à¦•লà§à¦ªà§‡ সংযà§à¦•à§à¦¤ করà§à¦¨ (engine.cfg)" + +#~ msgid "Import Languages:" +#~ msgstr "à¦à¦¾à¦·à¦¾à¦¸à¦®à§‚হ ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨:" + +#~ msgid "Translation" +#~ msgstr "অনà§à¦¬à¦¾à¦¦" + +#~ msgid "Parsing %d Triangles:" +#~ msgstr "%d টি তà§à¦°à¦¿à¦à§à¦œ বিশà§à¦²à§‡à¦·à¦£ করা হচà§à¦›à§‡:" + +#~ msgid "Triangle #" +#~ msgstr "তà§à¦°à¦¿à¦à§à¦œ #" + +#~ msgid "Light Baker Setup:" +#~ msgstr "লাইটà§â€Œ সিদà§à¦§/বেকà§â€Œ-à¦à¦° সেটআপ:" + +#~ msgid "Fixing Lights" +#~ msgstr "লাইটà§â€Œà¦¸à¦®à§‚হ ঠিক করা হচà§à¦›à§‡" + +#~ msgid "Making BVH" +#~ msgstr "BVH তৈরি করা হচà§à¦›à§‡" + +#~ msgid "Transfer to Lightmaps:" +#~ msgstr "লাইটà§à¦®à§à¦¯à¦¾à¦ªà§‡ হসà§à¦¤à¦¾à¦¨à§à¦¤à¦° করà§à¦¨:" + +#~ msgid "Allocating Texture #" +#~ msgstr "গঠনবিনà§à¦¯à¦¾à¦¸ বণà§à¦Ÿà¦¿à¦¤ হচà§à¦›à§‡ #" + +#~ msgid "Baking Triangle #" +#~ msgstr "তà§à¦°à¦¿à¦à§à¦œ সিদà§à¦§/বেকà§â€Œ করা হচà§à¦›à§‡ #" + +#~ msgid "Post-Processing Texture #" +#~ msgstr "গঠনবিনà§à¦¯à¦¾à¦¸à§‡à¦° পà§à¦°à¦•à§à¦°à¦¿à¦¯à¦¼à¦¾-পরবরà§à¦¤à§€ পà§à¦°à¦•à§à¦°à¦¿à¦¯à¦¼à¦¾à¦•রণ #" + +#~ msgid "Reset the lightmap octree baking process (start over)." +#~ msgstr "" +#~ "লাইটà§à¦®à§à¦¯à¦¾à¦ª ওকটà§à¦°à§€à¦° (octree) সিদà§à¦§/বেকà§â€Œ-à¦à¦° পà§à¦°à¦•à§à¦°à¦¿à¦¯à¦¼à¦¾à¦•রণ পà§à¦¨:সà§à¦¥à¦¾à¦ªà¦¨ করà§à¦¨ (পà§à¦¨à¦°à¦¾à¦°à¦®à§à¦)।" + +#~ msgid "Zoom (%):" +#~ msgstr "জà§à¦®à§ (%):" + +#~ msgid "Skeleton.." +#~ msgstr "সà§à¦•েলেটন/কাঠাম.." + +#~ msgid "Zoom Reset" +#~ msgstr "জà§à¦®à§ পà§à¦¨:সà§à¦¥à¦¾à¦ªà¦¨ করà§à¦¨" + +#~ msgid "Zoom Set.." +#~ msgstr "জà§à¦®à§ নিরà§à¦§à¦¾à¦°à¦£ করà§à¦¨.." + +#~ msgid "Set a Value" +#~ msgstr "à¦à¦•টি মান নিরà§à¦§à¦¾à¦°à¦£ করà§à¦¨" + +#~ msgid "Snap (Pixels):" +#~ msgstr "সà§à¦¨à§à¦¯à¦¾à¦ª (পিকà§à¦¸à§‡à¦²à¦¸à¦®à§‚হ):" + +#~ msgid "Parse BBCode" +#~ msgstr "BBCode বিশà§à¦²à§‡à¦·à¦£ করà§à¦¨" + +#~ msgid "Length:" +#~ msgstr "লমà§à¦¬à¦¾:" + +#~ msgid "Open Sample File(s)" +#~ msgstr "নমà§à¦¨à¦¾ ফাইল(সমূহ) খà§à¦²à§à¦¨" + +#~ msgid "ERROR: Couldn't load sample!" +#~ msgstr "সমসà§à¦¯à¦¾: নমà§à¦¨à¦¾ লোড করা সমà§à¦à¦¬ হয়নি!" + +#~ msgid "Add Sample" +#~ msgstr "নমà§à¦¨à¦¾ যোগ করà§à¦¨" + +#~ msgid "Rename Sample" +#~ msgstr "নমà§à¦¨à¦¾ পà§à¦¨à¦ƒà¦¨à¦¾à¦®à¦•রণ করà§à¦¨" + +#~ msgid "Delete Sample" +#~ msgstr "নমà§à¦¨à¦¾ অপসারণ করà§à¦¨" + +#~ msgid "16 Bits" +#~ msgstr "১৬ বিটসà§â€Œ" + +#~ msgid "8 Bits" +#~ msgstr "à§® বিটসà§â€Œ" + +#~ msgid "Stereo" +#~ msgstr "সà§à¦Ÿà§‡à¦°à¦¿à¦“" + +#~ msgid "Mono" +#~ msgstr "মনো" + +#~ msgid "Pitch" +#~ msgstr "পিচà§â€Œ" + +#~ msgid "Window" +#~ msgstr "উইনà§à¦¡à§‹" + +#~ msgid "Move Right" +#~ msgstr "ডানে সরান" + +#~ msgid "Scaling to %s%%." +#~ msgstr "%s%% -ঠমাপিত হচà§à¦›à§‡à¥¤" + +#~ msgid "Up" +#~ msgstr "উপরে" + +#~ msgid "Down" +#~ msgstr "নীচে" + +#~ msgid "Bucket" +#~ msgstr "বাকেটà§â€Œ" + +#~ msgid "Invalid project path, the path must exist!" +#~ msgstr "অকারà§à¦¯à¦•র পà§à¦°à¦•লà§à¦ªà§‡à¦° পথ, পথটি অবশà§à¦¯à¦‡ বিদà§à¦¯à¦®à¦¾à¦¨ হতে হবে!" + +#, fuzzy +#~ msgid "Invalid project path, project.godot must not exist." +#~ msgstr "অকারà§à¦¯à¦•র পà§à¦°à¦•লà§à¦ªà§‡à¦° পথ, engine.cfg অবশà§à¦¯à¦‡ অনà§à¦ªà¦¸à§à¦¥à¦¿à¦¤ হতে হবে।" + +#, fuzzy +#~ msgid "Invalid project path, project.godot must exist." +#~ msgstr "অকারà§à¦¯à¦•র পà§à¦°à¦•লà§à¦ªà§‡à¦° পথ, engine.cfg অবশà§à¦¯à¦‡ উপসà§à¦¥à¦¿à¦¤ হতে হবে।" + +#~ msgid "Project Path (Must Exist):" +#~ msgstr "পà§à¦°à¦•লà§à¦ªà§‡à¦° পথ (অবশà§à¦¯à¦‡ বিদà§à¦¯à¦®à¦¾à¦¨ হতে হবে):" + +#~ msgid "Create New Resource" +#~ msgstr "নতà§à¦¨ রিসোরà§à¦¸ তৈরি করà§à¦¨" + +#~ msgid "Open Resource" +#~ msgstr "রিসোরà§à¦¸ খà§à¦²à§à¦¨" + +#~ msgid "Save Resource" +#~ msgstr "রিসোরà§à¦¸ সংরকà§à¦·à¦£ করà§à¦¨" + +#~ msgid "Resource Tools" +#~ msgstr "রিসোরà§à¦¸-à¦à¦° সরঞà§à¦œà¦¾à¦®à¦¸à¦®à§‚হ" + +#~ msgid "Make Local" +#~ msgstr "সà§à¦¥à¦¾à¦¨à§€à§Ÿ করà§à¦¨" + +#~ msgid "Edit Groups" +#~ msgstr "গà§à¦°à§à¦ªà¦¸à¦®à§‚হ সমà§à¦ªà¦¾à¦¦à¦¨ করà§à¦¨" + +#~ msgid "Edit Connections" +#~ msgstr "সংযোগসমূহ সমà§à¦ªà¦¾à¦¦à¦¨ করà§à¦¨" + +#, fuzzy +#~ msgid "Tiles" +#~ msgstr "ফাইল" + +#~ msgid "Ctrl+" +#~ msgstr "Ctrl+" + #~ msgid "Close scene? (Unsaved changes will be lost)" #~ msgstr "দৃশà§à¦¯ বনà§à¦§ করবেন? (অসংরকà§à¦·à¦¿à¦¤ পরিবরà§à¦¤à¦¨à¦¸à¦®à§‚হ হারিয়ে যাবে)" @@ -8099,9 +8373,6 @@ msgstr "" #~ msgid "Close Goto Prev. Scene" #~ msgstr "বনà§à¦§ করে পূরà§à¦¬à§‡à¦° দৃশà§à¦¯à§‡ যান" -#~ msgid "Expand to Parent" -#~ msgstr "ধারক/বাহক পরà§à¦¯à¦¨à§à¦¤ বিসà§à¦¤à§ƒà¦¤ করà§à¦¨" - #~ msgid "Del" #~ msgstr "ডিলিট/অপসারণ" @@ -8265,18 +8536,12 @@ msgstr "" #~ msgid "Save Translatable Strings" #~ msgstr "অনà§à¦¬à¦¾à¦¦-সমà§à¦à¦¬ শবà§à¦¦à¦®à¦¾à¦²à¦¾/বাকà§à¦¯-সমূহ সংরকà§à¦·à¦£ করà§à¦¨" -#~ msgid "Translatable Strings.." -#~ msgstr "অনà§à¦¬à¦¾à¦¦-সমà§à¦à¦¬ শবà§à¦¦à¦®à¦¾à¦²à¦¾/বাকà§à¦¯-সমূহ.." - #~ msgid "Install Export Templates" #~ msgstr "à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿà§‡à¦° টেমপà§à¦²à§‡à¦Ÿà¦¸à¦®à§‚হ ইনà§à¦¸à¦Ÿà¦² করà§à¦¨" #~ msgid "Edit Script Options" #~ msgstr "সà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ-à¦à¦° সিদà§à¦§à¦¾à¦¨à§à¦¤à¦¸à¦®à§‚হ সমà§à¦ªà¦¾à¦¦à¦¨ করà§à¦¨" -#~ msgid "Please export outside the project folder!" -#~ msgstr "অনà§à¦—à§à¦°à¦¹ করে পà§à¦°à¦•লà§à¦ªà§‡à¦° ফোলà§à¦¡à¦¾à¦°à§‡à¦° বাইরে à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨!" - #~ msgid "Error exporting project!" #~ msgstr "পà§à¦°à¦•লà§à¦ª à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿà§‡ সমসà§à¦¯à¦¾ হয়েছে!" @@ -8336,18 +8601,12 @@ msgstr "" #~ msgid "Include" #~ msgstr "অনà§à¦¤à¦°à§à¦à§à¦•à§à¦¤ করà§à¦¨" -#~ msgid "Change Image Group" -#~ msgstr "ছবির গà§à¦°à§à¦ª পরিবরà§à¦¤à¦¨ করà§à¦¨" - #~ msgid "Group name can't be empty!" #~ msgstr "গà§à¦°à§à¦ªà§‡à¦° নাম খালি হতে পারবে না!" #~ msgid "Invalid character in group name!" #~ msgstr "গà§à¦°à§à¦ªà§‡à¦° নামে অগà§à¦°à¦¹à¦¨à¦¯à§‹à¦—à§à¦¯ অকà§à¦·à¦°!" -#~ msgid "Group name already exists!" -#~ msgstr "গà§à¦°à§à¦ªà§‡à¦° নাম ইতিমধà§à¦¯à§‡à¦‡ আছে!" - #~ msgid "Add Image Group" #~ msgstr "ছবির গà§à¦°à§à¦ª যোগ করà§à¦¨" @@ -8495,9 +8754,6 @@ msgstr "" #~ msgid "Lighting" #~ msgstr "লাইটিং" -#~ msgid "Toggle Persisting" -#~ msgstr "সà§à¦¥à¦¾à§Ÿà§€à§Ÿà¦¤à¦¾ টগল করà§à¦¨" - #~ msgid "Global" #~ msgstr "সারà§à¦¬à¦œà¦¨à§€à¦¨" diff --git a/editor/translations/ca.po b/editor/translations/ca.po index 4b126e3b16..4d90d8c6c9 100644 --- a/editor/translations/ca.po +++ b/editor/translations/ca.po @@ -193,10 +193,9 @@ msgid "Create %d NEW tracks and insert keys?" msgstr "Vol crear %d noves pistes i inserir-hi claus?" #: editor/animation_editor.cpp editor/create_dialog.cpp -#: editor/editor_audio_buses.cpp +#: editor/editor_audio_buses.cpp editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp #: editor/plugins/mesh_instance_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp editor/project_manager.cpp #: editor/script_create_dialog.cpp msgid "Create" @@ -359,271 +358,6 @@ msgstr "Canvia Tipus de la Matriu" msgid "Change Array Value" msgstr "Canvia Valor de la Matriu" -#: editor/asset_library_editor_plugin.cpp -msgid "Free" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp -msgid "Version:" -msgstr "Versió:" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Contents:" -msgstr "Constants:" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "View Files" -msgstr "Fitxer:" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_help.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp -msgid "Description:" -msgstr "Descripció:" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -#: editor/project_manager.cpp -msgid "Install" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp -#: editor/connections_dialog.cpp editor/export_template_manager.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -#: editor/project_settings_editor.cpp editor/property_editor.cpp -#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Close" -msgstr "Tanca" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve hostname:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Connection error, please try again." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Can't connect." -msgstr "Connecta.." - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Can't connect to host:" -msgstr "Connecta al Node:" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response from host:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Request failed, return code:" -msgstr "Format de fitxer desconegut:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Req. Failed." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Request failed, too many redirects" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Redirect Loop." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Bad download hash, assuming file has been tampered with." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Expected:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Got:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed sha256 hash check" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Asset Download Error:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -msgid "Success!" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Fetching:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Resolving.." -msgstr "Desant..." - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Connecting.." -msgstr "Connecta.." - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Requesting.." -msgstr "Provant" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Error making request" -msgstr "Error en desar recurs!" - -#: editor/asset_library_editor_plugin.cpp -msgid "Idle" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Retry" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Download Error" -msgstr "Errors de Cà rrega" - -#: editor/asset_library_editor_plugin.cpp -msgid "Download for this asset is already in progress!" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "first" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "prev" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "next" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "last" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "All" -msgstr "Tot" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/property_selector.cpp editor/quick_open.cpp -#: editor/settings_config_dialog.cpp -msgid "Search:" -msgstr "Cerca:" - -#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Search" -msgstr "Cerca" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/project_manager.cpp -msgid "Import" -msgstr "Importa" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Plugins" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Sort:" -msgstr "Ordena:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Reverse" -msgstr "Inverteix" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Category:" -msgstr "Categoria:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Site:" -msgstr "Lloc:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "Suport..." - -#: editor/asset_library_editor_plugin.cpp -msgid "Official" -msgstr "Oficial" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -msgid "Community" -msgstr "Comunitat" - -#: editor/asset_library_editor_plugin.cpp -msgid "Testing" -msgstr "Provant" - -#: editor/asset_library_editor_plugin.cpp -msgid "Assets ZIP File" -msgstr "Arxiu ZIP d'Actius" - -#: editor/call_dialog.cpp -msgid "Method List For '%s':" -msgstr "Llista de mètodes de '%s':" - -#: editor/call_dialog.cpp modules/visual_script/visual_script_editor.cpp -msgid "Call" -msgstr "Crida" - -#: editor/call_dialog.cpp -msgid "Method List:" -msgstr "Llista de mètodes:" - -#: editor/call_dialog.cpp -msgid "Arguments:" -msgstr "Arguments:" - -#: editor/call_dialog.cpp -msgid "Return:" -msgstr "Retorn:" - #: editor/code_editor.cpp msgid "Go to Line" msgstr "Vés a la LÃnia" @@ -661,6 +395,14 @@ msgstr "Paraules senceres" msgid "Selection Only" msgstr "Selecció Només" +#: editor/code_editor.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp +msgid "Search" +msgstr "Cerca" + #: editor/code_editor.cpp editor/editor_help.cpp msgid "Find" msgstr "Troba" @@ -693,11 +435,11 @@ msgstr "Indica en reemplaçar" msgid "Skip" msgstr "Omet" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom In" msgstr "Apropa" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom Out" msgstr "Allunya" @@ -765,6 +507,20 @@ msgstr "Diferit" msgid "Oneshot" msgstr "D'un cop" +#: editor/connections_dialog.cpp editor/dependency_editor.cpp +#: editor/export_template_manager.cpp +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Close" +msgstr "Tanca" + #: editor/connections_dialog.cpp msgid "Connect" msgstr "Connecta" @@ -790,7 +546,7 @@ msgstr "Connecta.." msgid "Disconnect" msgstr "Desconnecta" -#: editor/connections_dialog.cpp editor/node_dock.cpp +#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" msgstr "Senyals" @@ -807,12 +563,25 @@ msgstr "Favorits:" msgid "Recent:" msgstr "Recents:" +#: editor/create_dialog.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp +#: editor/quick_open.cpp editor/settings_config_dialog.cpp +msgid "Search:" +msgstr "Cerca:" + #: editor/create_dialog.cpp editor/editor_help.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp #: editor/quick_open.cpp msgid "Matches:" msgstr "Coincidències:" +#: editor/create_dialog.cpp editor/editor_help.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp +#: editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "Descripció:" + #: editor/dependency_editor.cpp msgid "Search Replacement For:" msgstr "Cerca Reemplaçant per a:" @@ -872,6 +641,10 @@ msgid "Owners Of:" msgstr "Propietaris de:" #: editor/dependency_editor.cpp +msgid "Remove selected files from the project? (no undo)" +msgstr "Elimina fitxer seleccionats del project? (no es pot desfer)" + +#: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" @@ -881,8 +654,8 @@ msgstr "" "Eliminar de totes formes? (No es pot desfer)" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (no undo)" -msgstr "Elimina fitxer seleccionats del project? (no es pot desfer)" +msgid "Cannot remove:\n" +msgstr "" #: editor/dependency_editor.cpp msgid "Error loading:" @@ -949,11 +722,6 @@ msgstr "" #: editor/editor_about.cpp #, fuzzy -msgid "Authors" -msgstr "Autor:" - -#: editor/editor_about.cpp -#, fuzzy msgid "Project Founders" msgstr "Configuració del Projecte" @@ -970,6 +738,39 @@ msgid "Developers" msgstr "" #: editor/editor_about.cpp +#, fuzzy +msgid "Authors" +msgstr "Autor:" + +#: editor/editor_about.cpp +msgid "Platinum Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Mini Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Silver Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Bronze Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Donors" +msgstr "" + +#: editor/editor_about.cpp msgid "License" msgstr "" @@ -1013,6 +814,16 @@ msgid "Package Installed Successfully!" msgstr "" #: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Success!" +msgstr "" + +#: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp +msgid "Install" +msgstr "" + +#: editor/editor_asset_installer.cpp msgid "Package Installer" msgstr "" @@ -1063,11 +874,6 @@ msgid "Audio Bus, Drag and Drop to rearrange." msgstr "" #: editor/editor_audio_buses.cpp -#, fuzzy -msgid "Bus options" -msgstr "Opcions de Depuració (Debug)" - -#: editor/editor_audio_buses.cpp msgid "Solo" msgstr "" @@ -1079,6 +885,11 @@ msgstr "" msgid "Bypass" msgstr "" +#: editor/editor_audio_buses.cpp +#, fuzzy +msgid "Bus options" +msgstr "Opcions de Depuració (Debug)" + #: editor/editor_audio_buses.cpp editor/plugins/tile_map_editor_plugin.cpp #: editor/scene_tree_dock.cpp msgid "Duplicate" @@ -1086,6 +897,11 @@ msgstr "" #: editor/editor_audio_buses.cpp #, fuzzy +msgid "Reset Volume" +msgstr "Reinicia el Zoom" + +#: editor/editor_audio_buses.cpp +#, fuzzy msgid "Delete Effect" msgstr "Elimina Seleccionats" @@ -1109,6 +925,11 @@ msgstr "Duplica la Selecció" #: editor/editor_audio_buses.cpp #, fuzzy +msgid "Reset Bus Volume" +msgstr "Reinicia el Zoom" + +#: editor/editor_audio_buses.cpp +#, fuzzy msgid "Move Audio Bus" msgstr "Mou Afegir Clau" @@ -1143,7 +964,8 @@ msgstr "" msgid "Create a new Bus Layout." msgstr "" -#: editor/editor_audio_buses.cpp editor/script_create_dialog.cpp +#: editor/editor_audio_buses.cpp editor/property_editor.cpp +#: editor/script_create_dialog.cpp msgid "Load" msgstr "" @@ -1238,7 +1060,7 @@ msgid "Rearrange Autoloads" msgstr "Reorganitza AutoCà rregues" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp scene/gui/file_dialog.cpp +#: scene/gui/file_dialog.cpp msgid "Path:" msgstr "CamÃ:" @@ -1246,9 +1068,7 @@ msgstr "CamÃ:" msgid "Node Name:" msgstr "Nom del node:" -#: editor/editor_autoload_settings.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp editor/project_manager.cpp +#: editor/editor_autoload_settings.cpp editor/project_manager.cpp msgid "Name" msgstr "Nom" @@ -1282,18 +1102,19 @@ msgid "Choose a Directory" msgstr "Tria un Directori" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Create Folder" msgstr "Crea una Carpeta" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: editor/editor_plugin_settings.cpp editor/plugins/theme_editor_plugin.cpp -#: editor/project_export.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp +#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp +#: scene/gui/file_dialog.cpp msgid "Name:" msgstr "Nom:" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Could not create folder." msgstr "No s'ha pogut crear la carpeta." @@ -1313,30 +1134,6 @@ msgstr "Compressió" msgid "Template file not found:\n" msgstr "" -#: editor/editor_export.cpp -msgid "Added:" -msgstr "Afegit:" - -#: editor/editor_export.cpp -msgid "Removed:" -msgstr "Eliminat:" - -#: editor/editor_export.cpp -msgid "Error saving atlas:" -msgstr "Error en desar atles:" - -#: editor/editor_export.cpp -msgid "Could not save atlas subtexture:" -msgstr "No s'ha pogut desar la subtextura de l'atles:" - -#: editor/editor_export.cpp -msgid "Exporting for %s" -msgstr "Exportació per a %s" - -#: editor/editor_export.cpp -msgid "Setting Up.." -msgstr "Instal·lant.." - #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "Fitxer Existent, Sobreescriure?" @@ -1421,6 +1218,11 @@ msgstr "Mou Favorit Amunt" msgid "Move Favorite Down" msgstr "Mou Favorit Avall" +#: editor/editor_file_dialog.cpp +#, fuzzy +msgid "Go to parent folder" +msgstr "No s'ha pogut crear la carpeta." + #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Directories & Files:" msgstr "Directoris i Fitxers:" @@ -1464,6 +1266,10 @@ msgstr "Llista de Classes:" msgid "Search Classes" msgstr "Cerca Classes" +#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +msgid "Top" +msgstr "" + #: editor/editor_help.cpp editor/property_editor.cpp msgid "Class:" msgstr "Classe:" @@ -1480,15 +1286,30 @@ msgstr "Heretat per:" msgid "Brief Description:" msgstr "Descripció breu:" +#: editor/editor_help.cpp +#, fuzzy +msgid "Members" +msgstr "Membres:" + #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "Membres:" #: editor/editor_help.cpp +#, fuzzy +msgid "Public Methods" +msgstr "Mètodes públics:" + +#: editor/editor_help.cpp msgid "Public Methods:" msgstr "Mètodes públics:" #: editor/editor_help.cpp +#, fuzzy +msgid "GUI Theme Items" +msgstr "Elements del Tema de la GUI:" + +#: editor/editor_help.cpp msgid "GUI Theme Items:" msgstr "Elements del Tema de la GUI:" @@ -1498,6 +1319,11 @@ msgstr "Senyals:" #: editor/editor_help.cpp #, fuzzy +msgid "Enumerations" +msgstr "Funcions:" + +#: editor/editor_help.cpp +#, fuzzy msgid "Enumerations:" msgstr "Funcions:" @@ -1506,19 +1332,51 @@ msgid "enum " msgstr "" #: editor/editor_help.cpp +#, fuzzy +msgid "Constants" +msgstr "Constants:" + +#: editor/editor_help.cpp msgid "Constants:" msgstr "Constants:" #: editor/editor_help.cpp #, fuzzy +msgid "Description" +msgstr "Descripció:" + +#: editor/editor_help.cpp +#, fuzzy +msgid "Properties" +msgstr "Propietats de l'objecte." + +#: editor/editor_help.cpp +#, fuzzy msgid "Property Description:" msgstr "Descripció breu:" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this property. Please help us by " +"[color=$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp +#, fuzzy +msgid "Methods" +msgstr "Llista de mètodes:" + +#: editor/editor_help.cpp msgid "Method Description:" msgstr "Descripció del mètode:" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this method. Please help us by [color=" +"$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp msgid "Search Text" msgstr "Cerca Text" @@ -1528,24 +1386,21 @@ msgid "Output:" msgstr " Sortida:" #: editor/editor_log.cpp editor/plugins/animation_tree_editor_plugin.cpp -#: editor/plugins/rich_text_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_editor_debugger.cpp scene/gui/line_edit.cpp -#: scene/gui/text_edit.cpp +#: editor/property_editor.cpp editor/script_editor_debugger.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Clear" msgstr "Neteja" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Error saving resource!" msgstr "Error en desar recurs!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Save Resource As.." msgstr "Desar Recurs com..." -#: editor/editor_node.cpp editor/export_template_manager.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "I see.." msgstr "Vaja..." @@ -1562,6 +1417,30 @@ msgid "Error while saving." msgstr "Error en desar." #: editor/editor_node.cpp +#, fuzzy +msgid "Can't open '%s'." +msgstr "No es pot operar en '..'" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Error while parsing '%s'." +msgstr "Error en desar." + +#: editor/editor_node.cpp +msgid "Unexpected end of file '%s'." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Missing '%s' or its dependencies." +msgstr "Escena '%s' té dependències no và lides:" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Error while loading '%s'." +msgstr "Error en desar." + +#: editor/editor_node.cpp msgid "Saving Scene" msgstr "Desant Escena" @@ -1622,6 +1501,33 @@ msgid "Restored default layout to base settings." msgstr "S'ha restaurat la configuració predeterminada." #: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was imported, so it's not editable.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was instanced or inherited.\n" +"Changes to it will not be kept when saving the current scene." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource was imported, so it's not editable. Change its settings in the " +"import panel and then re-import." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This scene was imported, so changes to it will not be kept.\n" +"Instancing it or inheriting will allow making changes to it.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp msgid "Copy Params" msgstr "Copia Parà metres" @@ -1798,6 +1704,12 @@ msgid "Save changes the following scene(s) before opening Project Manager?" msgstr "" #: editor/editor_node.cpp +msgid "" +"This option is deprecated. Situations where refresh must be forced are now " +"considered a bug. Please report." +msgstr "" + +#: editor/editor_node.cpp msgid "Pick a Main Scene" msgstr "Tria una Escena Principal" @@ -1824,7 +1736,7 @@ msgid "" msgstr "" #: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Ugh" msgstr "Uf..." @@ -1837,14 +1749,15 @@ msgstr "" "Utilitzeu 'Importa' per obrir l'escena i deseu-la dins del camà del projecte." #: editor/editor_node.cpp -msgid "Error loading scene." -msgstr "No s'ha pogut carregar l'escena." - -#: editor/editor_node.cpp msgid "Scene '%s' has broken dependencies:" msgstr "Escena '%s' té dependències no và lides:" #: editor/editor_node.cpp +#, fuzzy +msgid "Clear Recent Scenes" +msgstr "Reverteix Escena" + +#: editor/editor_node.cpp msgid "Save Layout" msgstr "Desar Disposició (Layout)" @@ -1878,7 +1791,7 @@ msgstr "Mode Lliure de Distraccions" msgid "Toggle distraction-free mode." msgstr "Mode Lliure de Distraccions" -#: editor/editor_node.cpp editor/io_plugins/editor_scene_import_plugin.cpp +#: editor/editor_node.cpp msgid "Scene" msgstr "Escena" @@ -2122,6 +2035,10 @@ msgstr "" msgid "Issue Tracker" msgstr "" +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +msgid "Community" +msgstr "Comunitat" + #: editor/editor_node.cpp msgid "About" msgstr "Quant a" @@ -2130,7 +2047,7 @@ msgstr "Quant a" msgid "Play the project." msgstr "Reprodueix el projecte." -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Play" msgstr "Reprodueix" @@ -2146,7 +2063,7 @@ msgstr "Pausa Escena" msgid "Stop the scene." msgstr "Atura l'escena." -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Stop" msgstr "Atura" @@ -2219,6 +2136,15 @@ msgid "Object properties." msgstr "Propietats de l'objecte." #: editor/editor_node.cpp +msgid "Changes may be lost!" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Import" +msgstr "Importa" + +#: editor/editor_node.cpp msgid "FileSystem" msgstr "SistemaDeFitxers" @@ -2234,14 +2160,6 @@ msgstr "Sortida" msgid "Don't Save" msgstr "" -#: editor/editor_node.cpp editor/editor_reimport_dialog.cpp -msgid "Re-Import" -msgstr "ReImporta" - -#: editor/editor_node.cpp editor/editor_plugin_settings.cpp -msgid "Update" -msgstr "Actualitza" - #: editor/editor_node.cpp msgid "Import Templates From ZIP File" msgstr "Importa Plantilles des d'un Fitxer ZIP" @@ -2308,11 +2226,28 @@ msgstr "Editor de Dependències" msgid "Open the previous Editor" msgstr "" +#: editor/editor_plugin.cpp +msgid "Creating Mesh Previews" +msgstr "" + +#: editor/editor_plugin.cpp +msgid "Thumbnail.." +msgstr "" + #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" msgstr "Connectors Instal·lats:" #: editor/editor_plugin_settings.cpp +msgid "Update" +msgstr "Actualitza" + +#: editor/editor_plugin_settings.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Version:" +msgstr "Versió:" + +#: editor/editor_plugin_settings.cpp msgid "Author:" msgstr "Autor:" @@ -2364,26 +2299,6 @@ msgstr "Propi" msgid "Frame #:" msgstr "Fotograma núm.:" -#: editor/editor_reimport_dialog.cpp -msgid "Please wait for scan to complete." -msgstr "Espera que s'acabi l'anà lisi." - -#: editor/editor_reimport_dialog.cpp -msgid "Current scene must be saved to re-import." -msgstr "S'ha de desar l'escena abans de reimportar-la." - -#: editor/editor_reimport_dialog.cpp -msgid "Save & Re-Import" -msgstr "Desa i ReImporta" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Importing" -msgstr "Re-Importació" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Import Changed Resources" -msgstr "ReImporta Recursos Modificats" - #: editor/editor_run_native.cpp msgid "Select device from the list" msgstr "" @@ -2496,10 +2411,6 @@ msgid "Importing:" msgstr "Importació:" #: editor/export_template_manager.cpp -msgid "Loading Export Templates" -msgstr "Carregant Plantilles d'Exportació" - -#: editor/export_template_manager.cpp #, fuzzy msgid "Current Version:" msgstr "Versió:" @@ -2539,11 +2450,18 @@ msgid "Cannot navigate to '" msgstr "" #: editor/filesystem_dock.cpp -#, fuzzy +msgid "View items as a grid of thumbnails" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "View items as a list" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "" "\n" -"Status: Needs Re-Import" -msgstr "Desa i ReImporta" +"Status: Import of file failed. Please fix file and reimport manually." +msgstr "" #: editor/filesystem_dock.cpp #, fuzzy @@ -2553,48 +2471,55 @@ msgid "" msgstr "Lletra:" #: editor/filesystem_dock.cpp -msgid "Same source and destination files, doing nothing." -msgstr "" -"Els fitxers d'origen i destinació són els mateixos. No s'ha produït cap " -"acció." +#, fuzzy +msgid "Cannot move/rename resources root." +msgstr "No es pot carregar/processar la lletra." #: editor/filesystem_dock.cpp -msgid "Target file exists, can't overwrite. Delete first." -msgstr "" +#, fuzzy +msgid "Cannot move a folder into itself.\n" +msgstr "No es pot importar un fitxer dins de si mateix:" #: editor/filesystem_dock.cpp -msgid "Same source and destination paths, doing nothing." -msgstr "El camà d'origen i destinació es idèntic. No s'ha produït cap acció." +#, fuzzy +msgid "Error moving:\n" +msgstr "Error en carregar:" #: editor/filesystem_dock.cpp -msgid "Can't move directories to within themselves." -msgstr "No es poden moure directoris en si mateixos." +#, fuzzy +msgid "Unable to update dependencies:\n" +msgstr "Escena '%s' té dependències no và lides:" #: editor/filesystem_dock.cpp -msgid "Can't rename deps for:\n" +msgid "No name provided" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Provided name contains invalid characters" msgstr "" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Error moving file:\n" -msgstr "Error en desar TileSet!" +msgid "No name provided." +msgstr "Renomena o Mou..." #: editor/filesystem_dock.cpp #, fuzzy -msgid "Error moving dir:\n" -msgstr "Error en carregar:" +msgid "Name contains invalid characters." +msgstr "Carà cters và lids:" #: editor/filesystem_dock.cpp -msgid "Can't operate on '..'" -msgstr "No es pot operar en '..'" +msgid "A file or folder with this name already exists." +msgstr "" #: editor/filesystem_dock.cpp -msgid "Pick New Name and Location For:" -msgstr "Tria un Nou Nom i Ubicació per a:" +#, fuzzy +msgid "Renaming file:" +msgstr "Reanomena Variable" #: editor/filesystem_dock.cpp -msgid "No files selected!" -msgstr "Cap fitxer seleccionat!" +msgid "Renaming folder:" +msgstr "" #: editor/filesystem_dock.cpp msgid "Expand all" @@ -2605,40 +2530,38 @@ msgid "Collapse all" msgstr "" #: editor/filesystem_dock.cpp -msgid "Show In File Manager" -msgstr "Mostra en el Gestor de Fitxers" - -#: editor/filesystem_dock.cpp -msgid "Instance" -msgstr "Instà ncia" +msgid "Copy Path" +msgstr "Copia CamÃ" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "Edita Dependències..." +#, fuzzy +msgid "Rename.." +msgstr "Renomena o Mou..." #: editor/filesystem_dock.cpp -msgid "View Owners.." -msgstr "Mostra Propietaris..." +msgid "Move To.." +msgstr "Mou cap a..." #: editor/filesystem_dock.cpp -msgid "Copy Path" -msgstr "Copia CamÃ" +#, fuzzy +msgid "New Folder.." +msgstr "Crea una Carpeta" #: editor/filesystem_dock.cpp -msgid "Rename or Move.." -msgstr "Renomena o Mou..." +msgid "Show In File Manager" +msgstr "Mostra en el Gestor de Fitxers" #: editor/filesystem_dock.cpp -msgid "Move To.." -msgstr "Mou cap a..." +msgid "Instance" +msgstr "Instà ncia" #: editor/filesystem_dock.cpp -msgid "Info" -msgstr "Informació" +msgid "Edit Dependencies.." +msgstr "Edita Dependències..." #: editor/filesystem_dock.cpp -msgid "Re-Import.." -msgstr "ReImporta..." +msgid "View Owners.." +msgstr "Mostra Propietaris..." #: editor/filesystem_dock.cpp msgid "Previous Directory" @@ -2670,6 +2593,11 @@ msgstr "" msgid "Move" msgstr "Mou" +#: editor/filesystem_dock.cpp editor/plugins/animation_tree_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Rename" +msgstr "" + #: editor/groups_editor.cpp msgid "Add to Group" msgstr "Afegeix al Grup" @@ -2684,6 +2612,10 @@ msgid "Import as Single Scene" msgstr "Important Escena..." #: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials" msgstr "" @@ -2696,6 +2628,18 @@ msgid "Import with Separate Objects+Materials" msgstr "" #: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Materials+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Materials+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp #, fuzzy msgid "Import as Multiple Scenes" msgstr "Importa Escena 3D" @@ -2705,38 +2649,31 @@ msgid "Import as Multiple Scenes+Materials" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Import Scene" msgstr "Importa Escena" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Importing Scene.." msgstr "Important Escena..." #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Running Custom Script.." msgstr "Executant Script Personalitzat..." #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Couldn't load post-import script:" msgstr "No s'ha pogut carregar l'script de post-importació:" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Invalid/broken script for post-import (check console):" msgstr "L'script de post-importació no és và lid (comprova el terminal):" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Error running post-import script:" msgstr "Error en l'execució de l'script de post-importació:" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Saving.." msgstr "Desant..." @@ -2767,589 +2704,54 @@ msgstr "" msgid "Reimport" msgstr "ReImporta" -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "No bit masks to import!" -msgstr "Cap mà scara de bits per importar!" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path is empty." -msgstr "El camà de Destinació és buit." - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must be a complete resource path." -msgstr "El camà de Destinació ha de ser un camà de recursos complet." - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must exist." -msgstr "El camà de Destinació ha d'existir." - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Save path is empty!" -msgstr "El camà per desar és buit!" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Import BitMasks" -msgstr "Importa Mà scares de Bit" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s):" -msgstr "Textures Font:" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Target Path:" -msgstr "Camà de Destinació:" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Accept" -msgstr "Accepta" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Bit Mask" -msgstr "Mà scara de bits" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No source font file!" -msgstr "Cap fitxer de lletra font!" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No target font resource!" -msgstr "Cap recurs de Lletra!" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#, fuzzy -msgid "" -"Invalid file extension.\n" -"Please use .font." -msgstr "" -"Extensió de fitxer no và lida.\n" -"Utilitzeu .fnt." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Can't load/process source font." -msgstr "No es pot carregar/processar la lletra." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Couldn't save font." -msgstr "No s'ha pogut desar la lletra." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font:" -msgstr "Lletra:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font Size:" -msgstr "Mida de la lletra:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Dest Resource:" -msgstr "Recurs Objectiu:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "The quick brown fox jumps over the lazy dog." -msgstr "" -"«Dóna amor que serà s feliç!». Això, il·lús veà i company geniüt, ja és un " -"lluït rètol d'onze kWh." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Test:" -msgstr "Prova:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Options:" -msgstr "Opcions:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Font Import" -msgstr "Importa lletra" - -#: 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 "" -"Aquest fitxer ja és un fitxer de lletra de Godot. Proveïu un fitxer de tipus " -"BMFont." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Failed opening as BMFont file." -msgstr "No s'ha pogut obrir com a fitxer BMFont." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error initializing FreeType." -msgstr "Error inicialitzant FreeType." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Unknown font format." -msgstr "Format de lletra desconegut." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error loading font." -msgstr "Error carregant lletra." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Invalid font size." -msgstr "La mida de la lletra no és và lida." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Invalid font custom source." -msgstr "Lletra personalitzada no và lida." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/plugins/theme_editor_plugin.cpp -msgid "Font" -msgstr "Lletra" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "No meshes to import!" -msgstr "Cap malla per importar!" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Single Mesh Import" -msgstr "Importa una Malla" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Source Mesh(es):" -msgstr "Malla/es :" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Mesh" -msgstr "Malla" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Surface %d" -msgstr "SuperfÃcie %d" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "No samples to import!" -msgstr "No s'ha trobat cap mostra d'Àudio per importar!" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Import Audio Samples" -msgstr "Importa Mostra d'Àudio" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Source Sample(s):" -msgstr "Mostra/es d'Origen:" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Audio Sample" -msgstr "Mostra d'Àudio" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "New Clip" -msgstr "Nou Clip" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Animation Options" -msgstr "Opcions d'Animació" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#, fuzzy -msgid "Flags" -msgstr "Indicadors (flags)" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Bake FPS:" -msgstr "Fer Bake dels FPS:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Optimizer" -msgstr "Optimitzador" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Linear Error" -msgstr "Error Lineal Mà xim" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angular Error" -msgstr "Error Angular Mà xim" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angle" -msgstr "Angle Mà xim" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Clips" -msgstr "Clips" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Start(s)" -msgstr "Inici/s" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "End(s)" -msgstr "Final/s" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Loop" -msgstr "Bucle" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Filters" -msgstr "Filtres" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source path is empty." -msgstr "El camà d'origen és buit." - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't load post-import script." -msgstr "No s'ha pogut carregar l'script de post-importació." - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Invalid/broken script for post-import." -msgstr "L'script de post-importació no és và lid ." - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Error importing scene." -msgstr "No s'ha pogut importar l'escena." - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import 3D Scene" -msgstr "Importa Escena 3D" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source Scene:" -msgstr "Escena d'Origen:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Same as Target Scene" -msgstr "Igual que l'Escena de Destinació" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Shared" -msgstr "Compartit" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Target Texture Folder:" -msgstr "Directori per a Textures escollit:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Post-Process Script:" -msgstr "Script de Post-Processat:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Custom Root Node Type:" -msgstr "Tipus de Node Arrel Personalitzat:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Auto" -msgstr "Auto" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#, fuzzy -msgid "Root Node Name:" -msgstr "Nom del node:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "The Following Files are Missing:" -msgstr "Manquen els següents Fitxers:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Anyway" -msgstr "Importa Igualment" - -#: editor/io_plugins/editor_scene_import_plugin.cpp scene/gui/dialogs.cpp -msgid "Cancel" -msgstr "Cancel·la" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import & Open" -msgstr "Importa i Obre" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Edited scene has not been saved, open imported scene anyway?" -msgstr "" -"No s'ha desat l'escena editada. Vol obrir l'escena importada igualment?" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Image:" -msgstr "Importa Imatge:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Can't import a file over itself:" -msgstr "No es pot importar un fitxer dins de si mateix:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't localize path: %s (already local)" -msgstr "No s'ha pogut localitzar el camÃ: %s (ja és local)" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "3D Scene Animation" -msgstr "Animació d'Escenes 3D" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Uncompressed" -msgstr "Sense Compressió" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossless (PNG)" -msgstr "Compressió sense Pèrdua (PNG)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossy (WebP)" -msgstr "Compressió amb Pèrdua (WebP)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress (VRAM)" -msgstr "Compressió (VRAM)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Format" -msgstr "Format de Textura" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Compression Quality (WebP):" -msgstr "Qualitat de Compressió de Textura (WebP):" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Options" -msgstr "Opcions de Textura" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Please specify some files!" -msgstr "Cal especificar algun fitxer!" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "At least one file needed for Atlas." -msgstr "Es necessita com a mÃnim un fitxer per a l'Atles." - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Error importing:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Only one file is required for large texture." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Max Texture Size:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for Atlas (2D)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cell Size:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Large Texture" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Textures (2D)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture" +#: editor/multi_node_edit.cpp +msgid "MultiNode Set" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Base Atlas Texture" +#: editor/node_dock.cpp +msgid "Groups" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s)" +#: editor/node_dock.cpp +msgid "Select a Node to edit Signals and Groups." msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 2D" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create Poly" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 3D" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures" +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Insert Point" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "2D Texture" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly (Remove Point)" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "3D Texture" +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Remove Poly And Point" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Atlas Texture" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create a new polygon from scratch." msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp +#: editor/plugins/abstract_polygon_2d_editor.cpp msgid "" -"NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files to " -"the project." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Crop empty space." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Texture" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Load Source Image" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Slicing" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Inserting" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Saving" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save large texture:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Build Atlas For:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Loading Image:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't load image:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Converting Images" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cropping Images" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Blitting Images" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save atlas image:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save converted texture:" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid source!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid translation source!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Column" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/script_create_dialog.cpp -msgid "Language" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No items to import!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No target path!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translations" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Couldn't import!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translation" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Source CSV:" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Ignore First Row" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Compress" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Add to Project (project.godot)" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Languages:" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Translation" -msgstr "" - -#: editor/multi_node_edit.cpp -msgid "MultiNode Set" -msgstr "" - -#: editor/node_dock.cpp -msgid "Groups" -msgstr "" - -#: editor/node_dock.cpp -msgid "Select a Node to edit Signals and Groups." +"Edit existing polygon:\n" +"LMB: Move Point.\n" +"Ctrl+LMB: Split Segment.\n" +"RMB: Erase Point." msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp @@ -3506,7 +2908,6 @@ msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp #: editor/script_create_dialog.cpp msgid "Error!" @@ -3617,10 +3018,6 @@ msgid "Delete Input" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Rename" -msgstr "" - -#: editor/plugins/animation_tree_editor_plugin.cpp msgid "Animation tree is valid." msgstr "" @@ -3676,64 +3073,191 @@ msgstr "" msgid "Filters.." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing %d Triangles:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Free" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Contents:" +msgstr "Constants:" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "View Files" +msgstr "Fitxer:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve hostname:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Triangle #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Light Baker Setup:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connection error, please try again." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing Geometry" +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Can't connect." +msgstr "Connecta.." + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Can't connect to host:" +msgstr "Connecta al Node:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response from host:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Fixing Lights" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Making BVH" +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Request failed, return code:" +msgstr "Format de fitxer desconegut:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Req. Failed." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Light Octree" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, too many redirects" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Octree Texture" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Redirect Loop." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Transfer to Lightmaps:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Allocating Texture #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Bad download hash, assuming file has been tampered with." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Baking Triangle #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Expected:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Post-Processing Texture #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Got:" msgstr "" -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Bake!" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed sha256 hash check" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Asset Download Error:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Fetching:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Resolving.." +msgstr "Desant..." + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Connecting.." +msgstr "Connecta.." + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Requesting.." +msgstr "Provant" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Error making request" +msgstr "Error en desar recurs!" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Idle" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Retry" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Download Error" +msgstr "Errors de Cà rrega" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download for this asset is already in progress!" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "first" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "prev" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "next" msgstr "" -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Reset the lightmap octree baking process (start over)." +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "last" msgstr "" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "All" +msgstr "Tot" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Plugins" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Sort:" +msgstr "Ordena:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Reverse" +msgstr "Inverteix" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Category:" +msgstr "Categoria:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Site:" +msgstr "Lloc:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Support.." +msgstr "Suport..." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Official" +msgstr "Oficial" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Testing" +msgstr "Provant" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Assets ZIP File" +msgstr "Arxiu ZIP d'Actius" + #: editor/plugins/camera_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp msgid "Preview" msgstr "" @@ -3776,11 +3300,15 @@ msgid "Edit CanvasItem" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Change Anchors" +msgid "Anchors only" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Change Anchors and Margins" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom (%):" +msgid "Change Anchors" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3831,59 +3359,74 @@ msgid "Pan Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Lock the selected object in place (can't be moved)." +#, fuzzy +msgid "Toggles snapping" +msgstr "Commuta el punt d'Interrupció" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Unlock the selected object (can be moved)." +#, fuzzy +msgid "Snapping options" +msgstr "Opcions d'Animació" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Makes sure the object's children are not selectable." +msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Restores the object's children's ability to be selected." +msgid "Configure Snap..." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp -#: editor/project_settings_editor.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Edit" -msgstr "Edita" +msgid "Snap Relative" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +msgid "Use Pixel Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +msgid "Smart snapping" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Rotation Snap" +msgid "Snap to parent" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap Relative" +msgid "Snap to node anchor" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." +msgid "Snap to node sides" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Pixel Snap" +msgid "Snap to other nodes" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Lock the selected object in place (can't be moved)." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Skeleton.." +msgid "Unlock the selected object (can be moved)." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Makes sure the object's children are not selectable." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Restores the object's children's ability to be selected." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3912,11 +3455,16 @@ msgid "View" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Reset" +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show helpers" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Set.." +msgid "Show rulers" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3928,8 +3476,9 @@ msgid "Frame Selection" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Anchor" -msgstr "" +#, fuzzy +msgid "Layout" +msgstr "Desar Disposició (Layout)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Keys" @@ -3952,11 +3501,20 @@ msgid "Clear Pose" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Set a Value" +msgid "Drag pivot from mouse position" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Set pivot at mouse position" +msgstr "Treu Senyal" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Multiply grid step by 2" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap (Pixels):" +msgid "Divide grid step by 2" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3967,23 +3525,28 @@ msgstr "" msgid "Adding %s..." msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Create Node" msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Error instancing scene from %s" msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "OK :(" msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "No parent to instance a child at." msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "This operation requires a single selected node." msgstr "" @@ -3998,45 +3561,6 @@ msgid "" "Drag & drop + Alt : Change node type" msgstr "" -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Create Poly" -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly" -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly (Remove Point)" -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Create a new polygon from scratch." -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -msgid "" -"Edit existing polygon:\n" -"LMB: Move Point.\n" -"Ctrl+LMB: Split Segment.\n" -"RMB: Erase Point." -msgstr "" - #: editor/plugins/collision_polygon_editor_plugin.cpp msgid "Create Poly3D" msgstr "" @@ -4046,14 +3570,6 @@ msgid "Set Handle" msgstr "" #: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Creating Mesh Library" -msgstr "" - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Thumbnail.." -msgstr "" - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Remove item %d?" msgstr "" @@ -4076,6 +3592,27 @@ msgid "Update from Scene" msgstr "" #: editor/plugins/curve_editor_plugin.cpp +msgid "Flat0" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Flat1" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +#, fuzzy +msgid "Ease in" +msgstr "Escala la Selecció" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Ease out" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Smoothstep" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp msgid "Modify Curve Point" msgstr "" @@ -4157,22 +3694,18 @@ msgid "Create Occluder Polygon" msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Edit existing polygon:" msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "LMB: Move Point." msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Ctrl+LMB: Split Segment." msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "RMB: Erase Point." msgstr "" @@ -4274,6 +3807,10 @@ msgid "Create Outline" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh" +msgstr "Malla" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Body" msgstr "" @@ -4401,12 +3938,73 @@ msgstr "" msgid "Populate" msgstr "" -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Create Navigation Polygon" +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Bake!" +msgstr "" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Bake the navigation mesh.\n" +msgstr "" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Clear the navigation mesh." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Setting up Configuration..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Calculating grid size..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating heightfield..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Marking walkable triangles..." +msgstr "Cadenes Traduïbles..." + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Constructing compact heightfield..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Eroding walkable area..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Partioning..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating contours..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating polymesh..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Converting to native navigation mesh..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Navigation Mesh Generator Setup:" +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Parsing Geometry..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Done!" msgstr "" #: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Remove Poly And Point" +msgid "Create Navigation Polygon" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4582,16 +4180,19 @@ msgid "Curve Point #" msgstr "" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Point Pos" -msgstr "" +#, fuzzy +msgid "Set Curve Point Position" +msgstr "Treu Senyal" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve In Pos" -msgstr "" +#, fuzzy +msgid "Set Curve In Position" +msgstr "Treu Senyal" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Out Pos" -msgstr "" +#, fuzzy +msgid "Set Curve Out Position" +msgstr "Treu Senyal" #: editor/plugins/path_editor_plugin.cpp msgid "Split Path" @@ -4651,6 +4252,14 @@ msgid "Scale Polygon" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit" +msgstr "Edita" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon->UV" msgstr "" @@ -4705,63 +4314,10 @@ msgstr "" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "Enganxa" -#: editor/plugins/rich_text_editor_plugin.cpp -msgid "Parse BBCode" -msgstr "" - -#: editor/plugins/sample_editor_plugin.cpp -msgid "Length:" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Open Sample File(s)" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "ERROR: Couldn't load sample!" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Add Sample" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Rename Sample" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Delete Sample" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "16 Bits" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "8 Bits" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Stereo" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Mono" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/script_editor_debugger.cpp -msgid "Format" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Pitch" -msgstr "" - #: editor/plugins/script_editor_plugin.cpp msgid "Clear Recent Files" msgstr "" @@ -4853,6 +4409,10 @@ msgstr "" msgid "Close All" msgstr "Tanca" +#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp +msgid "Run" +msgstr "" + #: editor/plugins/script_editor_plugin.cpp #, fuzzy msgid "Toggle Scripts Panel" @@ -4896,18 +4456,6 @@ msgid "Debug with external editor" msgstr "Editor de Dependències" #: editor/plugins/script_editor_plugin.cpp -msgid "Window" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Left" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Right" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp msgid "Open Godot online documentation" msgstr "" @@ -4992,7 +4540,7 @@ msgstr "Talla" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Copy" msgstr "Copia" @@ -5258,10 +4806,6 @@ msgid "View Plane Transform." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Scaling to %s%%." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." msgstr "" @@ -5278,10 +4822,6 @@ msgid "Top View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Top" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "" @@ -5520,6 +5060,10 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Configure Snap.." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Local Coords" msgstr "" @@ -5665,6 +5209,10 @@ msgid "Speed (FPS):" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Loop" +msgstr "Bucle" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animation Frames" msgstr "" @@ -5677,11 +5225,12 @@ msgid "Insert Empty (After)" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Up" -msgstr "" +#, fuzzy +msgid "Move (Before)" +msgstr "Copia Nodes" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Down" +msgid "Move (After)" msgstr "" #: editor/plugins/style_box_editor_plugin.cpp @@ -5845,6 +5394,10 @@ msgid "Style" msgstr "" #: editor/plugins/theme_editor_plugin.cpp +msgid "Font" +msgstr "Lletra" + +#: editor/plugins/theme_editor_plugin.cpp msgid "Color" msgstr "" @@ -5895,7 +5448,7 @@ msgid "Mirror Y" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Bucket" +msgid "Paint Tile" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp @@ -5962,6 +5515,10 @@ msgid "Delete preset '%s'?" msgstr "Esborra fitxers seleccionats?" #: editor/project_export.cpp +msgid "Export templates for this platform are missing/corrupted: " +msgstr "" + +#: editor/project_export.cpp msgid "Presets" msgstr "" @@ -6038,33 +5595,58 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +msgid "Export templates for this platform are missing/corrupted:" +msgstr "" + +#: editor/project_export.cpp #, fuzzy msgid "Export With Debug" msgstr "Exporta el joc de Mosaics (Tiles)" #: editor/project_manager.cpp -msgid "Invalid project path, the path must exist!" +#, fuzzy +msgid "The path does not exists." +msgstr "El Fitxer no existeix." + +#: editor/project_manager.cpp +msgid "Please choose a 'project.godot' file." msgstr "" #: editor/project_manager.cpp -#, fuzzy -msgid "Invalid project path, project.godot must not exist." -msgstr "El camà de Destinació ha d'existir." +msgid "" +"Your project will be created in a non empty folder (you might want to create " +"a new folder)." +msgstr "" #: editor/project_manager.cpp -#, fuzzy -msgid "Invalid project path, project.godot must exist." -msgstr "El camà de Destinació ha d'existir." +msgid "Please choose a folder that does not contain a 'project.godot' file." +msgstr "" #: editor/project_manager.cpp msgid "Imported Project" msgstr "" #: editor/project_manager.cpp +msgid " " +msgstr "" + +#: editor/project_manager.cpp +msgid "It would be a good idea to name your project." +msgstr "" + +#: editor/project_manager.cpp msgid "Invalid project path (changed anything?)." msgstr "" #: editor/project_manager.cpp +msgid "Couldn't get project.godot in project path." +msgstr "" + +#: editor/project_manager.cpp +msgid "Couldn't edit project.godot in project path." +msgstr "" + +#: editor/project_manager.cpp msgid "Couldn't create project.godot in project path." msgstr "" @@ -6073,15 +5655,20 @@ msgid "The following files failed extraction from package:" msgstr "" #: editor/project_manager.cpp -msgid "Import Existing Project" +#, fuzzy +msgid "Rename Project" +msgstr "Exporta Projecte" + +#: editor/project_manager.cpp +msgid "Couldn't get project.godot in the project path." msgstr "" #: editor/project_manager.cpp -msgid "Project Path (Must Exist):" +msgid "New Game Project" msgstr "" #: editor/project_manager.cpp -msgid "Project Name:" +msgid "Import Existing Project" msgstr "" #: editor/project_manager.cpp @@ -6089,19 +5676,24 @@ msgid "Create New Project" msgstr "" #: editor/project_manager.cpp -msgid "Project Path:" +msgid "Install Project:" msgstr "" #: editor/project_manager.cpp -msgid "Install Project:" +msgid "Project Name:" msgstr "" #: editor/project_manager.cpp -msgid "Browse" +#, fuzzy +msgid "Create folder" +msgstr "Crea una Carpeta" + +#: editor/project_manager.cpp +msgid "Project Path:" msgstr "" #: editor/project_manager.cpp -msgid "New Game Project" +msgid "Browse" msgstr "" #: editor/project_manager.cpp @@ -6113,6 +5705,11 @@ msgid "Unnamed Project" msgstr "" #: editor/project_manager.cpp +#, fuzzy +msgid "Can't open project" +msgstr "Connecta.." + +#: editor/project_manager.cpp msgid "Are you sure to open more than one project?" msgstr "" @@ -6152,10 +5749,6 @@ msgid "Project List" msgstr "" #: editor/project_manager.cpp -msgid "Run" -msgstr "" - -#: editor/project_manager.cpp msgid "Scan" msgstr "" @@ -6214,17 +5807,14 @@ msgid "Add Input Action Event" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Meta+" msgstr "Meta +" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Shift+" msgstr "Maj +" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Alt+" msgstr "Alt +" @@ -6285,7 +5875,7 @@ msgstr "Canvia" msgid "Joypad Axis Index:" msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Axis" msgstr "Eix" @@ -6305,31 +5895,31 @@ msgstr "" msgid "Add Event" msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Device" msgstr "Dispositiu" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Button" msgstr "Botó" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Left Button." msgstr "Botó Esquerre." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Right Button." msgstr "Botó Dret." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Middle Button." msgstr "Botó del Mig." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Up." msgstr "Roda Amunt." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Down." msgstr "Roda Avall." @@ -6339,7 +5929,7 @@ msgid "Add Global Property" msgstr "Afegeix Propietat d'Accés (Getter)" #: editor/project_settings_editor.cpp -msgid "Select an setting item first!" +msgid "Select a setting item first!" msgstr "" #: editor/project_settings_editor.cpp @@ -6357,6 +5947,15 @@ msgid "Delete Item" msgstr "Esborra" #: editor/project_settings_editor.cpp +#, fuzzy +msgid "Can't contain '/' or ':'" +msgstr "Connecta al Node:" + +#: editor/project_settings_editor.cpp +msgid "Already existing" +msgstr "" + +#: editor/project_settings_editor.cpp msgid "Error saving settings." msgstr "No s'ha pogut desar la configuració." @@ -6510,10 +6109,20 @@ msgstr "Executa Script" #: editor/property_editor.cpp #, fuzzy +msgid "Make Unique" +msgstr "Crea SubRecurs Únic" + +#: editor/property_editor.cpp +#, fuzzy msgid "Show in File System" msgstr "SistemaDeFitxers" #: editor/property_editor.cpp +#, fuzzy +msgid "Convert To %s" +msgstr "Converteix a..." + +#: editor/property_editor.cpp msgid "Error loading file: Not a resource!" msgstr "" @@ -6554,6 +6163,11 @@ msgstr "Afegeix Col.locador de Proprietat (Setter)" #: editor/property_selector.cpp #, fuzzy +msgid "Select Virtual Method" +msgstr "Mètodes públics:" + +#: editor/property_selector.cpp +#, fuzzy msgid "Select Method" msgstr "Mètodes públics:" @@ -6581,26 +6195,6 @@ msgstr "" msgid "Reparent" msgstr "" -#: editor/resources_dock.cpp -msgid "Create New Resource" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Open Resource" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Save Resource" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Resource Tools" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Make Local" -msgstr "" - #: editor/run_settings_dialog.cpp msgid "Run Mode:" msgstr "" @@ -6728,14 +6322,6 @@ msgid "Sub-Resources:" msgstr "Recurs" #: editor/scene_tree_dock.cpp -msgid "Edit Groups" -msgstr "" - -#: editor/scene_tree_dock.cpp -msgid "Edit Connections" -msgstr "" - -#: editor/scene_tree_dock.cpp msgid "Clear Inheritance" msgstr "" @@ -6924,6 +6510,15 @@ msgid "Invalid base path" msgstr "" #: editor/script_create_dialog.cpp +msgid "Directory of the same name exists" +msgstr "" + +#: editor/script_create_dialog.cpp +#, fuzzy +msgid "File exists, will be reused" +msgstr "Fitxer Existent, Sobreescriure?" + +#: editor/script_create_dialog.cpp msgid "Invalid extension" msgstr "" @@ -6968,6 +6563,10 @@ msgid "Load existing script file" msgstr "No s'ha pogut instanciar l'script:" #: editor/script_create_dialog.cpp +msgid "Language" +msgstr "" + +#: editor/script_create_dialog.cpp #, fuzzy msgid "Inherits" msgstr "Hereta:" @@ -7013,6 +6612,10 @@ msgid "Function:" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Errors" msgstr "" @@ -7093,6 +6696,10 @@ msgid "Type" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Format" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Usage" msgstr "" @@ -7168,12 +6775,30 @@ msgstr "" msgid "Change Probe Extents" msgstr "" +#: modules/gdnative/gd_native_library_editor.cpp +#, fuzzy +msgid "Library" +msgstr "Biblioteca de Models (MeshLibrary)..." + +#: modules/gdnative/gd_native_library_editor.cpp +#, fuzzy +msgid "Status" +msgstr "Estat:" + +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Libraries: " +msgstr "" + +#: modules/gdnative/register_types.cpp +msgid "GDNative" +msgstr "" + #: 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/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "" @@ -7229,10 +6854,6 @@ msgid "GridMap Duplicate Selection" msgstr "Duplica la Selecció" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Paint" -msgstr "" - -#: modules/gridmap/grid_map_editor_plugin.cpp msgid "Snap View" msgstr "" @@ -7329,13 +6950,8 @@ msgstr "Configuració de Desplaçament" msgid "Pick Distance:" msgstr "" -#: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy -msgid "Tiles" -msgstr "Fitxer:" - -#: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Areas" +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "Builds" msgstr "" #: modules/visual_script/visual_script.cpp @@ -7549,10 +7165,18 @@ msgid "Return" msgstr "Retorn:" #: modules/visual_script/visual_script_editor.cpp +msgid "Call" +msgstr "Crida" + +#: modules/visual_script/visual_script_editor.cpp msgid "Get" msgstr "Obtenir" #: modules/visual_script/visual_script_editor.cpp +msgid "Script already has function '%s'" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Change Input Value" msgstr "Canvia Valor de la Matriu" @@ -7971,6 +7595,12 @@ msgstr "" "Cal crear o establir un recurs SpriteFrames en la propietat 'Frames' perquè " "AnimatedSprite3D dibuixi els quadres." +#: scene/3d/vehicle_body.cpp +msgid "" +"VehicleWheel serves to provide a wheel system to a VehicleBody. Please use " +"it as a child of a VehicleBody." +msgstr "" + #: scene/gui/color_picker.cpp msgid "Raw Mode" msgstr "" @@ -7980,6 +7610,10 @@ msgid "Add current color as a preset" msgstr "" #: scene/gui/dialogs.cpp +msgid "Cancel" +msgstr "Cancel·la" + +#: scene/gui/dialogs.cpp msgid "Alert!" msgstr "Ep!" @@ -7987,10 +7621,6 @@ msgstr "Ep!" msgid "Please Confirm..." msgstr "Confirmeu..." -#: scene/gui/input_action.cpp -msgid "Ctrl+" -msgstr "Ctrl +" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -8026,6 +7656,352 @@ msgstr "" "forma per tal d'obtenir-ne la mida. Altrament, establiu-la com a Destinació " "de Renderització i assigneu-ne la textura interna a algun node." +#: scene/resources/dynamic_font.cpp +msgid "Error initializing FreeType." +msgstr "Error inicialitzant FreeType." + +#: scene/resources/dynamic_font.cpp +msgid "Unknown font format." +msgstr "Format de lletra desconegut." + +#: scene/resources/dynamic_font.cpp +msgid "Error loading font." +msgstr "Error carregant lletra." + +#: scene/resources/dynamic_font.cpp +msgid "Invalid font size." +msgstr "La mida de la lletra no és và lida." + +#~ msgid "Method List For '%s':" +#~ msgstr "Llista de mètodes de '%s':" + +#~ msgid "Arguments:" +#~ msgstr "Arguments:" + +#~ msgid "Return:" +#~ msgstr "Retorn:" + +#~ msgid "Added:" +#~ msgstr "Afegit:" + +#~ msgid "Removed:" +#~ msgstr "Eliminat:" + +#~ msgid "Error saving atlas:" +#~ msgstr "Error en desar atles:" + +#~ msgid "Could not save atlas subtexture:" +#~ msgstr "No s'ha pogut desar la subtextura de l'atles:" + +#~ msgid "Exporting for %s" +#~ msgstr "Exportació per a %s" + +#~ msgid "Setting Up.." +#~ msgstr "Instal·lant.." + +#~ msgid "Error loading scene." +#~ msgstr "No s'ha pogut carregar l'escena." + +#~ msgid "Re-Import" +#~ msgstr "ReImporta" + +#~ msgid "Please wait for scan to complete." +#~ msgstr "Espera que s'acabi l'anà lisi." + +#~ msgid "Current scene must be saved to re-import." +#~ msgstr "S'ha de desar l'escena abans de reimportar-la." + +#~ msgid "Save & Re-Import" +#~ msgstr "Desa i ReImporta" + +#~ msgid "Re-Importing" +#~ msgstr "Re-Importació" + +#~ msgid "Re-Import Changed Resources" +#~ msgstr "ReImporta Recursos Modificats" + +#~ msgid "Loading Export Templates" +#~ msgstr "Carregant Plantilles d'Exportació" + +#, fuzzy +#~ msgid "" +#~ "\n" +#~ "Status: Needs Re-Import" +#~ msgstr "Desa i ReImporta" + +#~ msgid "Same source and destination files, doing nothing." +#~ msgstr "" +#~ "Els fitxers d'origen i destinació són els mateixos. No s'ha produït cap " +#~ "acció." + +#~ msgid "Same source and destination paths, doing nothing." +#~ msgstr "" +#~ "El camà d'origen i destinació es idèntic. No s'ha produït cap acció." + +#~ msgid "Can't move directories to within themselves." +#~ msgstr "No es poden moure directoris en si mateixos." + +#, fuzzy +#~ msgid "Error moving file:\n" +#~ msgstr "Error en desar TileSet!" + +#~ msgid "Pick New Name and Location For:" +#~ msgstr "Tria un Nou Nom i Ubicació per a:" + +#~ msgid "No files selected!" +#~ msgstr "Cap fitxer seleccionat!" + +#~ msgid "Info" +#~ msgstr "Informació" + +#~ msgid "Re-Import.." +#~ msgstr "ReImporta..." + +#~ msgid "No bit masks to import!" +#~ msgstr "Cap mà scara de bits per importar!" + +#~ msgid "Target path is empty." +#~ msgstr "El camà de Destinació és buit." + +#~ msgid "Target path must be a complete resource path." +#~ msgstr "El camà de Destinació ha de ser un camà de recursos complet." + +#~ msgid "Target path must exist." +#~ msgstr "El camà de Destinació ha d'existir." + +#~ msgid "Save path is empty!" +#~ msgstr "El camà per desar és buit!" + +#~ msgid "Import BitMasks" +#~ msgstr "Importa Mà scares de Bit" + +#~ msgid "Source Texture(s):" +#~ msgstr "Textures Font:" + +#~ msgid "Target Path:" +#~ msgstr "Camà de Destinació:" + +#~ msgid "Accept" +#~ msgstr "Accepta" + +#~ msgid "Bit Mask" +#~ msgstr "Mà scara de bits" + +#~ msgid "No source font file!" +#~ msgstr "Cap fitxer de lletra font!" + +#~ msgid "No target font resource!" +#~ msgstr "Cap recurs de Lletra!" + +#, fuzzy +#~ msgid "" +#~ "Invalid file extension.\n" +#~ "Please use .font." +#~ msgstr "" +#~ "Extensió de fitxer no và lida.\n" +#~ "Utilitzeu .fnt." + +#~ msgid "Couldn't save font." +#~ msgstr "No s'ha pogut desar la lletra." + +#~ msgid "Source Font:" +#~ msgstr "Lletra:" + +#~ msgid "Source Font Size:" +#~ msgstr "Mida de la lletra:" + +#~ msgid "Dest Resource:" +#~ msgstr "Recurs Objectiu:" + +#~ msgid "The quick brown fox jumps over the lazy dog." +#~ msgstr "" +#~ "«Dóna amor que serà s feliç!». Això, il·lús veà i company geniüt, ja és un " +#~ "lluït rètol d'onze kWh." + +#~ msgid "Test:" +#~ msgstr "Prova:" + +#~ msgid "Options:" +#~ msgstr "Opcions:" + +#~ msgid "Font Import" +#~ msgstr "Importa lletra" + +#~ msgid "" +#~ "This file is already a Godot font file, please supply a BMFont type file " +#~ "instead." +#~ msgstr "" +#~ "Aquest fitxer ja és un fitxer de lletra de Godot. Proveïu un fitxer de " +#~ "tipus BMFont." + +#~ msgid "Failed opening as BMFont file." +#~ msgstr "No s'ha pogut obrir com a fitxer BMFont." + +#~ msgid "Invalid font custom source." +#~ msgstr "Lletra personalitzada no và lida." + +#~ msgid "No meshes to import!" +#~ msgstr "Cap malla per importar!" + +#~ msgid "Single Mesh Import" +#~ msgstr "Importa una Malla" + +#~ msgid "Source Mesh(es):" +#~ msgstr "Malla/es :" + +#~ msgid "Surface %d" +#~ msgstr "SuperfÃcie %d" + +#~ msgid "No samples to import!" +#~ msgstr "No s'ha trobat cap mostra d'Àudio per importar!" + +#~ msgid "Import Audio Samples" +#~ msgstr "Importa Mostra d'Àudio" + +#~ msgid "Source Sample(s):" +#~ msgstr "Mostra/es d'Origen:" + +#~ msgid "Audio Sample" +#~ msgstr "Mostra d'Àudio" + +#~ msgid "New Clip" +#~ msgstr "Nou Clip" + +#, fuzzy +#~ msgid "Flags" +#~ msgstr "Indicadors (flags)" + +#~ msgid "Bake FPS:" +#~ msgstr "Fer Bake dels FPS:" + +#~ msgid "Optimizer" +#~ msgstr "Optimitzador" + +#~ msgid "Max Linear Error" +#~ msgstr "Error Lineal Mà xim" + +#~ msgid "Max Angular Error" +#~ msgstr "Error Angular Mà xim" + +#~ msgid "Max Angle" +#~ msgstr "Angle Mà xim" + +#~ msgid "Clips" +#~ msgstr "Clips" + +#~ msgid "Start(s)" +#~ msgstr "Inici/s" + +#~ msgid "End(s)" +#~ msgstr "Final/s" + +#~ msgid "Filters" +#~ msgstr "Filtres" + +#~ msgid "Source path is empty." +#~ msgstr "El camà d'origen és buit." + +#~ msgid "Couldn't load post-import script." +#~ msgstr "No s'ha pogut carregar l'script de post-importació." + +#~ msgid "Invalid/broken script for post-import." +#~ msgstr "L'script de post-importació no és và lid ." + +#~ msgid "Error importing scene." +#~ msgstr "No s'ha pogut importar l'escena." + +#~ msgid "Import 3D Scene" +#~ msgstr "Importa Escena 3D" + +#~ msgid "Source Scene:" +#~ msgstr "Escena d'Origen:" + +#~ msgid "Same as Target Scene" +#~ msgstr "Igual que l'Escena de Destinació" + +#~ msgid "Shared" +#~ msgstr "Compartit" + +#~ msgid "Target Texture Folder:" +#~ msgstr "Directori per a Textures escollit:" + +#~ msgid "Post-Process Script:" +#~ msgstr "Script de Post-Processat:" + +#~ msgid "Custom Root Node Type:" +#~ msgstr "Tipus de Node Arrel Personalitzat:" + +#~ msgid "Auto" +#~ msgstr "Auto" + +#, fuzzy +#~ msgid "Root Node Name:" +#~ msgstr "Nom del node:" + +#~ msgid "The Following Files are Missing:" +#~ msgstr "Manquen els següents Fitxers:" + +#~ msgid "Import Anyway" +#~ msgstr "Importa Igualment" + +#~ msgid "Import & Open" +#~ msgstr "Importa i Obre" + +#~ msgid "Edited scene has not been saved, open imported scene anyway?" +#~ msgstr "" +#~ "No s'ha desat l'escena editada. Vol obrir l'escena importada igualment?" + +#~ msgid "Import Image:" +#~ msgstr "Importa Imatge:" + +#~ msgid "Couldn't localize path: %s (already local)" +#~ msgstr "No s'ha pogut localitzar el camÃ: %s (ja és local)" + +#~ msgid "3D Scene Animation" +#~ msgstr "Animació d'Escenes 3D" + +#~ msgid "Uncompressed" +#~ msgstr "Sense Compressió" + +#~ msgid "Compress Lossless (PNG)" +#~ msgstr "Compressió sense Pèrdua (PNG)" + +#~ msgid "Compress Lossy (WebP)" +#~ msgstr "Compressió amb Pèrdua (WebP)" + +#~ msgid "Compress (VRAM)" +#~ msgstr "Compressió (VRAM)" + +#~ msgid "Texture Format" +#~ msgstr "Format de Textura" + +#~ msgid "Texture Compression Quality (WebP):" +#~ msgstr "Qualitat de Compressió de Textura (WebP):" + +#~ msgid "Texture Options" +#~ msgstr "Opcions de Textura" + +#~ msgid "Please specify some files!" +#~ msgstr "Cal especificar algun fitxer!" + +#~ msgid "At least one file needed for Atlas." +#~ msgstr "Es necessita com a mÃnim un fitxer per a l'Atles." + +#, fuzzy +#~ msgid "Invalid project path, project.godot must not exist." +#~ msgstr "El camà de Destinació ha d'existir." + +#, fuzzy +#~ msgid "Invalid project path, project.godot must exist." +#~ msgstr "El camà de Destinació ha d'existir." + +#, fuzzy +#~ msgid "Tiles" +#~ msgstr "Fitxer:" + +#~ msgid "Ctrl+" +#~ msgstr "Ctrl +" + #~ msgid "Close scene? (Unsaved changes will be lost)" #~ msgstr "Tanca l'Escena? (Es perdran els canvis sense desar)" @@ -8150,9 +8126,6 @@ msgstr "" #~ msgid "Save Translatable Strings" #~ msgstr "Desa els texts Traduïbles" -#~ msgid "Translatable Strings.." -#~ msgstr "Cadenes Traduïbles..." - #~ msgid "Install Export Templates" #~ msgstr "Instal·la Plantilles d'Exportació" diff --git a/editor/translations/cs.po b/editor/translations/cs.po index c7871ef60d..aa971c428f 100644 --- a/editor/translations/cs.po +++ b/editor/translations/cs.po @@ -194,10 +194,9 @@ msgid "Create %d NEW tracks and insert keys?" msgstr "VytvoÅ™it %d NOVÃCH stop a vložit klÃÄe?" #: editor/animation_editor.cpp editor/create_dialog.cpp -#: editor/editor_audio_buses.cpp +#: editor/editor_audio_buses.cpp editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp #: editor/plugins/mesh_instance_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp editor/project_manager.cpp #: editor/script_create_dialog.cpp msgid "Create" @@ -359,268 +358,6 @@ msgstr "ZmÄ›nit typ hodnot pole" msgid "Change Array Value" msgstr "ZmÄ›nit hodnotu pole" -#: editor/asset_library_editor_plugin.cpp -msgid "Free" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp -msgid "Version:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Contents:" -msgstr "Spojité" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "View Files" -msgstr "Soubor:" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_help.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp -msgid "Description:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -#: editor/project_manager.cpp -msgid "Install" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp -#: editor/connections_dialog.cpp editor/export_template_manager.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -#: editor/project_settings_editor.cpp editor/property_editor.cpp -#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Close" -msgstr "ZavÅ™Ãt" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve hostname:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Connection error, please try again." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Can't connect." -msgstr "PÅ™ipojit.." - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Can't connect to host:" -msgstr "PÅ™ipojit k uzlu:" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response from host:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Request failed, return code:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Req. Failed." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Request failed, too many redirects" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Redirect Loop." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Bad download hash, assuming file has been tampered with." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Expected:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Got:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed sha256 hash check" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Asset Download Error:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -msgid "Success!" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Fetching:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Resolving.." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Connecting.." -msgstr "PÅ™ipojit.." - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Requesting.." -msgstr "Testované" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Error making request" -msgstr "Chyba nahrávánà fontu." - -#: editor/asset_library_editor_plugin.cpp -msgid "Idle" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Retry" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Download Error" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Download for this asset is already in progress!" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "first" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "prev" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "next" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "last" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "All" -msgstr "VÅ¡echny" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/property_selector.cpp editor/quick_open.cpp -#: editor/settings_config_dialog.cpp -msgid "Search:" -msgstr "Hledat:" - -#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Search" -msgstr "Hledat" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/project_manager.cpp -msgid "Import" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Plugins" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Sort:" -msgstr "Řadit:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Reverse" -msgstr "Naopak" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Category:" -msgstr "Kategorie:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Site:" -msgstr "Web:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "Podpora.." - -#: editor/asset_library_editor_plugin.cpp -msgid "Official" -msgstr "OficiálnÃ" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -msgid "Community" -msgstr "Z komunity" - -#: editor/asset_library_editor_plugin.cpp -msgid "Testing" -msgstr "Testované" - -#: editor/asset_library_editor_plugin.cpp -msgid "Assets ZIP File" -msgstr "ZIP soubor asetů" - -#: editor/call_dialog.cpp -msgid "Method List For '%s':" -msgstr "Seznam metod '%s':" - -#: editor/call_dialog.cpp modules/visual_script/visual_script_editor.cpp -msgid "Call" -msgstr "Zavolat" - -#: editor/call_dialog.cpp -msgid "Method List:" -msgstr "Seznam metod:" - -#: editor/call_dialog.cpp -msgid "Arguments:" -msgstr "Argumenty:" - -#: editor/call_dialog.cpp -msgid "Return:" -msgstr "Vrátit:" - #: editor/code_editor.cpp msgid "Go to Line" msgstr "Běž na řádek" @@ -658,6 +395,14 @@ msgstr "Celá slova" msgid "Selection Only" msgstr "Pouze výbÄ›r" +#: editor/code_editor.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp +msgid "Search" +msgstr "Hledat" + #: editor/code_editor.cpp editor/editor_help.cpp msgid "Find" msgstr "NajÃt" @@ -690,11 +435,11 @@ msgstr "Potvrzovat nahrazenÃ" msgid "Skip" msgstr "PÅ™eskoÄit" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom In" msgstr "PÅ™iblÞit" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom Out" msgstr "Oddálit" @@ -761,6 +506,20 @@ msgstr "OdloženÄ›" msgid "Oneshot" msgstr "JednorázovÄ›" +#: editor/connections_dialog.cpp editor/dependency_editor.cpp +#: editor/export_template_manager.cpp +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Close" +msgstr "ZavÅ™Ãt" + #: editor/connections_dialog.cpp msgid "Connect" msgstr "PÅ™ipojit" @@ -786,7 +545,7 @@ msgstr "PÅ™ipojit.." msgid "Disconnect" msgstr "Odpojit" -#: editor/connections_dialog.cpp editor/node_dock.cpp +#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" msgstr "Signály" @@ -803,12 +562,25 @@ msgstr "" msgid "Recent:" msgstr "" +#: editor/create_dialog.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp +#: editor/quick_open.cpp editor/settings_config_dialog.cpp +msgid "Search:" +msgstr "Hledat:" + #: editor/create_dialog.cpp editor/editor_help.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp #: editor/quick_open.cpp msgid "Matches:" msgstr "Shody:" +#: editor/create_dialog.cpp editor/editor_help.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp +#: editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "" + #: editor/dependency_editor.cpp msgid "Search Replacement For:" msgstr "Hledat náhradu za:" @@ -868,6 +640,10 @@ msgid "Owners Of:" msgstr "VlastnÃci:" #: editor/dependency_editor.cpp +msgid "Remove selected files from the project? (no undo)" +msgstr "Odebrat vybrané soubory z projektu? (nelze vrátit zpÄ›t)" + +#: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" @@ -877,8 +653,8 @@ msgstr "" "PÅ™esto je chcete smazat? (nelze vrátit zpÄ›t)" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (no undo)" -msgstr "Odebrat vybrané soubory z projektu? (nelze vrátit zpÄ›t)" +msgid "Cannot remove:\n" +msgstr "" #: editor/dependency_editor.cpp msgid "Error loading:" @@ -944,10 +720,6 @@ msgid "Godot Engine contributors" msgstr "" #: editor/editor_about.cpp -msgid "Authors" -msgstr "" - -#: editor/editor_about.cpp #, fuzzy msgid "Project Founders" msgstr "Nastavenà projektu" @@ -965,6 +737,38 @@ msgid "Developers" msgstr "" #: editor/editor_about.cpp +msgid "Authors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Platinum Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Mini Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Silver Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Bronze Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Donors" +msgstr "" + +#: editor/editor_about.cpp msgid "License" msgstr "" @@ -1007,6 +811,16 @@ msgid "Package Installed Successfully!" msgstr "" #: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Success!" +msgstr "" + +#: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp +msgid "Install" +msgstr "" + +#: editor/editor_asset_installer.cpp msgid "Package Installer" msgstr "" @@ -1057,10 +871,6 @@ msgid "Audio Bus, Drag and Drop to rearrange." msgstr "" #: editor/editor_audio_buses.cpp -msgid "Bus options" -msgstr "" - -#: editor/editor_audio_buses.cpp msgid "Solo" msgstr "" @@ -1072,6 +882,10 @@ msgstr "" msgid "Bypass" msgstr "" +#: editor/editor_audio_buses.cpp +msgid "Bus options" +msgstr "" + #: editor/editor_audio_buses.cpp editor/plugins/tile_map_editor_plugin.cpp #: editor/scene_tree_dock.cpp msgid "Duplicate" @@ -1079,6 +893,11 @@ msgstr "" #: editor/editor_audio_buses.cpp #, fuzzy +msgid "Reset Volume" +msgstr "Obnovit původnà pÅ™iblÞenÃ" + +#: editor/editor_audio_buses.cpp +#, fuzzy msgid "Delete Effect" msgstr "Smazat vybraný" @@ -1101,6 +920,11 @@ msgid "Duplicate Audio Bus" msgstr "Duplikovat výbÄ›r" #: editor/editor_audio_buses.cpp +#, fuzzy +msgid "Reset Bus Volume" +msgstr "Obnovit původnà pÅ™iblÞenÃ" + +#: editor/editor_audio_buses.cpp msgid "Move Audio Bus" msgstr "" @@ -1132,7 +956,8 @@ msgstr "" msgid "Create a new Bus Layout." msgstr "" -#: editor/editor_audio_buses.cpp editor/script_create_dialog.cpp +#: editor/editor_audio_buses.cpp editor/property_editor.cpp +#: editor/script_create_dialog.cpp msgid "Load" msgstr "" @@ -1224,7 +1049,7 @@ msgid "Rearrange Autoloads" msgstr "" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp scene/gui/file_dialog.cpp +#: scene/gui/file_dialog.cpp msgid "Path:" msgstr "Cesta:" @@ -1232,9 +1057,7 @@ msgstr "Cesta:" msgid "Node Name:" msgstr "" -#: editor/editor_autoload_settings.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp editor/project_manager.cpp +#: editor/editor_autoload_settings.cpp editor/project_manager.cpp msgid "Name" msgstr "Název" @@ -1267,18 +1090,19 @@ msgid "Choose a Directory" msgstr "" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Create Folder" msgstr "VytvoÅ™it složku" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: editor/editor_plugin_settings.cpp editor/plugins/theme_editor_plugin.cpp -#: editor/project_export.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp +#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp +#: scene/gui/file_dialog.cpp msgid "Name:" msgstr "Jméno:" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Could not create folder." msgstr "Nelze vytvoÅ™it složku." @@ -1298,30 +1122,6 @@ msgstr "" msgid "Template file not found:\n" msgstr "" -#: editor/editor_export.cpp -msgid "Added:" -msgstr "" - -#: editor/editor_export.cpp -msgid "Removed:" -msgstr "" - -#: editor/editor_export.cpp -msgid "Error saving atlas:" -msgstr "" - -#: editor/editor_export.cpp -msgid "Could not save atlas subtexture:" -msgstr "" - -#: editor/editor_export.cpp -msgid "Exporting for %s" -msgstr "" - -#: editor/editor_export.cpp -msgid "Setting Up.." -msgstr "" - #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "Soubor už existuje. PÅ™epsat?" @@ -1406,6 +1206,11 @@ msgstr "" msgid "Move Favorite Down" msgstr "" +#: editor/editor_file_dialog.cpp +#, fuzzy +msgid "Go to parent folder" +msgstr "Nelze vytvoÅ™it složku." + #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Directories & Files:" msgstr "Složky a soubory:" @@ -1448,6 +1253,10 @@ msgstr "" msgid "Search Classes" msgstr "" +#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +msgid "Top" +msgstr "" + #: editor/editor_help.cpp editor/property_editor.cpp msgid "Class:" msgstr "" @@ -1464,15 +1273,29 @@ msgstr "" msgid "Brief Description:" msgstr "" +#: editor/editor_help.cpp +#, fuzzy +msgid "Members" +msgstr "ÄŒlenové:" + #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "ÄŒlenové:" #: editor/editor_help.cpp +#, fuzzy +msgid "Public Methods" +msgstr "Vybrat vÅ¡e" + +#: editor/editor_help.cpp msgid "Public Methods:" msgstr "" #: editor/editor_help.cpp +msgid "GUI Theme Items" +msgstr "" + +#: editor/editor_help.cpp msgid "GUI Theme Items:" msgstr "" @@ -1482,6 +1305,11 @@ msgstr "Signály:" #: editor/editor_help.cpp #, fuzzy +msgid "Enumerations" +msgstr "Funkce:" + +#: editor/editor_help.cpp +#, fuzzy msgid "Enumerations:" msgstr "Funkce:" @@ -1490,19 +1318,50 @@ msgid "enum " msgstr "" #: editor/editor_help.cpp +#, fuzzy +msgid "Constants" +msgstr "KonstantnÃ" + +#: editor/editor_help.cpp msgid "Constants:" msgstr "" #: editor/editor_help.cpp #, fuzzy +msgid "Description" +msgstr "VytvoÅ™it odbÄ›r" + +#: editor/editor_help.cpp +msgid "Properties" +msgstr "" + +#: editor/editor_help.cpp +#, fuzzy msgid "Property Description:" msgstr "VytvoÅ™it odbÄ›r" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this property. Please help us by " +"[color=$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp +#, fuzzy +msgid "Methods" +msgstr "Seznam metod:" + +#: editor/editor_help.cpp msgid "Method Description:" msgstr "" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this method. Please help us by [color=" +"$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp msgid "Search Text" msgstr "" @@ -1511,24 +1370,21 @@ msgid "Output:" msgstr "" #: editor/editor_log.cpp editor/plugins/animation_tree_editor_plugin.cpp -#: editor/plugins/rich_text_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_editor_debugger.cpp scene/gui/line_edit.cpp -#: scene/gui/text_edit.cpp +#: editor/property_editor.cpp editor/script_editor_debugger.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Clear" msgstr "VyÄistit" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Error saving resource!" msgstr "" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Save Resource As.." msgstr "" -#: editor/editor_node.cpp editor/export_template_manager.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "I see.." msgstr "" @@ -1545,6 +1401,29 @@ msgid "Error while saving." msgstr "" #: editor/editor_node.cpp +#, fuzzy +msgid "Can't open '%s'." +msgstr "PÅ™ipojit.." + +#: editor/editor_node.cpp +#, fuzzy +msgid "Error while parsing '%s'." +msgstr "Chyba nahrávánà fontu." + +#: editor/editor_node.cpp +msgid "Unexpected end of file '%s'." +msgstr "" + +#: editor/editor_node.cpp +msgid "Missing '%s' or its dependencies." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Error while loading '%s'." +msgstr "Chyba nahrávánà fontu." + +#: editor/editor_node.cpp msgid "Saving Scene" msgstr "" @@ -1602,6 +1481,33 @@ msgid "Restored default layout to base settings." msgstr "" #: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was imported, so it's not editable.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was instanced or inherited.\n" +"Changes to it will not be kept when saving the current scene." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource was imported, so it's not editable. Change its settings in the " +"import panel and then re-import." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This scene was imported, so changes to it will not be kept.\n" +"Instancing it or inheriting will allow making changes to it.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp msgid "Copy Params" msgstr "" @@ -1765,6 +1671,12 @@ msgid "Save changes the following scene(s) before opening Project Manager?" msgstr "" #: editor/editor_node.cpp +msgid "" +"This option is deprecated. Situations where refresh must be forced are now " +"considered a bug. Please report." +msgstr "" + +#: editor/editor_node.cpp msgid "Pick a Main Scene" msgstr "" @@ -1791,7 +1703,7 @@ msgid "" msgstr "" #: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Ugh" msgstr "" @@ -1802,11 +1714,11 @@ msgid "" msgstr "" #: editor/editor_node.cpp -msgid "Error loading scene." +msgid "Scene '%s' has broken dependencies:" msgstr "" #: editor/editor_node.cpp -msgid "Scene '%s' has broken dependencies:" +msgid "Clear Recent Scenes" msgstr "" #: editor/editor_node.cpp @@ -1842,7 +1754,7 @@ msgstr "" msgid "Toggle distraction-free mode." msgstr "" -#: editor/editor_node.cpp editor/io_plugins/editor_scene_import_plugin.cpp +#: editor/editor_node.cpp msgid "Scene" msgstr "" @@ -2063,6 +1975,10 @@ msgstr "" msgid "Issue Tracker" msgstr "" +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +msgid "Community" +msgstr "Z komunity" + #: editor/editor_node.cpp msgid "About" msgstr "" @@ -2071,7 +1987,7 @@ msgstr "" msgid "Play the project." msgstr "" -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Play" msgstr "" @@ -2087,7 +2003,7 @@ msgstr "" msgid "Stop the scene." msgstr "" -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Stop" msgstr "" @@ -2161,6 +2077,15 @@ msgid "Object properties." msgstr "" #: editor/editor_node.cpp +msgid "Changes may be lost!" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Import" +msgstr "" + +#: editor/editor_node.cpp msgid "FileSystem" msgstr "" @@ -2176,14 +2101,6 @@ msgstr "" msgid "Don't Save" msgstr "" -#: editor/editor_node.cpp editor/editor_reimport_dialog.cpp -msgid "Re-Import" -msgstr "" - -#: editor/editor_node.cpp editor/editor_plugin_settings.cpp -msgid "Update" -msgstr "" - #: editor/editor_node.cpp msgid "Import Templates From ZIP File" msgstr "" @@ -2248,11 +2165,28 @@ msgstr "Editor závislostÃ" msgid "Open the previous Editor" msgstr "" +#: editor/editor_plugin.cpp +msgid "Creating Mesh Previews" +msgstr "" + +#: editor/editor_plugin.cpp +msgid "Thumbnail.." +msgstr "" + #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" msgstr "" #: editor/editor_plugin_settings.cpp +msgid "Update" +msgstr "" + +#: editor/editor_plugin_settings.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Version:" +msgstr "" + +#: editor/editor_plugin_settings.cpp msgid "Author:" msgstr "" @@ -2304,26 +2238,6 @@ msgstr "" msgid "Frame #:" msgstr "" -#: editor/editor_reimport_dialog.cpp -msgid "Please wait for scan to complete." -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Current scene must be saved to re-import." -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Save & Re-Import" -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Importing" -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Import Changed Resources" -msgstr "" - #: editor/editor_run_native.cpp msgid "Select device from the list" msgstr "" @@ -2434,10 +2348,6 @@ msgid "Importing:" msgstr "" #: editor/export_template_manager.cpp -msgid "Loading Export Templates" -msgstr "" - -#: editor/export_template_manager.cpp msgid "Current Version:" msgstr "" @@ -2472,9 +2382,17 @@ msgid "Cannot navigate to '" msgstr "" #: editor/filesystem_dock.cpp +msgid "View items as a grid of thumbnails" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "View items as a list" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "" "\n" -"Status: Needs Re-Import" +"Status: Import of file failed. Please fix file and reimport manually." msgstr "" #: editor/filesystem_dock.cpp @@ -2485,45 +2403,51 @@ msgid "" msgstr "Zdroj" #: editor/filesystem_dock.cpp -msgid "Same source and destination files, doing nothing." +msgid "Cannot move/rename resources root." msgstr "" #: editor/filesystem_dock.cpp -msgid "Target file exists, can't overwrite. Delete first." +msgid "Cannot move a folder into itself.\n" msgstr "" #: editor/filesystem_dock.cpp -msgid "Same source and destination paths, doing nothing." -msgstr "" +#, fuzzy +msgid "Error moving:\n" +msgstr "Chyba pÅ™i naÄÃtánÃ:" + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Unable to update dependencies:\n" +msgstr "Scénu se nepodaÅ™ilo naÄÃst kvůli chybÄ›jÃcÃm závislostem:" #: editor/filesystem_dock.cpp -msgid "Can't move directories to within themselves." +msgid "No name provided" msgstr "" #: editor/filesystem_dock.cpp -msgid "Can't rename deps for:\n" +msgid "Provided name contains invalid characters" msgstr "" #: editor/filesystem_dock.cpp -#, fuzzy -msgid "Error moving file:\n" -msgstr "Chyba pÅ™i naÄÃtánÃ:" +msgid "No name provided." +msgstr "" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Error moving dir:\n" -msgstr "Chyba pÅ™i naÄÃtánÃ:" +msgid "Name contains invalid characters." +msgstr "Platné znaky:" #: editor/filesystem_dock.cpp -msgid "Can't operate on '..'" +msgid "A file or folder with this name already exists." msgstr "" #: editor/filesystem_dock.cpp -msgid "Pick New Name and Location For:" -msgstr "" +#, fuzzy +msgid "Renaming file:" +msgstr "PÅ™ejmenovat promÄ›nnou" #: editor/filesystem_dock.cpp -msgid "No files selected!" +msgid "Renaming folder:" msgstr "" #: editor/filesystem_dock.cpp @@ -2535,39 +2459,36 @@ msgid "Collapse all" msgstr "" #: editor/filesystem_dock.cpp -msgid "Show In File Manager" -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Instance" +msgid "Copy Path" msgstr "" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." +msgid "Rename.." msgstr "" #: editor/filesystem_dock.cpp -msgid "View Owners.." +msgid "Move To.." msgstr "" #: editor/filesystem_dock.cpp -msgid "Copy Path" -msgstr "" +#, fuzzy +msgid "New Folder.." +msgstr "VytvoÅ™it složku" #: editor/filesystem_dock.cpp -msgid "Rename or Move.." +msgid "Show In File Manager" msgstr "" #: editor/filesystem_dock.cpp -msgid "Move To.." +msgid "Instance" msgstr "" #: editor/filesystem_dock.cpp -msgid "Info" +msgid "Edit Dependencies.." msgstr "" #: editor/filesystem_dock.cpp -msgid "Re-Import.." +msgid "View Owners.." msgstr "" #: editor/filesystem_dock.cpp @@ -2600,6 +2521,11 @@ msgstr "" msgid "Move" msgstr "" +#: editor/filesystem_dock.cpp editor/plugins/animation_tree_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Rename" +msgstr "" + #: editor/groups_editor.cpp msgid "Add to Group" msgstr "" @@ -2613,6 +2539,10 @@ msgid "Import as Single Scene" msgstr "" #: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials" msgstr "" @@ -2625,6 +2555,18 @@ msgid "Import with Separate Objects+Materials" msgstr "" #: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Materials+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Materials+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes" msgstr "" @@ -2633,38 +2575,31 @@ msgid "Import as Multiple Scenes+Materials" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Import Scene" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Importing Scene.." msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Running Custom Script.." msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Couldn't load post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Invalid/broken script for post-import (check console):" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Error running post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Saving.." msgstr "" @@ -2693,579 +2628,54 @@ msgstr "" msgid "Reimport" msgstr "" -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "No bit masks to import!" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path is empty." -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must be a complete resource path." -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must exist." -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Save path is empty!" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Import BitMasks" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s):" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Target Path:" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Accept" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Bit Mask" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No source font file!" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No target font resource!" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "" -"Invalid file extension.\n" -"Please use .font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Can't load/process source font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Couldn't save font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font Size:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Dest Resource:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "The quick brown fox jumps over the lazy dog." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Test:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Options:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Font Import" -msgstr "" - -#: 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 "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Failed opening as BMFont file." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error initializing FreeType." -msgstr "Chyba pÅ™i inicializaci FreeType." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Unknown font format." -msgstr "Neznámý formát fontu." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error loading font." -msgstr "Chyba nahrávánà fontu." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Invalid font size." -msgstr "Neplatná velikost fontu." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Invalid font custom source." -msgstr "Nevalidnà pÃsmo z vlastnÃho zdroje." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/plugins/theme_editor_plugin.cpp -msgid "Font" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "No meshes to import!" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Single Mesh Import" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Source Mesh(es):" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Mesh" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Surface %d" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "No samples to import!" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Import Audio Samples" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Source Sample(s):" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Audio Sample" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "New Clip" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Animation Options" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Flags" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Bake FPS:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Optimizer" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Linear Error" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angular Error" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angle" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Clips" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Start(s)" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "End(s)" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Loop" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Filters" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source path is empty." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't load post-import script." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Invalid/broken script for post-import." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Error importing scene." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import 3D Scene" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source Scene:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Same as Target Scene" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Shared" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Target Texture Folder:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Post-Process Script:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Custom Root Node Type:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Auto" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Root Node Name:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "The Following Files are Missing:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Anyway" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp scene/gui/dialogs.cpp -msgid "Cancel" -msgstr "ZruÅ¡it" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import & Open" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Edited scene has not been saved, open imported scene anyway?" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Image:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Can't import a file over itself:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't localize path: %s (already local)" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "3D Scene Animation" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Uncompressed" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossless (PNG)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossy (WebP)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress (VRAM)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Format" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Compression Quality (WebP):" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Options" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Please specify some files!" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "At least one file needed for Atlas." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Error importing:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Only one file is required for large texture." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Max Texture Size:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for Atlas (2D)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cell Size:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Large Texture" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Textures (2D)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture" +#: editor/multi_node_edit.cpp +msgid "MultiNode Set" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Base Atlas Texture" +#: editor/node_dock.cpp +msgid "Groups" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s)" +#: editor/node_dock.cpp +msgid "Select a Node to edit Signals and Groups." msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 2D" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create Poly" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 3D" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures" +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Insert Point" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "2D Texture" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly (Remove Point)" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "3D Texture" +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Remove Poly And Point" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Atlas Texture" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create a new polygon from scratch." msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp +#: editor/plugins/abstract_polygon_2d_editor.cpp msgid "" -"NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files to " -"the project." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Crop empty space." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Texture" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Load Source Image" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Slicing" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Inserting" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Saving" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save large texture:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Build Atlas For:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Loading Image:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't load image:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Converting Images" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cropping Images" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Blitting Images" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save atlas image:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save converted texture:" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid source!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid translation source!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Column" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/script_create_dialog.cpp -msgid "Language" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No items to import!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No target path!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translations" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Couldn't import!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translation" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Source CSV:" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Ignore First Row" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Compress" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Add to Project (project.godot)" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Languages:" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Translation" -msgstr "" - -#: editor/multi_node_edit.cpp -msgid "MultiNode Set" -msgstr "" - -#: editor/node_dock.cpp -msgid "Groups" -msgstr "" - -#: editor/node_dock.cpp -msgid "Select a Node to edit Signals and Groups." +"Edit existing polygon:\n" +"LMB: Move Point.\n" +"Ctrl+LMB: Split Segment.\n" +"RMB: Erase Point." msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp @@ -3422,7 +2832,6 @@ msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp #: editor/script_create_dialog.cpp msgid "Error!" @@ -3533,10 +2942,6 @@ msgid "Delete Input" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Rename" -msgstr "" - -#: editor/plugins/animation_tree_editor_plugin.cpp msgid "Animation tree is valid." msgstr "" @@ -3592,64 +2997,188 @@ msgstr "" msgid "Filters.." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing %d Triangles:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Free" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Triangle #" +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Contents:" +msgstr "Spojité" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "View Files" +msgstr "Soubor:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve hostname:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Light Baker Setup:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing Geometry" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connection error, please try again." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Fixing Lights" +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Can't connect." +msgstr "PÅ™ipojit.." + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Can't connect to host:" +msgstr "PÅ™ipojit k uzlu:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response from host:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Making BVH" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, return code:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Light Octree" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Req. Failed." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Octree Texture" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, too many redirects" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Transfer to Lightmaps:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Redirect Loop." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Allocating Texture #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Baking Triangle #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Bad download hash, assuming file has been tampered with." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Post-Processing Texture #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Expected:" msgstr "" -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Bake!" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Got:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed sha256 hash check" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Asset Download Error:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Fetching:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Resolving.." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Connecting.." +msgstr "PÅ™ipojit.." + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Requesting.." +msgstr "Testované" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Error making request" +msgstr "Chyba nahrávánà fontu." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Idle" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Retry" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download Error" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download for this asset is already in progress!" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "first" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "prev" msgstr "" -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Reset the lightmap octree baking process (start over)." +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "next" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "last" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "All" +msgstr "VÅ¡echny" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Plugins" msgstr "" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Sort:" +msgstr "Řadit:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Reverse" +msgstr "Naopak" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Category:" +msgstr "Kategorie:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Site:" +msgstr "Web:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Support.." +msgstr "Podpora.." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Official" +msgstr "OficiálnÃ" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Testing" +msgstr "Testované" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Assets ZIP File" +msgstr "ZIP soubor asetů" + #: editor/plugins/camera_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp msgid "Preview" msgstr "" @@ -3692,11 +3221,15 @@ msgid "Edit CanvasItem" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Change Anchors" +msgid "Anchors only" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom (%):" +msgid "Change Anchors and Margins" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Change Anchors" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3748,59 +3281,73 @@ msgid "Pan Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Lock the selected object in place (can't be moved)." +#, fuzzy +msgid "Toggles snapping" +msgstr "PÅ™epnout breakpoint" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Unlock the selected object (can be moved)." +msgid "Snapping options" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Makes sure the object's children are not selectable." +msgid "Snap to grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Restores the object's children's ability to be selected." +msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp -#: editor/project_settings_editor.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Edit" -msgstr "Upravit" +msgid "Configure Snap..." +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +msgid "Snap Relative" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +msgid "Use Pixel Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Rotation Snap" +msgid "Smart snapping" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap Relative" +msgid "Snap to parent" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." +msgid "Snap to node anchor" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Pixel Snap" +msgid "Snap to node sides" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to other nodes" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Lock the selected object in place (can't be moved)." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Unlock the selected object (can be moved)." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Skeleton.." +msgid "Makes sure the object's children are not selectable." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Restores the object's children's ability to be selected." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3829,11 +3376,16 @@ msgid "View" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Reset" +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Set.." +msgid "Show helpers" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show rulers" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3845,7 +3397,7 @@ msgid "Frame Selection" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Anchor" +msgid "Layout" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3869,11 +3421,20 @@ msgid "Clear Pose" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Set a Value" +msgid "Drag pivot from mouse position" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap (Pixels):" +#, fuzzy +msgid "Set pivot at mouse position" +msgstr "Odstranit signál" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Multiply grid step by 2" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Divide grid step by 2" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3884,23 +3445,28 @@ msgstr "" msgid "Adding %s..." msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Create Node" msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Error instancing scene from %s" msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "OK :(" msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "No parent to instance a child at." msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "This operation requires a single selected node." msgstr "" @@ -3915,45 +3481,6 @@ msgid "" "Drag & drop + Alt : Change node type" msgstr "" -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Create Poly" -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly" -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly (Remove Point)" -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Create a new polygon from scratch." -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -msgid "" -"Edit existing polygon:\n" -"LMB: Move Point.\n" -"Ctrl+LMB: Split Segment.\n" -"RMB: Erase Point." -msgstr "" - #: editor/plugins/collision_polygon_editor_plugin.cpp msgid "Create Poly3D" msgstr "" @@ -3963,14 +3490,6 @@ msgid "Set Handle" msgstr "" #: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Creating Mesh Library" -msgstr "" - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Thumbnail.." -msgstr "" - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Remove item %d?" msgstr "" @@ -3993,6 +3512,27 @@ msgid "Update from Scene" msgstr "" #: editor/plugins/curve_editor_plugin.cpp +msgid "Flat0" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Flat1" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +#, fuzzy +msgid "Ease in" +msgstr "ZmÄ›nit měřÃtko výbÄ›ru" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Ease out" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Smoothstep" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp msgid "Modify Curve Point" msgstr "" @@ -4072,22 +3612,18 @@ msgid "Create Occluder Polygon" msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Edit existing polygon:" msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "LMB: Move Point." msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Ctrl+LMB: Split Segment." msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "RMB: Erase Point." msgstr "" @@ -4189,6 +3725,10 @@ msgid "Create Outline" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Body" msgstr "" @@ -4316,12 +3856,72 @@ msgstr "" msgid "Populate" msgstr "" -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Create Navigation Polygon" +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Bake!" +msgstr "" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Bake the navigation mesh.\n" +msgstr "" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Clear the navigation mesh." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Setting up Configuration..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Calculating grid size..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating heightfield..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Marking walkable triangles..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Constructing compact heightfield..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Eroding walkable area..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Partioning..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating contours..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating polymesh..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Converting to native navigation mesh..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Navigation Mesh Generator Setup:" +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Parsing Geometry..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Done!" msgstr "" #: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Remove Poly And Point" +msgid "Create Navigation Polygon" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4495,16 +4095,19 @@ msgid "Curve Point #" msgstr "" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Point Pos" -msgstr "" +#, fuzzy +msgid "Set Curve Point Position" +msgstr "Odstranit signál" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve In Pos" -msgstr "" +#, fuzzy +msgid "Set Curve In Position" +msgstr "Odstranit signál" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Out Pos" -msgstr "" +#, fuzzy +msgid "Set Curve Out Position" +msgstr "Odstranit signál" #: editor/plugins/path_editor_plugin.cpp msgid "Split Path" @@ -4564,6 +4167,14 @@ msgid "Scale Polygon" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit" +msgstr "Upravit" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon->UV" msgstr "" @@ -4618,63 +4229,10 @@ msgstr "" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "Vložit" -#: editor/plugins/rich_text_editor_plugin.cpp -msgid "Parse BBCode" -msgstr "" - -#: editor/plugins/sample_editor_plugin.cpp -msgid "Length:" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Open Sample File(s)" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "ERROR: Couldn't load sample!" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Add Sample" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Rename Sample" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Delete Sample" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "16 Bits" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "8 Bits" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Stereo" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Mono" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/script_editor_debugger.cpp -msgid "Format" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Pitch" -msgstr "" - #: editor/plugins/script_editor_plugin.cpp msgid "Clear Recent Files" msgstr "" @@ -4766,6 +4324,10 @@ msgstr "" msgid "Close All" msgstr "ZavÅ™Ãt" +#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp +msgid "Run" +msgstr "" + #: editor/plugins/script_editor_plugin.cpp msgid "Toggle Scripts Panel" msgstr "" @@ -4808,18 +4370,6 @@ msgid "Debug with external editor" msgstr "Editor závislostÃ" #: editor/plugins/script_editor_plugin.cpp -msgid "Window" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Left" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Right" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp msgid "Open Godot online documentation" msgstr "" @@ -4903,7 +4453,7 @@ msgstr "Vyjmout" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Copy" msgstr "KopÃrovat" @@ -5168,10 +4718,6 @@ msgid "View Plane Transform." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Scaling to %s%%." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." msgstr "" @@ -5188,10 +4734,6 @@ msgid "Top View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Top" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "" @@ -5424,6 +4966,10 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Configure Snap.." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Local Coords" msgstr "" @@ -5569,6 +5115,10 @@ msgid "Speed (FPS):" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Loop" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animation Frames" msgstr "" @@ -5581,11 +5131,12 @@ msgid "Insert Empty (After)" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Up" -msgstr "" +#, fuzzy +msgid "Move (Before)" +msgstr "ZkopÃrovat uzly" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Down" +msgid "Move (After)" msgstr "" #: editor/plugins/style_box_editor_plugin.cpp @@ -5749,6 +5300,10 @@ msgid "Style" msgstr "" #: editor/plugins/theme_editor_plugin.cpp +msgid "Font" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp msgid "Color" msgstr "" @@ -5799,7 +5354,7 @@ msgid "Mirror Y" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Bucket" +msgid "Paint Tile" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp @@ -5866,6 +5421,10 @@ msgid "Delete preset '%s'?" msgstr "Odstranit vybrané soubory?" #: editor/project_export.cpp +msgid "Export templates for this platform are missing/corrupted: " +msgstr "" + +#: editor/project_export.cpp msgid "Presets" msgstr "" @@ -5938,19 +5497,30 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +msgid "Export templates for this platform are missing/corrupted:" +msgstr "" + +#: editor/project_export.cpp msgid "Export With Debug" msgstr "" #: editor/project_manager.cpp -msgid "Invalid project path, the path must exist!" +#, fuzzy +msgid "The path does not exists." +msgstr "Soubor neexistuje." + +#: editor/project_manager.cpp +msgid "Please choose a 'project.godot' file." msgstr "" #: editor/project_manager.cpp -msgid "Invalid project path, project.godot must not exist." +msgid "" +"Your project will be created in a non empty folder (you might want to create " +"a new folder)." msgstr "" #: editor/project_manager.cpp -msgid "Invalid project path, project.godot must exist." +msgid "Please choose a folder that does not contain a 'project.godot' file." msgstr "" #: editor/project_manager.cpp @@ -5958,10 +5528,26 @@ msgid "Imported Project" msgstr "" #: editor/project_manager.cpp +msgid " " +msgstr "" + +#: editor/project_manager.cpp +msgid "It would be a good idea to name your project." +msgstr "" + +#: editor/project_manager.cpp msgid "Invalid project path (changed anything?)." msgstr "" #: editor/project_manager.cpp +msgid "Couldn't get project.godot in project path." +msgstr "" + +#: editor/project_manager.cpp +msgid "Couldn't edit project.godot in project path." +msgstr "" + +#: editor/project_manager.cpp msgid "Couldn't create project.godot in project path." msgstr "" @@ -5970,15 +5556,20 @@ msgid "The following files failed extraction from package:" msgstr "" #: editor/project_manager.cpp -msgid "Import Existing Project" +#, fuzzy +msgid "Rename Project" +msgstr "Nastavenà projektu" + +#: editor/project_manager.cpp +msgid "Couldn't get project.godot in the project path." msgstr "" #: editor/project_manager.cpp -msgid "Project Path (Must Exist):" +msgid "New Game Project" msgstr "" #: editor/project_manager.cpp -msgid "Project Name:" +msgid "Import Existing Project" msgstr "" #: editor/project_manager.cpp @@ -5986,19 +5577,24 @@ msgid "Create New Project" msgstr "" #: editor/project_manager.cpp -msgid "Project Path:" +msgid "Install Project:" msgstr "" #: editor/project_manager.cpp -msgid "Install Project:" +msgid "Project Name:" msgstr "" #: editor/project_manager.cpp -msgid "Browse" +#, fuzzy +msgid "Create folder" +msgstr "VytvoÅ™it složku" + +#: editor/project_manager.cpp +msgid "Project Path:" msgstr "" #: editor/project_manager.cpp -msgid "New Game Project" +msgid "Browse" msgstr "" #: editor/project_manager.cpp @@ -6010,6 +5606,11 @@ msgid "Unnamed Project" msgstr "" #: editor/project_manager.cpp +#, fuzzy +msgid "Can't open project" +msgstr "PÅ™ipojit.." + +#: editor/project_manager.cpp msgid "Are you sure to open more than one project?" msgstr "" @@ -6045,10 +5646,6 @@ msgid "Project List" msgstr "" #: editor/project_manager.cpp -msgid "Run" -msgstr "" - -#: editor/project_manager.cpp msgid "Scan" msgstr "" @@ -6107,17 +5704,14 @@ msgid "Add Input Action Event" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Meta+" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Shift+" msgstr "Shift+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Alt+" msgstr "Alt+" @@ -6178,7 +5772,7 @@ msgstr "ZmÄ›nit" msgid "Joypad Axis Index:" msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Axis" msgstr "Osa" @@ -6198,31 +5792,31 @@ msgstr "" msgid "Add Event" msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Device" msgstr "ZaÅ™ÃzenÃ" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Button" msgstr "TlaÄÃtko" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Left Button." msgstr "Levé tlaÄÃtko." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Right Button." msgstr "Pravé tlaÄÃtko." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Middle Button." msgstr "ProstÅ™ednà tlaÄÃtko." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Up." msgstr "KoleÄko nahoru." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Down." msgstr "KoleÄko dolů." @@ -6232,7 +5826,7 @@ msgid "Add Global Property" msgstr "PÅ™idat vlastnost getter" #: editor/project_settings_editor.cpp -msgid "Select an setting item first!" +msgid "Select a setting item first!" msgstr "" #: editor/project_settings_editor.cpp @@ -6250,6 +5844,15 @@ msgid "Delete Item" msgstr "Odstranit" #: editor/project_settings_editor.cpp +#, fuzzy +msgid "Can't contain '/' or ':'" +msgstr "PÅ™ipojit k uzlu:" + +#: editor/project_settings_editor.cpp +msgid "Already existing" +msgstr "" + +#: editor/project_settings_editor.cpp msgid "Error saving settings." msgstr "" @@ -6400,10 +6003,19 @@ msgid "New Script" msgstr "" #: editor/property_editor.cpp +msgid "Make Unique" +msgstr "" + +#: editor/property_editor.cpp msgid "Show in File System" msgstr "" #: editor/property_editor.cpp +#, fuzzy +msgid "Convert To %s" +msgstr "PÅ™ipojit k uzlu:" + +#: editor/property_editor.cpp msgid "Error loading file: Not a resource!" msgstr "" @@ -6443,6 +6055,11 @@ msgstr "PÅ™idat vlastnost setter" #: editor/property_selector.cpp #, fuzzy +msgid "Select Virtual Method" +msgstr "Vybrat vÅ¡e" + +#: editor/property_selector.cpp +#, fuzzy msgid "Select Method" msgstr "Vybrat vÅ¡e" @@ -6470,26 +6087,6 @@ msgstr "" msgid "Reparent" msgstr "" -#: editor/resources_dock.cpp -msgid "Create New Resource" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Open Resource" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Save Resource" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Resource Tools" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Make Local" -msgstr "" - #: editor/run_settings_dialog.cpp msgid "Run Mode:" msgstr "" @@ -6617,14 +6214,6 @@ msgid "Sub-Resources:" msgstr "Zdroj" #: editor/scene_tree_dock.cpp -msgid "Edit Groups" -msgstr "" - -#: editor/scene_tree_dock.cpp -msgid "Edit Connections" -msgstr "" - -#: editor/scene_tree_dock.cpp msgid "Clear Inheritance" msgstr "" @@ -6813,6 +6402,15 @@ msgid "Invalid base path" msgstr "" #: editor/script_create_dialog.cpp +msgid "Directory of the same name exists" +msgstr "" + +#: editor/script_create_dialog.cpp +#, fuzzy +msgid "File exists, will be reused" +msgstr "Soubor už existuje. PÅ™epsat?" + +#: editor/script_create_dialog.cpp msgid "Invalid extension" msgstr "" @@ -6856,6 +6454,10 @@ msgid "Load existing script file" msgstr "" #: editor/script_create_dialog.cpp +msgid "Language" +msgstr "" + +#: editor/script_create_dialog.cpp msgid "Inherits" msgstr "" @@ -6898,6 +6500,10 @@ msgid "Function:" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Errors" msgstr "" @@ -6978,6 +6584,10 @@ msgid "Type" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Format" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Usage" msgstr "" @@ -7053,13 +6663,29 @@ msgstr "" msgid "Change Probe Extents" msgstr "" +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Library" +msgstr "" + +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Status" +msgstr "" + +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Libraries: " +msgstr "" + +#: modules/gdnative/register_types.cpp +msgid "GDNative" +msgstr "" + #: modules/gdscript/gd_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "" "Neplatný typ argumentu funkce convert(), použijte nÄ›kterou z konstant TYPE_*" -#: modules/gdscript/gd_functions.cpp +#: modules/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "Nedostatek bajtů pro dekódovánà bajtů, nebo Å¡patný formát." @@ -7111,10 +6737,6 @@ msgid "GridMap Duplicate Selection" msgstr "Duplikovat výbÄ›r" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Paint" -msgstr "" - -#: modules/gridmap/grid_map_editor_plugin.cpp msgid "Snap View" msgstr "" @@ -7211,13 +6833,8 @@ msgstr "Nastavenà projektu" msgid "Pick Distance:" msgstr "" -#: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy -msgid "Tiles" -msgstr "Soubor:" - -#: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Areas" +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "Builds" msgstr "" #: modules/visual_script/visual_script.cpp @@ -7432,10 +7049,18 @@ msgid "Return" msgstr "Vrátit" #: modules/visual_script/visual_script_editor.cpp +msgid "Call" +msgstr "Zavolat" + +#: modules/visual_script/visual_script_editor.cpp msgid "Get" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Script already has function '%s'" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Change Input Value" msgstr "ZmÄ›nit hodnotu pole" @@ -7843,6 +7468,12 @@ msgstr "" "Zdroj SpriteFrames musà být vytvoÅ™en nebo nastaven ve vlastnosti 'Frames', " "aby mohl AnimatedSprite3D zobrazit rámeÄky." +#: scene/3d/vehicle_body.cpp +msgid "" +"VehicleWheel serves to provide a wheel system to a VehicleBody. Please use " +"it as a child of a VehicleBody." +msgstr "" + #: scene/gui/color_picker.cpp msgid "Raw Mode" msgstr "" @@ -7852,6 +7483,10 @@ msgid "Add current color as a preset" msgstr "" #: scene/gui/dialogs.cpp +msgid "Cancel" +msgstr "ZruÅ¡it" + +#: scene/gui/dialogs.cpp msgid "Alert!" msgstr "Pozor!" @@ -7859,10 +7494,6 @@ msgstr "Pozor!" msgid "Please Confirm..." msgstr "PotvrÄte prosÃm..." -#: scene/gui/input_action.cpp -msgid "Ctrl+" -msgstr "Ctrl+" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -7898,6 +7529,45 @@ msgstr "" "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 +msgid "Error initializing FreeType." +msgstr "Chyba pÅ™i inicializaci FreeType." + +#: scene/resources/dynamic_font.cpp +msgid "Unknown font format." +msgstr "Neznámý formát fontu." + +#: scene/resources/dynamic_font.cpp +msgid "Error loading font." +msgstr "Chyba nahrávánà fontu." + +#: scene/resources/dynamic_font.cpp +msgid "Invalid font size." +msgstr "Neplatná velikost fontu." + +#~ msgid "Method List For '%s':" +#~ msgstr "Seznam metod '%s':" + +#~ msgid "Arguments:" +#~ msgstr "Argumenty:" + +#~ msgid "Return:" +#~ msgstr "Vrátit:" + +#, fuzzy +#~ msgid "Error moving file:\n" +#~ msgstr "Chyba pÅ™i naÄÃtánÃ:" + +#~ msgid "Invalid font custom source." +#~ msgstr "Nevalidnà pÃsmo z vlastnÃho zdroje." + +#, fuzzy +#~ msgid "Tiles" +#~ msgstr "Soubor:" + +#~ msgid "Ctrl+" +#~ msgstr "Ctrl+" + #~ msgid "just pressed" #~ msgstr "právÄ› stisknuto" diff --git a/editor/translations/da.po b/editor/translations/da.po index d33fef1743..0a8492e137 100644 --- a/editor/translations/da.po +++ b/editor/translations/da.po @@ -192,10 +192,9 @@ msgid "Create %d NEW tracks and insert keys?" msgstr "Oprette %d nye numre og indsætte nøgler?" #: editor/animation_editor.cpp editor/create_dialog.cpp -#: editor/editor_audio_buses.cpp +#: editor/editor_audio_buses.cpp editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp #: editor/plugins/mesh_instance_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp editor/project_manager.cpp #: editor/script_create_dialog.cpp msgid "Create" @@ -357,268 +356,6 @@ msgstr "Skift Array værditype" msgid "Change Array Value" msgstr "Ændre Array-værdi" -#: editor/asset_library_editor_plugin.cpp -msgid "Free" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp -msgid "Version:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Contents:" -msgstr "Kontinuerlig" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "View Files" -msgstr "Fil:" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_help.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp -msgid "Description:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -#: editor/project_manager.cpp -msgid "Install" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp -#: editor/connections_dialog.cpp editor/export_template_manager.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -#: editor/project_settings_editor.cpp editor/property_editor.cpp -#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Close" -msgstr "Luk" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve hostname:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Connection error, please try again." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Can't connect." -msgstr "Forbind..." - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Can't connect to host:" -msgstr "Opret forbindelse til Node:" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response from host:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Request failed, return code:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Req. Failed." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Request failed, too many redirects" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Redirect Loop." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Bad download hash, assuming file has been tampered with." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Expected:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Got:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed sha256 hash check" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Asset Download Error:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -msgid "Success!" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Fetching:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Resolving.." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Connecting.." -msgstr "Forbind..." - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Requesting.." -msgstr "Tester" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Error making request" -msgstr "Error loading skrifttype." - -#: editor/asset_library_editor_plugin.cpp -msgid "Idle" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Retry" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Download Error" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Download for this asset is already in progress!" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "first" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "prev" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "next" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "last" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "All" -msgstr "Alle" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/property_selector.cpp editor/quick_open.cpp -#: editor/settings_config_dialog.cpp -msgid "Search:" -msgstr "Søgning:" - -#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Search" -msgstr "Søg" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/project_manager.cpp -msgid "Import" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Plugins" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Sort:" -msgstr "Sorter:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Reverse" -msgstr "Omvendt" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Category:" -msgstr "Kategori:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Site:" -msgstr "Websted:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "Støtte..." - -#: editor/asset_library_editor_plugin.cpp -msgid "Official" -msgstr "Officiel" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -msgid "Community" -msgstr "Fællesskabet" - -#: editor/asset_library_editor_plugin.cpp -msgid "Testing" -msgstr "Tester" - -#: editor/asset_library_editor_plugin.cpp -msgid "Assets ZIP File" -msgstr "Assets zipfil" - -#: editor/call_dialog.cpp -msgid "Method List For '%s':" -msgstr "Metode liste For '%s':" - -#: editor/call_dialog.cpp modules/visual_script/visual_script_editor.cpp -msgid "Call" -msgstr "Kald" - -#: editor/call_dialog.cpp -msgid "Method List:" -msgstr "Metode liste:" - -#: editor/call_dialog.cpp -msgid "Arguments:" -msgstr "Argumenter:" - -#: editor/call_dialog.cpp -msgid "Return:" -msgstr "Tilbage:" - #: editor/code_editor.cpp msgid "Go to Line" msgstr "GÃ¥ til linje" @@ -656,6 +393,14 @@ msgstr "Hele ord" msgid "Selection Only" msgstr "Kun Valgte" +#: editor/code_editor.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp +msgid "Search" +msgstr "Søg" + #: editor/code_editor.cpp editor/editor_help.cpp msgid "Find" msgstr "Find" @@ -688,11 +433,11 @@ msgstr "Spørg ved Erstat" msgid "Skip" msgstr "Spring over" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom In" msgstr "Zoom ind" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom Out" msgstr "Zoom ud" @@ -759,6 +504,20 @@ msgstr "Udskudt" msgid "Oneshot" msgstr "OneShot" +#: editor/connections_dialog.cpp editor/dependency_editor.cpp +#: editor/export_template_manager.cpp +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Close" +msgstr "Luk" + #: editor/connections_dialog.cpp msgid "Connect" msgstr "Tilslut" @@ -784,7 +543,7 @@ msgstr "Forbind..." msgid "Disconnect" msgstr "Afbryd" -#: editor/connections_dialog.cpp editor/node_dock.cpp +#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" msgstr "Signaler" @@ -801,12 +560,25 @@ msgstr "" msgid "Recent:" msgstr "" +#: editor/create_dialog.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp +#: editor/quick_open.cpp editor/settings_config_dialog.cpp +msgid "Search:" +msgstr "Søgning:" + #: editor/create_dialog.cpp editor/editor_help.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp #: editor/quick_open.cpp msgid "Matches:" msgstr "Matches:" +#: editor/create_dialog.cpp editor/editor_help.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp +#: editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "" + #: editor/dependency_editor.cpp msgid "Search Replacement For:" msgstr "Søg erstatning For:" @@ -866,6 +638,10 @@ msgid "Owners Of:" msgstr "" #: editor/dependency_editor.cpp +msgid "Remove selected files from the project? (no undo)" +msgstr "" + +#: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" @@ -873,7 +649,7 @@ msgid "" msgstr "" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (no undo)" +msgid "Cannot remove:\n" msgstr "" #: editor/dependency_editor.cpp @@ -940,10 +716,6 @@ msgid "Godot Engine contributors" msgstr "" #: editor/editor_about.cpp -msgid "Authors" -msgstr "" - -#: editor/editor_about.cpp msgid "Project Founders" msgstr "" @@ -960,6 +732,38 @@ msgid "Developers" msgstr "" #: editor/editor_about.cpp +msgid "Authors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Platinum Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Mini Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Silver Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Bronze Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Donors" +msgstr "" + +#: editor/editor_about.cpp msgid "License" msgstr "" @@ -1002,6 +806,16 @@ msgid "Package Installed Successfully!" msgstr "" #: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Success!" +msgstr "" + +#: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp +msgid "Install" +msgstr "" + +#: editor/editor_asset_installer.cpp msgid "Package Installer" msgstr "" @@ -1052,10 +866,6 @@ msgid "Audio Bus, Drag and Drop to rearrange." msgstr "" #: editor/editor_audio_buses.cpp -msgid "Bus options" -msgstr "" - -#: editor/editor_audio_buses.cpp msgid "Solo" msgstr "" @@ -1067,6 +877,10 @@ msgstr "" msgid "Bypass" msgstr "" +#: editor/editor_audio_buses.cpp +msgid "Bus options" +msgstr "" + #: editor/editor_audio_buses.cpp editor/plugins/tile_map_editor_plugin.cpp #: editor/scene_tree_dock.cpp msgid "Duplicate" @@ -1074,6 +888,11 @@ msgstr "" #: editor/editor_audio_buses.cpp #, fuzzy +msgid "Reset Volume" +msgstr "Nulstil Zoom" + +#: editor/editor_audio_buses.cpp +#, fuzzy msgid "Delete Effect" msgstr "Slet Valgte" @@ -1097,6 +916,11 @@ msgstr "Dubler valg" #: editor/editor_audio_buses.cpp #, fuzzy +msgid "Reset Bus Volume" +msgstr "Nulstil Zoom" + +#: editor/editor_audio_buses.cpp +#, fuzzy msgid "Move Audio Bus" msgstr "Flyt Add Key" @@ -1128,7 +952,8 @@ msgstr "" msgid "Create a new Bus Layout." msgstr "" -#: editor/editor_audio_buses.cpp editor/script_create_dialog.cpp +#: editor/editor_audio_buses.cpp editor/property_editor.cpp +#: editor/script_create_dialog.cpp msgid "Load" msgstr "" @@ -1218,7 +1043,7 @@ msgid "Rearrange Autoloads" msgstr "" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp scene/gui/file_dialog.cpp +#: scene/gui/file_dialog.cpp msgid "Path:" msgstr "Sti:" @@ -1226,9 +1051,7 @@ msgstr "Sti:" msgid "Node Name:" msgstr "" -#: editor/editor_autoload_settings.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp editor/project_manager.cpp +#: editor/editor_autoload_settings.cpp editor/project_manager.cpp msgid "Name" msgstr "" @@ -1261,18 +1084,19 @@ msgid "Choose a Directory" msgstr "" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Create Folder" msgstr "Opret mappe" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: editor/editor_plugin_settings.cpp editor/plugins/theme_editor_plugin.cpp -#: editor/project_export.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp +#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp +#: scene/gui/file_dialog.cpp msgid "Name:" msgstr "Navn:" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Could not create folder." msgstr "Kunne ikke oprette mappe." @@ -1292,30 +1116,6 @@ msgstr "" msgid "Template file not found:\n" msgstr "" -#: editor/editor_export.cpp -msgid "Added:" -msgstr "" - -#: editor/editor_export.cpp -msgid "Removed:" -msgstr "" - -#: editor/editor_export.cpp -msgid "Error saving atlas:" -msgstr "" - -#: editor/editor_export.cpp -msgid "Could not save atlas subtexture:" -msgstr "" - -#: editor/editor_export.cpp -msgid "Exporting for %s" -msgstr "" - -#: editor/editor_export.cpp -msgid "Setting Up.." -msgstr "" - #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "Filen findes, overskrives?" @@ -1400,6 +1200,11 @@ msgstr "" msgid "Move Favorite Down" msgstr "" +#: editor/editor_file_dialog.cpp +#, fuzzy +msgid "Go to parent folder" +msgstr "Kunne ikke oprette mappe." + #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Directories & Files:" msgstr "Mapper & filer:" @@ -1442,6 +1247,10 @@ msgstr "" msgid "Search Classes" msgstr "" +#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +msgid "Top" +msgstr "" + #: editor/editor_help.cpp editor/property_editor.cpp msgid "Class:" msgstr "" @@ -1458,15 +1267,29 @@ msgstr "" msgid "Brief Description:" msgstr "" +#: editor/editor_help.cpp +#, fuzzy +msgid "Members" +msgstr "Medlemmer:" + #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "Medlemmer:" #: editor/editor_help.cpp +#, fuzzy +msgid "Public Methods" +msgstr "Vælg alle" + +#: editor/editor_help.cpp msgid "Public Methods:" msgstr "" #: editor/editor_help.cpp +msgid "GUI Theme Items" +msgstr "" + +#: editor/editor_help.cpp msgid "GUI Theme Items:" msgstr "" @@ -1476,6 +1299,11 @@ msgstr "Signaler:" #: editor/editor_help.cpp #, fuzzy +msgid "Enumerations" +msgstr "Funktioner:" + +#: editor/editor_help.cpp +#, fuzzy msgid "Enumerations:" msgstr "Funktioner:" @@ -1484,19 +1312,50 @@ msgid "enum " msgstr "" #: editor/editor_help.cpp +#, fuzzy +msgid "Constants" +msgstr "Konstant" + +#: editor/editor_help.cpp msgid "Constants:" msgstr "" #: editor/editor_help.cpp #, fuzzy +msgid "Description" +msgstr "Opret abonnement" + +#: editor/editor_help.cpp +msgid "Properties" +msgstr "" + +#: editor/editor_help.cpp +#, fuzzy msgid "Property Description:" msgstr "Opret abonnement" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this property. Please help us by " +"[color=$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp +#, fuzzy +msgid "Methods" +msgstr "Metode liste:" + +#: editor/editor_help.cpp msgid "Method Description:" msgstr "" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this method. Please help us by [color=" +"$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp msgid "Search Text" msgstr "" @@ -1505,24 +1364,21 @@ msgid "Output:" msgstr "" #: editor/editor_log.cpp editor/plugins/animation_tree_editor_plugin.cpp -#: editor/plugins/rich_text_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_editor_debugger.cpp scene/gui/line_edit.cpp -#: scene/gui/text_edit.cpp +#: editor/property_editor.cpp editor/script_editor_debugger.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Clear" msgstr "Clear" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Error saving resource!" msgstr "" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Save Resource As.." msgstr "" -#: editor/editor_node.cpp editor/export_template_manager.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "I see.." msgstr "" @@ -1539,6 +1395,29 @@ msgid "Error while saving." msgstr "" #: editor/editor_node.cpp +#, fuzzy +msgid "Can't open '%s'." +msgstr "Forbind..." + +#: editor/editor_node.cpp +#, fuzzy +msgid "Error while parsing '%s'." +msgstr "Error loading skrifttype." + +#: editor/editor_node.cpp +msgid "Unexpected end of file '%s'." +msgstr "" + +#: editor/editor_node.cpp +msgid "Missing '%s' or its dependencies." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Error while loading '%s'." +msgstr "Error loading skrifttype." + +#: editor/editor_node.cpp msgid "Saving Scene" msgstr "" @@ -1596,6 +1475,33 @@ msgid "Restored default layout to base settings." msgstr "" #: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was imported, so it's not editable.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was instanced or inherited.\n" +"Changes to it will not be kept when saving the current scene." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource was imported, so it's not editable. Change its settings in the " +"import panel and then re-import." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This scene was imported, so changes to it will not be kept.\n" +"Instancing it or inheriting will allow making changes to it.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp msgid "Copy Params" msgstr "" @@ -1759,6 +1665,12 @@ msgid "Save changes the following scene(s) before opening Project Manager?" msgstr "" #: editor/editor_node.cpp +msgid "" +"This option is deprecated. Situations where refresh must be forced are now " +"considered a bug. Please report." +msgstr "" + +#: editor/editor_node.cpp msgid "Pick a Main Scene" msgstr "" @@ -1785,7 +1697,7 @@ msgid "" msgstr "" #: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Ugh" msgstr "" @@ -1796,11 +1708,11 @@ msgid "" msgstr "" #: editor/editor_node.cpp -msgid "Error loading scene." +msgid "Scene '%s' has broken dependencies:" msgstr "" #: editor/editor_node.cpp -msgid "Scene '%s' has broken dependencies:" +msgid "Clear Recent Scenes" msgstr "" #: editor/editor_node.cpp @@ -1836,7 +1748,7 @@ msgstr "" msgid "Toggle distraction-free mode." msgstr "" -#: editor/editor_node.cpp editor/io_plugins/editor_scene_import_plugin.cpp +#: editor/editor_node.cpp msgid "Scene" msgstr "" @@ -2056,6 +1968,10 @@ msgstr "" msgid "Issue Tracker" msgstr "" +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +msgid "Community" +msgstr "Fællesskabet" + #: editor/editor_node.cpp msgid "About" msgstr "" @@ -2064,7 +1980,7 @@ msgstr "" msgid "Play the project." msgstr "" -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Play" msgstr "" @@ -2080,7 +1996,7 @@ msgstr "" msgid "Stop the scene." msgstr "" -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Stop" msgstr "" @@ -2153,6 +2069,15 @@ msgid "Object properties." msgstr "" #: editor/editor_node.cpp +msgid "Changes may be lost!" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Import" +msgstr "" + +#: editor/editor_node.cpp msgid "FileSystem" msgstr "" @@ -2168,14 +2093,6 @@ msgstr "" msgid "Don't Save" msgstr "" -#: editor/editor_node.cpp editor/editor_reimport_dialog.cpp -msgid "Re-Import" -msgstr "" - -#: editor/editor_node.cpp editor/editor_plugin_settings.cpp -msgid "Update" -msgstr "" - #: editor/editor_node.cpp msgid "Import Templates From ZIP File" msgstr "" @@ -2240,11 +2157,28 @@ msgstr "Afhængigheds Editor" msgid "Open the previous Editor" msgstr "" +#: editor/editor_plugin.cpp +msgid "Creating Mesh Previews" +msgstr "" + +#: editor/editor_plugin.cpp +msgid "Thumbnail.." +msgstr "" + #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" msgstr "" #: editor/editor_plugin_settings.cpp +msgid "Update" +msgstr "" + +#: editor/editor_plugin_settings.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Version:" +msgstr "" + +#: editor/editor_plugin_settings.cpp msgid "Author:" msgstr "" @@ -2296,26 +2230,6 @@ msgstr "" msgid "Frame #:" msgstr "" -#: editor/editor_reimport_dialog.cpp -msgid "Please wait for scan to complete." -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Current scene must be saved to re-import." -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Save & Re-Import" -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Importing" -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Import Changed Resources" -msgstr "" - #: editor/editor_run_native.cpp msgid "Select device from the list" msgstr "" @@ -2425,10 +2339,6 @@ msgid "Importing:" msgstr "" #: editor/export_template_manager.cpp -msgid "Loading Export Templates" -msgstr "" - -#: editor/export_template_manager.cpp msgid "Current Version:" msgstr "" @@ -2463,9 +2373,17 @@ msgid "Cannot navigate to '" msgstr "" #: editor/filesystem_dock.cpp +msgid "View items as a grid of thumbnails" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "View items as a list" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "" "\n" -"Status: Needs Re-Import" +"Status: Import of file failed. Please fix file and reimport manually." msgstr "" #: editor/filesystem_dock.cpp @@ -2476,89 +2394,90 @@ msgid "" msgstr "Ressource" #: editor/filesystem_dock.cpp -msgid "Same source and destination files, doing nothing." +msgid "Cannot move/rename resources root." msgstr "" #: editor/filesystem_dock.cpp -msgid "Target file exists, can't overwrite. Delete first." +msgid "Cannot move a folder into itself.\n" msgstr "" #: editor/filesystem_dock.cpp -msgid "Same source and destination paths, doing nothing." -msgstr "" +#, fuzzy +msgid "Error moving:\n" +msgstr "Error loading skrifttype." #: editor/filesystem_dock.cpp -msgid "Can't move directories to within themselves." +msgid "Unable to update dependencies:\n" msgstr "" #: editor/filesystem_dock.cpp -msgid "Can't rename deps for:\n" +msgid "No name provided" msgstr "" #: editor/filesystem_dock.cpp -#, fuzzy -msgid "Error moving file:\n" -msgstr "Error loading skrifttype." +msgid "Provided name contains invalid characters" +msgstr "" #: editor/filesystem_dock.cpp -#, fuzzy -msgid "Error moving dir:\n" -msgstr "Error loading skrifttype." +msgid "No name provided." +msgstr "" #: editor/filesystem_dock.cpp -msgid "Can't operate on '..'" +msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp -msgid "Pick New Name and Location For:" +msgid "A file or folder with this name already exists." msgstr "" #: editor/filesystem_dock.cpp -msgid "No files selected!" -msgstr "" +#, fuzzy +msgid "Renaming file:" +msgstr "Omdøbe variablen" #: editor/filesystem_dock.cpp -msgid "Expand all" +msgid "Renaming folder:" msgstr "" #: editor/filesystem_dock.cpp -msgid "Collapse all" +msgid "Expand all" msgstr "" #: editor/filesystem_dock.cpp -msgid "Show In File Manager" +msgid "Collapse all" msgstr "" #: editor/filesystem_dock.cpp -msgid "Instance" +msgid "Copy Path" msgstr "" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." +msgid "Rename.." msgstr "" #: editor/filesystem_dock.cpp -msgid "View Owners.." +msgid "Move To.." msgstr "" #: editor/filesystem_dock.cpp -msgid "Copy Path" -msgstr "" +#, fuzzy +msgid "New Folder.." +msgstr "Opret mappe" #: editor/filesystem_dock.cpp -msgid "Rename or Move.." +msgid "Show In File Manager" msgstr "" #: editor/filesystem_dock.cpp -msgid "Move To.." +msgid "Instance" msgstr "" #: editor/filesystem_dock.cpp -msgid "Info" +msgid "Edit Dependencies.." msgstr "" #: editor/filesystem_dock.cpp -msgid "Re-Import.." +msgid "View Owners.." msgstr "" #: editor/filesystem_dock.cpp @@ -2591,6 +2510,11 @@ msgstr "" msgid "Move" msgstr "" +#: editor/filesystem_dock.cpp editor/plugins/animation_tree_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Rename" +msgstr "" + #: editor/groups_editor.cpp msgid "Add to Group" msgstr "" @@ -2604,6 +2528,10 @@ msgid "Import as Single Scene" msgstr "" #: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials" msgstr "" @@ -2616,6 +2544,18 @@ msgid "Import with Separate Objects+Materials" msgstr "" #: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Materials+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Materials+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes" msgstr "" @@ -2624,38 +2564,31 @@ msgid "Import as Multiple Scenes+Materials" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Import Scene" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Importing Scene.." msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Running Custom Script.." msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Couldn't load post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Invalid/broken script for post-import (check console):" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Error running post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Saving.." msgstr "" @@ -2684,579 +2617,54 @@ msgstr "" msgid "Reimport" msgstr "" -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "No bit masks to import!" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path is empty." -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must be a complete resource path." -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must exist." -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Save path is empty!" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Import BitMasks" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s):" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Target Path:" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Accept" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Bit Mask" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No source font file!" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No target font resource!" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "" -"Invalid file extension.\n" -"Please use .font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Can't load/process source font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Couldn't save font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font Size:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Dest Resource:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "The quick brown fox jumps over the lazy dog." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Test:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Options:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Font Import" -msgstr "" - -#: 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 "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Failed opening as BMFont file." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error initializing FreeType." -msgstr "Fejl under initialisering af FreeType." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Unknown font format." -msgstr "Ukendt skrifttypeformat." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error loading font." -msgstr "Error loading skrifttype." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Invalid font size." -msgstr "Ugyldig skriftstørrelse." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Invalid font custom source." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/plugins/theme_editor_plugin.cpp -msgid "Font" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "No meshes to import!" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Single Mesh Import" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Source Mesh(es):" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Mesh" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Surface %d" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "No samples to import!" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Import Audio Samples" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Source Sample(s):" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Audio Sample" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "New Clip" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Animation Options" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Flags" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Bake FPS:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Optimizer" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Linear Error" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angular Error" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angle" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Clips" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Start(s)" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "End(s)" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Loop" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Filters" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source path is empty." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't load post-import script." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Invalid/broken script for post-import." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Error importing scene." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import 3D Scene" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source Scene:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Same as Target Scene" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Shared" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Target Texture Folder:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Post-Process Script:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Custom Root Node Type:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Auto" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Root Node Name:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "The Following Files are Missing:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Anyway" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp scene/gui/dialogs.cpp -msgid "Cancel" -msgstr "Annuller" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import & Open" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Edited scene has not been saved, open imported scene anyway?" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Image:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Can't import a file over itself:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't localize path: %s (already local)" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "3D Scene Animation" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Uncompressed" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossless (PNG)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossy (WebP)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress (VRAM)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Format" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Compression Quality (WebP):" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Options" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Please specify some files!" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "At least one file needed for Atlas." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Error importing:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Only one file is required for large texture." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Max Texture Size:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for Atlas (2D)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cell Size:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Large Texture" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Textures (2D)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture" +#: editor/multi_node_edit.cpp +msgid "MultiNode Set" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Base Atlas Texture" +#: editor/node_dock.cpp +msgid "Groups" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s)" +#: editor/node_dock.cpp +msgid "Select a Node to edit Signals and Groups." msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 2D" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create Poly" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 3D" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures" +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Insert Point" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "2D Texture" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly (Remove Point)" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "3D Texture" +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Remove Poly And Point" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Atlas Texture" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create a new polygon from scratch." msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp +#: editor/plugins/abstract_polygon_2d_editor.cpp msgid "" -"NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files to " -"the project." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Crop empty space." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Texture" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Load Source Image" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Slicing" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Inserting" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Saving" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save large texture:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Build Atlas For:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Loading Image:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't load image:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Converting Images" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cropping Images" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Blitting Images" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save atlas image:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save converted texture:" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid source!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid translation source!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Column" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/script_create_dialog.cpp -msgid "Language" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No items to import!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No target path!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translations" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Couldn't import!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translation" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Source CSV:" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Ignore First Row" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Compress" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Add to Project (project.godot)" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Languages:" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Translation" -msgstr "" - -#: editor/multi_node_edit.cpp -msgid "MultiNode Set" -msgstr "" - -#: editor/node_dock.cpp -msgid "Groups" -msgstr "" - -#: editor/node_dock.cpp -msgid "Select a Node to edit Signals and Groups." +"Edit existing polygon:\n" +"LMB: Move Point.\n" +"Ctrl+LMB: Split Segment.\n" +"RMB: Erase Point." msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp @@ -3413,7 +2821,6 @@ msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp #: editor/script_create_dialog.cpp msgid "Error!" @@ -3524,10 +2931,6 @@ msgid "Delete Input" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Rename" -msgstr "" - -#: editor/plugins/animation_tree_editor_plugin.cpp msgid "Animation tree is valid." msgstr "" @@ -3583,64 +2986,188 @@ msgstr "" msgid "Filters.." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing %d Triangles:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Free" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Triangle #" +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Contents:" +msgstr "Kontinuerlig" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "View Files" +msgstr "Fil:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve hostname:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Light Baker Setup:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing Geometry" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connection error, please try again." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Fixing Lights" +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Can't connect." +msgstr "Forbind..." + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Can't connect to host:" +msgstr "Opret forbindelse til Node:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response from host:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Making BVH" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, return code:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Light Octree" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Req. Failed." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Octree Texture" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, too many redirects" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Transfer to Lightmaps:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Redirect Loop." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Allocating Texture #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Baking Triangle #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Bad download hash, assuming file has been tampered with." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Post-Processing Texture #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Expected:" msgstr "" -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Bake!" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Got:" msgstr "" -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Reset the lightmap octree baking process (start over)." +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed sha256 hash check" msgstr "" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Asset Download Error:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Fetching:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Resolving.." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Connecting.." +msgstr "Forbind..." + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Requesting.." +msgstr "Tester" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Error making request" +msgstr "Error loading skrifttype." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Idle" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Retry" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download Error" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download for this asset is already in progress!" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "first" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "prev" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "next" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "last" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "All" +msgstr "Alle" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Plugins" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Sort:" +msgstr "Sorter:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Reverse" +msgstr "Omvendt" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Category:" +msgstr "Kategori:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Site:" +msgstr "Websted:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Support.." +msgstr "Støtte..." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Official" +msgstr "Officiel" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Testing" +msgstr "Tester" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Assets ZIP File" +msgstr "Assets zipfil" + #: editor/plugins/camera_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp msgid "Preview" msgstr "" @@ -3683,11 +3210,15 @@ msgid "Edit CanvasItem" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Change Anchors" +msgid "Anchors only" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom (%):" +msgid "Change Anchors and Margins" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Change Anchors" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3738,59 +3269,73 @@ msgid "Pan Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Lock the selected object in place (can't be moved)." +#, fuzzy +msgid "Toggles snapping" +msgstr "Skift/Toggle Breakpoint" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Unlock the selected object (can be moved)." +msgid "Snapping options" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Makes sure the object's children are not selectable." +msgid "Snap to grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Restores the object's children's ability to be selected." +msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp -#: editor/project_settings_editor.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Edit" -msgstr "Rediger" +msgid "Configure Snap..." +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +msgid "Snap Relative" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +msgid "Use Pixel Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Rotation Snap" +msgid "Smart snapping" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap Relative" +msgid "Snap to parent" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." +msgid "Snap to node anchor" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Pixel Snap" +msgid "Snap to node sides" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to other nodes" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Lock the selected object in place (can't be moved)." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Skeleton.." +msgid "Unlock the selected object (can be moved)." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Makes sure the object's children are not selectable." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Restores the object's children's ability to be selected." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3819,11 +3364,16 @@ msgid "View" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Reset" +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show helpers" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Set.." +msgid "Show rulers" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3835,7 +3385,7 @@ msgid "Frame Selection" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Anchor" +msgid "Layout" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3859,11 +3409,20 @@ msgid "Clear Pose" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Set a Value" +msgid "Drag pivot from mouse position" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap (Pixels):" +#, fuzzy +msgid "Set pivot at mouse position" +msgstr "Fjern Signal" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Multiply grid step by 2" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Divide grid step by 2" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3874,23 +3433,28 @@ msgstr "" msgid "Adding %s..." msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Create Node" msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Error instancing scene from %s" msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "OK :(" msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "No parent to instance a child at." msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "This operation requires a single selected node." msgstr "" @@ -3905,45 +3469,6 @@ msgid "" "Drag & drop + Alt : Change node type" msgstr "" -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Create Poly" -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly" -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly (Remove Point)" -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Create a new polygon from scratch." -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -msgid "" -"Edit existing polygon:\n" -"LMB: Move Point.\n" -"Ctrl+LMB: Split Segment.\n" -"RMB: Erase Point." -msgstr "" - #: editor/plugins/collision_polygon_editor_plugin.cpp msgid "Create Poly3D" msgstr "" @@ -3953,14 +3478,6 @@ msgid "Set Handle" msgstr "" #: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Creating Mesh Library" -msgstr "" - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Thumbnail.." -msgstr "" - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Remove item %d?" msgstr "" @@ -3983,6 +3500,27 @@ msgid "Update from Scene" msgstr "" #: editor/plugins/curve_editor_plugin.cpp +msgid "Flat0" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Flat1" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +#, fuzzy +msgid "Ease in" +msgstr "Skalering Valg" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Ease out" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Smoothstep" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp msgid "Modify Curve Point" msgstr "" @@ -4062,22 +3600,18 @@ msgid "Create Occluder Polygon" msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Edit existing polygon:" msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "LMB: Move Point." msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Ctrl+LMB: Split Segment." msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "RMB: Erase Point." msgstr "" @@ -4179,6 +3713,10 @@ msgid "Create Outline" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Body" msgstr "" @@ -4306,12 +3844,72 @@ msgstr "" msgid "Populate" msgstr "" -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Create Navigation Polygon" +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Bake!" +msgstr "" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Bake the navigation mesh.\n" +msgstr "" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Clear the navigation mesh." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Setting up Configuration..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Calculating grid size..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating heightfield..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Marking walkable triangles..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Constructing compact heightfield..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Eroding walkable area..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Partioning..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating contours..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating polymesh..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Converting to native navigation mesh..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Navigation Mesh Generator Setup:" +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Parsing Geometry..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Done!" msgstr "" #: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Remove Poly And Point" +msgid "Create Navigation Polygon" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4485,16 +4083,19 @@ msgid "Curve Point #" msgstr "" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Point Pos" -msgstr "" +#, fuzzy +msgid "Set Curve Point Position" +msgstr "Fjern Signal" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve In Pos" -msgstr "" +#, fuzzy +msgid "Set Curve In Position" +msgstr "Fjern Signal" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Out Pos" -msgstr "" +#, fuzzy +msgid "Set Curve Out Position" +msgstr "Fjern Signal" #: editor/plugins/path_editor_plugin.cpp msgid "Split Path" @@ -4554,6 +4155,14 @@ msgid "Scale Polygon" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit" +msgstr "Rediger" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon->UV" msgstr "" @@ -4608,63 +4217,10 @@ msgstr "" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "Indsæt" -#: editor/plugins/rich_text_editor_plugin.cpp -msgid "Parse BBCode" -msgstr "" - -#: editor/plugins/sample_editor_plugin.cpp -msgid "Length:" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Open Sample File(s)" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "ERROR: Couldn't load sample!" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Add Sample" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Rename Sample" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Delete Sample" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "16 Bits" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "8 Bits" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Stereo" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Mono" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/script_editor_debugger.cpp -msgid "Format" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Pitch" -msgstr "" - #: editor/plugins/script_editor_plugin.cpp msgid "Clear Recent Files" msgstr "" @@ -4756,6 +4312,10 @@ msgstr "" msgid "Close All" msgstr "Luk" +#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp +msgid "Run" +msgstr "" + #: editor/plugins/script_editor_plugin.cpp msgid "Toggle Scripts Panel" msgstr "" @@ -4798,18 +4358,6 @@ msgid "Debug with external editor" msgstr "Afhængigheds Editor" #: editor/plugins/script_editor_plugin.cpp -msgid "Window" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Left" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Right" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp msgid "Open Godot online documentation" msgstr "" @@ -4893,7 +4441,7 @@ msgstr "Cut" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Copy" msgstr "Kopier" @@ -5158,10 +4706,6 @@ msgid "View Plane Transform." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Scaling to %s%%." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." msgstr "" @@ -5178,10 +4722,6 @@ msgid "Top View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Top" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "" @@ -5414,6 +4954,10 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Configure Snap.." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Local Coords" msgstr "" @@ -5559,6 +5103,10 @@ msgid "Speed (FPS):" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Loop" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animation Frames" msgstr "" @@ -5571,11 +5119,12 @@ msgid "Insert Empty (After)" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Up" -msgstr "" +#, fuzzy +msgid "Move (Before)" +msgstr "Sti til Node:" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Down" +msgid "Move (After)" msgstr "" #: editor/plugins/style_box_editor_plugin.cpp @@ -5739,6 +5288,10 @@ msgid "Style" msgstr "" #: editor/plugins/theme_editor_plugin.cpp +msgid "Font" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp msgid "Color" msgstr "" @@ -5789,7 +5342,7 @@ msgid "Mirror Y" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Bucket" +msgid "Paint Tile" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp @@ -5853,6 +5406,10 @@ msgid "Delete preset '%s'?" msgstr "" #: editor/project_export.cpp +msgid "Export templates for this platform are missing/corrupted: " +msgstr "" + +#: editor/project_export.cpp msgid "Presets" msgstr "" @@ -5925,19 +5482,29 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +msgid "Export templates for this platform are missing/corrupted:" +msgstr "" + +#: editor/project_export.cpp msgid "Export With Debug" msgstr "" #: editor/project_manager.cpp -msgid "Invalid project path, the path must exist!" +msgid "The path does not exists." msgstr "" #: editor/project_manager.cpp -msgid "Invalid project path, project.godot must not exist." +msgid "Please choose a 'project.godot' file." msgstr "" #: editor/project_manager.cpp -msgid "Invalid project path, project.godot must exist." +msgid "" +"Your project will be created in a non empty folder (you might want to create " +"a new folder)." +msgstr "" + +#: editor/project_manager.cpp +msgid "Please choose a folder that does not contain a 'project.godot' file." msgstr "" #: editor/project_manager.cpp @@ -5945,10 +5512,26 @@ msgid "Imported Project" msgstr "" #: editor/project_manager.cpp +msgid " " +msgstr "" + +#: editor/project_manager.cpp +msgid "It would be a good idea to name your project." +msgstr "" + +#: editor/project_manager.cpp msgid "Invalid project path (changed anything?)." msgstr "" #: editor/project_manager.cpp +msgid "Couldn't get project.godot in project path." +msgstr "" + +#: editor/project_manager.cpp +msgid "Couldn't edit project.godot in project path." +msgstr "" + +#: editor/project_manager.cpp msgid "Couldn't create project.godot in project path." msgstr "" @@ -5957,15 +5540,20 @@ msgid "The following files failed extraction from package:" msgstr "" #: editor/project_manager.cpp -msgid "Import Existing Project" +#, fuzzy +msgid "Rename Project" +msgstr "Omdøb Funktion" + +#: editor/project_manager.cpp +msgid "Couldn't get project.godot in the project path." msgstr "" #: editor/project_manager.cpp -msgid "Project Path (Must Exist):" +msgid "New Game Project" msgstr "" #: editor/project_manager.cpp -msgid "Project Name:" +msgid "Import Existing Project" msgstr "" #: editor/project_manager.cpp @@ -5973,19 +5561,24 @@ msgid "Create New Project" msgstr "" #: editor/project_manager.cpp -msgid "Project Path:" +msgid "Install Project:" msgstr "" #: editor/project_manager.cpp -msgid "Install Project:" +msgid "Project Name:" msgstr "" #: editor/project_manager.cpp -msgid "Browse" +#, fuzzy +msgid "Create folder" +msgstr "Opret mappe" + +#: editor/project_manager.cpp +msgid "Project Path:" msgstr "" #: editor/project_manager.cpp -msgid "New Game Project" +msgid "Browse" msgstr "" #: editor/project_manager.cpp @@ -5997,6 +5590,11 @@ msgid "Unnamed Project" msgstr "" #: editor/project_manager.cpp +#, fuzzy +msgid "Can't open project" +msgstr "Forbind..." + +#: editor/project_manager.cpp msgid "Are you sure to open more than one project?" msgstr "" @@ -6032,10 +5630,6 @@ msgid "Project List" msgstr "" #: editor/project_manager.cpp -msgid "Run" -msgstr "" - -#: editor/project_manager.cpp msgid "Scan" msgstr "" @@ -6094,17 +5688,14 @@ msgid "Add Input Action Event" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Meta+" msgstr "Meta +" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Shift+" msgstr "Shift+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Alt+" msgstr "Alt +" @@ -6165,7 +5756,7 @@ msgstr "Skift" msgid "Joypad Axis Index:" msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Axis" msgstr "Akse" @@ -6185,31 +5776,31 @@ msgstr "" msgid "Add Event" msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Device" msgstr "Enhed" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Button" msgstr "Knap" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Left Button." msgstr "Venstre knap." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Right Button." msgstr "Højre knap." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Middle Button." msgstr "Midterste knap." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Up." msgstr "Hjulet op." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Down." msgstr "Hjulet ned." @@ -6219,7 +5810,7 @@ msgid "Add Global Property" msgstr "Tilføj Getter Egenskab" #: editor/project_settings_editor.cpp -msgid "Select an setting item first!" +msgid "Select a setting item first!" msgstr "" #: editor/project_settings_editor.cpp @@ -6237,6 +5828,15 @@ msgid "Delete Item" msgstr "Slet Valgte" #: editor/project_settings_editor.cpp +#, fuzzy +msgid "Can't contain '/' or ':'" +msgstr "Opret forbindelse til Node:" + +#: editor/project_settings_editor.cpp +msgid "Already existing" +msgstr "" + +#: editor/project_settings_editor.cpp msgid "Error saving settings." msgstr "" @@ -6386,10 +5986,19 @@ msgid "New Script" msgstr "" #: editor/property_editor.cpp +msgid "Make Unique" +msgstr "" + +#: editor/property_editor.cpp msgid "Show in File System" msgstr "" #: editor/property_editor.cpp +#, fuzzy +msgid "Convert To %s" +msgstr "Opret forbindelse til Node:" + +#: editor/property_editor.cpp msgid "Error loading file: Not a resource!" msgstr "" @@ -6429,6 +6038,11 @@ msgstr "Tilføj Setter Egenskab" #: editor/property_selector.cpp #, fuzzy +msgid "Select Virtual Method" +msgstr "Vælg alle" + +#: editor/property_selector.cpp +#, fuzzy msgid "Select Method" msgstr "Vælg alle" @@ -6456,26 +6070,6 @@ msgstr "" msgid "Reparent" msgstr "" -#: editor/resources_dock.cpp -msgid "Create New Resource" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Open Resource" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Save Resource" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Resource Tools" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Make Local" -msgstr "" - #: editor/run_settings_dialog.cpp msgid "Run Mode:" msgstr "" @@ -6603,14 +6197,6 @@ msgid "Sub-Resources:" msgstr "Ressource" #: editor/scene_tree_dock.cpp -msgid "Edit Groups" -msgstr "" - -#: editor/scene_tree_dock.cpp -msgid "Edit Connections" -msgstr "" - -#: editor/scene_tree_dock.cpp msgid "Clear Inheritance" msgstr "" @@ -6797,6 +6383,15 @@ msgid "Invalid base path" msgstr "" #: editor/script_create_dialog.cpp +msgid "Directory of the same name exists" +msgstr "" + +#: editor/script_create_dialog.cpp +#, fuzzy +msgid "File exists, will be reused" +msgstr "Filen findes, overskrives?" + +#: editor/script_create_dialog.cpp msgid "Invalid extension" msgstr "" @@ -6840,6 +6435,10 @@ msgid "Load existing script file" msgstr "" #: editor/script_create_dialog.cpp +msgid "Language" +msgstr "" + +#: editor/script_create_dialog.cpp msgid "Inherits" msgstr "" @@ -6881,6 +6480,10 @@ msgid "Function:" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Errors" msgstr "" @@ -6961,6 +6564,10 @@ msgid "Type" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Format" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Usage" msgstr "" @@ -7036,12 +6643,28 @@ msgstr "" msgid "Change Probe Extents" msgstr "" +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Library" +msgstr "" + +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Status" +msgstr "" + +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Libraries: " +msgstr "" + +#: modules/gdnative/register_types.cpp +msgid "GDNative" +msgstr "" + #: 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/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h #: 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." @@ -7093,10 +6716,6 @@ msgid "GridMap Duplicate Selection" msgstr "Dubler valg" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Paint" -msgstr "" - -#: modules/gridmap/grid_map_editor_plugin.cpp msgid "Snap View" msgstr "" @@ -7192,13 +6811,8 @@ msgstr "" msgid "Pick Distance:" msgstr "" -#: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy -msgid "Tiles" -msgstr "Fil:" - -#: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Areas" +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "Builds" msgstr "" #: modules/visual_script/visual_script.cpp @@ -7407,10 +7021,18 @@ msgid "Return" msgstr "Tilbage:" #: modules/visual_script/visual_script_editor.cpp +msgid "Call" +msgstr "Kald" + +#: modules/visual_script/visual_script_editor.cpp msgid "Get" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Script already has function '%s'" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Change Input Value" msgstr "Ændre Array-værdi" @@ -7821,6 +7443,12 @@ msgstr "" "En SpriteFrames ressource skal oprettes eller angivets i egenskaben 'Frames' " "for at AnimatedSprite3D kan vise frames." +#: scene/3d/vehicle_body.cpp +msgid "" +"VehicleWheel serves to provide a wheel system to a VehicleBody. Please use " +"it as a child of a VehicleBody." +msgstr "" + #: scene/gui/color_picker.cpp msgid "Raw Mode" msgstr "" @@ -7830,6 +7458,10 @@ msgid "Add current color as a preset" msgstr "" #: scene/gui/dialogs.cpp +msgid "Cancel" +msgstr "Annuller" + +#: scene/gui/dialogs.cpp msgid "Alert!" msgstr "Advarsel!" @@ -7837,10 +7469,6 @@ msgstr "Advarsel!" msgid "Please Confirm..." msgstr "Bekræft venligst..." -#: scene/gui/input_action.cpp -msgid "Ctrl+" -msgstr "CTRL +" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -7876,6 +7504,42 @@ msgstr "" "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 +msgid "Error initializing FreeType." +msgstr "Fejl under initialisering af FreeType." + +#: scene/resources/dynamic_font.cpp +msgid "Unknown font format." +msgstr "Ukendt skrifttypeformat." + +#: scene/resources/dynamic_font.cpp +msgid "Error loading font." +msgstr "Error loading skrifttype." + +#: scene/resources/dynamic_font.cpp +msgid "Invalid font size." +msgstr "Ugyldig skriftstørrelse." + +#~ msgid "Method List For '%s':" +#~ msgstr "Metode liste For '%s':" + +#~ msgid "Arguments:" +#~ msgstr "Argumenter:" + +#~ msgid "Return:" +#~ msgstr "Tilbage:" + +#, fuzzy +#~ msgid "Error moving file:\n" +#~ msgstr "Error loading skrifttype." + +#, fuzzy +#~ msgid "Tiles" +#~ msgstr "Fil:" + +#~ msgid "Ctrl+" +#~ msgstr "CTRL +" + #, fuzzy #~ msgid "Invalid unique name." #~ msgstr "Ugyldigt index egenskabsnavn." diff --git a/editor/translations/de.po b/editor/translations/de.po index 837df7d62b..db3f62b61b 100644 --- a/editor/translations/de.po +++ b/editor/translations/de.po @@ -24,8 +24,8 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2017-06-28 09:12+0000\n" -"Last-Translator: So Wieso <sowieso@dukun.de>\n" +"PO-Revision-Date: 2017-10-07 04:45+0000\n" +"Last-Translator: anonymous <>\n" "Language-Team: German <https://hosted.weblate.org/projects/godot-engine/" "godot/de/>\n" "Language: de\n" @@ -33,7 +33,7 @@ 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.15-dev\n" +"X-Generator: Weblate 2.17-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -209,10 +209,9 @@ msgid "Create %d NEW tracks and insert keys?" msgstr "Erstelle %d NEUE Spuren und füge Schlüsselbilder hinzu?" #: editor/animation_editor.cpp editor/create_dialog.cpp -#: editor/editor_audio_buses.cpp +#: editor/editor_audio_buses.cpp editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp #: editor/plugins/mesh_instance_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp editor/project_manager.cpp #: editor/script_create_dialog.cpp msgid "Create" @@ -375,262 +374,6 @@ msgstr "Wertetyp des Arrays ändern" msgid "Change Array Value" msgstr "Array-Wert ändern" -#: editor/asset_library_editor_plugin.cpp -msgid "Free" -msgstr "Frei" - -#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp -msgid "Version:" -msgstr "Version:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Contents:" -msgstr "Inhalt:" - -#: editor/asset_library_editor_plugin.cpp -msgid "View Files" -msgstr "Dateien anzeigen" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_help.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp -msgid "Description:" -msgstr "Beschreibung:" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -#: editor/project_manager.cpp -msgid "Install" -msgstr "Installieren" - -#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp -#: editor/connections_dialog.cpp editor/export_template_manager.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -#: editor/project_settings_editor.cpp editor/property_editor.cpp -#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Close" -msgstr "Schließen" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve hostname:" -msgstr "Kann Hostnamen nicht auflösen:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve." -msgstr "Kann nicht auflösen." - -#: editor/asset_library_editor_plugin.cpp -msgid "Connection error, please try again." -msgstr "Verbindungsfehler, bitte erneut versuchen." - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't connect." -msgstr "Kann nicht verbinden." - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't connect to host:" -msgstr "Kann nicht zu Host verbinden:" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response from host:" -msgstr "Keine Antwort von Host:" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response." -msgstr "Keine Antwort." - -#: editor/asset_library_editor_plugin.cpp -msgid "Request failed, return code:" -msgstr "Anfrage fehlgeschlagen: Rückgabewert:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Req. Failed." -msgstr "Anfrage fehlgeschlagen." - -#: editor/asset_library_editor_plugin.cpp -msgid "Request failed, too many redirects" -msgstr "Anfrage fehlgeschlagen, zu viele Weiterleitungen" - -#: editor/asset_library_editor_plugin.cpp -msgid "Redirect Loop." -msgstr "Weiterleitungsschleife." - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed:" -msgstr "Fehlgeschlagen:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Bad download hash, assuming file has been tampered with." -msgstr "Falsche Download-Prüfsumme, Datei könnte manipuliert worden sein." - -#: editor/asset_library_editor_plugin.cpp -msgid "Expected:" -msgstr "Erwartet:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Got:" -msgstr "Erhalten:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed sha256 hash check" -msgstr "Sha256-Prüfung fehlgeschlagen" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Asset Download Error:" -msgstr "Asset-Download-Fehler:" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -msgid "Success!" -msgstr "Erfolgreich!" - -#: editor/asset_library_editor_plugin.cpp -msgid "Fetching:" -msgstr "Hole:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Resolving.." -msgstr "Löse auf.." - -#: editor/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "Verbinde.." - -#: editor/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "Frage an.." - -#: editor/asset_library_editor_plugin.cpp -msgid "Error making request" -msgstr "Fehler bei Anfrage" - -#: editor/asset_library_editor_plugin.cpp -msgid "Idle" -msgstr "Leerlauf" - -#: editor/asset_library_editor_plugin.cpp -msgid "Retry" -msgstr "Erneut versuchen" - -#: editor/asset_library_editor_plugin.cpp -msgid "Download Error" -msgstr "Übertragungsfehler" - -#: editor/asset_library_editor_plugin.cpp -msgid "Download for this asset is already in progress!" -msgstr "Dieser Posten wird bereits herunter geladen!" - -#: editor/asset_library_editor_plugin.cpp -msgid "first" -msgstr "Anfang" - -#: editor/asset_library_editor_plugin.cpp -msgid "prev" -msgstr "zurück" - -#: editor/asset_library_editor_plugin.cpp -msgid "next" -msgstr "vor" - -#: editor/asset_library_editor_plugin.cpp -msgid "last" -msgstr "Ende" - -#: editor/asset_library_editor_plugin.cpp -msgid "All" -msgstr "Alle" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/property_selector.cpp editor/quick_open.cpp -#: editor/settings_config_dialog.cpp -msgid "Search:" -msgstr "Suche:" - -#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Search" -msgstr "Suche" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/project_manager.cpp -msgid "Import" -msgstr "Import" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Plugins" -msgstr "Erweiterungen" - -#: editor/asset_library_editor_plugin.cpp -msgid "Sort:" -msgstr "Sortiere:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Reverse" -msgstr "Umkehren" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Category:" -msgstr "Kategorie:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Site:" -msgstr "Seite:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "Unterstützung.." - -#: editor/asset_library_editor_plugin.cpp -msgid "Official" -msgstr "Offiziell" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -msgid "Community" -msgstr "Gemeinschaft" - -#: editor/asset_library_editor_plugin.cpp -msgid "Testing" -msgstr "Testphase" - -#: editor/asset_library_editor_plugin.cpp -msgid "Assets ZIP File" -msgstr "Projektdaten als ZIP-Datei" - -#: editor/call_dialog.cpp -msgid "Method List For '%s':" -msgstr "Methodenliste für '%s':" - -#: editor/call_dialog.cpp modules/visual_script/visual_script_editor.cpp -msgid "Call" -msgstr "Aufruf" - -#: editor/call_dialog.cpp -msgid "Method List:" -msgstr "Methodenliste:" - -#: editor/call_dialog.cpp -msgid "Arguments:" -msgstr "Argumente:" - -#: editor/call_dialog.cpp -msgid "Return:" -msgstr "Rückgabe:" - #: editor/code_editor.cpp msgid "Go to Line" msgstr "Gehe zu Zeile" @@ -644,7 +387,6 @@ msgid "No Matches" msgstr "Keine Übereinstimmungen" #: editor/code_editor.cpp -#, fuzzy msgid "Replaced %d occurrence(s)." msgstr "Suchbegriff wurde %d mal ersetzt." @@ -668,6 +410,14 @@ msgstr "Ganze Wörter" msgid "Selection Only" msgstr "Nur Auswahl" +#: editor/code_editor.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp +msgid "Search" +msgstr "Suche" + #: editor/code_editor.cpp editor/editor_help.cpp msgid "Find" msgstr "Finde" @@ -700,11 +450,11 @@ msgstr "Aufforderung beim Ersetzen" msgid "Skip" msgstr "Überspringen" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom In" msgstr "Vergrößern" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom Out" msgstr "Verkleinern" @@ -773,6 +523,20 @@ msgstr "Verzögert" msgid "Oneshot" msgstr "Einmalig" +#: editor/connections_dialog.cpp editor/dependency_editor.cpp +#: editor/export_template_manager.cpp +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Close" +msgstr "Schließen" + #: editor/connections_dialog.cpp msgid "Connect" msgstr "Verbinden" @@ -798,7 +562,7 @@ msgstr "Verbinde.." msgid "Disconnect" msgstr "Trennen" -#: editor/connections_dialog.cpp editor/node_dock.cpp +#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" msgstr "Signale" @@ -815,12 +579,25 @@ msgstr "Favoriten:" msgid "Recent:" msgstr "Kürzlich:" +#: editor/create_dialog.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp +#: editor/quick_open.cpp editor/settings_config_dialog.cpp +msgid "Search:" +msgstr "Suche:" + #: editor/create_dialog.cpp editor/editor_help.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp #: editor/quick_open.cpp msgid "Matches:" msgstr "Treffer:" +#: editor/create_dialog.cpp editor/editor_help.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp +#: editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "Beschreibung:" + #: editor/dependency_editor.cpp msgid "Search Replacement For:" msgstr "Suche Ersatz für:" @@ -880,6 +657,10 @@ msgid "Owners Of:" msgstr "Besitzer von:" #: editor/dependency_editor.cpp +msgid "Remove selected files from the project? (no undo)" +msgstr "Lösche ausgewählte Dateien aus dem Projekt? (nicht umkehrbar)" + +#: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" @@ -890,8 +671,9 @@ msgstr "" "Trotzdem entfernen? (Nicht Wiederherstellbar)" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (no undo)" -msgstr "Lösche ausgewählte Dateien aus dem Projekt? (nicht umkehrbar)" +#, fuzzy +msgid "Cannot remove:\n" +msgstr "Kann nicht auflösen." #: editor/dependency_editor.cpp msgid "Error loading:" @@ -957,19 +739,12 @@ msgid "Godot Engine contributors" msgstr "Godot-Engine-Mitwirkende" #: editor/editor_about.cpp -#, fuzzy -msgid "Authors" -msgstr "Autor:" - -#: editor/editor_about.cpp -#, fuzzy msgid "Project Founders" -msgstr "Projektverwaltung" +msgstr "Projektgründer" #: editor/editor_about.cpp -#, fuzzy msgid "Lead Developer" -msgstr "Entwickler" +msgstr "Hauptentwickler" #: editor/editor_about.cpp editor/project_manager.cpp msgid "Project Manager" @@ -980,118 +755,157 @@ msgid "Developers" msgstr "Entwickler" #: editor/editor_about.cpp -msgid "License" +msgid "Authors" +msgstr "Autoren" + +#: editor/editor_about.cpp +msgid "Platinum Sponsors" msgstr "" #: editor/editor_about.cpp -msgid "Thirdparty License" +msgid "Gold Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Mini Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Silver Donors" +msgstr "" + +#: editor/editor_about.cpp +#, fuzzy +msgid "Bronze Donors" +msgstr "Klone herunter" + +#: editor/editor_about.cpp +msgid "Donors" msgstr "" #: editor/editor_about.cpp +msgid "License" +msgstr "Lizenz" + +#: editor/editor_about.cpp +msgid "Thirdparty License" +msgstr "Drittpartei-Lizenz" + +#: editor/editor_about.cpp msgid "" "Godot Engine relies on a number of thirdparty free and open source " "libraries, all compatible with the terms of its MIT license. The following " "is an exhaustive list of all such thirdparty components with their " "respective copyright statements and license terms." msgstr "" +"Die Godot-Engine baut auf einer Vielzahl freier und quelloffener projekt-" +"externer Bibliotheken auf, die alle kompatibel mit den Auflagen der MIT-" +"Lizenz sind. Es folgt eine vollständige Liste aller verwendeten externen " +"Bibliotheken mit den jeweiligen zugehörigen Urheberrechtserklärungen und " +"Lizenzbedingungen." #: editor/editor_about.cpp -#, fuzzy msgid "All Components" -msgstr "Inhalt:" +msgstr "Alle Komponenten" #: editor/editor_about.cpp -#, fuzzy msgid "Components" -msgstr "Inhalt:" +msgstr "Komponenten" #: editor/editor_about.cpp msgid "Licenses" -msgstr "" +msgstr "Lizenzen" #: editor/editor_asset_installer.cpp editor/project_manager.cpp msgid "Error opening package file, not in zip format." -msgstr "" +msgstr "Fehler beim Öffnen der Paketdatei, kein Zip-Format." #: editor/editor_asset_installer.cpp -#, fuzzy msgid "Uncompressing Assets" -msgstr "Unkomprimiert" +msgstr "Entpacke Assets" #: editor/editor_asset_installer.cpp editor/project_manager.cpp msgid "Package Installed Successfully!" msgstr "Paket erfolgreich installiert!" #: editor/editor_asset_installer.cpp -#, fuzzy +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Success!" +msgstr "Erfolgreich!" + +#: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp +msgid "Install" +msgstr "Installieren" + +#: editor/editor_asset_installer.cpp msgid "Package Installer" -msgstr "Paket erfolgreich installiert!" +msgstr "Paketinstallierung" #: editor/editor_audio_buses.cpp msgid "Speakers" -msgstr "" +msgstr "Lautsprecher" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Add Effect" -msgstr "Ereignis hinzufügen" +msgstr "Audiobuseffekt hinzufügen" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Rename Audio Bus" -msgstr "Öffne Audiobus-Layout" +msgstr "Audiobus umbenennen" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Toggle Audio Bus Solo" -msgstr "Öffne Audiobus-Layout" +msgstr "Audiobus Solo-Status umschalten" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Toggle Audio Bus Mute" -msgstr "Öffne Audiobus-Layout" +msgstr "Audiobus stumm schalten" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Bypass Effects" -msgstr "" +msgstr "Audiobus-Bypasseffekte umschalten" #: editor/editor_audio_buses.cpp +#, fuzzy msgid "Select Audio Bus Send" -msgstr "" +msgstr "Audiobus Senden auswählen" #: editor/editor_audio_buses.cpp msgid "Add Audio Bus Effect" -msgstr "" +msgstr "Audiobuseffekt hinzufügen" #: editor/editor_audio_buses.cpp msgid "Move Bus Effect" -msgstr "" +msgstr "Audiobuseffekt verschieben" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Delete Bus Effect" -msgstr "Ausgewähltes löschen" +msgstr "Audiobuseffekt löschen" #: editor/editor_audio_buses.cpp msgid "Audio Bus, Drag and Drop to rearrange." -msgstr "" - -#: editor/editor_audio_buses.cpp -#, fuzzy -msgid "Bus options" -msgstr "Unterszenen-Optionen" +msgstr "Audiobus, ziehen um umzusortieren." #: editor/editor_audio_buses.cpp msgid "Solo" -msgstr "" +msgstr "Solo" #: editor/editor_audio_buses.cpp msgid "Mute" -msgstr "" +msgstr "Stumm" #: editor/editor_audio_buses.cpp msgid "Bypass" -msgstr "" +msgstr "Bypass" + +#: editor/editor_audio_buses.cpp +msgid "Bus options" +msgstr "Audiobusoptionen" #: editor/editor_audio_buses.cpp editor/plugins/tile_map_editor_plugin.cpp #: editor/scene_tree_dock.cpp @@ -1100,41 +914,45 @@ msgstr "Duplizieren" #: editor/editor_audio_buses.cpp #, fuzzy +msgid "Reset Volume" +msgstr "Vergrößerung zurücksetzen" + +#: editor/editor_audio_buses.cpp msgid "Delete Effect" -msgstr "Ausgewähltes löschen" +msgstr "Effekt löschen" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Add Audio Bus" msgstr "Audiobus hinzufügen" #: editor/editor_audio_buses.cpp msgid "Master bus can't be deleted!" -msgstr "" +msgstr "Master-Audiobus kann nicht gelöscht werden!" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Delete Audio Bus" -msgstr "Layout löschen" +msgstr "Audiobus löschen" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Duplicate Audio Bus" -msgstr "Animation duplizieren" +msgstr "Audiobus duplizieren" #: editor/editor_audio_buses.cpp #, fuzzy +msgid "Reset Bus Volume" +msgstr "Vergrößerung zurücksetzen" + +#: editor/editor_audio_buses.cpp msgid "Move Audio Bus" -msgstr "Aktion verschieben" +msgstr "Audiobus verschieben" #: editor/editor_audio_buses.cpp msgid "Save Audio Bus Layout As.." -msgstr "Audiobus-Layout speichern als…" +msgstr "Audiobus-Layout speichern als.." #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Location for New Layout.." -msgstr "Ort für neues Layout…" +msgstr "Speicherort für neues Layout.." #: editor/editor_audio_buses.cpp msgid "Open Audio Bus Layout" @@ -1142,32 +960,28 @@ msgstr "Öffne Audiobus-Layout" #: editor/editor_audio_buses.cpp msgid "There is no 'res://default_bus_layout.tres' file." -msgstr "" +msgstr "Datei ‚res://default_bus_layout.tres‘ existiert nicht." #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Invalid file, not an audio bus layout." -msgstr "" -"Ungültige Dateiendung.\n" -"Nutze .font als Dateiendung." +msgstr "Ungültige Datei, kein Audiobus-Layout." #: editor/editor_audio_buses.cpp msgid "Add Bus" msgstr "Audiobus hinzufügen" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Create a new Bus Layout." -msgstr "Erstelle neue Ressource" +msgstr "Neues Audiobus-Layout erstellen." -#: editor/editor_audio_buses.cpp editor/script_create_dialog.cpp +#: editor/editor_audio_buses.cpp editor/property_editor.cpp +#: editor/script_create_dialog.cpp msgid "Load" msgstr "Lade" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Load an existing Bus Layout." -msgstr "Lade eine bestehende Ressource von der Festplatte und bearbeite sie." +msgstr "Lade ein existierendes Bus-Layout." #: editor/editor_audio_buses.cpp #: editor/plugins/animation_player_editor_plugin.cpp @@ -1175,18 +989,16 @@ msgid "Save As" msgstr "Speichern als" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Save this Bus Layout to a file." -msgstr "Audiobus-Layout speichern als…" +msgstr "Bus-Layout in Datei speichern." #: editor/editor_audio_buses.cpp editor/import_dock.cpp -#, fuzzy msgid "Load Default" -msgstr "Standard" +msgstr "Standard laden" #: editor/editor_audio_buses.cpp msgid "Load the default Bus Layout." -msgstr "" +msgstr "Standart Bus Layout laden." #: editor/editor_autoload_settings.cpp msgid "Invalid name." @@ -1259,7 +1071,7 @@ msgid "Rearrange Autoloads" msgstr "Autoloads neu anordnen" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp scene/gui/file_dialog.cpp +#: scene/gui/file_dialog.cpp msgid "Path:" msgstr "Pfad:" @@ -1267,9 +1079,7 @@ msgstr "Pfad:" msgid "Node Name:" msgstr "Node-Name:" -#: editor/editor_autoload_settings.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp editor/project_manager.cpp +#: editor/editor_autoload_settings.cpp editor/project_manager.cpp msgid "Name" msgstr "Name" @@ -1294,27 +1104,27 @@ msgid "Updating scene.." msgstr "Aktualisiere Szene..." #: editor/editor_dir_dialog.cpp -#, fuzzy msgid "Please select a base directory first" -msgstr "Bitte speichere die Szene zuerst." +msgstr "Zuerst ein Wurzelverzeichnis setzen" #: editor/editor_dir_dialog.cpp msgid "Choose a Directory" msgstr "Wähle ein Verzeichnis" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Create Folder" msgstr "Ordner erstellen" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: editor/editor_plugin_settings.cpp editor/plugins/theme_editor_plugin.cpp -#: editor/project_export.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp +#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp +#: scene/gui/file_dialog.cpp msgid "Name:" msgstr "Name:" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Could not create folder." msgstr "Ordner konnte nicht erstellt werden." @@ -1334,30 +1144,6 @@ msgstr "Packe" msgid "Template file not found:\n" msgstr "Template-Datei nicht gefunden:\n" -#: editor/editor_export.cpp -msgid "Added:" -msgstr "Hinzugefügt:" - -#: editor/editor_export.cpp -msgid "Removed:" -msgstr "Entfernt:" - -#: editor/editor_export.cpp -msgid "Error saving atlas:" -msgstr "Fehler beim speichern des Atlas:" - -#: editor/editor_export.cpp -msgid "Could not save atlas subtexture:" -msgstr "Atlas Untertextur konnte nicht gespeichert werden:" - -#: editor/editor_export.cpp -msgid "Exporting for %s" -msgstr "Exportiere für %s" - -#: editor/editor_export.cpp -msgid "Setting Up.." -msgstr "Bereite vor..." - #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "Datei existiert bereits. Überschreiben?" @@ -1442,6 +1228,11 @@ msgstr "Favorit nach oben schieben" msgid "Move Favorite Down" msgstr "Favorit nach unten schieben" +#: editor/editor_file_dialog.cpp +#, fuzzy +msgid "Go to parent folder" +msgstr "Ordner konnte nicht erstellt werden." + #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Directories & Files:" msgstr "Verzeichnisse & Dateien:" @@ -1468,9 +1259,8 @@ msgid "ScanSources" msgstr "Lese Quellen" #: editor/editor_file_system.cpp -#, fuzzy msgid "(Re)Importing Assets" -msgstr "Importiere erneut" +msgstr "Importiere Assets erneut" #: editor/editor_help.cpp editor/editor_node.cpp #: editor/plugins/script_editor_plugin.cpp @@ -1485,6 +1275,10 @@ msgstr "Klassenliste:" msgid "Search Classes" msgstr "Klassen suchen" +#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +msgid "Top" +msgstr "Oben" + #: editor/editor_help.cpp editor/property_editor.cpp msgid "Class:" msgstr "Klasse:" @@ -1501,15 +1295,30 @@ msgstr "Geerbt von:" msgid "Brief Description:" msgstr "Kurze Beschreibung:" +#: editor/editor_help.cpp +#, fuzzy +msgid "Members" +msgstr "Mitglieder:" + #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "Mitglieder:" #: editor/editor_help.cpp +#, fuzzy +msgid "Public Methods" +msgstr "Öffentliche Methoden:" + +#: editor/editor_help.cpp msgid "Public Methods:" msgstr "Öffentliche Methoden:" #: editor/editor_help.cpp +#, fuzzy +msgid "GUI Theme Items" +msgstr "GUI-Theme-Elemente:" + +#: editor/editor_help.cpp msgid "GUI Theme Items:" msgstr "GUI-Theme-Elemente:" @@ -1519,53 +1328,85 @@ msgstr "Signale:" #: editor/editor_help.cpp #, fuzzy +msgid "Enumerations" +msgstr "Enums:" + +#: editor/editor_help.cpp msgid "Enumerations:" -msgstr "Animationen" +msgstr "Enums:" #: editor/editor_help.cpp msgid "enum " -msgstr "" +msgstr "Enum " + +#: editor/editor_help.cpp +#, fuzzy +msgid "Constants" +msgstr "Konstanten:" #: editor/editor_help.cpp msgid "Constants:" msgstr "Konstanten:" #: editor/editor_help.cpp +#, fuzzy +msgid "Description" +msgstr "Beschreibung:" + +#: editor/editor_help.cpp +#, fuzzy +msgid "Properties" +msgstr "Eigenschaften:" + +#: editor/editor_help.cpp msgid "Property Description:" msgstr "Eigenschaft-Beschreibung:" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this property. Please help us by " +"[color=$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp +#, fuzzy +msgid "Methods" +msgstr "Methodenliste:" + +#: editor/editor_help.cpp msgid "Method Description:" msgstr "Methoden-Beschreibung:" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this method. Please help us by [color=" +"$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp msgid "Search Text" msgstr "Suchtext" #: editor/editor_log.cpp -#, fuzzy msgid "Output:" -msgstr " Ausgabe:" +msgstr "Ausgabe:" #: editor/editor_log.cpp editor/plugins/animation_tree_editor_plugin.cpp -#: editor/plugins/rich_text_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_editor_debugger.cpp scene/gui/line_edit.cpp -#: scene/gui/text_edit.cpp +#: editor/property_editor.cpp editor/script_editor_debugger.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Clear" msgstr "Löschen" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Error saving resource!" msgstr "Fehler beim speichern der Ressource!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Save Resource As.." msgstr "Speichere Ressource als.." -#: editor/editor_node.cpp editor/export_template_manager.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "I see.." msgstr "Verstehe..." @@ -1582,6 +1423,30 @@ msgid "Error while saving." msgstr "Fehler beim speichern." #: editor/editor_node.cpp +#, fuzzy +msgid "Can't open '%s'." +msgstr "Kann mit ‚..‘ nicht arbeiten" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Error while parsing '%s'." +msgstr "Fehler beim speichern." + +#: editor/editor_node.cpp +msgid "Unexpected end of file '%s'." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Missing '%s' or its dependencies." +msgstr "Szene '%s' hat defekte Abhängigkeiten:" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Error while loading '%s'." +msgstr "Fehler beim speichern." + +#: editor/editor_node.cpp msgid "Saving Scene" msgstr "Speichere Szene" @@ -1594,9 +1459,8 @@ msgid "Creating Thumbnail" msgstr "Erzeuge Miniaturansicht" #: editor/editor_node.cpp -#, fuzzy msgid "This operation can't be done without a tree root." -msgstr "Diese Aktion kann nicht ohne eine Szene ausgeführt werden." +msgstr "Diese Aktion kann nicht ohne eine Wurzel ausgeführt werden." #: editor/editor_node.cpp msgid "" @@ -1642,6 +1506,33 @@ msgid "Restored default layout to base settings." msgstr "Layout wurde auf die Standardeinstellungen zurückgesetzt." #: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was imported, so it's not editable.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was instanced or inherited.\n" +"Changes to it will not be kept when saving the current scene." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource was imported, so it's not editable. Change its settings in the " +"import panel and then re-import." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This scene was imported, so changes to it will not be kept.\n" +"Instancing it or inheriting will allow making changes to it.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp msgid "Copy Params" msgstr "Parameter kopieren" @@ -1674,14 +1565,14 @@ msgid "There is no defined scene to run." msgstr "Es ist keine zu startende Szene definiert." #: editor/editor_node.cpp -#, fuzzy msgid "" "No main scene has ever been defined, select 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 Projekteinstellungen unter der Kategorie „Anwendung“." +"Es ist keine Hauptszene wurde jemals bestimmt, soll eine ausgewählt werden?\n" +"Dies kann später in den Projekteinstellungen unter der Kategorie ‚Anwendung‘ " +"geändert werden." #: editor/editor_node.cpp msgid "" @@ -1730,13 +1621,12 @@ msgid "Quick Open Script.." msgstr "Schnell Skripte öffnen.." #: editor/editor_node.cpp -#, fuzzy msgid "Save & Close" -msgstr "Datei speichern" +msgstr "Speichern und schließen" #: editor/editor_node.cpp msgid "Save changes to '%s' before closing?" -msgstr "" +msgstr "Änderungen in ‚%s‘ vor dem Schließen speichern?" #: editor/editor_node.cpp msgid "Save Scene As.." @@ -1767,9 +1657,8 @@ msgid "Export Tile Set" msgstr "Tileset exportieren" #: editor/editor_node.cpp -#, fuzzy msgid "This operation can't be done without a selected node." -msgstr "Diese Aktion kann nicht ohne eine Szene ausgeführt werden." +msgstr "Diese Aktion kann nicht ohne ein ausgewähltes Node ausgeführt werden." #: editor/editor_node.cpp msgid "Current scene not saved. Open anyway?" @@ -1802,22 +1691,28 @@ msgid "Exit the editor?" msgstr "Editor verlassen?" #: editor/editor_node.cpp -#, fuzzy msgid "Open Project Manager?" -msgstr "Projektverwaltung" +msgstr "Projektverwaltung öffnen?" #: editor/editor_node.cpp -#, fuzzy msgid "Save & Quit" -msgstr "Datei speichern" +msgstr "Speichern und beenden" #: editor/editor_node.cpp msgid "Save changes to the following scene(s) before quitting?" -msgstr "" +msgstr "Änderungen in den folgenden Szenen vor dem Schließen speichern?" #: editor/editor_node.cpp msgid "Save changes the following scene(s) before opening Project Manager?" msgstr "" +"Änderungen in den folgenden Szenen vor dem Öffnen der Projektverwaltung " +"speichern?" + +#: editor/editor_node.cpp +msgid "" +"This option is deprecated. Situations where refresh must be forced are now " +"considered a bug. Please report." +msgstr "" #: editor/editor_node.cpp msgid "Pick a Main Scene" @@ -1825,19 +1720,22 @@ msgstr "Wähle eine Hauptszene" #: editor/editor_node.cpp msgid "Unable to enable addon plugin at: '" -msgstr "" +msgstr "Plugin bei ‚" #: editor/editor_node.cpp msgid "' parsing of config failed." msgstr "" +"‘ kann nicht aktiviert werden, Einlesen der Konfigurationsdatei " +"fehlgeschlagen." #: editor/editor_node.cpp msgid "Unable to find script field for addon plugin at: 'res://addons/" msgstr "" +"Skript-Feld für Addon-Plugin in ‚res://addons/‘ konnte nicht gefunden werden." #: editor/editor_node.cpp msgid "Unable to load addon script from path: '" -msgstr "" +msgstr "AddOn-Skript konnte nicht geladen werden: '" #: editor/editor_node.cpp msgid "" @@ -1850,7 +1748,7 @@ msgstr "" "werden." #: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Ugh" msgstr "Ähm" @@ -1864,14 +1762,15 @@ msgstr "" "die Szene innerhalb des Projektpfades gespeichert werden." #: editor/editor_node.cpp -msgid "Error loading scene." -msgstr "Fehler beim laden der Szene." - -#: editor/editor_node.cpp msgid "Scene '%s' has broken dependencies:" msgstr "Szene '%s' hat defekte Abhängigkeiten:" #: editor/editor_node.cpp +#, fuzzy +msgid "Clear Recent Scenes" +msgstr "Letzte Dateien leeren" + +#: editor/editor_node.cpp msgid "Save Layout" msgstr "Layout speichern" @@ -1901,11 +1800,10 @@ msgid "Distraction Free Mode" msgstr "Ablenkungsfreier Modus" #: editor/editor_node.cpp -#, fuzzy msgid "Toggle distraction-free mode." -msgstr "Ablenkungsfreier Modus" +msgstr "Ablenkungsfreien Modus umschalten." -#: editor/editor_node.cpp editor/io_plugins/editor_scene_import_plugin.cpp +#: editor/editor_node.cpp msgid "Scene" msgstr "Szene" @@ -2145,6 +2043,10 @@ msgstr "Fragen&Antworten" msgid "Issue Tracker" msgstr "Problem-Melder" +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +msgid "Community" +msgstr "Gemeinschaft" + #: editor/editor_node.cpp msgid "About" msgstr "Über" @@ -2153,7 +2055,7 @@ msgstr "Über" msgid "Play the project." msgstr "Projekt abspielen." -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Play" msgstr "Starten" @@ -2169,7 +2071,7 @@ msgstr "Szene pausieren" msgid "Stop the scene." msgstr "Szene stoppen." -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Stop" msgstr "Stop" @@ -2242,6 +2144,16 @@ msgid "Object properties." msgstr "Objekteigenschaften." #: editor/editor_node.cpp +#, fuzzy +msgid "Changes may be lost!" +msgstr "Ändere Bildergruppe" + +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Import" +msgstr "Import" + +#: editor/editor_node.cpp msgid "FileSystem" msgstr "Dateisystem" @@ -2255,15 +2167,7 @@ msgstr "Ausgabe" #: editor/editor_node.cpp msgid "Don't Save" -msgstr "" - -#: editor/editor_node.cpp editor/editor_reimport_dialog.cpp -msgid "Re-Import" -msgstr "Neuimport" - -#: editor/editor_node.cpp editor/editor_plugin_settings.cpp -msgid "Update" -msgstr "Update" +msgstr "Nicht speichern" #: editor/editor_node.cpp msgid "Import Templates From ZIP File" @@ -2290,9 +2194,8 @@ msgid "Open & Run a Script" msgstr "Skript öffnen und ausführen" #: editor/editor_node.cpp -#, fuzzy msgid "New Inherited" -msgstr "Neue gererbte Szene.." +msgstr "Neue geerbte Szene.." #: editor/editor_node.cpp msgid "Load Errors" @@ -2326,11 +2229,29 @@ msgstr "Nächsten Editor öffnen" msgid "Open the previous Editor" msgstr "Vorigen Editor öffnen" +#: editor/editor_plugin.cpp +#, fuzzy +msgid "Creating Mesh Previews" +msgstr "Erzeuge MeshLibrary" + +#: editor/editor_plugin.cpp +msgid "Thumbnail.." +msgstr "Vorschau.." + #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" msgstr "Installierte Erweiterungen:" #: editor/editor_plugin_settings.cpp +msgid "Update" +msgstr "Update" + +#: editor/editor_plugin_settings.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Version:" +msgstr "Version:" + +#: editor/editor_plugin_settings.cpp msgid "Author:" msgstr "Autor:" @@ -2382,35 +2303,17 @@ msgstr "Selbst" msgid "Frame #:" msgstr "Bild #:" -#: editor/editor_reimport_dialog.cpp -msgid "Please wait for scan to complete." -msgstr "Bitte warten bis Operation abgeschlossen ist." - -#: editor/editor_reimport_dialog.cpp -msgid "Current scene must be saved to re-import." -msgstr "Aktuelle Szene muss gespeichert sein um sie erneut zu importieren." - -#: editor/editor_reimport_dialog.cpp -msgid "Save & Re-Import" -msgstr "Speichern & neu importieren" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Importing" -msgstr "Importiere erneut" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Import Changed Resources" -msgstr "Veränderte Ressourcen neu importieren" - #: editor/editor_run_native.cpp msgid "Select device from the list" -msgstr "" +msgstr "Gerät aus Liste auswählen" #: editor/editor_run_native.cpp msgid "" "No runnable export preset found for this platform.\n" "Please add a runnable preset in the export menu." msgstr "" +"Keine ausführbare Exportvorlage für diese Plattform gefunden.\n" +"Im Exportmenü kann eine ausführbare Vorlage hinzugefügt werden." #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." @@ -2513,10 +2416,6 @@ msgid "Importing:" msgstr "Importiere:" #: editor/export_template_manager.cpp -msgid "Loading Export Templates" -msgstr "Lade Exportvorlagen" - -#: editor/export_template_manager.cpp msgid "Current Version:" msgstr "Aktuelle Version:" @@ -2551,60 +2450,79 @@ msgid "Cannot navigate to '" msgstr "Kann Ordner ‚" #: editor/filesystem_dock.cpp -#, fuzzy +msgid "View items as a grid of thumbnails" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "View items as a list" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "" "\n" -"Status: Needs Re-Import" -msgstr "Speichern & neu importieren" +"Status: Import of file failed. Please fix file and reimport manually." +msgstr "" #: editor/filesystem_dock.cpp -#, fuzzy msgid "" "\n" "Source: " -msgstr "Quelle:" +msgstr "" +"\n" +"Quelle: " #: editor/filesystem_dock.cpp -msgid "Same source and destination files, doing nothing." -msgstr "Quell- und Zieldatei sind gleich, ignoriere Anweisung." +#, fuzzy +msgid "Cannot move/rename resources root." +msgstr "Quellschriftart kann nicht geladen/verarbeitet werden." #: editor/filesystem_dock.cpp -msgid "Target file exists, can't overwrite. Delete first." -msgstr "" +#, fuzzy +msgid "Cannot move a folder into itself.\n" +msgstr "Datei kann nicht in sich selbst importiert werden:" + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Error moving:\n" +msgstr "Fehler beim Verzeichnisverschieben:\n" #: editor/filesystem_dock.cpp -msgid "Same source and destination paths, doing nothing." -msgstr "Quell- und Zielpfad sind gleich, ignoriere Anweisung." +#, fuzzy +msgid "Unable to update dependencies:\n" +msgstr "Szene '%s' hat defekte Abhängigkeiten:" #: editor/filesystem_dock.cpp -msgid "Can't move directories to within themselves." -msgstr "Verzeichnisse lassen sich nicht in sich selbst verschieben." +msgid "No name provided" +msgstr "" #: editor/filesystem_dock.cpp -msgid "Can't rename deps for:\n" +msgid "Provided name contains invalid characters" msgstr "" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Error moving file:\n" -msgstr "Fehler beim Laden des Bilds:" +msgid "No name provided." +msgstr "Umbenennen oder Verschieben.." #: editor/filesystem_dock.cpp #, fuzzy -msgid "Error moving dir:\n" -msgstr "Fehler beim importieren:" +msgid "Name contains invalid characters." +msgstr "Gültige Zeichen:" #: editor/filesystem_dock.cpp -msgid "Can't operate on '..'" -msgstr "Kann mit ‚..‘ nicht arbeiten" +#, fuzzy +msgid "A file or folder with this name already exists." +msgstr "Gruppenname existiert bereits!" #: editor/filesystem_dock.cpp -msgid "Pick New Name and Location For:" -msgstr "Wähle neuen Namen und Ort für:" +#, fuzzy +msgid "Renaming file:" +msgstr "Variable umbenennen" #: editor/filesystem_dock.cpp -msgid "No files selected!" -msgstr "Keine Dateien ausgewählt!" +#, fuzzy +msgid "Renaming folder:" +msgstr "Node umbenennen" #: editor/filesystem_dock.cpp msgid "Expand all" @@ -2615,40 +2533,38 @@ msgid "Collapse all" msgstr "Alle einklappen" #: editor/filesystem_dock.cpp -msgid "Show In File Manager" -msgstr "Zeige im Dateimanager" - -#: editor/filesystem_dock.cpp -msgid "Instance" -msgstr "Instanz" +msgid "Copy Path" +msgstr "Pfad kopieren" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "Abhängigkeiten bearbeiten.." +#, fuzzy +msgid "Rename.." +msgstr "Umbenennen" #: editor/filesystem_dock.cpp -msgid "View Owners.." -msgstr "Zeige Besitzer.." +msgid "Move To.." +msgstr "Verschiebe zu.." #: editor/filesystem_dock.cpp -msgid "Copy Path" -msgstr "Pfad kopieren" +#, fuzzy +msgid "New Folder.." +msgstr "Ordner erstellen" #: editor/filesystem_dock.cpp -msgid "Rename or Move.." -msgstr "Umbenennen oder Verschieben.." +msgid "Show In File Manager" +msgstr "Zeige im Dateimanager" #: editor/filesystem_dock.cpp -msgid "Move To.." -msgstr "Verschiebe zu.." +msgid "Instance" +msgstr "Instanz" #: editor/filesystem_dock.cpp -msgid "Info" -msgstr "Info" +msgid "Edit Dependencies.." +msgstr "Abhängigkeiten bearbeiten.." #: editor/filesystem_dock.cpp -msgid "Re-Import.." -msgstr "Neuimport.." +msgid "View Owners.." +msgstr "Zeige Besitzer.." #: editor/filesystem_dock.cpp msgid "Previous Directory" @@ -2675,11 +2591,18 @@ msgid "" "Scanning Files,\n" "Please Wait.." msgstr "" +"Lese Dateien,\n" +"Bitte warten.." #: editor/filesystem_dock.cpp msgid "Move" msgstr "Verschieben" +#: editor/filesystem_dock.cpp editor/plugins/animation_tree_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Rename" +msgstr "Umbenennen" + #: editor/groups_editor.cpp msgid "Add to Group" msgstr "Zu Gruppe hinzufügen" @@ -2689,74 +2612,85 @@ msgid "Remove from Group" msgstr "Aus Gruppe entfernen" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Import as Single Scene" -msgstr "Szene wird importiert.." +msgstr "Als einzelne Szene importieren" + +#: editor/import/resource_importer_scene.cpp +#, fuzzy +msgid "Import with Separate Animations" +msgstr "Import mit separaten Materialien" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials" -msgstr "" +msgstr "Import mit separaten Materialien" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects" -msgstr "" +msgstr "Import mit separaten Objekten" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects+Materials" -msgstr "" +msgstr "Import mit separaten Objekten und Materialien" + +#: editor/import/resource_importer_scene.cpp +#, fuzzy +msgid "Import with Separate Objects+Animations" +msgstr "Import mit separaten Objekten und Materialien" + +#: editor/import/resource_importer_scene.cpp +#, fuzzy +msgid "Import with Separate Materials+Animations" +msgstr "Import mit separaten Materialien" #: editor/import/resource_importer_scene.cpp #, fuzzy +msgid "Import with Separate Objects+Materials+Animations" +msgstr "Import mit separaten Objekten und Materialien" + +#: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes" -msgstr "3D-Szene importieren" +msgstr "Als mehrere Szenen importieren" #: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes+Materials" -msgstr "" +msgstr "Import als mehrere Szenen und Materialien" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Import Scene" msgstr "Szene importieren" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Importing Scene.." msgstr "Szene wird importiert.." #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Running Custom Script.." msgstr "Angepasstes Skript wird ausgeführt.." #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Couldn't load post-import script:" msgstr "Post-Import Skript konnte nicht geladen werden:" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Invalid/broken script for post-import (check console):" msgstr "Ungültiges oder fehlerhaftes Skript für Post-Import (siehe Konsole):" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Error running post-import script:" msgstr "Fehler beim ausführen des Post-Import Skripts:" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Saving.." msgstr "Speichere.." #: editor/import_dock.cpp msgid "Set as Default for '%s'" -msgstr "" +msgstr "Standard für ‚%s‘ setzen" #: editor/import_dock.cpp msgid "Clear Default for '%s'" -msgstr "" +msgstr "Standard für ‚%s‘ löschen" #: editor/import_dock.cpp msgid " Files" @@ -2774,576 +2708,6 @@ msgstr "Voreinstellungen.." msgid "Reimport" msgstr "Neuimport" -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "No bit masks to import!" -msgstr "Keine Bitmasken zu importieren!" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path is empty." -msgstr "Zielpfad ist leer." - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must be a complete resource path." -msgstr "Zielpfad muss ein kompletter Ressourcenpfad sein." - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must exist." -msgstr "Zielpfad muss existieren." - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Save path is empty!" -msgstr "Speicherpfad ist leer!" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Import BitMasks" -msgstr "BitMasks importieren" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s):" -msgstr "Quelltextur(en):" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Target Path:" -msgstr "Zielpfad:" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Accept" -msgstr "Akzeptieren" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Bit Mask" -msgstr "Bitmaske" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No source font file!" -msgstr "Keine Quellschriftart-Datei gefunden!" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No target font resource!" -msgstr "Keine Zielschriftart-Ressource!" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "" -"Invalid file extension.\n" -"Please use .font." -msgstr "" -"Ungültige Dateiendung.\n" -"Nutze .font als Dateiendung." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Can't load/process source font." -msgstr "Quellschriftart kann nicht geladen/verarbeitet werden." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Couldn't save font." -msgstr "Schriftart konnte nicht gespeichert werden." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font:" -msgstr "Quellschriftart:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font Size:" -msgstr "Quellschriftgröße:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Dest Resource:" -msgstr "Ziel-Ressource:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "The quick brown fox jumps over the lazy dog." -msgstr "Franz jagt im komplett verwahrlosten Taxi quer durch Bayern." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Test:" -msgstr "Test:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Options:" -msgstr "Optionen:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Font Import" -msgstr "Schriftart importieren" - -#: 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 Schriftart. Bitte stattdessen eine Datei " -"im BMFont-Format angeben." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Failed opening as BMFont file." -msgstr "Öffnen der BMFont-Datei fehlgeschlagen." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error initializing FreeType." -msgstr "Fehler beim initialisieren von FreeType." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Unknown font format." -msgstr "Unbekanntes Schriftformat." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error loading font." -msgstr "Fehler beim Laden der Schriftart." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Invalid font size." -msgstr "Ungültige Schriftgröße." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Invalid font custom source." -msgstr "Eigene Schriftart-Quelle ist ungültig." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/plugins/theme_editor_plugin.cpp -msgid "Font" -msgstr "Schriftart" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "No meshes to import!" -msgstr "Keine Meshes zu importieren!" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Single Mesh Import" -msgstr "Einzelnes Mesh importieren" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Source Mesh(es):" -msgstr "Quell Mesh(es):" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Mesh" -msgstr "Mesh" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Surface %d" -msgstr "Oberfläche %d" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "No samples to import!" -msgstr "Keine Samples zu importieren!" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Import Audio Samples" -msgstr "Audio-Samples importieren" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Source Sample(s):" -msgstr "Quell Sample(s):" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Audio Sample" -msgstr "Audio-Sample" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "New Clip" -msgstr "Neuer Clip" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Animation Options" -msgstr "Animationseinstellungen" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Flags" -msgstr "Flags" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Bake FPS:" -msgstr "FPS fixieren:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Optimizer" -msgstr "Optimierung" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Linear Error" -msgstr "Obere lineare Fehlergrenze" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angular Error" -msgstr "Obere Winkelfehlergrenze" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angle" -msgstr "Maximaler Winkel" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Clips" -msgstr "Ausschnitte" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Start(s)" -msgstr "Start" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "End(s)" -msgstr "Ende" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Loop" -msgstr "Wiederholung" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Filters" -msgstr "Filter" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source path is empty." -msgstr "Quellpfad ist leer." - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't load post-import script." -msgstr "Post-Import Skript konnte nicht geladen werden." - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Invalid/broken script for post-import." -msgstr "Ungültiges / Fehlerhaftes Skript für Post-Import." - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Error importing scene." -msgstr "Fehler beim importieren der Szene." - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import 3D Scene" -msgstr "3D-Szene importieren" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source Scene:" -msgstr "Quellszene:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Same as Target Scene" -msgstr "Dieselbe wie die Zielszene" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Shared" -msgstr "Geteilt" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Target Texture Folder:" -msgstr "Ziel-Texturenordner:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Post-Process Script:" -msgstr "Post-Process Skript:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Custom Root Node Type:" -msgstr "Angepasster Root-Node-Typ:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Auto" -msgstr "Auto" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Root Node Name:" -msgstr "Name des Root-Node:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "The Following Files are Missing:" -msgstr "Die folgenden Dateien fehlen:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Anyway" -msgstr "Trotzdem importieren" - -#: editor/io_plugins/editor_scene_import_plugin.cpp scene/gui/dialogs.cpp -msgid "Cancel" -msgstr "Abbrechen" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import & Open" -msgstr "Importieren & Öffnen" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Edited scene has not been saved, open imported scene anyway?" -msgstr "" -"Bearbeitete Szene wurde nicht gespeichert, trotzdem importierte Szene öffnen?" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Image:" -msgstr "Bild importieren:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Can't import a file over itself:" -msgstr "Datei kann nicht in sich selbst importiert werden:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't localize path: %s (already local)" -msgstr "Pfad konnte nicht gefunden werden: %s (bereits lokal)" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "3D Scene Animation" -msgstr "3D-Szenenanimation" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Uncompressed" -msgstr "Unkomprimiert" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossless (PNG)" -msgstr "Verlustfrei komprimieren (PNG)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossy (WebP)" -msgstr "Verlustbehaftet komprimieren (WebP)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress (VRAM)" -msgstr "Komprimieren (VRAM)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Format" -msgstr "Texturformat" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Compression Quality (WebP):" -msgstr "Texturkompressionsqualität (WebP):" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Options" -msgstr "Textureinstellungen" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Please specify some files!" -msgstr "Bitte gib einige Dateien an!" - -#: 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 benötigt." - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Error importing:" -msgstr "Fehler beim importieren:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Only one file is required for large texture." -msgstr "Es ist nur eine Datei für eine große Textur erforderlich." - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Max Texture Size:" -msgstr "Maximale Texturgröße:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for Atlas (2D)" -msgstr "Texturen für Atlas (2D) importieren" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cell Size:" -msgstr "Zellgröße:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Large Texture" -msgstr "Große Textur" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Textures (2D)" -msgstr "Große Texturen (2D) importieren" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture" -msgstr "Quelltextur" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Base Atlas Texture" -msgstr "Basis-Atlastextur" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s)" -msgstr "Quelltextur(en)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 2D" -msgstr "Texturen für 2D importieren" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 3D" -msgstr "Texturen für 3D importieren" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures" -msgstr "Texturen importieren" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "2D Texture" -msgstr "2D-Textur" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "3D Texture" -msgstr "3D-Textur" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Atlas Texture" -msgstr "Atlastextur" - -#: 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 "" -"MERKE: Das importieren von 2D Texturen ist nicht zwingend notwendig. Kopiere " -"einfach png/jpg Dateien in das Projekt." - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Crop empty space." -msgstr "Leere Bereiche beschneiden." - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture" -msgstr "Textur" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Texture" -msgstr "Große Textur importieren" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Load Source Image" -msgstr "Quellbild laden" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Slicing" -msgstr "Teile" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Inserting" -msgstr "Füge Ein" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Saving" -msgstr "Speichere" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save large texture:" -msgstr "Große Textur konnte nicht gespeichert werden:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Build Atlas For:" -msgstr "Erstelle Atlas für:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Loading Image:" -msgstr "Lade Bild:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't load image:" -msgstr "Bild konnte nicht geladen werden:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Converting Images" -msgstr "Bilder werden konvertiert" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cropping Images" -msgstr "Bilder werden beschnitten" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Blitting Images" -msgstr "Blitting Bilder" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save atlas image:" -msgstr "Atlas-Bild konnte nicht gespeichert werden:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save converted texture:" -msgstr "Konvertierte Textur konnte nicht gespeichert werden:" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid source!" -msgstr "Fehlerhafte Quelle!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid translation source!" -msgstr "Fehlerhafte Übersetzungsquelle!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Column" -msgstr "Reihe" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/script_create_dialog.cpp -msgid "Language" -msgstr "Sprache" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No items to import!" -msgstr "Keine Elemente zu importieren!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No target path!" -msgstr "Kein Zielpfad!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translations" -msgstr "Übersetzungen importieren" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Couldn't import!" -msgstr "Konnte nicht importiert werden!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translation" -msgstr "Übersetzung importieren" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Source CSV:" -msgstr "Quell-CSV:" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Ignore First Row" -msgstr "Erste Zeile ignorieren" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Compress" -msgstr "Komprimieren" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Add to Project (project.godot)" -msgstr "Zu Projekt hinzufügen (project.godot)" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Languages:" -msgstr "Sprachen importieren:" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Translation" -msgstr "Übersetzung" - #: editor/multi_node_edit.cpp msgid "MultiNode Set" msgstr "MultiNode setzen" @@ -3356,6 +2720,49 @@ msgstr "Gruppen" msgid "Select a Node to edit Signals and Groups." msgstr "Wähle ein Node um Signale und Gruppen zu bearbeiten." +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create Poly" +msgstr "Polygon erstellen" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly" +msgstr "Polygon bearbeiten" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +#, fuzzy +msgid "Insert Point" +msgstr "Füge Ein" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly (Remove Point)" +msgstr "Polygon bearbeiten (Punkt entfernen)" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Remove Poly And Point" +msgstr "Polygon und Punkt entfernen" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create a new polygon from scratch." +msgstr "Polygon von Grund auf neu erstellen." + +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "" +"Edit existing polygon:\n" +"LMB: Move Point.\n" +"Ctrl+LMB: Split Segment.\n" +"RMB: Erase Point." +msgstr "" +"Existierendes Polygon editieren:\n" +"LMT: Punkt verschieben.\n" +"Strg+LMT: Segment aufteilen.\n" +"RMT: Punkt löschen." + #: editor/plugins/animation_player_editor_plugin.cpp msgid "Toggle Autoplay" msgstr "Automatisches Abspielen umschalten" @@ -3509,7 +2916,6 @@ msgstr "Animationsname:" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp #: editor/script_create_dialog.cpp msgid "Error!" @@ -3537,9 +2943,8 @@ msgid "New name:" msgstr "Neuer Name:" #: editor/plugins/animation_tree_editor_plugin.cpp -#, fuzzy msgid "Edit Filters" -msgstr "Nodefilter bearbeiten" +msgstr "Filter bearbeiten" #: editor/plugins/animation_tree_editor_plugin.cpp #: editor/plugins/multimesh_editor_plugin.cpp @@ -3620,10 +3025,6 @@ msgid "Delete Input" msgstr "Eingang löschen" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Rename" -msgstr "Umbenennen" - -#: editor/plugins/animation_tree_editor_plugin.cpp msgid "Animation tree is valid." msgstr "Animationsbaum ist gültig." @@ -3679,64 +3080,181 @@ msgstr "Nodefilter bearbeiten" msgid "Filters.." msgstr "Filter.." -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing %d Triangles:" -msgstr "Analysiere %d Dreiecke:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Free" +msgstr "Frei" -#: editor/plugins/baked_light_baker.cpp -msgid "Triangle #" -msgstr "Dreieck #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Contents:" +msgstr "Inhalt:" -#: editor/plugins/baked_light_baker.cpp -msgid "Light Baker Setup:" -msgstr "Light-Baker einrichten:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "View Files" +msgstr "Dateien anzeigen" -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing Geometry" -msgstr "Analysiere Geometrie" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve hostname:" +msgstr "Kann Hostnamen nicht auflösen:" -#: editor/plugins/baked_light_baker.cpp -msgid "Fixing Lights" -msgstr "Fixiere Lampen" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve." +msgstr "Kann nicht auflösen." -#: editor/plugins/baked_light_baker.cpp -msgid "Making BVH" -msgstr "Erstelle BVH" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connection error, please try again." +msgstr "Verbindungsfehler, bitte erneut versuchen." -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Light Octree" -msgstr "erstelle Licht-Octree" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't connect." +msgstr "Kann nicht verbinden." -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Octree Texture" -msgstr "Erstelle Octree-Textur" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't connect to host:" +msgstr "Kann nicht zu Host verbinden:" -#: editor/plugins/baked_light_baker.cpp -msgid "Transfer to Lightmaps:" -msgstr "übertrage zu Lightmaps:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response from host:" +msgstr "Keine Antwort von Host:" -#: editor/plugins/baked_light_baker.cpp -msgid "Allocating Texture #" -msgstr "Zuweisen von Textur #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response." +msgstr "Keine Antwort." -#: editor/plugins/baked_light_baker.cpp -msgid "Baking Triangle #" -msgstr "Baking von Dreieck #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, return code:" +msgstr "Anfrage fehlgeschlagen: Rückgabewert:" -#: editor/plugins/baked_light_baker.cpp -msgid "Post-Processing Texture #" -msgstr "Nachbearbeiten von Textur #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Req. Failed." +msgstr "Anfrage fehlgeschlagen." -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Bake!" -msgstr "Backen!" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, too many redirects" +msgstr "Anfrage fehlgeschlagen, zu viele Weiterleitungen" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Redirect Loop." +msgstr "Weiterleitungsschleife." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed:" +msgstr "Fehlgeschlagen:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Bad download hash, assuming file has been tampered with." +msgstr "Falsche Download-Prüfsumme, Datei könnte manipuliert worden sein." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Expected:" +msgstr "Erwartet:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Got:" +msgstr "Erhalten:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed sha256 hash check" +msgstr "Sha256-Prüfung fehlgeschlagen" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Asset Download Error:" +msgstr "Asset-Download-Fehler:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Fetching:" +msgstr "Hole:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Resolving.." +msgstr "Löse auf.." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connecting.." +msgstr "Verbinde.." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Requesting.." +msgstr "Frage an.." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Error making request" +msgstr "Fehler bei Anfrage" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Idle" +msgstr "Leerlauf" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Retry" +msgstr "Erneut versuchen" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download Error" +msgstr "Übertragungsfehler" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download for this asset is already in progress!" +msgstr "Dieser Posten wird bereits herunter geladen!" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "first" +msgstr "Anfang" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "prev" +msgstr "zurück" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "next" +msgstr "vor" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "last" +msgstr "Ende" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "All" +msgstr "Alle" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Plugins" +msgstr "Erweiterungen" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Sort:" +msgstr "Sortiere:" -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Reset the lightmap octree baking process (start over)." -msgstr "Lightmap-Octree-Backing-Prozess zurücksetzen (neu starten)." +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Reverse" +msgstr "Umkehren" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Category:" +msgstr "Kategorie:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Site:" +msgstr "Seite:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Support.." +msgstr "Unterstützung.." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Official" +msgstr "Offiziell" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Testing" +msgstr "Testphase" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Assets ZIP File" +msgstr "Projektdaten als ZIP-Datei" #: editor/plugins/camera_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp msgid "Preview" msgstr "Vorschau" @@ -3779,12 +3297,18 @@ msgid "Edit CanvasItem" msgstr "CanvasItem bearbeiten" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Change Anchors" +#, fuzzy +msgid "Anchors only" +msgstr "Anker" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Change Anchors and Margins" msgstr "Ankerpunkte ändern" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom (%):" -msgstr "Vergrößerung (%):" +msgid "Change Anchors" +msgstr "Ankerpunkte ändern" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Paste Pose" @@ -3839,61 +3363,79 @@ msgid "Pan Mode" msgstr "Schwenkmodus" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Lock the selected object in place (can't be moved)." -msgstr "" -"Das ausgewählte Objekt an seiner Position sperren (kann nicht bewegt werden)." +#, fuzzy +msgid "Toggles snapping" +msgstr "Haltepunkt umschalten" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Unlock the selected object (can be moved)." -msgstr "Das ausgewählte Objekt entsperren (kann bewegt werden)." +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "Einrasten aktivieren" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Makes sure the object's children are not selectable." -msgstr "Verhindert das Auswählen von Unterobjekten dieses Nodes." +#, fuzzy +msgid "Snapping options" +msgstr "Animationseinstellungen" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Restores the object's children's ability to be selected." -msgstr "Macht Unterobjekte dieses Objekts wieder auswählbar." +#, fuzzy +msgid "Snap to grid" +msgstr "Einrastmodus:" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp -#: editor/project_settings_editor.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Edit" -msgstr "Bearbeiten" +msgid "Use Rotation Snap" +msgstr "Rotationsraster benutzen" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" -msgstr "Einrasten aktivieren" +#, fuzzy +msgid "Configure Snap..." +msgstr "Einrasten konfigurieren.." #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" -msgstr "Raster anzeigen" +msgid "Snap Relative" +msgstr "Relatives Einrasten benutzen" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Rotation Snap" -msgstr "Rotationsraster benutzen" +msgid "Use Pixel Snap" +msgstr "Pixelraster benutzen" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap Relative" -msgstr "Relatives Einrasten benutzen" +msgid "Smart snapping" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "Einrasten konfigurieren.." +#, fuzzy +msgid "Snap to parent" +msgstr "Auf übergeordnetes Node ausdehnen" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Pixel Snap" -msgstr "Pixelraster benutzen" +msgid "Snap to node anchor" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Skeleton.." -msgstr "Skelett.." +msgid "Snap to node sides" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to other nodes" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Lock the selected object in place (can't be moved)." +msgstr "" +"Das ausgewählte Objekt an seiner Position sperren (kann nicht bewegt werden)." + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Unlock the selected object (can be moved)." +msgstr "Das ausgewählte Objekt entsperren (kann bewegt werden)." + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Makes sure the object's children are not selectable." +msgstr "Verhindert das Auswählen von Unterobjekten dieses Nodes." + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Restores the object's children's ability to be selected." +msgstr "Macht Unterobjekte dieses Objekts wieder auswählbar." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Make Bones" @@ -3921,12 +3463,19 @@ msgid "View" msgstr "Ansicht" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Reset" -msgstr "Vergrößerung zurücksetzen" +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "Raster anzeigen" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show helpers" +msgstr "Knochen anzeigen" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Set.." -msgstr "Vergrößerung setzen.." +#, fuzzy +msgid "Show rulers" +msgstr "Knochen anzeigen" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -3937,8 +3486,9 @@ msgid "Frame Selection" msgstr "Auswahl einrahmen" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Anchor" -msgstr "Anker" +#, fuzzy +msgid "Layout" +msgstr "Layout speichern" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Keys" @@ -3961,12 +3511,21 @@ msgid "Clear Pose" msgstr "Pose zurücksetzen" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Set a Value" -msgstr "Einen Wert setzen" +msgid "Drag pivot from mouse position" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Set pivot at mouse position" +msgstr "Position der Ausgangskurve setzen" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap (Pixels):" -msgstr "Einrasten (Pixel):" +msgid "Multiply grid step by 2" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Divide grid step by 2" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Add %s" @@ -3976,23 +3535,28 @@ msgstr "%s hinzufügen" msgid "Adding %s..." msgstr "%s hinzufügen…" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Create Node" msgstr "Erzeuge Node" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Error instancing scene from %s" msgstr "Fehler beim Instanziieren von %s" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "OK :(" msgstr "Verstehe" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "No parent to instance a child at." msgstr "Kein Node unter dem Unterobjekt instantiiert werden könnte vorhanden." -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "This operation requires a single selected node." msgstr "Diese Aktion benötigt ein einzelnes ausgewähltes Node." @@ -4008,45 +3572,6 @@ msgstr "" "Ziehen + Umschalt: Node auf gleicher Ebene einfügen\n" "Ziehen + Alt: Nodetyp ändern" -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Create Poly" -msgstr "Polygon erstellen" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly" -msgstr "Polygon bearbeiten" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly (Remove Point)" -msgstr "Polygon bearbeiten (Punkt entfernen)" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Create a new polygon from scratch." -msgstr "Polygon von Grund auf neu erstellen." - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -msgid "" -"Edit existing polygon:\n" -"LMB: Move Point.\n" -"Ctrl+LMB: Split Segment.\n" -"RMB: Erase Point." -msgstr "" - #: editor/plugins/collision_polygon_editor_plugin.cpp msgid "Create Poly3D" msgstr "Polygon3D erstellen" @@ -4056,14 +3581,6 @@ msgid "Set Handle" msgstr "Wähle Griff" #: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Creating Mesh Library" -msgstr "Erzeuge MeshLibrary" - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Thumbnail.." -msgstr "Vorschau.." - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Remove item %d?" msgstr "Element %d entfernen?" @@ -4086,19 +3603,38 @@ msgid "Update from Scene" msgstr "Aus Szene aktualisieren" #: editor/plugins/curve_editor_plugin.cpp +msgid "Flat0" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Flat1" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp #, fuzzy -msgid "Modify Curve Point" -msgstr "Kurve ändern" +msgid "Ease in" +msgstr "Einblenden" #: editor/plugins/curve_editor_plugin.cpp #, fuzzy +msgid "Ease out" +msgstr "Ausblenden" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Smoothstep" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Modify Curve Point" +msgstr "Kurvenpunkt ändern" + +#: editor/plugins/curve_editor_plugin.cpp msgid "Modify Curve Tangent" -msgstr "Verändere Curve-Map" +msgstr "Kurventangente ändern" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Load Curve Preset" -msgstr "Vorlage laden" +msgstr "Kurvenvorlage laden" #: editor/plugins/curve_editor_plugin.cpp msgid "Add point" @@ -4109,31 +3645,28 @@ msgid "Remove point" msgstr "Punkt entfernen" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Left linear" -msgstr "Linear" +msgstr "Links linear" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Right linear" -msgstr "Sicht von rechts" +msgstr "Rechts linear" #: editor/plugins/curve_editor_plugin.cpp msgid "Load preset" msgstr "Vorlage laden" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Remove Curve Point" -msgstr "Pfadpunkt entfernen" +msgstr "Kurvenpunkt entfernen" #: editor/plugins/curve_editor_plugin.cpp msgid "Toggle Curve Linear Tangent" -msgstr "" +msgstr "Lineare Kurventangente umschalten" #: editor/plugins/curve_editor_plugin.cpp msgid "Hold Shift to edit tangents individually" -msgstr "" +msgstr "Umsch halten um Tangenten einzeln zu bearbeiten" #: editor/plugins/gradient_editor_plugin.cpp msgid "Add/Remove Color Ramp Point" @@ -4161,28 +3694,26 @@ msgid "" "No OccluderPolygon2D resource on this node.\n" "Create and assign one?" msgstr "" +"Keine OccluderPolygon2D-Ressource für dieses Node gefunden.\n" +"Neues erstellen und zuweisen?" #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "Create Occluder Polygon" msgstr "Occluder-Polygon erzeugen" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Edit existing polygon:" msgstr "Bestehendes Polygon bearbeiten:" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "LMB: Move Point." msgstr "LMT: Punkt verschieben." #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Ctrl+LMB: Split Segment." msgstr "Strg+LMT: Segment aufteilen." #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "RMB: Erase Point." msgstr "RMT: Punkt entfernen." @@ -4283,6 +3814,10 @@ msgid "Create Outline" msgstr "Umriss erzeugen" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh" +msgstr "Mesh" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Body" msgstr "Statischen Trimesh-Körper erzeugen" @@ -4411,14 +3946,83 @@ msgstr "Zufällige Skalieren:" msgid "Populate" msgstr "Füllen" +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Bake!" +msgstr "Backen!" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +#, fuzzy +msgid "Bake the navigation mesh.\n" +msgstr "Navigations-Mesh erzeugen" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +#, fuzzy +msgid "Clear the navigation mesh." +msgstr "Navigations-Mesh erzeugen" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Setting up Configuration..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Calculating grid size..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Creating heightfield..." +msgstr "erstelle Licht-Octree" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Marking walkable triangles..." +msgstr "Übersetzbare Textbausteine.." + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Constructing compact heightfield..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Eroding walkable area..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Partioning..." +msgstr "Warnung" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Creating contours..." +msgstr "Erstelle Octree-Textur" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Creating polymesh..." +msgstr "Umriss-Mesh erzeugen.." + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Converting to native navigation mesh..." +msgstr "Navigations-Mesh erzeugen" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Navigation Mesh Generator Setup:" +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Parsing Geometry..." +msgstr "Analysiere Geometrie" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Done!" +msgstr "" + #: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Create Navigation Polygon" msgstr "Erzeuge Navigationspolygon" -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Remove Poly And Point" -msgstr "Polygon und Punkt entfernen" - #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Clear Emission Mask" msgstr "Emissionsmaske leeren" @@ -4456,9 +4060,8 @@ msgstr "Emissionsmaske laden" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "Particles" -msgstr "Vertices" +msgstr "Partikel" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generated Point Count:" @@ -4593,15 +4196,18 @@ msgid "Curve Point #" msgstr "Kurvenpunkt #" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Point Pos" +#, fuzzy +msgid "Set Curve Point Position" msgstr "Position des Kurvenpunkts setzen" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve In Pos" +#, fuzzy +msgid "Set Curve In Position" msgstr "Position der Eingangskurve setzen" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Out Pos" +#, fuzzy +msgid "Set Curve Out Position" msgstr "Position der Ausgangskurve setzen" #: editor/plugins/path_editor_plugin.cpp @@ -4661,6 +4267,14 @@ msgid "Scale Polygon" msgstr "Polygon skalieren" #: editor/plugins/polygon_2d_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit" +msgstr "Bearbeiten" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon->UV" msgstr "Polygon→UV" @@ -4715,63 +4329,10 @@ msgstr "Ressource laden" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "Einfügen" -#: editor/plugins/rich_text_editor_plugin.cpp -msgid "Parse BBCode" -msgstr "BBCode parsen" - -#: editor/plugins/sample_editor_plugin.cpp -msgid "Length:" -msgstr "Länge:" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Open Sample File(s)" -msgstr "Audiodatei(en) öffnen" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "ERROR: Couldn't load sample!" -msgstr "Fehler: Konnte Audio nicht laden!" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Add Sample" -msgstr "Sample hinzufügen" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Rename Sample" -msgstr "Sample umbenennen" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Delete Sample" -msgstr "Sample löschen" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "16 Bits" -msgstr "16 Bit" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "8 Bits" -msgstr "8 Bit" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Stereo" -msgstr "Stereo" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Mono" -msgstr "Mono" - -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/script_editor_debugger.cpp -msgid "Format" -msgstr "Format" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Pitch" -msgstr "Tonhöhe" - #: editor/plugins/script_editor_plugin.cpp msgid "Clear Recent Files" msgstr "Letzte Dateien leeren" @@ -4781,6 +4342,8 @@ msgid "" "Close and save changes?\n" "\"" msgstr "" +"Schließen und Änderungen speichern?\n" +"„" #: editor/plugins/script_editor_plugin.cpp msgid "Error while saving theme" @@ -4808,7 +4371,7 @@ msgstr "Motiv speichern als.." #: editor/plugins/script_editor_plugin.cpp msgid " Class Reference" -msgstr "" +msgstr " Klassenreferenz" #: editor/plugins/script_editor_plugin.cpp msgid "Next script" @@ -4862,10 +4425,13 @@ msgstr "Dokumentation schließen" msgid "Close All" msgstr "Alle schließen" +#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp +msgid "Run" +msgstr "Ausführen" + #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Toggle Scripts Panel" -msgstr "Favoriten ein- und ausblenden" +msgstr "Seitenleiste umschalten" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -4900,21 +4466,8 @@ msgid "Keep Debugger Open" msgstr "Debugger offen halten" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Debug with external editor" -msgstr "Nächsten Editor öffnen" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Window" -msgstr "Fenster" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Left" -msgstr "nach links" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Right" -msgstr "nach rechts" +msgstr "Mit externem Editor debuggen" #: editor/plugins/script_editor_plugin.cpp msgid "Open Godot online documentation" @@ -4973,7 +4526,7 @@ msgstr "" #: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." -msgstr "" +msgstr "Nur Ressourcen aus dem Dateisystem können hier fallen gelassen werden." #: editor/plugins/script_text_editor.cpp msgid "Pick Color" @@ -5003,7 +4556,7 @@ msgstr "Ausschneiden" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Copy" msgstr "Kopieren" @@ -5022,9 +4575,8 @@ msgid "Move Down" msgstr "Schiebe herunter" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Delete Line" -msgstr "Punk löschen" +msgstr "Linie löschen" #: editor/plugins/script_text_editor.cpp msgid "Indent Left" @@ -5267,10 +4819,6 @@ msgid "View Plane Transform." msgstr "Zeige Flächentransformation." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Scaling to %s%%." -msgstr "Skaliere auf %s%%." - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." msgstr "Rotiere %s Grad." @@ -5287,10 +4835,6 @@ msgid "Top View." msgstr "Sicht von oben." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Top" -msgstr "Oben" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "Sicht von hinten." @@ -5391,9 +4935,8 @@ msgid "Audio Listener" msgstr "Audiosenke" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Doppler Enable" -msgstr "Aktivieren" +msgstr "Dopplereffekt aktivieren" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Left" @@ -5424,7 +4967,6 @@ msgid "Freelook Speed Modifier" msgstr "Freisicht Geschwindigkeitsregler" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "preview" msgstr "Vorschau" @@ -5433,17 +4975,18 @@ msgid "XForm Dialog" msgstr "Transformationsdialog" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Select Mode (Q)\n" -msgstr "Auswahlmodus" +msgstr "Auswahlmodus (Q)\n" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "" "Drag: Rotate\n" "Alt+Drag: Move\n" "Alt+RMB: Depth list selection" -msgstr "Alt+Rechtsklick: Listenauswahl nach Tiefe" +msgstr "" +"Ziehen: Rotieren\n" +"Alt+Ziehen: Verschieben\n" +"Alt+RMT: Tiefenauswahl" #: editor/plugins/spatial_editor_plugin.cpp msgid "Move Mode (W)" @@ -5522,6 +5065,10 @@ msgid "Transform" msgstr "Transformation" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Configure Snap.." +msgstr "Einrasten konfigurieren.." + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Local Coords" msgstr "Lokale Koordinaten" @@ -5667,6 +5214,10 @@ msgid "Speed (FPS):" msgstr "Geschwindigkeit (FPS):" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Loop" +msgstr "Wiederholung" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animation Frames" msgstr "Animationsframes" @@ -5679,21 +5230,22 @@ msgid "Insert Empty (After)" msgstr "Empty einfügen (danach)" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Up" -msgstr "Hoch" +#, fuzzy +msgid "Move (Before)" +msgstr "Node(s) verschieben" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Down" -msgstr "Herunter" +#, fuzzy +msgid "Move (After)" +msgstr "nach links" #: editor/plugins/style_box_editor_plugin.cpp msgid "StyleBox Preview:" msgstr "StyleBox-Vorschau:" #: editor/plugins/texture_region_editor_plugin.cpp -#, fuzzy msgid "Set Region Rect" -msgstr "Skalierungsbegrenzungseditor" +msgstr "Bereichsrechteck setzen" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Snap Mode:" @@ -5753,14 +5305,12 @@ msgid "Remove Item" msgstr "Entferne Element" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All Items" -msgstr "Entferne Klassen-Element" +msgstr "Alle Elemente entfernen" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All" -msgstr "Entfernen" +msgstr "Alles entfernen" #: editor/plugins/theme_editor_plugin.cpp msgid "Theme" @@ -5848,31 +5398,32 @@ msgid "Style" msgstr "Stil" #: editor/plugins/theme_editor_plugin.cpp +msgid "Font" +msgstr "Schriftart" + +#: editor/plugins/theme_editor_plugin.cpp msgid "Color" msgstr "Farbe" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Erase Selection" -msgstr "Lösche Auswahl" +msgstr "Auswahl löschen" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" msgstr "Zeichne TileMap" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Line Draw" -msgstr "Linear" +msgstr "Linie zeichnen" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Rectangle Paint" -msgstr "" +msgstr "Rechteck zeichnen" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Bucket Fill" -msgstr "Eimer" +msgstr "Fülleimer" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Erase TileMap" @@ -5899,8 +5450,9 @@ msgid "Mirror Y" msgstr "Y-Koordinaten spiegeln" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Bucket" -msgstr "Eimer" +#, fuzzy +msgid "Paint Tile" +msgstr "Zeichne TileMap" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Pick Tile" @@ -5963,6 +5515,11 @@ msgid "Delete preset '%s'?" msgstr "Vorlage ‚%s‘ löschen?" #: editor/project_export.cpp +#, fuzzy +msgid "Export templates for this platform are missing/corrupted: " +msgstr "Export-Templates für diese Systeme fehlen:" + +#: editor/project_export.cpp msgid "Presets" msgstr "Vorlagen" @@ -6017,18 +5574,16 @@ msgid "Make Patch" msgstr "Erstelle Patch" #: editor/project_export.cpp -#, fuzzy msgid "Features" -msgstr "Textur" +msgstr "Funktionen" #: editor/project_export.cpp msgid "Custom (comma-separated):" -msgstr "" +msgstr "Benutzerdefiniert (komma-separiert):" #: editor/project_export.cpp -#, fuzzy msgid "Feature List:" -msgstr "Methodenliste:" +msgstr "Funktionalitätsliste:" #: editor/project_export.cpp msgid "Export PCK/Zip" @@ -6039,30 +5594,61 @@ msgid "Export templates for this platform are missing:" msgstr "Export-Templates für diese Systeme fehlen:" #: editor/project_export.cpp +#, fuzzy +msgid "Export templates for this platform are missing/corrupted:" +msgstr "Export-Templates für diese Systeme fehlen:" + +#: editor/project_export.cpp msgid "Export With Debug" msgstr "Exportiere mit Debuginformationen" #: editor/project_manager.cpp -msgid "Invalid project path, the path must exist!" -msgstr "Ungültiger Projektpfad, der Pfad muss existieren!" +#, fuzzy +msgid "The path does not exists." +msgstr "Datei existiert nicht." + +#: editor/project_manager.cpp +#, fuzzy +msgid "Please choose a 'project.godot' file." +msgstr "Bitte außerhalb des Projektordners exportieren!" #: editor/project_manager.cpp -msgid "Invalid project path, project.godot must not exist." -msgstr "Ungültiger Projektpfad, project.godot darf nicht existieren." +msgid "" +"Your project will be created in a non empty folder (you might want to create " +"a new folder)." +msgstr "" #: editor/project_manager.cpp -msgid "Invalid project path, project.godot must exist." -msgstr "Ungültiger Projektpfad, project.godot muss existieren." +msgid "Please choose a folder that does not contain a 'project.godot' file." +msgstr "" #: editor/project_manager.cpp msgid "Imported Project" msgstr "Importiertes Projekt" #: editor/project_manager.cpp +msgid " " +msgstr "" + +#: editor/project_manager.cpp +msgid "It would be a good idea to name your project." +msgstr "" + +#: editor/project_manager.cpp msgid "Invalid project path (changed anything?)." msgstr "Ungültiger Projektpfad (etwas geändert?)." #: editor/project_manager.cpp +#, fuzzy +msgid "Couldn't get project.godot in project path." +msgstr "Konnte project.godot im Projektpfad nicht erzeugen." + +#: editor/project_manager.cpp +#, fuzzy +msgid "Couldn't edit project.godot in project path." +msgstr "Konnte project.godot im Projektpfad nicht erzeugen." + +#: editor/project_manager.cpp msgid "Couldn't create project.godot in project path." msgstr "Konnte project.godot im Projektpfad nicht erzeugen." @@ -6071,38 +5657,49 @@ msgid "The following files failed extraction from package:" msgstr "Die folgenden Dateien ließen sich nicht aus dem Paket extrahieren:" #: editor/project_manager.cpp +#, fuzzy +msgid "Rename Project" +msgstr "Unbenanntes Projekt" + +#: editor/project_manager.cpp +#, fuzzy +msgid "Couldn't get project.godot in the project path." +msgstr "Konnte project.godot im Projektpfad nicht erzeugen." + +#: editor/project_manager.cpp +msgid "New Game Project" +msgstr "Neues Spiel" + +#: editor/project_manager.cpp msgid "Import Existing Project" msgstr "Existierendes Projekt importieren" #: editor/project_manager.cpp -msgid "Project Path (Must Exist):" -msgstr "Projektpfad (muss existieren):" +msgid "Create New Project" +msgstr "Erstelle neues Projekt" + +#: editor/project_manager.cpp +msgid "Install Project:" +msgstr "Installiere Projekt:" #: editor/project_manager.cpp msgid "Project Name:" msgstr "Projektname:" #: editor/project_manager.cpp -msgid "Create New Project" -msgstr "Erstelle neues Projekt" +#, fuzzy +msgid "Create folder" +msgstr "Ordner erstellen" #: editor/project_manager.cpp msgid "Project Path:" msgstr "Projektpfad:" #: editor/project_manager.cpp -msgid "Install Project:" -msgstr "Installiere Projekt:" - -#: editor/project_manager.cpp msgid "Browse" msgstr "Durchstöbern" #: editor/project_manager.cpp -msgid "New Game Project" -msgstr "Neues Spiel" - -#: editor/project_manager.cpp msgid "That's a BINGO!" msgstr "Aber klar :-) !" @@ -6111,24 +5708,31 @@ msgid "Unnamed Project" msgstr "Unbenanntes Projekt" #: editor/project_manager.cpp +#, fuzzy +msgid "Can't open project" +msgstr "Projekt kann nicht ausgeführt werden" + +#: editor/project_manager.cpp msgid "Are you sure to open more than one project?" msgstr "Sollen wirklich mehrere Projekte geöffnet werden?" #: editor/project_manager.cpp -#, fuzzy msgid "" "Can't run project: no main scene defined.\n" "Please edit the project and set the main scene in \"Project Settings\" under " "the \"Application\" category." msgstr "" -"Es ist keine Hauptszene definiert worden.\n" -"Wähle eine in den Projekteinstellungen unter der Kategorie „Anwendung“." +"Projekt kann nicht ausgeführt werden: Keine Hauptszene festgelegt.\n" +"In den Projekteinstellungen unter der Kategorie „Anwendung“ kann die " +"Hauptszene festgelegt werden." #: editor/project_manager.cpp msgid "" "Can't run project: Assets need to be imported.\n" "Please edit the project to trigger the initial import." msgstr "" +"Projekt kann nicht ausgeführt werden: Assets müssen importiert werden.\n" +"Das Projekt muss eingestellt werden einen ersten Import einzuleiten." #: editor/project_manager.cpp msgid "Are you sure to run more than one project?" @@ -6151,10 +5755,6 @@ msgid "Project List" msgstr "Projektliste" #: editor/project_manager.cpp -msgid "Run" -msgstr "Ausführen" - -#: editor/project_manager.cpp msgid "Scan" msgstr "Scannen" @@ -6175,9 +5775,8 @@ msgid "Exit" msgstr "Verlassen" #: editor/project_manager.cpp -#, fuzzy msgid "Can't run project" -msgstr "Kann nicht verbinden." +msgstr "Projekt kann nicht ausgeführt werden" #: editor/project_settings_editor.cpp msgid "Key " @@ -6212,17 +5811,14 @@ msgid "Add Input Action Event" msgstr "Eingabeaktionsereignis hinzufügen" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Meta+" msgstr "Meta+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Shift+" msgstr "Umschalt+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Alt+" msgstr "Alt+" @@ -6280,16 +5876,14 @@ msgid "Change" msgstr "Ändern" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Joypad Axis Index:" msgstr "Joystickachsen-Index:" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Axis" msgstr "Achse" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Joypad Button Index:" msgstr "Joysticktasten-Index:" @@ -6305,57 +5899,64 @@ msgstr "Lösche Eingabeaktionsereignis" msgid "Add Event" msgstr "Ereignis hinzufügen" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Device" msgstr "Gerät" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Button" msgstr "Schaltfläche" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Left Button." msgstr "Linke Taste." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Right Button." msgstr "Rechte Taste." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Middle Button." msgstr "Mittlere Taste." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Up." msgstr "Mausrad hoch." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Down." msgstr "Mausrad runter." #: editor/project_settings_editor.cpp -#, fuzzy msgid "Add Global Property" -msgstr "Getter-Eigenschaft hinzufügen" +msgstr "Globale Eigenschaft hinzufügen" #: editor/project_settings_editor.cpp -msgid "Select an setting item first!" -msgstr "" +#, fuzzy +msgid "Select a setting item first!" +msgstr "Ein Einstellungspunkt muss zuerst ausgewählt werden!" #: editor/project_settings_editor.cpp -#, fuzzy msgid "No property '" -msgstr "Eigenschaft:" +msgstr "Keine Eigenschaft ‚" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Setting '" -msgstr "Einstellungen" +msgstr "Einstellung ‚" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Delete Item" -msgstr "Eingang löschen" +msgstr "Eintrag löschen" + +#: editor/project_settings_editor.cpp +#, fuzzy +msgid "Can't contain '/' or ':'" +msgstr "Kann nicht zu Host verbinden:" + +#: editor/project_settings_editor.cpp +#, fuzzy +msgid "Already existing" +msgstr "Persistente an- und ausschalten" #: editor/project_settings_editor.cpp msgid "Error saving settings." @@ -6367,7 +5968,7 @@ msgstr "Einstellungen gespeichert OK." #: editor/project_settings_editor.cpp msgid "Override for Feature" -msgstr "" +msgstr "Für Funktion überschreiben" #: editor/project_settings_editor.cpp msgid "Add Translation" @@ -6411,7 +6012,7 @@ msgstr "Eigenschaft:" #: editor/project_settings_editor.cpp msgid "Override For.." -msgstr "" +msgstr "Überschreiben für.." #: editor/project_settings_editor.cpp msgid "Input Map" @@ -6498,26 +6099,34 @@ msgid "Assign" msgstr "Zuweisen" #: editor/property_editor.cpp -#, fuzzy msgid "Select Node" -msgstr "Wähle ein Node" +msgstr "Node auswählen" #: editor/property_editor.cpp msgid "New Script" msgstr "Neues Skript" #: editor/property_editor.cpp +#, fuzzy +msgid "Make Unique" +msgstr "Knochen erstellen" + +#: editor/property_editor.cpp msgid "Show in File System" msgstr "Im Dateisystem anzeigen" #: editor/property_editor.cpp +#, fuzzy +msgid "Convert To %s" +msgstr "Umwandeln zu.." + +#: editor/property_editor.cpp msgid "Error loading file: Not a resource!" msgstr "Fehler beim Laden der Datei: Keine Ressource!" #: editor/property_editor.cpp -#, fuzzy msgid "Selected node is not a Viewport!" -msgstr "Selektiere Node(s) für den Import" +msgstr "Ausgewähltes Node ist kein Viewport!" #: editor/property_editor.cpp msgid "Pick a Node" @@ -6548,6 +6157,11 @@ msgid "Select Property" msgstr "Eigenschaft auswählen" #: editor/property_selector.cpp +#, fuzzy +msgid "Select Virtual Method" +msgstr "Methode auswählen" + +#: editor/property_selector.cpp msgid "Select Method" msgstr "Methode auswählen" @@ -6576,26 +6190,6 @@ msgstr "Behalte globale Transformation" msgid "Reparent" msgstr "Umhängen" -#: editor/resources_dock.cpp -msgid "Create New Resource" -msgstr "Erstelle neue Ressource" - -#: editor/resources_dock.cpp -msgid "Open Resource" -msgstr "Ressource öffnen" - -#: editor/resources_dock.cpp -msgid "Save Resource" -msgstr "Ressource speichern" - -#: editor/resources_dock.cpp -msgid "Resource Tools" -msgstr "Ressourcenwerkzeuge" - -#: editor/resources_dock.cpp -msgid "Make Local" -msgstr "Lokal machen" - #: editor/run_settings_dialog.cpp msgid "Run Mode:" msgstr "Ausführungsmodus:" @@ -6728,14 +6322,6 @@ msgid "Sub-Resources:" msgstr "Unter-Ressourcen:" #: editor/scene_tree_dock.cpp -msgid "Edit Groups" -msgstr "Gruppen bearbeiten" - -#: editor/scene_tree_dock.cpp -msgid "Edit Connections" -msgstr "Verbindungen bearbeiten" - -#: editor/scene_tree_dock.cpp msgid "Clear Inheritance" msgstr "Leere Vererbung" @@ -6796,9 +6382,8 @@ msgstr "" "kein Root-Node existiert." #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Filter nodes" -msgstr "Filter" +msgstr "Nodes filtern" #: editor/scene_tree_dock.cpp msgid "Attach a new or existing script for the selected node." @@ -6903,9 +6488,8 @@ msgid "Select a Node" msgstr "Wähle ein Node" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Error loading template '%s'" -msgstr "Fehler beim Laden des Bilds:" +msgstr "Fehler beim Laden der Vorlage ‚%s‘" #: editor/script_create_dialog.cpp msgid "Error - Could not create script in filesystem." @@ -6932,6 +6516,15 @@ msgid "Invalid base path" msgstr "Ungültiger Pfad" #: editor/script_create_dialog.cpp +msgid "Directory of the same name exists" +msgstr "" + +#: editor/script_create_dialog.cpp +#, fuzzy +msgid "File exists, will be reused" +msgstr "Datei existiert bereits. Überschreiben?" + +#: editor/script_create_dialog.cpp msgid "Invalid extension" msgstr "Ungültige Erweiterung" @@ -6972,6 +6565,10 @@ msgid "Load existing script file" msgstr "Lade bestehende Skriptdatei" #: editor/script_create_dialog.cpp +msgid "Language" +msgstr "Sprache" + +#: editor/script_create_dialog.cpp msgid "Inherits" msgstr "Erbt" @@ -7012,6 +6609,10 @@ msgid "Function:" msgstr "Funktion:" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Errors" msgstr "Fehler" @@ -7092,6 +6693,10 @@ msgid "Type" msgstr "Art" #: editor/script_editor_debugger.cpp +msgid "Format" +msgstr "Format" + +#: editor/script_editor_debugger.cpp msgid "Usage" msgstr "Nutzung" @@ -7125,7 +6730,7 @@ msgstr "Ändere Lichtradius" #: editor/spatial_editor_gizmos.cpp msgid "Change AudioStreamPlayer3D Emission Angle" -msgstr "" +msgstr "Emissionswinkel für AudioStreamPlayer3D ändern" #: editor/spatial_editor_gizmos.cpp msgid "Change Camera FOV" @@ -7168,13 +6773,31 @@ msgstr "Ändere Partikel AABB" msgid "Change Probe Extents" msgstr "Sondenausmaße ändern" +#: modules/gdnative/gd_native_library_editor.cpp +#, fuzzy +msgid "Library" +msgstr "MeshLibrary.." + +#: modules/gdnative/gd_native_library_editor.cpp +#, fuzzy +msgid "Status" +msgstr "Status:" + +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Libraries: " +msgstr "" + +#: modules/gdnative/register_types.cpp +msgid "GDNative" +msgstr "" + #: 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 Argument-Typ in convert()-Aufruf, TYPE_*-Konstanten benötigt." -#: modules/gdscript/gd_functions.cpp +#: modules/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "" @@ -7216,26 +6839,19 @@ msgstr "Ungültiges Instanz-Verzeichnisformat (ungültige Unterklasse)" #: modules/gdscript/gd_functions.cpp msgid "Object can't provide a length." -msgstr "" +msgstr "Objekt kann keine Länge vorweisen." #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Delete Selection" -msgstr "Ausgewähltes löschen" +msgstr "GridMap-Auswahl löschen" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Duplicate Selection" -msgstr "Auswahl duplizieren" - -#: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Paint" -msgstr "" +msgstr "GridMap-Auswahl duplizieren" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Snap View" -msgstr "Sicht von oben" +msgstr "Sicht einrasten" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Prev Level (%sDown Wheel)" @@ -7246,103 +6862,87 @@ msgid "Next Level (%sUp Wheel)" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Clip Disabled" -msgstr "Deaktiviert" +msgstr "Einrasten deaktiviert" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Clip Above" -msgstr "" +msgstr "Oben einrasten" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Clip Below" -msgstr "" +msgstr "Unten einrasten" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Edit X Axis" -msgstr "" +msgstr "X-Achse editieren" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Edit Y Axis" -msgstr "" +msgstr "Y-Achse editieren" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Edit Z Axis" -msgstr "" +msgstr "Z-Achse editieren" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Cursor Rotate X" -msgstr "Strg: Rotieren" +msgstr "X-Rotation am Mauszeiger" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Cursor Rotate Y" -msgstr "Strg: Rotieren" +msgstr "Y-Rotation am Mauszeiger" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Cursor Rotate Z" -msgstr "Strg: Rotieren" +msgstr "Z-Rotation am Mauszeiger" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Back Rotate X" -msgstr "" +msgstr "Rückwärts X-Rotation am Mauszeiger" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Back Rotate Y" -msgstr "" +msgstr "Rückwärts Y-Rotation am Mauszeiger" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Back Rotate Z" -msgstr "" +msgstr "Rückwärts Z-Rotation am Mauszeiger" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Clear Rotation" -msgstr "" +msgstr "Rotation am Mauszeiger zurücksetzen" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Create Area" -msgstr "Neu erstellen" +msgstr "Bereich erzeugen" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Create Exterior Connector" -msgstr "Erstelle neues Projekt" +msgstr "Exterior-Connector erstellen" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Erase Area" -msgstr "Lösche TileMap" +msgstr "Bereich entfernen" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Selection -> Duplicate" -msgstr "Nur Auswahl" +msgstr "Auswahl → Duplizieren" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Selection -> Clear" -msgstr "Nur Auswahl" +msgstr "Auswahl → Löschen" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Settings" -msgstr "Einrasteinstellungen" +msgstr "GridMap-Einstellungen" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Pick Distance:" -msgstr "Instanz:" +msgstr "Auswahlradius:" -#: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy -msgid "Tiles" -msgstr " Dateien" - -#: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Areas" +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "Builds" msgstr "" #: modules/visual_script/visual_script.cpp @@ -7384,29 +6984,24 @@ msgid "Stack overflow with stack depth: " msgstr "Stack-Overflow mit Stack-Tiefe: " #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Signal Arguments" -msgstr "Signalparameter bearbeiten:" +msgstr "Signalparameter ändern" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Argument Type" -msgstr "Wertetyp des Arrays ändern" +msgstr "Parametertyp ändern" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Argument name" -msgstr "Ändere Eingabename" +msgstr "Parametername ändern" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Set Variable Default Value" -msgstr "Ändere Standardwert" +msgstr "Variablenstandardwert setzen" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Set Variable Type" -msgstr "Variable bearbeiten:" +msgstr "Variablentyp festlegen" #: modules/visual_script/visual_script_editor.cpp msgid "Functions:" @@ -7457,14 +7052,12 @@ msgid "Add Node" msgstr "Node hinzufügen" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Remove VisualScript Nodes" -msgstr "Ungültige Schlüsselbilder entfernen" +msgstr "VisualScript-Nodes entfernen" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Duplicate VisualScript Nodes" -msgstr "Dupliziere Graph-Node(s)" +msgstr "VisualScript-Nodes duplizieren" #: modules/visual_script/visual_script_editor.cpp msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature." @@ -7511,24 +7104,20 @@ msgid "Add Setter Property" msgstr "Setter-Eigenschaft hinzufügen" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Base Type" -msgstr "Typ ändern" +msgstr "Basistyp ändern" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Move Node(s)" -msgstr "Entferne Node(s)" +msgstr "Node(s) verschieben" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Remove VisualScript Node" -msgstr "Entferne Shader-Graph-Node" +msgstr "VisualScript-Node entfernen" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Connect Nodes" -msgstr "Verbinde mit Node:" +msgstr "Nodes verbinden" #: modules/visual_script/visual_script_editor.cpp msgid "Condition" @@ -7555,46 +7144,48 @@ msgid "Return" msgstr "Rückgabe" #: modules/visual_script/visual_script_editor.cpp +msgid "Call" +msgstr "Aufruf" + +#: modules/visual_script/visual_script_editor.cpp msgid "Get" msgstr "Abfragen" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy +msgid "Script already has function '%s'" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Input Value" -msgstr "Ändere Eingabename" +msgstr "Eingabewert ändern" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Can't copy the function node." -msgstr "Kann mit ‚..‘ nicht arbeiten" +msgstr "Das Function-Node kann nicht kopiert werden." #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Clipboard is empty!" -msgstr "Zwischenablage für Ressourcen ist leer!" +msgstr "Zwischenablage ist leer!" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Paste VisualScript Nodes" -msgstr "Nodes einfügen" +msgstr "VisualScript-Nodes einfügen" #: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "Funktion entfernen" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Edit Variable" -msgstr "Variable bearbeiten:" +msgstr "Variable bearbeiten" #: modules/visual_script/visual_script_editor.cpp msgid "Remove Variable" msgstr "Variable entfernen" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Edit Signal" -msgstr "bearbeite Signal:" +msgstr "Signal bearbeiten" #: modules/visual_script/visual_script_editor.cpp msgid "Remove Signal" @@ -7843,6 +7434,10 @@ msgid "" "by the physics engine when running.\n" "Change the size in children collision shapes instead." msgstr "" +"Größenänderungen von RigidBody2D (in den Character- oder Rigid-Modi) werden " +"überschrieben wenn die Physikengine läuft.\n" +"Die Größe der entsprechenden Collisionshape-Unterobjekte sollte stattdessen " +"geändert werden." #: scene/2d/remote_transform_2d.cpp msgid "Path property must point to a valid Node2D node to work." @@ -7876,31 +7471,35 @@ msgstr "" #: scene/3d/arvr_nodes.cpp msgid "ARVRCamera must have an ARVROrigin node as its parent" -msgstr "" +msgstr "ARVRCamera braucht ein ARVROrigin-Node als Überobjekt" #: scene/3d/arvr_nodes.cpp msgid "ARVRController must have an ARVROrigin node as its parent" -msgstr "" +msgstr "ARVRController braucht ein ARVROrigin-Node als Überobjekt" #: scene/3d/arvr_nodes.cpp msgid "" "The controller id must not be 0 or this controller will not be bound to an " "actual controller" msgstr "" +"Die Controller-ID sollte nicht null sein, sonst wird der Controller nicht an " +"einen echten Controller gebunden" #: scene/3d/arvr_nodes.cpp msgid "ARVRAnchor must have an ARVROrigin node as its parent" -msgstr "" +msgstr "ARVRAnchor braucht ein ARVROrigin-Node als Überobjekt" #: scene/3d/arvr_nodes.cpp msgid "" "The anchor id must not be 0 or this anchor will not be bound to an actual " "anchor" msgstr "" +"Die Anker-ID darf nicht null sein, sonst wird der Anker nicht an einen " +"echten Anker gebunden" #: scene/3d/arvr_nodes.cpp msgid "ARVROrigin requires an ARVRCamera child node" -msgstr "" +msgstr "ARVROrigin benötigt ein ARVRCamera-Unterobjekt" #: scene/3d/collision_polygon.cpp msgid "" @@ -7960,6 +7559,10 @@ msgid "" "the physics engine when running.\n" "Change the size in children collision shapes instead." msgstr "" +"Größenänderungen von RigidBody (in Character- oder Rigid-Modus) werden " +"überschrieben wenn die Physikengine läuft.\n" +"Die Größe der entsprechenden Collisionshape-Unterobjekte sollte stattdessen " +"geändert werden." #: scene/3d/remote_transform.cpp msgid "Path property must point to a valid Spatial node to work." @@ -7980,16 +7583,25 @@ msgstr "" "Eine SpriteFrames-Ressource muss in der ‚Frames‘-Eigenschaft erzeugt oder " "definiert werden, damit AnimatedSprite3D Einzelbilder anzeigen kann." +#: scene/3d/vehicle_body.cpp +msgid "" +"VehicleWheel serves to provide a wheel system to a VehicleBody. Please use " +"it as a child of a VehicleBody." +msgstr "" + #: scene/gui/color_picker.cpp -#, fuzzy msgid "Raw Mode" -msgstr "Schwenkmodus" +msgstr "Rohdatenmodus" #: scene/gui/color_picker.cpp msgid "Add current color as a preset" msgstr "Füge aktuelle Farbe als Vorlage hinzu" #: scene/gui/dialogs.cpp +msgid "Cancel" +msgstr "Abbrechen" + +#: scene/gui/dialogs.cpp msgid "Alert!" msgstr "Warnung!" @@ -7997,10 +7609,6 @@ msgstr "Warnung!" msgid "Please Confirm..." msgstr "Bitte bestätigen..." -#: scene/gui/input_action.cpp -msgid "Ctrl+" -msgstr "Strg+" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -8045,6 +7653,627 @@ msgstr "" "Eigenschaft ‚Render Target‘ des Viewports aktiviert und seine Textur " "irgendeinem Node zum Anzeigen zugewiesen werden." +#: scene/resources/dynamic_font.cpp +msgid "Error initializing FreeType." +msgstr "Fehler beim initialisieren von FreeType." + +#: scene/resources/dynamic_font.cpp +msgid "Unknown font format." +msgstr "Unbekanntes Schriftformat." + +#: scene/resources/dynamic_font.cpp +msgid "Error loading font." +msgstr "Fehler beim Laden der Schriftart." + +#: scene/resources/dynamic_font.cpp +msgid "Invalid font size." +msgstr "Ungültige Schriftgröße." + +#~ msgid "Method List For '%s':" +#~ msgstr "Methodenliste für '%s':" + +#~ msgid "Arguments:" +#~ msgstr "Argumente:" + +#~ msgid "Return:" +#~ msgstr "Rückgabe:" + +#~ msgid "Added:" +#~ msgstr "Hinzugefügt:" + +#~ msgid "Removed:" +#~ msgstr "Entfernt:" + +#~ msgid "Error saving atlas:" +#~ msgstr "Fehler beim speichern des Atlas:" + +#~ msgid "Could not save atlas subtexture:" +#~ msgstr "Atlas Untertextur konnte nicht gespeichert werden:" + +#~ msgid "Exporting for %s" +#~ msgstr "Exportiere für %s" + +#~ msgid "Setting Up.." +#~ msgstr "Bereite vor..." + +#~ msgid "Error loading scene." +#~ msgstr "Fehler beim laden der Szene." + +#~ msgid "Re-Import" +#~ msgstr "Neuimport" + +#~ msgid "Please wait for scan to complete." +#~ msgstr "Bitte warten bis Operation abgeschlossen ist." + +#~ msgid "Current scene must be saved to re-import." +#~ msgstr "Aktuelle Szene muss gespeichert sein um sie erneut zu importieren." + +#~ msgid "Save & Re-Import" +#~ msgstr "Speichern & neu importieren" + +#~ msgid "Re-Importing" +#~ msgstr "Importiere erneut" + +#~ msgid "Re-Import Changed Resources" +#~ msgstr "Veränderte Ressourcen neu importieren" + +#~ msgid "Loading Export Templates" +#~ msgstr "Lade Exportvorlagen" + +#~ msgid "" +#~ "\n" +#~ "Status: Needs Re-Import" +#~ msgstr "" +#~ "\n" +#~ "Status: Benötigt Neu-Import" + +#~ msgid "Same source and destination files, doing nothing." +#~ msgstr "Quell- und Zieldatei sind gleich, ignoriere Anweisung." + +#~ msgid "Target file exists, can't overwrite. Delete first." +#~ msgstr "" +#~ "Zieldatei existiert bereits und kann nicht überschrieben werden. Ggf " +#~ "manuell löschen." + +#~ msgid "Same source and destination paths, doing nothing." +#~ msgstr "Quell- und Zielpfad sind gleich, ignoriere Anweisung." + +#~ msgid "Can't move directories to within themselves." +#~ msgstr "Verzeichnisse lassen sich nicht in sich selbst verschieben." + +#~ msgid "Can't rename deps for:\n" +#~ msgstr "Abhängigkeiten können nicht umbenannt werden für:\n" + +#~ msgid "Error moving file:\n" +#~ msgstr "Fehler beim Dateiverschieben:\n" + +#~ msgid "Pick New Name and Location For:" +#~ msgstr "Wähle neuen Namen und Ort für:" + +#~ msgid "No files selected!" +#~ msgstr "Keine Dateien ausgewählt!" + +#~ msgid "Info" +#~ msgstr "Info" + +#~ msgid "Re-Import.." +#~ msgstr "Neuimport.." + +#~ msgid "No bit masks to import!" +#~ msgstr "Keine Bitmasken zu importieren!" + +#~ msgid "Target path is empty." +#~ msgstr "Zielpfad ist leer." + +#~ msgid "Target path must be a complete resource path." +#~ msgstr "Zielpfad muss ein kompletter Ressourcenpfad sein." + +#~ msgid "Target path must exist." +#~ msgstr "Zielpfad muss existieren." + +#~ msgid "Save path is empty!" +#~ msgstr "Speicherpfad ist leer!" + +#~ msgid "Import BitMasks" +#~ msgstr "BitMasks importieren" + +#~ msgid "Source Texture(s):" +#~ msgstr "Quelltextur(en):" + +#~ msgid "Target Path:" +#~ msgstr "Zielpfad:" + +#~ msgid "Accept" +#~ msgstr "Akzeptieren" + +#~ msgid "Bit Mask" +#~ msgstr "Bitmaske" + +#~ msgid "No source font file!" +#~ msgstr "Keine Quellschriftart-Datei gefunden!" + +#~ msgid "No target font resource!" +#~ msgstr "Keine Zielschriftart-Ressource!" + +#~ msgid "" +#~ "Invalid file extension.\n" +#~ "Please use .font." +#~ msgstr "" +#~ "Ungültige Dateiendung.\n" +#~ "Nutze .font als Dateiendung." + +#~ msgid "Couldn't save font." +#~ msgstr "Schriftart konnte nicht gespeichert werden." + +#~ msgid "Source Font:" +#~ msgstr "Quellschriftart:" + +#~ msgid "Source Font Size:" +#~ msgstr "Quellschriftgröße:" + +#~ msgid "Dest Resource:" +#~ msgstr "Ziel-Ressource:" + +#~ msgid "The quick brown fox jumps over the lazy dog." +#~ msgstr "Franz jagt im komplett verwahrlosten Taxi quer durch Bayern." + +#~ msgid "Test:" +#~ msgstr "Test:" + +#~ msgid "Options:" +#~ msgstr "Optionen:" + +#~ msgid "Font Import" +#~ msgstr "Schriftart importieren" + +#~ msgid "" +#~ "This file is already a Godot font file, please supply a BMFont type file " +#~ "instead." +#~ msgstr "" +#~ "Diese Datei ist bereits eine Godot Schriftart. Bitte stattdessen eine " +#~ "Datei im BMFont-Format angeben." + +#~ msgid "Failed opening as BMFont file." +#~ msgstr "Öffnen der BMFont-Datei fehlgeschlagen." + +#~ msgid "Invalid font custom source." +#~ msgstr "Eigene Schriftart-Quelle ist ungültig." + +#~ msgid "No meshes to import!" +#~ msgstr "Keine Meshes zu importieren!" + +#~ msgid "Single Mesh Import" +#~ msgstr "Einzelnes Mesh importieren" + +#~ msgid "Source Mesh(es):" +#~ msgstr "Quell Mesh(es):" + +#~ msgid "Surface %d" +#~ msgstr "Oberfläche %d" + +#~ msgid "No samples to import!" +#~ msgstr "Keine Samples zu importieren!" + +#~ msgid "Import Audio Samples" +#~ msgstr "Audio-Samples importieren" + +#~ msgid "Source Sample(s):" +#~ msgstr "Quell Sample(s):" + +#~ msgid "Audio Sample" +#~ msgstr "Audio-Sample" + +#~ msgid "New Clip" +#~ msgstr "Neuer Clip" + +#~ msgid "Flags" +#~ msgstr "Flags" + +#~ msgid "Bake FPS:" +#~ msgstr "FPS fixieren:" + +#~ msgid "Optimizer" +#~ msgstr "Optimierung" + +#~ msgid "Max Linear Error" +#~ msgstr "Obere lineare Fehlergrenze" + +#~ msgid "Max Angular Error" +#~ msgstr "Obere Winkelfehlergrenze" + +#~ msgid "Max Angle" +#~ msgstr "Maximaler Winkel" + +#~ msgid "Clips" +#~ msgstr "Ausschnitte" + +#~ msgid "Start(s)" +#~ msgstr "Start" + +#~ msgid "End(s)" +#~ msgstr "Ende" + +#~ msgid "Filters" +#~ msgstr "Filter" + +#~ msgid "Source path is empty." +#~ msgstr "Quellpfad ist leer." + +#~ msgid "Couldn't load post-import script." +#~ msgstr "Post-Import Skript konnte nicht geladen werden." + +#~ msgid "Invalid/broken script for post-import." +#~ msgstr "Ungültiges / Fehlerhaftes Skript für Post-Import." + +#~ msgid "Error importing scene." +#~ msgstr "Fehler beim importieren der Szene." + +#~ msgid "Import 3D Scene" +#~ msgstr "3D-Szene importieren" + +#~ msgid "Source Scene:" +#~ msgstr "Quellszene:" + +#~ msgid "Same as Target Scene" +#~ msgstr "Dieselbe wie die Zielszene" + +#~ msgid "Shared" +#~ msgstr "Geteilt" + +#~ msgid "Target Texture Folder:" +#~ msgstr "Ziel-Texturenordner:" + +#~ msgid "Post-Process Script:" +#~ msgstr "Post-Process Skript:" + +#~ msgid "Custom Root Node Type:" +#~ msgstr "Angepasster Root-Node-Typ:" + +#~ msgid "Auto" +#~ msgstr "Auto" + +#~ msgid "Root Node Name:" +#~ msgstr "Name des Root-Node:" + +#~ msgid "The Following Files are Missing:" +#~ msgstr "Die folgenden Dateien fehlen:" + +#~ msgid "Import Anyway" +#~ msgstr "Trotzdem importieren" + +#~ msgid "Import & Open" +#~ msgstr "Importieren & Öffnen" + +#~ msgid "Edited scene has not been saved, open imported scene anyway?" +#~ msgstr "" +#~ "Bearbeitete Szene wurde nicht gespeichert, trotzdem importierte Szene " +#~ "öffnen?" + +#~ msgid "Import Image:" +#~ msgstr "Bild importieren:" + +#~ msgid "Couldn't localize path: %s (already local)" +#~ msgstr "Pfad konnte nicht gefunden werden: %s (bereits lokal)" + +#~ msgid "3D Scene Animation" +#~ msgstr "3D-Szenenanimation" + +#~ msgid "Uncompressed" +#~ msgstr "Unkomprimiert" + +#~ msgid "Compress Lossless (PNG)" +#~ msgstr "Verlustfrei komprimieren (PNG)" + +#~ msgid "Compress Lossy (WebP)" +#~ msgstr "Verlustbehaftet komprimieren (WebP)" + +#~ msgid "Compress (VRAM)" +#~ msgstr "Komprimieren (VRAM)" + +#~ msgid "Texture Format" +#~ msgstr "Texturformat" + +#~ msgid "Texture Compression Quality (WebP):" +#~ msgstr "Texturkompressionsqualität (WebP):" + +#~ msgid "Texture Options" +#~ msgstr "Textureinstellungen" + +#~ msgid "Please specify some files!" +#~ msgstr "Bitte gib einige Dateien an!" + +#~ msgid "At least one file needed for Atlas." +#~ msgstr "Es wird zumindest eine Datei für den Atlas benötigt." + +#~ msgid "Error importing:" +#~ msgstr "Fehler beim importieren:" + +#~ msgid "Only one file is required for large texture." +#~ msgstr "Es ist nur eine Datei für eine große Textur erforderlich." + +#~ msgid "Max Texture Size:" +#~ msgstr "Maximale Texturgröße:" + +#~ msgid "Import Textures for Atlas (2D)" +#~ msgstr "Texturen für Atlas (2D) importieren" + +#~ msgid "Cell Size:" +#~ msgstr "Zellgröße:" + +#~ msgid "Large Texture" +#~ msgstr "Große Textur" + +#~ msgid "Import Large Textures (2D)" +#~ msgstr "Große Texturen (2D) importieren" + +#~ msgid "Source Texture" +#~ msgstr "Quelltextur" + +#~ msgid "Base Atlas Texture" +#~ msgstr "Basis-Atlastextur" + +#~ msgid "Source Texture(s)" +#~ msgstr "Quelltextur(en)" + +#~ msgid "Import Textures for 2D" +#~ msgstr "Texturen für 2D importieren" + +#~ msgid "Import Textures for 3D" +#~ msgstr "Texturen für 3D importieren" + +#~ msgid "Import Textures" +#~ msgstr "Texturen importieren" + +#~ msgid "2D Texture" +#~ msgstr "2D-Textur" + +#~ msgid "3D Texture" +#~ msgstr "3D-Textur" + +#~ msgid "Atlas Texture" +#~ msgstr "Atlastextur" + +#~ msgid "" +#~ "NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files " +#~ "to the project." +#~ msgstr "" +#~ "MERKE: Das importieren von 2D Texturen ist nicht zwingend notwendig. " +#~ "Kopiere einfach png/jpg Dateien in das Projekt." + +#~ msgid "Crop empty space." +#~ msgstr "Leere Bereiche beschneiden." + +#~ msgid "Texture" +#~ msgstr "Textur" + +#~ msgid "Import Large Texture" +#~ msgstr "Große Textur importieren" + +#~ msgid "Load Source Image" +#~ msgstr "Quellbild laden" + +#~ msgid "Slicing" +#~ msgstr "Teile" + +#~ msgid "Saving" +#~ msgstr "Speichere" + +#~ msgid "Couldn't save large texture:" +#~ msgstr "Große Textur konnte nicht gespeichert werden:" + +#~ msgid "Build Atlas For:" +#~ msgstr "Erstelle Atlas für:" + +#~ msgid "Loading Image:" +#~ msgstr "Lade Bild:" + +#~ msgid "Couldn't load image:" +#~ msgstr "Bild konnte nicht geladen werden:" + +#~ msgid "Converting Images" +#~ msgstr "Bilder werden konvertiert" + +#~ msgid "Cropping Images" +#~ msgstr "Bilder werden beschnitten" + +#~ msgid "Blitting Images" +#~ msgstr "Blitting Bilder" + +#~ msgid "Couldn't save atlas image:" +#~ msgstr "Atlas-Bild konnte nicht gespeichert werden:" + +#~ msgid "Couldn't save converted texture:" +#~ msgstr "Konvertierte Textur konnte nicht gespeichert werden:" + +#~ msgid "Invalid source!" +#~ msgstr "Fehlerhafte Quelle!" + +#~ msgid "Invalid translation source!" +#~ msgstr "Fehlerhafte Übersetzungsquelle!" + +#~ msgid "Column" +#~ msgstr "Reihe" + +#~ msgid "No items to import!" +#~ msgstr "Keine Elemente zu importieren!" + +#~ msgid "No target path!" +#~ msgstr "Kein Zielpfad!" + +#~ msgid "Import Translations" +#~ msgstr "Übersetzungen importieren" + +#~ msgid "Couldn't import!" +#~ msgstr "Konnte nicht importiert werden!" + +#~ msgid "Import Translation" +#~ msgstr "Übersetzung importieren" + +#~ msgid "Source CSV:" +#~ msgstr "Quell-CSV:" + +#~ msgid "Ignore First Row" +#~ msgstr "Erste Zeile ignorieren" + +#~ msgid "Compress" +#~ msgstr "Komprimieren" + +#~ msgid "Add to Project (project.godot)" +#~ msgstr "Zu Projekt hinzufügen (project.godot)" + +#~ msgid "Import Languages:" +#~ msgstr "Sprachen importieren:" + +#~ msgid "Translation" +#~ msgstr "Übersetzung" + +#~ msgid "Parsing %d Triangles:" +#~ msgstr "Analysiere %d Dreiecke:" + +#~ msgid "Triangle #" +#~ msgstr "Dreieck #" + +#~ msgid "Light Baker Setup:" +#~ msgstr "Light-Baker einrichten:" + +#~ msgid "Fixing Lights" +#~ msgstr "Fixiere Lampen" + +#~ msgid "Making BVH" +#~ msgstr "Erstelle BVH" + +#~ msgid "Transfer to Lightmaps:" +#~ msgstr "übertrage zu Lightmaps:" + +#~ msgid "Allocating Texture #" +#~ msgstr "Zuweisen von Textur #" + +#~ msgid "Baking Triangle #" +#~ msgstr "Baking von Dreieck #" + +#~ msgid "Post-Processing Texture #" +#~ msgstr "Nachbearbeiten von Textur #" + +#~ msgid "Reset the lightmap octree baking process (start over)." +#~ msgstr "Lightmap-Octree-Backing-Prozess zurücksetzen (neu starten)." + +#~ msgid "Zoom (%):" +#~ msgstr "Vergrößerung (%):" + +#~ msgid "Skeleton.." +#~ msgstr "Skelett.." + +#~ msgid "Zoom Reset" +#~ msgstr "Vergrößerung zurücksetzen" + +#~ msgid "Zoom Set.." +#~ msgstr "Vergrößerung setzen.." + +#~ msgid "Set a Value" +#~ msgstr "Einen Wert setzen" + +#~ msgid "Snap (Pixels):" +#~ msgstr "Einrasten (Pixel):" + +#~ msgid "Parse BBCode" +#~ msgstr "BBCode parsen" + +#~ msgid "Length:" +#~ msgstr "Länge:" + +#~ msgid "Open Sample File(s)" +#~ msgstr "Audiodatei(en) öffnen" + +#~ msgid "ERROR: Couldn't load sample!" +#~ msgstr "Fehler: Konnte Audio nicht laden!" + +#~ msgid "Add Sample" +#~ msgstr "Sample hinzufügen" + +#~ msgid "Rename Sample" +#~ msgstr "Sample umbenennen" + +#~ msgid "Delete Sample" +#~ msgstr "Sample löschen" + +#~ msgid "16 Bits" +#~ msgstr "16 Bit" + +#~ msgid "8 Bits" +#~ msgstr "8 Bit" + +#~ msgid "Stereo" +#~ msgstr "Stereo" + +#~ msgid "Mono" +#~ msgstr "Mono" + +#~ msgid "Pitch" +#~ msgstr "Tonhöhe" + +#~ msgid "Window" +#~ msgstr "Fenster" + +#~ msgid "Move Right" +#~ msgstr "nach rechts" + +#~ msgid "Scaling to %s%%." +#~ msgstr "Skaliere auf %s%%." + +#~ msgid "Up" +#~ msgstr "Hoch" + +#~ msgid "Down" +#~ msgstr "Herunter" + +#~ msgid "Bucket" +#~ msgstr "Eimer" + +#~ msgid "Invalid project path, the path must exist!" +#~ msgstr "Ungültiger Projektpfad, der Pfad muss existieren!" + +#~ msgid "Invalid project path, project.godot must not exist." +#~ msgstr "Ungültiger Projektpfad, project.godot darf nicht existieren." + +#~ msgid "Invalid project path, project.godot must exist." +#~ msgstr "Ungültiger Projektpfad, project.godot muss existieren." + +#~ msgid "Project Path (Must Exist):" +#~ msgstr "Projektpfad (muss existieren):" + +#~ msgid "Create New Resource" +#~ msgstr "Erstelle neue Ressource" + +#~ msgid "Open Resource" +#~ msgstr "Ressource öffnen" + +#~ msgid "Save Resource" +#~ msgstr "Ressource speichern" + +#~ msgid "Resource Tools" +#~ msgstr "Ressourcenwerkzeuge" + +#~ msgid "Make Local" +#~ msgstr "Lokal machen" + +#~ msgid "Edit Groups" +#~ msgstr "Gruppen bearbeiten" + +#~ msgid "Edit Connections" +#~ msgstr "Verbindungen bearbeiten" + +#~ msgid "GridMap Paint" +#~ msgstr "GridMap zeichnen" + +#~ msgid "Tiles" +#~ msgstr "Kacheln" + +#~ msgid "Areas" +#~ msgstr "Bereiche" + +#~ msgid "Ctrl+" +#~ msgstr "Strg+" + #~ msgid "Close scene? (Unsaved changes will be lost)" #~ msgstr "Szene schließen? (Nicht gespeicherte Änderungen gehen verloren)" @@ -8058,9 +8287,6 @@ msgstr "" #~ msgid "Close Goto Prev. Scene" #~ msgstr "Schließen und zur letzten Szene wechseln" -#~ msgid "Expand to Parent" -#~ msgstr "Auf übergeordnetes Node ausdehnen" - #~ msgid "Del" #~ msgstr "Entfernen" @@ -8226,18 +8452,12 @@ msgstr "" #~ msgid "Save Translatable Strings" #~ msgstr "Speichere übersetzbare Zeichenketten" -#~ msgid "Translatable Strings.." -#~ msgstr "Übersetzbare Textbausteine.." - #~ msgid "Install Export Templates" #~ msgstr "Exportvorlagen installieren" #~ msgid "Edit Script Options" #~ msgstr "Skriptoptionen bearbeiten" -#~ msgid "Please export outside the project folder!" -#~ msgstr "Bitte außerhalb des Projektordners exportieren!" - #~ msgid "Error exporting project!" #~ msgstr "Fehler beim Exportieren des Projekts!" @@ -8296,18 +8516,12 @@ msgstr "" #~ msgid "Include" #~ msgstr "Einbeziehen" -#~ msgid "Change Image Group" -#~ msgstr "Ändere Bildergruppe" - #~ msgid "Group name can't be empty!" #~ msgstr "Gruppenname muss vorhanden sein!" #~ msgid "Invalid character in group name!" #~ msgstr "Ungültiges Zeichen in Gruppenname!" -#~ msgid "Group name already exists!" -#~ msgstr "Gruppenname existiert bereits!" - #~ msgid "Add Image Group" #~ msgstr "Füge Bildergruppe hinzu" @@ -8456,9 +8670,6 @@ msgstr "" #~ msgid "Lighting" #~ msgstr "Belichtung" -#~ msgid "Toggle Persisting" -#~ msgstr "Persistente an- und ausschalten" - #~ msgid "Global" #~ msgstr "Global" diff --git a/editor/translations/de_CH.po b/editor/translations/de_CH.po index 4e40c4c9bb..e01560fa8a 100644 --- a/editor/translations/de_CH.po +++ b/editor/translations/de_CH.po @@ -191,10 +191,9 @@ msgid "Create %d NEW tracks and insert keys?" msgstr "Erstelle %d in neuer Ebene inklusiv Bild?" #: editor/animation_editor.cpp editor/create_dialog.cpp -#: editor/editor_audio_buses.cpp +#: editor/editor_audio_buses.cpp editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp #: editor/plugins/mesh_instance_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp editor/project_manager.cpp #: editor/script_create_dialog.cpp msgid "Create" @@ -356,265 +355,6 @@ msgstr "" msgid "Change Array Value" msgstr "" -#: editor/asset_library_editor_plugin.cpp -msgid "Free" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp -msgid "Version:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Contents:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "View Files" -msgstr "Datei(en) öffnen" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_help.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp -msgid "Description:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -#: editor/project_manager.cpp -msgid "Install" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp -#: editor/connections_dialog.cpp editor/export_template_manager.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -#: editor/project_settings_editor.cpp editor/property_editor.cpp -#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Close" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve hostname:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Connection error, please try again." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't connect." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Can't connect to host:" -msgstr "Verbindung zu Node:" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response from host:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Request failed, return code:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Req. Failed." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Request failed, too many redirects" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Redirect Loop." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Bad download hash, assuming file has been tampered with." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Expected:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Got:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed sha256 hash check" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Asset Download Error:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -msgid "Success!" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Fetching:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Resolving.." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Connecting.." -msgstr "Connections editieren" - -#: editor/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Error making request" -msgstr "Szene kann nicht gespeichert werden." - -#: editor/asset_library_editor_plugin.cpp -msgid "Idle" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Retry" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Download Error" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Download for this asset is already in progress!" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "first" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "prev" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "next" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "last" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "All" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/property_selector.cpp editor/quick_open.cpp -#: editor/settings_config_dialog.cpp -msgid "Search:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Search" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/project_manager.cpp -msgid "Import" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Plugins" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Sort:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Reverse" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Category:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Site:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Official" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -msgid "Community" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Testing" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Assets ZIP File" -msgstr "" - -#: editor/call_dialog.cpp -msgid "Method List For '%s':" -msgstr "" - -#: editor/call_dialog.cpp modules/visual_script/visual_script_editor.cpp -msgid "Call" -msgstr "" - -#: editor/call_dialog.cpp -msgid "Method List:" -msgstr "" - -#: editor/call_dialog.cpp -msgid "Arguments:" -msgstr "" - -#: editor/call_dialog.cpp -msgid "Return:" -msgstr "" - #: editor/code_editor.cpp msgid "Go to Line" msgstr "" @@ -651,6 +391,14 @@ msgstr "" msgid "Selection Only" msgstr "" +#: editor/code_editor.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp +msgid "Search" +msgstr "" + #: editor/code_editor.cpp editor/editor_help.cpp msgid "Find" msgstr "" @@ -683,11 +431,11 @@ msgstr "" msgid "Skip" msgstr "" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom In" msgstr "" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom Out" msgstr "" @@ -755,6 +503,20 @@ msgstr "" msgid "Oneshot" msgstr "" +#: editor/connections_dialog.cpp editor/dependency_editor.cpp +#: editor/export_template_manager.cpp +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Close" +msgstr "" + #: editor/connections_dialog.cpp msgid "Connect" msgstr "" @@ -780,7 +542,7 @@ msgstr "" msgid "Disconnect" msgstr "" -#: editor/connections_dialog.cpp editor/node_dock.cpp +#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" msgstr "" @@ -797,12 +559,25 @@ msgstr "" msgid "Recent:" msgstr "" +#: editor/create_dialog.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp +#: editor/quick_open.cpp editor/settings_config_dialog.cpp +msgid "Search:" +msgstr "" + #: editor/create_dialog.cpp editor/editor_help.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp #: editor/quick_open.cpp msgid "Matches:" msgstr "" +#: editor/create_dialog.cpp editor/editor_help.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp +#: editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "" + #: editor/dependency_editor.cpp msgid "Search Replacement For:" msgstr "" @@ -858,6 +633,10 @@ msgid "Owners Of:" msgstr "" #: editor/dependency_editor.cpp +msgid "Remove selected files from the project? (no undo)" +msgstr "" + +#: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" @@ -865,7 +644,7 @@ msgid "" msgstr "" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (no undo)" +msgid "Cannot remove:\n" msgstr "" #: editor/dependency_editor.cpp @@ -932,10 +711,6 @@ msgid "Godot Engine contributors" msgstr "" #: editor/editor_about.cpp -msgid "Authors" -msgstr "" - -#: editor/editor_about.cpp #, fuzzy msgid "Project Founders" msgstr "Projekt exportieren" @@ -953,6 +728,38 @@ msgid "Developers" msgstr "" #: editor/editor_about.cpp +msgid "Authors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Platinum Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Mini Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Silver Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Bronze Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Donors" +msgstr "" + +#: editor/editor_about.cpp msgid "License" msgstr "" @@ -993,6 +800,16 @@ msgid "Package Installed Successfully!" msgstr "" #: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Success!" +msgstr "" + +#: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp +msgid "Install" +msgstr "" + +#: editor/editor_asset_installer.cpp msgid "Package Installer" msgstr "" @@ -1042,10 +859,6 @@ msgid "Audio Bus, Drag and Drop to rearrange." msgstr "" #: editor/editor_audio_buses.cpp -msgid "Bus options" -msgstr "" - -#: editor/editor_audio_buses.cpp msgid "Solo" msgstr "" @@ -1057,12 +870,20 @@ msgstr "" msgid "Bypass" msgstr "" +#: editor/editor_audio_buses.cpp +msgid "Bus options" +msgstr "" + #: editor/editor_audio_buses.cpp editor/plugins/tile_map_editor_plugin.cpp #: editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "" #: editor/editor_audio_buses.cpp +msgid "Reset Volume" +msgstr "" + +#: editor/editor_audio_buses.cpp msgid "Delete Effect" msgstr "" @@ -1085,6 +906,10 @@ msgid "Duplicate Audio Bus" msgstr "Node(s) duplizieren" #: editor/editor_audio_buses.cpp +msgid "Reset Bus Volume" +msgstr "" + +#: editor/editor_audio_buses.cpp #, fuzzy msgid "Move Audio Bus" msgstr "Bild bewegen/einfügen" @@ -1117,7 +942,8 @@ msgstr "" msgid "Create a new Bus Layout." msgstr "" -#: editor/editor_audio_buses.cpp editor/script_create_dialog.cpp +#: editor/editor_audio_buses.cpp editor/property_editor.cpp +#: editor/script_create_dialog.cpp msgid "Load" msgstr "" @@ -1207,7 +1033,7 @@ msgid "Rearrange Autoloads" msgstr "" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp scene/gui/file_dialog.cpp +#: scene/gui/file_dialog.cpp msgid "Path:" msgstr "" @@ -1215,9 +1041,7 @@ msgstr "" msgid "Node Name:" msgstr "" -#: editor/editor_autoload_settings.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp editor/project_manager.cpp +#: editor/editor_autoload_settings.cpp editor/project_manager.cpp msgid "Name" msgstr "" @@ -1250,18 +1074,19 @@ msgid "Choose a Directory" msgstr "" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Create Folder" msgstr "" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: editor/editor_plugin_settings.cpp editor/plugins/theme_editor_plugin.cpp -#: editor/project_export.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp +#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp +#: scene/gui/file_dialog.cpp msgid "Name:" msgstr "" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Could not create folder." msgstr "" @@ -1281,30 +1106,6 @@ msgstr "" msgid "Template file not found:\n" msgstr "" -#: editor/editor_export.cpp -msgid "Added:" -msgstr "" - -#: editor/editor_export.cpp -msgid "Removed:" -msgstr "" - -#: editor/editor_export.cpp -msgid "Error saving atlas:" -msgstr "" - -#: editor/editor_export.cpp -msgid "Could not save atlas subtexture:" -msgstr "" - -#: editor/editor_export.cpp -msgid "Exporting for %s" -msgstr "" - -#: editor/editor_export.cpp -msgid "Setting Up.." -msgstr "" - #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "Datei existiert, Überschreiben?" @@ -1389,6 +1190,10 @@ msgstr "" msgid "Move Favorite Down" msgstr "" +#: editor/editor_file_dialog.cpp +msgid "Go to parent folder" +msgstr "" + #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Directories & Files:" msgstr "" @@ -1431,6 +1236,10 @@ msgstr "" msgid "Search Classes" msgstr "" +#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +msgid "Top" +msgstr "" + #: editor/editor_help.cpp editor/property_editor.cpp msgid "Class:" msgstr "" @@ -1447,15 +1256,27 @@ msgstr "" msgid "Brief Description:" msgstr "" +#: editor/editor_help.cpp +msgid "Members" +msgstr "" + #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "" #: editor/editor_help.cpp +msgid "Public Methods" +msgstr "" + +#: editor/editor_help.cpp msgid "Public Methods:" msgstr "" #: editor/editor_help.cpp +msgid "GUI Theme Items" +msgstr "" + +#: editor/editor_help.cpp msgid "GUI Theme Items:" msgstr "" @@ -1464,6 +1285,10 @@ msgid "Signals:" msgstr "" #: editor/editor_help.cpp +msgid "Enumerations" +msgstr "" + +#: editor/editor_help.cpp msgid "Enumerations:" msgstr "" @@ -1472,18 +1297,47 @@ msgid "enum " msgstr "" #: editor/editor_help.cpp +msgid "Constants" +msgstr "" + +#: editor/editor_help.cpp msgid "Constants:" msgstr "" #: editor/editor_help.cpp +#, fuzzy +msgid "Description" +msgstr "Script hinzufügen" + +#: editor/editor_help.cpp +msgid "Properties" +msgstr "" + +#: editor/editor_help.cpp msgid "Property Description:" msgstr "" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this property. Please help us by " +"[color=$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp +msgid "Methods" +msgstr "" + +#: editor/editor_help.cpp msgid "Method Description:" msgstr "" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this method. Please help us by [color=" +"$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp msgid "Search Text" msgstr "" @@ -1492,24 +1346,21 @@ msgid "Output:" msgstr "" #: editor/editor_log.cpp editor/plugins/animation_tree_editor_plugin.cpp -#: editor/plugins/rich_text_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_editor_debugger.cpp scene/gui/line_edit.cpp -#: scene/gui/text_edit.cpp +#: editor/property_editor.cpp editor/script_editor_debugger.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Clear" msgstr "" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Error saving resource!" msgstr "" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Save Resource As.." msgstr "" -#: editor/editor_node.cpp editor/export_template_manager.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "I see.." msgstr "" @@ -1526,6 +1377,29 @@ msgid "Error while saving." msgstr "" #: editor/editor_node.cpp +msgid "Can't open '%s'." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Error while parsing '%s'." +msgstr "Fehler beim Instanzieren der %s Szene" + +#: editor/editor_node.cpp +msgid "Unexpected end of file '%s'." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Missing '%s' or its dependencies." +msgstr "Szene '%s' hat kapute Abhängigkeiten:" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Error while loading '%s'." +msgstr "Fehler beim Instanzieren der %s Szene" + +#: editor/editor_node.cpp msgid "Saving Scene" msgstr "" @@ -1584,6 +1458,33 @@ msgid "Restored default layout to base settings." msgstr "" #: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was imported, so it's not editable.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was instanced or inherited.\n" +"Changes to it will not be kept when saving the current scene." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource was imported, so it's not editable. Change its settings in the " +"import panel and then re-import." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This scene was imported, so changes to it will not be kept.\n" +"Instancing it or inheriting will allow making changes to it.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp msgid "Copy Params" msgstr "" @@ -1749,6 +1650,12 @@ msgid "Save changes the following scene(s) before opening Project Manager?" msgstr "" #: editor/editor_node.cpp +msgid "" +"This option is deprecated. Situations where refresh must be forced are now " +"considered a bug. Please report." +msgstr "" + +#: editor/editor_node.cpp msgid "Pick a Main Scene" msgstr "" @@ -1775,7 +1682,7 @@ msgid "" msgstr "" #: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Ugh" msgstr "" @@ -1786,14 +1693,14 @@ msgid "" msgstr "" #: editor/editor_node.cpp -msgid "Error loading scene." -msgstr "" - -#: editor/editor_node.cpp msgid "Scene '%s' has broken dependencies:" msgstr "Szene '%s' hat kapute Abhängigkeiten:" #: editor/editor_node.cpp +msgid "Clear Recent Scenes" +msgstr "" + +#: editor/editor_node.cpp msgid "Save Layout" msgstr "" @@ -1826,7 +1733,7 @@ msgstr "" msgid "Toggle distraction-free mode." msgstr "" -#: editor/editor_node.cpp editor/io_plugins/editor_scene_import_plugin.cpp +#: editor/editor_node.cpp msgid "Scene" msgstr "" @@ -2050,6 +1957,10 @@ msgstr "" msgid "Issue Tracker" msgstr "" +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +msgid "Community" +msgstr "" + #: editor/editor_node.cpp msgid "About" msgstr "" @@ -2058,7 +1969,7 @@ msgstr "" msgid "Play the project." msgstr "Projekt starten." -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Play" msgstr "Abspielen" @@ -2074,7 +1985,7 @@ msgstr "" msgid "Stop the scene." msgstr "" -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Stop" msgstr "" @@ -2148,6 +2059,15 @@ msgid "Object properties." msgstr "" #: editor/editor_node.cpp +msgid "Changes may be lost!" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Import" +msgstr "" + +#: editor/editor_node.cpp msgid "FileSystem" msgstr "" @@ -2163,14 +2083,6 @@ msgstr "" msgid "Don't Save" msgstr "" -#: editor/editor_node.cpp editor/editor_reimport_dialog.cpp -msgid "Re-Import" -msgstr "" - -#: editor/editor_node.cpp editor/editor_plugin_settings.cpp -msgid "Update" -msgstr "" - #: editor/editor_node.cpp msgid "Import Templates From ZIP File" msgstr "" @@ -2234,11 +2146,28 @@ msgstr "" msgid "Open the previous Editor" msgstr "" +#: editor/editor_plugin.cpp +msgid "Creating Mesh Previews" +msgstr "" + +#: editor/editor_plugin.cpp +msgid "Thumbnail.." +msgstr "" + #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" msgstr "" #: editor/editor_plugin_settings.cpp +msgid "Update" +msgstr "" + +#: editor/editor_plugin_settings.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Version:" +msgstr "" + +#: editor/editor_plugin_settings.cpp msgid "Author:" msgstr "" @@ -2290,26 +2219,6 @@ msgstr "" msgid "Frame #:" msgstr "" -#: editor/editor_reimport_dialog.cpp -msgid "Please wait for scan to complete." -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Current scene must be saved to re-import." -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Save & Re-Import" -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Importing" -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Import Changed Resources" -msgstr "" - #: editor/editor_run_native.cpp msgid "Select device from the list" msgstr "" @@ -2420,10 +2329,6 @@ msgid "Importing:" msgstr "" #: editor/export_template_manager.cpp -msgid "Loading Export Templates" -msgstr "" - -#: editor/export_template_manager.cpp msgid "Current Version:" msgstr "" @@ -2457,9 +2362,17 @@ msgid "Cannot navigate to '" msgstr "" #: editor/filesystem_dock.cpp +msgid "View items as a grid of thumbnails" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "View items as a list" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "" "\n" -"Status: Needs Re-Import" +"Status: Import of file failed. Please fix file and reimport manually." msgstr "" #: editor/filesystem_dock.cpp @@ -2469,89 +2382,90 @@ msgid "" msgstr "" #: editor/filesystem_dock.cpp -msgid "Same source and destination files, doing nothing." +msgid "Cannot move/rename resources root." msgstr "" #: editor/filesystem_dock.cpp -msgid "Target file exists, can't overwrite. Delete first." +msgid "Cannot move a folder into itself.\n" msgstr "" #: editor/filesystem_dock.cpp -msgid "Same source and destination paths, doing nothing." -msgstr "" +#, fuzzy +msgid "Error moving:\n" +msgstr "Szene kann nicht gespeichert werden." #: editor/filesystem_dock.cpp -msgid "Can't move directories to within themselves." -msgstr "" +#, fuzzy +msgid "Unable to update dependencies:\n" +msgstr "Szene '%s' hat kapute Abhängigkeiten:" #: editor/filesystem_dock.cpp -msgid "Can't rename deps for:\n" +msgid "No name provided" msgstr "" #: editor/filesystem_dock.cpp -#, fuzzy -msgid "Error moving file:\n" -msgstr "Szene kann nicht gespeichert werden." +msgid "Provided name contains invalid characters" +msgstr "" #: editor/filesystem_dock.cpp -#, fuzzy -msgid "Error moving dir:\n" -msgstr "Szene kann nicht gespeichert werden." +msgid "No name provided." +msgstr "" #: editor/filesystem_dock.cpp -msgid "Can't operate on '..'" +msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp -msgid "Pick New Name and Location For:" +msgid "A file or folder with this name already exists." msgstr "" #: editor/filesystem_dock.cpp -msgid "No files selected!" -msgstr "" +#, fuzzy +msgid "Renaming file:" +msgstr "Szene kann nicht gespeichert werden." #: editor/filesystem_dock.cpp -msgid "Expand all" +msgid "Renaming folder:" msgstr "" #: editor/filesystem_dock.cpp -msgid "Collapse all" +msgid "Expand all" msgstr "" #: editor/filesystem_dock.cpp -msgid "Show In File Manager" +msgid "Collapse all" msgstr "" #: editor/filesystem_dock.cpp -msgid "Instance" +msgid "Copy Path" msgstr "" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." +msgid "Rename.." msgstr "" #: editor/filesystem_dock.cpp -msgid "View Owners.." +msgid "Move To.." msgstr "" #: editor/filesystem_dock.cpp -msgid "Copy Path" +msgid "New Folder.." msgstr "" #: editor/filesystem_dock.cpp -msgid "Rename or Move.." +msgid "Show In File Manager" msgstr "" #: editor/filesystem_dock.cpp -msgid "Move To.." +msgid "Instance" msgstr "" #: editor/filesystem_dock.cpp -msgid "Info" +msgid "Edit Dependencies.." msgstr "" #: editor/filesystem_dock.cpp -msgid "Re-Import.." +msgid "View Owners.." msgstr "" #: editor/filesystem_dock.cpp @@ -2584,6 +2498,11 @@ msgstr "" msgid "Move" msgstr "" +#: editor/filesystem_dock.cpp editor/plugins/animation_tree_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Rename" +msgstr "" + #: editor/groups_editor.cpp msgid "Add to Group" msgstr "" @@ -2597,6 +2516,10 @@ msgid "Import as Single Scene" msgstr "" #: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials" msgstr "" @@ -2609,6 +2532,18 @@ msgid "Import with Separate Objects+Materials" msgstr "" #: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Materials+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Materials+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes" msgstr "" @@ -2617,38 +2552,31 @@ msgid "Import as Multiple Scenes+Materials" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Import Scene" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Importing Scene.." msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Running Custom Script.." msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Couldn't load post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Invalid/broken script for post-import (check console):" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Error running post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Saving.." msgstr "" @@ -2677,587 +2605,58 @@ msgstr "" msgid "Reimport" msgstr "" -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "No bit masks to import!" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path is empty." -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must be a complete resource path." -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must exist." -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Save path is empty!" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Import BitMasks" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s):" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Target Path:" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Accept" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Bit Mask" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No source font file!" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No target font resource!" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "" -"Invalid file extension.\n" -"Please use .font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Can't load/process source font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Couldn't save font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font Size:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Dest Resource:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "The quick brown fox jumps over the lazy dog." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Test:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Options:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Font Import" -msgstr "" - -#: 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 "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Failed opening as BMFont file." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp +#: editor/multi_node_edit.cpp #, fuzzy -msgid "Error initializing FreeType." -msgstr "Fehler bei der FreeType Inizialisierung." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Unknown font format." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error loading font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Invalid font size." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Invalid font custom source." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/plugins/theme_editor_plugin.cpp -msgid "Font" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "No meshes to import!" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Single Mesh Import" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Source Mesh(es):" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Mesh" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Surface %d" -msgstr "Oberfläche %d" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "No samples to import!" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Import Audio Samples" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Source Sample(s):" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Audio Sample" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "New Clip" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Animation Options" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Flags" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Bake FPS:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Optimizer" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Linear Error" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angular Error" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angle" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Clips" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Start(s)" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "End(s)" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Loop" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Filters" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source path is empty." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't load post-import script." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Invalid/broken script for post-import." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Error importing scene." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import 3D Scene" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source Scene:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Same as Target Scene" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Shared" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Target Texture Folder:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Post-Process Script:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Custom Root Node Type:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Auto" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Root Node Name:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "The Following Files are Missing:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Anyway" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp scene/gui/dialogs.cpp -msgid "Cancel" -msgstr "Abbrechen" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import & Open" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Edited scene has not been saved, open imported scene anyway?" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Image:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Can't import a file over itself:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't localize path: %s (already local)" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "3D Scene Animation" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Uncompressed" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossless (PNG)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossy (WebP)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress (VRAM)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Format" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Compression Quality (WebP):" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Options" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Please specify some files!" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "At least one file needed for Atlas." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Error importing:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Only one file is required for large texture." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Max Texture Size:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for Atlas (2D)" -msgstr "Importiere Texturen für Atlas (2D)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cell Size:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Large Texture" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Textures (2D)" -msgstr "Importiere Große Texturen (2D)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Base Atlas Texture" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 2D" -msgstr "Importiere Texturen für 2D" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 3D" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "2D Texture" -msgstr "2D-Textur" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "3D Texture" -msgstr "" +msgid "MultiNode Set" +msgstr "MultiNode Set" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Atlas Texture" +#: editor/node_dock.cpp +msgid "Groups" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp +#: editor/node_dock.cpp #, fuzzy -msgid "" -"NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files to " -"the project." -msgstr "" -"MERKE: Das importieren von 2D Texturen ist nicht zwingend notwendig. Kopiere " -"einfach png/jpg Dateien in das Projekt." - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Crop empty space." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Texture" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Load Source Image" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Slicing" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Inserting" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Saving" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save large texture:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Build Atlas For:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Loading Image:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't load image:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Converting Images" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cropping Images" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Blitting Images" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save atlas image:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save converted texture:" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid source!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid translation source!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Column" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/script_create_dialog.cpp -msgid "Language" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No items to import!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No target path!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translations" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Couldn't import!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translation" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Source CSV:" -msgstr "" +msgid "Select a Node to edit Signals and Groups." +msgstr "Selektiere ein Node um deren Signale und Gruppen zu ändern." -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Ignore First Row" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create Poly" msgstr "" -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Compress" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly" msgstr "" -#: editor/io_plugins/editor_translation_import_plugin.cpp +#: editor/plugins/abstract_polygon_2d_editor.cpp #, fuzzy -msgid "Add to Project (project.godot)" -msgstr "Zum Projekt hinzufügen (engine.cfg)" +msgid "Insert Point" +msgstr "Bild einfügen" -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Languages:" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly (Remove Point)" msgstr "" -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Translation" +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Remove Poly And Point" msgstr "" -#: editor/multi_node_edit.cpp -#, fuzzy -msgid "MultiNode Set" -msgstr "MultiNode Set" - -#: editor/node_dock.cpp -msgid "Groups" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create a new polygon from scratch." msgstr "" -#: editor/node_dock.cpp -#, fuzzy -msgid "Select a Node to edit Signals and Groups." -msgstr "Selektiere ein Node um deren Signale und Gruppen zu ändern." +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "" +"Edit existing polygon:\n" +"LMB: Move Point.\n" +"Ctrl+LMB: Split Segment.\n" +"RMB: Erase Point." +msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Toggle Autoplay" @@ -3417,7 +2816,6 @@ msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp #: editor/script_create_dialog.cpp msgid "Error!" @@ -3528,10 +2926,6 @@ msgid "Delete Input" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Rename" -msgstr "" - -#: editor/plugins/animation_tree_editor_plugin.cpp msgid "Animation tree is valid." msgstr "" @@ -3587,64 +2981,185 @@ msgstr "Node Filter editieren" msgid "Filters.." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing %d Triangles:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Free" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Triangle #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Contents:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Light Baker Setup:" +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "View Files" +msgstr "Datei(en) öffnen" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve hostname:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing Geometry" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Fixing Lights" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connection error, please try again." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Making BVH" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't connect." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Light Octree" +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Can't connect to host:" +msgstr "Verbindung zu Node:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response from host:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Octree Texture" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Transfer to Lightmaps:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, return code:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Allocating Texture #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Req. Failed." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Baking Triangle #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, too many redirects" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Post-Processing Texture #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Redirect Loop." msgstr "" -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Bake!" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed:" msgstr "" -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Reset the lightmap octree baking process (start over)." +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Bad download hash, assuming file has been tampered with." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Expected:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Got:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed sha256 hash check" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Asset Download Error:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Fetching:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Resolving.." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Connecting.." +msgstr "Connections editieren" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Requesting.." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Error making request" +msgstr "Szene kann nicht gespeichert werden." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Idle" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Retry" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download Error" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download for this asset is already in progress!" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "first" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "prev" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "next" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "last" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "All" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Plugins" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Sort:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Reverse" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Category:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Site:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Support.." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Official" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Testing" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Assets ZIP File" msgstr "" #: editor/plugins/camera_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp msgid "Preview" msgstr "" @@ -3687,11 +3202,15 @@ msgid "Edit CanvasItem" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Change Anchors" +msgid "Anchors only" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom (%):" +msgid "Change Anchors and Margins" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Change Anchors" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3744,59 +3263,72 @@ msgid "Pan Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Lock the selected object in place (can't be moved)." +msgid "Toggles snapping" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Unlock the selected object (can be moved)." +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Makes sure the object's children are not selectable." +msgid "Snapping options" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Restores the object's children's ability to be selected." +msgid "Snap to grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp -#: editor/project_settings_editor.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Edit" +msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +msgid "Configure Snap..." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +msgid "Snap Relative" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Rotation Snap" +msgid "Use Pixel Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap Relative" +msgid "Smart snapping" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." +msgid "Snap to parent" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Pixel Snap" +msgid "Snap to node anchor" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to node sides" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to other nodes" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Lock the selected object in place (can't be moved)." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Unlock the selected object (can be moved)." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Makes sure the object's children are not selectable." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Skeleton.." +msgid "Restores the object's children's ability to be selected." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3825,11 +3357,16 @@ msgid "View" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Reset" +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show helpers" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Set.." +msgid "Show rulers" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3841,7 +3378,7 @@ msgid "Frame Selection" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Anchor" +msgid "Layout" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3866,11 +3403,20 @@ msgid "Clear Pose" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Set a Value" +msgid "Drag pivot from mouse position" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap (Pixels):" +#, fuzzy +msgid "Set pivot at mouse position" +msgstr "Ungültige Bilder löschen" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Multiply grid step by 2" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Divide grid step by 2" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3881,23 +3427,28 @@ msgstr "" msgid "Adding %s..." msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Create Node" msgstr "Node erstellen" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Error instancing scene from %s" msgstr "Fehler beim Instanzieren der %s Szene" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "OK :(" msgstr "Okay :(" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "No parent to instance a child at." msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "This operation requires a single selected node." msgstr "Bitte nur ein Node selektieren." @@ -3912,45 +3463,6 @@ msgid "" "Drag & drop + Alt : Change node type" msgstr "" -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Create Poly" -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly" -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly (Remove Point)" -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Create a new polygon from scratch." -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -msgid "" -"Edit existing polygon:\n" -"LMB: Move Point.\n" -"Ctrl+LMB: Split Segment.\n" -"RMB: Erase Point." -msgstr "" - #: editor/plugins/collision_polygon_editor_plugin.cpp msgid "Create Poly3D" msgstr "" @@ -3960,14 +3472,6 @@ msgid "Set Handle" msgstr "" #: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Creating Mesh Library" -msgstr "" - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Thumbnail.." -msgstr "" - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Remove item %d?" msgstr "" @@ -3990,6 +3494,26 @@ msgid "Update from Scene" msgstr "" #: editor/plugins/curve_editor_plugin.cpp +msgid "Flat0" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Flat1" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Ease in" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Ease out" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Smoothstep" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp msgid "Modify Curve Point" msgstr "" @@ -4068,22 +3592,18 @@ msgid "Create Occluder Polygon" msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Edit existing polygon:" msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "LMB: Move Point." msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Ctrl+LMB: Split Segment." msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "RMB: Erase Point." msgstr "" @@ -4184,6 +3704,10 @@ msgid "Create Outline" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Body" msgstr "" @@ -4312,12 +3836,72 @@ msgstr "" msgid "Populate" msgstr "" -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Create Navigation Polygon" +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Bake!" +msgstr "" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Bake the navigation mesh.\n" +msgstr "" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Clear the navigation mesh." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Setting up Configuration..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Calculating grid size..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating heightfield..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Marking walkable triangles..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Constructing compact heightfield..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Eroding walkable area..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Partioning..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating contours..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating polymesh..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Converting to native navigation mesh..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Navigation Mesh Generator Setup:" +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Parsing Geometry..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Done!" msgstr "" #: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Remove Poly And Point" +msgid "Create Navigation Polygon" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4496,16 +4080,19 @@ msgid "Curve Point #" msgstr "" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Point Pos" -msgstr "" +#, fuzzy +msgid "Set Curve Point Position" +msgstr "Ungültige Bilder löschen" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve In Pos" -msgstr "" +#, fuzzy +msgid "Set Curve In Position" +msgstr "Ungültige Bilder löschen" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Out Pos" -msgstr "" +#, fuzzy +msgid "Set Curve Out Position" +msgstr "Ungültige Bilder löschen" #: editor/plugins/path_editor_plugin.cpp msgid "Split Path" @@ -4564,6 +4151,14 @@ msgid "Scale Polygon" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon->UV" msgstr "" @@ -4618,63 +4213,10 @@ msgstr "" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "" -#: editor/plugins/rich_text_editor_plugin.cpp -msgid "Parse BBCode" -msgstr "" - -#: editor/plugins/sample_editor_plugin.cpp -msgid "Length:" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Open Sample File(s)" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "ERROR: Couldn't load sample!" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Add Sample" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Rename Sample" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Delete Sample" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "16 Bits" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "8 Bits" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Stereo" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Mono" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/script_editor_debugger.cpp -msgid "Format" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Pitch" -msgstr "" - #: editor/plugins/script_editor_plugin.cpp msgid "Clear Recent Files" msgstr "" @@ -4765,6 +4307,10 @@ msgstr "" msgid "Close All" msgstr "" +#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp +msgid "Run" +msgstr "" + #: editor/plugins/script_editor_plugin.cpp msgid "Toggle Scripts Panel" msgstr "" @@ -4806,18 +4352,6 @@ msgid "Debug with external editor" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Window" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Left" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Right" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp msgid "Open Godot online documentation" msgstr "" @@ -4900,7 +4434,7 @@ msgstr "" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Copy" msgstr "" @@ -5165,10 +4699,6 @@ msgid "View Plane Transform." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Scaling to %s%%." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." msgstr "" @@ -5185,10 +4715,6 @@ msgid "Top View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Top" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "" @@ -5420,6 +4946,10 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Configure Snap.." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Local Coords" msgstr "" @@ -5565,6 +5095,10 @@ msgid "Speed (FPS):" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Loop" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animation Frames" msgstr "" @@ -5577,11 +5111,12 @@ msgid "Insert Empty (After)" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Up" -msgstr "" +#, fuzzy +msgid "Move (Before)" +msgstr "Node(s) entfernen" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Down" +msgid "Move (After)" msgstr "" #: editor/plugins/style_box_editor_plugin.cpp @@ -5745,6 +5280,10 @@ msgid "Style" msgstr "" #: editor/plugins/theme_editor_plugin.cpp +msgid "Font" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp msgid "Color" msgstr "" @@ -5793,7 +5332,7 @@ msgid "Mirror Y" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Bucket" +msgid "Paint Tile" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp @@ -5857,6 +5396,10 @@ msgid "Delete preset '%s'?" msgstr "" #: editor/project_export.cpp +msgid "Export templates for this platform are missing/corrupted: " +msgstr "" + +#: editor/project_export.cpp msgid "Presets" msgstr "" @@ -5930,33 +5473,60 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +msgid "Export templates for this platform are missing/corrupted:" +msgstr "" + +#: editor/project_export.cpp msgid "Export With Debug" msgstr "" #: editor/project_manager.cpp -msgid "Invalid project path, the path must exist!" -msgstr "Ungültiger Projektpfad, Pfad existiert nicht!" +msgid "The path does not exists." +msgstr "" #: editor/project_manager.cpp #, fuzzy -msgid "Invalid project path, project.godot must not exist." -msgstr "Ungültiger Projektpfad, engine.cfg vorhanden!" +msgid "Please choose a 'project.godot' file." +msgstr "Bitte ausserhalb des Projekt Verzeichnis exportieren!" #: editor/project_manager.cpp -#, fuzzy -msgid "Invalid project path, project.godot must exist." -msgstr "Ungültiger Projektpfad, engine.cfg nicht vorhanden!" +msgid "" +"Your project will be created in a non empty folder (you might want to create " +"a new folder)." +msgstr "" + +#: editor/project_manager.cpp +msgid "Please choose a folder that does not contain a 'project.godot' file." +msgstr "" #: editor/project_manager.cpp msgid "Imported Project" msgstr "Importierte Projekte" #: editor/project_manager.cpp +msgid " " +msgstr "" + +#: editor/project_manager.cpp +msgid "It would be a good idea to name your project." +msgstr "" + +#: editor/project_manager.cpp msgid "Invalid project path (changed anything?)." msgstr "Ungültiger Projektpfad, (wurde was geändert?)!" #: editor/project_manager.cpp #, fuzzy +msgid "Couldn't get project.godot in project path." +msgstr "Die engine.cfg kann im Projektverzeichnis nicht erstellt werden." + +#: editor/project_manager.cpp +#, fuzzy +msgid "Couldn't edit project.godot in project path." +msgstr "Die engine.cfg kann im Projektverzeichnis nicht erstellt werden." + +#: editor/project_manager.cpp +#, fuzzy msgid "Couldn't create project.godot in project path." msgstr "Die engine.cfg kann im Projektverzeichnis nicht erstellt werden." @@ -5965,35 +5535,46 @@ msgid "The following files failed extraction from package:" msgstr "" #: editor/project_manager.cpp -msgid "Import Existing Project" -msgstr "Existierendes Projekt importieren" +#, fuzzy +msgid "Rename Project" +msgstr "Neues Projekt erstellen" #: editor/project_manager.cpp -msgid "Project Path (Must Exist):" -msgstr "Projektpfad (muss existieren):" +#, fuzzy +msgid "Couldn't get project.godot in the project path." +msgstr "Die engine.cfg kann im Projektverzeichnis nicht erstellt werden." #: editor/project_manager.cpp -msgid "Project Name:" -msgstr "Projektname:" +msgid "New Game Project" +msgstr "" + +#: editor/project_manager.cpp +msgid "Import Existing Project" +msgstr "Existierendes Projekt importieren" #: editor/project_manager.cpp msgid "Create New Project" msgstr "Neues Projekt erstellen" #: editor/project_manager.cpp -msgid "Project Path:" +msgid "Install Project:" msgstr "" #: editor/project_manager.cpp -msgid "Install Project:" -msgstr "" +msgid "Project Name:" +msgstr "Projektname:" #: editor/project_manager.cpp -msgid "Browse" +#, fuzzy +msgid "Create folder" +msgstr "Node erstellen" + +#: editor/project_manager.cpp +msgid "Project Path:" msgstr "" #: editor/project_manager.cpp -msgid "New Game Project" +msgid "Browse" msgstr "" #: editor/project_manager.cpp @@ -6005,6 +5586,11 @@ msgid "Unnamed Project" msgstr "" #: editor/project_manager.cpp +#, fuzzy +msgid "Can't open project" +msgstr "Neues Projekt erstellen" + +#: editor/project_manager.cpp msgid "Are you sure to open more than one project?" msgstr "" @@ -6040,10 +5626,6 @@ msgid "Project List" msgstr "" #: editor/project_manager.cpp -msgid "Run" -msgstr "" - -#: editor/project_manager.cpp msgid "Scan" msgstr "" @@ -6102,17 +5684,14 @@ msgid "Add Input Action Event" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Meta+" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Shift+" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Alt+" msgstr "" @@ -6174,7 +5753,7 @@ msgstr "Typ ändern" msgid "Joypad Axis Index:" msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Axis" msgstr "" @@ -6194,31 +5773,31 @@ msgstr "" msgid "Add Event" msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Device" msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Button" msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Left Button." msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Right Button." msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Middle Button." msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Up." msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Down." msgstr "" @@ -6227,7 +5806,7 @@ msgid "Add Global Property" msgstr "" #: editor/project_settings_editor.cpp -msgid "Select an setting item first!" +msgid "Select a setting item first!" msgstr "" #: editor/project_settings_editor.cpp @@ -6244,6 +5823,15 @@ msgid "Delete Item" msgstr "Node(s) löschen" #: editor/project_settings_editor.cpp +#, fuzzy +msgid "Can't contain '/' or ':'" +msgstr "Verbindung zu Node:" + +#: editor/project_settings_editor.cpp +msgid "Already existing" +msgstr "" + +#: editor/project_settings_editor.cpp msgid "Error saving settings." msgstr "" @@ -6395,10 +5983,19 @@ msgid "New Script" msgstr "Script hinzufügen" #: editor/property_editor.cpp +msgid "Make Unique" +msgstr "" + +#: editor/property_editor.cpp msgid "Show in File System" msgstr "" #: editor/property_editor.cpp +#, fuzzy +msgid "Convert To %s" +msgstr "Verbindung zu Node:" + +#: editor/property_editor.cpp msgid "Error loading file: Not a resource!" msgstr "" @@ -6437,6 +6034,10 @@ msgid "Select Property" msgstr "" #: editor/property_selector.cpp +msgid "Select Virtual Method" +msgstr "" + +#: editor/property_selector.cpp msgid "Select Method" msgstr "" @@ -6464,26 +6065,6 @@ msgstr "" msgid "Reparent" msgstr "" -#: editor/resources_dock.cpp -msgid "Create New Resource" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Open Resource" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Save Resource" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Resource Tools" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Make Local" -msgstr "" - #: editor/run_settings_dialog.cpp msgid "Run Mode:" msgstr "" @@ -6611,14 +6192,6 @@ msgid "Sub-Resources:" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Edit Groups" -msgstr "" - -#: editor/scene_tree_dock.cpp -msgid "Edit Connections" -msgstr "Connections editieren" - -#: editor/scene_tree_dock.cpp msgid "Clear Inheritance" msgstr "" @@ -6806,6 +6379,15 @@ msgid "Invalid base path" msgstr "" #: editor/script_create_dialog.cpp +msgid "Directory of the same name exists" +msgstr "" + +#: editor/script_create_dialog.cpp +#, fuzzy +msgid "File exists, will be reused" +msgstr "Datei existiert, Überschreiben?" + +#: editor/script_create_dialog.cpp msgid "Invalid extension" msgstr "" @@ -6847,6 +6429,10 @@ msgid "Load existing script file" msgstr "" #: editor/script_create_dialog.cpp +msgid "Language" +msgstr "" + +#: editor/script_create_dialog.cpp msgid "Inherits" msgstr "" @@ -6889,6 +6475,10 @@ msgid "Function:" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Errors" msgstr "" @@ -6969,6 +6559,10 @@ msgid "Type" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Format" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Usage" msgstr "" @@ -7044,12 +6638,28 @@ msgstr "" msgid "Change Probe Extents" msgstr "" +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Library" +msgstr "" + +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Status" +msgstr "" + +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Libraries: " +msgstr "" + +#: modules/gdnative/register_types.cpp +msgid "GDNative" +msgstr "" + #: 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/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "" @@ -7099,10 +6709,6 @@ msgid "GridMap Duplicate Selection" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Paint" -msgstr "" - -#: modules/gridmap/grid_map_editor_plugin.cpp msgid "Snap View" msgstr "" @@ -7197,13 +6803,8 @@ msgstr "Projekteinstellungen" msgid "Pick Distance:" msgstr "" -#: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy -msgid "Tiles" -msgstr "Datei(en) öffnen" - -#: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Areas" +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "Builds" msgstr "" #: modules/visual_script/visual_script.cpp @@ -7406,10 +7007,18 @@ msgid "Return" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Call" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Get" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Script already has function '%s'" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Change Input Value" msgstr "Typ ändern" @@ -7795,6 +7404,12 @@ msgid "" "order for AnimatedSprite3D to display frames." msgstr "" +#: scene/3d/vehicle_body.cpp +msgid "" +"VehicleWheel serves to provide a wheel system to a VehicleBody. Please use " +"it as a child of a VehicleBody." +msgstr "" + #: scene/gui/color_picker.cpp #, fuzzy msgid "Raw Mode" @@ -7805,6 +7420,10 @@ msgid "Add current color as a preset" msgstr "" #: scene/gui/dialogs.cpp +msgid "Cancel" +msgstr "Abbrechen" + +#: scene/gui/dialogs.cpp msgid "Alert!" msgstr "Alert!" @@ -7812,10 +7431,6 @@ msgstr "Alert!" msgid "Please Confirm..." msgstr "Bitte bestätigen..." -#: scene/gui/input_action.cpp -msgid "Ctrl+" -msgstr "" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -7844,6 +7459,71 @@ msgid "" "texture to some node for display." msgstr "" +#: scene/resources/dynamic_font.cpp +#, fuzzy +msgid "Error initializing FreeType." +msgstr "Fehler bei der FreeType Inizialisierung." + +#: scene/resources/dynamic_font.cpp +msgid "Unknown font format." +msgstr "" + +#: scene/resources/dynamic_font.cpp +msgid "Error loading font." +msgstr "" + +#: scene/resources/dynamic_font.cpp +msgid "Invalid font size." +msgstr "" + +#~ msgid "Surface %d" +#~ msgstr "Oberfläche %d" + +#~ msgid "Import Textures for Atlas (2D)" +#~ msgstr "Importiere Texturen für Atlas (2D)" + +#~ msgid "Import Large Textures (2D)" +#~ msgstr "Importiere Große Texturen (2D)" + +#~ msgid "Import Textures for 2D" +#~ msgstr "Importiere Texturen für 2D" + +#~ msgid "2D Texture" +#~ msgstr "2D-Textur" + +#, fuzzy +#~ msgid "" +#~ "NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files " +#~ "to the project." +#~ msgstr "" +#~ "MERKE: Das importieren von 2D Texturen ist nicht zwingend notwendig. " +#~ "Kopiere einfach png/jpg Dateien in das Projekt." + +#, fuzzy +#~ msgid "Add to Project (project.godot)" +#~ msgstr "Zum Projekt hinzufügen (engine.cfg)" + +#~ msgid "Invalid project path, the path must exist!" +#~ msgstr "Ungültiger Projektpfad, Pfad existiert nicht!" + +#, fuzzy +#~ msgid "Invalid project path, project.godot must not exist." +#~ msgstr "Ungültiger Projektpfad, engine.cfg vorhanden!" + +#, fuzzy +#~ msgid "Invalid project path, project.godot must exist." +#~ msgstr "Ungültiger Projektpfad, engine.cfg nicht vorhanden!" + +#~ msgid "Project Path (Must Exist):" +#~ msgstr "Projektpfad (muss existieren):" + +#~ msgid "Edit Connections" +#~ msgstr "Connections editieren" + +#, fuzzy +#~ msgid "Tiles" +#~ msgstr "Datei(en) öffnen" + #, fuzzy #~ msgid "Error creating the signature object." #~ msgstr "Fehler beim Schreiben des Projekts PCK!" @@ -7879,9 +7559,6 @@ msgstr "" #~ "SampleLibrary Ressource in der 'samples' Eigenschaft erzeugt oder " #~ "definiert werden." -#~ msgid "Please export outside the project folder!" -#~ msgstr "Bitte ausserhalb des Projekt Verzeichnis exportieren!" - #~ msgid "Error exporting project!" #~ msgstr "Fehler beim Exportieren des Projekts!" diff --git a/editor/translations/editor.pot b/editor/translations/editor.pot index 7227b0ec2d..cd26e9cbe0 100644 --- a/editor/translations/editor.pot +++ b/editor/translations/editor.pot @@ -186,10 +186,9 @@ msgid "Create %d NEW tracks and insert keys?" msgstr "" #: editor/animation_editor.cpp editor/create_dialog.cpp -#: editor/editor_audio_buses.cpp +#: editor/editor_audio_buses.cpp editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp #: editor/plugins/mesh_instance_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp editor/project_manager.cpp #: editor/script_create_dialog.cpp msgid "Create" @@ -351,261 +350,6 @@ msgstr "" msgid "Change Array Value" msgstr "" -#: editor/asset_library_editor_plugin.cpp -msgid "Free" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp -msgid "Version:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Contents:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "View Files" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_help.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp -msgid "Description:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -#: editor/project_manager.cpp -msgid "Install" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp -#: editor/connections_dialog.cpp editor/export_template_manager.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -#: editor/project_settings_editor.cpp editor/property_editor.cpp -#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Close" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve hostname:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Connection error, please try again." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't connect." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't connect to host:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response from host:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Request failed, return code:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Req. Failed." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Request failed, too many redirects" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Redirect Loop." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Bad download hash, assuming file has been tampered with." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Expected:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Got:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed sha256 hash check" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Asset Download Error:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -msgid "Success!" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Fetching:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Resolving.." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Error making request" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Idle" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Retry" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Download Error" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Download for this asset is already in progress!" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "first" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "prev" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "next" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "last" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "All" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/property_selector.cpp editor/quick_open.cpp -#: editor/settings_config_dialog.cpp -msgid "Search:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Search" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/project_manager.cpp -msgid "Import" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Plugins" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Sort:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Reverse" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Category:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Site:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Official" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -msgid "Community" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Testing" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Assets ZIP File" -msgstr "" - -#: editor/call_dialog.cpp -msgid "Method List For '%s':" -msgstr "" - -#: editor/call_dialog.cpp modules/visual_script/visual_script_editor.cpp -msgid "Call" -msgstr "" - -#: editor/call_dialog.cpp -msgid "Method List:" -msgstr "" - -#: editor/call_dialog.cpp -msgid "Arguments:" -msgstr "" - -#: editor/call_dialog.cpp -msgid "Return:" -msgstr "" - #: editor/code_editor.cpp msgid "Go to Line" msgstr "" @@ -642,6 +386,14 @@ msgstr "" msgid "Selection Only" msgstr "" +#: editor/code_editor.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp +msgid "Search" +msgstr "" + #: editor/code_editor.cpp editor/editor_help.cpp msgid "Find" msgstr "" @@ -674,11 +426,11 @@ msgstr "" msgid "Skip" msgstr "" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom In" msgstr "" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom Out" msgstr "" @@ -745,6 +497,20 @@ msgstr "" msgid "Oneshot" msgstr "" +#: editor/connections_dialog.cpp editor/dependency_editor.cpp +#: editor/export_template_manager.cpp +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Close" +msgstr "" + #: editor/connections_dialog.cpp msgid "Connect" msgstr "" @@ -770,7 +536,7 @@ msgstr "" msgid "Disconnect" msgstr "" -#: editor/connections_dialog.cpp editor/node_dock.cpp +#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" msgstr "" @@ -787,12 +553,25 @@ msgstr "" msgid "Recent:" msgstr "" +#: editor/create_dialog.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp +#: editor/quick_open.cpp editor/settings_config_dialog.cpp +msgid "Search:" +msgstr "" + #: editor/create_dialog.cpp editor/editor_help.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp #: editor/quick_open.cpp msgid "Matches:" msgstr "" +#: editor/create_dialog.cpp editor/editor_help.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp +#: editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "" + #: editor/dependency_editor.cpp msgid "Search Replacement For:" msgstr "" @@ -848,6 +627,10 @@ msgid "Owners Of:" msgstr "" #: editor/dependency_editor.cpp +msgid "Remove selected files from the project? (no undo)" +msgstr "" + +#: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" @@ -855,7 +638,7 @@ msgid "" msgstr "" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (no undo)" +msgid "Cannot remove:\n" msgstr "" #: editor/dependency_editor.cpp @@ -922,10 +705,6 @@ msgid "Godot Engine contributors" msgstr "" #: editor/editor_about.cpp -msgid "Authors" -msgstr "" - -#: editor/editor_about.cpp msgid "Project Founders" msgstr "" @@ -942,6 +721,38 @@ msgid "Developers" msgstr "" #: editor/editor_about.cpp +msgid "Authors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Platinum Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Mini Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Silver Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Bronze Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Donors" +msgstr "" + +#: editor/editor_about.cpp msgid "License" msgstr "" @@ -982,6 +793,16 @@ msgid "Package Installed Successfully!" msgstr "" #: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Success!" +msgstr "" + +#: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp +msgid "Install" +msgstr "" + +#: editor/editor_asset_installer.cpp msgid "Package Installer" msgstr "" @@ -1030,10 +851,6 @@ msgid "Audio Bus, Drag and Drop to rearrange." msgstr "" #: editor/editor_audio_buses.cpp -msgid "Bus options" -msgstr "" - -#: editor/editor_audio_buses.cpp msgid "Solo" msgstr "" @@ -1045,12 +862,20 @@ msgstr "" msgid "Bypass" msgstr "" +#: editor/editor_audio_buses.cpp +msgid "Bus options" +msgstr "" + #: editor/editor_audio_buses.cpp editor/plugins/tile_map_editor_plugin.cpp #: editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "" #: editor/editor_audio_buses.cpp +msgid "Reset Volume" +msgstr "" + +#: editor/editor_audio_buses.cpp msgid "Delete Effect" msgstr "" @@ -1071,6 +896,10 @@ msgid "Duplicate Audio Bus" msgstr "" #: editor/editor_audio_buses.cpp +msgid "Reset Bus Volume" +msgstr "" + +#: editor/editor_audio_buses.cpp msgid "Move Audio Bus" msgstr "" @@ -1102,7 +931,8 @@ msgstr "" msgid "Create a new Bus Layout." msgstr "" -#: editor/editor_audio_buses.cpp editor/script_create_dialog.cpp +#: editor/editor_audio_buses.cpp editor/property_editor.cpp +#: editor/script_create_dialog.cpp msgid "Load" msgstr "" @@ -1192,7 +1022,7 @@ msgid "Rearrange Autoloads" msgstr "" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp scene/gui/file_dialog.cpp +#: scene/gui/file_dialog.cpp msgid "Path:" msgstr "" @@ -1200,9 +1030,7 @@ msgstr "" msgid "Node Name:" msgstr "" -#: editor/editor_autoload_settings.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp editor/project_manager.cpp +#: editor/editor_autoload_settings.cpp editor/project_manager.cpp msgid "Name" msgstr "" @@ -1235,18 +1063,19 @@ msgid "Choose a Directory" msgstr "" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Create Folder" msgstr "" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: editor/editor_plugin_settings.cpp editor/plugins/theme_editor_plugin.cpp -#: editor/project_export.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp +#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp +#: scene/gui/file_dialog.cpp msgid "Name:" msgstr "" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Could not create folder." msgstr "" @@ -1266,30 +1095,6 @@ msgstr "" msgid "Template file not found:\n" msgstr "" -#: editor/editor_export.cpp -msgid "Added:" -msgstr "" - -#: editor/editor_export.cpp -msgid "Removed:" -msgstr "" - -#: editor/editor_export.cpp -msgid "Error saving atlas:" -msgstr "" - -#: editor/editor_export.cpp -msgid "Could not save atlas subtexture:" -msgstr "" - -#: editor/editor_export.cpp -msgid "Exporting for %s" -msgstr "" - -#: editor/editor_export.cpp -msgid "Setting Up.." -msgstr "" - #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "" @@ -1374,6 +1179,10 @@ msgstr "" msgid "Move Favorite Down" msgstr "" +#: editor/editor_file_dialog.cpp +msgid "Go to parent folder" +msgstr "" + #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Directories & Files:" msgstr "" @@ -1416,6 +1225,10 @@ msgstr "" msgid "Search Classes" msgstr "" +#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +msgid "Top" +msgstr "" + #: editor/editor_help.cpp editor/property_editor.cpp msgid "Class:" msgstr "" @@ -1432,15 +1245,27 @@ msgstr "" msgid "Brief Description:" msgstr "" +#: editor/editor_help.cpp +msgid "Members" +msgstr "" + #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "" #: editor/editor_help.cpp +msgid "Public Methods" +msgstr "" + +#: editor/editor_help.cpp msgid "Public Methods:" msgstr "" #: editor/editor_help.cpp +msgid "GUI Theme Items" +msgstr "" + +#: editor/editor_help.cpp msgid "GUI Theme Items:" msgstr "" @@ -1449,6 +1274,10 @@ msgid "Signals:" msgstr "" #: editor/editor_help.cpp +msgid "Enumerations" +msgstr "" + +#: editor/editor_help.cpp msgid "Enumerations:" msgstr "" @@ -1457,18 +1286,46 @@ msgid "enum " msgstr "" #: editor/editor_help.cpp +msgid "Constants" +msgstr "" + +#: editor/editor_help.cpp msgid "Constants:" msgstr "" #: editor/editor_help.cpp +msgid "Description" +msgstr "" + +#: editor/editor_help.cpp +msgid "Properties" +msgstr "" + +#: editor/editor_help.cpp msgid "Property Description:" msgstr "" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this property. Please help us by " +"[color=$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp +msgid "Methods" +msgstr "" + +#: editor/editor_help.cpp msgid "Method Description:" msgstr "" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this method. Please help us by [color=" +"$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp msgid "Search Text" msgstr "" @@ -1477,24 +1334,21 @@ msgid "Output:" msgstr "" #: editor/editor_log.cpp editor/plugins/animation_tree_editor_plugin.cpp -#: editor/plugins/rich_text_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_editor_debugger.cpp scene/gui/line_edit.cpp -#: scene/gui/text_edit.cpp +#: editor/property_editor.cpp editor/script_editor_debugger.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Clear" msgstr "" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Error saving resource!" msgstr "" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Save Resource As.." msgstr "" -#: editor/editor_node.cpp editor/export_template_manager.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "I see.." msgstr "" @@ -1511,6 +1365,26 @@ msgid "Error while saving." msgstr "" #: editor/editor_node.cpp +msgid "Can't open '%s'." +msgstr "" + +#: editor/editor_node.cpp +msgid "Error while parsing '%s'." +msgstr "" + +#: editor/editor_node.cpp +msgid "Unexpected end of file '%s'." +msgstr "" + +#: editor/editor_node.cpp +msgid "Missing '%s' or its dependencies." +msgstr "" + +#: editor/editor_node.cpp +msgid "Error while loading '%s'." +msgstr "" + +#: editor/editor_node.cpp msgid "Saving Scene" msgstr "" @@ -1568,6 +1442,33 @@ msgid "Restored default layout to base settings." msgstr "" #: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was imported, so it's not editable.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was instanced or inherited.\n" +"Changes to it will not be kept when saving the current scene." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource was imported, so it's not editable. Change its settings in the " +"import panel and then re-import." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This scene was imported, so changes to it will not be kept.\n" +"Instancing it or inheriting will allow making changes to it.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp msgid "Copy Params" msgstr "" @@ -1729,6 +1630,12 @@ msgid "Save changes the following scene(s) before opening Project Manager?" msgstr "" #: editor/editor_node.cpp +msgid "" +"This option is deprecated. Situations where refresh must be forced are now " +"considered a bug. Please report." +msgstr "" + +#: editor/editor_node.cpp msgid "Pick a Main Scene" msgstr "" @@ -1755,7 +1662,7 @@ msgid "" msgstr "" #: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Ugh" msgstr "" @@ -1766,11 +1673,11 @@ msgid "" msgstr "" #: editor/editor_node.cpp -msgid "Error loading scene." +msgid "Scene '%s' has broken dependencies:" msgstr "" #: editor/editor_node.cpp -msgid "Scene '%s' has broken dependencies:" +msgid "Clear Recent Scenes" msgstr "" #: editor/editor_node.cpp @@ -1806,7 +1713,7 @@ msgstr "" msgid "Toggle distraction-free mode." msgstr "" -#: editor/editor_node.cpp editor/io_plugins/editor_scene_import_plugin.cpp +#: editor/editor_node.cpp msgid "Scene" msgstr "" @@ -2025,6 +1932,10 @@ msgstr "" msgid "Issue Tracker" msgstr "" +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +msgid "Community" +msgstr "" + #: editor/editor_node.cpp msgid "About" msgstr "" @@ -2033,7 +1944,7 @@ msgstr "" msgid "Play the project." msgstr "" -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Play" msgstr "" @@ -2049,7 +1960,7 @@ msgstr "" msgid "Stop the scene." msgstr "" -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Stop" msgstr "" @@ -2122,6 +2033,15 @@ msgid "Object properties." msgstr "" #: editor/editor_node.cpp +msgid "Changes may be lost!" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Import" +msgstr "" + +#: editor/editor_node.cpp msgid "FileSystem" msgstr "" @@ -2137,14 +2057,6 @@ msgstr "" msgid "Don't Save" msgstr "" -#: editor/editor_node.cpp editor/editor_reimport_dialog.cpp -msgid "Re-Import" -msgstr "" - -#: editor/editor_node.cpp editor/editor_plugin_settings.cpp -msgid "Update" -msgstr "" - #: editor/editor_node.cpp msgid "Import Templates From ZIP File" msgstr "" @@ -2205,11 +2117,28 @@ msgstr "" msgid "Open the previous Editor" msgstr "" +#: editor/editor_plugin.cpp +msgid "Creating Mesh Previews" +msgstr "" + +#: editor/editor_plugin.cpp +msgid "Thumbnail.." +msgstr "" + #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" msgstr "" #: editor/editor_plugin_settings.cpp +msgid "Update" +msgstr "" + +#: editor/editor_plugin_settings.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Version:" +msgstr "" + +#: editor/editor_plugin_settings.cpp msgid "Author:" msgstr "" @@ -2261,26 +2190,6 @@ msgstr "" msgid "Frame #:" msgstr "" -#: editor/editor_reimport_dialog.cpp -msgid "Please wait for scan to complete." -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Current scene must be saved to re-import." -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Save & Re-Import" -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Importing" -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Import Changed Resources" -msgstr "" - #: editor/editor_run_native.cpp msgid "Select device from the list" msgstr "" @@ -2390,10 +2299,6 @@ msgid "Importing:" msgstr "" #: editor/export_template_manager.cpp -msgid "Loading Export Templates" -msgstr "" - -#: editor/export_template_manager.cpp msgid "Current Version:" msgstr "" @@ -2426,9 +2331,17 @@ msgid "Cannot navigate to '" msgstr "" #: editor/filesystem_dock.cpp +msgid "View items as a grid of thumbnails" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "View items as a list" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "" "\n" -"Status: Needs Re-Import" +"Status: Import of file failed. Please fix file and reimport manually." msgstr "" #: editor/filesystem_dock.cpp @@ -2438,87 +2351,87 @@ msgid "" msgstr "" #: editor/filesystem_dock.cpp -msgid "Same source and destination files, doing nothing." +msgid "Cannot move/rename resources root." msgstr "" #: editor/filesystem_dock.cpp -msgid "Target file exists, can't overwrite. Delete first." +msgid "Cannot move a folder into itself.\n" msgstr "" #: editor/filesystem_dock.cpp -msgid "Same source and destination paths, doing nothing." +msgid "Error moving:\n" msgstr "" #: editor/filesystem_dock.cpp -msgid "Can't move directories to within themselves." +msgid "Unable to update dependencies:\n" msgstr "" #: editor/filesystem_dock.cpp -msgid "Can't rename deps for:\n" +msgid "No name provided" msgstr "" #: editor/filesystem_dock.cpp -msgid "Error moving file:\n" +msgid "Provided name contains invalid characters" msgstr "" #: editor/filesystem_dock.cpp -msgid "Error moving dir:\n" +msgid "No name provided." msgstr "" #: editor/filesystem_dock.cpp -msgid "Can't operate on '..'" +msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp -msgid "Pick New Name and Location For:" +msgid "A file or folder with this name already exists." msgstr "" #: editor/filesystem_dock.cpp -msgid "No files selected!" +msgid "Renaming file:" msgstr "" #: editor/filesystem_dock.cpp -msgid "Expand all" +msgid "Renaming folder:" msgstr "" #: editor/filesystem_dock.cpp -msgid "Collapse all" +msgid "Expand all" msgstr "" #: editor/filesystem_dock.cpp -msgid "Show In File Manager" +msgid "Collapse all" msgstr "" #: editor/filesystem_dock.cpp -msgid "Instance" +msgid "Copy Path" msgstr "" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." +msgid "Rename.." msgstr "" #: editor/filesystem_dock.cpp -msgid "View Owners.." +msgid "Move To.." msgstr "" #: editor/filesystem_dock.cpp -msgid "Copy Path" +msgid "New Folder.." msgstr "" #: editor/filesystem_dock.cpp -msgid "Rename or Move.." +msgid "Show In File Manager" msgstr "" #: editor/filesystem_dock.cpp -msgid "Move To.." +msgid "Instance" msgstr "" #: editor/filesystem_dock.cpp -msgid "Info" +msgid "Edit Dependencies.." msgstr "" #: editor/filesystem_dock.cpp -msgid "Re-Import.." +msgid "View Owners.." msgstr "" #: editor/filesystem_dock.cpp @@ -2551,6 +2464,11 @@ msgstr "" msgid "Move" msgstr "" +#: editor/filesystem_dock.cpp editor/plugins/animation_tree_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Rename" +msgstr "" + #: editor/groups_editor.cpp msgid "Add to Group" msgstr "" @@ -2564,6 +2482,10 @@ msgid "Import as Single Scene" msgstr "" #: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials" msgstr "" @@ -2576,6 +2498,18 @@ msgid "Import with Separate Objects+Materials" msgstr "" #: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Materials+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Materials+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes" msgstr "" @@ -2584,38 +2518,31 @@ msgid "Import as Multiple Scenes+Materials" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Import Scene" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Importing Scene.." msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Running Custom Script.." msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Couldn't load post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Invalid/broken script for post-import (check console):" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Error running post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Saving.." msgstr "" @@ -2643,579 +2570,54 @@ msgstr "" msgid "Reimport" msgstr "" -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "No bit masks to import!" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path is empty." -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must be a complete resource path." -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must exist." -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Save path is empty!" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Import BitMasks" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s):" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Target Path:" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Accept" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Bit Mask" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No source font file!" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No target font resource!" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "" -"Invalid file extension.\n" -"Please use .font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Can't load/process source font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Couldn't save font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font Size:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Dest Resource:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "The quick brown fox jumps over the lazy dog." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Test:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Options:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Font Import" -msgstr "" - -#: 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 "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Failed opening as BMFont file." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error initializing FreeType." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Unknown font format." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error loading font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Invalid font size." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Invalid font custom source." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/plugins/theme_editor_plugin.cpp -msgid "Font" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "No meshes to import!" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Single Mesh Import" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Source Mesh(es):" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Mesh" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Surface %d" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "No samples to import!" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Import Audio Samples" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Source Sample(s):" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Audio Sample" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "New Clip" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Animation Options" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Flags" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Bake FPS:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Optimizer" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Linear Error" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angular Error" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angle" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Clips" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Start(s)" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "End(s)" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Loop" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Filters" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source path is empty." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't load post-import script." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Invalid/broken script for post-import." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Error importing scene." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import 3D Scene" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source Scene:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Same as Target Scene" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Shared" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Target Texture Folder:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Post-Process Script:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Custom Root Node Type:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Auto" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Root Node Name:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "The Following Files are Missing:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Anyway" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp scene/gui/dialogs.cpp -msgid "Cancel" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import & Open" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Edited scene has not been saved, open imported scene anyway?" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Image:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Can't import a file over itself:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't localize path: %s (already local)" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "3D Scene Animation" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Uncompressed" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossless (PNG)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossy (WebP)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress (VRAM)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Format" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Compression Quality (WebP):" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Options" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Please specify some files!" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "At least one file needed for Atlas." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Error importing:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Only one file is required for large texture." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Max Texture Size:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for Atlas (2D)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cell Size:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Large Texture" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Textures (2D)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture" +#: editor/multi_node_edit.cpp +msgid "MultiNode Set" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Base Atlas Texture" +#: editor/node_dock.cpp +msgid "Groups" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s)" +#: editor/node_dock.cpp +msgid "Select a Node to edit Signals and Groups." msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 2D" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create Poly" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 3D" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures" +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Insert Point" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "2D Texture" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly (Remove Point)" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "3D Texture" +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Remove Poly And Point" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Atlas Texture" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create a new polygon from scratch." msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp +#: editor/plugins/abstract_polygon_2d_editor.cpp msgid "" -"NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files to " -"the project." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Crop empty space." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Texture" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Load Source Image" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Slicing" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Inserting" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Saving" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save large texture:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Build Atlas For:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Loading Image:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't load image:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Converting Images" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cropping Images" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Blitting Images" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save atlas image:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save converted texture:" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid source!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid translation source!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Column" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/script_create_dialog.cpp -msgid "Language" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No items to import!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No target path!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translations" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Couldn't import!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translation" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Source CSV:" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Ignore First Row" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Compress" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Add to Project (project.godot)" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Languages:" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Translation" -msgstr "" - -#: editor/multi_node_edit.cpp -msgid "MultiNode Set" -msgstr "" - -#: editor/node_dock.cpp -msgid "Groups" -msgstr "" - -#: editor/node_dock.cpp -msgid "Select a Node to edit Signals and Groups." +"Edit existing polygon:\n" +"LMB: Move Point.\n" +"Ctrl+LMB: Split Segment.\n" +"RMB: Erase Point." msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp @@ -3371,7 +2773,6 @@ msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp #: editor/script_create_dialog.cpp msgid "Error!" @@ -3481,10 +2882,6 @@ msgid "Delete Input" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Rename" -msgstr "" - -#: editor/plugins/animation_tree_editor_plugin.cpp msgid "Animation tree is valid." msgstr "" @@ -3540,64 +2937,181 @@ msgstr "" msgid "Filters.." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing %d Triangles:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Free" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Contents:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Triangle #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "View Files" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Light Baker Setup:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve hostname:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing Geometry" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Fixing Lights" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connection error, please try again." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Making BVH" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't connect." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Light Octree" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't connect to host:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Octree Texture" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response from host:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Transfer to Lightmaps:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Allocating Texture #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, return code:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Baking Triangle #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Req. Failed." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Post-Processing Texture #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, too many redirects" msgstr "" -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Bake!" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Redirect Loop." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Bad download hash, assuming file has been tampered with." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Expected:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Got:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed sha256 hash check" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Asset Download Error:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Fetching:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Resolving.." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connecting.." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Requesting.." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Error making request" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Idle" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Retry" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download Error" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download for this asset is already in progress!" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "first" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "prev" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "next" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "last" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "All" msgstr "" -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Reset the lightmap octree baking process (start over)." +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Plugins" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Sort:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Reverse" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Category:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Site:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Support.." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Official" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Testing" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Assets ZIP File" msgstr "" #: editor/plugins/camera_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp msgid "Preview" msgstr "" @@ -3640,11 +3154,15 @@ msgid "Edit CanvasItem" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Change Anchors" +msgid "Anchors only" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom (%):" +msgid "Change Anchors and Margins" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Change Anchors" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3695,59 +3213,72 @@ msgid "Pan Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Lock the selected object in place (can't be moved)." +msgid "Toggles snapping" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Unlock the selected object (can be moved)." +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Makes sure the object's children are not selectable." +msgid "Snapping options" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Restores the object's children's ability to be selected." +msgid "Snap to grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp -#: editor/project_settings_editor.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Edit" +msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +msgid "Configure Snap..." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +msgid "Snap Relative" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Rotation Snap" +msgid "Use Pixel Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap Relative" +msgid "Smart snapping" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." +msgid "Snap to parent" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Pixel Snap" +msgid "Snap to node anchor" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Skeleton.." +msgid "Snap to node sides" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to other nodes" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Lock the selected object in place (can't be moved)." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Unlock the selected object (can be moved)." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Makes sure the object's children are not selectable." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Restores the object's children's ability to be selected." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3776,11 +3307,16 @@ msgid "View" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Reset" +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show helpers" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Set.." +msgid "Show rulers" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3792,7 +3328,7 @@ msgid "Frame Selection" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Anchor" +msgid "Layout" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3816,11 +3352,19 @@ msgid "Clear Pose" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Set a Value" +msgid "Drag pivot from mouse position" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap (Pixels):" +msgid "Set pivot at mouse position" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Multiply grid step by 2" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Divide grid step by 2" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3831,23 +3375,28 @@ msgstr "" msgid "Adding %s..." msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Create Node" msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Error instancing scene from %s" msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "OK :(" msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "No parent to instance a child at." msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "This operation requires a single selected node." msgstr "" @@ -3861,45 +3410,6 @@ msgid "" "Drag & drop + Alt : Change node type" msgstr "" -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Create Poly" -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly" -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly (Remove Point)" -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Create a new polygon from scratch." -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -msgid "" -"Edit existing polygon:\n" -"LMB: Move Point.\n" -"Ctrl+LMB: Split Segment.\n" -"RMB: Erase Point." -msgstr "" - #: editor/plugins/collision_polygon_editor_plugin.cpp msgid "Create Poly3D" msgstr "" @@ -3909,14 +3419,6 @@ msgid "Set Handle" msgstr "" #: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Creating Mesh Library" -msgstr "" - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Thumbnail.." -msgstr "" - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Remove item %d?" msgstr "" @@ -3939,6 +3441,26 @@ msgid "Update from Scene" msgstr "" #: editor/plugins/curve_editor_plugin.cpp +msgid "Flat0" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Flat1" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Ease in" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Ease out" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Smoothstep" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp msgid "Modify Curve Point" msgstr "" @@ -4014,22 +3536,18 @@ msgid "Create Occluder Polygon" msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Edit existing polygon:" msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "LMB: Move Point." msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Ctrl+LMB: Split Segment." msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "RMB: Erase Point." msgstr "" @@ -4130,6 +3648,10 @@ msgid "Create Outline" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Body" msgstr "" @@ -4257,12 +3779,72 @@ msgstr "" msgid "Populate" msgstr "" -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Create Navigation Polygon" +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Bake!" +msgstr "" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Bake the navigation mesh.\n" +msgstr "" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Clear the navigation mesh." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Setting up Configuration..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Calculating grid size..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating heightfield..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Marking walkable triangles..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Constructing compact heightfield..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Eroding walkable area..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Partioning..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating contours..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating polymesh..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Converting to native navigation mesh..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Navigation Mesh Generator Setup:" +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Parsing Geometry..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Done!" msgstr "" #: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Remove Poly And Point" +msgid "Create Navigation Polygon" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4436,15 +4018,15 @@ msgid "Curve Point #" msgstr "" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Point Pos" +msgid "Set Curve Point Position" msgstr "" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve In Pos" +msgid "Set Curve In Position" msgstr "" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Out Pos" +msgid "Set Curve Out Position" msgstr "" #: editor/plugins/path_editor_plugin.cpp @@ -4504,6 +4086,14 @@ msgid "Scale Polygon" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon->UV" msgstr "" @@ -4558,63 +4148,10 @@ msgstr "" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "" -#: editor/plugins/rich_text_editor_plugin.cpp -msgid "Parse BBCode" -msgstr "" - -#: editor/plugins/sample_editor_plugin.cpp -msgid "Length:" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Open Sample File(s)" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "ERROR: Couldn't load sample!" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Add Sample" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Rename Sample" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Delete Sample" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "16 Bits" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "8 Bits" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Stereo" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Mono" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/script_editor_debugger.cpp -msgid "Format" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Pitch" -msgstr "" - #: editor/plugins/script_editor_plugin.cpp msgid "Clear Recent Files" msgstr "" @@ -4705,6 +4242,10 @@ msgstr "" msgid "Close All" msgstr "" +#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp +msgid "Run" +msgstr "" + #: editor/plugins/script_editor_plugin.cpp msgid "Toggle Scripts Panel" msgstr "" @@ -4746,18 +4287,6 @@ msgid "Debug with external editor" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Window" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Left" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Right" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp msgid "Open Godot online documentation" msgstr "" @@ -4840,7 +4369,7 @@ msgstr "" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Copy" msgstr "" @@ -5103,10 +4632,6 @@ msgid "View Plane Transform." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Scaling to %s%%." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." msgstr "" @@ -5123,10 +4648,6 @@ msgid "Top View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Top" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "" @@ -5354,6 +4875,10 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Configure Snap.." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Local Coords" msgstr "" @@ -5499,6 +5024,10 @@ msgid "Speed (FPS):" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Loop" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animation Frames" msgstr "" @@ -5511,11 +5040,11 @@ msgid "Insert Empty (After)" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Up" +msgid "Move (Before)" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Down" +msgid "Move (After)" msgstr "" #: editor/plugins/style_box_editor_plugin.cpp @@ -5677,6 +5206,10 @@ msgid "Style" msgstr "" #: editor/plugins/theme_editor_plugin.cpp +msgid "Font" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp msgid "Color" msgstr "" @@ -5725,7 +5258,7 @@ msgid "Mirror Y" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Bucket" +msgid "Paint Tile" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp @@ -5789,6 +5322,10 @@ msgid "Delete preset '%s'?" msgstr "" #: editor/project_export.cpp +msgid "Export templates for this platform are missing/corrupted: " +msgstr "" + +#: editor/project_export.cpp msgid "Presets" msgstr "" @@ -5859,19 +5396,29 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +msgid "Export templates for this platform are missing/corrupted:" +msgstr "" + +#: editor/project_export.cpp msgid "Export With Debug" msgstr "" #: editor/project_manager.cpp -msgid "Invalid project path, the path must exist!" +msgid "The path does not exists." +msgstr "" + +#: editor/project_manager.cpp +msgid "Please choose a 'project.godot' file." msgstr "" #: editor/project_manager.cpp -msgid "Invalid project path, project.godot must not exist." +msgid "" +"Your project will be created in a non empty folder (you might want to create " +"a new folder)." msgstr "" #: editor/project_manager.cpp -msgid "Invalid project path, project.godot must exist." +msgid "Please choose a folder that does not contain a 'project.godot' file." msgstr "" #: editor/project_manager.cpp @@ -5879,10 +5426,26 @@ msgid "Imported Project" msgstr "" #: editor/project_manager.cpp +msgid " " +msgstr "" + +#: editor/project_manager.cpp +msgid "It would be a good idea to name your project." +msgstr "" + +#: editor/project_manager.cpp msgid "Invalid project path (changed anything?)." msgstr "" #: editor/project_manager.cpp +msgid "Couldn't get project.godot in project path." +msgstr "" + +#: editor/project_manager.cpp +msgid "Couldn't edit project.godot in project path." +msgstr "" + +#: editor/project_manager.cpp msgid "Couldn't create project.godot in project path." msgstr "" @@ -5891,23 +5454,23 @@ msgid "The following files failed extraction from package:" msgstr "" #: editor/project_manager.cpp -msgid "Import Existing Project" +msgid "Rename Project" msgstr "" #: editor/project_manager.cpp -msgid "Project Path (Must Exist):" +msgid "Couldn't get project.godot in the project path." msgstr "" #: editor/project_manager.cpp -msgid "Project Name:" +msgid "New Game Project" msgstr "" #: editor/project_manager.cpp -msgid "Create New Project" +msgid "Import Existing Project" msgstr "" #: editor/project_manager.cpp -msgid "Project Path:" +msgid "Create New Project" msgstr "" #: editor/project_manager.cpp @@ -5915,11 +5478,19 @@ msgid "Install Project:" msgstr "" #: editor/project_manager.cpp -msgid "Browse" +msgid "Project Name:" msgstr "" #: editor/project_manager.cpp -msgid "New Game Project" +msgid "Create folder" +msgstr "" + +#: editor/project_manager.cpp +msgid "Project Path:" +msgstr "" + +#: editor/project_manager.cpp +msgid "Browse" msgstr "" #: editor/project_manager.cpp @@ -5931,6 +5502,10 @@ msgid "Unnamed Project" msgstr "" #: editor/project_manager.cpp +msgid "Can't open project" +msgstr "" + +#: editor/project_manager.cpp msgid "Are you sure to open more than one project?" msgstr "" @@ -5966,10 +5541,6 @@ msgid "Project List" msgstr "" #: editor/project_manager.cpp -msgid "Run" -msgstr "" - -#: editor/project_manager.cpp msgid "Scan" msgstr "" @@ -6026,17 +5597,14 @@ msgid "Add Input Action Event" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Meta+" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Shift+" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Alt+" msgstr "" @@ -6097,7 +5665,7 @@ msgstr "" msgid "Joypad Axis Index:" msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Axis" msgstr "" @@ -6117,31 +5685,31 @@ msgstr "" msgid "Add Event" msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Device" msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Button" msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Left Button." msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Right Button." msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Middle Button." msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Up." msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Down." msgstr "" @@ -6150,7 +5718,7 @@ msgid "Add Global Property" msgstr "" #: editor/project_settings_editor.cpp -msgid "Select an setting item first!" +msgid "Select a setting item first!" msgstr "" #: editor/project_settings_editor.cpp @@ -6166,6 +5734,14 @@ msgid "Delete Item" msgstr "" #: editor/project_settings_editor.cpp +msgid "Can't contain '/' or ':'" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Already existing" +msgstr "" + +#: editor/project_settings_editor.cpp msgid "Error saving settings." msgstr "" @@ -6314,10 +5890,18 @@ msgid "New Script" msgstr "" #: editor/property_editor.cpp +msgid "Make Unique" +msgstr "" + +#: editor/property_editor.cpp msgid "Show in File System" msgstr "" #: editor/property_editor.cpp +msgid "Convert To %s" +msgstr "" + +#: editor/property_editor.cpp msgid "Error loading file: Not a resource!" msgstr "" @@ -6354,6 +5938,10 @@ msgid "Select Property" msgstr "" #: editor/property_selector.cpp +msgid "Select Virtual Method" +msgstr "" + +#: editor/property_selector.cpp msgid "Select Method" msgstr "" @@ -6381,26 +5969,6 @@ msgstr "" msgid "Reparent" msgstr "" -#: editor/resources_dock.cpp -msgid "Create New Resource" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Open Resource" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Save Resource" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Resource Tools" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Make Local" -msgstr "" - #: editor/run_settings_dialog.cpp msgid "Run Mode:" msgstr "" @@ -6527,14 +6095,6 @@ msgid "Sub-Resources:" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Edit Groups" -msgstr "" - -#: editor/scene_tree_dock.cpp -msgid "Edit Connections" -msgstr "" - -#: editor/scene_tree_dock.cpp msgid "Clear Inheritance" msgstr "" @@ -6715,6 +6275,14 @@ msgid "Invalid base path" msgstr "" #: editor/script_create_dialog.cpp +msgid "Directory of the same name exists" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "File exists, will be reused" +msgstr "" + +#: editor/script_create_dialog.cpp msgid "Invalid extension" msgstr "" @@ -6755,6 +6323,10 @@ msgid "Load existing script file" msgstr "" #: editor/script_create_dialog.cpp +msgid "Language" +msgstr "" + +#: editor/script_create_dialog.cpp msgid "Inherits" msgstr "" @@ -6795,6 +6367,10 @@ msgid "Function:" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Errors" msgstr "" @@ -6875,6 +6451,10 @@ msgid "Type" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Format" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Usage" msgstr "" @@ -6950,12 +6530,28 @@ msgstr "" msgid "Change Probe Extents" msgstr "" +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Library" +msgstr "" + +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Status" +msgstr "" + +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Libraries: " +msgstr "" + +#: modules/gdnative/register_types.cpp +msgid "GDNative" +msgstr "" + #: 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/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "" @@ -7005,10 +6601,6 @@ msgid "GridMap Duplicate Selection" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Paint" -msgstr "" - -#: modules/gridmap/grid_map_editor_plugin.cpp msgid "Snap View" msgstr "" @@ -7100,12 +6692,8 @@ msgstr "" msgid "Pick Distance:" msgstr "" -#: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Tiles" -msgstr "" - -#: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Areas" +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "Builds" msgstr "" #: modules/visual_script/visual_script.cpp @@ -7295,10 +6883,18 @@ msgid "Return" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Call" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Get" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Script already has function '%s'" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Input Value" msgstr "" @@ -7652,6 +7248,12 @@ msgid "" "order for AnimatedSprite3D to display frames." msgstr "" +#: scene/3d/vehicle_body.cpp +msgid "" +"VehicleWheel serves to provide a wheel system to a VehicleBody. Please use " +"it as a child of a VehicleBody." +msgstr "" + #: scene/gui/color_picker.cpp msgid "Raw Mode" msgstr "" @@ -7661,15 +7263,15 @@ msgid "Add current color as a preset" msgstr "" #: scene/gui/dialogs.cpp -msgid "Alert!" +msgid "Cancel" msgstr "" #: scene/gui/dialogs.cpp -msgid "Please Confirm..." +msgid "Alert!" msgstr "" -#: scene/gui/input_action.cpp -msgid "Ctrl+" +#: scene/gui/dialogs.cpp +msgid "Please Confirm..." msgstr "" #: scene/gui/popup.cpp @@ -7699,3 +7301,19 @@ 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 +msgid "Error initializing FreeType." +msgstr "" + +#: scene/resources/dynamic_font.cpp +msgid "Unknown font format." +msgstr "" + +#: scene/resources/dynamic_font.cpp +msgid "Error loading font." +msgstr "" + +#: scene/resources/dynamic_font.cpp +msgid "Invalid font size." +msgstr "" diff --git a/editor/translations/el.po b/editor/translations/el.po index 21adc08c3f..4cf08adc7a 100644 --- a/editor/translations/el.po +++ b/editor/translations/el.po @@ -2,20 +2,20 @@ # Copyright (C) 2016-2017 Juan Linietsky, Ariel Manzur and the Godot community # This file is distributed under the same license as the Godot source code. # -# gtsiam <gtsiam@windowslive.com>, 2017. +# George Tsiamasiotis <gtsiam@windowslive.com>, 2017. # msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2017-06-29 17:12+0000\n" -"Last-Translator: gtsiam <gtsiam@windowslive.com>\n" +"PO-Revision-Date: 2017-08-27 16:46+0000\n" +"Last-Translator: George Tsiamasiotis <gtsiam@windowslive.com>\n" "Language-Team: Greek <https://hosted.weblate.org/projects/godot-engine/godot/" "el/>\n" "Language: el\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.15-dev\n" +"X-Generator: Weblate 2.17-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -191,10 +191,9 @@ msgid "Create %d NEW tracks and insert keys?" msgstr "ΔημιουÏγία %d νÎων κομματιών και εισαγωγή κλειδιών;" #: editor/animation_editor.cpp editor/create_dialog.cpp -#: editor/editor_audio_buses.cpp +#: editor/editor_audio_buses.cpp editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp #: editor/plugins/mesh_instance_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp editor/project_manager.cpp #: editor/script_create_dialog.cpp msgid "Create" @@ -358,262 +357,6 @@ msgstr "Αλλαγή Ï„Ïπου τιμής πίνακα" msgid "Change Array Value" msgstr "Αλλαγή τιμής πίνακα" -#: editor/asset_library_editor_plugin.cpp -msgid "Free" -msgstr "ΔωÏεάν" - -#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp -msgid "Version:" -msgstr "Έκδοση:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Contents:" -msgstr "ΠεÏιεχόμενα:" - -#: editor/asset_library_editor_plugin.cpp -msgid "View Files" -msgstr "Î Ïοβολή αÏχείων" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_help.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp -msgid "Description:" -msgstr "ΠεÏιγÏαφή:" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -#: editor/project_manager.cpp -msgid "Install" -msgstr "Εγκατάσταση" - -#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp -#: editor/connections_dialog.cpp editor/export_template_manager.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -#: editor/project_settings_editor.cpp editor/property_editor.cpp -#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Close" -msgstr "Κλείσιμο" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve hostname:" -msgstr "Δεν είναι δυνατή η επίλυση του ονόματος του κεντÏÎ¹ÎºÎ¿Ï Ï…Ï€Î¿Î»Î¿Î³Î¹ÏƒÏ„Î®:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve." -msgstr "Δεν είναι δυνατή η επίλυση." - -#: editor/asset_library_editor_plugin.cpp -msgid "Connection error, please try again." -msgstr "Σφάλμα σÏνδεσης, παÏακαλώ ξαναπÏοσπαθήστε." - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't connect." -msgstr "Δεν ήταν δυνατή η σÏνδεση." - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't connect to host:" -msgstr "Δεν ήταν δυνατή η σÏνδεση στον κεντÏικό υπολογιστή:" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response from host:" -msgstr "Δεν λήφθηκε απόκÏιση από τον κεντÏικό υπολογιστή:" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response." -msgstr "Δεν λήφθηκε απόκÏιση." - -#: editor/asset_library_editor_plugin.cpp -msgid "Request failed, return code:" -msgstr "Το αίτημα απÎτυχε, κώδικας επιστÏοφής:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Req. Failed." -msgstr "Το αίτημα απÎτυχε." - -#: editor/asset_library_editor_plugin.cpp -msgid "Request failed, too many redirects" -msgstr "Το αίτημα απÎτυχε, πάÏα πολλÎÏ‚ ανακατευθήνσεις" - -#: editor/asset_library_editor_plugin.cpp -msgid "Redirect Loop." -msgstr "Î’Ïόχος ανακατευθήνσεων." - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed:" -msgstr "ΑπÎτυχε:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Bad download hash, assuming file has been tampered with." -msgstr "" -"ΕσφαλμÎνος κωδικός κατακεÏματισμοÏ, θα θεωÏηθεί ότι το αÏχείο Îχει αλοιωθεί." - -#: editor/asset_library_editor_plugin.cpp -msgid "Expected:" -msgstr "Αναμενόμενο:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Got:" -msgstr "ΔοσμÎνο:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed sha256 hash check" -msgstr "Η δοκιμή κατακεÏÎ¼Î±Ï„Î¹ÏƒÎ¼Î¿Ï sha256 απÎτυχε" - -#: editor/asset_library_editor_plugin.cpp -msgid "Asset Download Error:" -msgstr "Σφάλμα λήψης:" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -msgid "Success!" -msgstr "Επιτυχία!" - -#: editor/asset_library_editor_plugin.cpp -msgid "Fetching:" -msgstr "Λήψη:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Resolving.." -msgstr "Επίλυση..." - -#: editor/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "ΣÏνδεση.." - -#: editor/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "Γίνεται αίτημα.." - -#: editor/asset_library_editor_plugin.cpp -msgid "Error making request" -msgstr "Σφάλμα κατά την Ï€Ïαγματοποίηση αιτήματος" - -#: editor/asset_library_editor_plugin.cpp -msgid "Idle" -msgstr "ΑνενεÏγό" - -#: editor/asset_library_editor_plugin.cpp -msgid "Retry" -msgstr "Ξαναδοκίμασε" - -#: editor/asset_library_editor_plugin.cpp -msgid "Download Error" -msgstr "Σφάλμα λήψης" - -#: editor/asset_library_editor_plugin.cpp -msgid "Download for this asset is already in progress!" -msgstr "Η λήψη είναι ήδη σε εξÎλιξη!" - -#: editor/asset_library_editor_plugin.cpp -msgid "first" -msgstr "Î Ïώτο" - -#: editor/asset_library_editor_plugin.cpp -msgid "prev" -msgstr "Î ÏοηγοÏμενο" - -#: editor/asset_library_editor_plugin.cpp -msgid "next" -msgstr "Επόμενο" - -#: editor/asset_library_editor_plugin.cpp -msgid "last" -msgstr "Î ÏοηγοÏμενο" - -#: editor/asset_library_editor_plugin.cpp -msgid "All" -msgstr "Όλα" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/property_selector.cpp editor/quick_open.cpp -#: editor/settings_config_dialog.cpp -msgid "Search:" -msgstr "Αναζήτηση:" - -#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Search" -msgstr "Αναζήτηση" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/project_manager.cpp -msgid "Import" -msgstr "Εισαγωγή" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Plugins" -msgstr "Î Ïόσθετα" - -#: editor/asset_library_editor_plugin.cpp -msgid "Sort:" -msgstr "Ταξινόμηση:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Reverse" -msgstr "ΑντιστÏοφή" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Category:" -msgstr "ΚατηγοÏία:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Site:" -msgstr "ΔιεÏθυνση:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "ΥποστήÏιξη.." - -#: editor/asset_library_editor_plugin.cpp -msgid "Official" -msgstr "Επίσημα" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -msgid "Community" -msgstr "Κοινότητα" - -#: editor/asset_library_editor_plugin.cpp -msgid "Testing" -msgstr "Δοκιμιμαστικά" - -#: editor/asset_library_editor_plugin.cpp -msgid "Assets ZIP File" -msgstr "ΑÏχείο ZIP των Asset" - -#: editor/call_dialog.cpp -msgid "Method List For '%s':" -msgstr "Λίστα συναÏτήσεων για '%s':" - -#: editor/call_dialog.cpp modules/visual_script/visual_script_editor.cpp -msgid "Call" -msgstr "Κλήση" - -#: editor/call_dialog.cpp -msgid "Method List:" -msgstr "Λίστα συναÏτήσεων:" - -#: editor/call_dialog.cpp -msgid "Arguments:" -msgstr "ΠαÏάμετÏοι:" - -#: editor/call_dialog.cpp -msgid "Return:" -msgstr "ΕπιστÏÎφει:" - #: editor/code_editor.cpp msgid "Go to Line" msgstr "Πήγαινε στη γÏαμμή" @@ -650,6 +393,14 @@ msgstr "ΟλόκληÏες λÎξεις" msgid "Selection Only" msgstr "Μόνο στην επιλογή" +#: editor/code_editor.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp +msgid "Search" +msgstr "Αναζήτηση" + #: editor/code_editor.cpp editor/editor_help.cpp msgid "Find" msgstr "ΕÏÏεση" @@ -682,11 +433,11 @@ msgstr "Ρώτησε στην αντικατάσταση" msgid "Skip" msgstr "ΠαÏάλειψη" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom In" msgstr "ΜεγÎθυνση" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom Out" msgstr "ΣμÏκÏινση" @@ -755,6 +506,20 @@ msgstr "ΑναβλημÎνη" msgid "Oneshot" msgstr "Μία κλήση" +#: editor/connections_dialog.cpp editor/dependency_editor.cpp +#: editor/export_template_manager.cpp +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Close" +msgstr "Κλείσιμο" + #: editor/connections_dialog.cpp msgid "Connect" msgstr "ΣÏνδεση" @@ -780,7 +545,7 @@ msgstr "ΣÏνδεση.." msgid "Disconnect" msgstr "ΑποσÏνδεση" -#: editor/connections_dialog.cpp editor/node_dock.cpp +#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" msgstr "Σήματα" @@ -797,12 +562,25 @@ msgstr "ΑγαπημÎνα:" msgid "Recent:" msgstr "Î Ïόσφατα:" +#: editor/create_dialog.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp +#: editor/quick_open.cpp editor/settings_config_dialog.cpp +msgid "Search:" +msgstr "Αναζήτηση:" + #: editor/create_dialog.cpp editor/editor_help.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp #: editor/quick_open.cpp msgid "Matches:" msgstr "Αντιστοιχίες:" +#: editor/create_dialog.cpp editor/editor_help.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp +#: editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "ΠεÏιγÏαφή:" + #: editor/dependency_editor.cpp msgid "Search Replacement For:" msgstr "Αναζήτηση αντικατάστασης για:" @@ -862,6 +640,10 @@ msgid "Owners Of:" msgstr "Ιδιοκτήτες του:" #: editor/dependency_editor.cpp +msgid "Remove selected files from the project? (no undo)" +msgstr "Îα αφαιÏεθοÏν τα επιλεγμÎνα αÏχεία από το ÎÏγο; (ΑδÏνατη η αναίÏεση)" + +#: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" @@ -871,8 +653,9 @@ msgstr "" "Îα αφαιÏεθοÏν; (ΑδÏνατη η αναίÏεση)" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (no undo)" -msgstr "Îα αφαιÏεθοÏν τα επιλεγμÎνα αÏχεία από το ÎÏγο; (ΑδÏνατη η αναίÏεση)" +#, fuzzy +msgid "Cannot remove:\n" +msgstr "Δεν είναι δυνατή η επίλυση." #: editor/dependency_editor.cpp msgid "Error loading:" @@ -938,19 +721,12 @@ msgid "Godot Engine contributors" msgstr "ΣυνεισφÎÏοντες στην Godot Engine" #: editor/editor_about.cpp -#, fuzzy -msgid "Authors" -msgstr "ΣυγγÏαφÎας:" - -#: editor/editor_about.cpp -#, fuzzy msgid "Project Founders" -msgstr "ΔιαχειÏιστής" +msgstr "ΙδÏÏ…Ï„ÎÏ‚ του ÎÏγου" #: editor/editor_about.cpp -#, fuzzy msgid "Lead Developer" -msgstr "Î ÏογÏαμματιστÎÏ‚" +msgstr "Επικεφαλής Ï€ÏογÏαμματιστής" #: editor/editor_about.cpp editor/project_manager.cpp msgid "Project Manager" @@ -961,118 +737,156 @@ msgid "Developers" msgstr "Î ÏογÏαμματιστÎÏ‚" #: editor/editor_about.cpp -msgid "License" +msgid "Authors" +msgstr "ΣυγγÏαφείς" + +#: editor/editor_about.cpp +msgid "Platinum Sponsors" msgstr "" #: editor/editor_about.cpp -msgid "Thirdparty License" +msgid "Gold Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Mini Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Silver Donors" msgstr "" #: editor/editor_about.cpp +#, fuzzy +msgid "Bronze Donors" +msgstr "Κλωνοποίηση κάτω" + +#: editor/editor_about.cpp +msgid "Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "License" +msgstr "Άδεια" + +#: editor/editor_about.cpp +msgid "Thirdparty License" +msgstr "Άδεια Ï„Ïίτων ομάδων" + +#: editor/editor_about.cpp msgid "" "Godot Engine relies on a number of thirdparty free and open source " "libraries, all compatible with the terms of its MIT license. The following " "is an exhaustive list of all such thirdparty components with their " "respective copyright statements and license terms." msgstr "" +"Η μηχανή Godot βασίζεται σε μια σειÏά από δωÏεάν και Î±Î½Î¿Î¹Ï‡Ï„Î¿Ï ÎºÏŽÎ´Î¹ÎºÎ± " +"βιβλιοθήκες Ï„Ïίτων ομάδων, όλες συμβατÎÏ‚ με τους ÏŒÏους της άδειας MIT. " +"Ακολουθεί μία εκτενής λίστα με όλα τα σχετικά συστατικά της μηχανής μαζί με " +"όλες τις αντοίστοιχες δηλώσεις Ï€Ïοστασίας πνευματικών δικαιωμάτων και τους " +"ÏŒÏους των αδειών τους." #: editor/editor_about.cpp -#, fuzzy msgid "All Components" -msgstr "ΠεÏιεχόμενα:" +msgstr "Όλα τα συστατικά" #: editor/editor_about.cpp -#, fuzzy msgid "Components" -msgstr "ΠεÏιεχόμενα:" +msgstr "Συστατικά" #: editor/editor_about.cpp msgid "Licenses" -msgstr "" +msgstr "Άδειες" #: editor/editor_asset_installer.cpp editor/project_manager.cpp msgid "Error opening package file, not in zip format." -msgstr "" +msgstr "Σφάλμα κατά το άνοιγμα του πακÎτου, δεν είναι αÏχείο zip." #: editor/editor_asset_installer.cpp -#, fuzzy msgid "Uncompressing Assets" -msgstr "Ασυμπίεστο" +msgstr "Αποσυμπίεση asset" #: editor/editor_asset_installer.cpp editor/project_manager.cpp msgid "Package Installed Successfully!" msgstr "Το πακÎτο εγκαταστάθηκε επιτυχώς!" #: editor/editor_asset_installer.cpp -#, fuzzy +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Success!" +msgstr "Επιτυχία!" + +#: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp +msgid "Install" +msgstr "Εγκατάσταση" + +#: editor/editor_asset_installer.cpp msgid "Package Installer" -msgstr "Το πακÎτο εγκαταστάθηκε επιτυχώς!" +msgstr "Î ÏόγÏαμμα εγκατάστασης πακÎτων" #: editor/editor_audio_buses.cpp msgid "Speakers" -msgstr "" +msgstr "Ηχεία" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Add Effect" -msgstr "Î Ïοσθήκη συμβάντος" +msgstr "Î Ïοσθήκη εφÎ" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Rename Audio Bus" -msgstr "Άνοιγμα διάταξης διαÏλων ήχου" +msgstr "Μετονομασία διαÏλου ήχου" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Toggle Audio Bus Solo" -msgstr "Άνοιγμα διάταξης διαÏλων ήχου" +msgstr "Εναλλαγή σόλο διαÏλου ήχου" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Toggle Audio Bus Mute" -msgstr "Άνοιγμα διάταξης διαÏλων ήχου" +msgstr "Εναλλαγή σίγασης διαÏλου ήχου" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Bypass Effects" -msgstr "" +msgstr "Εναλλαγή παÏάκαμψης εφΠδιαÏλου ήχου" #: editor/editor_audio_buses.cpp msgid "Select Audio Bus Send" -msgstr "" +msgstr "Επιλογή Ï€ÏοοÏÎ¹ÏƒÎ¼Î¿Ï Î´Î¹Î±Ïλου ήχου" #: editor/editor_audio_buses.cpp msgid "Add Audio Bus Effect" -msgstr "" +msgstr "Î Ïοσθήκη εφΠδιαÏλου ήχου" #: editor/editor_audio_buses.cpp msgid "Move Bus Effect" -msgstr "" +msgstr "Μετακίνηση εφΠδιαÏλου ήχου" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Delete Bus Effect" -msgstr "ΔιαγÏαφή επιλεγμÎνου" +msgstr "ΔιαγÏαφή εφΠδιαÏλου ήχου" #: editor/editor_audio_buses.cpp msgid "Audio Bus, Drag and Drop to rearrange." -msgstr "" - -#: editor/editor_audio_buses.cpp -#, fuzzy -msgid "Bus options" -msgstr "ΕπιλογÎÏ‚ υπο-σκηνής" +msgstr "Δίαυλος ήχου, ΣÏÏσιμο και απόθεση για αναδιάταξη." #: editor/editor_audio_buses.cpp msgid "Solo" -msgstr "" +msgstr "Σόλο" #: editor/editor_audio_buses.cpp msgid "Mute" -msgstr "" +msgstr "Σίγαση" #: editor/editor_audio_buses.cpp msgid "Bypass" -msgstr "" +msgstr "ΠαÏάκαμψη" + +#: editor/editor_audio_buses.cpp +msgid "Bus options" +msgstr "ΕπιλογÎÏ‚ διαÏλου" #: editor/editor_audio_buses.cpp editor/plugins/tile_map_editor_plugin.cpp #: editor/scene_tree_dock.cpp @@ -1081,32 +895,37 @@ msgstr "Διπλασιασμός" #: editor/editor_audio_buses.cpp #, fuzzy +msgid "Reset Volume" +msgstr "ΕπαναφοÏά μεγÎθυνσης" + +#: editor/editor_audio_buses.cpp msgid "Delete Effect" -msgstr "ΔιαγÏαφή επιλεγμÎνου" +msgstr "ΔιαγÏαφή εφÎ" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Add Audio Bus" -msgstr "Î Ïοσθήκη διαÏλου" +msgstr "Î Ïοσθήκη διαÏλου ήχου" #: editor/editor_audio_buses.cpp msgid "Master bus can't be deleted!" -msgstr "" +msgstr "Ο Ï€ÏωτεÏον δίαυλος δεν μποÏεί να διαγÏαφεί!" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Delete Audio Bus" -msgstr "ΔιαγÏαφή διάταξης" +msgstr "ΔιαγÏαφή διαÏλου ήχου" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Duplicate Audio Bus" -msgstr "ΑναπαÏαγωγή κίνησης" +msgstr "ΑναπαÏαγωγή διαÏλου ήχου" #: editor/editor_audio_buses.cpp #, fuzzy +msgid "Reset Bus Volume" +msgstr "ΕπαναφοÏά μεγÎθυνσης" + +#: editor/editor_audio_buses.cpp msgid "Move Audio Bus" -msgstr "ΕνÎÏγεια μετακίνησης" +msgstr "Μετακίνηση διαÏλου ήχου" #: editor/editor_audio_buses.cpp msgid "Save Audio Bus Layout As.." @@ -1122,32 +941,28 @@ msgstr "Άνοιγμα διάταξης διαÏλων ήχου" #: editor/editor_audio_buses.cpp msgid "There is no 'res://default_bus_layout.tres' file." -msgstr "" +msgstr "Δεν υπάÏχει αÏχείο 'res://default_bus_layout.tres'." #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Invalid file, not an audio bus layout." -msgstr "" -"ΆκυÏη επÎκταση αÏχείου.\n" -"ΠαÏακαλώ χÏησιμοποιήστε .font." +msgstr "ΆκυÏο αÏχείο, δεν είναι διάταξη διαÏλων ήχου." #: editor/editor_audio_buses.cpp msgid "Add Bus" msgstr "Î Ïοσθήκη διαÏλου" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Create a new Bus Layout." -msgstr "ΔημιουÏγία νÎου πόÏου" +msgstr "ΔημιουÏγία νÎας διάταξης διαÏλων ήχου." -#: editor/editor_audio_buses.cpp editor/script_create_dialog.cpp +#: editor/editor_audio_buses.cpp editor/property_editor.cpp +#: editor/script_create_dialog.cpp msgid "Load" msgstr "ΦόÏτωσε" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Load an existing Bus Layout." -msgstr "ΦόÏτωσε υπάÏχων πόÏο στη μνήμη και επεξεÏγάσου τον." +msgstr "ΦόÏτωση υπαÏκτής διάταξης διαÏλων ήχου." #: editor/editor_audio_buses.cpp #: editor/plugins/animation_player_editor_plugin.cpp @@ -1155,18 +970,16 @@ msgid "Save As" msgstr "Αποθήκευση ÏŽÏ‚" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Save this Bus Layout to a file." -msgstr "Αποθήκευση διάταξης διαÏλων ήχου ÏŽÏ‚.." +msgstr "Αποθήκευση διάταξης διαÏλων ήχου σε αÏχείο." #: editor/editor_audio_buses.cpp editor/import_dock.cpp -#, fuzzy msgid "Load Default" -msgstr "Î Ïοεπιλογή" +msgstr "ΦόÏτωση Ï€Ïοεπιλογής" #: editor/editor_audio_buses.cpp msgid "Load the default Bus Layout." -msgstr "" +msgstr "ΦόÏτωση Ï€ÏοεπιλεγμÎνης διάταξης διαÏλων ήχου." #: editor/editor_autoload_settings.cpp msgid "Invalid name." @@ -1235,7 +1048,7 @@ msgid "Rearrange Autoloads" msgstr "Αναδιάταξη των AutoLoad" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp scene/gui/file_dialog.cpp +#: scene/gui/file_dialog.cpp msgid "Path:" msgstr "ΔιαδÏομή:" @@ -1243,9 +1056,7 @@ msgstr "ΔιαδÏομή:" msgid "Node Name:" msgstr "Όνομα κόμβου:" -#: editor/editor_autoload_settings.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp editor/project_manager.cpp +#: editor/editor_autoload_settings.cpp editor/project_manager.cpp msgid "Name" msgstr "Όνομα" @@ -1270,27 +1081,27 @@ msgid "Updating scene.." msgstr "ΕνημÎÏωση σκηνής.." #: editor/editor_dir_dialog.cpp -#, fuzzy msgid "Please select a base directory first" -msgstr "ΠαÏακαλοÏμε αποθηκεÏστε την σκηνή Ï€Ïώτα." +msgstr "ΠαÏακαλοÏμε επιλÎξτε Ï€Ïώτα Îναν βασικό κατάλογο" #: editor/editor_dir_dialog.cpp msgid "Choose a Directory" msgstr "ΕπιλÎξτε Îνα λεξικό" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Create Folder" msgstr "ΔημιουÏγία φακÎλου" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: editor/editor_plugin_settings.cpp editor/plugins/theme_editor_plugin.cpp -#: editor/project_export.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp +#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp +#: scene/gui/file_dialog.cpp msgid "Name:" msgstr "Όνομα:" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Could not create folder." msgstr "ΑδÏνατη η δημιουÏγία φακÎλου." @@ -1310,30 +1121,6 @@ msgstr "ΠακετάÏισμα" msgid "Template file not found:\n" msgstr "Δεν βÏÎθηκε το αÏχείο Ï€ÏοτÏπου:\n" -#: editor/editor_export.cpp -msgid "Added:" -msgstr "Î ÏοστÎθηκαν:" - -#: editor/editor_export.cpp -msgid "Removed:" -msgstr "ΑφαιÏÎθηκαν:" - -#: editor/editor_export.cpp -msgid "Error saving atlas:" -msgstr "Σφάλμα κατά την αποθήκευση άτλαντα:" - -#: editor/editor_export.cpp -msgid "Could not save atlas subtexture:" -msgstr "ΑδÏνατη η αποθήκευση υπό-εικόνας άτλαντα:" - -#: editor/editor_export.cpp -msgid "Exporting for %s" -msgstr "Εξαγωγή για %s" - -#: editor/editor_export.cpp -msgid "Setting Up.." -msgstr "ΑÏχικοποίηση.." - #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "Το αÏχείο υπάÏχει. ΘÎλετε να το αντικαταστήσετε;" @@ -1418,6 +1205,11 @@ msgstr "Μετακίνηση αγαπημÎνου πάνω" msgid "Move Favorite Down" msgstr "Μετακίνηση αγαπημÎνου κάτω" +#: editor/editor_file_dialog.cpp +#, fuzzy +msgid "Go to parent folder" +msgstr "ΑδÏνατη η δημιουÏγία φακÎλου." + #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Directories & Files:" msgstr "Φάκελοι & ΑÏχεία:" @@ -1460,6 +1252,10 @@ msgstr "Λίστα κλάσεων:" msgid "Search Classes" msgstr "Αναζήτηση κλάσεων" +#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +msgid "Top" +msgstr "Πάνω" + #: editor/editor_help.cpp editor/property_editor.cpp msgid "Class:" msgstr "Κλάση:" @@ -1476,15 +1272,30 @@ msgstr "ΚληÏονομείται από:" msgid "Brief Description:" msgstr "ΣÏντομη πεÏιγÏαφή:" +#: editor/editor_help.cpp +#, fuzzy +msgid "Members" +msgstr "ΜÎλη:" + #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "ΜÎλη:" #: editor/editor_help.cpp +#, fuzzy +msgid "Public Methods" +msgstr "Δημόσιες συναÏτήσεις:" + +#: editor/editor_help.cpp msgid "Public Methods:" msgstr "Δημόσιες συναÏτήσεις:" #: editor/editor_help.cpp +#, fuzzy +msgid "GUI Theme Items" +msgstr "Στοιχεία του θÎματος GUI:" + +#: editor/editor_help.cpp msgid "GUI Theme Items:" msgstr "Στοιχεία του θÎματος GUI:" @@ -1494,53 +1305,85 @@ msgstr "Σήματα:" #: editor/editor_help.cpp #, fuzzy +msgid "Enumerations" +msgstr "ΑπαÏιθμήσεις:" + +#: editor/editor_help.cpp msgid "Enumerations:" -msgstr "Κινήσεις" +msgstr "ΑπαÏιθμήσεις:" #: editor/editor_help.cpp msgid "enum " -msgstr "" +msgstr "απαÏίθμηση " + +#: editor/editor_help.cpp +#, fuzzy +msgid "Constants" +msgstr "ΣταθεÏÎÏ‚:" #: editor/editor_help.cpp msgid "Constants:" msgstr "ΣταθεÏÎÏ‚:" #: editor/editor_help.cpp +#, fuzzy +msgid "Description" +msgstr "ΠεÏιγÏαφή:" + +#: editor/editor_help.cpp +#, fuzzy +msgid "Properties" +msgstr "Ιδιότητες:" + +#: editor/editor_help.cpp msgid "Property Description:" msgstr "ΠεÏιγÏαφή ιδιότητας:" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this property. Please help us by " +"[color=$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp +#, fuzzy +msgid "Methods" +msgstr "Λίστα συναÏτήσεων:" + +#: editor/editor_help.cpp msgid "Method Description:" msgstr "ΠεÏιγÏαφή μεθόδου:" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this method. Please help us by [color=" +"$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp msgid "Search Text" msgstr "Αναζήτηση κειμÎνου" #: editor/editor_log.cpp -#, fuzzy msgid "Output:" -msgstr " Έξοδος:" +msgstr "Έξοδος:" #: editor/editor_log.cpp editor/plugins/animation_tree_editor_plugin.cpp -#: editor/plugins/rich_text_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_editor_debugger.cpp scene/gui/line_edit.cpp -#: scene/gui/text_edit.cpp +#: editor/property_editor.cpp editor/script_editor_debugger.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Clear" msgstr "ΕκκαθάÏιση" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Error saving resource!" msgstr "Σφάλμα κατά την αποθήκευση πόÏου!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Save Resource As.." msgstr "Αποθήκευση πόÏου ως.." -#: editor/editor_node.cpp editor/export_template_manager.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "I see.." msgstr "Εντάξει.." @@ -1557,6 +1400,30 @@ msgid "Error while saving." msgstr "Σφάλμα κατά την αποθήκευση." #: editor/editor_node.cpp +#, fuzzy +msgid "Can't open '%s'." +msgstr "ΑδÏνατη η λειτουÏγία στο '..'" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Error while parsing '%s'." +msgstr "Σφάλμα κατά την αποθήκευση." + +#: editor/editor_node.cpp +msgid "Unexpected end of file '%s'." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Missing '%s' or its dependencies." +msgstr "Η σκηνή '%s' Îχει σπασμÎνες εξαÏτήσεις:" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Error while loading '%s'." +msgstr "Σφάλμα κατά την αποθήκευση." + +#: editor/editor_node.cpp msgid "Saving Scene" msgstr "Αποθήκευση σκηνής" @@ -1569,9 +1436,8 @@ msgid "Creating Thumbnail" msgstr "ΔημιουÏγία μικÏογÏαφίας" #: editor/editor_node.cpp -#, fuzzy msgid "This operation can't be done without a tree root." -msgstr "Αυτή η λειτουÏγία δεν μποÏεί να γίνει χωÏίς σκηνή." +msgstr "Αυτή η λειτουÏγία δεν μποÏεί να γίνει χωÏίς Ïίζα δÎντÏου." #: editor/editor_node.cpp msgid "" @@ -1617,6 +1483,33 @@ msgid "Restored default layout to base settings." msgstr "ΕπαναφοÏά της Ï€ÏοεπιλεγμÎνης διάταξης στις βασικÎÏ‚ Ïυθμίσεις." #: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was imported, so it's not editable.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was instanced or inherited.\n" +"Changes to it will not be kept when saving the current scene." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource was imported, so it's not editable. Change its settings in the " +"import panel and then re-import." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This scene was imported, so changes to it will not be kept.\n" +"Instancing it or inheriting will allow making changes to it.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp msgid "Copy Params" msgstr "ΑντιγÏαφή παÏαμÎÏ„Ïων" @@ -1706,13 +1599,12 @@ msgid "Quick Open Script.." msgstr "ΓÏήγοÏη άνοιγμα δεσμής ενεÏγειών..." #: editor/editor_node.cpp -#, fuzzy msgid "Save & Close" -msgstr "Αποθήκευση αÏχείου" +msgstr "Αποθήκευση & Κλείσιμο" #: editor/editor_node.cpp msgid "Save changes to '%s' before closing?" -msgstr "" +msgstr "Αποθήκευση αλλαγών στο '%s' Ï€Ïιν το κλείσιμο;" #: editor/editor_node.cpp msgid "Save Scene As.." @@ -1743,9 +1635,8 @@ msgid "Export Tile Set" msgstr "Εξαγωγή σετ πλακιδίων" #: editor/editor_node.cpp -#, fuzzy msgid "This operation can't be done without a selected node." -msgstr "Αυτή η λειτουÏγία δεν μποÏεί να γίνει χωÏίς σκηνή." +msgstr "Αυτή η λειτουÏγία δεν μποÏεί να γίνει χωÏίς Îναν επιλεγμÎνο κόμβο." #: editor/editor_node.cpp msgid "Current scene not saved. Open anyway?" @@ -1779,22 +1670,28 @@ msgid "Exit the editor?" msgstr "ΤεÏματισμός του Ï€ÏογÏάμματος επεξεÏγασίας;" #: editor/editor_node.cpp -#, fuzzy msgid "Open Project Manager?" -msgstr "ΔιαχειÏιστής" +msgstr "Άνοιγμα του διαχειÏιστή ÎÏγων;" #: editor/editor_node.cpp -#, fuzzy msgid "Save & Quit" -msgstr "Αποθήκευση αÏχείου" +msgstr "Αποθήκευση & Έξοδος" #: editor/editor_node.cpp msgid "Save changes to the following scene(s) before quitting?" -msgstr "" +msgstr "Αποθήκευση αλλαγών στις ακόλουθες σκηνÎÏ‚ σκηνÎÏ‚ Ï€Ïιν την Îξοδο;" #: editor/editor_node.cpp msgid "Save changes the following scene(s) before opening Project Manager?" msgstr "" +"Αποθήκευση αλλαγών στις ακόλουθες σκηνÎÏ‚ σκηνÎÏ‚ Ï€Ïιν το άνοιγμα του " +"διαχειÏιστή ÎÏγων;" + +#: editor/editor_node.cpp +msgid "" +"This option is deprecated. Situations where refresh must be forced are now " +"considered a bug. Please report." +msgstr "" #: editor/editor_node.cpp msgid "Pick a Main Scene" @@ -1802,19 +1699,21 @@ msgstr "Επιλογή κÏÏιας σκηνής" #: editor/editor_node.cpp msgid "Unable to enable addon plugin at: '" -msgstr "" +msgstr "ΑδÏνατη η ενεÏγοποίηση Ï€Ïόσθετης επÎκτασης στο: '" #: editor/editor_node.cpp msgid "' parsing of config failed." -msgstr "" +msgstr "' απÎτυχε η ανάλυση του αÏγείου παÏαμÎÏ„Ïων." #: editor/editor_node.cpp msgid "Unable to find script field for addon plugin at: 'res://addons/" msgstr "" +"ΑδÏνατη η ÎÏ…Ïεση του πεδίου 'script' για την Ï€Ïόσθετη επÎκταση στο: 'res://" +"addons/" #: editor/editor_node.cpp msgid "Unable to load addon script from path: '" -msgstr "" +msgstr "ΑδÏνατη η φόÏτωση δεσμής ενεÏγειών Ï€ÏοσθÎτου από τη διαδÏομή: '" #: editor/editor_node.cpp msgid "" @@ -1826,7 +1725,7 @@ msgstr "" "σκηνή." #: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Ugh" msgstr "α..." @@ -1840,14 +1739,15 @@ msgstr "" "συνÎχεια, αποθηκεÏστε τη μÎσα στη διαδÏομή του ÎÏγου." #: editor/editor_node.cpp -msgid "Error loading scene." -msgstr "Σφάλμα κατά τη φόÏτωση σκηνής." - -#: editor/editor_node.cpp msgid "Scene '%s' has broken dependencies:" msgstr "Η σκηνή '%s' Îχει σπασμÎνες εξαÏτήσεις:" #: editor/editor_node.cpp +#, fuzzy +msgid "Clear Recent Scenes" +msgstr "ΕκκαθάÏιση Ï€Ïόσφατων αÏχείων" + +#: editor/editor_node.cpp msgid "Save Layout" msgstr "Αποθήκευση διάταξης" @@ -1877,11 +1777,10 @@ msgid "Distraction Free Mode" msgstr "ΛειτουÏγία χωÏίς διάσπαση Ï€Ïοσοχής" #: editor/editor_node.cpp -#, fuzzy msgid "Toggle distraction-free mode." -msgstr "ΛειτουÏγία χωÏίς διάσπαση Ï€Ïοσοχής" +msgstr "Εναλλαγή λειτουÏγίας χωÏίς πεÏισπασμοÏÏ‚." -#: editor/editor_node.cpp editor/io_plugins/editor_scene_import_plugin.cpp +#: editor/editor_node.cpp msgid "Scene" msgstr "Σκηνή" @@ -2120,6 +2019,10 @@ msgstr "ΕÏώτηση&Απάντηση" msgid "Issue Tracker" msgstr "ΔιαχείÏιση Ï€Ïοβλημάτων" +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +msgid "Community" +msgstr "Κοινότητα" + #: editor/editor_node.cpp msgid "About" msgstr "Σχετικά" @@ -2128,7 +2031,7 @@ msgstr "Σχετικά" msgid "Play the project." msgstr "ΑναπαÏαγωγή του ÎÏγου." -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Play" msgstr "ΑναπαÏαγωγή" @@ -2144,7 +2047,7 @@ msgstr "ΠαÏση της σκηνής" msgid "Stop the scene." msgstr "ΔιÎκοψε τη σκηνή." -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Stop" msgstr "Διακοπή" @@ -2217,6 +2120,16 @@ msgid "Object properties." msgstr "Ιδιότητες αντικειμÎνου." #: editor/editor_node.cpp +#, fuzzy +msgid "Changes may be lost!" +msgstr "Αλλαγή διανυσματικής σταθεÏάς" + +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Import" +msgstr "Εισαγωγή" + +#: editor/editor_node.cpp msgid "FileSystem" msgstr "ΣÏστημα αÏχείων" @@ -2230,15 +2143,7 @@ msgstr "Έξοδος" #: editor/editor_node.cpp msgid "Don't Save" -msgstr "" - -#: editor/editor_node.cpp editor/editor_reimport_dialog.cpp -msgid "Re-Import" -msgstr "Επανεισαγωγή" - -#: editor/editor_node.cpp editor/editor_plugin_settings.cpp -msgid "Update" -msgstr "ΕνημÎÏωση" +msgstr "ΧωÏις αποθήκευση" #: editor/editor_node.cpp msgid "Import Templates From ZIP File" @@ -2265,9 +2170,8 @@ msgid "Open & Run a Script" msgstr "Άνοιξε & ΤÏÎξε μία δεσμή ενεÏγειών" #: editor/editor_node.cpp -#, fuzzy msgid "New Inherited" -msgstr "ÎÎα κληÏονομημÎνη σκηνή.." +msgstr "ÎÎα κληÏονομημÎνη" #: editor/editor_node.cpp msgid "Load Errors" @@ -2301,11 +2205,29 @@ msgstr "Άνοιγμα του επόμενου επεξεÏγαστή" msgid "Open the previous Editor" msgstr "Άνοιγμα του Ï€ÏοηγοÏμενου επεξεÏγαστή" +#: editor/editor_plugin.cpp +#, fuzzy +msgid "Creating Mesh Previews" +msgstr "ΔημιουÏγία βιβλιοθήκης πλεγμάτων" + +#: editor/editor_plugin.cpp +msgid "Thumbnail.." +msgstr "ΜικÏογÏαφία.." + #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" msgstr "ΕγκατεστημÎνα Ï€Ïόσθετα:" #: editor/editor_plugin_settings.cpp +msgid "Update" +msgstr "ΕνημÎÏωση" + +#: editor/editor_plugin_settings.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Version:" +msgstr "Έκδοση:" + +#: editor/editor_plugin_settings.cpp msgid "Author:" msgstr "ΣυγγÏαφÎας:" @@ -2357,35 +2279,17 @@ msgstr "Εαυτός" msgid "Frame #:" msgstr "ΚαÏÎ #:" -#: editor/editor_reimport_dialog.cpp -msgid "Please wait for scan to complete." -msgstr "ΠαÏακαλώ πεÏιμÎνετε να ολοκληÏωθεί η σάÏωση." - -#: editor/editor_reimport_dialog.cpp -msgid "Current scene must be saved to re-import." -msgstr "Η Ï„ÏÎχουσα σκηνή Ï€ÏÎπει να αποθηκευτεί για να επαν-εισάγετε." - -#: editor/editor_reimport_dialog.cpp -msgid "Save & Re-Import" -msgstr "Αποθήκευση & Επανεισαγωγή" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Importing" -msgstr "Επανεισαγωγή" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Import Changed Resources" -msgstr "Επανεισαγωγή Ï„ÏοποπιημÎνων πόÏων" - #: editor/editor_run_native.cpp msgid "Select device from the list" -msgstr "" +msgstr "ΕπιλÎξτε συσκευή από την λίστα" #: editor/editor_run_native.cpp msgid "" "No runnable export preset found for this platform.\n" "Please add a runnable preset in the export menu." msgstr "" +"Δεν βÏÎθηκε εκτελÎσιμη διαμόÏφωση εξαγωγής για αυτή την πλατφόÏμα.\n" +"ΠαÏακαλοÏμε Ï€ÏοσθÎστε μία εκτελÎσιμη διαμόÏφωση στο Î¼ÎµÎ½Î¿Ï ÎµÎ¾Î±Î³Ï‰Î³Î®Ï‚." #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." @@ -2488,10 +2392,6 @@ msgid "Importing:" msgstr "Εισαγωγή:" #: editor/export_template_manager.cpp -msgid "Loading Export Templates" -msgstr "ΦόÏτωση Ï€ÏοτÏπων εξαγωγής" - -#: editor/export_template_manager.cpp msgid "Current Version:" msgstr "ΤÏÎχουσα Îκδοση:" @@ -2526,60 +2426,78 @@ msgid "Cannot navigate to '" msgstr "ΑδÏνατη η πλοήγηση στο '" #: editor/filesystem_dock.cpp -#, fuzzy +msgid "View items as a grid of thumbnails" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "View items as a list" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "" "\n" -"Status: Needs Re-Import" -msgstr "Αποθήκευση & Επανεισαγωγή" +"Status: Import of file failed. Please fix file and reimport manually." +msgstr "" #: editor/filesystem_dock.cpp -#, fuzzy msgid "" "\n" "Source: " -msgstr "Πηγή:" +msgstr "" +"\n" +"Πηγή: " #: editor/filesystem_dock.cpp -msgid "Same source and destination files, doing nothing." -msgstr "Ίδια αÏχεία πηγής και Ï€ÏοοÏισμοÏ, παÏάλειψη ενÎÏγειας." +#, fuzzy +msgid "Cannot move/rename resources root." +msgstr "Δεν ήταν δυνατή η φόÏτωση/επεξεÏγασία της πηγαίας γÏαμματοσειÏάς." #: editor/filesystem_dock.cpp -msgid "Target file exists, can't overwrite. Delete first." -msgstr "" +#, fuzzy +msgid "Cannot move a folder into itself.\n" +msgstr "Δεν είναι δυνατή η εισαγωγή ενός αÏχείου πάνω στον εαυτό του:" #: editor/filesystem_dock.cpp -msgid "Same source and destination paths, doing nothing." -msgstr "Ίδιες διαδÏομÎÏ‚ πηγής και Ï€ÏοοÏισμοÏ, παÏάλειψη ενÎÏγειας." +#, fuzzy +msgid "Error moving:\n" +msgstr "Σφάλμα κατά την μετακίνηση καταλόγου:\n" #: editor/filesystem_dock.cpp -msgid "Can't move directories to within themselves." -msgstr "ΑδÏνατη η μετακίνηση καταλόγων μÎσα στους εαυτοÏÏ‚ τους." +#, fuzzy +msgid "Unable to update dependencies:\n" +msgstr "Η σκηνή '%s' Îχει σπασμÎνες εξαÏτήσεις:" #: editor/filesystem_dock.cpp -msgid "Can't rename deps for:\n" +msgid "No name provided" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Provided name contains invalid characters" msgstr "" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Error moving file:\n" -msgstr "Σφάλμα κατά την φόÏτωση εικόνας:" +msgid "No name provided." +msgstr "Μετονομασία ή μετακίνηση.." #: editor/filesystem_dock.cpp #, fuzzy -msgid "Error moving dir:\n" -msgstr "Σφάλμα κατά την εισαγωγή:" +msgid "Name contains invalid characters." +msgstr "ΈγκυÏοι χαÏακτήÏες:" #: editor/filesystem_dock.cpp -msgid "Can't operate on '..'" -msgstr "ΑδÏνατη η λειτουÏγία στο '..'" +msgid "A file or folder with this name already exists." +msgstr "" #: editor/filesystem_dock.cpp -msgid "Pick New Name and Location For:" -msgstr "ΕπιλÎξτε νÎο όνομα και θÎση για:" +#, fuzzy +msgid "Renaming file:" +msgstr "Μετονομασία μεταβλητής" #: editor/filesystem_dock.cpp -msgid "No files selected!" -msgstr "Δεν επιλÎχθηκαν αÏχεία!" +#, fuzzy +msgid "Renaming folder:" +msgstr "Μετονομασία κόμβου" #: editor/filesystem_dock.cpp msgid "Expand all" @@ -2590,40 +2508,38 @@ msgid "Collapse all" msgstr "ΣÏμπτηξη όλων" #: editor/filesystem_dock.cpp -msgid "Show In File Manager" -msgstr "Εμφάνιση στη διαχείÏιση αÏχείων" - -#: editor/filesystem_dock.cpp -msgid "Instance" -msgstr "Στιγμιότυπο" +msgid "Copy Path" +msgstr "ΑντιγÏαφή διαδÏομής" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "ΕπεξεÏγασία εξαÏτήσεων .." +#, fuzzy +msgid "Rename.." +msgstr "Μετονομασία" #: editor/filesystem_dock.cpp -msgid "View Owners.." -msgstr "Î Ïοβολή Ιδιοκτητών .." +msgid "Move To.." +msgstr "Μετακίνηση σε..." #: editor/filesystem_dock.cpp -msgid "Copy Path" -msgstr "ΑντιγÏαφή διαδÏομής" +#, fuzzy +msgid "New Folder.." +msgstr "ΔημιουÏγία φακÎλου" #: editor/filesystem_dock.cpp -msgid "Rename or Move.." -msgstr "Μετονομασία ή μετακίνηση.." +msgid "Show In File Manager" +msgstr "Εμφάνιση στη διαχείÏιση αÏχείων" #: editor/filesystem_dock.cpp -msgid "Move To.." -msgstr "Μετακίνηση σε..." +msgid "Instance" +msgstr "Στιγμιότυπο" #: editor/filesystem_dock.cpp -msgid "Info" -msgstr "ΠληÏοφοÏίες" +msgid "Edit Dependencies.." +msgstr "ΕπεξεÏγασία εξαÏτήσεων .." #: editor/filesystem_dock.cpp -msgid "Re-Import.." -msgstr "Εκ νÎου εισαγωγή..." +msgid "View Owners.." +msgstr "Î Ïοβολή Ιδιοκτητών .." #: editor/filesystem_dock.cpp msgid "Previous Directory" @@ -2652,11 +2568,18 @@ msgid "" "Scanning Files,\n" "Please Wait.." msgstr "" +"ΣάÏωση αÏχείων,\n" +"ΠαÏακαλώ πεÏιμÎνετε.." #: editor/filesystem_dock.cpp msgid "Move" msgstr "Μετακίνηση" +#: editor/filesystem_dock.cpp editor/plugins/animation_tree_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Rename" +msgstr "Μετονομασία" + #: editor/groups_editor.cpp msgid "Add to Group" msgstr "Î Ïοσθήκη σε Ομάδα" @@ -2666,76 +2589,87 @@ msgid "Remove from Group" msgstr "ΚατάÏγηση από την ομάδα" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Import as Single Scene" -msgstr "Εισαγωγή σκηνής..." +msgstr "Εισαγωγή ως μονή σκηνή" + +#: editor/import/resource_importer_scene.cpp +#, fuzzy +msgid "Import with Separate Animations" +msgstr "Εισαγωγή με ξεχωÏιστά υλικά" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials" -msgstr "" +msgstr "Εισαγωγή με ξεχωÏιστά υλικά" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects" -msgstr "" +msgstr "Εισαγωγή με ξεχωÏιστά αντικείμενα" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects+Materials" -msgstr "" +msgstr "Εισαγωγή με ξεχωÏιστά υλικά και αντικείμενα" + +#: editor/import/resource_importer_scene.cpp +#, fuzzy +msgid "Import with Separate Objects+Animations" +msgstr "Εισαγωγή με ξεχωÏιστά υλικά και αντικείμενα" #: editor/import/resource_importer_scene.cpp #, fuzzy +msgid "Import with Separate Materials+Animations" +msgstr "Εισαγωγή με ξεχωÏιστά υλικά" + +#: editor/import/resource_importer_scene.cpp +#, fuzzy +msgid "Import with Separate Objects+Materials+Animations" +msgstr "Εισαγωγή με ξεχωÏιστά υλικά και αντικείμενα" + +#: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes" -msgstr "Εισαγωγή 3D σκηνής" +msgstr "Εισαγωγή ως πολλαπλÎÏ‚ σκηνÎÏ‚" #: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes+Materials" -msgstr "" +msgstr "Εισαγωγή ως πολλαπλÎÏ‚ σκηνÎÏ‚ και υλικά" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Import Scene" msgstr "Εισαγωγή σκηνής" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Importing Scene.." msgstr "Εισαγωγή σκηνής..." #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Running Custom Script.." msgstr "ΕκτÎλεση Ï€ÏοσαÏμοσμÎνης δÎσμης ενεÏγειών..." #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Couldn't load post-import script:" msgstr "Δεν ήταν δυνατή η φόÏτωση της δεσμής ενεÏγειών για μετά την εισαγωγή:" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Invalid/broken script for post-import (check console):" msgstr "" "ΆκυÏη / χαλασμÎνη δεσμή ενεÏγειών για την διαδικασία της μετ-εισαγωγής " "(ελÎγξτε την κονσόλα):" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Error running post-import script:" msgstr "Σφάλμα κατά την εκτÎλεση της δÎσμης ενεÏγειών μετ-εισαγωγής:" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Saving.." msgstr "Αποθήκευση..." #: editor/import_dock.cpp msgid "Set as Default for '%s'" -msgstr "" +msgstr "ΟÏισμός ως Ï€Ïοεπιλογής για '%s'" #: editor/import_dock.cpp msgid "Clear Default for '%s'" -msgstr "" +msgstr "ΕκκαθάÏιση Ï€Ïοεπιλογής για '%s'" #: editor/import_dock.cpp msgid " Files" @@ -2747,585 +2681,12 @@ msgstr "Εισαγωγή ÏŽÏ‚:" #: editor/import_dock.cpp editor/property_editor.cpp msgid "Preset.." -msgstr "Î ÏοκαθοÏισμÎνο..." +msgstr "ΔιαμόÏφωση..." #: editor/import_dock.cpp msgid "Reimport" msgstr "Επανεισαγωγή" -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "No bit masks to import!" -msgstr "Δεν υπάÏχουν μάσκες bit για εισαγωγή!" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path is empty." -msgstr "Η διαδÏομή Ï€ÏοοÏÎ¹ÏƒÎ¼Î¿Ï ÎµÎ¯Î½Î±Î¹ άδεια." - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must be a complete resource path." -msgstr "Η διαδÏομή Ï€ÏοοÏÎ¹ÏƒÎ¼Î¿Ï Ï€ÏÎπει να είναι μία πλήÏης διαδÏομή σε πόÏο." - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must exist." -msgstr "Η διαδÏομή Ï€ÏοοÏÎ¹ÏƒÎ¼Î¿Ï Ï€ÏÎπει να υπάÏχει." - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Save path is empty!" -msgstr "Η διαδÏομή αποθήκευσης είναι άδεια!" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Import BitMasks" -msgstr "Εισαγωγή μάσκας bit" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s):" -msgstr "Πηγαίες υφÎÏ‚:" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Target Path:" -msgstr "ΔιαδÏομή Ï€ÏοοÏισμοÏ:" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Accept" -msgstr "Αποδοχή" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Bit Mask" -msgstr "Μάσκα bit" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No source font file!" -msgstr "Δεν δόθηκε πηγαίο αÏχείο γÏαμματοσειÏάς!" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No target font resource!" -msgstr "Δε δόθηκε πόÏος γÏαμματοσειÏάς Ï€ÏοοÏισμοÏ!" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "" -"Invalid file extension.\n" -"Please use .font." -msgstr "" -"ΆκυÏη επÎκταση αÏχείου.\n" -"ΠαÏακαλώ χÏησιμοποιήστε .font." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Can't load/process source font." -msgstr "Δεν ήταν δυνατή η φόÏτωση/επεξεÏγασία της πηγαίας γÏαμματοσειÏάς." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Couldn't save font." -msgstr "Δεν ήταν δυνατή η αποθήκευση της γÏαμματοσειÏάς." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font:" -msgstr "Πηγαία γÏαμματοσειÏά:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font Size:" -msgstr "ΜÎγεθος πηγαίας γÏαμματοσειÏάς:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Dest Resource:" -msgstr "Î ÏŒÏος Ï€ÏοοÏισμοÏ:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "The quick brown fox jumps over the lazy dog." -msgstr "ΓαζÎες καὶ μυÏτιὲς δὲν θὰ βÏá¿¶ πιὰ στὸ χÏυσαφὶ ξÎφωτο." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Test:" -msgstr "Δοκιμή:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Options:" -msgstr "ΕπιλογÎÏ‚:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Font Import" -msgstr "Εισαγωγή γÏαμματοσειÏάς" - -#: 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 "" -"Αυτό το αÏχείο είναι ήδη Îνα αÏχείο γÏαμματοσειÏάς της Godot, παÏακαλώ " -"υποβάλετε Îνα αÏχείο Ï„Ïπου BMFont." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Failed opening as BMFont file." -msgstr "ΑπÎτυχε το άνοιγμα ως αÏχείο BMFont." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error initializing FreeType." -msgstr "Σφάλμα κατά την αÏχικοποίηση του FreeType." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Unknown font format." -msgstr "Άγνωστη μοÏφή γÏαμματοσειÏάς." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error loading font." -msgstr "Σφάλμα κατά την φόÏτωση της γÏαμματοσειÏάς." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Invalid font size." -msgstr "Μη ÎγκυÏο μÎγεθος γÏαμματοσειÏάς." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Invalid font custom source." -msgstr "ΆκυÏη Ï€ÏοσαÏμοσμÎνη πηγή γÏαμματοσειÏάς." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/plugins/theme_editor_plugin.cpp -msgid "Font" -msgstr "ΓÏαμματοσειÏά" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "No meshes to import!" -msgstr "Δεν υπάÏχουν πλÎγματα για εισαγωγή!" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Single Mesh Import" -msgstr "Εισαγωγή ενός πλÎγματος" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Source Mesh(es):" -msgstr "Πηγαία πλÎγματα:" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Mesh" -msgstr "ΠλÎγμα" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Surface %d" -msgstr "Επιφάνεια %d" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "No samples to import!" -msgstr "Δεν υπάÏχουν δείγματα για εισαγωγή!" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Import Audio Samples" -msgstr "Εισαγωγή δειγμάτων ήχου" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Source Sample(s):" -msgstr "Πηγαία δείγματα:" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Audio Sample" -msgstr "Δείγμα ήχου" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "New Clip" -msgstr "ÎÎο απόσπασμα" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Animation Options" -msgstr "ΕπιλογÎÏ‚ κίνησης" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Flags" -msgstr "Σημαίες" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Bake FPS:" -msgstr "Ψήστε FPS:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Optimizer" -msgstr "ΕÏγαλείο βελτιστοποίησης" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Linear Error" -msgstr "ΜÎγιστο γÏαμμικό σφάλμα" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angular Error" -msgstr "ΜÎγιστο γωνιακό σφάλμα" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angle" -msgstr "Ανώτατη Γωνία" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Clips" -msgstr "Αποσπάσματα" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Start(s)" -msgstr "ΑÏχή" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "End(s)" -msgstr "ΤÎλος" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Loop" -msgstr "Επανάληψη" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Filters" -msgstr "ΦίλτÏα" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source path is empty." -msgstr "Η διαδÏομή Ï€ÏοÎλευσης είναι άδεια." - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't load post-import script." -msgstr "Δεν ήταν δυνατή η φόÏτωση της δεσμής ενεÏγειών μετ-εισαγωγής." - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Invalid/broken script for post-import." -msgstr "" -"ΆκυÏη / χαλασμÎνη δεσμή ενεÏγειών για την διαδικασία της μετ-εισαγωγής." - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Error importing scene." -msgstr "Σφάλμα κατά την εισαγωγή της σκηνής." - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import 3D Scene" -msgstr "Εισαγωγή 3D σκηνής" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source Scene:" -msgstr "Σκηνή Ï€ÏοÎλευσης:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Same as Target Scene" -msgstr "Το ίδιο με την στοχευμÎνη σκηνή" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Shared" -msgstr "ΚοινόχÏηστο" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Target Texture Folder:" -msgstr "ΕπιλεγμÎνος φάκλος υφών:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Post-Process Script:" -msgstr "Δεσμή ενεÏγειών μετ-επεξεÏγασίας:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Custom Root Node Type:" -msgstr "Î ÏοσαÏμοσμÎνος Ï„Ïπος ÏÎ¹Î¶Î¹ÎºÎ¿Ï ÎºÏŒÎ¼Î²Î¿Ï…:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Auto" -msgstr "Αυτόματο" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Root Node Name:" -msgstr "Όνομα ÏÎ¹Î¶Î¹ÎºÎ¿Ï ÎºÏŒÎ¼Î²Î¿Ï…:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "The Following Files are Missing:" -msgstr "Τα ακόλουθα αÏχεία λείπουν:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Anyway" -msgstr "Εισαγωγή οÏτως ή άλλως" - -#: editor/io_plugins/editor_scene_import_plugin.cpp scene/gui/dialogs.cpp -msgid "Cancel" -msgstr "ΑκÏÏωση" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import & Open" -msgstr "Εισαγωγή & Άνοιγμα" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Edited scene has not been saved, open imported scene anyway?" -msgstr "" -"Η Ï„ÏÎχουσα σκηνή δεν Îχει αποθηκευτεί, άνοιγμα της εισαγμÎνης σκηνής οÏτως ή " -"άλλως;" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Image:" -msgstr "Εισαγωγή εικόνας:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Can't import a file over itself:" -msgstr "Δεν είναι δυνατή η εισαγωγή ενός αÏχείου πάνω στον εαυτό του:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't localize path: %s (already local)" -msgstr "" -"Δεν είναι δυνατή η μετατÏοπή της διαδÏομής σε τοπική: %s (είναι ήδη τοπικό)" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "3D Scene Animation" -msgstr "Κίνηση Ï„Ïισδιάστατης σκηνής" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Uncompressed" -msgstr "Ασυμπίεστο" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossless (PNG)" -msgstr "Συμπίεση χωÏίς απώλειες (PNG)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossy (WebP)" -msgstr "Συμπίεση με απώλειες (WebP)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress (VRAM)" -msgstr "Συμπίεση (VRAM)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Format" -msgstr "ΜοÏφή υφής" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Compression Quality (WebP):" -msgstr "Ποιότητα συμπίεσης υφής (WebP):" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Options" -msgstr "ΕπιλογÎÏ‚ υφής" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Please specify some files!" -msgstr "ΠαÏακαλώ καθοÏίστε κάποια αÏχεία!" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "At least one file needed for Atlas." -msgstr "Τουλάχιστον Îνα αÏχείο απαιτείται για τον άτλαντα." - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Error importing:" -msgstr "Σφάλμα κατά την εισαγωγή:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Only one file is required for large texture." -msgstr "Μόνο Îνα αÏχείο είναι απαÏαίτητη για μεγάλη υφή." - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Max Texture Size:" -msgstr "ΜÎγιστο μÎγεθος υφής:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for Atlas (2D)" -msgstr "Εισαγωγή υφών για τον άτλαντα (2D)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cell Size:" -msgstr "ΜÎγεθος κελιοÏ:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Large Texture" -msgstr "Μεγάλη υφή" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Textures (2D)" -msgstr "Εισαγωγής Μεγάλων Υφών (2D)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture" -msgstr "Υφή Ï€ÏοÎλευσης" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Base Atlas Texture" -msgstr "Βασική υφή άτλαντα" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s)" -msgstr "ΥφÎÏ‚ Ï€ÏοÎλευσης" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 2D" -msgstr "Εισαγωγή υφών για 2 διαστάσεις" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 3D" -msgstr "Εισαγωγή υφών για 3 διαστάσεις" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures" -msgstr "Εισαγωγή υφών" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "2D Texture" -msgstr "Υφή 2 διαστάσεων" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "3D Texture" -msgstr "Υφή 3 διαστάσεων" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Atlas Texture" -msgstr "Υφή άτλαντα" - -#: 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 "" -"ΣΗΜΕΙΩΣΗ: Η εισαγωγή δισδιάστατων υφών δεν είναι υποχÏεωτική. Απλά " -"αντιγÏάψτε τα αÏχεία png/jpg στο ÎÏγο." - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Crop empty space." -msgstr "ΠεÏικοπή άδειου χώÏου." - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture" -msgstr "Υφή" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Texture" -msgstr "Εισαγωγή μεγάλης υφής" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Load Source Image" -msgstr "ΦόÏτωση εικόνας Ï€ÏοÎλευσης" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Slicing" -msgstr "Κατάτμηση" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Inserting" -msgstr "Εισαγωγή" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Saving" -msgstr "Αποθήκευση" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save large texture:" -msgstr "Δεν ήταν δυνατή η αποθήκευση μεγάλης υφής:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Build Atlas For:" -msgstr "Κατασκευή άτλαντα για:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Loading Image:" -msgstr "ΦόÏτωση εικόνας:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't load image:" -msgstr "Δεν ήταν δυνατή η φόÏτωση της εικόνας:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Converting Images" -msgstr "ΜετατÏοπή Εικόνων" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cropping Images" -msgstr "ΠεÏικοπή Εικόνων" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Blitting Images" -msgstr "Συνδυασμός εικόνων" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save atlas image:" -msgstr "Δεν ήταν δυνατή η αποθήκευση εικόνας άτλαντα:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save converted texture:" -msgstr "Δεν ήταν δυνατή η αποθήκευση υφής που Îχει μετατÏαπεί:" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid source!" -msgstr "Μη ÎγκυÏη πηγή!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid translation source!" -msgstr "Μη ÎγκυÏη πηγή μετάφÏασης!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Column" -msgstr "Στήλη" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/script_create_dialog.cpp -msgid "Language" -msgstr "Γλώσσα" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No items to import!" -msgstr "Δεν υπάÏχουν στοιχεία για εισαγωγή!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No target path!" -msgstr "Καμία διαδÏομή Ï€ÏοοÏισμοÏ!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translations" -msgstr "Εισαγωγή μεταφÏάσεων" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Couldn't import!" -msgstr "Δεν ήταν δυνατή η εισαγωγή!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translation" -msgstr "Εισαγωγή μετάφÏασης" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Source CSV:" -msgstr "CSV Ï€ÏοÎλευσης:" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Ignore First Row" -msgstr "Αγνόησε την Ï€Ïώτη γÏαμμή" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Compress" -msgstr "Συμπίεση" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Add to Project (project.godot)" -msgstr "Î Ïόσθεσε στο ÎÏγο (project.godot)" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Languages:" -msgstr "Εισαγωγή γλωσσών:" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Translation" -msgstr "ΜετάφÏαση" - #: editor/multi_node_edit.cpp msgid "MultiNode Set" msgstr "Σετ πολλαπλών κόμβων" @@ -3338,6 +2699,49 @@ msgstr "Ομάδες" msgid "Select a Node to edit Signals and Groups." msgstr "ΕπιλÎξτε Îνα κόμβο για να επεξεÏγαστείτε τα σήματα και τις ομάδες." +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create Poly" +msgstr "Δημιουγία πολυγώνου" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly" +msgstr "ΕπεγεÏγασία πολυγώνου" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +#, fuzzy +msgid "Insert Point" +msgstr "Εισαγωγή" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly (Remove Point)" +msgstr "ΕπεγεÏγασία πολυγώνου (ΑφαίÏεση σημείου)" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Remove Poly And Point" +msgstr "ΑφαίÏεση πολυγώνου και σημείου" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create a new polygon from scratch." +msgstr "ΔημιουÏγία νÎου πολυγώνου από την αÏχή." + +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "" +"Edit existing polygon:\n" +"LMB: Move Point.\n" +"Ctrl+LMB: Split Segment.\n" +"RMB: Erase Point." +msgstr "" +"ΕπεξεÏγασία υπαÏÎºÏ„Î¿Ï Ï€Î¿Î»Ï…Î³ÏŒÎ½Î¿Ï…:\n" +"ΑÏιστεÏÏŒ κλικ: Μετακίνηση σημείου.\n" +"Ctrl + ΑÏιστεÏÏŒ κλικ: ΔιαίÏεση τμήματος.\n" +"Δεξί κλικ: ΔιαγÏαφή σημείου." + #: editor/plugins/animation_player_editor_plugin.cpp msgid "Toggle Autoplay" msgstr "Εναλλαγή αυτόματης αναπαÏαγωγής" @@ -3491,7 +2895,6 @@ msgstr "Όνομα κίνησης:" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp #: editor/script_create_dialog.cpp msgid "Error!" @@ -3519,9 +2922,8 @@ msgid "New name:" msgstr "ÎÎο όνομα:" #: editor/plugins/animation_tree_editor_plugin.cpp -#, fuzzy msgid "Edit Filters" -msgstr "ΕπεξεÏγασία φίλτÏων κόμβων" +msgstr "ΕπεξεÏγασία φίλτÏων" #: editor/plugins/animation_tree_editor_plugin.cpp #: editor/plugins/multimesh_editor_plugin.cpp @@ -3602,10 +3004,6 @@ msgid "Delete Input" msgstr "ΔιαγÏαφή εισόδου" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Rename" -msgstr "Μετονομασία" - -#: editor/plugins/animation_tree_editor_plugin.cpp msgid "Animation tree is valid." msgstr "Το δÎντÏο κίνησης είναι ÎγκυÏο." @@ -3661,66 +3059,182 @@ msgstr "ΕπεξεÏγασία φίλτÏων κόμβων" msgid "Filters.." msgstr "ΦίλτÏα.." -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing %d Triangles:" -msgstr "Ανάλυση %d ΤÏιγώνων:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Free" +msgstr "ΔωÏεάν" -#: editor/plugins/baked_light_baker.cpp -msgid "Triangle #" -msgstr "ΤÏίγωνο #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Contents:" +msgstr "ΠεÏιεχόμενα:" -#: editor/plugins/baked_light_baker.cpp -msgid "Light Baker Setup:" -msgstr "ΡÏθμιση Ï€ÏοεπεγεÏγαστή φωτός:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "View Files" +msgstr "Î Ïοβολή αÏχείων" -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing Geometry" -msgstr "Ανάλυση γεωμετÏίας" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve hostname:" +msgstr "Δεν είναι δυνατή η επίλυση του ονόματος του κεντÏÎ¹ÎºÎ¿Ï Ï…Ï€Î¿Î»Î¿Î³Î¹ÏƒÏ„Î®:" -#: editor/plugins/baked_light_baker.cpp -msgid "Fixing Lights" -msgstr "ΔιόÏθωση φώτων" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve." +msgstr "Δεν είναι δυνατή η επίλυση." -#: editor/plugins/baked_light_baker.cpp -msgid "Making BVH" -msgstr "ΔημιουÏγία BVH" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connection error, please try again." +msgstr "Σφάλμα σÏνδεσης, παÏακαλώ ξαναπÏοσπαθήστε." -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Light Octree" -msgstr "ΔημιουÏγία Î¿ÎºÏ„Î±Î´Î¹ÎºÎ¿Ï Î´ÎντÏου φωτός" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't connect." +msgstr "Δεν ήταν δυνατή η σÏνδεση." -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Octree Texture" -msgstr "ΔημιουÏγία υφής Î¿ÎºÏ„Î±Î´Î¹ÎºÎ¿Ï Î´ÎντÏου" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't connect to host:" +msgstr "Δεν ήταν δυνατή η σÏνδεση στον κεντÏικό υπολογιστή:" -#: editor/plugins/baked_light_baker.cpp -msgid "Transfer to Lightmaps:" -msgstr "ΜεταφοÏά στους χάÏτες φωτός:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response from host:" +msgstr "Δεν λήφθηκε απόκÏιση από τον κεντÏικό υπολογιστή:" -#: editor/plugins/baked_light_baker.cpp -msgid "Allocating Texture #" -msgstr "ΔÎσμευση υφής #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response." +msgstr "Δεν λήφθηκε απόκÏιση." -#: editor/plugins/baked_light_baker.cpp -msgid "Baking Triangle #" -msgstr "Î ÏοεπεξεÏγασία Ï„Ïιγώνου #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, return code:" +msgstr "Το αίτημα απÎτυχε, κώδικας επιστÏοφής:" -#: editor/plugins/baked_light_baker.cpp -msgid "Post-Processing Texture #" -msgstr "ΜετεπεξεÏγασία υφής #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Req. Failed." +msgstr "Το αίτημα απÎτυχε." -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Bake!" -msgstr "Î ÏοεπεξεÏγάσου!" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, too many redirects" +msgstr "Το αίτημα απÎτυχε, πάÏα πολλÎÏ‚ ανακατευθήνσεις" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Redirect Loop." +msgstr "Î’Ïόχος ανακατευθήνσεων." -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Reset the lightmap octree baking process (start over)." +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed:" +msgstr "ΑπÎτυχε:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Bad download hash, assuming file has been tampered with." msgstr "" -"ΕπαναφοÏά της Ï€ÏοεπεξεÏγασίας του Î¿ÎºÏ„Î±Î´Î¹ÎºÎ¿Ï Î´ÎντÏου του χάÏτη φωτός " -"(Εκκίνηση από την αÏχή)." +"ΕσφαλμÎνος κωδικός κατακεÏματισμοÏ, θα θεωÏηθεί ότι το αÏχείο Îχει αλοιωθεί." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Expected:" +msgstr "Αναμενόμενο:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Got:" +msgstr "ΔοσμÎνο:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed sha256 hash check" +msgstr "Η δοκιμή κατακεÏÎ¼Î±Ï„Î¹ÏƒÎ¼Î¿Ï sha256 απÎτυχε" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Asset Download Error:" +msgstr "Σφάλμα λήψης:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Fetching:" +msgstr "Λήψη:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Resolving.." +msgstr "Επίλυση..." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connecting.." +msgstr "ΣÏνδεση.." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Requesting.." +msgstr "Γίνεται αίτημα.." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Error making request" +msgstr "Σφάλμα κατά την Ï€Ïαγματοποίηση αιτήματος" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Idle" +msgstr "ΑνενεÏγό" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Retry" +msgstr "Ξαναδοκίμασε" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download Error" +msgstr "Σφάλμα λήψης" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download for this asset is already in progress!" +msgstr "Η λήψη είναι ήδη σε εξÎλιξη!" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "first" +msgstr "Î Ïώτο" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "prev" +msgstr "Î ÏοηγοÏμενο" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "next" +msgstr "Επόμενο" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "last" +msgstr "Î ÏοηγοÏμενο" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "All" +msgstr "Όλα" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Plugins" +msgstr "Î Ïόσθετα" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Sort:" +msgstr "Ταξινόμηση:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Reverse" +msgstr "ΑντιστÏοφή" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Category:" +msgstr "ΚατηγοÏία:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Site:" +msgstr "ΔιεÏθυνση:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Support.." +msgstr "ΥποστήÏιξη.." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Official" +msgstr "Επίσημα" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Testing" +msgstr "Δοκιμιμαστικά" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Assets ZIP File" +msgstr "ΑÏχείο ZIP των Asset" #: editor/plugins/camera_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp msgid "Preview" msgstr "Î Ïοεπισκόπηση" @@ -3763,12 +3277,18 @@ msgid "Edit CanvasItem" msgstr "ΕπεξεÏγασία στοιχείου κανβά" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Change Anchors" +#, fuzzy +msgid "Anchors only" +msgstr "ΆγκυÏα" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Change Anchors and Margins" msgstr "Αλλαγή αγκυÏών" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom (%):" -msgstr "ΜεγÎθυνση (%):" +msgid "Change Anchors" +msgstr "Αλλαγή αγκυÏών" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Paste Pose" @@ -3822,60 +3342,78 @@ msgid "Pan Mode" msgstr "ΛειτουÏγία Μετακίνησης κάμεÏας" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Lock the selected object in place (can't be moved)." -msgstr "Κλείδωμα του επιλεγμÎνου αντικείμÎνου (Δεν μποÏεί να μετακινηθεί)." +#, fuzzy +msgid "Toggles snapping" +msgstr "Εναλλαγή σημείου διακοπής" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Unlock the selected object (can be moved)." -msgstr "Ξεκλείδωμα του επιλεγμÎνου αντικείμÎνου (ΜποÏεί να μετακινηθεί)." +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "ΧÏήση κουμπώματος" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Makes sure the object's children are not selectable." -msgstr "ΣιγουÏεÏεται ότι τα παιδιά του αντικειμÎνου δεν μποÏοÏν να επιλεχθοÏν." +#, fuzzy +msgid "Snapping options" +msgstr "ΕπιλογÎÏ‚ κίνησης" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Restores the object's children's ability to be selected." -msgstr "ΕπαναφÎÏει την δυνατότητα των παιδιών του αντικειμÎνου να επιλεγοÏν." +#, fuzzy +msgid "Snap to grid" +msgstr "ΛειτουÏγία κουμπώματος:" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp -#: editor/project_settings_editor.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Edit" -msgstr "ΕπεξεÏγασία" +msgid "Use Rotation Snap" +msgstr "ΧÏήση κουμπώματος πεÏιστÏοφής" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" -msgstr "ΧÏήση κουμπώματος" +#, fuzzy +msgid "Configure Snap..." +msgstr "ΔιαμόÏφωση κουμπώματος.." #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" -msgstr "Εμφάνιση πλÎγματος" +msgid "Snap Relative" +msgstr "Σχετικό κοÏμπωμα" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Rotation Snap" -msgstr "ΧÏήση κουμπώματος πεÏιστÏοφής" +msgid "Use Pixel Snap" +msgstr "ΧÏήση κουμπώματος εικονοστοιχείου" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap Relative" -msgstr "Σχετικό κοÏμπωμα" +msgid "Smart snapping" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "ΔιαμόÏφωση κουμπώματος.." +#, fuzzy +msgid "Snap to parent" +msgstr "Επικάλυψη γονÎα" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Pixel Snap" -msgstr "ΧÏήση κουμπώματος εικονοστοιχείου" +msgid "Snap to node anchor" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to node sides" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to other nodes" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Skeleton.." -msgstr "Σκελετός.." +msgid "Lock the selected object in place (can't be moved)." +msgstr "Κλείδωμα του επιλεγμÎνου αντικείμÎνου (Δεν μποÏεί να μετακινηθεί)." + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Unlock the selected object (can be moved)." +msgstr "Ξεκλείδωμα του επιλεγμÎνου αντικείμÎνου (ΜποÏεί να μετακινηθεί)." + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Makes sure the object's children are not selectable." +msgstr "ΣιγουÏεÏεται ότι τα παιδιά του αντικειμÎνου δεν μποÏοÏν να επιλεχθοÏν." + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Restores the object's children's ability to be selected." +msgstr "ΕπαναφÎÏει την δυνατότητα των παιδιών του αντικειμÎνου να επιλεγοÏν." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Make Bones" @@ -3903,12 +3441,19 @@ msgid "View" msgstr "ΚάμεÏα" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Reset" -msgstr "ΕπαναφοÏά μεγÎθυνσης" +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "Εμφάνιση πλÎγματος" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Set.." -msgstr "ΟÏισμός μεγÎθυνσης.." +#, fuzzy +msgid "Show helpers" +msgstr "Εμφάνιση οστών" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show rulers" +msgstr "Εμφάνιση οστών" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -3919,8 +3464,9 @@ msgid "Frame Selection" msgstr "Πλαισίωμα επιλογής" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Anchor" -msgstr "ΆγκυÏα" +#, fuzzy +msgid "Layout" +msgstr "Αποθήκευση διάταξης" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Keys" @@ -3943,12 +3489,21 @@ msgid "Clear Pose" msgstr "ΕκκαθάÏιση στάσης" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Set a Value" -msgstr "ΟÏισμός τιμής" +msgid "Drag pivot from mouse position" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Set pivot at mouse position" +msgstr "ΟÏισμός θÎσης εξόδου καμπÏλης" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Multiply grid step by 2" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap (Pixels):" -msgstr "ΚοÏμπωμα (Εικονοστοιχεία):" +msgid "Divide grid step by 2" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Add %s" @@ -3958,24 +3513,29 @@ msgstr "Î Ïόσθεσε %s" msgid "Adding %s..." msgstr "Î Ïοσθήκη %s..." -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Create Node" msgstr "ΔημιουÏγία κόμβου" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Error instancing scene from %s" msgstr "Σφάλμα κατά την αÏχικοποίηση σκηνής από %s" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "OK :(" msgstr "Εντάξει :(" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "No parent to instance a child at." msgstr "" "Δεν υπάÏχει γονÎας στον οποίο μποÏεί να γίνει αÏχικοποίηση του παιδιοÏ." -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "This operation requires a single selected node." msgstr "Αυτή η λειτουÏγία απαιτεί Îναν μόνο επιλεγμÎνο κόμβο." @@ -3991,45 +3551,6 @@ msgstr "" "ΣÏÏσιμο & απόθεση + Shift: Î Ïοσθήκη του κόμβου ως αδελφό\n" "ΣÏÏσιμο & απόθεση + Alt: Αλλαγή του Ï„Ïπου του κόμβου" -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Create Poly" -msgstr "Δημιουγία πολυγώνου" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly" -msgstr "ΕπεγεÏγασία πολυγώνου" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly (Remove Point)" -msgstr "ΕπεγεÏγασία πολυγώνου (ΑφαίÏεση σημείου)" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Create a new polygon from scratch." -msgstr "ΔημιουÏγία νÎου πολυγώνου από την αÏχή." - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -msgid "" -"Edit existing polygon:\n" -"LMB: Move Point.\n" -"Ctrl+LMB: Split Segment.\n" -"RMB: Erase Point." -msgstr "" - #: editor/plugins/collision_polygon_editor_plugin.cpp msgid "Create Poly3D" msgstr "ΔημιουÏγία πολυγώνου 3D" @@ -4039,14 +3560,6 @@ msgid "Set Handle" msgstr "ΟÏισμός λαβής" #: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Creating Mesh Library" -msgstr "ΔημιουÏγία βιβλιοθήκης πλεγμάτων" - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Thumbnail.." -msgstr "ΜικÏογÏαφία.." - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Remove item %d?" msgstr "ΑφαίÏεση του στοιχείου %d?" @@ -4069,19 +3582,38 @@ msgid "Update from Scene" msgstr "ΑναπÏοσαÏμογή από την σκηνή" #: editor/plugins/curve_editor_plugin.cpp +msgid "Flat0" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Flat1" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp #, fuzzy -msgid "Modify Curve Point" -msgstr "ΤÏοποπίηση καμπÏλης" +msgid "Ease in" +msgstr "Ομαλή κίνηση Ï€Ïος τα μÎσα" #: editor/plugins/curve_editor_plugin.cpp #, fuzzy +msgid "Ease out" +msgstr "Ομαλή κίνηση Ï€Ïος τα Îξω" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Smoothstep" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Modify Curve Point" +msgstr "ΤÏοποπίηση σημείου καμπÏλης" + +#: editor/plugins/curve_editor_plugin.cpp msgid "Modify Curve Tangent" -msgstr "ΤÏοποποίηση χάÏτη καμπÏλης" +msgstr "ΤÏοποπίηση εφαπτομÎνης καμπÏλης" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Load Curve Preset" -msgstr "ΦόÏτωση Ï€ÏοκαθοÏισμÎνης" +msgstr "ΦόÏτωση Ï€ÏοκαθοÏισμÎνης καμπÏλης" #: editor/plugins/curve_editor_plugin.cpp msgid "Add point" @@ -4092,31 +3624,28 @@ msgid "Remove point" msgstr "ΑφαίÏεση σημείου" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Left linear" -msgstr "ΓÏαμμική" +msgstr "ΑÏιστεÏή γÏαμμική" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Right linear" -msgstr "Δεξιά όψη" +msgstr "Δεξιά γÏαμμική" #: editor/plugins/curve_editor_plugin.cpp msgid "Load preset" -msgstr "ΦόÏτωση Ï€ÏοκαθοÏισμÎνης" +msgstr "ΦόÏτωση διαμόÏφωσης" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Remove Curve Point" -msgstr "ΑφαίÏεση σημείου διαδÏομής" +msgstr "ΑφαίÏεση σημείου καμπÏλης" #: editor/plugins/curve_editor_plugin.cpp msgid "Toggle Curve Linear Tangent" -msgstr "" +msgstr "Εναλλαγή γÏαμμικής εφαπτομÎνης καμπÏλης" #: editor/plugins/curve_editor_plugin.cpp msgid "Hold Shift to edit tangents individually" -msgstr "" +msgstr "Πατήστε το Shift για να επεξεÏγαστείτε εφαπτομÎνες μεμονωμÎνα" #: editor/plugins/gradient_editor_plugin.cpp msgid "Add/Remove Color Ramp Point" @@ -4144,28 +3673,26 @@ msgid "" "No OccluderPolygon2D resource on this node.\n" "Create and assign one?" msgstr "" +"Δεν υπάÏχει πόÏος OccluderPolygon2D σε αυτόν τον κόμβο.\n" +"Îα δημιουÏγία και να οÏισθεί Îνας;" #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "Create Occluder Polygon" msgstr "ΔημιουÏγία πολυγώνου εμποδίου" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Edit existing polygon:" msgstr "ΕπεξεÏγασία υπαÏÎºÏ„Î¿Ï Ï€Î¿Î»Ï…Î³ÏŽÎ½Î¿Ï…:" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "LMB: Move Point." msgstr "ΑÏιστεÏÏŒ κλίκ: ΜΕτακίνηση σημείου." #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Ctrl+LMB: Split Segment." msgstr "Ctrl+ΑÏιστεÏÏŒ κλικ: ΔιαχωÏσμός τμήματος." #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "RMB: Erase Point." msgstr "Δεξί κλικ: ΔιαγÏαφή σημείου." @@ -4266,6 +3793,10 @@ msgid "Create Outline" msgstr "ΔημιουÏγία πεÏιγÏάμματος" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh" +msgstr "ΠλÎγμα" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Body" msgstr "ΔημιουÏγία ÏƒÏ„Î±Ï„Î¹ÎºÎ¿Ï ÏƒÏŽÎ¼Î±Ï„Î¿Ï‚ πλÎγματος Ï„Ïιγώνων" @@ -4395,14 +3926,83 @@ msgstr "Τυχαία κλιμάκωση:" msgid "Populate" msgstr "ΣυμπλήÏωση" +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Bake!" +msgstr "Î ÏοεπεξεÏγάσου!" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +#, fuzzy +msgid "Bake the navigation mesh.\n" +msgstr "ΔημιουÏγία πλÎγματος πλοήγησης" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +#, fuzzy +msgid "Clear the navigation mesh." +msgstr "ΔημιουÏγία πλÎγματος πλοήγησης" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Setting up Configuration..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Calculating grid size..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Creating heightfield..." +msgstr "ΔημιουÏγία Î¿ÎºÏ„Î±Î´Î¹ÎºÎ¿Ï Î´ÎντÏου φωτός" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Marking walkable triangles..." +msgstr "ΜεταφÏάσιμες συμβολοσειÏÎÏ‚..." + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Constructing compact heightfield..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Eroding walkable area..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Partioning..." +msgstr "Î Ïοειδοποίηση" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Creating contours..." +msgstr "ΔημιουÏγία υφής Î¿ÎºÏ„Î±Î´Î¹ÎºÎ¿Ï Î´ÎντÏου" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Creating polymesh..." +msgstr "ΔημιουÏγία πλÎγματος πεÏιγÏάμματος.." + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Converting to native navigation mesh..." +msgstr "ΔημιουÏγία πλÎγματος πλοήγησης" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Navigation Mesh Generator Setup:" +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Parsing Geometry..." +msgstr "Ανάλυση γεωμετÏίας" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Done!" +msgstr "" + #: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Create Navigation Polygon" msgstr "ΔημιουÏγία πολυγώνου πλοήγησης" -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Remove Poly And Point" -msgstr "ΑφαίÏεση πολυγώνου και σημείου" - #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Clear Emission Mask" msgstr "ΕκκαθάÏιση μάσκας εκπομπής" @@ -4440,9 +4040,8 @@ msgstr "ΦόÏτωση μάσκας εκπομπής" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "Particles" -msgstr "ΚοÏυφÎÏ‚" +msgstr "Σωματίδια" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generated Point Count:" @@ -4577,15 +4176,18 @@ msgid "Curve Point #" msgstr "Σημείο καμπÏλης #" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Point Pos" +#, fuzzy +msgid "Set Curve Point Position" msgstr "ΟÏισμός θÎσης σημείου καμπÏλης" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve In Pos" +#, fuzzy +msgid "Set Curve In Position" msgstr "ΟÏισμός θÎσης εισόδου καμπÏλης" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Out Pos" +#, fuzzy +msgid "Set Curve Out Position" msgstr "ΟÏισμός θÎσης εξόδου καμπÏλης" #: editor/plugins/path_editor_plugin.cpp @@ -4645,6 +4247,14 @@ msgid "Scale Polygon" msgstr "Κλιμάκωση πολυγώνου" #: editor/plugins/polygon_2d_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit" +msgstr "ΕπεξεÏγασία" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon->UV" msgstr "ΠολÏγωνο -> UV" @@ -4699,63 +4309,10 @@ msgstr "ΦόÏτωση πόÏου" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "Επικόληση" -#: editor/plugins/rich_text_editor_plugin.cpp -msgid "Parse BBCode" -msgstr "Ανάλυση BBCode" - -#: editor/plugins/sample_editor_plugin.cpp -msgid "Length:" -msgstr "Μήκος:" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Open Sample File(s)" -msgstr "Άνοιγμα αÏχείων δειγμάτων" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "ERROR: Couldn't load sample!" -msgstr "ΣΦΑΛΜΑ: Δεν ήταν δυνατή η φόÏτωση δείγματος!" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Add Sample" -msgstr "Î Ïοσθήκη δείγματος" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Rename Sample" -msgstr "Μετονομασία δείγματος" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Delete Sample" -msgstr "ΔιαγÏαφή δείγματος" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "16 Bits" -msgstr "16 Δυαδικά ψηφία" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "8 Bits" -msgstr "8 Δυαδικά ψηφία" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Stereo" -msgstr "ΣτεÏεοφωνικό" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Mono" -msgstr "Μονοφωνικό" - -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/script_editor_debugger.cpp -msgid "Format" -msgstr "ΜοÏφή" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Pitch" -msgstr "Τόνος" - #: editor/plugins/script_editor_plugin.cpp msgid "Clear Recent Files" msgstr "ΕκκαθάÏιση Ï€Ïόσφατων αÏχείων" @@ -4765,6 +4322,8 @@ msgid "" "Close and save changes?\n" "\"" msgstr "" +"Κλείσιμο και αποθήκευση αλλαγών;\n" +"\"" #: editor/plugins/script_editor_plugin.cpp msgid "Error while saving theme" @@ -4792,7 +4351,7 @@ msgstr "Αποθήκευση θÎματος ως.." #: editor/plugins/script_editor_plugin.cpp msgid " Class Reference" -msgstr "" +msgstr " ΑναφοÏά κλασεων" #: editor/plugins/script_editor_plugin.cpp msgid "Next script" @@ -4846,10 +4405,13 @@ msgstr "Κλείσιμο τεκμηÏίωσης" msgid "Close All" msgstr "Κλείσιμο όλων" +#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp +msgid "Run" +msgstr "ΕκτÎλεση" + #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Toggle Scripts Panel" -msgstr "Εναλλαγή αγαπημÎνου" +msgstr "Εναλλαγή πλαισίου δεσμών ενεÏγειών" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -4884,21 +4446,8 @@ msgid "Keep Debugger Open" msgstr "ΔιατήÏησε τον αποσφαλματωτή ανοιχτό" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Debug with external editor" -msgstr "Άνοιγμα του επόμενου επεξεÏγαστή" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Window" -msgstr "ΠαÏάθυÏο" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Left" -msgstr "Μετκίνιση αÏιστεÏά" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Right" -msgstr "Μετακίνηση δεξιά" +msgstr "Αποσφαλμάτωση με εξωτεÏικό επεξεÏγαστή" #: editor/plugins/script_editor_plugin.cpp msgid "Open Godot online documentation" @@ -4957,7 +4506,7 @@ msgstr "" #: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." -msgstr "" +msgstr "Μόνο οι πόÏοι από το σÏστημα αÏχείων μποÏοÏν να διαγÏαφοÏν." #: editor/plugins/script_text_editor.cpp msgid "Pick Color" @@ -4987,7 +4536,7 @@ msgstr "Αποκοπή" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Copy" msgstr "ΑντιγÏαφή" @@ -5006,9 +4555,8 @@ msgid "Move Down" msgstr "Μετακίνηση κάτω" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Delete Line" -msgstr "ΔιαγÏαφή σημείου" +msgstr "ΔιαγÏαφή γÏαμμής" #: editor/plugins/script_text_editor.cpp msgid "Indent Left" @@ -5251,10 +4799,6 @@ msgid "View Plane Transform." msgstr "Μετασχηματισμός στο επίπεδο θÎασης." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Scaling to %s%%." -msgstr "Κλιμάκωση to %s%%." - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." msgstr "ΠεÏιστÏοφή %s μοίÏες." @@ -5271,10 +4815,6 @@ msgid "Top View." msgstr "Πάνω όψη." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Top" -msgstr "Πάνω" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "Πίσω όψη." @@ -5376,9 +4916,8 @@ msgid "Audio Listener" msgstr "ΑκÏοατής ήχου" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Doppler Enable" -msgstr "ΕνεÏγοποίηση" +msgstr "ΕνεÏγοποίηση φαινομÎνου dollper" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Left" @@ -5409,7 +4948,6 @@ msgid "Freelook Speed Modifier" msgstr "ΤαχÏτητα ελεÏθεÏου κοιτάγματος" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "preview" msgstr "Î Ïοεπισκόπηση" @@ -5418,17 +4956,18 @@ msgid "XForm Dialog" msgstr "Διάλογος XForm" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Select Mode (Q)\n" -msgstr "Επιλογή λειτουÏγίας" +msgstr "Επιλογή λειτουÏγίας (Q)\n" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "" "Drag: Rotate\n" "Alt+Drag: Move\n" "Alt+RMB: Depth list selection" -msgstr "Alt+Δεξί κλικ: Επιλογή λίστας βάθους" +msgstr "" +"Μετακίνηση: ΠεÏιστÏοφή\n" +"Alt + ΣÏÏσιμο: Μετακίνηση\n" +"Alt + Δεξί κλικ: Επιλογή λίστας βάθους" #: editor/plugins/spatial_editor_plugin.cpp msgid "Move Mode (W)" @@ -5507,6 +5046,10 @@ msgid "Transform" msgstr "Μετασχηματισμός" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Configure Snap.." +msgstr "ΔιαμόÏφωση κουμπώματος.." + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Local Coords" msgstr "ΤοπικÎÏ‚ συντεταγμÎνες" @@ -5652,6 +5195,10 @@ msgid "Speed (FPS):" msgstr "ΤαχÏτητα (FPS):" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Loop" +msgstr "Επανάληψη" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animation Frames" msgstr "ΚαÏΠκίνησης" @@ -5664,21 +5211,22 @@ msgid "Insert Empty (After)" msgstr "Εισαγωγή άδειου (Μετά)" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Up" -msgstr "Πάνω" +#, fuzzy +msgid "Move (Before)" +msgstr "Μετακίνηση κόμβων" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Down" -msgstr "Κάτω" +#, fuzzy +msgid "Move (After)" +msgstr "Μετκίνιση αÏιστεÏά" #: editor/plugins/style_box_editor_plugin.cpp msgid "StyleBox Preview:" msgstr "Î Ïοεπισκόπηση StyleBox:" #: editor/plugins/texture_region_editor_plugin.cpp -#, fuzzy msgid "Set Region Rect" -msgstr "ΠεÏιοχή υφής" +msgstr "ΟÏισμός οÏθογωνίου πεÏιοχής" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Snap Mode:" @@ -5738,14 +5286,12 @@ msgid "Remove Item" msgstr "ΑφαίÏεση στοιχείου" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All Items" -msgstr "ΑφαίÏεση στοιχείων κλάσης" +msgstr "ΑφαίÏεση όλων των στοιχείων" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All" -msgstr "ΑφαίÏεση" +msgstr "ΑφαίÏεση όλων" #: editor/plugins/theme_editor_plugin.cpp msgid "Theme" @@ -5833,11 +5379,14 @@ msgid "Style" msgstr "Στυλ" #: editor/plugins/theme_editor_plugin.cpp +msgid "Font" +msgstr "ΓÏαμματοσειÏά" + +#: editor/plugins/theme_editor_plugin.cpp msgid "Color" msgstr "ΧÏώμα" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Erase Selection" msgstr "ΔιαγÏαφή επιλογής" @@ -5846,18 +5395,16 @@ msgid "Paint TileMap" msgstr "Βάψιμο TileMap" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Line Draw" -msgstr "ΓÏαμμική" +msgstr "Σχεδιασμός γÏαμμής" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Rectangle Paint" -msgstr "" +msgstr "ΧÏωματοσμός οÏθογωνίου" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Bucket Fill" -msgstr "Κουβάς" +msgstr "ΓÎμισμα κουβά" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Erase TileMap" @@ -5884,8 +5431,9 @@ msgid "Mirror Y" msgstr "ΣυμμετÏία στον άξονα Î¥" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Bucket" -msgstr "Κουβάς" +#, fuzzy +msgid "Paint Tile" +msgstr "Βάψιμο TileMap" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Pick Tile" @@ -5948,6 +5496,11 @@ msgid "Delete preset '%s'?" msgstr "ΔιαγÏαφή διαμόÏφωσης '%s';" #: editor/project_export.cpp +#, fuzzy +msgid "Export templates for this platform are missing/corrupted: " +msgstr "Τα Ï€Ïότυπα εξαγωγής για αυτή την πλατφόÏτμα λείπουν:" + +#: editor/project_export.cpp msgid "Presets" msgstr "ΔιαμοÏφώσεις" @@ -6002,53 +5555,80 @@ msgid "Make Patch" msgstr "ΔημιουÏγία ενημÎÏωσης" #: editor/project_export.cpp -#, fuzzy msgid "Features" -msgstr "Υφή" +msgstr "Δυνατότητες" #: editor/project_export.cpp msgid "Custom (comma-separated):" -msgstr "" +msgstr "Î ÏοσαÏομÎνο (χωÏισμός με κόμμα):" #: editor/project_export.cpp -#, fuzzy msgid "Feature List:" -msgstr "Λίστα συναÏτήσεων:" +msgstr "Λίστα δυνατοτήτων:" #: editor/project_export.cpp -#, fuzzy msgid "Export PCK/Zip" -msgstr "Εξαγωγή" +msgstr "Εξαγωγή PCK/ZIP" #: editor/project_export.cpp msgid "Export templates for this platform are missing:" msgstr "Τα Ï€Ïότυπα εξαγωγής για αυτή την πλατφόÏτμα λείπουν:" #: editor/project_export.cpp +#, fuzzy +msgid "Export templates for this platform are missing/corrupted:" +msgstr "Τα Ï€Ïότυπα εξαγωγής για αυτή την πλατφόÏτμα λείπουν:" + +#: editor/project_export.cpp msgid "Export With Debug" msgstr "Εξαγωγή με αποσφαλμάτωση" #: editor/project_manager.cpp -msgid "Invalid project path, the path must exist!" -msgstr "Μη ÎγκυÏη διαδÏομή ÎÏγου, η διαδÏομή Ï€ÏÎπει να υπάÏχει!" +#, fuzzy +msgid "The path does not exists." +msgstr "Το αÏχείο δεν υπάÏχει." #: editor/project_manager.cpp -msgid "Invalid project path, project.godot must not exist." -msgstr "Μη ÎγκυÏη διαδÏομή ÎÏγου, το project.godot δεν Ï€ÏÎπει να υπάÏχει." +msgid "Please choose a 'project.godot' file." +msgstr "" #: editor/project_manager.cpp -msgid "Invalid project path, project.godot must exist." -msgstr "Μη ÎγκυÏη διαδÏομή ÎÏγου, το project.godot Ï€ÏÎπει να υπάÏχει." +msgid "" +"Your project will be created in a non empty folder (you might want to create " +"a new folder)." +msgstr "" + +#: editor/project_manager.cpp +msgid "Please choose a folder that does not contain a 'project.godot' file." +msgstr "" #: editor/project_manager.cpp msgid "Imported Project" msgstr "ΕισαγμÎνο ÎÏγο" #: editor/project_manager.cpp +msgid " " +msgstr "" + +#: editor/project_manager.cpp +msgid "It would be a good idea to name your project." +msgstr "" + +#: editor/project_manager.cpp msgid "Invalid project path (changed anything?)." msgstr "Μη ÎγκυÏη διαδÏομή ÎÏγου (Αλλάξατε τίποτα;)." #: editor/project_manager.cpp +#, fuzzy +msgid "Couldn't get project.godot in project path." +msgstr "Δεν ήταν δυνατή η δημιουÏγία του project.godot στη διαδÏομή ÎÏγου." + +#: editor/project_manager.cpp +#, fuzzy +msgid "Couldn't edit project.godot in project path." +msgstr "Δεν ήταν δυνατή η δημιουÏγία του project.godot στη διαδÏομή ÎÏγου." + +#: editor/project_manager.cpp msgid "Couldn't create project.godot in project path." msgstr "Δεν ήταν δυνατή η δημιουÏγία του project.godot στη διαδÏομή ÎÏγου." @@ -6057,38 +5637,49 @@ msgid "The following files failed extraction from package:" msgstr "Η εξαγωγή των ακόλουθων αÏχείων από το πακÎτο απÎτυχε:" #: editor/project_manager.cpp +#, fuzzy +msgid "Rename Project" +msgstr "Ανώνυμο ÎÏγο" + +#: editor/project_manager.cpp +#, fuzzy +msgid "Couldn't get project.godot in the project path." +msgstr "Δεν ήταν δυνατή η δημιουÏγία του project.godot στη διαδÏομή ÎÏγου." + +#: editor/project_manager.cpp +msgid "New Game Project" +msgstr "ÎÎο ÎÏγο παιχνιδιοÏ" + +#: editor/project_manager.cpp msgid "Import Existing Project" msgstr "Εισαγωγή υπαÏÎºÏ„Î¿Ï ÎÏγου" #: editor/project_manager.cpp -msgid "Project Path (Must Exist):" -msgstr "ΔιαδÏομή ÎÏγου (Î ÏÎπει να υπάÏχει):" +msgid "Create New Project" +msgstr "ΔημιουÏγία νÎου ÎÏγου" + +#: editor/project_manager.cpp +msgid "Install Project:" +msgstr "Εγκατάσταση ÎÏγου:" #: editor/project_manager.cpp msgid "Project Name:" msgstr "Όνομα ÎÏγου:" #: editor/project_manager.cpp -msgid "Create New Project" -msgstr "ΔημιουÏγία νÎου ÎÏγου" +#, fuzzy +msgid "Create folder" +msgstr "ΔημιουÏγία φακÎλου" #: editor/project_manager.cpp msgid "Project Path:" msgstr "ΔιαδÏομή ÎÏγου:" #: editor/project_manager.cpp -msgid "Install Project:" -msgstr "Εγκατάσταση ÎÏγου:" - -#: editor/project_manager.cpp msgid "Browse" msgstr "ΠεÏιήγηση" #: editor/project_manager.cpp -msgid "New Game Project" -msgstr "ÎÎο ÎÏγο παιχνιδιοÏ" - -#: editor/project_manager.cpp msgid "That's a BINGO!" msgstr "Αυτό είναι Îνα «ΕÏÏηκα»!" @@ -6097,25 +5688,31 @@ msgid "Unnamed Project" msgstr "Ανώνυμο ÎÏγο" #: editor/project_manager.cpp +#, fuzzy +msgid "Can't open project" +msgstr "Δεν είναι δυνατή η εκτÎλεση του ÎÏγου" + +#: editor/project_manager.cpp msgid "Are you sure to open more than one project?" msgstr "Είστε σίγουÏοι πως θÎλετε να ανοίξετε πεÏισσότεÏα από Îνα ÎÏγα;" #: editor/project_manager.cpp -#, fuzzy msgid "" "Can't run project: no main scene defined.\n" "Please edit the project and set the main scene in \"Project Settings\" under " "the \"Application\" category." msgstr "" -"Δεν Îχει καθοÏιστεί κÏÏια σκηνή, θÎλετε να επιλÎξετε μία;\n" -"ΜποÏείτε να την αλλάξετε αÏγότεÏα στις «Ρυθμίσεις ÎÏγου» κάτω από την " -"κατηγοÏία «ΕφαÏμογή»." +"Δεν είναι δυνατή η εκτÎλεση του ÎÏγου: Δεν Îχει καθοÏιστεί κÏÏια σκηνή.\n" +"ΠαÏακαλώ επεξεÏγαστείτε το ÎÏγο και οÏίστε την κÏÏια σκηνή στις «Ρυθμίσεις " +"ÎÏγου» κάτω από την κατηγοÏία «ΕφαÏμογή»." #: editor/project_manager.cpp msgid "" "Can't run project: Assets need to be imported.\n" "Please edit the project to trigger the initial import." msgstr "" +"Δεν είναι δυνατή η εκτÎλεση του ÎÏγου: Τα asset Ï€ÏÎπει να εισαχθοÏν.\n" +"ΠαÏακαλώ επεξεÏγαστείτε το ÎÏγο για να γίνει η αÏχική εισαγωγή." #: editor/project_manager.cpp msgid "Are you sure to run more than one project?" @@ -6139,10 +5736,6 @@ msgid "Project List" msgstr "Λίστα ÎÏγων" #: editor/project_manager.cpp -msgid "Run" -msgstr "ΕκτÎλεση" - -#: editor/project_manager.cpp msgid "Scan" msgstr "ΣάÏωση" @@ -6163,9 +5756,8 @@ msgid "Exit" msgstr "Έξοδος" #: editor/project_manager.cpp -#, fuzzy msgid "Can't run project" -msgstr "Δεν ήταν δυνατή η σÏνδεση." +msgstr "Δεν είναι δυνατή η εκτÎλεση του ÎÏγου" #: editor/project_settings_editor.cpp msgid "Key " @@ -6200,17 +5792,14 @@ msgid "Add Input Action Event" msgstr "Î Ïοσθήκη συμβάντος εισόδου" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Meta+" msgstr "Meta+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Shift+" msgstr "Shift+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Alt+" msgstr "Alt+" @@ -6271,7 +5860,7 @@ msgstr "Αλλαγή" msgid "Joypad Axis Index:" msgstr "ΑÏιθμός άξονα Joypad:" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Axis" msgstr "Άξονας" @@ -6291,57 +5880,64 @@ msgstr "ΔιαγÏαφή συμβάντος ενÎÏγειας εισόδου" msgid "Add Event" msgstr "Î Ïοσθήκη συμβάντος" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Device" msgstr "Συσκευή" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Button" msgstr "Κουμπί" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Left Button." msgstr "ΑÏιστεÏÏŒ κουμπί." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Right Button." msgstr "Δεξί κουμπί." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Middle Button." msgstr "Μεσαίο κουμπί." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Up." msgstr "ΡοδÎλα πάνω." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Down." msgstr "ΡοδÎλα κάτω." #: editor/project_settings_editor.cpp -#, fuzzy msgid "Add Global Property" -msgstr "Î ÏοσθÎστε ιδιότητα Getter" +msgstr "Î Ïοσθήκη καθολικής ιδιότητας" #: editor/project_settings_editor.cpp -msgid "Select an setting item first!" -msgstr "" +#, fuzzy +msgid "Select a setting item first!" +msgstr "ΕπιλÎξτε Îνα αντικείμενο ÏÏθμισης Ï€Ïώτα!" #: editor/project_settings_editor.cpp -#, fuzzy msgid "No property '" -msgstr "Ιδιότητα:" +msgstr "Δεν υπάÏχει ιδιότητα '" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Setting '" -msgstr "Ρυθμίσεις" +msgstr "Ρυθμίση '" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Delete Item" -msgstr "ΔιαγÏαφή εισόδου" +msgstr "ΔιαγÏαφή αντικειμÎνου" + +#: editor/project_settings_editor.cpp +#, fuzzy +msgid "Can't contain '/' or ':'" +msgstr "Δεν ήταν δυνατή η σÏνδεση στον κεντÏικό υπολογιστή:" + +#: editor/project_settings_editor.cpp +#, fuzzy +msgid "Already existing" +msgstr "Η ενÎÏγεια '%s' υπάÏχει ήδη!" #: editor/project_settings_editor.cpp msgid "Error saving settings." @@ -6353,7 +5949,7 @@ msgstr "Οι Ïυθμίσεις αποθηκεÏτικαν εντάξει." #: editor/project_settings_editor.cpp msgid "Override for Feature" -msgstr "" +msgstr "ΠαÏάκαμψη για δυνατότητα" #: editor/project_settings_editor.cpp msgid "Add Translation" @@ -6397,7 +5993,7 @@ msgstr "Ιδιότητα:" #: editor/project_settings_editor.cpp msgid "Override For.." -msgstr "" +msgstr "ΠαÏάκαμψη για..." #: editor/project_settings_editor.cpp msgid "Input Map" @@ -6484,26 +6080,34 @@ msgid "Assign" msgstr "Ανάθεση" #: editor/property_editor.cpp -#, fuzzy msgid "Select Node" -msgstr "ΕπιλÎξτε Îναν κόμβο" +msgstr "Επιλογή κόμβου" #: editor/property_editor.cpp msgid "New Script" msgstr "Îεα δεσμή ενεÏγειών" #: editor/property_editor.cpp +#, fuzzy +msgid "Make Unique" +msgstr "ΔημιουÏγία οστών" + +#: editor/property_editor.cpp msgid "Show in File System" msgstr "Εμφάνιση στο σÏστημα αÏχείων" #: editor/property_editor.cpp +#, fuzzy +msgid "Convert To %s" +msgstr "ΜετατÏοπή σε..." + +#: editor/property_editor.cpp msgid "Error loading file: Not a resource!" msgstr "Σφάλμα κατά την φόÏτωση αÏχείου: Δεν είναι πόÏος!" #: editor/property_editor.cpp -#, fuzzy msgid "Selected node is not a Viewport!" -msgstr "ΕπιλÎξτε κόμβους για εισαγωγή" +msgstr "Ο επιλεγμÎνος κόμβος δεν είναι Viewport!" #: editor/property_editor.cpp msgid "Pick a Node" @@ -6534,6 +6138,11 @@ msgid "Select Property" msgstr "Επιλογή ιδιότητας" #: editor/property_selector.cpp +#, fuzzy +msgid "Select Virtual Method" +msgstr "Επιλογή μεθόδου" + +#: editor/property_selector.cpp msgid "Select Method" msgstr "Επιλογή μεθόδου" @@ -6563,26 +6172,6 @@ msgstr "ΔιατήÏηση παγκόσμιου μετασχηματισμοÏ" msgid "Reparent" msgstr "ΕπαναπÏοσδιοÏισμός γονÎα" -#: editor/resources_dock.cpp -msgid "Create New Resource" -msgstr "ΔημιουÏγία νÎου πόÏου" - -#: editor/resources_dock.cpp -msgid "Open Resource" -msgstr "Άνοιγμα πόÏου" - -#: editor/resources_dock.cpp -msgid "Save Resource" -msgstr "Αποθήκευση πόÏου" - -#: editor/resources_dock.cpp -msgid "Resource Tools" -msgstr "ΕÏγαλεία πόÏων" - -#: editor/resources_dock.cpp -msgid "Make Local" -msgstr "Κάνε τοπικό" - #: editor/run_settings_dialog.cpp msgid "Run Mode:" msgstr "ΛειτουÏγία εκτÎλεσης:" @@ -6717,14 +6306,6 @@ msgid "Sub-Resources:" msgstr "Yπο-Î ÏŒÏοι:" #: editor/scene_tree_dock.cpp -msgid "Edit Groups" -msgstr "ΕπεξεÏγασία Ομάδων" - -#: editor/scene_tree_dock.cpp -msgid "Edit Connections" -msgstr "ΕπεξεÏγασία συνδÎσεων" - -#: editor/scene_tree_dock.cpp msgid "Clear Inheritance" msgstr "ΕκκαθάÏιση κληÏονομικότητας" @@ -6785,9 +6366,8 @@ msgstr "" "υπάÏχει πηγαίος κόμβος." #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Filter nodes" -msgstr "ΦίλτÏα" +msgstr "ΦιλτÏάÏισμα κόμβων" #: editor/scene_tree_dock.cpp msgid "Attach a new or existing script for the selected node." @@ -6882,18 +6462,16 @@ msgid "Scene Tree (Nodes):" msgstr "ΔÎντÏο σκηνής (Κόμβοι):" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "Node Configuration Warning!" -msgstr "Î Ïοειδοποίηση διαμόÏφωσης κόμβου:" +msgstr "Î Ïοειδοποίηση διαμόÏφωσης κόμβου!" #: editor/scene_tree_editor.cpp msgid "Select a Node" msgstr "ΕπιλÎξτε Îναν κόμβο" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Error loading template '%s'" -msgstr "Σφάλμα κατά την φόÏτωση εικόνας:" +msgstr "Σφάλμα κατά την φόÏτωση Ï€ÏοτÏπου '%s'" #: editor/script_create_dialog.cpp msgid "Error - Could not create script in filesystem." @@ -6921,6 +6499,15 @@ msgid "Invalid base path" msgstr "Μη ÎγκυÏη βασική διαδÏομή" #: editor/script_create_dialog.cpp +msgid "Directory of the same name exists" +msgstr "" + +#: editor/script_create_dialog.cpp +#, fuzzy +msgid "File exists, will be reused" +msgstr "Το αÏχείο υπάÏχει. ΘÎλετε να το αντικαταστήσετε;" + +#: editor/script_create_dialog.cpp msgid "Invalid extension" msgstr "Μη ÎγκυÏη επÎκταση" @@ -6961,6 +6548,10 @@ msgid "Load existing script file" msgstr "ΦόÏτωση υπαÏÎºÏ„Î¿Ï Î±Ïχείου δεσμής ενεÏγειών" #: editor/script_create_dialog.cpp +msgid "Language" +msgstr "Γλώσσα" + +#: editor/script_create_dialog.cpp msgid "Inherits" msgstr "ΚληÏονομεί" @@ -7001,6 +6592,10 @@ msgid "Function:" msgstr "ΣυνάÏτηση:" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Errors" msgstr "Σφάλματα" @@ -7081,6 +6676,10 @@ msgid "Type" msgstr "ΤÏπος" #: editor/script_editor_debugger.cpp +msgid "Format" +msgstr "ΜοÏφή" + +#: editor/script_editor_debugger.cpp msgid "Usage" msgstr "ΧÏήση" @@ -7114,7 +6713,7 @@ msgstr "Αλλαγή διαμÎÏ„Ïου φωτός" #: editor/spatial_editor_gizmos.cpp msgid "Change AudioStreamPlayer3D Emission Angle" -msgstr "" +msgstr "Αλλαγή γωνίας εκπομπής του AudioStreamPlayer3D" #: editor/spatial_editor_gizmos.cpp msgid "Change Camera FOV" @@ -7156,13 +6755,31 @@ msgstr "Αλλαγή AABB σωματιδίων" msgid "Change Probe Extents" msgstr "Αλλαγή διαστάσεων αισθητήÏα" +#: modules/gdnative/gd_native_library_editor.cpp +#, fuzzy +msgid "Library" +msgstr "Βιβλιοθήκη πλεγμάτων..." + +#: modules/gdnative/gd_native_library_editor.cpp +#, fuzzy +msgid "Status" +msgstr "Κατάσταση:" + +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Libraries: " +msgstr "" + +#: modules/gdnative/register_types.cpp +msgid "GDNative" +msgstr "" + #: 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/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "Δεν υπάÏχουν αÏκετά byte για την αποκωδικοποίηση, ή άκυÏη μοÏφή." @@ -7203,133 +6820,112 @@ msgstr "ΆκυÏη μοÏφή Î»ÎµÎ¾Î¹ÎºÎ¿Ï ÏƒÏ„Î¹Î³Î¼Î¹Î¿Ï„Ïπων (άκυÏÎ #: modules/gdscript/gd_functions.cpp msgid "Object can't provide a length." -msgstr "" +msgstr "Το αντικείμενο δεν Îχει μήκος." #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Delete Selection" -msgstr "ΔιαγÏαφή επιλεγμÎνου" +msgstr "GridMap ΔιαγÏαφή επιλογής" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Duplicate Selection" -msgstr "Διπλασιασμός επιλογής" - -#: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Paint" -msgstr "" +msgstr "GridMap Διπλασιασμός επιλογής" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Snap View" -msgstr "Πάνω όψη" +msgstr "ΚοÏμπωμα όψης" #: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy msgid "Prev Level (%sDown Wheel)" -msgstr "" +msgstr "Î ÏοηγοÏμενο επίπεδο (" #: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy msgid "Next Level (%sUp Wheel)" -msgstr "" +msgstr "Επόμενο επίπεδο (" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Clip Disabled" -msgstr "ΑπενεÏγοποιημÎνο" +msgstr "Η πεÏικοπή είναι απενεÏγοποιημÎνη" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Clip Above" -msgstr "" +msgstr "ΠεÏικοπή πάνω" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Clip Below" -msgstr "" +msgstr "ΠεÏικοπή κάτω" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Edit X Axis" -msgstr "" +msgstr "ΕπεξεÏγασία άξονα Χ" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Edit Y Axis" -msgstr "" +msgstr "ΕπεξεÏγασία άξονα Î¥" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Edit Z Axis" -msgstr "" +msgstr "ΕπεξεÏγασία άξονα Ζ" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Cursor Rotate X" -msgstr "Ctrl: ΠεÏιστÏοφή" +msgstr "ΔÏομÎας πεÏιστÏοφή Χ" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Cursor Rotate Y" -msgstr "Ctrl: ΠεÏιστÏοφή" +msgstr "ΔÏομÎας πεÏιστÏοφή Î¥" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Cursor Rotate Z" -msgstr "Ctrl: ΠεÏιστÏοφή" +msgstr "ΔÏομÎας πεÏιστÏοφή Ζ" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Back Rotate X" -msgstr "" +msgstr "Πίσω δÏομÎας πεÏιστÏοφή Χ" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Back Rotate Y" -msgstr "" +msgstr "Πίσω δÏομÎας πεÏιστÏοφή Î¥" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Back Rotate Z" -msgstr "" +msgstr "Πίσω δÏομÎας πεÏιστÏοφή Ζ" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Clear Rotation" -msgstr "" +msgstr "ΕκκαθάÏιση πεÏιστÏοφής δÏομÎα" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Create Area" -msgstr "ΔημιουÏγία νÎου" +msgstr "ΔημιουÏγία πεÏιοχής" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Create Exterior Connector" -msgstr "ΔημιουÏγία νÎου ÎÏγου" +msgstr "ΔημιουÏγία εξωτεÏικής σÏνδεσης" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Erase Area" -msgstr "ΔιαγÏαφή TileMap" +msgstr "ΔιαγÏαφή πεÏσιοχής" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Selection -> Duplicate" -msgstr "Μόνο στην επιλογή" +msgstr "Επιλογή -> Διπλασιασμός" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Selection -> Clear" -msgstr "Μόνο στην επιλογή" +msgstr "Επιλογή -> ΕκκαθάÏιση" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Settings" -msgstr "Ρυθμίσεις κουμπώματος" +msgstr "Ρυθμίσεις GridMap" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Pick Distance:" -msgstr "Στιγμιότυπο:" +msgstr "Επιλογή απόστασης:" -#: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy -msgid "Tiles" -msgstr " ΑÏχεία" - -#: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Areas" +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "Builds" msgstr "" #: modules/visual_script/visual_script.cpp @@ -7371,29 +6967,24 @@ msgid "Stack overflow with stack depth: " msgstr "ΥπεÏχείλιση στοίβας με βάθος στοίβας: " #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Signal Arguments" -msgstr "ΕπεξεÏγασία παÏαμÎÏ„Ïων σήματος:" +msgstr "Αλλαγή παÏαμÎÏ„Ïων σήματος" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Argument Type" -msgstr "Αλλαγή Ï„Ïπου τιμής πίνακα" +msgstr "Αλλαγή Ï„Ïπου παÏαμÎÏ„Ïου" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Argument name" -msgstr "Αλλαγή ονόματος εισόδου" +msgstr "Αλλαγή ονόματος παÏαμÎÏ„Ïου" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Set Variable Default Value" -msgstr "Αλλαγή Ï€ÏοεπιλλεγμÎνης τιμής" +msgstr "ΟÏισμός Ï€ÏοεπιλλεγμÎνης τιμής μεταβλητής" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Set Variable Type" -msgstr "ΕπεξεÏγασία μεταβλητής:" +msgstr "ΟÏισμός Ï„Ïπου μεταβλητής" #: modules/visual_script/visual_script_editor.cpp msgid "Functions:" @@ -7444,14 +7035,12 @@ msgid "Add Node" msgstr "Î Ïοσθήκη κόμβου" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Remove VisualScript Nodes" -msgstr "ΑφαίÏεση άκυÏων κλειδιών" +msgstr "ΑφαίÏεση κόμβων VisualScript" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Duplicate VisualScript Nodes" -msgstr "Διπλασιασμός κόμβων γÏαφήματος" +msgstr "Διπλασιασμός κόμβων VisualScript" #: modules/visual_script/visual_script_editor.cpp msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature." @@ -7502,24 +7091,20 @@ msgid "Add Setter Property" msgstr "Î ÏοσθÎστε ιδιότητα Setter" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Base Type" -msgstr "Αλλαγή Ï„Ïπου" +msgstr "Αλλαγή Î²Î±ÏƒÎ¹ÎºÎ¿Ï Ï„Ïπου" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Move Node(s)" -msgstr "ΑφαίÏεση κόμβων" +msgstr "Μετακίνηση κόμβων" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Remove VisualScript Node" -msgstr "ΑφαίÏεση κόμβου γÏαφήματος" +msgstr "ΑφαίÏεση κόμβου VisualScript" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Connect Nodes" -msgstr "ΣÏνδεση στον κόμβο:" +msgstr "ΣÏνδεση κόμβων" #: modules/visual_script/visual_script_editor.cpp msgid "Condition" @@ -7546,46 +7131,48 @@ msgid "Return" msgstr "ΕπιστÏοφή" #: modules/visual_script/visual_script_editor.cpp +msgid "Call" +msgstr "Κλήση" + +#: modules/visual_script/visual_script_editor.cpp msgid "Get" msgstr "ΠάÏε" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy +msgid "Script already has function '%s'" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Input Value" -msgstr "Αλλαγή ονόματος εισόδου" +msgstr "Αλλαγή τιμής εισόδου" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Can't copy the function node." -msgstr "ΑδÏνατη η λειτουÏγία στο '..'" +msgstr "ΑδÏνατη η αντιγÏαφή του κόμβου συνάÏτησης." #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Clipboard is empty!" -msgstr "Το Ï€ÏόχειÏο πόÏων είναι άδειο!" +msgstr "Το Ï€ÏόχειÏο είναι άδειο!" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Paste VisualScript Nodes" -msgstr "Επικόλληση κόμβων" +msgstr "Επικόλληση κόμβων VisualScript" #: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "ΑφαίÏεση συνάÏτησης" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Edit Variable" -msgstr "ΕπεξεÏγασία μεταβλητής:" +msgstr "ΕπεξεÏγασία μεταβλητής" #: modules/visual_script/visual_script_editor.cpp msgid "Remove Variable" msgstr "ΑφαίÏεση μεταβλητής" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Edit Signal" -msgstr "ΕπεξεÏγασία σήματος:" +msgstr "ΕπεξεÏγασία σήματος" #: modules/visual_script/visual_script_editor.cpp msgid "Remove Signal" @@ -7827,6 +7414,9 @@ msgid "" "by the physics engine when running.\n" "Change the size in children collision shapes instead." msgstr "" +"ΑλλαγÎÏ‚ στο μÎγεθος του RigidBody2D (στις λειτουÏγίες character ή rigid) θα " +"αντικατασταθοÏνε από την μηχανή φυσικής κατά την εκτÎλεση.\n" +"Αλλάξτε μÎγεθος στα σχήματα σÏγκÏουσης των παιδιών." #: scene/2d/remote_transform_2d.cpp msgid "Path property must point to a valid Node2D node to work." @@ -7860,31 +7450,35 @@ msgstr "" #: scene/3d/arvr_nodes.cpp msgid "ARVRCamera must have an ARVROrigin node as its parent" -msgstr "" +msgstr "Η ARVRCamera Ï€ÏÎπει να Îχει Îναν κόμβο ARVROrigin ως γονÎα" #: scene/3d/arvr_nodes.cpp msgid "ARVRController must have an ARVROrigin node as its parent" -msgstr "" +msgstr "Ο ARVRController Ï€ÏÎπει να Îχει Îναν κόμβο ARVROrigin ως γονÎα" #: scene/3d/arvr_nodes.cpp msgid "" "The controller id must not be 0 or this controller will not be bound to an " "actual controller" msgstr "" +"Ο δείκτης χειÏιστή δεν Ï€ÏÎπει να είναι 0 για να είναι συνδεδεμÎνος αυτός ο " +"χειÏιστής με Îναν υπαÏκτό χειÏιστή" #: scene/3d/arvr_nodes.cpp msgid "ARVRAnchor must have an ARVROrigin node as its parent" -msgstr "" +msgstr "Ο ARVRAnchor Ï€ÏÎπει να Îχει Îναν κόμβο ARVROrigin ως γονÎα" #: scene/3d/arvr_nodes.cpp msgid "" "The anchor id must not be 0 or this anchor will not be bound to an actual " "anchor" msgstr "" +"Ο δείκτης άγκυÏας δεν Ï€ÏÎπει να είναι 0 για να είναι συνδεδεμÎνη αυτή η " +"άγκυÏα με μία υπαÏκτή άγκυÏα" #: scene/3d/arvr_nodes.cpp msgid "ARVROrigin requires an ARVRCamera child node" -msgstr "" +msgstr "Το ARVROrigin απαιτεί Îναν κόμβο ARVRCamera ως παιδί" #: scene/3d/collision_polygon.cpp msgid "" @@ -7946,6 +7540,9 @@ msgid "" "the physics engine when running.\n" "Change the size in children collision shapes instead." msgstr "" +"ΑλλαγÎÏ‚ στο μÎγεθος του RigidBody (στις λειτουÏγίες character ή rigid) θα " +"αντικατασταθοÏνε από την μηχανή φυσικής κατά την εκτÎλεση.\n" +"Αλλάξτε μÎγεθος στα σχήματα σÏγκÏουσης των παιδιών." #: scene/3d/remote_transform.cpp msgid "Path property must point to a valid Spatial node to work." @@ -7968,16 +7565,25 @@ msgstr "" "Ένας πόÏος SpriteFrames Ï€ÏÎπει να δημιουÏγηθεί ή οÏισθεί στην ιδιότητα " "'Frames' για να δείξει frames το AnimatedSprite3D." +#: scene/3d/vehicle_body.cpp +msgid "" +"VehicleWheel serves to provide a wheel system to a VehicleBody. Please use " +"it as a child of a VehicleBody." +msgstr "" + #: scene/gui/color_picker.cpp -#, fuzzy msgid "Raw Mode" -msgstr "ΛειτουÏγία Μετακίνησης κάμεÏας" +msgstr "Ωμή λειτουÏγία" #: scene/gui/color_picker.cpp msgid "Add current color as a preset" msgstr "Î Ïοσθήκη του Ï„ÏÎχοντος χÏώματος ως Ï€ÏοκαθοÏισμÎνο" #: scene/gui/dialogs.cpp +msgid "Cancel" +msgstr "ΑκÏÏωση" + +#: scene/gui/dialogs.cpp msgid "Alert!" msgstr "Ειδοποίηση!" @@ -7985,10 +7591,6 @@ msgstr "Ειδοποίηση!" msgid "Please Confirm..." msgstr "ΠαÏακαλώ επιβεβαιώστε..." -#: scene/gui/input_action.cpp -msgid "Ctrl+" -msgstr "Ctrl+" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -8030,6 +7632,638 @@ msgstr "" "μÎγεθος. Αλλιώς, κάντε το Îνα RenderTarget και οÏίστε το internal texture σε " "Îναν κόμβο για απεικόνιση." +#: scene/resources/dynamic_font.cpp +msgid "Error initializing FreeType." +msgstr "Σφάλμα κατά την αÏχικοποίηση του FreeType." + +#: scene/resources/dynamic_font.cpp +msgid "Unknown font format." +msgstr "Άγνωστη μοÏφή γÏαμματοσειÏάς." + +#: scene/resources/dynamic_font.cpp +msgid "Error loading font." +msgstr "Σφάλμα κατά την φόÏτωση της γÏαμματοσειÏάς." + +#: scene/resources/dynamic_font.cpp +msgid "Invalid font size." +msgstr "Μη ÎγκυÏο μÎγεθος γÏαμματοσειÏάς." + +#~ msgid "Method List For '%s':" +#~ msgstr "Λίστα συναÏτήσεων για '%s':" + +#~ msgid "Arguments:" +#~ msgstr "ΠαÏάμετÏοι:" + +#~ msgid "Return:" +#~ msgstr "ΕπιστÏÎφει:" + +#~ msgid "Added:" +#~ msgstr "Î ÏοστÎθηκαν:" + +#~ msgid "Removed:" +#~ msgstr "ΑφαιÏÎθηκαν:" + +#~ msgid "Error saving atlas:" +#~ msgstr "Σφάλμα κατά την αποθήκευση άτλαντα:" + +#~ msgid "Could not save atlas subtexture:" +#~ msgstr "ΑδÏνατη η αποθήκευση υπό-εικόνας άτλαντα:" + +#~ msgid "Exporting for %s" +#~ msgstr "Εξαγωγή για %s" + +#~ msgid "Setting Up.." +#~ msgstr "ΑÏχικοποίηση.." + +#~ msgid "Error loading scene." +#~ msgstr "Σφάλμα κατά τη φόÏτωση σκηνής." + +#~ msgid "Re-Import" +#~ msgstr "Επανεισαγωγή" + +#~ msgid "Please wait for scan to complete." +#~ msgstr "ΠαÏακαλώ πεÏιμÎνετε να ολοκληÏωθεί η σάÏωση." + +#~ msgid "Current scene must be saved to re-import." +#~ msgstr "Η Ï„ÏÎχουσα σκηνή Ï€ÏÎπει να αποθηκευτεί για να επαν-εισάγετε." + +#~ msgid "Save & Re-Import" +#~ msgstr "Αποθήκευση & Επανεισαγωγή" + +#~ msgid "Re-Importing" +#~ msgstr "Επανεισαγωγή" + +#~ msgid "Re-Import Changed Resources" +#~ msgstr "Επανεισαγωγή Ï„ÏοποπιημÎνων πόÏων" + +#~ msgid "Loading Export Templates" +#~ msgstr "ΦόÏτωση Ï€ÏοτÏπων εξαγωγής" + +#~ msgid "" +#~ "\n" +#~ "Status: Needs Re-Import" +#~ msgstr "" +#~ "\n" +#~ "Κατάσταση: ΧÏειάζεται επανεισαγωγή" + +#~ msgid "Same source and destination files, doing nothing." +#~ msgstr "Ίδια αÏχεία πηγής και Ï€ÏοοÏισμοÏ, παÏάλειψη ενÎÏγειας." + +#~ msgid "Target file exists, can't overwrite. Delete first." +#~ msgstr "" +#~ "Το αÏχείο Ï€ÏοοÏÎ¹ÏƒÎ¼Î¿Ï Ï…Ï€Î¬Ïχει, όμως είναι αδÏνατη η αντικατάσταση. " +#~ "ΔιαγÏάψτε το Ï€Ïώτα." + +#~ msgid "Same source and destination paths, doing nothing." +#~ msgstr "Ίδιες διαδÏομÎÏ‚ πηγής και Ï€ÏοοÏισμοÏ, παÏάλειψη ενÎÏγειας." + +#~ msgid "Can't move directories to within themselves." +#~ msgstr "ΑδÏνατη η μετακίνηση καταλόγων μÎσα στους εαυτοÏÏ‚ τους." + +#~ msgid "Can't rename deps for:\n" +#~ msgstr "Δεν είναι δυνατή η μετονομασία εξαÏτήσεων για:\n" + +#~ msgid "Error moving file:\n" +#~ msgstr "Σφάλμα κατά την μετακίνηση αÏχείου:\n" + +#~ msgid "Pick New Name and Location For:" +#~ msgstr "ΕπιλÎξτε νÎο όνομα και θÎση για:" + +#~ msgid "No files selected!" +#~ msgstr "Δεν επιλÎχθηκαν αÏχεία!" + +#~ msgid "Info" +#~ msgstr "ΠληÏοφοÏίες" + +#~ msgid "Re-Import.." +#~ msgstr "Εκ νÎου εισαγωγή..." + +#~ msgid "No bit masks to import!" +#~ msgstr "Δεν υπάÏχουν μάσκες bit για εισαγωγή!" + +#~ msgid "Target path is empty." +#~ msgstr "Η διαδÏομή Ï€ÏοοÏÎ¹ÏƒÎ¼Î¿Ï ÎµÎ¯Î½Î±Î¹ άδεια." + +#~ msgid "Target path must be a complete resource path." +#~ msgstr "Η διαδÏομή Ï€ÏοοÏÎ¹ÏƒÎ¼Î¿Ï Ï€ÏÎπει να είναι μία πλήÏης διαδÏομή σε πόÏο." + +#~ msgid "Target path must exist." +#~ msgstr "Η διαδÏομή Ï€ÏοοÏÎ¹ÏƒÎ¼Î¿Ï Ï€ÏÎπει να υπάÏχει." + +#~ msgid "Save path is empty!" +#~ msgstr "Η διαδÏομή αποθήκευσης είναι άδεια!" + +#~ msgid "Import BitMasks" +#~ msgstr "Εισαγωγή μάσκας bit" + +#~ msgid "Source Texture(s):" +#~ msgstr "Πηγαίες υφÎÏ‚:" + +#~ msgid "Target Path:" +#~ msgstr "ΔιαδÏομή Ï€ÏοοÏισμοÏ:" + +#~ msgid "Accept" +#~ msgstr "Αποδοχή" + +#~ msgid "Bit Mask" +#~ msgstr "Μάσκα bit" + +#~ msgid "No source font file!" +#~ msgstr "Δεν δόθηκε πηγαίο αÏχείο γÏαμματοσειÏάς!" + +#~ msgid "No target font resource!" +#~ msgstr "Δε δόθηκε πόÏος γÏαμματοσειÏάς Ï€ÏοοÏισμοÏ!" + +#~ msgid "" +#~ "Invalid file extension.\n" +#~ "Please use .font." +#~ msgstr "" +#~ "ΆκυÏη επÎκταση αÏχείου.\n" +#~ "ΠαÏακαλώ χÏησιμοποιήστε .font." + +#~ msgid "Couldn't save font." +#~ msgstr "Δεν ήταν δυνατή η αποθήκευση της γÏαμματοσειÏάς." + +#~ msgid "Source Font:" +#~ msgstr "Πηγαία γÏαμματοσειÏά:" + +#~ msgid "Source Font Size:" +#~ msgstr "ΜÎγεθος πηγαίας γÏαμματοσειÏάς:" + +#~ msgid "Dest Resource:" +#~ msgstr "Î ÏŒÏος Ï€ÏοοÏισμοÏ:" + +#~ msgid "The quick brown fox jumps over the lazy dog." +#~ msgstr "ΓαζÎες καὶ μυÏτιὲς δὲν θὰ βÏá¿¶ πιὰ στὸ χÏυσαφὶ ξÎφωτο." + +#~ msgid "Test:" +#~ msgstr "Δοκιμή:" + +#~ msgid "Options:" +#~ msgstr "ΕπιλογÎÏ‚:" + +#~ msgid "Font Import" +#~ msgstr "Εισαγωγή γÏαμματοσειÏάς" + +#~ msgid "" +#~ "This file is already a Godot font file, please supply a BMFont type file " +#~ "instead." +#~ msgstr "" +#~ "Αυτό το αÏχείο είναι ήδη Îνα αÏχείο γÏαμματοσειÏάς της Godot, παÏακαλώ " +#~ "υποβάλετε Îνα αÏχείο Ï„Ïπου BMFont." + +#~ msgid "Failed opening as BMFont file." +#~ msgstr "ΑπÎτυχε το άνοιγμα ως αÏχείο BMFont." + +#~ msgid "Invalid font custom source." +#~ msgstr "ΆκυÏη Ï€ÏοσαÏμοσμÎνη πηγή γÏαμματοσειÏάς." + +#~ msgid "No meshes to import!" +#~ msgstr "Δεν υπάÏχουν πλÎγματα για εισαγωγή!" + +#~ msgid "Single Mesh Import" +#~ msgstr "Εισαγωγή ενός πλÎγματος" + +#~ msgid "Source Mesh(es):" +#~ msgstr "Πηγαία πλÎγματα:" + +#~ msgid "Surface %d" +#~ msgstr "Επιφάνεια %d" + +#~ msgid "No samples to import!" +#~ msgstr "Δεν υπάÏχουν δείγματα για εισαγωγή!" + +#~ msgid "Import Audio Samples" +#~ msgstr "Εισαγωγή δειγμάτων ήχου" + +#~ msgid "Source Sample(s):" +#~ msgstr "Πηγαία δείγματα:" + +#~ msgid "Audio Sample" +#~ msgstr "Δείγμα ήχου" + +#~ msgid "New Clip" +#~ msgstr "ÎÎο απόσπασμα" + +#~ msgid "Flags" +#~ msgstr "Σημαίες" + +#~ msgid "Bake FPS:" +#~ msgstr "Ψήστε FPS:" + +#~ msgid "Optimizer" +#~ msgstr "ΕÏγαλείο βελτιστοποίησης" + +#~ msgid "Max Linear Error" +#~ msgstr "ΜÎγιστο γÏαμμικό σφάλμα" + +#~ msgid "Max Angular Error" +#~ msgstr "ΜÎγιστο γωνιακό σφάλμα" + +#~ msgid "Max Angle" +#~ msgstr "Ανώτατη Γωνία" + +#~ msgid "Clips" +#~ msgstr "Αποσπάσματα" + +#~ msgid "Start(s)" +#~ msgstr "ΑÏχή" + +#~ msgid "End(s)" +#~ msgstr "ΤÎλος" + +#~ msgid "Filters" +#~ msgstr "ΦίλτÏα" + +#~ msgid "Source path is empty." +#~ msgstr "Η διαδÏομή Ï€ÏοÎλευσης είναι άδεια." + +#~ msgid "Couldn't load post-import script." +#~ msgstr "Δεν ήταν δυνατή η φόÏτωση της δεσμής ενεÏγειών μετ-εισαγωγής." + +#~ msgid "Invalid/broken script for post-import." +#~ msgstr "" +#~ "ΆκυÏη / χαλασμÎνη δεσμή ενεÏγειών για την διαδικασία της μετ-εισαγωγής." + +#~ msgid "Error importing scene." +#~ msgstr "Σφάλμα κατά την εισαγωγή της σκηνής." + +#~ msgid "Import 3D Scene" +#~ msgstr "Εισαγωγή 3D σκηνής" + +#~ msgid "Source Scene:" +#~ msgstr "Σκηνή Ï€ÏοÎλευσης:" + +#~ msgid "Same as Target Scene" +#~ msgstr "Το ίδιο με την στοχευμÎνη σκηνή" + +#~ msgid "Shared" +#~ msgstr "ΚοινόχÏηστο" + +#~ msgid "Target Texture Folder:" +#~ msgstr "ΕπιλεγμÎνος φάκλος υφών:" + +#~ msgid "Post-Process Script:" +#~ msgstr "Δεσμή ενεÏγειών μετ-επεξεÏγασίας:" + +#~ msgid "Custom Root Node Type:" +#~ msgstr "Î ÏοσαÏμοσμÎνος Ï„Ïπος ÏÎ¹Î¶Î¹ÎºÎ¿Ï ÎºÏŒÎ¼Î²Î¿Ï…:" + +#~ msgid "Auto" +#~ msgstr "Αυτόματο" + +#~ msgid "Root Node Name:" +#~ msgstr "Όνομα ÏÎ¹Î¶Î¹ÎºÎ¿Ï ÎºÏŒÎ¼Î²Î¿Ï…:" + +#~ msgid "The Following Files are Missing:" +#~ msgstr "Τα ακόλουθα αÏχεία λείπουν:" + +#~ msgid "Import Anyway" +#~ msgstr "Εισαγωγή οÏτως ή άλλως" + +#~ msgid "Import & Open" +#~ msgstr "Εισαγωγή & Άνοιγμα" + +#~ msgid "Edited scene has not been saved, open imported scene anyway?" +#~ msgstr "" +#~ "Η Ï„ÏÎχουσα σκηνή δεν Îχει αποθηκευτεί, άνοιγμα της εισαγμÎνης σκηνής " +#~ "οÏτως ή άλλως;" + +#~ msgid "Import Image:" +#~ msgstr "Εισαγωγή εικόνας:" + +#~ msgid "Couldn't localize path: %s (already local)" +#~ msgstr "" +#~ "Δεν είναι δυνατή η μετατÏοπή της διαδÏομής σε τοπική: %s (είναι ήδη " +#~ "τοπικό)" + +#~ msgid "3D Scene Animation" +#~ msgstr "Κίνηση Ï„Ïισδιάστατης σκηνής" + +#~ msgid "Uncompressed" +#~ msgstr "Ασυμπίεστο" + +#~ msgid "Compress Lossless (PNG)" +#~ msgstr "Συμπίεση χωÏίς απώλειες (PNG)" + +#~ msgid "Compress Lossy (WebP)" +#~ msgstr "Συμπίεση με απώλειες (WebP)" + +#~ msgid "Compress (VRAM)" +#~ msgstr "Συμπίεση (VRAM)" + +#~ msgid "Texture Format" +#~ msgstr "ΜοÏφή υφής" + +#~ msgid "Texture Compression Quality (WebP):" +#~ msgstr "Ποιότητα συμπίεσης υφής (WebP):" + +#~ msgid "Texture Options" +#~ msgstr "ΕπιλογÎÏ‚ υφής" + +#~ msgid "Please specify some files!" +#~ msgstr "ΠαÏακαλώ καθοÏίστε κάποια αÏχεία!" + +#~ msgid "At least one file needed for Atlas." +#~ msgstr "Τουλάχιστον Îνα αÏχείο απαιτείται για τον άτλαντα." + +#~ msgid "Error importing:" +#~ msgstr "Σφάλμα κατά την εισαγωγή:" + +#~ msgid "Only one file is required for large texture." +#~ msgstr "Μόνο Îνα αÏχείο είναι απαÏαίτητη για μεγάλη υφή." + +#~ msgid "Max Texture Size:" +#~ msgstr "ΜÎγιστο μÎγεθος υφής:" + +#~ msgid "Import Textures for Atlas (2D)" +#~ msgstr "Εισαγωγή υφών για τον άτλαντα (2D)" + +#~ msgid "Cell Size:" +#~ msgstr "ΜÎγεθος κελιοÏ:" + +#~ msgid "Large Texture" +#~ msgstr "Μεγάλη υφή" + +#~ msgid "Import Large Textures (2D)" +#~ msgstr "Εισαγωγής Μεγάλων Υφών (2D)" + +#~ msgid "Source Texture" +#~ msgstr "Υφή Ï€ÏοÎλευσης" + +#~ msgid "Base Atlas Texture" +#~ msgstr "Βασική υφή άτλαντα" + +#~ msgid "Source Texture(s)" +#~ msgstr "ΥφÎÏ‚ Ï€ÏοÎλευσης" + +#~ msgid "Import Textures for 2D" +#~ msgstr "Εισαγωγή υφών για 2 διαστάσεις" + +#~ msgid "Import Textures for 3D" +#~ msgstr "Εισαγωγή υφών για 3 διαστάσεις" + +#~ msgid "Import Textures" +#~ msgstr "Εισαγωγή υφών" + +#~ msgid "2D Texture" +#~ msgstr "Υφή 2 διαστάσεων" + +#~ msgid "3D Texture" +#~ msgstr "Υφή 3 διαστάσεων" + +#~ msgid "Atlas Texture" +#~ msgstr "Υφή άτλαντα" + +#~ msgid "" +#~ "NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files " +#~ "to the project." +#~ msgstr "" +#~ "ΣΗΜΕΙΩΣΗ: Η εισαγωγή δισδιάστατων υφών δεν είναι υποχÏεωτική. Απλά " +#~ "αντιγÏάψτε τα αÏχεία png/jpg στο ÎÏγο." + +#~ msgid "Crop empty space." +#~ msgstr "ΠεÏικοπή άδειου χώÏου." + +#~ msgid "Texture" +#~ msgstr "Υφή" + +#~ msgid "Import Large Texture" +#~ msgstr "Εισαγωγή μεγάλης υφής" + +#~ msgid "Load Source Image" +#~ msgstr "ΦόÏτωση εικόνας Ï€ÏοÎλευσης" + +#~ msgid "Slicing" +#~ msgstr "Κατάτμηση" + +#~ msgid "Saving" +#~ msgstr "Αποθήκευση" + +#~ msgid "Couldn't save large texture:" +#~ msgstr "Δεν ήταν δυνατή η αποθήκευση μεγάλης υφής:" + +#~ msgid "Build Atlas For:" +#~ msgstr "Κατασκευή άτλαντα για:" + +#~ msgid "Loading Image:" +#~ msgstr "ΦόÏτωση εικόνας:" + +#~ msgid "Couldn't load image:" +#~ msgstr "Δεν ήταν δυνατή η φόÏτωση της εικόνας:" + +#~ msgid "Converting Images" +#~ msgstr "ΜετατÏοπή Εικόνων" + +#~ msgid "Cropping Images" +#~ msgstr "ΠεÏικοπή Εικόνων" + +#~ msgid "Blitting Images" +#~ msgstr "Συνδυασμός εικόνων" + +#~ msgid "Couldn't save atlas image:" +#~ msgstr "Δεν ήταν δυνατή η αποθήκευση εικόνας άτλαντα:" + +#~ msgid "Couldn't save converted texture:" +#~ msgstr "Δεν ήταν δυνατή η αποθήκευση υφής που Îχει μετατÏαπεί:" + +#~ msgid "Invalid source!" +#~ msgstr "Μη ÎγκυÏη πηγή!" + +#~ msgid "Invalid translation source!" +#~ msgstr "Μη ÎγκυÏη πηγή μετάφÏασης!" + +#~ msgid "Column" +#~ msgstr "Στήλη" + +#~ msgid "No items to import!" +#~ msgstr "Δεν υπάÏχουν στοιχεία για εισαγωγή!" + +#~ msgid "No target path!" +#~ msgstr "Καμία διαδÏομή Ï€ÏοοÏισμοÏ!" + +#~ msgid "Import Translations" +#~ msgstr "Εισαγωγή μεταφÏάσεων" + +#~ msgid "Couldn't import!" +#~ msgstr "Δεν ήταν δυνατή η εισαγωγή!" + +#~ msgid "Import Translation" +#~ msgstr "Εισαγωγή μετάφÏασης" + +#~ msgid "Source CSV:" +#~ msgstr "CSV Ï€ÏοÎλευσης:" + +#~ msgid "Ignore First Row" +#~ msgstr "Αγνόησε την Ï€Ïώτη γÏαμμή" + +#~ msgid "Compress" +#~ msgstr "Συμπίεση" + +#~ msgid "Add to Project (project.godot)" +#~ msgstr "Î Ïόσθεσε στο ÎÏγο (project.godot)" + +#~ msgid "Import Languages:" +#~ msgstr "Εισαγωγή γλωσσών:" + +#~ msgid "Translation" +#~ msgstr "ΜετάφÏαση" + +#~ msgid "Parsing %d Triangles:" +#~ msgstr "Ανάλυση %d ΤÏιγώνων:" + +#~ msgid "Triangle #" +#~ msgstr "ΤÏίγωνο #" + +#~ msgid "Light Baker Setup:" +#~ msgstr "ΡÏθμιση Ï€ÏοεπεγεÏγαστή φωτός:" + +#~ msgid "Fixing Lights" +#~ msgstr "ΔιόÏθωση φώτων" + +#~ msgid "Making BVH" +#~ msgstr "ΔημιουÏγία BVH" + +#~ msgid "Transfer to Lightmaps:" +#~ msgstr "ΜεταφοÏά στους χάÏτες φωτός:" + +#~ msgid "Allocating Texture #" +#~ msgstr "ΔÎσμευση υφής #" + +#~ msgid "Baking Triangle #" +#~ msgstr "Î ÏοεπεξεÏγασία Ï„Ïιγώνου #" + +#~ msgid "Post-Processing Texture #" +#~ msgstr "ΜετεπεξεÏγασία υφής #" + +#~ msgid "Reset the lightmap octree baking process (start over)." +#~ msgstr "" +#~ "ΕπαναφοÏά της Ï€ÏοεπεξεÏγασίας του Î¿ÎºÏ„Î±Î´Î¹ÎºÎ¿Ï Î´ÎντÏου του χάÏτη φωτός " +#~ "(Εκκίνηση από την αÏχή)." + +#~ msgid "Zoom (%):" +#~ msgstr "ΜεγÎθυνση (%):" + +#~ msgid "Skeleton.." +#~ msgstr "Σκελετός.." + +#~ msgid "Zoom Reset" +#~ msgstr "ΕπαναφοÏά μεγÎθυνσης" + +#~ msgid "Zoom Set.." +#~ msgstr "ΟÏισμός μεγÎθυνσης.." + +#~ msgid "Set a Value" +#~ msgstr "ΟÏισμός τιμής" + +#~ msgid "Snap (Pixels):" +#~ msgstr "ΚοÏμπωμα (Εικονοστοιχεία):" + +#~ msgid "Parse BBCode" +#~ msgstr "Ανάλυση BBCode" + +#~ msgid "Length:" +#~ msgstr "Μήκος:" + +#~ msgid "Open Sample File(s)" +#~ msgstr "Άνοιγμα αÏχείων δειγμάτων" + +#~ msgid "ERROR: Couldn't load sample!" +#~ msgstr "ΣΦΑΛΜΑ: Δεν ήταν δυνατή η φόÏτωση δείγματος!" + +#~ msgid "Add Sample" +#~ msgstr "Î Ïοσθήκη δείγματος" + +#~ msgid "Rename Sample" +#~ msgstr "Μετονομασία δείγματος" + +#~ msgid "Delete Sample" +#~ msgstr "ΔιαγÏαφή δείγματος" + +#~ msgid "16 Bits" +#~ msgstr "16 Δυαδικά ψηφία" + +#~ msgid "8 Bits" +#~ msgstr "8 Δυαδικά ψηφία" + +#~ msgid "Stereo" +#~ msgstr "ΣτεÏεοφωνικό" + +#~ msgid "Mono" +#~ msgstr "Μονοφωνικό" + +#~ msgid "Pitch" +#~ msgstr "Τόνος" + +#~ msgid "Window" +#~ msgstr "ΠαÏάθυÏο" + +#~ msgid "Move Right" +#~ msgstr "Μετακίνηση δεξιά" + +#~ msgid "Scaling to %s%%." +#~ msgstr "Κλιμάκωση to %s%%." + +#~ msgid "Up" +#~ msgstr "Πάνω" + +#~ msgid "Down" +#~ msgstr "Κάτω" + +#~ msgid "Bucket" +#~ msgstr "Κουβάς" + +#~ msgid "Invalid project path, the path must exist!" +#~ msgstr "Μη ÎγκυÏη διαδÏομή ÎÏγου, η διαδÏομή Ï€ÏÎπει να υπάÏχει!" + +#~ msgid "Invalid project path, project.godot must not exist." +#~ msgstr "Μη ÎγκυÏη διαδÏομή ÎÏγου, το project.godot δεν Ï€ÏÎπει να υπάÏχει." + +#~ msgid "Invalid project path, project.godot must exist." +#~ msgstr "Μη ÎγκυÏη διαδÏομή ÎÏγου, το project.godot Ï€ÏÎπει να υπάÏχει." + +#~ msgid "Project Path (Must Exist):" +#~ msgstr "ΔιαδÏομή ÎÏγου (Î ÏÎπει να υπάÏχει):" + +#~ msgid "Create New Resource" +#~ msgstr "ΔημιουÏγία νÎου πόÏου" + +#~ msgid "Open Resource" +#~ msgstr "Άνοιγμα πόÏου" + +#~ msgid "Save Resource" +#~ msgstr "Αποθήκευση πόÏου" + +#~ msgid "Resource Tools" +#~ msgstr "ΕÏγαλεία πόÏων" + +#~ msgid "Make Local" +#~ msgstr "Κάνε τοπικό" + +#~ msgid "Edit Groups" +#~ msgstr "ΕπεξεÏγασία Ομάδων" + +#~ msgid "Edit Connections" +#~ msgstr "ΕπεξεÏγασία συνδÎσεων" + +#~ msgid "GridMap Paint" +#~ msgstr "GridMap ΖωγÏαφική" + +#~ msgid "Tiles" +#~ msgstr "Πλακίδια" + +#~ msgid "Areas" +#~ msgstr "ΠεÏιοχÎÏ‚" + +#~ msgid "Ctrl+" +#~ msgstr "Ctrl+" + +#~ msgid "Down Wheel)" +#~ msgstr "Κάτω ÏοδÎλα)" + +#~ msgid "Up Wheel)" +#~ msgstr "Πάνω ÏοδÎλα)" + #~ msgid "Close scene? (Unsaved changes will be lost)" #~ msgstr "Κλείσιμο σκηνής; (Οι μη αποθηκευμÎνες αλλαγÎÏ‚ θα χαθοÏν)" @@ -8043,9 +8277,6 @@ msgstr "" #~ msgid "Close Goto Prev. Scene" #~ msgstr "Κλείσιμο και μετάβαση στην Ï€ÏοηγοÏμενη σκηνή" -#~ msgid "Expand to Parent" -#~ msgstr "Επικάλυψη γονÎα" - #~ msgid "Del" #~ msgstr "ΔιαγÏαφή" @@ -8209,8 +8440,5 @@ msgstr "" #~ msgid "Save Translatable Strings" #~ msgstr "Αποθήκευση μεταφÏάσιμων συμβολοσειÏών" -#~ msgid "Translatable Strings.." -#~ msgstr "ΜεταφÏάσιμες συμβολοσειÏÎÏ‚..." - #~ msgid "Install Export Templates" #~ msgstr "Εγκατάσταση Ï€ÏοτÏπων εξαγωγής" diff --git a/editor/translations/es.po b/editor/translations/es.po index da7bd97b83..e6a9f205fd 100644 --- a/editor/translations/es.po +++ b/editor/translations/es.po @@ -7,6 +7,7 @@ # BLaDoM GUY <simplybladom@gmail.com>, 2017. # Carlos López <genetita@gmail.com>, 2016. # Lisandro Lorea <lisandrolorea@gmail.com>, 2016-2017. +# Rabid Orange <theorangerabid@gmail.com>, 2017. # Roger BR <drai_kin@hotmail.com>, 2016. # Sebastian Silva <sebastian@fuentelibre.org>, 2016. # Swyter <swyterzone@gmail.com>, 2016-2017. @@ -15,8 +16,8 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2017-07-08 01:05+0000\n" -"Last-Translator: BLaDoM GUY <simplybladom@gmail.com>\n" +"PO-Revision-Date: 2017-10-05 13:48+0000\n" +"Last-Translator: Rabid Orange <theorangerabid@gmail.com>\n" "Language-Team: Spanish <https://hosted.weblate.org/projects/godot-engine/" "godot/es/>\n" "Language: es\n" @@ -24,7 +25,7 @@ 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.16-dev\n" +"X-Generator: Weblate 2.17-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -198,13 +199,12 @@ msgstr "¿Quieres crear una NUEVA pista para %s e insertar clave?" #: editor/animation_editor.cpp msgid "Create %d NEW tracks and insert keys?" -msgstr "¿Quieres crear %d NUEVOS pistas e insertar claves?" +msgstr "¿Quieres crear %d NUEVAS pistas e insertar claves?" #: editor/animation_editor.cpp editor/create_dialog.cpp -#: editor/editor_audio_buses.cpp +#: editor/editor_audio_buses.cpp editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp #: editor/plugins/mesh_instance_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp editor/project_manager.cpp #: editor/script_create_dialog.cpp msgid "Create" @@ -369,272 +369,6 @@ msgstr "Cambiar tipo de valor del «array»" msgid "Change Array Value" msgstr "Cambiar valor del «array»" -#: editor/asset_library_editor_plugin.cpp -msgid "Free" -msgstr "Libre" - -#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp -msgid "Version:" -msgstr "Versión:" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Contents:" -msgstr "Constantes:" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "View Files" -msgstr "Archivo" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_help.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp -msgid "Description:" -msgstr "Descripción:" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -#: editor/project_manager.cpp -msgid "Install" -msgstr "Instalar" - -#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp -#: editor/connections_dialog.cpp editor/export_template_manager.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -#: editor/project_settings_editor.cpp editor/property_editor.cpp -#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Close" -msgstr "Cerrar" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve hostname:" -msgstr "No se ha podido resolver el nombre de Dominio:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve." -msgstr "No se ha podido resolver." - -#: editor/asset_library_editor_plugin.cpp -msgid "Connection error, please try again." -msgstr "Error de conexion, por favor intente otra vez." - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Can't connect." -msgstr "Conectar.." - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Can't connect to host:" -msgstr "Conectar a nodo:" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response from host:" -msgstr "No hay respuesta desde el host:" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response." -msgstr "No responde." - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Request failed, return code:" -msgstr "Formato de archivo desconocido:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Req. Failed." -msgstr "Solicitud fallida." - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Request failed, too many redirects" -msgstr "Solicitud fallida, ha redireccionado demasiado" - -#: editor/asset_library_editor_plugin.cpp -msgid "Redirect Loop." -msgstr "Bucle de redireccionamiento." - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed:" -msgstr "Fallido:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Bad download hash, assuming file has been tampered with." -msgstr "Error de descarga, al pareser el archivo ha sido manipulado." - -#: editor/asset_library_editor_plugin.cpp -msgid "Expected:" -msgstr "Esperado:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Got:" -msgstr "Tiene:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed sha256 hash check" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Asset Download Error:" -msgstr "Error en la descarga del asset:" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -msgid "Success!" -msgstr "Finalizado!" - -#: editor/asset_library_editor_plugin.cpp -msgid "Fetching:" -msgstr "Buscando:" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Resolving.." -msgstr "Guardando…" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Connecting.." -msgstr "Conectar.." - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Requesting.." -msgstr "Prueba" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Error making request" -msgstr "¡Hubo un error al guardar el recurso!" - -#: editor/asset_library_editor_plugin.cpp -msgid "Idle" -msgstr "Inactivo" - -#: editor/asset_library_editor_plugin.cpp -msgid "Retry" -msgstr "Reintente" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Download Error" -msgstr "Abajo" - -#: editor/asset_library_editor_plugin.cpp -msgid "Download for this asset is already in progress!" -msgstr "Este asset ya esta descargandose!" - -#: editor/asset_library_editor_plugin.cpp -msgid "first" -msgstr "primero" - -#: editor/asset_library_editor_plugin.cpp -msgid "prev" -msgstr "anterior" - -#: editor/asset_library_editor_plugin.cpp -msgid "next" -msgstr "siguiente" - -#: editor/asset_library_editor_plugin.cpp -msgid "last" -msgstr "ultimo" - -#: editor/asset_library_editor_plugin.cpp -msgid "All" -msgstr "Todos" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/property_selector.cpp editor/quick_open.cpp -#: editor/settings_config_dialog.cpp -msgid "Search:" -msgstr "Buscar:" - -#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Search" -msgstr "Buscar" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/project_manager.cpp -msgid "Import" -msgstr "Importar" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Plugins" -msgstr "Plugins" - -#: editor/asset_library_editor_plugin.cpp -msgid "Sort:" -msgstr "Ordenar:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Reverse" -msgstr "Invertir" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Category:" -msgstr "CategorÃa:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Site:" -msgstr "Sitio:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "Soporte.." - -#: editor/asset_library_editor_plugin.cpp -msgid "Official" -msgstr "Oficial" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -msgid "Community" -msgstr "Comunidad" - -#: editor/asset_library_editor_plugin.cpp -msgid "Testing" -msgstr "Prueba" - -#: editor/asset_library_editor_plugin.cpp -msgid "Assets ZIP File" -msgstr "Archivo ZIP de elementos" - -#: editor/call_dialog.cpp -msgid "Method List For '%s':" -msgstr "Lista de métodos Para '%s':" - -#: editor/call_dialog.cpp modules/visual_script/visual_script_editor.cpp -msgid "Call" -msgstr "Llamada" - -#: editor/call_dialog.cpp -msgid "Method List:" -msgstr "Lista de métodos:" - -#: editor/call_dialog.cpp -msgid "Arguments:" -msgstr "Argumentos:" - -#: editor/call_dialog.cpp -msgid "Return:" -msgstr "Devuelve:" - #: editor/code_editor.cpp msgid "Go to Line" msgstr "Ir a lÃnea" @@ -672,6 +406,14 @@ msgstr "Palabras completas" msgid "Selection Only" msgstr "Sólo selección" +#: editor/code_editor.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp +msgid "Search" +msgstr "Buscar" + #: editor/code_editor.cpp editor/editor_help.cpp msgid "Find" msgstr "Búsqueda" @@ -704,11 +446,11 @@ msgstr "Preguntar antes de reemplazar" msgid "Skip" msgstr "Saltar" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom In" msgstr "Acercar" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom Out" msgstr "Alejar" @@ -779,6 +521,20 @@ msgstr "Diferido" msgid "Oneshot" msgstr "Una vez" +#: editor/connections_dialog.cpp editor/dependency_editor.cpp +#: editor/export_template_manager.cpp +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Close" +msgstr "Cerrar" + #: editor/connections_dialog.cpp msgid "Connect" msgstr "Conectar" @@ -804,7 +560,7 @@ msgstr "Conectar.." msgid "Disconnect" msgstr "Desconectar" -#: editor/connections_dialog.cpp editor/node_dock.cpp +#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" msgstr "Señales" @@ -821,12 +577,25 @@ msgstr "Favoritos:" msgid "Recent:" msgstr "Recientes:" +#: editor/create_dialog.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp +#: editor/quick_open.cpp editor/settings_config_dialog.cpp +msgid "Search:" +msgstr "Buscar:" + #: editor/create_dialog.cpp editor/editor_help.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp #: editor/quick_open.cpp msgid "Matches:" msgstr "Coincidencias:" +#: editor/create_dialog.cpp editor/editor_help.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp +#: editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "Descripción:" + #: editor/dependency_editor.cpp msgid "Search Replacement For:" msgstr "Buscar reemplazo para:" @@ -886,6 +655,12 @@ msgid "Owners Of:" msgstr "Dueños de:" #: editor/dependency_editor.cpp +msgid "Remove selected files from the project? (no undo)" +msgstr "" +"¿Quieres quitar los archivos seleccionados del proyecto? (No puedes " +"deshacerlo)" + +#: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" @@ -896,10 +671,9 @@ msgstr "" "¿Seguro que quieres quitarlos? (No puedes deshacerlo)" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (no undo)" -msgstr "" -"¿Quieres quitar los archivos seleccionados del proyecto? (No puedes " -"deshacerlo)" +#, fuzzy +msgid "Cannot remove:\n" +msgstr "No se ha podido resolver." #: editor/dependency_editor.cpp msgid "Error loading:" @@ -966,11 +740,6 @@ msgstr "Contribuidores de Godot" #: editor/editor_about.cpp #, fuzzy -msgid "Authors" -msgstr "Autor:" - -#: editor/editor_about.cpp -#, fuzzy msgid "Project Founders" msgstr "Administrador de proyectos" @@ -988,20 +757,58 @@ msgid "Developers" msgstr "Desarrolladores" #: editor/editor_about.cpp -msgid "License" +#, fuzzy +msgid "Authors" +msgstr "Autor:" + +#: editor/editor_about.cpp +msgid "Platinum Sponsors" msgstr "" #: editor/editor_about.cpp -msgid "Thirdparty License" +msgid "Gold Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Mini Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Silver Donors" msgstr "" #: editor/editor_about.cpp +#, fuzzy +msgid "Bronze Donors" +msgstr "Clonar hacia abajo" + +#: editor/editor_about.cpp +msgid "Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "License" +msgstr "Licencia" + +#: editor/editor_about.cpp +msgid "Thirdparty License" +msgstr "Licencia de terceros" + +#: editor/editor_about.cpp msgid "" "Godot Engine relies on a number of thirdparty free and open source " "libraries, all compatible with the terms of its MIT license. The following " "is an exhaustive list of all such thirdparty components with their " "respective copyright statements and license terms." msgstr "" +"Godot Engine se basa en una serie de bibliotecas libres y de código abierto " +"de terceros, todas ellas compatibles con los términos de su licencia MIT. La " +"siguiente es una lista exhaustiva de todos estos componentes de terceros con " +"sus respectivas declaraciones de derechos de autor y términos de licencia." #: editor/editor_about.cpp #, fuzzy @@ -1015,11 +822,11 @@ msgstr "Constantes:" #: editor/editor_about.cpp msgid "Licenses" -msgstr "" +msgstr "Licencias" #: editor/editor_asset_installer.cpp editor/project_manager.cpp msgid "Error opening package file, not in zip format." -msgstr "" +msgstr "Error al abrir el paquete, no se encuentra en formato zip." #: editor/editor_asset_installer.cpp #, fuzzy @@ -1031,13 +838,23 @@ msgid "Package Installed Successfully!" msgstr "¡El paquete se ha instalado correctamente!" #: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Success!" +msgstr "Finalizado!" + +#: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp +msgid "Install" +msgstr "Instalar" + +#: editor/editor_asset_installer.cpp #, fuzzy msgid "Package Installer" msgstr "¡El paquete se ha instalado correctamente!" #: editor/editor_audio_buses.cpp msgid "Speakers" -msgstr "" +msgstr "Altavoces" #: editor/editor_audio_buses.cpp #, fuzzy @@ -1060,20 +877,24 @@ msgid "Toggle Audio Bus Mute" msgstr "Abrir diseño del Audio Bus" #: editor/editor_audio_buses.cpp +#, fuzzy msgid "Toggle Audio Bus Bypass Effects" -msgstr "" +msgstr "Cambiar efectos de bypass del Bus de Audio" #: editor/editor_audio_buses.cpp +#, fuzzy msgid "Select Audio Bus Send" -msgstr "" +msgstr "Seleccionar Bus de audio de envÃo" #: editor/editor_audio_buses.cpp +#, fuzzy msgid "Add Audio Bus Effect" -msgstr "" +msgstr "Añadir Efecto de Bus de Audio" #: editor/editor_audio_buses.cpp +#, fuzzy msgid "Move Bus Effect" -msgstr "" +msgstr "Mover Efecto de Bus" #: editor/editor_audio_buses.cpp #, fuzzy @@ -1081,25 +902,28 @@ msgid "Delete Bus Effect" msgstr "Quitar seleccionados" #: editor/editor_audio_buses.cpp +#, fuzzy msgid "Audio Bus, Drag and Drop to rearrange." -msgstr "" +msgstr "Bus de Audio, arrastra y suelta para reordenar." #: editor/editor_audio_buses.cpp #, fuzzy -msgid "Bus options" -msgstr "Opciones de depuración" - -#: editor/editor_audio_buses.cpp msgid "Solo" -msgstr "" +msgstr "Solo" #: editor/editor_audio_buses.cpp msgid "Mute" -msgstr "" +msgstr "Silenciar" #: editor/editor_audio_buses.cpp +#, fuzzy msgid "Bypass" -msgstr "" +msgstr "Bypass" + +#: editor/editor_audio_buses.cpp +#, fuzzy +msgid "Bus options" +msgstr "Opciones de depuración" #: editor/editor_audio_buses.cpp editor/plugins/tile_map_editor_plugin.cpp #: editor/scene_tree_dock.cpp @@ -1108,6 +932,11 @@ msgstr "Duplicar" #: editor/editor_audio_buses.cpp #, fuzzy +msgid "Reset Volume" +msgstr "Restablecer zoom" + +#: editor/editor_audio_buses.cpp +#, fuzzy msgid "Delete Effect" msgstr "Quitar seleccionados" @@ -1118,7 +947,7 @@ msgstr "Añadir todos" #: editor/editor_audio_buses.cpp msgid "Master bus can't be deleted!" -msgstr "" +msgstr "¡El Bus Maestro no puede ser borrado!" #: editor/editor_audio_buses.cpp #, fuzzy @@ -1132,6 +961,11 @@ msgstr "Duplicar animación" #: editor/editor_audio_buses.cpp #, fuzzy +msgid "Reset Bus Volume" +msgstr "Restablecer zoom" + +#: editor/editor_audio_buses.cpp +#, fuzzy msgid "Move Audio Bus" msgstr "Mover acción" @@ -1148,8 +982,9 @@ msgid "Open Audio Bus Layout" msgstr "Abrir diseño del Audio Bus" #: editor/editor_audio_buses.cpp +#, fuzzy msgid "There is no 'res://default_bus_layout.tres' file." -msgstr "" +msgstr "No existe el archivo 'res://default_bus_layout.tres'." #: editor/editor_audio_buses.cpp #, fuzzy @@ -1168,7 +1003,8 @@ msgstr "Añadir todos" msgid "Create a new Bus Layout." msgstr "Crear recurso nuevo" -#: editor/editor_audio_buses.cpp editor/script_create_dialog.cpp +#: editor/editor_audio_buses.cpp editor/property_editor.cpp +#: editor/script_create_dialog.cpp msgid "Load" msgstr "Cargar" @@ -1193,8 +1029,9 @@ msgid "Load Default" msgstr "Predeterminado" #: editor/editor_audio_buses.cpp +#, fuzzy msgid "Load the default Bus Layout." -msgstr "" +msgstr "Cargar el Diseño del Bus por defecto." #: editor/editor_autoload_settings.cpp msgid "Invalid name." @@ -1267,7 +1104,7 @@ msgid "Rearrange Autoloads" msgstr "Reordenar «Autoloads»" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp scene/gui/file_dialog.cpp +#: scene/gui/file_dialog.cpp msgid "Path:" msgstr "Ruta:" @@ -1275,9 +1112,7 @@ msgstr "Ruta:" msgid "Node Name:" msgstr "Nombre del nodo:" -#: editor/editor_autoload_settings.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp editor/project_manager.cpp +#: editor/editor_autoload_settings.cpp editor/project_manager.cpp msgid "Name" msgstr "Nombre" @@ -1311,18 +1146,19 @@ msgid "Choose a Directory" msgstr "Elige una carpeta" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Create Folder" msgstr "Crear carpeta" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: editor/editor_plugin_settings.cpp editor/plugins/theme_editor_plugin.cpp -#: editor/project_export.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp +#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp +#: scene/gui/file_dialog.cpp msgid "Name:" msgstr "Nombre:" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Could not create folder." msgstr "No se pudo crear la carpeta." @@ -1343,30 +1179,6 @@ msgstr "Empaquetando" msgid "Template file not found:\n" msgstr "No se encontró archivo de base:\n" -#: editor/editor_export.cpp -msgid "Added:" -msgstr "Añadido:" - -#: editor/editor_export.cpp -msgid "Removed:" -msgstr "Eliminado:" - -#: editor/editor_export.cpp -msgid "Error saving atlas:" -msgstr "Error al guardar atlas:" - -#: editor/editor_export.cpp -msgid "Could not save atlas subtexture:" -msgstr "No se pudo guardar la subtextura del altas:" - -#: editor/editor_export.cpp -msgid "Exporting for %s" -msgstr "Exportando para %s" - -#: editor/editor_export.cpp -msgid "Setting Up.." -msgstr "Configurando…" - #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "El archivo ya existe, ¿quieres sobreescribirlo?" @@ -1451,6 +1263,11 @@ msgstr "Subir favorito" msgid "Move Favorite Down" msgstr "Bajar favorito" +#: editor/editor_file_dialog.cpp +#, fuzzy +msgid "Go to parent folder" +msgstr "No se pudo crear la carpeta." + #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Directories & Files:" msgstr "Carpetas y archivos:" @@ -1494,6 +1311,10 @@ msgstr "Lista de clases:" msgid "Search Classes" msgstr "Buscar clases" +#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +msgid "Top" +msgstr "Cima" + #: editor/editor_help.cpp editor/property_editor.cpp msgid "Class:" msgstr "Clase:" @@ -1510,15 +1331,30 @@ msgstr "Heredada por:" msgid "Brief Description:" msgstr "Descripción breve:" +#: editor/editor_help.cpp +#, fuzzy +msgid "Members" +msgstr "Miembros:" + #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "Miembros:" #: editor/editor_help.cpp +#, fuzzy +msgid "Public Methods" +msgstr "Métodos públicos:" + +#: editor/editor_help.cpp msgid "Public Methods:" msgstr "Métodos públicos:" #: editor/editor_help.cpp +#, fuzzy +msgid "GUI Theme Items" +msgstr "Elementos de tema de interfaz:" + +#: editor/editor_help.cpp msgid "GUI Theme Items:" msgstr "Elementos de tema de interfaz:" @@ -1528,12 +1364,23 @@ msgstr "Señales:" #: editor/editor_help.cpp #, fuzzy +msgid "Enumerations" +msgstr "Animaciones" + +#: editor/editor_help.cpp +#, fuzzy msgid "Enumerations:" msgstr "Animaciones" #: editor/editor_help.cpp +#, fuzzy msgid "enum " -msgstr "" +msgstr "enum " + +#: editor/editor_help.cpp +#, fuzzy +msgid "Constants" +msgstr "Constantes:" #: editor/editor_help.cpp msgid "Constants:" @@ -1541,14 +1388,41 @@ msgstr "Constantes:" #: editor/editor_help.cpp #, fuzzy +msgid "Description" +msgstr "Descripción:" + +#: editor/editor_help.cpp +#, fuzzy +msgid "Properties" +msgstr "Propiedades:" + +#: editor/editor_help.cpp +#, fuzzy msgid "Property Description:" msgstr "Descripción breve:" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this property. Please help us by " +"[color=$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp +#, fuzzy +msgid "Methods" +msgstr "Lista de métodos:" + +#: editor/editor_help.cpp msgid "Method Description:" msgstr "Descripción de métodos:" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this method. Please help us by [color=" +"$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp msgid "Search Text" msgstr "Texto de búsqueda" @@ -1558,26 +1432,24 @@ msgid "Output:" msgstr " Salida:" #: editor/editor_log.cpp editor/plugins/animation_tree_editor_plugin.cpp -#: editor/plugins/rich_text_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_editor_debugger.cpp scene/gui/line_edit.cpp -#: scene/gui/text_edit.cpp +#: editor/property_editor.cpp editor/script_editor_debugger.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Clear" msgstr "Borrar todo" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Error saving resource!" msgstr "¡Hubo un error al guardar el recurso!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Save Resource As.." -msgstr "Guardar recurso como…" +msgstr "Guardar recurso como.." -#: editor/editor_node.cpp editor/export_template_manager.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp +#, fuzzy msgid "I see.." -msgstr "Muy bien…" +msgstr "Ya veo.." #: editor/editor_node.cpp msgid "Can't open file for writing:" @@ -1592,6 +1464,30 @@ msgid "Error while saving." msgstr "Error al guardar." #: editor/editor_node.cpp +#, fuzzy +msgid "Can't open '%s'." +msgstr "No se puede operar en «…»" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Error while parsing '%s'." +msgstr "Error al guardar." + +#: editor/editor_node.cpp +msgid "Unexpected end of file '%s'." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Missing '%s' or its dependencies." +msgstr "La escena «%s» tiene dependencias rotas:" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Error while loading '%s'." +msgstr "Error al guardar." + +#: editor/editor_node.cpp msgid "Saving Scene" msgstr "Guardar escena" @@ -1652,6 +1548,33 @@ msgid "Restored default layout to base settings." msgstr "Se han restaurado los ajustes predeterminados." #: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was imported, so it's not editable.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was instanced or inherited.\n" +"Changes to it will not be kept when saving the current scene." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource was imported, so it's not editable. Change its settings in the " +"import panel and then re-import." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This scene was imported, so changes to it will not be kept.\n" +"Instancing it or inheriting will allow making changes to it.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp msgid "Copy Params" msgstr "Copiar parámetros" @@ -1734,11 +1657,11 @@ msgstr "Abrir escena base" #: editor/editor_node.cpp msgid "Quick Open Scene.." -msgstr "Apertura rápida de escena…" +msgstr "Apertura rápida de escena.." #: editor/editor_node.cpp msgid "Quick Open Script.." -msgstr "Apertura rápida de script…" +msgstr "Apertura rápida de script.." #: editor/editor_node.cpp #, fuzzy @@ -1746,12 +1669,13 @@ msgid "Save & Close" msgstr "Guardar un archivo" #: editor/editor_node.cpp +#, fuzzy msgid "Save changes to '%s' before closing?" -msgstr "" +msgstr "¿Guardar cambios a '%s' antes de cerrar?" #: editor/editor_node.cpp msgid "Save Scene As.." -msgstr "Guardar escena como…" +msgstr "Guardar escena como.." #: editor/editor_node.cpp #, fuzzy @@ -1802,7 +1726,7 @@ msgstr "Esta acción es irreversible. ¿Quieres revertirla de todos modos?" #: editor/editor_node.cpp msgid "Quick Run Scene.." -msgstr "Ejecución rápida de escena…" +msgstr "Ejecución rápida de escena.." #: editor/editor_node.cpp msgid "Quit" @@ -1824,31 +1748,46 @@ msgstr "Guardar un archivo" #: editor/editor_node.cpp msgid "Save changes to the following scene(s) before quitting?" -msgstr "" +msgstr "¿Guardar cambios a la(s) siguiente(s) escena(s) antes de salir?" #: editor/editor_node.cpp +#, fuzzy msgid "Save changes the following scene(s) before opening Project Manager?" msgstr "" +"¿Guardar cambios a la(s) siguiente(s) escena(s) antes de abrir el Gestor de " +"Proyectos?" + +#: editor/editor_node.cpp +msgid "" +"This option is deprecated. Situations where refresh must be forced are now " +"considered a bug. Please report." +msgstr "" #: editor/editor_node.cpp msgid "Pick a Main Scene" msgstr "Elige una escena principal" #: editor/editor_node.cpp +#, fuzzy msgid "Unable to enable addon plugin at: '" -msgstr "" +msgstr "No se pudo activar el plugin addon en: '" #: editor/editor_node.cpp +#, fuzzy msgid "' parsing of config failed." -msgstr "" +msgstr "' análisis de config fallido." #: editor/editor_node.cpp +#, fuzzy msgid "Unable to find script field for addon plugin at: 'res://addons/" msgstr "" +"No se pudo encontrar el campo del script para el plugin addon en: 'res://" +"addons/" #: editor/editor_node.cpp +#, fuzzy msgid "Unable to load addon script from path: '" -msgstr "" +msgstr "No se pudo cargar el script addon desde la ruta: '" #: editor/editor_node.cpp msgid "" @@ -1860,7 +1799,7 @@ msgstr "" "Para poder modificarla, se tiene que crear una nueva escena heredada." #: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Ugh" msgstr "Vaya" @@ -1874,14 +1813,15 @@ msgstr "" "la ruta del proyecto." #: editor/editor_node.cpp -msgid "Error loading scene." -msgstr "Hubo un error al cargar la escena." - -#: editor/editor_node.cpp msgid "Scene '%s' has broken dependencies:" msgstr "La escena «%s» tiene dependencias rotas:" #: editor/editor_node.cpp +#, fuzzy +msgid "Clear Recent Scenes" +msgstr "Reestablecer huesos" + +#: editor/editor_node.cpp msgid "Save Layout" msgstr "Guardar ajustes" @@ -1915,7 +1855,7 @@ msgstr "Modo sin distracciones" msgid "Toggle distraction-free mode." msgstr "Modo sin distracciones" -#: editor/editor_node.cpp editor/io_plugins/editor_scene_import_plugin.cpp +#: editor/editor_node.cpp msgid "Scene" msgstr "Escena" @@ -1946,7 +1886,7 @@ msgstr "Nueva escena" #: editor/editor_node.cpp msgid "New Inherited Scene.." -msgstr "Nueva escena heredada…" +msgstr "Nueva escena heredada.." #: editor/editor_node.cpp msgid "Open Scene.." @@ -1970,15 +1910,16 @@ msgstr "Abrir reciente" #: editor/editor_node.cpp msgid "Convert To.." -msgstr "Convertir a…" +msgstr "Convertir a.." #: editor/editor_node.cpp msgid "MeshLibrary.." -msgstr "MeshLibrary…" +msgstr "MeshLibrary.." #: editor/editor_node.cpp +#, fuzzy msgid "TileSet.." -msgstr "TileSet…" +msgstr "TileSet.." #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp @@ -2159,6 +2100,10 @@ msgstr "P&R" msgid "Issue Tracker" msgstr "Registros de problemas" +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +msgid "Community" +msgstr "Comunidad" + #: editor/editor_node.cpp msgid "About" msgstr "Acerca de" @@ -2167,7 +2112,7 @@ msgstr "Acerca de" msgid "Play the project." msgstr "Inicia el proyecto para poder jugarlo." -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Play" msgstr "Reproducir" @@ -2183,7 +2128,7 @@ msgstr "Pausar la escena" msgid "Stop the scene." msgstr "Detener la escena." -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Stop" msgstr "Detener" @@ -2238,7 +2183,7 @@ msgstr "Guardar el recurso editado actualmente." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Save As.." -msgstr "Guardar como…" +msgstr "Guardar como.." #: editor/editor_node.cpp msgid "Go to the previous edited object in history." @@ -2257,6 +2202,16 @@ msgid "Object properties." msgstr "Propiedades del objeto." #: editor/editor_node.cpp +#, fuzzy +msgid "Changes may be lost!" +msgstr "Cambiar grupo de imágenes" + +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Import" +msgstr "Importar" + +#: editor/editor_node.cpp msgid "FileSystem" msgstr "SistDeArchivos" @@ -2270,15 +2225,7 @@ msgstr "Salida" #: editor/editor_node.cpp msgid "Don't Save" -msgstr "" - -#: editor/editor_node.cpp editor/editor_reimport_dialog.cpp -msgid "Re-Import" -msgstr "Reimportar" - -#: editor/editor_node.cpp editor/editor_plugin_settings.cpp -msgid "Update" -msgstr "Actualizar" +msgstr "No guardar" #: editor/editor_node.cpp msgid "Import Templates From ZIP File" @@ -2347,11 +2294,29 @@ msgstr "Abrir en el editor" msgid "Open the previous Editor" msgstr "Abrir en el editor" +#: editor/editor_plugin.cpp +#, fuzzy +msgid "Creating Mesh Previews" +msgstr "Crear biblioteca de modelos 3D" + +#: editor/editor_plugin.cpp +msgid "Thumbnail.." +msgstr "Miniatura.." + #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" msgstr "Plugins instalados:" #: editor/editor_plugin_settings.cpp +msgid "Update" +msgstr "Actualizar" + +#: editor/editor_plugin_settings.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Version:" +msgstr "Versión:" + +#: editor/editor_plugin_settings.cpp msgid "Author:" msgstr "Autor:" @@ -2403,35 +2368,19 @@ msgstr "Propio" msgid "Frame #:" msgstr "Nº de cuadro:" -#: editor/editor_reimport_dialog.cpp -msgid "Please wait for scan to complete." -msgstr "Espera a que termine el análisis." - -#: editor/editor_reimport_dialog.cpp -msgid "Current scene must be saved to re-import." -msgstr "La escena actual debe ser guardada para reimportar." - -#: editor/editor_reimport_dialog.cpp -msgid "Save & Re-Import" -msgstr "Guardar y reimportar" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Importing" -msgstr "Reimportando" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Import Changed Resources" -msgstr "Reimportar recursos cambiados" - #: editor/editor_run_native.cpp msgid "Select device from the list" -msgstr "" +msgstr "Seleccionar dispositivo de la lista" #: editor/editor_run_native.cpp +#, fuzzy msgid "" "No runnable export preset found for this platform.\n" "Please add a runnable preset in the export menu." msgstr "" +"No se ha encontrado un preset ejecutable de exportación para esta " +"plataforma.\n" +"Por favor, añade un preset ejecutable en el menú de exportación." #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." @@ -2524,7 +2473,7 @@ msgstr "" #: editor/export_template_manager.cpp msgid "No version.txt found inside templates." -msgstr "" +msgstr "No se ha encontrado el archivo version.txt dentro de las plantillas." #: editor/export_template_manager.cpp #, fuzzy @@ -2541,10 +2490,6 @@ msgid "Importing:" msgstr "Importando:" #: editor/export_template_manager.cpp -msgid "Loading Export Templates" -msgstr "Cargando plantillas de exportación" - -#: editor/export_template_manager.cpp #, fuzzy msgid "Current Version:" msgstr "Escena actual" @@ -2582,14 +2527,21 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "Cannot navigate to '" +msgstr "No se puede navegar a '" + +#: editor/filesystem_dock.cpp +msgid "View items as a grid of thumbnails" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "View items as a list" msgstr "" #: editor/filesystem_dock.cpp -#, fuzzy msgid "" "\n" -"Status: Needs Re-Import" -msgstr "Guardar y reimportar" +"Status: Import of file failed. Please fix file and reimport manually." +msgstr "" #: editor/filesystem_dock.cpp #, fuzzy @@ -2599,48 +2551,57 @@ msgid "" msgstr "Fuente:" #: 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." +#, fuzzy +msgid "Cannot move/rename resources root." +msgstr "No se puede cargar/procesar la tipografÃa elegida." #: editor/filesystem_dock.cpp -msgid "Target file exists, can't overwrite. Delete first." -msgstr "" +#, fuzzy +msgid "Cannot move a folder into itself.\n" +msgstr "No se puede importar un archivo sobre si mismo:" #: 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." +#, fuzzy +msgid "Error moving:\n" +msgstr "Hubo un error al importar:" + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Unable to update dependencies:\n" +msgstr "La escena «%s» tiene dependencias rotas:" #: editor/filesystem_dock.cpp -msgid "Can't move directories to within themselves." -msgstr "No se pueden mover carpetas dentro de si mismas." +msgid "No name provided" +msgstr "" #: editor/filesystem_dock.cpp -msgid "Can't rename deps for:\n" +msgid "Provided name contains invalid characters" msgstr "" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Error moving file:\n" -msgstr "Error al cargar la imagen:" +msgid "No name provided." +msgstr "Renombrar o mover.." #: editor/filesystem_dock.cpp #, fuzzy -msgid "Error moving dir:\n" -msgstr "Hubo un error al importar:" +msgid "Name contains invalid characters." +msgstr "Letras válidas:" #: editor/filesystem_dock.cpp -msgid "Can't operate on '..'" -msgstr "No se puede operar en «…»" +#, fuzzy +msgid "A file or folder with this name already exists." +msgstr "¡El nombre de grupo ya existe!" #: editor/filesystem_dock.cpp -msgid "Pick New Name and Location For:" -msgstr "Elige un nombre nuevo y ubicación para:" +#, fuzzy +msgid "Renaming file:" +msgstr "Renombrar variable" #: editor/filesystem_dock.cpp -msgid "No files selected!" -msgstr "¡No has seleccionado ningún archivo!" +#, fuzzy +msgid "Renaming folder:" +msgstr "Renombrar nodo" #: editor/filesystem_dock.cpp #, fuzzy @@ -2649,43 +2610,42 @@ msgstr "Expandir al padre" #: editor/filesystem_dock.cpp msgid "Collapse all" -msgstr "" +msgstr "Colapsar todo" #: editor/filesystem_dock.cpp -msgid "Show In File Manager" -msgstr "Mostrar en el navegador de archivos" - -#: editor/filesystem_dock.cpp -msgid "Instance" -msgstr "Instanciar" +msgid "Copy Path" +msgstr "Copiar ruta" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "Editar dependencias…" +#, fuzzy +msgid "Rename.." +msgstr "Renombrar" #: editor/filesystem_dock.cpp -msgid "View Owners.." -msgstr "Ver dueños…" +msgid "Move To.." +msgstr "Mover a.." #: editor/filesystem_dock.cpp -msgid "Copy Path" -msgstr "Copiar ruta" +#, fuzzy +msgid "New Folder.." +msgstr "Crear carpeta" #: editor/filesystem_dock.cpp -msgid "Rename or Move.." -msgstr "Renombrar o mover…" +msgid "Show In File Manager" +msgstr "Mostrar en el navegador de archivos" #: editor/filesystem_dock.cpp -msgid "Move To.." -msgstr "Mover a…" +msgid "Instance" +msgstr "Instanciar" #: editor/filesystem_dock.cpp -msgid "Info" -msgstr "Info" +msgid "Edit Dependencies.." +msgstr "Editar dependencias.." #: editor/filesystem_dock.cpp -msgid "Re-Import.." -msgstr "Reimportando…" +#, fuzzy +msgid "View Owners.." +msgstr "Ver propietarios.." #: editor/filesystem_dock.cpp msgid "Previous Directory" @@ -2713,11 +2673,18 @@ msgid "" "Scanning Files,\n" "Please Wait.." msgstr "" +"Escaneando archivos,\n" +"Por favor, espere..." #: editor/filesystem_dock.cpp msgid "Move" msgstr "Mover" +#: editor/filesystem_dock.cpp editor/plugins/animation_tree_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Rename" +msgstr "Renombrar" + #: editor/groups_editor.cpp msgid "Add to Group" msgstr "Añadir al grupo" @@ -2732,16 +2699,37 @@ msgid "Import as Single Scene" msgstr "Importando escena…" #: editor/import/resource_importer_scene.cpp +#, fuzzy +msgid "Import with Separate Animations" +msgstr "Importar con materiales separados" + +#: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials" -msgstr "" +msgstr "Importar con materiales separados" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects" -msgstr "" +msgstr "Importar con objetos separados" #: editor/import/resource_importer_scene.cpp +#, fuzzy msgid "Import with Separate Objects+Materials" -msgstr "" +msgstr "Importar con objetos y materiales separados" + +#: editor/import/resource_importer_scene.cpp +#, fuzzy +msgid "Import with Separate Objects+Animations" +msgstr "Importar con objetos y materiales separados" + +#: editor/import/resource_importer_scene.cpp +#, fuzzy +msgid "Import with Separate Materials+Animations" +msgstr "Importar con materiales separados" + +#: editor/import/resource_importer_scene.cpp +#, fuzzy +msgid "Import with Separate Objects+Materials+Animations" +msgstr "Importar con objetos y materiales separados" #: editor/import/resource_importer_scene.cpp #, fuzzy @@ -2750,52 +2738,45 @@ msgstr "Importar escena 3D" #: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes+Materials" -msgstr "" +msgstr "Importar como escenas y materiales múltiples" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Import Scene" msgstr "Importar escena" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Importing Scene.." -msgstr "Importando escena…" +msgstr "Importando escena.." #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Running Custom Script.." -msgstr "Ejecutando script personalizado…" +msgstr "Ejecutando script personalizado.." #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Couldn't load post-import script:" msgstr "No se pudo cargar el script posimportación:" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Invalid/broken script for post-import (check console):" msgstr "" "El script de posimportación no es correcto o está roto. (revisa la consola):" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Error running post-import script:" msgstr "Error ejecutando el script de posimportacion:" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Saving.." -msgstr "Guardando…" +msgstr "Guardando.." #: editor/import_dock.cpp msgid "Set as Default for '%s'" -msgstr "" +msgstr "Configurar por defecto para '%s'" #: editor/import_dock.cpp msgid "Clear Default for '%s'" -msgstr "" +msgstr "Borrar por defecto para '%s'" #: editor/import_dock.cpp #, fuzzy @@ -2809,598 +2790,67 @@ msgstr "Importar" #: editor/import_dock.cpp editor/property_editor.cpp msgid "Preset.." -msgstr "Ajuste…" +msgstr "Ajuste.." #: editor/import_dock.cpp #, fuzzy msgid "Reimport" msgstr "Reimportar" -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "No bit masks to import!" -msgstr "¡Sin máscaras de bits para importar!" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path is empty." -msgstr "La ruta de destino está vacÃa." - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must be a complete resource path." -msgstr "La ruta de destino debe ser una ruta de recursos completa." - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must exist." -msgstr "La ruta de destino debe existir." - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Save path is empty!" -msgstr "La ruta de guardado esta vacÃa!" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Import BitMasks" -msgstr "Importar BitMasks" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s):" -msgstr "Texturas de origen:" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Target Path:" -msgstr "Ruta de destino:" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Accept" -msgstr "Aceptar" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Bit Mask" -msgstr "Máscara de bits" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No source font file!" -msgstr "¡No se ha elegido ningún archivo de tipografÃas!" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No target font resource!" -msgstr "¡No se ha elegido ningún recurso de tipografÃas!" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#, fuzzy -msgid "" -"Invalid file extension.\n" -"Please use .font." -msgstr "" -"La extensión del archivo no es correcta.\n" -"Prueba con la extensión .fnt." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Can't load/process source font." -msgstr "No se puede cargar/procesar la tipografÃa elegida." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Couldn't save font." -msgstr "No se pudo guardar la tipografÃa." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font:" -msgstr "TipografÃa elegida:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font Size:" -msgstr "Tamaño de la tipografÃa elegida:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Dest Resource:" -msgstr "Recurso de destino:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "The quick brown fox jumps over the lazy dog." -msgstr "El veloz murciélago hindú comÃa feliz cardillo y kiwi." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Test:" -msgstr "Prueba:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Options:" -msgstr "Opciones:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Font Import" -msgstr "Importar tipografÃas" - -#: 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, tienes que utilizar " -"un archivo de tipo BMFont." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Failed opening as BMFont file." -msgstr "Error al abrir como archivo BMFont." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error initializing FreeType." -msgstr "Error al arrancar FreeType." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Unknown font format." -msgstr "Formato de tipografÃa desconocido." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error loading font." -msgstr "Error al cargar la tipografÃa." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Invalid font size." -msgstr "Tamaño de tipografÃa incorrecto." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Invalid font custom source." -msgstr "El origen personalizado de tipografÃa no es correcto." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/plugins/theme_editor_plugin.cpp -msgid "Font" -msgstr "TipografÃa" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "No meshes to import!" -msgstr "¡No hay ningún modelo que se pueda importar!" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Single Mesh Import" -msgstr "Importar modelo individual" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Source Mesh(es):" -msgstr "Modelo/s elegidos:" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Mesh" -msgstr "Modelos 3D" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Surface %d" -msgstr "Superficie %d" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "No samples to import!" -msgstr "¡No hay ningún sonido a importar!" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Import Audio Samples" -msgstr "Importar archivo de sonido" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Source Sample(s):" -msgstr "Muestra(s) de Origen:" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Audio Sample" -msgstr "Archivo de sonido" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "New Clip" -msgstr "Nuevo clip" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Animation Options" -msgstr "Opciones de Animación" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Flags" -msgstr "Identificadores" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Bake FPS:" -msgstr "Hacer Bake de FPS:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Optimizer" -msgstr "Optimizar" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Linear Error" -msgstr "Error lineal máximo" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angular Error" -msgstr "Error angular máximo" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angle" -msgstr "Ãngulo máximo" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Clips" -msgstr "Clips" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Start(s)" -msgstr "Inicios" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "End(s)" -msgstr "Finales" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Loop" -msgstr "Repetir" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Filters" -msgstr "Filtros" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source path is empty." -msgstr "La ruta de origen esta vacÃa." - -#: 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." - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Invalid/broken script for post-import." -msgstr "El script de postimportación no es correcto o está roto." - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Error importing scene." -msgstr "Error al importar escena." - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import 3D Scene" -msgstr "Importar escena 3D" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source Scene:" -msgstr "Escena de origen:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Same as Target Scene" -msgstr "Igual que escena de destino" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Shared" -msgstr "Compartido" +#: editor/multi_node_edit.cpp +msgid "MultiNode Set" +msgstr "Establecer multinodo" -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Target Texture Folder:" -msgstr "Carpeta de texturas elegida:" +#: editor/node_dock.cpp +msgid "Groups" +msgstr "Grupos" -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Post-Process Script:" -msgstr "Script de posprocesado:" +#: editor/node_dock.cpp +msgid "Select a Node to edit Signals and Groups." +msgstr "Selecciona un nodo para editar señales y grupos." -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Custom Root Node Type:" -msgstr "Tipo de Nodo Raiz Customizado:" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create Poly" +msgstr "Crear polÃgono" -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Auto" -msgstr "Auto" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly" +msgstr "Editar polÃgono" -#: editor/io_plugins/editor_scene_import_plugin.cpp +#: editor/plugins/abstract_polygon_2d_editor.cpp #, fuzzy -msgid "Root Node Name:" -msgstr "Nombre del nodo:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "The Following Files are Missing:" -msgstr "Faltan los siguientes archivos:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Anyway" -msgstr "Importar de todos modos" - -#: editor/io_plugins/editor_scene_import_plugin.cpp scene/gui/dialogs.cpp -msgid "Cancel" -msgstr "Cancelar" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import & Open" -msgstr "Importar y abrir" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Edited scene has not been saved, open imported scene anyway?" -msgstr "" -"La escena editada no se ha guardado, ¿Quieres abrir la escena importada de " -"todos modos?" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Image:" -msgstr "Importar imagen:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Can't import a file over itself:" -msgstr "No se puede importar un archivo sobre si mismo:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't localize path: %s (already local)" -msgstr "No se pudo encontrar la ruta: %s (ya es local)" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "3D Scene Animation" -msgstr "Animación de escena 3D" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Uncompressed" -msgstr "Sin comprimir" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossless (PNG)" -msgstr "Compresión sin pérdidas (PNG)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossy (WebP)" -msgstr "Compresión con pérdidas (WebP)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress (VRAM)" -msgstr "Comprimir (VRAM)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Format" -msgstr "Formato de textura" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Compression Quality (WebP):" -msgstr "Calidad de compresión de textura (WebP):" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Options" -msgstr "Opciones de textura" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Please specify some files!" -msgstr "¡Selecciona algunos archivos!" - -#: 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." - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Error importing:" -msgstr "Hubo un error al importar:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Only one file is required for large texture." -msgstr "Solo se requiere un archivo para textura grande." - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Max Texture Size:" -msgstr "Tamaño máximo de textura:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for Atlas (2D)" -msgstr "Importar texturas para atlas (2D)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cell Size:" -msgstr "Tamaño de celda:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Large Texture" -msgstr "Textura grande" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Textures (2D)" -msgstr "Importar texturas grandes (2D)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture" -msgstr "Textura de origen" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Base Atlas Texture" -msgstr "Textura base de atlas" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s)" -msgstr "Texturas de origen" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 2D" -msgstr "Importar texturas para 2D" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 3D" -msgstr "Importar texturas para 3D" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures" -msgstr "Importar texturas" +msgid "Insert Point" +msgstr "Insertando" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "2D Texture" -msgstr "Textura 2D" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly (Remove Point)" +msgstr "Editar polÃgono (quitar punto)" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "3D Texture" -msgstr "Textura 3D" +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Remove Poly And Point" +msgstr "Quitar polÃgono y punto" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Atlas Texture" -msgstr "Textura de atlas" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create a new polygon from scratch." +msgstr "Crea un nuevo polÃgono desde cero." -#: editor/io_plugins/editor_texture_import_plugin.cpp +#: editor/plugins/abstract_polygon_2d_editor.cpp msgid "" -"NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files to " -"the project." +"Edit existing polygon:\n" +"LMB: Move Point.\n" +"Ctrl+LMB: Split Segment.\n" +"RMB: Erase Point." msgstr "" -"AVISO: No es necesario importar texturas 2D. LimÃtate a copia los archivos " -"png/jpg al proyecto." - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Crop empty space." -msgstr "Recortar espacio vacÃo." - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture" -msgstr "Textura" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Texture" -msgstr "Importar textura grande" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Load Source Image" -msgstr "Cargar imagen de origen" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Slicing" -msgstr "Troceando" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Inserting" -msgstr "Insertando" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Saving" -msgstr "Guardando" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save large texture:" -msgstr "No se pudo guardar la textura grande:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Build Atlas For:" -msgstr "Construir atlas para:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Loading Image:" -msgstr "Cargando imagen:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't load image:" -msgstr "No se pudo cargar la imagen:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Converting Images" -msgstr "Convirtiendo imágenes" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cropping Images" -msgstr "Recortando imágenes" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Blitting Images" -msgstr "Copiando datos de imágenes" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save atlas image:" -msgstr "No se pudo guardar la imagen de atlas:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save converted texture:" -msgstr "No se pudo guardar la textura convertida:" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid source!" -msgstr "¡Origen incorrecto!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid translation source!" -msgstr "¡Origen de traducción incorrecto!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Column" -msgstr "Columna" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/script_create_dialog.cpp -msgid "Language" -msgstr "Idioma" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No items to import!" -msgstr "Sin elementos para importar!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No target path!" -msgstr "¡El objetivo no tiene ruta!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translations" -msgstr "Importar traducciones" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Couldn't import!" -msgstr "¡No se pudo importar!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translation" -msgstr "Importar traducción" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Source CSV:" -msgstr "CSV de origen:" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Ignore First Row" -msgstr "Ignorar Primera Columna" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Compress" -msgstr "Comprimir" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -#, fuzzy -msgid "Add to Project (project.godot)" -msgstr "Añadir al proyecto (engine.cfg)" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Languages:" -msgstr "Importar idiomas:" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Translation" -msgstr "Traducción" - -#: editor/multi_node_edit.cpp -msgid "MultiNode Set" -msgstr "Establecer multinodo" - -#: editor/node_dock.cpp -msgid "Groups" -msgstr "Grupos" - -#: editor/node_dock.cpp -msgid "Select a Node to edit Signals and Groups." -msgstr "Selecciona un nodo para editar señales y grupos." +"Editar polÃgono existente:\n" +"Click izquierdo: Mover punto.\n" +"Control + Click izquierdo: Dividir segmento.\n" +"Click derecho: Borrar punto." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Toggle Autoplay" @@ -3558,7 +3008,6 @@ msgstr "Nombre de Animación:" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp #: editor/script_create_dialog.cpp msgid "Error!" @@ -3669,10 +3118,6 @@ msgid "Delete Input" msgstr "Eliminar entrada" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Rename" -msgstr "Renombrar" - -#: editor/plugins/animation_tree_editor_plugin.cpp msgid "Animation tree is valid." msgstr "El árbol de animación es correcto." @@ -3718,7 +3163,7 @@ msgstr "Nodo de transición" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Import Animations.." -msgstr "Importar animaciones…" +msgstr "Importar animaciones.." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Edit Node Filters" @@ -3726,68 +3171,191 @@ msgstr "Editar filtros de nodo" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Filters.." -msgstr "Filtros…" +msgstr "Filtros.." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Free" +msgstr "Libre" -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing %d Triangles:" -msgstr "Leyendo %d triángulos:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Contents:" +msgstr "Contenido:" -#: editor/plugins/baked_light_baker.cpp -msgid "Triangle #" -msgstr "Nº de triángulos" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "View Files" +msgstr "Ver Archivos" -#: editor/plugins/baked_light_baker.cpp -msgid "Light Baker Setup:" -msgstr "Configuración de Baker de Luces:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve hostname:" +msgstr "No se ha podido resolver el nombre de Dominio:" -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing Geometry" -msgstr "Leyendo geometrÃa" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve." +msgstr "No se ha podido resolver." -#: editor/plugins/baked_light_baker.cpp -msgid "Fixing Lights" -msgstr "Procesando luces" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connection error, please try again." +msgstr "Error de conexion, por favor intente otra vez." -#: editor/plugins/baked_light_baker.cpp -msgid "Making BVH" -msgstr "Creando BVH" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't connect." +msgstr "No se puede conectar." -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Light Octree" -msgstr "Creando octree de luces" +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Can't connect to host:" +msgstr "No se puede conectar al host:" -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Octree Texture" -msgstr "Creando octree de texturas" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response from host:" +msgstr "No hay respuesta desde el host:" -#: editor/plugins/baked_light_baker.cpp -msgid "Transfer to Lightmaps:" -msgstr "Transfiriendo a «lightmaps»:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response." +msgstr "No responde." -#: editor/plugins/baked_light_baker.cpp -msgid "Allocating Texture #" -msgstr "Asignando nº de textura" +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Request failed, return code:" +msgstr "Petición falida, código de retorno:" -#: editor/plugins/baked_light_baker.cpp -msgid "Baking Triangle #" -msgstr "Quemando nº de triángulo" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Req. Failed." +msgstr "Solicitud fallida." -#: editor/plugins/baked_light_baker.cpp -msgid "Post-Processing Texture #" -msgstr "Posprocesando nº de textura" +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Request failed, too many redirects" +msgstr "Petición fallida, demasiadas redirecciones" -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Bake!" -msgstr "¡Quemar!" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Redirect Loop." +msgstr "Bucle de redireccionamiento." -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Reset the lightmap octree baking process (start over)." -msgstr "" -"Restablece el proceso de «bake» del «octree» del «lightmap» (empezar de " -"nuevo)." +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed:" +msgstr "Fallido:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Bad download hash, assuming file has been tampered with." +msgstr "Error de descarga, al pareser el archivo ha sido manipulado." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Expected:" +msgstr "Esperado:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Got:" +msgstr "Tiene:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed sha256 hash check" +msgstr "Fallo en la comprobación del hash sha256" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Asset Download Error:" +msgstr "Error en la descarga del asset:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Fetching:" +msgstr "Buscando:" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Resolving.." +msgstr "Guardando…" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Connecting.." +msgstr "Conectar.." + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Requesting.." +msgstr "Prueba" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Error making request" +msgstr "¡Hubo un error al guardar el recurso!" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Idle" +msgstr "Inactivo" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Retry" +msgstr "Reintente" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Download Error" +msgstr "Abajo" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download for this asset is already in progress!" +msgstr "Este asset ya esta descargandose!" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "first" +msgstr "primero" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "prev" +msgstr "anterior" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "next" +msgstr "siguiente" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "last" +msgstr "ultimo" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "All" +msgstr "Todos" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Plugins" +msgstr "Plugins" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Sort:" +msgstr "Ordenar:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Reverse" +msgstr "Invertir" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Category:" +msgstr "CategorÃa:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Site:" +msgstr "Sitio:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Support.." +msgstr "Soporte.." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Official" +msgstr "Oficial" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Testing" +msgstr "Prueba" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Assets ZIP File" +msgstr "Archivo ZIP de elementos" #: editor/plugins/camera_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp msgid "Preview" msgstr "Vista previa" @@ -3830,12 +3398,18 @@ msgid "Edit CanvasItem" msgstr "Editar CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Change Anchors" +#, fuzzy +msgid "Anchors only" +msgstr "Ancla" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Change Anchors and Margins" msgstr "Cambiar anclas" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom (%):" -msgstr "Zoom (%):" +msgid "Change Anchors" +msgstr "Cambiar anclas" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Paste Pose" @@ -3889,60 +3463,78 @@ msgid "Pan Mode" msgstr "Modo desplazamiento lateral" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Lock the selected object in place (can't be moved)." -msgstr "Inmovilizar el objeto." +#, fuzzy +msgid "Toggles snapping" +msgstr "Des/activar «breakpoint»" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Unlock the selected object (can be moved)." -msgstr "Liberar el objeto." +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "Fijar a cuadrÃcula" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Makes sure the object's children are not selectable." -msgstr "Asegurarse que los hijos de un objeto no sean seleccionables." +#, fuzzy +msgid "Snapping options" +msgstr "Opciones de Animación" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Restores the object's children's ability to be selected." -msgstr "Restaurar la habilidad de seleccionar los hijos de un objeto." +#, fuzzy +msgid "Snap to grid" +msgstr "Modo de fijado:" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp -#: editor/project_settings_editor.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Edit" -msgstr "Editar" +msgid "Use Rotation Snap" +msgstr "Fijar rotación" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" -msgstr "Fijar a cuadrÃcula" +#, fuzzy +msgid "Configure Snap..." +msgstr "Configurar fijado.." #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" -msgstr "Mostrar rejilla" +msgid "Snap Relative" +msgstr "Fijado relativo" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Rotation Snap" -msgstr "Fijar rotación" +msgid "Use Pixel Snap" +msgstr "Adherir a pÃxeles" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap Relative" -msgstr "Fijado relativo" +msgid "Smart snapping" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "Configurar fijado…" +#, fuzzy +msgid "Snap to parent" +msgstr "Expandir al padre" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Pixel Snap" -msgstr "Adherir a pÃxeles" +msgid "Snap to node anchor" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Skeleton.." -msgstr "Esqueleto…" +msgid "Snap to node sides" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to other nodes" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Lock the selected object in place (can't be moved)." +msgstr "Inmovilizar el objeto." + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Unlock the selected object (can be moved)." +msgstr "Liberar el objeto." + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Makes sure the object's children are not selectable." +msgstr "Asegurarse que los hijos de un objeto no sean seleccionables." + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Restores the object's children's ability to be selected." +msgstr "Restaurar la habilidad de seleccionar los hijos de un objeto." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Make Bones" @@ -3971,12 +3563,19 @@ msgid "View" msgstr "Ver" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Reset" -msgstr "Restablecer zoom" +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "Mostrar rejilla" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Set.." -msgstr "Ajustar zoom…" +#, fuzzy +msgid "Show helpers" +msgstr "Crear huesos" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show rulers" +msgstr "Crear huesos" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -3987,8 +3586,9 @@ msgid "Frame Selection" msgstr "Encuadrar selección" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Anchor" -msgstr "Ancla" +#, fuzzy +msgid "Layout" +msgstr "Guardar ajustes" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Keys" @@ -4011,12 +3611,21 @@ msgid "Clear Pose" msgstr "Restablecer pose" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Set a Value" -msgstr "Establecer valor" +msgid "Drag pivot from mouse position" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap (Pixels):" -msgstr "Fijar (Pixeles):" +#, fuzzy +msgid "Set pivot at mouse position" +msgstr "Establecer pos. de salida de curva" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Multiply grid step by 2" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Divide grid step by 2" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy @@ -4028,23 +3637,28 @@ msgstr "Añadir todos" msgid "Adding %s..." msgstr "Añadiendo %s..." -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Create Node" msgstr "Crear nodo" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Error instancing scene from %s" msgstr "Error al instanciar escena desde %s" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "OK :(" msgstr "Muy bien :(" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "No parent to instance a child at." msgstr "No hay padre al que instanciarle un hijo." -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "This operation requires a single selected node." msgstr "Esta operación requiere un solo nodo seleccionado." @@ -4062,45 +3676,6 @@ msgstr "" "Arrastrar y soltar + Mayús: Añadir nodo como hermano\n" "Arrastrar y soltar + Alt: Cambiar tipo de nodo" -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Create Poly" -msgstr "Crear polÃgono" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly" -msgstr "Editar polÃgono" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly (Remove Point)" -msgstr "Editar polÃgono (quitar punto)" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Create a new polygon from scratch." -msgstr "Crea un nuevo polÃgono desde cero." - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -msgid "" -"Edit existing polygon:\n" -"LMB: Move Point.\n" -"Ctrl+LMB: Split Segment.\n" -"RMB: Erase Point." -msgstr "" - #: editor/plugins/collision_polygon_editor_plugin.cpp msgid "Create Poly3D" msgstr "Crear Poly3D" @@ -4110,14 +3685,6 @@ msgid "Set Handle" msgstr "Establecer handle" #: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Creating Mesh Library" -msgstr "Crear biblioteca de modelos 3D" - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Thumbnail.." -msgstr "Miniatura…" - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Remove item %d?" msgstr "¿Quieres borrar el elemento %d?" @@ -4140,6 +3707,28 @@ msgid "Update from Scene" msgstr "Actualizar desde escena" #: editor/plugins/curve_editor_plugin.cpp +msgid "Flat0" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Flat1" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +#, fuzzy +msgid "Ease in" +msgstr "Transición entrada" + +#: editor/plugins/curve_editor_plugin.cpp +#, fuzzy +msgid "Ease out" +msgstr "Transición salida" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Smoothstep" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp #, fuzzy msgid "Modify Curve Point" msgstr "Modificar Mapa de Curvas" @@ -4185,12 +3774,13 @@ msgid "Remove Curve Point" msgstr "Quitar Punto de ruta" #: editor/plugins/curve_editor_plugin.cpp +#, fuzzy msgid "Toggle Curve Linear Tangent" -msgstr "" +msgstr "Cambiar tangente de curva lineal" #: editor/plugins/curve_editor_plugin.cpp msgid "Hold Shift to edit tangents individually" -msgstr "" +msgstr "Mantén Mayus para editar las tangentes individualmente" #: editor/plugins/gradient_editor_plugin.cpp #, fuzzy @@ -4219,28 +3809,26 @@ msgid "" "No OccluderPolygon2D resource on this node.\n" "Create and assign one?" msgstr "" +"No se ha encontrado el recurso OccluderPolygon2D en este nodo.\n" +"¿Crear uno y asignarlo?" #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "Create Occluder Polygon" msgstr "Crear polÃgono oclusor" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Edit existing polygon:" msgstr "Editar polÃgono existente:" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "LMB: Move Point." msgstr "Clic izquierdo: Mover punto." #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Ctrl+LMB: Split Segment." msgstr "Ctrl + LMB: Partir segmento." #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "RMB: Erase Point." msgstr "Clic derecho: Borrar punto." @@ -4346,6 +3934,10 @@ msgid "Create Outline" msgstr "Crear contorno" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh" +msgstr "Modelos 3D" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Body" msgstr "Crear colisión estática triangular" @@ -4363,7 +3955,7 @@ msgstr "Crear colisión hermanada convexa" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh.." -msgstr "Crear modelo 3D de contorno…" +msgstr "Crear modelo 3D de contorno.." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh" @@ -4477,14 +4069,83 @@ msgstr "Escala al azar:" msgid "Populate" msgstr "Rellenar" +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Bake!" +msgstr "¡Quemar!" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +#, fuzzy +msgid "Bake the navigation mesh.\n" +msgstr "Crear modelo de navegación 3D" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +#, fuzzy +msgid "Clear the navigation mesh." +msgstr "Crear modelo de navegación 3D" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Setting up Configuration..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Calculating grid size..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Creating heightfield..." +msgstr "Creando octree de luces" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Marking walkable triangles..." +msgstr "Cadenas traducibles…" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Constructing compact heightfield..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Eroding walkable area..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Partioning..." +msgstr "Advertencia" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Creating contours..." +msgstr "Creando octree de texturas" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Creating polymesh..." +msgstr "Crear modelo 3D de contorno.." + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Converting to native navigation mesh..." +msgstr "Crear modelo de navegación 3D" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Navigation Mesh Generator Setup:" +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Parsing Geometry..." +msgstr "Leyendo geometrÃa" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Done!" +msgstr "" + #: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Create Navigation Polygon" msgstr "Crear polÃgono de navegación" -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Remove Poly And Point" -msgstr "Quitar polÃgono y punto" - #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Clear Emission Mask" msgstr "Borrar máscara de emisión" @@ -4496,17 +4157,20 @@ msgid "Generating AABB" msgstr "Generar AABB" #: editor/plugins/particles_2d_editor_plugin.cpp +#, fuzzy msgid "Can only set point into a ParticlesMaterial process material" msgstr "" +"Solo se puede asignar el punto a un material procesado del tipo " +"ParticlesMaterial." #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Error loading image:" msgstr "Error al cargar la imagen:" #: editor/plugins/particles_2d_editor_plugin.cpp +#, fuzzy msgid "No pixels with transparency > 128 in image.." -msgstr "" -"No hay pÃxeles que tengan menos de un 128/255 de transparencia en la imagen…" +msgstr "No hay pÃxeles con una transparencia mayor que 128 en la imagen.." #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Set Emission Mask" @@ -4514,7 +4178,7 @@ msgstr "Establecer máscara de emisión" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generate Visibility Rect" -msgstr "" +msgstr "Generar rectángulo de visibilidad" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Load Emission Mask" @@ -4561,7 +4225,7 @@ msgstr "El nodo no contiene geometrÃa (caras)." #: editor/plugins/particles_editor_plugin.cpp msgid "A processor material of type 'ParticlesMaterial' is required." -msgstr "" +msgstr "Se requiere un material procesador del tipo 'ParticlesMaterial'." #: editor/plugins/particles_editor_plugin.cpp msgid "Faces contain no area!" @@ -4604,8 +4268,9 @@ msgid "Surface Points" msgstr "Superficie %d" #: editor/plugins/particles_editor_plugin.cpp +#, fuzzy msgid "Surface Points+Normal (Directed)" -msgstr "" +msgstr "Puntos de superficio + Normal (Dirigida)" #: editor/plugins/particles_editor_plugin.cpp msgid "Volume" @@ -4672,15 +4337,18 @@ msgid "Curve Point #" msgstr "Nº de punto en curva" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Point Pos" +#, fuzzy +msgid "Set Curve Point Position" msgstr "Establecer pos. de punto de curva" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve In Pos" +#, fuzzy +msgid "Set Curve In Position" msgstr "Establecer pos. de entrada de curva" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Out Pos" +#, fuzzy +msgid "Set Curve Out Position" msgstr "Establecer pos. de salida de curva" #: editor/plugins/path_editor_plugin.cpp @@ -4742,6 +4410,14 @@ msgid "Scale Polygon" msgstr "Escalar polÃgono" #: editor/plugins/polygon_2d_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit" +msgstr "Editar" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon->UV" msgstr "PolÃgono->UV" @@ -4796,63 +4472,10 @@ msgstr "Cargar recurso" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "Pegar" -#: editor/plugins/rich_text_editor_plugin.cpp -msgid "Parse BBCode" -msgstr "Leer BBCode" - -#: editor/plugins/sample_editor_plugin.cpp -msgid "Length:" -msgstr "Duración:" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Open Sample File(s)" -msgstr "Abrir archivos de sonido" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "ERROR: Couldn't load sample!" -msgstr "¡ERROR: No se pudo cargar el archivo de sonido!" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Add Sample" -msgstr "Añadir archivo de sonido" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Rename Sample" -msgstr "Renombrar archivo de sonido" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Delete Sample" -msgstr "Eliminar archivo de sonido" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "16 Bits" -msgstr "16 bits" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "8 Bits" -msgstr "8 bits" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Stereo" -msgstr "Estéreo" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Mono" -msgstr "Mono" - -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/script_editor_debugger.cpp -msgid "Format" -msgstr "Formato" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Pitch" -msgstr "Altura" - #: editor/plugins/script_editor_plugin.cpp #, fuzzy msgid "Clear Recent Files" @@ -4863,6 +4486,8 @@ msgid "" "Close and save changes?\n" "\"" msgstr "" +"¿Cerrar y guardar cambios?\n" +"\"" #: editor/plugins/script_editor_plugin.cpp msgid "Error while saving theme" @@ -4886,11 +4511,11 @@ msgstr "Importar tema" #: editor/plugins/script_editor_plugin.cpp msgid "Save Theme As.." -msgstr "Guardar tema como…" +msgstr "Guardar tema como.." #: editor/plugins/script_editor_plugin.cpp msgid " Class Reference" -msgstr "" +msgstr " Referencia de clase" #: editor/plugins/script_editor_plugin.cpp msgid "Next script" @@ -4945,6 +4570,10 @@ msgstr "Cerrar documentación" msgid "Close All" msgstr "Cerrar" +#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp +msgid "Run" +msgstr "Ejecutar" + #: editor/plugins/script_editor_plugin.cpp #, fuzzy msgid "Toggle Scripts Panel" @@ -4954,7 +4583,7 @@ msgstr "Añadir/quitar favorito" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp msgid "Find.." -msgstr "Buscar…" +msgstr "Buscar.." #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -4988,18 +4617,6 @@ msgid "Debug with external editor" msgstr "Abrir en el editor" #: editor/plugins/script_editor_plugin.cpp -msgid "Window" -msgstr "Ventana" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Left" -msgstr "Mover a la izquierda" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Right" -msgstr "Mover a la derecha" - -#: editor/plugins/script_editor_plugin.cpp #, fuzzy msgid "Open Godot online documentation" msgstr "Buscar en la documentación de referencia." @@ -5057,8 +4674,9 @@ msgstr "" "pertenecen está cargada" #: editor/plugins/script_text_editor.cpp +#, fuzzy msgid "Only resources from filesystem can be dropped." -msgstr "" +msgstr "Solo se pueden soltar recursos del sistema." #: editor/plugins/script_text_editor.cpp #, fuzzy @@ -5072,15 +4690,15 @@ msgstr "Convirtiendo imágenes" #: editor/plugins/script_text_editor.cpp msgid "Uppercase" -msgstr "" +msgstr "Mayúscula" #: editor/plugins/script_text_editor.cpp msgid "Lowercase" -msgstr "" +msgstr "Minúscula" #: editor/plugins/script_text_editor.cpp msgid "Capitalize" -msgstr "" +msgstr "Insertar mayúsculas" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp @@ -5090,7 +4708,7 @@ msgstr "Cortar" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Copy" msgstr "Copiar" @@ -5139,11 +4757,12 @@ msgstr "Borrar espacios sobrantes al final" #: editor/plugins/script_text_editor.cpp msgid "Convert Indent To Spaces" -msgstr "" +msgstr "Convertir Indentación a Espacios" #: editor/plugins/script_text_editor.cpp +#, fuzzy msgid "Convert Indent To Tabs" -msgstr "" +msgstr "Convertir Indentación a Tabuladores" #: editor/plugins/script_text_editor.cpp msgid "Auto Indent" @@ -5184,16 +4803,16 @@ msgstr "Buscar anterior" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp msgid "Replace.." -msgstr "Reemplazar…" +msgstr "Reemplazar.." #: editor/plugins/script_text_editor.cpp msgid "Goto Function.." -msgstr "Ir a función…" +msgstr "Ir a función.." #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp msgid "Goto Line.." -msgstr "Ir a lÃnea…" +msgstr "Ir a lÃnea.." #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" @@ -5201,7 +4820,7 @@ msgstr "Ayuda contextual" #: editor/plugins/shader_editor_plugin.cpp msgid "Shader" -msgstr "" +msgstr "Shader" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Scalar Constant" @@ -5358,10 +4977,6 @@ msgid "View Plane Transform." msgstr "Ver transformación en plano." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Scaling to %s%%." -msgstr "Escalando al %s%%." - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." msgstr "Girando %s grados." @@ -5378,10 +4993,6 @@ msgid "Top View." msgstr "Vista superior." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Top" -msgstr "Cima" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "Vista anterior." @@ -5422,8 +5033,9 @@ msgid "Animation Key Inserted." msgstr "Clave de animación insertada." #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy msgid "Objects Drawn" -msgstr "" +msgstr "Objetos dibujados" #: editor/plugins/spatial_editor_plugin.cpp #, fuzzy @@ -5441,8 +5053,9 @@ msgid "Surface Changes" msgstr "Actualizar cambios" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy msgid "Draw Calls" -msgstr "" +msgstr "Llamadas de dibujado" #: editor/plugins/spatial_editor_plugin.cpp #, fuzzy @@ -5482,7 +5095,7 @@ msgstr "Gizmos" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Information" -msgstr "" +msgstr "Ver información" #: editor/plugins/spatial_editor_plugin.cpp msgid "Audio Listener" @@ -5494,12 +5107,14 @@ msgid "Doppler Enable" msgstr "Activar" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy msgid "Freelook Left" -msgstr "" +msgstr "Vista libre izquierda" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy msgid "Freelook Right" -msgstr "" +msgstr "Vista libre derecha" #: editor/plugins/spatial_editor_plugin.cpp #, fuzzy @@ -5512,8 +5127,9 @@ msgid "Freelook Backwards" msgstr "Hacia atrás" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy msgid "Freelook Up" -msgstr "" +msgstr "Vista libre superior" #: editor/plugins/spatial_editor_plugin.cpp #, fuzzy @@ -5521,8 +5137,9 @@ msgid "Freelook Down" msgstr "Rueda hacia abajo." #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy msgid "Freelook Speed Modifier" -msgstr "" +msgstr "Modificador de velocidad de la vista libre" #: editor/plugins/spatial_editor_plugin.cpp #, fuzzy @@ -5628,12 +5245,16 @@ msgid "Transform" msgstr "Transformar" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Configure Snap.." +msgstr "Configurar fijado.." + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Local Coords" msgstr "Coordenadas locales" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Dialog.." -msgstr "Ventana de transformación…" +msgstr "Ventana de transformación.." #: editor/plugins/spatial_editor_plugin.cpp msgid "1 Viewport" @@ -5773,6 +5394,10 @@ msgid "Speed (FPS):" msgstr "Velocidad (FPS):" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Loop" +msgstr "Repetir" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animation Frames" msgstr "Cuadros de animación" @@ -5785,12 +5410,14 @@ msgid "Insert Empty (After)" msgstr "Insertar vacÃo (después)" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Up" -msgstr "Arriba" +#, fuzzy +msgid "Move (Before)" +msgstr "Borrar nodos" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Down" -msgstr "Abajo" +#, fuzzy +msgid "Move (After)" +msgstr "Mover a la izquierda" #: editor/plugins/style_box_editor_plugin.cpp msgid "StyleBox Preview:" @@ -5955,6 +5582,10 @@ msgid "Style" msgstr "Estilo" #: editor/plugins/theme_editor_plugin.cpp +msgid "Font" +msgstr "TipografÃa" + +#: editor/plugins/theme_editor_plugin.cpp msgid "Color" msgstr "Color" @@ -5973,8 +5604,9 @@ msgid "Line Draw" msgstr "Lineal" #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy msgid "Rectangle Paint" -msgstr "" +msgstr "Rectángulo de pintura" #: editor/plugins/tile_map_editor_plugin.cpp #, fuzzy @@ -6006,8 +5638,9 @@ msgid "Mirror Y" msgstr "Voltear verticalmente" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Bucket" -msgstr "Cubo" +#, fuzzy +msgid "Paint Tile" +msgstr "Pintar TileMap" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Pick Tile" @@ -6074,12 +5707,17 @@ msgstr "¿Quieres eliminar los archivos seleccionados?" #: editor/project_export.cpp #, fuzzy +msgid "Export templates for this platform are missing/corrupted: " +msgstr "Faltan las siguientes plantillas de exportación para esta plataforma:" + +#: editor/project_export.cpp +#, fuzzy msgid "Presets" msgstr "Ajuste…" #: editor/project_export.cpp editor/project_settings_editor.cpp msgid "Add.." -msgstr "Añadir…" +msgstr "Añadir.." #: editor/project_export.cpp msgid "Resources" @@ -6141,8 +5779,9 @@ msgid "Features" msgstr "Textura" #: editor/project_export.cpp +#, fuzzy msgid "Custom (comma-separated):" -msgstr "" +msgstr "Personalizado (separado por comas):" #: editor/project_export.cpp #, fuzzy @@ -6154,8 +5793,14 @@ msgid "Export PCK/Zip" msgstr "Exportar PCK/Zip" #: editor/project_export.cpp +#, fuzzy msgid "Export templates for this platform are missing:" -msgstr "" +msgstr "Faltan las siguientes plantillas de exportación para esta plataforma:" + +#: editor/project_export.cpp +#, fuzzy +msgid "Export templates for this platform are missing/corrupted:" +msgstr "Faltan las siguientes plantillas de exportación para esta plataforma:" #: editor/project_export.cpp #, fuzzy @@ -6163,29 +5808,53 @@ msgid "Export With Debug" msgstr "Exportar Tile Set" #: editor/project_manager.cpp -msgid "Invalid project path, the path must exist!" -msgstr "¡La ruta del proyecto no es correcta, tiene que existir!" +#, fuzzy +msgid "The path does not exists." +msgstr "El archivo existe." #: editor/project_manager.cpp #, fuzzy -msgid "Invalid project path, project.godot must not exist." -msgstr "La ruta del proyecto no es correcta, engine.cfg no debe existir." +msgid "Please choose a 'project.godot' file." +msgstr "¡Prueba exportando fuera de la carpeta del proyecto!" #: editor/project_manager.cpp -#, fuzzy -msgid "Invalid project path, project.godot must exist." -msgstr "¡La ruta del proyecto no es correcta, engine.cfg debe existir." +msgid "" +"Your project will be created in a non empty folder (you might want to create " +"a new folder)." +msgstr "" + +#: editor/project_manager.cpp +msgid "Please choose a folder that does not contain a 'project.godot' file." +msgstr "" #: editor/project_manager.cpp msgid "Imported Project" msgstr "Proyecto importado" #: editor/project_manager.cpp +msgid " " +msgstr "" + +#: editor/project_manager.cpp +msgid "It would be a good idea to name your project." +msgstr "" + +#: editor/project_manager.cpp msgid "Invalid project path (changed anything?)." msgstr "La ruta del proyecto no es correcta (¿has cambiado algo?)." #: editor/project_manager.cpp #, fuzzy +msgid "Couldn't get project.godot in project path." +msgstr "No se pudo crear engine.cfg en la ruta de proyecto." + +#: editor/project_manager.cpp +#, fuzzy +msgid "Couldn't edit project.godot in project path." +msgstr "No se pudo crear engine.cfg en la ruta de proyecto." + +#: editor/project_manager.cpp +#, fuzzy msgid "Couldn't create project.godot in project path." msgstr "No se pudo crear engine.cfg en la ruta de proyecto." @@ -6194,38 +5863,49 @@ msgid "The following files failed extraction from package:" msgstr "Los siguientes archivos no se pudieron extraer del paquete:" #: editor/project_manager.cpp +#, fuzzy +msgid "Rename Project" +msgstr "Proyecto sin nombre" + +#: editor/project_manager.cpp +#, fuzzy +msgid "Couldn't get project.godot in the project path." +msgstr "No se pudo crear engine.cfg en la ruta de proyecto." + +#: editor/project_manager.cpp +msgid "New Game Project" +msgstr "Nuevo proyecto de juego" + +#: editor/project_manager.cpp msgid "Import Existing Project" msgstr "Importar proyecto existente" #: editor/project_manager.cpp -msgid "Project Path (Must Exist):" -msgstr "Ruta del proyecto (debe existir):" +msgid "Create New Project" +msgstr "Crear proyecto nuevo" + +#: editor/project_manager.cpp +msgid "Install Project:" +msgstr "Instalar proyecto:" #: editor/project_manager.cpp msgid "Project Name:" msgstr "Nombre del proyecto:" #: editor/project_manager.cpp -msgid "Create New Project" -msgstr "Crear proyecto nuevo" +#, fuzzy +msgid "Create folder" +msgstr "Crear carpeta" #: editor/project_manager.cpp msgid "Project Path:" msgstr "Ruta del proyecto:" #: editor/project_manager.cpp -msgid "Install Project:" -msgstr "Instalar proyecto:" - -#: editor/project_manager.cpp msgid "Browse" msgstr "Examinar" #: editor/project_manager.cpp -msgid "New Game Project" -msgstr "Nuevo proyecto de juego" - -#: editor/project_manager.cpp msgid "That's a BINGO!" msgstr "BINGO!" @@ -6234,6 +5914,11 @@ msgid "Unnamed Project" msgstr "Proyecto sin nombre" #: editor/project_manager.cpp +#, fuzzy +msgid "Can't open project" +msgstr "Conectar.." + +#: editor/project_manager.cpp msgid "Are you sure to open more than one project?" msgstr "¿Seguro que quieres abrir más de un proyecto?" @@ -6249,10 +5934,13 @@ msgstr "" "«aplicación»." #: editor/project_manager.cpp +#, fuzzy msgid "" "Can't run project: Assets need to be imported.\n" "Please edit the project to trigger the initial import." msgstr "" +"No se puede ejecutar el proyecto: Los assets necesitan ser importados.\n" +"Por favor, edita el proyecto para activar el importado inicial." #: editor/project_manager.cpp msgid "Are you sure to run more than one project?" @@ -6277,10 +5965,6 @@ msgid "Project List" msgstr "Lista de proyectos" #: editor/project_manager.cpp -msgid "Run" -msgstr "Ejecutar" - -#: editor/project_manager.cpp msgid "Scan" msgstr "Analizar" @@ -6339,17 +6023,14 @@ msgid "Add Input Action Event" msgstr "Añadir evento de acción de entrada" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Meta+" msgstr "Meta+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Shift+" msgstr "Mayús+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Alt+" msgstr "Alt+" @@ -6359,7 +6040,7 @@ msgstr "Control+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "Press a Key.." -msgstr "Presiona una tecla…" +msgstr "Presiona una tecla.." #: editor/project_settings_editor.cpp msgid "Mouse Button Index:" @@ -6411,7 +6092,7 @@ msgstr "Cambiar" msgid "Joypad Axis Index:" msgstr "Ãndice de ejes del mando:" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Axis" msgstr "Eje" @@ -6433,31 +6114,31 @@ msgstr "Borrar evento de acción de entrada" msgid "Add Event" msgstr "Añadir elemento vacÃo" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Device" msgstr "Dispositivo" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Button" msgstr "Botón" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Left Button." msgstr "Botón izquierdo." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Right Button." msgstr "Botón derecho." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Middle Button." msgstr "Botón central." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Up." msgstr "Rueda hacia arriba." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Down." msgstr "Rueda hacia abajo." @@ -6467,8 +6148,9 @@ msgid "Add Global Property" msgstr "Añadir propiedad «Getter»" #: editor/project_settings_editor.cpp -msgid "Select an setting item first!" -msgstr "" +#, fuzzy +msgid "Select a setting item first!" +msgstr "¡Selecciona un item primero!" #: editor/project_settings_editor.cpp #, fuzzy @@ -6486,6 +6168,16 @@ msgid "Delete Item" msgstr "Eliminar entrada" #: editor/project_settings_editor.cpp +#, fuzzy +msgid "Can't contain '/' or ':'" +msgstr "No se puede conectar al host:" + +#: editor/project_settings_editor.cpp +#, fuzzy +msgid "Already existing" +msgstr "Des/activar persistencia" + +#: editor/project_settings_editor.cpp msgid "Error saving settings." msgstr "Error al guardar los ajustes." @@ -6494,8 +6186,9 @@ msgid "Settings saved OK." msgstr "Los ajustes se han guardado correctamente." #: editor/project_settings_editor.cpp +#, fuzzy msgid "Override for Feature" -msgstr "" +msgstr "Sobreescribir para esta caracterÃstica" #: editor/project_settings_editor.cpp msgid "Add Translation" @@ -6539,8 +6232,9 @@ msgid "Property:" msgstr "Propiedad:" #: editor/project_settings_editor.cpp +#, fuzzy msgid "Override For.." -msgstr "" +msgstr "Sobreescribir para.." #: editor/project_settings_editor.cpp msgid "Input Map" @@ -6617,11 +6311,11 @@ msgstr "Transición salida-entrada" #: editor/property_editor.cpp msgid "File.." -msgstr "Archivo…" +msgstr "Archivo.." #: editor/property_editor.cpp msgid "Dir.." -msgstr "Dir…" +msgstr "Directorio.." #: editor/property_editor.cpp msgid "Assign" @@ -6639,10 +6333,20 @@ msgstr "Script siguiente" #: editor/property_editor.cpp #, fuzzy +msgid "Make Unique" +msgstr "Crear huesos" + +#: editor/property_editor.cpp +#, fuzzy msgid "Show in File System" msgstr "SistDeArchivos" #: editor/property_editor.cpp +#, fuzzy +msgid "Convert To %s" +msgstr "Convertir a.." + +#: editor/property_editor.cpp msgid "Error loading file: Not a resource!" msgstr "Error al cargar el archivo: ¡No es un recurso!" @@ -6683,6 +6387,11 @@ msgstr "Seleccionar puntos" #: editor/property_selector.cpp #, fuzzy +msgid "Select Virtual Method" +msgstr "Modo de selección" + +#: editor/property_selector.cpp +#, fuzzy msgid "Select Method" msgstr "Modo de selección" @@ -6711,26 +6420,6 @@ msgstr "Mantener transformación global" msgid "Reparent" msgstr "Reemparentar" -#: editor/resources_dock.cpp -msgid "Create New Resource" -msgstr "Crear recurso nuevo" - -#: editor/resources_dock.cpp -msgid "Open Resource" -msgstr "Abrir recurso" - -#: editor/resources_dock.cpp -msgid "Save Resource" -msgstr "Guardar recurso" - -#: editor/resources_dock.cpp -msgid "Resource Tools" -msgstr "Herramientas de recursos" - -#: editor/resources_dock.cpp -msgid "Make Local" -msgstr "Crear local" - #: editor/run_settings_dialog.cpp msgid "Run Mode:" msgstr "Modo de ejecución:" @@ -6801,8 +6490,9 @@ msgid "Delete Node(s)?" msgstr "¿Quieres borrar los nodos?" #: editor/scene_tree_dock.cpp +#, fuzzy msgid "Can not perform with the root node." -msgstr "" +msgstr "No se puede efectuar con el nodo raÃz." #: editor/scene_tree_dock.cpp msgid "This operation can't be done on instanced scenes." @@ -6810,7 +6500,7 @@ msgstr "Esta operación no puede realizarse en escenas instanciadas." #: editor/scene_tree_dock.cpp msgid "Save New Scene As.." -msgstr "Guardar nueva escena como…" +msgstr "Guardar nueva escena como.." #: editor/scene_tree_dock.cpp msgid "Editable Children" @@ -6862,14 +6552,6 @@ msgid "Sub-Resources:" msgstr "Recursos:" #: editor/scene_tree_dock.cpp -msgid "Edit Groups" -msgstr "Editar grupos" - -#: editor/scene_tree_dock.cpp -msgid "Edit Connections" -msgstr "Editar conexiones" - -#: editor/scene_tree_dock.cpp msgid "Clear Inheritance" msgstr "Limpiar heredado" @@ -6964,26 +6646,35 @@ msgid "Toggle CanvasItem Visible" msgstr "Act/Desact. CanvasItem Visible" #: editor/scene_tree_editor.cpp +#, fuzzy msgid "Node configuration warning:" -msgstr "" +msgstr "Alerta de configuración de Nodos:" #: editor/scene_tree_editor.cpp +#, fuzzy msgid "" "Node has connection(s) and group(s)\n" "Click to show signals dock." msgstr "" +"El nodo tiene conexion(es) y grupo(s)\n" +"Haz click para mostrar el panel de señales." #: editor/scene_tree_editor.cpp +#, fuzzy msgid "" "Node has connections.\n" "Click to show signals dock." msgstr "" +"El nodo tiene conexiones.\n" +"Haz click para mostrar el panel de señales." #: editor/scene_tree_editor.cpp msgid "" "Node is in group(s).\n" "Click to show groups dock." msgstr "" +"El nodo está en el/los grupo(s).\n" +"Click para mostrar el panel de grupos." #: editor/scene_tree_editor.cpp msgid "Instance:" @@ -6999,12 +6690,16 @@ msgid "" "Node is locked.\n" "Click to unlock" msgstr "" +"El nodo está bloqueado.\n" +"Click para desbloquear" #: editor/scene_tree_editor.cpp msgid "" "Children are not selectable.\n" "Click to make selectable" msgstr "" +"Los hijos no son seleccionables.\n" +"Haz click para hacerlos seleccionables" #: editor/scene_tree_editor.cpp #, fuzzy @@ -7026,7 +6721,7 @@ msgstr "Ãrbol de escenas (nodos):" #: editor/scene_tree_editor.cpp msgid "Node Configuration Warning!" -msgstr "" +msgstr "¡Alerta de configuración de nodos!" #: editor/scene_tree_editor.cpp msgid "Select a Node" @@ -7064,12 +6759,22 @@ msgid "Invalid base path" msgstr "Ruta base incorrecta" #: editor/script_create_dialog.cpp +msgid "Directory of the same name exists" +msgstr "" + +#: editor/script_create_dialog.cpp +#, fuzzy +msgid "File exists, will be reused" +msgstr "El archivo ya existe, ¿quieres sobreescribirlo?" + +#: editor/script_create_dialog.cpp msgid "Invalid extension" msgstr "La extensión no es correcta" #: editor/script_create_dialog.cpp +#, fuzzy msgid "Wrong extension chosen" -msgstr "" +msgstr "Extensión seleccionada errónea" #: editor/script_create_dialog.cpp #, fuzzy @@ -7092,11 +6797,12 @@ msgstr "Script" #: editor/script_create_dialog.cpp msgid "Allowed: a-z, A-Z, 0-9 and _" -msgstr "" +msgstr "Permitido: a-z, A-Z, 0-9 y _" #: editor/script_create_dialog.cpp +#, fuzzy msgid "Built-in script (into scene file)" -msgstr "" +msgstr "Script integrado (en el archivo de escena)" #: editor/script_create_dialog.cpp #, fuzzy @@ -7109,6 +6815,10 @@ msgid "Load existing script file" msgstr "Script siguiente" #: editor/script_create_dialog.cpp +msgid "Language" +msgstr "Idioma" + +#: editor/script_create_dialog.cpp #, fuzzy msgid "Inherits" msgstr "Hereda:" @@ -7154,6 +6864,10 @@ msgid "Function:" msgstr "Función:" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Errors" msgstr "Errores" @@ -7234,6 +6948,10 @@ msgid "Type" msgstr "Tipo" #: editor/script_editor_debugger.cpp +msgid "Format" +msgstr "Formato" + +#: editor/script_editor_debugger.cpp msgid "Usage" msgstr "Uso" @@ -7267,7 +6985,7 @@ msgstr "Cambiar Radio de Luces" #: editor/spatial_editor_gizmos.cpp msgid "Change AudioStreamPlayer3D Emission Angle" -msgstr "" +msgstr "Cambiar el ángulo de emisión de AudioStreamPlayer3D" #: editor/spatial_editor_gizmos.cpp msgid "Change Camera FOV" @@ -7303,13 +7021,31 @@ msgstr "Cambiar Alcances de Notificadores" #: editor/spatial_editor_gizmos.cpp msgid "Change Particles AABB" -msgstr "" +msgstr "Cambiar partÃculas AABB" #: editor/spatial_editor_gizmos.cpp #, fuzzy msgid "Change Probe Extents" msgstr "Cambiar Alcances de Notificadores" +#: modules/gdnative/gd_native_library_editor.cpp +#, fuzzy +msgid "Library" +msgstr "MeshLibrary.." + +#: modules/gdnative/gd_native_library_editor.cpp +#, fuzzy +msgid "Status" +msgstr "Estado:" + +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Libraries: " +msgstr "" + +#: modules/gdnative/register_types.cpp +msgid "GDNative" +msgstr "" + #: modules/gdscript/gd_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Invalid type argument to convert(), use TYPE_* constants." @@ -7317,7 +7053,7 @@ msgstr "" "El argumento para convert() no es correcto, prueba utilizando constantes " "TYPE_*." -#: modules/gdscript/gd_functions.cpp +#: modules/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "" @@ -7362,7 +7098,7 @@ msgstr "El diccionario de instancias no es correcto (subclases erróneas)" #: modules/gdscript/gd_functions.cpp msgid "Object can't provide a length." -msgstr "" +msgstr "El objeto no puede proporcionar una longitud." #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy @@ -7375,21 +7111,19 @@ msgid "GridMap Duplicate Selection" msgstr "Duplicar selección" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Paint" -msgstr "" - -#: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy msgid "Snap View" msgstr "Vista superior" #: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy msgid "Prev Level (%sDown Wheel)" -msgstr "" +msgstr "Nivel anterior (" #: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy msgid "Next Level (%sUp Wheel)" -msgstr "" +msgstr "Siguiente nivel (" #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy @@ -7397,24 +7131,26 @@ msgid "Clip Disabled" msgstr "Desactivado" #: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy msgid "Clip Above" -msgstr "" +msgstr "Clip superior" #: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy msgid "Clip Below" -msgstr "" +msgstr "Clip inferior" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Edit X Axis" -msgstr "" +msgstr "Editar eje X" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Edit Y Axis" -msgstr "" +msgstr "Editar eje Y" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Edit Z Axis" -msgstr "" +msgstr "Editar eje Z" #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy @@ -7432,20 +7168,24 @@ msgid "Cursor Rotate Z" msgstr "Ctrl: Rotar" #: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy msgid "Cursor Back Rotate X" -msgstr "" +msgstr "Rotar cursor trasero X" #: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy msgid "Cursor Back Rotate Y" -msgstr "" +msgstr "Rotar cursor trasero Y" #: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy msgid "Cursor Back Rotate Z" -msgstr "" +msgstr "Rotar cursor trasero Z" #: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy msgid "Cursor Clear Rotation" -msgstr "" +msgstr "Quitar rotación del cursor" #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy @@ -7482,13 +7222,8 @@ msgstr "Ajustes de fijado" msgid "Pick Distance:" msgstr "Instancia:" -#: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy -msgid "Tiles" -msgstr "Archivo" - -#: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Areas" +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "Builds" msgstr "" #: modules/visual_script/visual_script.cpp @@ -7705,10 +7440,18 @@ msgid "Return" msgstr "Devuelve" #: modules/visual_script/visual_script_editor.cpp +msgid "Call" +msgstr "Llamada" + +#: modules/visual_script/visual_script_editor.cpp msgid "Get" msgstr "Obtener" #: modules/visual_script/visual_script_editor.cpp +msgid "Script already has function '%s'" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Change Input Value" msgstr "Cambiar Nombre de Entrada" @@ -7867,7 +7610,7 @@ msgstr "Examinar" #: platform/javascript/export/export.cpp msgid "Run exported HTML in the system's default browser." -msgstr "" +msgstr "Ejecutar HTML exportado en el navegador por defecto del sistema." #: platform/javascript/export/export.cpp #, fuzzy @@ -7975,10 +7718,13 @@ msgstr "" "ParallaxBackground." #: scene/2d/particles_2d.cpp scene/3d/particles.cpp +#, fuzzy msgid "" "A material to process the particles is not assigned, so no behavior is " "imprinted." msgstr "" +"No se ha asignado un material para procesar las partÃculas, por lo que no se " +"ha grabado ningún comportamiento." #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." @@ -7986,11 +7732,15 @@ msgstr "" "PathFollow2D solo funciona cuando está seteado como hijo de un nodo Path2D." #: scene/2d/physics_body_2d.cpp +#, fuzzy msgid "" "Size changes to RigidBody2D (in character or rigid modes) will be overriden " "by the physics engine when running.\n" "Change the size in children collision shapes instead." msgstr "" +"Los cambios en el tamaño del RigidBody2D (en el personaje o modos rÃgidos) " +"serán sobreescritas por el engine de fÃsicas cuando se ejecute.\n" +"En vez de eso, cambia el tamaño en las formas de colisión hijas." #: scene/2d/remote_transform_2d.cpp msgid "Path property must point to a valid Node2D node to work." @@ -8022,31 +7772,37 @@ msgstr "" #: scene/3d/arvr_nodes.cpp msgid "ARVRCamera must have an ARVROrigin node as its parent" -msgstr "" +msgstr "ARVRCamera tiene que tener un nodo ARVROrigin como padre" #: scene/3d/arvr_nodes.cpp msgid "ARVRController must have an ARVROrigin node as its parent" -msgstr "" +msgstr "ARVRController tiene que tener un nodo ARVROrigin como padre" #: scene/3d/arvr_nodes.cpp +#, fuzzy msgid "" "The controller id must not be 0 or this controller will not be bound to an " "actual controller" msgstr "" +"El id del controlador no puede ser 0 o este controlador no se asignará a un " +"controlador de verdad." #: scene/3d/arvr_nodes.cpp msgid "ARVRAnchor must have an ARVROrigin node as its parent" -msgstr "" +msgstr "ARVRAnchor tiene que tener un nodo ARVROrigin como padre" #: scene/3d/arvr_nodes.cpp +#, fuzzy msgid "" "The anchor id must not be 0 or this anchor will not be bound to an actual " "anchor" msgstr "" +"El id del ancla no puede ser 0 o este ancla no se asignará a un ancla de " +"verdad" #: scene/3d/arvr_nodes.cpp msgid "ARVROrigin requires an ARVRCamera child node" -msgstr "" +msgstr "ARVROrigin necesita un nodo ARVCamera hijo" #: scene/3d/collision_polygon.cpp msgid "" @@ -8095,16 +7851,23 @@ msgstr "" "que sólo proporciona los datos de navegación." #: scene/3d/particles.cpp +#, fuzzy msgid "" "Nothing is visible because meshes have not been assigned to draw passes." msgstr "" +"Nada es visible porque los modelos 3D no se han asignado a las pasadas de " +"dibujo." #: scene/3d/physics_body.cpp +#, fuzzy msgid "" "Size changes to RigidBody (in character or rigid modes) will be overriden by " "the physics engine when running.\n" "Change the size in children collision shapes instead." msgstr "" +"Los cambios en el tamaño del RigidBody (en el personaje o modos rÃgidos) " +"serán sobreescritas por el engine de fÃsicas cuando se ejecute.\n" +"En vez de eso, cambia el tamaño en las formas de colisión hijas." #: scene/3d/remote_transform.cpp #, fuzzy @@ -8127,6 +7890,12 @@ msgstr "" "Un recurso SpriteFrames debe ser creado o asignado en la propiedad 'Frames' " "para que AnimatedSprite3D pueda mostrar frames." +#: scene/3d/vehicle_body.cpp +msgid "" +"VehicleWheel serves to provide a wheel system to a VehicleBody. Please use " +"it as a child of a VehicleBody." +msgstr "" + #: scene/gui/color_picker.cpp #, fuzzy msgid "Raw Mode" @@ -8134,7 +7903,11 @@ msgstr "Modo desplazamiento lateral" #: scene/gui/color_picker.cpp msgid "Add current color as a preset" -msgstr "" +msgstr "Añadir el color actual como predefinido" + +#: scene/gui/dialogs.cpp +msgid "Cancel" +msgstr "Cancelar" #: scene/gui/dialogs.cpp msgid "Alert!" @@ -8144,10 +7917,6 @@ msgstr "Alerta!" msgid "Please Confirm..." msgstr "Confirmar decisión…" -#: scene/gui/input_action.cpp -msgid "Ctrl+" -msgstr "Ctrl+" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -8159,17 +7928,24 @@ msgstr "" "hacerlos visibles para editar, aunque se esconderán al ejecutar." #: scene/gui/scroll_container.cpp +#, fuzzy msgid "" "ScrollContainer is intended to work with a single child control.\n" "Use a container as child (VBox,HBox,etc), or a Control and set the custom " "minimum size manually." msgstr "" +"ScrollContainer debe funcionar con un único control de hijos.\n" +"Usa un container como hijo (VBox,HBox,etc), o un Control y ajusta el tamaño " +"mÃnimo personalizado manualmente." #: scene/main/scene_tree.cpp +#, fuzzy msgid "" "Default Environment as specified in Project Setings (Rendering -> Viewport -" "> Default Environment) could not be loaded." msgstr "" +"El entorno por defecto especificado en los Ajustes del Proyecto (Renderizado " +"-> Ventana -> Entorno por Defecto) no se ha podido cargar." #: scene/main/viewport.cpp msgid "" @@ -8183,6 +7959,647 @@ msgstr "" "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 +msgid "Error initializing FreeType." +msgstr "Error al arrancar FreeType." + +#: scene/resources/dynamic_font.cpp +msgid "Unknown font format." +msgstr "Formato de tipografÃa desconocido." + +#: scene/resources/dynamic_font.cpp +msgid "Error loading font." +msgstr "Error al cargar la tipografÃa." + +#: scene/resources/dynamic_font.cpp +msgid "Invalid font size." +msgstr "Tamaño de tipografÃa incorrecto." + +#~ msgid "Method List For '%s':" +#~ msgstr "Lista de métodos Para '%s':" + +#~ msgid "Arguments:" +#~ msgstr "Argumentos:" + +#~ msgid "Return:" +#~ msgstr "Devuelve:" + +#~ msgid "Added:" +#~ msgstr "Añadido:" + +#~ msgid "Removed:" +#~ msgstr "Eliminado:" + +#~ msgid "Error saving atlas:" +#~ msgstr "Error al guardar atlas:" + +#~ msgid "Could not save atlas subtexture:" +#~ msgstr "No se pudo guardar la subtextura del altas:" + +#~ msgid "Exporting for %s" +#~ msgstr "Exportando para %s" + +#~ msgid "Setting Up.." +#~ msgstr "Configurando.." + +#~ msgid "Error loading scene." +#~ msgstr "Hubo un error al cargar la escena." + +#~ msgid "Re-Import" +#~ msgstr "Reimportar" + +#~ msgid "Please wait for scan to complete." +#~ msgstr "Espera a que termine el análisis." + +#~ msgid "Current scene must be saved to re-import." +#~ msgstr "La escena actual debe ser guardada para reimportar." + +#~ msgid "Save & Re-Import" +#~ msgstr "Guardar y reimportar" + +#~ msgid "Re-Importing" +#~ msgstr "Reimportando" + +#~ msgid "Re-Import Changed Resources" +#~ msgstr "Reimportar recursos cambiados" + +#~ msgid "Loading Export Templates" +#~ msgstr "Cargando plantillas de exportación" + +#, fuzzy +#~ msgid "" +#~ "\n" +#~ "Status: Needs Re-Import" +#~ msgstr "Guardar y reimportar" + +#~ msgid "Same source and destination files, doing nothing." +#~ msgstr "" +#~ "Los archivos de origen y destino son iguales, no se realizará ninguna " +#~ "acción." + +#~ msgid "Target file exists, can't overwrite. Delete first." +#~ msgstr "" +#~ "El archivo objetivo ya existe, no se puede sobreescribir. Bórralo primero." + +#~ msgid "Same source and destination paths, doing nothing." +#~ msgstr "" +#~ "Las rutas de origen y destino son iguales, no se realizará ninguna acción." + +#~ msgid "Can't move directories to within themselves." +#~ msgstr "No se pueden mover carpetas dentro de si mismas." + +#, fuzzy +#~ msgid "Can't rename deps for:\n" +#~ msgstr "No se pueden renombrar las dependencias para:\n" + +#, fuzzy +#~ msgid "Error moving file:\n" +#~ msgstr "Error al cargar la imagen:" + +#~ msgid "Pick New Name and Location For:" +#~ msgstr "Elige un nombre nuevo y ubicación para:" + +#~ msgid "No files selected!" +#~ msgstr "¡No has seleccionado ningún archivo!" + +#~ msgid "Info" +#~ msgstr "Info" + +#~ msgid "Re-Import.." +#~ msgstr "Reimportar.." + +#~ msgid "No bit masks to import!" +#~ msgstr "¡Sin máscaras de bits para importar!" + +#~ msgid "Target path is empty." +#~ msgstr "La ruta de destino está vacÃa." + +#~ msgid "Target path must be a complete resource path." +#~ msgstr "La ruta de destino debe ser una ruta de recursos completa." + +#~ msgid "Target path must exist." +#~ msgstr "La ruta de destino debe existir." + +#~ msgid "Save path is empty!" +#~ msgstr "La ruta de guardado esta vacÃa!" + +#~ msgid "Import BitMasks" +#~ msgstr "Importar BitMasks" + +#~ msgid "Source Texture(s):" +#~ msgstr "Texturas de origen:" + +#~ msgid "Target Path:" +#~ msgstr "Ruta de destino:" + +#~ msgid "Accept" +#~ msgstr "Aceptar" + +#~ msgid "Bit Mask" +#~ msgstr "Máscara de bits" + +#~ msgid "No source font file!" +#~ msgstr "¡No se ha elegido ningún archivo de tipografÃas!" + +#~ msgid "No target font resource!" +#~ msgstr "¡No se ha elegido ningún recurso de tipografÃas!" + +#, fuzzy +#~ msgid "" +#~ "Invalid file extension.\n" +#~ "Please use .font." +#~ msgstr "" +#~ "La extensión del archivo no es correcta.\n" +#~ "Prueba con la extensión .fnt." + +#~ msgid "Couldn't save font." +#~ msgstr "No se pudo guardar la tipografÃa." + +#~ msgid "Source Font:" +#~ msgstr "TipografÃa elegida:" + +#~ msgid "Source Font Size:" +#~ msgstr "Tamaño de la tipografÃa elegida:" + +#~ msgid "Dest Resource:" +#~ msgstr "Recurso de destino:" + +#~ msgid "The quick brown fox jumps over the lazy dog." +#~ msgstr "El veloz murciélago hindú comÃa feliz cardillo y kiwi." + +#~ msgid "Test:" +#~ msgstr "Prueba:" + +#~ msgid "Options:" +#~ msgstr "Opciones:" + +#~ msgid "Font Import" +#~ msgstr "Importar tipografÃas" + +#~ 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, tienes que " +#~ "utilizar un archivo de tipo BMFont." + +#~ msgid "Failed opening as BMFont file." +#~ msgstr "Error al abrir como archivo BMFont." + +#~ msgid "Invalid font custom source." +#~ msgstr "El origen personalizado de tipografÃa no es correcto." + +#~ msgid "No meshes to import!" +#~ msgstr "¡No hay ningún modelo que se pueda importar!" + +#~ msgid "Single Mesh Import" +#~ msgstr "Importar modelo individual" + +#~ msgid "Source Mesh(es):" +#~ msgstr "Modelo/s elegidos:" + +#~ msgid "Surface %d" +#~ msgstr "Superficie %d" + +#~ msgid "No samples to import!" +#~ msgstr "¡No hay ningún sonido a importar!" + +#~ msgid "Import Audio Samples" +#~ msgstr "Importar archivo de sonido" + +#~ msgid "Source Sample(s):" +#~ msgstr "Muestra(s) de Origen:" + +#~ msgid "Audio Sample" +#~ msgstr "Archivo de sonido" + +#~ msgid "New Clip" +#~ msgstr "Nuevo clip" + +#~ msgid "Flags" +#~ msgstr "Identificadores" + +#~ msgid "Bake FPS:" +#~ msgstr "Hacer Bake de FPS:" + +#~ msgid "Optimizer" +#~ msgstr "Optimizar" + +#~ msgid "Max Linear Error" +#~ msgstr "Error lineal máximo" + +#~ msgid "Max Angular Error" +#~ msgstr "Error angular máximo" + +#~ msgid "Max Angle" +#~ msgstr "Ãngulo máximo" + +#~ msgid "Clips" +#~ msgstr "Clips" + +#~ msgid "Start(s)" +#~ msgstr "Inicios" + +#~ msgid "End(s)" +#~ msgstr "Finales" + +#~ msgid "Filters" +#~ msgstr "Filtros" + +#~ msgid "Source path is empty." +#~ msgstr "La ruta de origen esta vacÃa." + +#~ msgid "Couldn't load post-import script." +#~ msgstr "No se pudo cargar el script post-importación." + +#~ msgid "Invalid/broken script for post-import." +#~ msgstr "El script de postimportación no es correcto o está roto." + +#~ msgid "Error importing scene." +#~ msgstr "Error al importar escena." + +#~ msgid "Import 3D Scene" +#~ msgstr "Importar escena 3D" + +#~ msgid "Source Scene:" +#~ msgstr "Escena de origen:" + +#~ msgid "Same as Target Scene" +#~ msgstr "Igual que escena de destino" + +#~ msgid "Shared" +#~ msgstr "Compartido" + +#~ msgid "Target Texture Folder:" +#~ msgstr "Carpeta de texturas elegida:" + +#~ msgid "Post-Process Script:" +#~ msgstr "Script de posprocesado:" + +#~ msgid "Custom Root Node Type:" +#~ msgstr "Tipo de Nodo Raiz Customizado:" + +#~ msgid "Auto" +#~ msgstr "Auto" + +#, fuzzy +#~ msgid "Root Node Name:" +#~ msgstr "Nombre del nodo:" + +#~ msgid "The Following Files are Missing:" +#~ msgstr "Faltan los siguientes archivos:" + +#~ msgid "Import Anyway" +#~ msgstr "Importar de todos modos" + +#~ msgid "Import & Open" +#~ msgstr "Importar y abrir" + +#~ msgid "Edited scene has not been saved, open imported scene anyway?" +#~ msgstr "" +#~ "La escena editada no se ha guardado, ¿Quieres abrir la escena importada " +#~ "de todos modos?" + +#~ msgid "Import Image:" +#~ msgstr "Importar imagen:" + +#~ msgid "Couldn't localize path: %s (already local)" +#~ msgstr "No se pudo encontrar la ruta: %s (ya es local)" + +#~ msgid "3D Scene Animation" +#~ msgstr "Animación de escena 3D" + +#~ msgid "Uncompressed" +#~ msgstr "Sin comprimir" + +#~ msgid "Compress Lossless (PNG)" +#~ msgstr "Compresión sin pérdidas (PNG)" + +#~ msgid "Compress Lossy (WebP)" +#~ msgstr "Compresión con pérdidas (WebP)" + +#~ msgid "Compress (VRAM)" +#~ msgstr "Comprimir (VRAM)" + +#~ msgid "Texture Format" +#~ msgstr "Formato de textura" + +#~ msgid "Texture Compression Quality (WebP):" +#~ msgstr "Calidad de compresión de textura (WebP):" + +#~ msgid "Texture Options" +#~ msgstr "Opciones de textura" + +#~ msgid "Please specify some files!" +#~ msgstr "¡Selecciona algunos archivos!" + +#~ msgid "At least one file needed for Atlas." +#~ msgstr "Se necesita al menos un archivo para el atlas." + +#~ msgid "Error importing:" +#~ msgstr "Hubo un error al importar:" + +#~ msgid "Only one file is required for large texture." +#~ msgstr "Solo se requiere un archivo para textura grande." + +#~ msgid "Max Texture Size:" +#~ msgstr "Tamaño máximo de textura:" + +#~ msgid "Import Textures for Atlas (2D)" +#~ msgstr "Importar texturas para atlas (2D)" + +#~ msgid "Cell Size:" +#~ msgstr "Tamaño de celda:" + +#~ msgid "Large Texture" +#~ msgstr "Textura grande" + +#~ msgid "Import Large Textures (2D)" +#~ msgstr "Importar texturas grandes (2D)" + +#~ msgid "Source Texture" +#~ msgstr "Textura de origen" + +#~ msgid "Base Atlas Texture" +#~ msgstr "Textura base de atlas" + +#~ msgid "Source Texture(s)" +#~ msgstr "Texturas de origen" + +#~ msgid "Import Textures for 2D" +#~ msgstr "Importar texturas para 2D" + +#~ msgid "Import Textures for 3D" +#~ msgstr "Importar texturas para 3D" + +#~ msgid "Import Textures" +#~ msgstr "Importar texturas" + +#~ msgid "2D Texture" +#~ msgstr "Textura 2D" + +#~ msgid "3D Texture" +#~ msgstr "Textura 3D" + +#~ msgid "Atlas Texture" +#~ msgstr "Textura de atlas" + +#~ msgid "" +#~ "NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files " +#~ "to the project." +#~ msgstr "" +#~ "AVISO: No es necesario importar texturas 2D. LimÃtate a copia los " +#~ "archivos png/jpg al proyecto." + +#~ msgid "Crop empty space." +#~ msgstr "Recortar espacio vacÃo." + +#~ msgid "Texture" +#~ msgstr "Textura" + +#~ msgid "Import Large Texture" +#~ msgstr "Importar textura grande" + +#~ msgid "Load Source Image" +#~ msgstr "Cargar imagen de origen" + +#~ msgid "Slicing" +#~ msgstr "Troceando" + +#~ msgid "Saving" +#~ msgstr "Guardando" + +#~ msgid "Couldn't save large texture:" +#~ msgstr "No se pudo guardar la textura grande:" + +#~ msgid "Build Atlas For:" +#~ msgstr "Construir atlas para:" + +#~ msgid "Loading Image:" +#~ msgstr "Cargando imagen:" + +#~ msgid "Couldn't load image:" +#~ msgstr "No se pudo cargar la imagen:" + +#~ msgid "Converting Images" +#~ msgstr "Convirtiendo imágenes" + +#~ msgid "Cropping Images" +#~ msgstr "Recortando imágenes" + +#~ msgid "Blitting Images" +#~ msgstr "Copiando datos de imágenes" + +#~ msgid "Couldn't save atlas image:" +#~ msgstr "No se pudo guardar la imagen de atlas:" + +#~ msgid "Couldn't save converted texture:" +#~ msgstr "No se pudo guardar la textura convertida:" + +#~ msgid "Invalid source!" +#~ msgstr "¡Origen incorrecto!" + +#~ msgid "Invalid translation source!" +#~ msgstr "¡Origen de traducción incorrecto!" + +#~ msgid "Column" +#~ msgstr "Columna" + +#~ msgid "No items to import!" +#~ msgstr "Sin elementos para importar!" + +#~ msgid "No target path!" +#~ msgstr "¡El objetivo no tiene ruta!" + +#~ msgid "Import Translations" +#~ msgstr "Importar traducciones" + +#~ msgid "Couldn't import!" +#~ msgstr "¡No se pudo importar!" + +#~ msgid "Import Translation" +#~ msgstr "Importar traducción" + +#~ msgid "Source CSV:" +#~ msgstr "CSV de origen:" + +#~ msgid "Ignore First Row" +#~ msgstr "Ignorar Primera Columna" + +#~ msgid "Compress" +#~ msgstr "Comprimir" + +#, fuzzy +#~ msgid "Add to Project (project.godot)" +#~ msgstr "Añadir al proyecto (engine.cfg)" + +#~ msgid "Import Languages:" +#~ msgstr "Importar idiomas:" + +#~ msgid "Translation" +#~ msgstr "Traducción" + +#~ msgid "Parsing %d Triangles:" +#~ msgstr "Leyendo %d triángulos:" + +#~ msgid "Triangle #" +#~ msgstr "Nº de triángulos" + +#~ msgid "Light Baker Setup:" +#~ msgstr "Configuración de Baker de Luces:" + +#~ msgid "Fixing Lights" +#~ msgstr "Procesando luces" + +#~ msgid "Making BVH" +#~ msgstr "Creando BVH" + +#~ msgid "Transfer to Lightmaps:" +#~ msgstr "Transfiriendo a «lightmaps»:" + +#~ msgid "Allocating Texture #" +#~ msgstr "Asignando nº de textura" + +#~ msgid "Baking Triangle #" +#~ msgstr "Quemando nº de triángulo" + +#~ msgid "Post-Processing Texture #" +#~ msgstr "Posprocesando nº de textura" + +#~ msgid "Reset the lightmap octree baking process (start over)." +#~ msgstr "" +#~ "Restablece el proceso de «bake» del «octree» del «lightmap» (empezar de " +#~ "nuevo)." + +#~ msgid "Zoom (%):" +#~ msgstr "Zoom (%):" + +#~ msgid "Skeleton.." +#~ msgstr "Esqueleto.." + +#~ msgid "Zoom Reset" +#~ msgstr "Restablecer zoom" + +#~ msgid "Zoom Set.." +#~ msgstr "Ajustar zoom.." + +#~ msgid "Set a Value" +#~ msgstr "Establecer valor" + +#~ msgid "Snap (Pixels):" +#~ msgstr "Fijar (Pixeles):" + +#~ msgid "Parse BBCode" +#~ msgstr "Leer BBCode" + +#~ msgid "Length:" +#~ msgstr "Duración:" + +#~ msgid "Open Sample File(s)" +#~ msgstr "Abrir archivos de sonido" + +#~ msgid "ERROR: Couldn't load sample!" +#~ msgstr "¡ERROR: No se pudo cargar el archivo de sonido!" + +#~ msgid "Add Sample" +#~ msgstr "Añadir archivo de sonido" + +#~ msgid "Rename Sample" +#~ msgstr "Renombrar archivo de sonido" + +#~ msgid "Delete Sample" +#~ msgstr "Eliminar archivo de sonido" + +#~ msgid "16 Bits" +#~ msgstr "16 bits" + +#~ msgid "8 Bits" +#~ msgstr "8 bits" + +#~ msgid "Stereo" +#~ msgstr "Estéreo" + +#~ msgid "Mono" +#~ msgstr "Mono" + +#~ msgid "Pitch" +#~ msgstr "Altura" + +#~ msgid "Window" +#~ msgstr "Ventana" + +#~ msgid "Move Right" +#~ msgstr "Mover a la derecha" + +#~ msgid "Scaling to %s%%." +#~ msgstr "Escalando al %s%%." + +#~ msgid "Up" +#~ msgstr "Arriba" + +#~ msgid "Down" +#~ msgstr "Abajo" + +#~ msgid "Bucket" +#~ msgstr "Cubo" + +#~ msgid "Invalid project path, the path must exist!" +#~ msgstr "¡La ruta del proyecto no es correcta, tiene que existir!" + +#, fuzzy +#~ msgid "Invalid project path, project.godot must not exist." +#~ msgstr "La ruta del proyecto no es correcta, engine.cfg no debe existir." + +#, fuzzy +#~ msgid "Invalid project path, project.godot must exist." +#~ msgstr "¡La ruta del proyecto no es correcta, engine.cfg debe existir." + +#~ msgid "Project Path (Must Exist):" +#~ msgstr "Ruta del proyecto (debe existir):" + +#~ msgid "Create New Resource" +#~ msgstr "Crear recurso nuevo" + +#~ msgid "Open Resource" +#~ msgstr "Abrir recurso" + +#~ msgid "Save Resource" +#~ msgstr "Guardar recurso" + +#~ msgid "Resource Tools" +#~ msgstr "Herramientas de recursos" + +#~ msgid "Make Local" +#~ msgstr "Crear local" + +#~ msgid "Edit Groups" +#~ msgstr "Editar grupos" + +#~ msgid "Edit Connections" +#~ msgstr "Editar conexiones" + +#, fuzzy +#~ msgid "GridMap Paint" +#~ msgstr "Coloreado de GridMap" + +#, fuzzy +#~ msgid "Tiles" +#~ msgstr "Archivo" + +#~ msgid "Areas" +#~ msgstr "Ãreas" + +#~ msgid "Ctrl+" +#~ msgstr "Ctrl+" + +#, fuzzy +#~ msgid "Down Wheel)" +#~ msgstr "Rueda de ratón hacia abajo)" + +#, fuzzy +#~ msgid "Up Wheel)" +#~ msgstr "Rueda de ratón hacia arriba)" + #~ msgid "Close scene? (Unsaved changes will be lost)" #~ msgstr "¿Quieres cerrar la escena? (Los cambios sin guardar se perderán)" @@ -8196,9 +8613,6 @@ msgstr "" #~ msgid "Close Goto Prev. Scene" #~ msgstr "Cerrar e ir a escena anterior" -#~ msgid "Expand to Parent" -#~ msgstr "Expandir al padre" - #~ msgid "Del" #~ msgstr "Eliminar" @@ -8387,18 +8801,12 @@ msgstr "" #~ msgid "Save Translatable Strings" #~ msgstr "Guardar cadenas traducibles" -#~ msgid "Translatable Strings.." -#~ msgstr "Cadenas traducibles…" - #~ msgid "Install Export Templates" #~ msgstr "Instalar plantillas de exportación" #~ msgid "Edit Script Options" #~ msgstr "Editar opciones de script" -#~ msgid "Please export outside the project folder!" -#~ msgstr "¡Prueba exportando fuera de la carpeta del proyecto!" - #~ msgid "Error exporting project!" #~ msgstr "¡Error al exportar el proyecto!" @@ -8464,18 +8872,12 @@ msgstr "" #~ msgid "Include" #~ msgstr "Incluir" -#~ msgid "Change Image Group" -#~ msgstr "Cambiar grupo de imágenes" - #~ msgid "Group name can't be empty!" #~ msgstr "¡El nombre del grupo no puede estar vacÃo!" #~ msgid "Invalid character in group name!" #~ msgstr "¡El nombre del grupo contiene una letra no permitida!" -#~ msgid "Group name already exists!" -#~ msgstr "¡El nombre de grupo ya existe!" - #~ msgid "Add Image Group" #~ msgstr "Añadir grupo de imágenes" @@ -8623,9 +9025,6 @@ msgstr "" #~ msgid "Lighting" #~ msgstr "Iluminación" -#~ msgid "Toggle Persisting" -#~ msgstr "Des/activar persistencia" - #~ msgid "Global" #~ msgstr "Global" diff --git a/editor/translations/es_AR.po b/editor/translations/es_AR.po index 64d65f70bb..b4f035f991 100644 --- a/editor/translations/es_AR.po +++ b/editor/translations/es_AR.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2017-06-29 19:59+0000\n" +"PO-Revision-Date: 2017-09-01 01:48+0000\n" "Last-Translator: Lisandro Lorea <lisandrolorea@gmail.com>\n" "Language-Team: Spanish (Argentina) <https://hosted.weblate.org/projects/" "godot-engine/godot/es_AR/>\n" @@ -19,7 +19,7 @@ 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.15-dev\n" +"X-Generator: Weblate 2.17-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -195,10 +195,9 @@ msgid "Create %d NEW tracks and insert keys?" msgstr "Crear %d NUEVOS tracks e insertar claves?" #: editor/animation_editor.cpp editor/create_dialog.cpp -#: editor/editor_audio_buses.cpp +#: editor/editor_audio_buses.cpp editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp #: editor/plugins/mesh_instance_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp editor/project_manager.cpp #: editor/script_create_dialog.cpp msgid "Create" @@ -361,261 +360,6 @@ msgstr "Cambiar Tipo de Valor del Array" msgid "Change Array Value" msgstr "Cambiar Valor del Array" -#: editor/asset_library_editor_plugin.cpp -msgid "Free" -msgstr "Libre" - -#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp -msgid "Version:" -msgstr "Version:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Contents:" -msgstr "Contenido:" - -#: editor/asset_library_editor_plugin.cpp -msgid "View Files" -msgstr "Ver Archivos" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_help.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp -msgid "Description:" -msgstr "Descripción:" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -#: editor/project_manager.cpp -msgid "Install" -msgstr "Instalar" - -#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp -#: editor/connections_dialog.cpp editor/export_template_manager.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -#: editor/project_settings_editor.cpp editor/property_editor.cpp -#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Close" -msgstr "Cerrar" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve hostname:" -msgstr "No se ha podido resolver el nombre del host:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve." -msgstr "No se ha podido resolver." - -#: editor/asset_library_editor_plugin.cpp -msgid "Connection error, please try again." -msgstr "Error de conexión, por favor intentá de nuevo." - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't connect." -msgstr "No se puede conectar." - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't connect to host:" -msgstr "No se puede conectar al host:" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response from host:" -msgstr "No hay respuesta desde el host:" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response." -msgstr "Sin respuesta." - -#: editor/asset_library_editor_plugin.cpp -msgid "Request failed, return code:" -msgstr "Solicitud fallida. Código de retorno:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Req. Failed." -msgstr "Solicitud fallida." - -#: editor/asset_library_editor_plugin.cpp -msgid "Request failed, too many redirects" -msgstr "Solicitud fallida, demasiadas redireccinoes" - -#: editor/asset_library_editor_plugin.cpp -msgid "Redirect Loop." -msgstr "Bucle de redireccionamiento." - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed:" -msgstr "Fallido:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Bad download hash, assuming file has been tampered with." -msgstr "Hash de descarga incorrecto, asumiendo que el archivo fue manipulado." - -#: editor/asset_library_editor_plugin.cpp -msgid "Expected:" -msgstr "Esperado:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Got:" -msgstr "Recibido:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed sha256 hash check" -msgstr "Fallo el chequeo del hash sha256" - -#: editor/asset_library_editor_plugin.cpp -msgid "Asset Download Error:" -msgstr "Error de Descarga del Asset:" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -msgid "Success!" -msgstr "Conseguido!" - -#: editor/asset_library_editor_plugin.cpp -msgid "Fetching:" -msgstr "Obteniendo:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Resolving.." -msgstr "Resolviendo.." - -#: editor/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "Conectando.." - -#: editor/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "Solicitando.." - -#: editor/asset_library_editor_plugin.cpp -msgid "Error making request" -msgstr "Error al realizar la solicitud" - -#: editor/asset_library_editor_plugin.cpp -msgid "Idle" -msgstr "Desocupado" - -#: editor/asset_library_editor_plugin.cpp -msgid "Retry" -msgstr "Reintentar" - -#: editor/asset_library_editor_plugin.cpp -msgid "Download Error" -msgstr "Error de Descarga" - -#: editor/asset_library_editor_plugin.cpp -msgid "Download for this asset is already in progress!" -msgstr "La descarga de este asset ya esta en progreso!" - -#: editor/asset_library_editor_plugin.cpp -msgid "first" -msgstr "primero" - -#: editor/asset_library_editor_plugin.cpp -msgid "prev" -msgstr "anterior" - -#: editor/asset_library_editor_plugin.cpp -msgid "next" -msgstr "siguiente" - -#: editor/asset_library_editor_plugin.cpp -msgid "last" -msgstr "último" - -#: editor/asset_library_editor_plugin.cpp -msgid "All" -msgstr "Todos" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/property_selector.cpp editor/quick_open.cpp -#: editor/settings_config_dialog.cpp -msgid "Search:" -msgstr "Buscar:" - -#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Search" -msgstr "Buscar" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/project_manager.cpp -msgid "Import" -msgstr "Importar" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Plugins" -msgstr "Plugins" - -#: editor/asset_library_editor_plugin.cpp -msgid "Sort:" -msgstr "Ordenar:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Reverse" -msgstr "Invertir" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Category:" -msgstr "CategorÃa:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Site:" -msgstr "Sitio:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "Soporte.." - -#: editor/asset_library_editor_plugin.cpp -msgid "Official" -msgstr "Oficial" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -msgid "Community" -msgstr "Comunidad" - -#: editor/asset_library_editor_plugin.cpp -msgid "Testing" -msgstr "Testeo" - -#: editor/asset_library_editor_plugin.cpp -msgid "Assets ZIP File" -msgstr "Archivo ZIP de Assets" - -#: editor/call_dialog.cpp -msgid "Method List For '%s':" -msgstr "Lista de Métodos Para '%s':" - -#: editor/call_dialog.cpp modules/visual_script/visual_script_editor.cpp -msgid "Call" -msgstr "Llamar" - -#: editor/call_dialog.cpp -msgid "Method List:" -msgstr "Lista de Métodos:" - -#: editor/call_dialog.cpp -msgid "Arguments:" -msgstr "Argumentos:" - -#: editor/call_dialog.cpp -msgid "Return:" -msgstr "Retornar:" - #: editor/code_editor.cpp msgid "Go to Line" msgstr "Ir a LÃnea" @@ -652,6 +396,14 @@ msgstr "Palabras Completas" msgid "Selection Only" msgstr "Solo Selección" +#: editor/code_editor.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp +msgid "Search" +msgstr "Buscar" + #: editor/code_editor.cpp editor/editor_help.cpp msgid "Find" msgstr "Encontrar" @@ -684,11 +436,11 @@ msgstr "Preguntar Antes de Reemplazar" msgid "Skip" msgstr "Saltear" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom In" msgstr "Zoom In" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom Out" msgstr "Zoom Out" @@ -757,6 +509,20 @@ msgstr "Diferido" msgid "Oneshot" msgstr "Oneshot" +#: editor/connections_dialog.cpp editor/dependency_editor.cpp +#: editor/export_template_manager.cpp +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Close" +msgstr "Cerrar" + #: editor/connections_dialog.cpp msgid "Connect" msgstr "Conectar" @@ -782,7 +548,7 @@ msgstr "Conectar.." msgid "Disconnect" msgstr "Desconectar" -#: editor/connections_dialog.cpp editor/node_dock.cpp +#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" msgstr "Señales" @@ -799,12 +565,25 @@ msgstr "Favoritos:" msgid "Recent:" msgstr "Recientes:" +#: editor/create_dialog.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp +#: editor/quick_open.cpp editor/settings_config_dialog.cpp +msgid "Search:" +msgstr "Buscar:" + #: editor/create_dialog.cpp editor/editor_help.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp #: editor/quick_open.cpp msgid "Matches:" msgstr "Coincidencias:" +#: editor/create_dialog.cpp editor/editor_help.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp +#: editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "Descripción:" + #: editor/dependency_editor.cpp msgid "Search Replacement For:" msgstr "Buscar Reemplazo Para:" @@ -862,6 +641,10 @@ msgid "Owners Of:" msgstr "Dueños De:" #: editor/dependency_editor.cpp +msgid "Remove selected files from the project? (no undo)" +msgstr "Quitar los archivos seleccionados del proyecto? (imposible deshacer)" + +#: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" @@ -872,8 +655,9 @@ msgstr "" "Quitarlos de todos modos? (imposible deshacer)" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (no undo)" -msgstr "Quitar los archivos seleccionados del proyecto? (imposible deshacer)" +#, fuzzy +msgid "Cannot remove:\n" +msgstr "No se ha podido resolver." #: editor/dependency_editor.cpp msgid "Error loading:" @@ -940,19 +724,12 @@ msgid "Godot Engine contributors" msgstr "Colaboradores de Godot Engine" #: editor/editor_about.cpp -#, fuzzy -msgid "Authors" -msgstr "Autor:" - -#: editor/editor_about.cpp -#, fuzzy msgid "Project Founders" -msgstr "Gestor de Proyectos" +msgstr "Fundadores del Proyecto" #: editor/editor_about.cpp -#, fuzzy msgid "Lead Developer" -msgstr "Desarrolladores" +msgstr "Desarrollador Principal" #: editor/editor_about.cpp editor/project_manager.cpp msgid "Project Manager" @@ -963,118 +740,155 @@ msgid "Developers" msgstr "Desarrolladores" #: editor/editor_about.cpp -msgid "License" +msgid "Authors" +msgstr "Autores" + +#: editor/editor_about.cpp +msgid "Platinum Sponsors" msgstr "" #: editor/editor_about.cpp -msgid "Thirdparty License" +msgid "Gold Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Mini Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Silver Donors" msgstr "" #: editor/editor_about.cpp +#, fuzzy +msgid "Bronze Donors" +msgstr "Clonar hacia Abajo" + +#: editor/editor_about.cpp +msgid "Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "License" +msgstr "Licencia" + +#: editor/editor_about.cpp +msgid "Thirdparty License" +msgstr "Licencia de Terceros" + +#: editor/editor_about.cpp msgid "" "Godot Engine relies on a number of thirdparty free and open source " "libraries, all compatible with the terms of its MIT license. The following " "is an exhaustive list of all such thirdparty components with their " "respective copyright statements and license terms." msgstr "" +"Godot Engine depende de un número de licencias de terceros, libres y de " +"código abierto, todas compatibles con los términos de su licencia MIT. La " +"siguiente es una lista exhaustiva de los mencionados componentes de terceros " +"con sus respectivas declaraciones de copyright y términos de licencia." #: editor/editor_about.cpp -#, fuzzy msgid "All Components" -msgstr "Contenido:" +msgstr "Todos los Componentes" #: editor/editor_about.cpp -#, fuzzy msgid "Components" -msgstr "Contenido:" +msgstr "Componentes" #: editor/editor_about.cpp msgid "Licenses" -msgstr "" +msgstr "Licencias" #: editor/editor_asset_installer.cpp editor/project_manager.cpp msgid "Error opening package file, not in zip format." -msgstr "" +msgstr "Error al abrir el archivo de paquete. No está en formato zip." #: editor/editor_asset_installer.cpp -#, fuzzy msgid "Uncompressing Assets" -msgstr "Sin Comprimir" +msgstr "Descomprimiendo Assets" #: editor/editor_asset_installer.cpp editor/project_manager.cpp msgid "Package Installed Successfully!" msgstr "El Paquete se Instaló Exitosamente!" #: editor/editor_asset_installer.cpp -#, fuzzy +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Success!" +msgstr "Conseguido!" + +#: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp +msgid "Install" +msgstr "Instalar" + +#: editor/editor_asset_installer.cpp msgid "Package Installer" -msgstr "El Paquete se Instaló Exitosamente!" +msgstr "Instalador de Paquetes" #: editor/editor_audio_buses.cpp msgid "Speakers" -msgstr "" +msgstr "Parlantes" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Add Effect" -msgstr "Agregar Evento" +msgstr "Agregar Efecto" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Rename Audio Bus" -msgstr "Abrir Layout de Bus de Audio" +msgstr "Renombrar Bus de Audio" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Toggle Audio Bus Solo" -msgstr "Abrir Layout de Bus de Audio" +msgstr "Act./Desact. Solo de Bus de Audio" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Toggle Audio Bus Mute" -msgstr "Abrir Layout de Bus de Audio" +msgstr "Slienciar/Desilenciar Bus de Audio" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Bypass Effects" -msgstr "" +msgstr "Act./Desact. Bypass de Efectos de Audio Bus" #: editor/editor_audio_buses.cpp msgid "Select Audio Bus Send" -msgstr "" +msgstr "Seleccionar EnvÃo de Audio Bus" #: editor/editor_audio_buses.cpp msgid "Add Audio Bus Effect" -msgstr "" +msgstr "Agregar Efecto de Audio Bus" #: editor/editor_audio_buses.cpp msgid "Move Bus Effect" -msgstr "" +msgstr "Mover Efecto de Bus" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Delete Bus Effect" -msgstr "Eliminar Seleccionados" +msgstr "Eliminar Efecto de Bus" #: editor/editor_audio_buses.cpp msgid "Audio Bus, Drag and Drop to rearrange." -msgstr "" - -#: editor/editor_audio_buses.cpp -#, fuzzy -msgid "Bus options" -msgstr "Opciones de Subescena" +msgstr "Audio Bus, Arrastrar y Soltar para reordenar." #: editor/editor_audio_buses.cpp msgid "Solo" -msgstr "" +msgstr "Solo" #: editor/editor_audio_buses.cpp msgid "Mute" -msgstr "" +msgstr "Silenciado" #: editor/editor_audio_buses.cpp msgid "Bypass" -msgstr "" +msgstr "Bypass" + +#: editor/editor_audio_buses.cpp +msgid "Bus options" +msgstr "Opciones de Bus" #: editor/editor_audio_buses.cpp editor/plugins/tile_map_editor_plugin.cpp #: editor/scene_tree_dock.cpp @@ -1083,32 +897,37 @@ msgstr "Duplicar" #: editor/editor_audio_buses.cpp #, fuzzy +msgid "Reset Volume" +msgstr "Resetear el Zoom" + +#: editor/editor_audio_buses.cpp msgid "Delete Effect" -msgstr "Eliminar Seleccionados" +msgstr "Eliminar Efecto" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Add Audio Bus" -msgstr "Agregar Bus" +msgstr "Agregar Bus de Audio" #: editor/editor_audio_buses.cpp msgid "Master bus can't be deleted!" -msgstr "" +msgstr "El bus maestro no puede ser eliminado!" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Delete Audio Bus" -msgstr "Eliminar Layout" +msgstr "Eliminar Bus de Audio" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Duplicate Audio Bus" -msgstr "Duplicar Animación" +msgstr "Duplicar Bus de Audio" #: editor/editor_audio_buses.cpp #, fuzzy +msgid "Reset Bus Volume" +msgstr "Resetear el Zoom" + +#: editor/editor_audio_buses.cpp msgid "Move Audio Bus" -msgstr "Mover Acción" +msgstr "Mover Bus de Audio" #: editor/editor_audio_buses.cpp msgid "Save Audio Bus Layout As.." @@ -1124,32 +943,28 @@ msgstr "Abrir Layout de Bus de Audio" #: editor/editor_audio_buses.cpp msgid "There is no 'res://default_bus_layout.tres' file." -msgstr "" +msgstr "No hay nigún archivo 'res://default_bus_layout.tres'." #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Invalid file, not an audio bus layout." -msgstr "" -"Extension de archivo inválida.\n" -"Usá .fnt, por favor." +msgstr "Archivo inválido. No es un layout de bus de audio." #: editor/editor_audio_buses.cpp msgid "Add Bus" msgstr "Agregar Bus" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Create a new Bus Layout." -msgstr "Crear Nuevo Recurso" +msgstr "Crear un nuevo Layout Bus." -#: editor/editor_audio_buses.cpp editor/script_create_dialog.cpp +#: editor/editor_audio_buses.cpp editor/property_editor.cpp +#: editor/script_create_dialog.cpp msgid "Load" msgstr "Cargar" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Load an existing Bus Layout." -msgstr "Cargar un recurso existente desde disco y editarlo." +msgstr "Cargar un Bus Layout existente." #: editor/editor_audio_buses.cpp #: editor/plugins/animation_player_editor_plugin.cpp @@ -1157,18 +972,16 @@ msgid "Save As" msgstr "Guardar Como" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Save this Bus Layout to a file." -msgstr "Guardar Layout de Bus de Audio Como.." +msgstr "Guardar este Bus Layout a un archivo." #: editor/editor_audio_buses.cpp editor/import_dock.cpp -#, fuzzy msgid "Load Default" -msgstr "Por Defecto" +msgstr "Cargar Valores por Defecto" #: editor/editor_audio_buses.cpp msgid "Load the default Bus Layout." -msgstr "" +msgstr "Cargar el Bus Layout predeterminado." #: editor/editor_autoload_settings.cpp msgid "Invalid name." @@ -1241,7 +1054,7 @@ msgid "Rearrange Autoloads" msgstr "Reordenar Autoloads" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp scene/gui/file_dialog.cpp +#: scene/gui/file_dialog.cpp msgid "Path:" msgstr "Ruta:" @@ -1249,9 +1062,7 @@ msgstr "Ruta:" msgid "Node Name:" msgstr "Nombre de Nodo:" -#: editor/editor_autoload_settings.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp editor/project_manager.cpp +#: editor/editor_autoload_settings.cpp editor/project_manager.cpp msgid "Name" msgstr "Nombre" @@ -1276,27 +1087,27 @@ msgid "Updating scene.." msgstr "Actualizando escena.." #: editor/editor_dir_dialog.cpp -#, fuzzy msgid "Please select a base directory first" -msgstr "Por favor guardá la escena primero." +msgstr "Por favor elegà un directorio base primero" #: editor/editor_dir_dialog.cpp msgid "Choose a Directory" msgstr "Elegà un Directorio" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Create Folder" msgstr "Crear Carpeta" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: editor/editor_plugin_settings.cpp editor/plugins/theme_editor_plugin.cpp -#: editor/project_export.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp +#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp +#: scene/gui/file_dialog.cpp msgid "Name:" msgstr "Nombre:" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Could not create folder." msgstr "No se pudo crear la carpeta." @@ -1316,30 +1127,6 @@ msgstr "Empaquetando" msgid "Template file not found:\n" msgstr "Plantilla no encontrada:\n" -#: editor/editor_export.cpp -msgid "Added:" -msgstr "Agregado:" - -#: editor/editor_export.cpp -msgid "Removed:" -msgstr "Removido:" - -#: editor/editor_export.cpp -msgid "Error saving atlas:" -msgstr "Error al guardar atlas:" - -#: editor/editor_export.cpp -msgid "Could not save atlas subtexture:" -msgstr "No se pudo guardar la subtextura de altas:" - -#: editor/editor_export.cpp -msgid "Exporting for %s" -msgstr "Exportando para %s" - -#: editor/editor_export.cpp -msgid "Setting Up.." -msgstr "Configurando.." - #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "El Archivo Existe, Sobreescribir?" @@ -1424,6 +1211,11 @@ msgstr "Subir Favorito" msgid "Move Favorite Down" msgstr "Bajar Favorito" +#: editor/editor_file_dialog.cpp +#, fuzzy +msgid "Go to parent folder" +msgstr "No se pudo crear la carpeta." + #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Directories & Files:" msgstr "Directorios y Archivos:" @@ -1466,6 +1258,10 @@ msgstr "Lista de Clases:" msgid "Search Classes" msgstr "Buscar Clases" +#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +msgid "Top" +msgstr "Cima" + #: editor/editor_help.cpp editor/property_editor.cpp msgid "Class:" msgstr "Clase:" @@ -1482,15 +1278,30 @@ msgstr "Heredada por:" msgid "Brief Description:" msgstr "Descripción Breve:" +#: editor/editor_help.cpp +#, fuzzy +msgid "Members" +msgstr "Miembros:" + #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "Miembros:" #: editor/editor_help.cpp +#, fuzzy +msgid "Public Methods" +msgstr "Métodos Públicos:" + +#: editor/editor_help.cpp msgid "Public Methods:" msgstr "Métodos Públicos:" #: editor/editor_help.cpp +#, fuzzy +msgid "GUI Theme Items" +msgstr "Items de Tema de la GUI:" + +#: editor/editor_help.cpp msgid "GUI Theme Items:" msgstr "Items de Tema de la GUI:" @@ -1500,53 +1311,85 @@ msgstr "Señales:" #: editor/editor_help.cpp #, fuzzy +msgid "Enumerations" +msgstr "Enumeraciones:" + +#: editor/editor_help.cpp msgid "Enumerations:" -msgstr "Animaciones" +msgstr "Enumeraciones:" #: editor/editor_help.cpp msgid "enum " -msgstr "" +msgstr "enum " + +#: editor/editor_help.cpp +#, fuzzy +msgid "Constants" +msgstr "Constantes:" #: editor/editor_help.cpp msgid "Constants:" msgstr "Constantes:" #: editor/editor_help.cpp +#, fuzzy +msgid "Description" +msgstr "Descripción:" + +#: editor/editor_help.cpp +#, fuzzy +msgid "Properties" +msgstr "Propiedades:" + +#: editor/editor_help.cpp msgid "Property Description:" msgstr "Descripción de Propiedad:" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this property. Please help us by " +"[color=$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp +#, fuzzy +msgid "Methods" +msgstr "Lista de Métodos:" + +#: editor/editor_help.cpp msgid "Method Description:" msgstr "Descripción de Métodos:" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this method. Please help us by [color=" +"$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp msgid "Search Text" msgstr "Texto de Búsqueda" #: editor/editor_log.cpp -#, fuzzy msgid "Output:" -msgstr " Salida:" +msgstr "Salida:" #: editor/editor_log.cpp editor/plugins/animation_tree_editor_plugin.cpp -#: editor/plugins/rich_text_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_editor_debugger.cpp scene/gui/line_edit.cpp -#: scene/gui/text_edit.cpp +#: editor/property_editor.cpp editor/script_editor_debugger.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Clear" msgstr "Limpiar" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Error saving resource!" msgstr "Error al guardar el recurso!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Save Resource As.." msgstr "Guardar Recurso Como.." -#: editor/editor_node.cpp editor/export_template_manager.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "I see.." msgstr "Ya Veo.." @@ -1563,6 +1406,30 @@ msgid "Error while saving." msgstr "Error al grabar." #: editor/editor_node.cpp +#, fuzzy +msgid "Can't open '%s'." +msgstr "No se puede operar en '..'" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Error while parsing '%s'." +msgstr "Error al grabar." + +#: editor/editor_node.cpp +msgid "Unexpected end of file '%s'." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Missing '%s' or its dependencies." +msgstr "La escena '%s' tiene dependencias rotas:" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Error while loading '%s'." +msgstr "Error al grabar." + +#: editor/editor_node.cpp msgid "Saving Scene" msgstr "Guardar Escena" @@ -1575,9 +1442,8 @@ msgid "Creating Thumbnail" msgstr "Creando Miniatura" #: editor/editor_node.cpp -#, fuzzy msgid "This operation can't be done without a tree root." -msgstr "Esta operación no puede hacerse sin una escena." +msgstr "Esta operación no puede hacerse sin una raÃz de árbol." #: editor/editor_node.cpp msgid "" @@ -1623,6 +1489,33 @@ msgid "Restored default layout to base settings." msgstr "Se restauró el layout por defecto a sus seteos base." #: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was imported, so it's not editable.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was instanced or inherited.\n" +"Changes to it will not be kept when saving the current scene." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource was imported, so it's not editable. Change its settings in the " +"import panel and then re-import." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This scene was imported, so changes to it will not be kept.\n" +"Instancing it or inheriting will allow making changes to it.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp msgid "Copy Params" msgstr "Copiar Params" @@ -1711,13 +1604,12 @@ msgid "Quick Open Script.." msgstr "Abrir Script Rapido.." #: editor/editor_node.cpp -#, fuzzy msgid "Save & Close" -msgstr "Guardar un Archivo" +msgstr "Guardar y Cerrar" #: editor/editor_node.cpp msgid "Save changes to '%s' before closing?" -msgstr "" +msgstr "Guardar cambios a '%s' antes de cerrar?" #: editor/editor_node.cpp msgid "Save Scene As.." @@ -1748,9 +1640,8 @@ msgid "Export Tile Set" msgstr "Exportar Tile Set" #: editor/editor_node.cpp -#, fuzzy msgid "This operation can't be done without a selected node." -msgstr "Esta operación no puede hacerse sin una escena." +msgstr "Esta operación no puede hacerse sin un nodo seleccionado." #: editor/editor_node.cpp msgid "Current scene not saved. Open anyway?" @@ -1781,22 +1672,28 @@ msgid "Exit the editor?" msgstr "Salir del editor?" #: editor/editor_node.cpp -#, fuzzy msgid "Open Project Manager?" -msgstr "Gestor de Proyectos" +msgstr "Abrir Gestor de Proyectos?" #: editor/editor_node.cpp -#, fuzzy msgid "Save & Quit" -msgstr "Guardar un Archivo" +msgstr "Guardar y Salir" #: editor/editor_node.cpp msgid "Save changes to the following scene(s) before quitting?" -msgstr "" +msgstr "Guardar cambios a la(s) siguiente(s) escena(s) antes de salir?" #: editor/editor_node.cpp msgid "Save changes the following scene(s) before opening Project Manager?" msgstr "" +"Guardar cambios a la(s) siguiente(s) escena(s) antes de abrir el Gestor de " +"Proyectos?" + +#: editor/editor_node.cpp +msgid "" +"This option is deprecated. Situations where refresh must be forced are now " +"considered a bug. Please report." +msgstr "" #: editor/editor_node.cpp msgid "Pick a Main Scene" @@ -1804,19 +1701,21 @@ msgstr "Elegà una Escena Principal" #: editor/editor_node.cpp msgid "Unable to enable addon plugin at: '" -msgstr "" +msgstr "No se pudo activar el plugin de addon en : '" #: editor/editor_node.cpp msgid "' parsing of config failed." -msgstr "" +msgstr "' fallo el parseo de la configuración." #: editor/editor_node.cpp msgid "Unable to find script field for addon plugin at: 'res://addons/" msgstr "" +"No se pudo encontrar el campo script para el plugin de addon en: 'res://" +"addons/" #: editor/editor_node.cpp msgid "Unable to load addon script from path: '" -msgstr "" +msgstr "No se pudo cargar el script de addon desde la ruta: '" #: editor/editor_node.cpp msgid "" @@ -1828,7 +1727,7 @@ msgstr "" "Para realizar cambios, se debe crear una nueva escena heredada." #: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Ugh" msgstr "Ugh" @@ -1842,14 +1741,15 @@ msgstr "" "proyecto." #: editor/editor_node.cpp -msgid "Error loading scene." -msgstr "Error al cargar la escena." - -#: editor/editor_node.cpp msgid "Scene '%s' has broken dependencies:" msgstr "La escena '%s' tiene dependencias rotas:" #: editor/editor_node.cpp +#, fuzzy +msgid "Clear Recent Scenes" +msgstr "Reestablecer Archivos Recientes" + +#: editor/editor_node.cpp msgid "Save Layout" msgstr "Guardar Layout" @@ -1879,11 +1779,10 @@ msgid "Distraction Free Mode" msgstr "Modo Sin Distracciones" #: editor/editor_node.cpp -#, fuzzy msgid "Toggle distraction-free mode." -msgstr "Modo Sin Distracciones" +msgstr "Act./Desact. modo sin distracciones." -#: editor/editor_node.cpp editor/io_plugins/editor_scene_import_plugin.cpp +#: editor/editor_node.cpp msgid "Scene" msgstr "Escena" @@ -2122,6 +2021,10 @@ msgstr "Q&A" msgid "Issue Tracker" msgstr "Issue Tracker" +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +msgid "Community" +msgstr "Comunidad" + #: editor/editor_node.cpp msgid "About" msgstr "Acerca de" @@ -2130,7 +2033,7 @@ msgstr "Acerca de" msgid "Play the project." msgstr "Reproducir el proyecto." -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Play" msgstr "Reproducir" @@ -2146,7 +2049,7 @@ msgstr "Pausar la Escena" msgid "Stop the scene." msgstr "Parar la escena." -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Stop" msgstr "Detener" @@ -2219,6 +2122,16 @@ msgid "Object properties." msgstr "Propiedades del objeto." #: editor/editor_node.cpp +#, fuzzy +msgid "Changes may be lost!" +msgstr "Cambiar Grupo de Imágenes" + +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Import" +msgstr "Importar" + +#: editor/editor_node.cpp msgid "FileSystem" msgstr "FileSystem" @@ -2232,15 +2145,7 @@ msgstr "Salida" #: editor/editor_node.cpp msgid "Don't Save" -msgstr "" - -#: editor/editor_node.cpp editor/editor_reimport_dialog.cpp -msgid "Re-Import" -msgstr "Reimportar" - -#: editor/editor_node.cpp editor/editor_plugin_settings.cpp -msgid "Update" -msgstr "Actualizar" +msgstr "No Guardar" #: editor/editor_node.cpp msgid "Import Templates From ZIP File" @@ -2267,9 +2172,8 @@ msgid "Open & Run a Script" msgstr "Abrir y Correr un Script" #: editor/editor_node.cpp -#, fuzzy msgid "New Inherited" -msgstr "Nueva Escena Heredada.." +msgstr "Nuevo Heredado" #: editor/editor_node.cpp msgid "Load Errors" @@ -2303,11 +2207,29 @@ msgstr "Abrir el Editor siguiente" msgid "Open the previous Editor" msgstr "Abrir el Editor anterior" +#: editor/editor_plugin.cpp +#, fuzzy +msgid "Creating Mesh Previews" +msgstr "Crear LibrerÃa de Meshes" + +#: editor/editor_plugin.cpp +msgid "Thumbnail.." +msgstr "Miniatura.." + #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" msgstr "Plugins Instalados:" #: editor/editor_plugin_settings.cpp +msgid "Update" +msgstr "Actualizar" + +#: editor/editor_plugin_settings.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Version:" +msgstr "Version:" + +#: editor/editor_plugin_settings.cpp msgid "Author:" msgstr "Autor:" @@ -2359,35 +2281,18 @@ msgstr "Propio" msgid "Frame #:" msgstr "Frame #:" -#: editor/editor_reimport_dialog.cpp -msgid "Please wait for scan to complete." -msgstr "Por favor aguarda a que el scan termine." - -#: editor/editor_reimport_dialog.cpp -msgid "Current scene must be saved to re-import." -msgstr "La escena actual debe ser guardada para reimportar." - -#: editor/editor_reimport_dialog.cpp -msgid "Save & Re-Import" -msgstr "Guardar y Reimportar" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Importing" -msgstr "Reimportando" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Import Changed Resources" -msgstr "Reimportar Recursos Cambiados" - #: editor/editor_run_native.cpp msgid "Select device from the list" -msgstr "" +msgstr "Seleccionar dispositivo de la lista" #: editor/editor_run_native.cpp msgid "" "No runnable export preset found for this platform.\n" "Please add a runnable preset in the export menu." msgstr "" +"No se encontró ningún preset de exportación ejecutable para esta " +"plataforma.\n" +"Por favor agregá un preset ejecutable en el menú de exportación." #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." @@ -2490,10 +2395,6 @@ msgid "Importing:" msgstr "Importando:" #: editor/export_template_manager.cpp -msgid "Loading Export Templates" -msgstr "Cargando Plantillas de Exportación" - -#: editor/export_template_manager.cpp msgid "Current Version:" msgstr "Version Actual:" @@ -2528,60 +2429,79 @@ msgid "Cannot navigate to '" msgstr "No se puede navegar a '" #: editor/filesystem_dock.cpp -#, fuzzy +msgid "View items as a grid of thumbnails" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "View items as a list" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "" "\n" -"Status: Needs Re-Import" -msgstr "Guardar y Reimportar" +"Status: Import of file failed. Please fix file and reimport manually." +msgstr "" #: editor/filesystem_dock.cpp -#, fuzzy msgid "" "\n" "Source: " -msgstr "Fuente:" +msgstr "" +"\n" +"Fuente: " #: 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." +#, fuzzy +msgid "Cannot move/rename resources root." +msgstr "No se puede cargar/procesar la tipografÃa de origen." #: editor/filesystem_dock.cpp -msgid "Target file exists, can't overwrite. Delete first." -msgstr "" +#, fuzzy +msgid "Cannot move a folder into itself.\n" +msgstr "No se puede importar un archivo sobre si mismo:" + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Error moving:\n" +msgstr "Error al mover el directorio:\n" #: 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." +#, fuzzy +msgid "Unable to update dependencies:\n" +msgstr "La escena '%s' tiene dependencias rotas:" #: editor/filesystem_dock.cpp -msgid "Can't move directories to within themselves." -msgstr "No se pueden mover directorios dentro de si mismos." +msgid "No name provided" +msgstr "" #: editor/filesystem_dock.cpp -msgid "Can't rename deps for:\n" +msgid "Provided name contains invalid characters" msgstr "" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Error moving file:\n" -msgstr "Error al cargar la imagen:" +msgid "No name provided." +msgstr "Renombrar o Mover.." #: editor/filesystem_dock.cpp #, fuzzy -msgid "Error moving dir:\n" -msgstr "Error al importar:" +msgid "Name contains invalid characters." +msgstr "Caracteres válidos:" #: editor/filesystem_dock.cpp -msgid "Can't operate on '..'" -msgstr "No se puede operar en '..'" +#, fuzzy +msgid "A file or folder with this name already exists." +msgstr "El nombre de grupo ya existe!" #: editor/filesystem_dock.cpp -msgid "Pick New Name and Location For:" -msgstr "Elejà un Nuevo Nombre y Ubicación Para:" +#, fuzzy +msgid "Renaming file:" +msgstr "Renombrar Variable" #: editor/filesystem_dock.cpp -msgid "No files selected!" -msgstr "Ningún Archivo seleccionado!" +#, fuzzy +msgid "Renaming folder:" +msgstr "Renombrar Nodo" #: editor/filesystem_dock.cpp msgid "Expand all" @@ -2592,40 +2512,38 @@ msgid "Collapse all" msgstr "Colapsar todos" #: editor/filesystem_dock.cpp -msgid "Show In File Manager" -msgstr "Mostrar en Gestor de Archivos" - -#: editor/filesystem_dock.cpp -msgid "Instance" -msgstr "Instancia" +msgid "Copy Path" +msgstr "Copiar Ruta" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "Editar Dependencias.." +#, fuzzy +msgid "Rename.." +msgstr "Renombrar" #: editor/filesystem_dock.cpp -msgid "View Owners.." -msgstr "Ver Dueños.." +msgid "Move To.." +msgstr "Mover A.." #: editor/filesystem_dock.cpp -msgid "Copy Path" -msgstr "Copiar Ruta" +#, fuzzy +msgid "New Folder.." +msgstr "Crear Carpeta" #: editor/filesystem_dock.cpp -msgid "Rename or Move.." -msgstr "Renombrar o Mover.." +msgid "Show In File Manager" +msgstr "Mostrar en Gestor de Archivos" #: editor/filesystem_dock.cpp -msgid "Move To.." -msgstr "Mover A.." +msgid "Instance" +msgstr "Instancia" #: editor/filesystem_dock.cpp -msgid "Info" -msgstr "Info" +msgid "Edit Dependencies.." +msgstr "Editar Dependencias.." #: editor/filesystem_dock.cpp -msgid "Re-Import.." -msgstr "Reimportando.." +msgid "View Owners.." +msgstr "Ver Dueños.." #: editor/filesystem_dock.cpp msgid "Previous Directory" @@ -2653,11 +2571,18 @@ msgid "" "Scanning Files,\n" "Please Wait.." msgstr "" +"Examinando Archivos,\n" +"Aguardá, por favor." #: editor/filesystem_dock.cpp msgid "Move" msgstr "Mover" +#: editor/filesystem_dock.cpp editor/plugins/animation_tree_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Rename" +msgstr "Renombrar" + #: editor/groups_editor.cpp msgid "Add to Group" msgstr "Agregar al Grupo" @@ -2667,74 +2592,85 @@ msgid "Remove from Group" msgstr "Quitar del Grupo" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Import as Single Scene" -msgstr "Importando Escena.." +msgstr "Importar como Escena Única" + +#: editor/import/resource_importer_scene.cpp +#, fuzzy +msgid "Import with Separate Animations" +msgstr "Importar con Materiales Separados" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials" -msgstr "" +msgstr "Importar con Materiales Separados" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects" -msgstr "" +msgstr "Importar con Objetos Separados" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects+Materials" -msgstr "" +msgstr "Importar con Objetos+Materiales Separados" #: editor/import/resource_importer_scene.cpp #, fuzzy +msgid "Import with Separate Objects+Animations" +msgstr "Importar con Objetos+Materiales Separados" + +#: editor/import/resource_importer_scene.cpp +#, fuzzy +msgid "Import with Separate Materials+Animations" +msgstr "Importar con Materiales Separados" + +#: editor/import/resource_importer_scene.cpp +#, fuzzy +msgid "Import with Separate Objects+Materials+Animations" +msgstr "Importar con Objetos+Materiales Separados" + +#: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes" -msgstr "Importar Escena 3D" +msgstr "Importar como Escenas Múltiples" #: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes+Materials" -msgstr "" +msgstr "Importar como Escenas+Materiales Múltiples" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Import Scene" msgstr "Importar Escena" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Importing Scene.." msgstr "Importando Escena.." #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Running Custom Script.." msgstr "Ejecutando Script Personalizado.." #: editor/import/resource_importer_scene.cpp -#: 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:" #: editor/import/resource_importer_scene.cpp -#: 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):" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Error running post-import script:" msgstr "Error ejecutando el script de post-importacion:" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Saving.." msgstr "Guardando.." #: editor/import_dock.cpp msgid "Set as Default for '%s'" -msgstr "" +msgstr "Asignar como Predeterminado para '%s'" #: editor/import_dock.cpp msgid "Clear Default for '%s'" -msgstr "" +msgstr "Reestablecer Predeterminados para '%s'" #: editor/import_dock.cpp msgid " Files" @@ -2752,577 +2688,6 @@ msgstr "Preseteo.." msgid "Reimport" msgstr "Reimportar" -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "No bit masks to import!" -msgstr "Sin máscaras de bits para importar!" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path is empty." -msgstr "La ruta de destino está vacÃa." - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must be a complete resource path." -msgstr "La ruta de destino debe ser una ruta de recursos completa." - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must exist." -msgstr "La ruta de destino debe existir." - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Save path is empty!" -msgstr "La ruta de guardado esta vacÃa!" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Import BitMasks" -msgstr "Importar BitMasks" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s):" -msgstr "Textura(s) de Origen:" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Target Path:" -msgstr "Ruta de Destino:" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Accept" -msgstr "Aceptar" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Bit Mask" -msgstr "Máscara de Bits" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No source font file!" -msgstr "Sin archivo de tipografÃas de origen!" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No target font resource!" -msgstr "Sin recurso de tipografÃas de destino!" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "" -"Invalid file extension.\n" -"Please use .font." -msgstr "" -"Extension de archivo inválida.\n" -"Usá .fnt, por favor." - -#: 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." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Couldn't save font." -msgstr "No se pudo guardar la tipografÃa." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font:" -msgstr "TipografÃa de Origen:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font Size:" -msgstr "Tamaño de la TipografÃa de Origen:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Dest Resource:" -msgstr "Recurso de Dest:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "The quick brown fox jumps over the lazy dog." -msgstr "El veloz murciélago hindú comÃa feliz cardillo y kiwi." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Test:" -msgstr "Prueba:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Options:" -msgstr "Opciones:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Font Import" -msgstr "Importar TipografÃas" - -#: 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." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Failed opening as BMFont file." -msgstr "Error al abrir como archivo BMFont." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error initializing FreeType." -msgstr "Error inicializando FreeType." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Unknown font format." -msgstr "Formato de tipografÃa desconocido." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error loading font." -msgstr "Error cargando tipografÃa." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Invalid font size." -msgstr "Tamaño de tipografÃa inválido." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Invalid font custom source." -msgstr "Origen personalizado de tipografÃa inválido." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/plugins/theme_editor_plugin.cpp -msgid "Font" -msgstr "TipografÃa" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "No meshes to import!" -msgstr "Sin meshes para importar!" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Single Mesh Import" -msgstr "Importar Mesh Individual" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Source Mesh(es):" -msgstr "Importar Mesh(es) de Origen:" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Mesh" -msgstr "Mesh" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Surface %d" -msgstr "Superficie %d" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "No samples to import!" -msgstr "Sin muestras que importar!" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Import Audio Samples" -msgstr "Importar Muestras de Audio" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Source Sample(s):" -msgstr "Muestra(s) de Origen:" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Audio Sample" -msgstr "Muestra de Audio" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "New Clip" -msgstr "Nuevo Clip" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Animation Options" -msgstr "Opciones de Animación" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Flags" -msgstr "Flags" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Bake FPS:" -msgstr "Hacer Bake de FPS:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Optimizer" -msgstr "Optimizar" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Linear Error" -msgstr "Error Lineal Máximo" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angular Error" -msgstr "Error Angular Máximo" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angle" -msgstr "Angulo Máximo" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Clips" -msgstr "Clips" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Start(s)" -msgstr "Comienzo(s)" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "End(s)" -msgstr "Fin(es)" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Loop" -msgstr "Loop" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Filters" -msgstr "Filtros" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source path is empty." -msgstr "La ruta de origen esta vacÃa." - -#: 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." - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Invalid/broken script for post-import." -msgstr "Script post-importación inválido o roto." - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Error importing scene." -msgstr "Error al importar escena." - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import 3D Scene" -msgstr "Importar Escena 3D" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source Scene:" -msgstr "Escena de Origen:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Same as Target Scene" -msgstr "Igual que Escena de Destino" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Shared" -msgstr "Compartido" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Target Texture Folder:" -msgstr "Carpeta de Textura de Destino:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Post-Process Script:" -msgstr "Script de Postprocesado:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Custom Root Node Type:" -msgstr "Tipo de Nodo Raiz Customizado:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Auto" -msgstr "Auto" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Root Node Name:" -msgstr "Nombre del Nodo RaÃz:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "The Following Files are Missing:" -msgstr "Los Siguientes Archivos estan Faltando:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Anyway" -msgstr "Importar de Todos Modos" - -#: editor/io_plugins/editor_scene_import_plugin.cpp scene/gui/dialogs.cpp -msgid "Cancel" -msgstr "Cancelar" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import & Open" -msgstr "Importar y Abrir" - -#: 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?" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Image:" -msgstr "Importar Imagen:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Can't import a file over itself:" -msgstr "No se puede importar un archivo sobre si mismo:" - -#: 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)" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "3D Scene Animation" -msgstr "Animacion de Escena 3D" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Uncompressed" -msgstr "Sin Comprimir" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossless (PNG)" -msgstr "Compresión Sin Pérdidas (PNG)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossy (WebP)" -msgstr "Compresión con Pérdidas (WebP)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress (VRAM)" -msgstr "Comprimir (VRAM)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Format" -msgstr "Formato de Textura" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Compression Quality (WebP):" -msgstr "Calidad de Compresión de Textura (WebP):" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Options" -msgstr "Opciones de Textura" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Please specify some files!" -msgstr "Por favor especificá algunos archivos!" - -#: 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." - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Error importing:" -msgstr "Error al importar:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Only one file is required for large texture." -msgstr "Solo se requiere un archivo para textura grande." - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Max Texture Size:" -msgstr "Tamaño Max. de Textura:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for Atlas (2D)" -msgstr "Importar Texturas para Atlas (2D)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cell Size:" -msgstr "Tamaño de Celda:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Large Texture" -msgstr "Textura Grande" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Textures (2D)" -msgstr "Importar Texturas Grandes (2D)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture" -msgstr "Textura de Origen" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Base Atlas Texture" -msgstr "Textura Base de Atlas" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s)" -msgstr "Textura(s) de Origen" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 2D" -msgstr "Importar Texturas para 2D" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 3D" -msgstr "Importar Texturas para 3D" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures" -msgstr "Importar Texturas" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "2D Texture" -msgstr "Textura 2D" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "3D Texture" -msgstr "Textura 3D" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Atlas Texture" -msgstr "Textura de Atlas" - -#: 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." - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Crop empty space." -msgstr "Cropear espacio vacio." - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture" -msgstr "Textura" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Texture" -msgstr "Importar Textura Grande" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Load Source Image" -msgstr "Cargar Imagen de Origen" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Slicing" -msgstr "Rebanar" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Inserting" -msgstr "Insertando" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Saving" -msgstr "Guardando" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save large texture:" -msgstr "No se pudo guardar la textura grande:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Build Atlas For:" -msgstr "Construir Atlar Para:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Loading Image:" -msgstr "Cargando Imagen:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't load image:" -msgstr "No se pudo cargar la imagen:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Converting Images" -msgstr "Convirtiendo Imágenes" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cropping Images" -msgstr "Cropeando Imágenes" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Blitting Images" -msgstr "Haciendo Blitting de Imágenes" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save atlas image:" -msgstr "No se pudo guardar la imagen de atlas:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save converted texture:" -msgstr "No se pudo guardar la textura convertida:" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid source!" -msgstr "Fuente inválida!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid translation source!" -msgstr "Fuente de traducción inválida!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Column" -msgstr "Columna" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/script_create_dialog.cpp -msgid "Language" -msgstr "Lenguaje" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No items to import!" -msgstr "Sin elementos para importar!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No target path!" -msgstr "Sin ruta de destino!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translations" -msgstr "Importar Traducciones" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Couldn't import!" -msgstr "No se pudo importar!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translation" -msgstr "Importar Traducción" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Source CSV:" -msgstr "CSV de Origen:" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Ignore First Row" -msgstr "Ignorar Primera Columna" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Compress" -msgstr "Comprimir" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Add to Project (project.godot)" -msgstr "Agregar al Proyecto (project.godot)" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Languages:" -msgstr "Importar Lenguajes:" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Translation" -msgstr "Traducción" - #: editor/multi_node_edit.cpp msgid "MultiNode Set" msgstr "Setear MultiNodo" @@ -3335,6 +2700,49 @@ msgstr "Grupos" msgid "Select a Node to edit Signals and Groups." msgstr "Seleccionar un Nodo para editar Señales y Grupos." +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create Poly" +msgstr "Crear PolÃgono" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly" +msgstr "Editar PolÃgono" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +#, fuzzy +msgid "Insert Point" +msgstr "Insertando" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly (Remove Point)" +msgstr "Editar PolÃgono (Remover Punto)" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Remove Poly And Point" +msgstr "Remover PolÃgono y Punto" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create a new polygon from scratch." +msgstr "Crear un nuevo polÃgono de cero." + +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "" +"Edit existing polygon:\n" +"LMB: Move Point.\n" +"Ctrl+LMB: Split Segment.\n" +"RMB: Erase Point." +msgstr "" +"Editar polÃgono existente:\n" +"Click izq: Mover Punto.\n" +"Ctrl+Click izq: Dividir Segmento.\n" +"Click der: Eliminar Punto." + #: editor/plugins/animation_player_editor_plugin.cpp msgid "Toggle Autoplay" msgstr "Activar/Desact. Autoplay" @@ -3490,7 +2898,6 @@ msgstr "Nombre de Animación:" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp #: editor/script_create_dialog.cpp msgid "Error!" @@ -3518,9 +2925,8 @@ msgid "New name:" msgstr "Nuevo nombre:" #: editor/plugins/animation_tree_editor_plugin.cpp -#, fuzzy msgid "Edit Filters" -msgstr "Editar Filtros de Nodo" +msgstr "Editar Filtros" #: editor/plugins/animation_tree_editor_plugin.cpp #: editor/plugins/multimesh_editor_plugin.cpp @@ -3601,10 +3007,6 @@ msgid "Delete Input" msgstr "Eliminar Entrada" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Rename" -msgstr "Renombrar" - -#: editor/plugins/animation_tree_editor_plugin.cpp msgid "Animation tree is valid." msgstr "El árbol de animación es válido." @@ -3660,65 +3062,181 @@ msgstr "Editar Filtros de Nodo" msgid "Filters.." msgstr "Filtros.." -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing %d Triangles:" -msgstr "Parseando %d Triángulos:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Free" +msgstr "Libre" -#: editor/plugins/baked_light_baker.cpp -msgid "Triangle #" -msgstr "Triangulo #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Contents:" +msgstr "Contenido:" -#: editor/plugins/baked_light_baker.cpp -msgid "Light Baker Setup:" -msgstr "Configuración de Baker de Luces:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "View Files" +msgstr "Ver Archivos" -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing Geometry" -msgstr "Parseando GeometrÃa" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve hostname:" +msgstr "No se ha podido resolver el nombre del host:" -#: editor/plugins/baked_light_baker.cpp -msgid "Fixing Lights" -msgstr "Fijando/Corrigiendo Luces" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve." +msgstr "No se ha podido resolver." -#: editor/plugins/baked_light_baker.cpp -msgid "Making BVH" -msgstr "Creando BVH" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connection error, please try again." +msgstr "Error de conexión, por favor intentá de nuevo." -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Light Octree" -msgstr "Creando Octree de Luces" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't connect." +msgstr "No se puede conectar." -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Octree Texture" -msgstr "Creando Octree de Texturas" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't connect to host:" +msgstr "No se puede conectar al host:" -#: editor/plugins/baked_light_baker.cpp -msgid "Transfer to Lightmaps:" -msgstr "Transferencia a Lightmaps:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response from host:" +msgstr "No hay respuesta desde el host:" -#: editor/plugins/baked_light_baker.cpp -msgid "Allocating Texture #" -msgstr "Asignando Textura #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response." +msgstr "Sin respuesta." -#: editor/plugins/baked_light_baker.cpp -msgid "Baking Triangle #" -msgstr "Haciendo Bake de Triangulo #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, return code:" +msgstr "Solicitud fallida. Código de retorno:" -#: editor/plugins/baked_light_baker.cpp -msgid "Post-Processing Texture #" -msgstr "Postprocesando Textura #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Req. Failed." +msgstr "Solicitud fallida." -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Bake!" -msgstr "Hacer Bake!" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, too many redirects" +msgstr "Solicitud fallida, demasiadas redireccinoes" -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Reset the lightmap octree baking process (start over)." -msgstr "" -"Resetear el proceso de bake del octree de mapa de luces (empezar de nuevo)." +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Redirect Loop." +msgstr "Bucle de redireccionamiento." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed:" +msgstr "Fallido:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Bad download hash, assuming file has been tampered with." +msgstr "Hash de descarga incorrecto, asumiendo que el archivo fue manipulado." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Expected:" +msgstr "Esperado:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Got:" +msgstr "Recibido:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed sha256 hash check" +msgstr "Fallo el chequeo del hash sha256" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Asset Download Error:" +msgstr "Error de Descarga del Asset:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Fetching:" +msgstr "Obteniendo:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Resolving.." +msgstr "Resolviendo.." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connecting.." +msgstr "Conectando.." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Requesting.." +msgstr "Solicitando.." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Error making request" +msgstr "Error al realizar la solicitud" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Idle" +msgstr "Desocupado" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Retry" +msgstr "Reintentar" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download Error" +msgstr "Error de Descarga" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download for this asset is already in progress!" +msgstr "La descarga de este asset ya esta en progreso!" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "first" +msgstr "primero" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "prev" +msgstr "anterior" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "next" +msgstr "siguiente" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "last" +msgstr "último" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "All" +msgstr "Todos" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Plugins" +msgstr "Plugins" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Sort:" +msgstr "Ordenar:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Reverse" +msgstr "Invertir" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Category:" +msgstr "CategorÃa:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Site:" +msgstr "Sitio:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Support.." +msgstr "Soporte.." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Official" +msgstr "Oficial" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Testing" +msgstr "Testeo" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Assets ZIP File" +msgstr "Archivo ZIP de Assets" #: editor/plugins/camera_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp msgid "Preview" msgstr "Vista Previa" @@ -3761,12 +3279,18 @@ msgid "Edit CanvasItem" msgstr "Editar CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Change Anchors" +#, fuzzy +msgid "Anchors only" +msgstr "Anchor" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Change Anchors and Margins" msgstr "Cambiar Anclas" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom (%):" -msgstr "Zoom (%):" +msgid "Change Anchors" +msgstr "Cambiar Anclas" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Paste Pose" @@ -3820,60 +3344,78 @@ msgid "Pan Mode" msgstr "Modo Paneo" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Lock the selected object in place (can't be moved)." -msgstr "Inmovilizar Objeto." +#, fuzzy +msgid "Toggles snapping" +msgstr "Act/Desact. Breakpoint" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Unlock the selected object (can be moved)." -msgstr "Desinmovilizar Objeto." +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "Usar Snap" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Makes sure the object's children are not selectable." -msgstr "Asegurarse que los hijos de un objeto no sean seleccionables." +#, fuzzy +msgid "Snapping options" +msgstr "Opciones de Animación" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Restores the object's children's ability to be selected." -msgstr "Restaurar la habilidad de seleccionar los hijos de un objeto." +#, fuzzy +msgid "Snap to grid" +msgstr "Modo Snap:" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp -#: editor/project_settings_editor.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Edit" -msgstr "Editar" +msgid "Use Rotation Snap" +msgstr "Usar Snap de Rotación" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" -msgstr "Usar Snap" +#, fuzzy +msgid "Configure Snap..." +msgstr "Configurar Snap.." #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" -msgstr "Mostrar la Grilla" +msgid "Snap Relative" +msgstr "Usar Snap Relativo" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Rotation Snap" -msgstr "Usar Snap de Rotación" +msgid "Use Pixel Snap" +msgstr "Usar Pixel Snap" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap Relative" -msgstr "Usar Snap Relativo" +msgid "Smart snapping" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "Configurar Snap.." +#, fuzzy +msgid "Snap to parent" +msgstr "Expandir al Padre" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Pixel Snap" -msgstr "Usar Pixel Snap" +msgid "Snap to node anchor" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Skeleton.." -msgstr "Esqueleto.." +msgid "Snap to node sides" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to other nodes" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Lock the selected object in place (can't be moved)." +msgstr "Inmovilizar Objeto." + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Unlock the selected object (can be moved)." +msgstr "Desinmovilizar Objeto." + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Makes sure the object's children are not selectable." +msgstr "Asegurarse que los hijos de un objeto no sean seleccionables." + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Restores the object's children's ability to be selected." +msgstr "Restaurar la habilidad de seleccionar los hijos de un objeto." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Make Bones" @@ -3901,12 +3443,19 @@ msgid "View" msgstr "Ver" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Reset" -msgstr "Resetear Zoom" +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "Mostrar la Grilla" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Set.." -msgstr "Setear Zoom.." +#, fuzzy +msgid "Show helpers" +msgstr "Mostrar Huesos" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show rulers" +msgstr "Mostrar Huesos" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -3917,8 +3466,9 @@ msgid "Frame Selection" msgstr "Encuadrar Selección" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Anchor" -msgstr "Anchor" +#, fuzzy +msgid "Layout" +msgstr "Guardar Layout" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Keys" @@ -3941,12 +3491,21 @@ msgid "Clear Pose" msgstr "Reestablecer Pose" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Set a Value" -msgstr "Setear un Valor" +msgid "Drag pivot from mouse position" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Set pivot at mouse position" +msgstr "Setear Pos. Out de Curva" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap (Pixels):" -msgstr "Snap (Pixeles):" +msgid "Multiply grid step by 2" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Divide grid step by 2" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Add %s" @@ -3956,23 +3515,28 @@ msgstr "Agregar %s" msgid "Adding %s..." msgstr "Agregando %s..." -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Create Node" msgstr "Crear Nodo" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Error instancing scene from %s" msgstr "Error al instanciar escena desde %s" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "OK :(" msgstr "OK :(" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "No parent to instance a child at." msgstr "No hay padre al que instanciarle un hijo." -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "This operation requires a single selected node." msgstr "Esta operación requiere un solo nodo seleccionado." @@ -3988,45 +3552,6 @@ msgstr "" "Drag & drop + Shift : Agregar nodo como hermano\n" "Drag & drop + Alt : Cambiar tipo de nodo" -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Create Poly" -msgstr "Crear PolÃgono" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly" -msgstr "Editar PolÃgono" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly (Remove Point)" -msgstr "Editar PolÃgono (Remover Punto)" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Create a new polygon from scratch." -msgstr "Crear un nuevo polÃgono de cero." - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -msgid "" -"Edit existing polygon:\n" -"LMB: Move Point.\n" -"Ctrl+LMB: Split Segment.\n" -"RMB: Erase Point." -msgstr "" - #: editor/plugins/collision_polygon_editor_plugin.cpp msgid "Create Poly3D" msgstr "Crear Poly3D" @@ -4036,14 +3561,6 @@ msgid "Set Handle" msgstr "Setear Handle" #: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Creating Mesh Library" -msgstr "Crear LibrerÃa de Meshes" - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Thumbnail.." -msgstr "Miniatura.." - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Remove item %d?" msgstr "Remover item %d?" @@ -4066,19 +3583,38 @@ msgid "Update from Scene" msgstr "Acutalizar desde Escena" #: editor/plugins/curve_editor_plugin.cpp +msgid "Flat0" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Flat1" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp #, fuzzy -msgid "Modify Curve Point" -msgstr "Modificar Curva" +msgid "Ease in" +msgstr "Ease In" #: editor/plugins/curve_editor_plugin.cpp #, fuzzy +msgid "Ease out" +msgstr "Ease Out" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Smoothstep" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Modify Curve Point" +msgstr "Modificar Punto de Curva" + +#: editor/plugins/curve_editor_plugin.cpp msgid "Modify Curve Tangent" -msgstr "Modificar Mapa de Curvas" +msgstr "Modificar Tangente de Curva" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Load Curve Preset" -msgstr "Cargar preset" +msgstr "Cargar Preset de Curva" #: editor/plugins/curve_editor_plugin.cpp msgid "Add point" @@ -4089,31 +3625,28 @@ msgid "Remove point" msgstr "Quitar punto" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Left linear" -msgstr "Lineal" +msgstr "Lineal izquierda" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Right linear" -msgstr "Vista Derecha" +msgstr "Lineal derecha" #: editor/plugins/curve_editor_plugin.cpp msgid "Load preset" msgstr "Cargar preset" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Remove Curve Point" -msgstr "Quitar Punto del Path" +msgstr "Quitar Punto de Curva" #: editor/plugins/curve_editor_plugin.cpp msgid "Toggle Curve Linear Tangent" -msgstr "" +msgstr "Act./Desact. Tangente Lineal de Curva" #: editor/plugins/curve_editor_plugin.cpp msgid "Hold Shift to edit tangents individually" -msgstr "" +msgstr "Mantené Shift para editar tangentes individualmente" #: editor/plugins/gradient_editor_plugin.cpp msgid "Add/Remove Color Ramp Point" @@ -4141,28 +3674,26 @@ msgid "" "No OccluderPolygon2D resource on this node.\n" "Create and assign one?" msgstr "" +"No hay ningún recurso OccluderPolygon2D en este nodo.\n" +"Crear y asignar uno?" #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "Create Occluder Polygon" msgstr "Crear PolÃgono Oclusor" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Edit existing polygon:" msgstr "Editar polÃgono existente:" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "LMB: Move Point." msgstr "Click. Izq: Mover Punto." #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Ctrl+LMB: Split Segment." msgstr "Ctrl+Click Izq.: Partir Segmento en Dos." #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "RMB: Erase Point." msgstr "Click Der.: Borrar Punto." @@ -4263,6 +3794,10 @@ msgid "Create Outline" msgstr "Crear Outline" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh" +msgstr "Mesh" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Body" msgstr "Crear Body Estático Trimesh" @@ -4391,14 +3926,83 @@ msgstr "Escala al Azar:" msgid "Populate" msgstr "Poblar" +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Bake!" +msgstr "Hacer Bake!" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +#, fuzzy +msgid "Bake the navigation mesh.\n" +msgstr "Crear Mesh de Navegación" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +#, fuzzy +msgid "Clear the navigation mesh." +msgstr "Crear Mesh de Navegación" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Setting up Configuration..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Calculating grid size..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Creating heightfield..." +msgstr "Creando Octree de Luces" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Marking walkable triangles..." +msgstr "Strings Traducibles.." + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Constructing compact heightfield..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Eroding walkable area..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Partioning..." +msgstr "Advertencia" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Creating contours..." +msgstr "Creando Octree de Texturas" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Creating polymesh..." +msgstr "Crear Outline Mesh.." + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Converting to native navigation mesh..." +msgstr "Crear Mesh de Navegación" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Navigation Mesh Generator Setup:" +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Parsing Geometry..." +msgstr "Parseando GeometrÃa" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Done!" +msgstr "" + #: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Create Navigation Polygon" msgstr "Crear PolÃgono de Navegación" -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Remove Poly And Point" -msgstr "Remover PolÃgono y Punto" - #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Clear Emission Mask" msgstr "Limpiar Máscara de Emisión" @@ -4435,9 +4039,8 @@ msgstr "Cargar Máscara de Emisión" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "Particles" -msgstr "Vértices" +msgstr "PartÃculas" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generated Point Count:" @@ -4572,15 +4175,18 @@ msgid "Curve Point #" msgstr "Punto # de Curva" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Point Pos" +#, fuzzy +msgid "Set Curve Point Position" msgstr "Setear Pos. de Punto de Curva" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve In Pos" +#, fuzzy +msgid "Set Curve In Position" msgstr "Setear Pos. In de Curva" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Out Pos" +#, fuzzy +msgid "Set Curve Out Position" msgstr "Setear Pos. Out de Curva" #: editor/plugins/path_editor_plugin.cpp @@ -4640,6 +4246,14 @@ msgid "Scale Polygon" msgstr "Escalar PolÃgono" #: editor/plugins/polygon_2d_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit" +msgstr "Editar" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon->UV" msgstr "PolÃgono->UV" @@ -4694,63 +4308,10 @@ msgstr "Cargar Recurso" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "Pegar" -#: editor/plugins/rich_text_editor_plugin.cpp -msgid "Parse BBCode" -msgstr "Parsear BBCode" - -#: editor/plugins/sample_editor_plugin.cpp -msgid "Length:" -msgstr "Largo:" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Open Sample File(s)" -msgstr "Abrir Archivo(s) de Muestra" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "ERROR: Couldn't load sample!" -msgstr "ERROR: No se pudo cargar la muestra!" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Add Sample" -msgstr "Agregar Muestra" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Rename Sample" -msgstr "Renombrar Muestra" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Delete Sample" -msgstr "Eliminar Muestra" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "16 Bits" -msgstr "16 Bits" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "8 Bits" -msgstr "8 Bits" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Stereo" -msgstr "Estereo" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Mono" -msgstr "Mono" - -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/script_editor_debugger.cpp -msgid "Format" -msgstr "Formato" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Pitch" -msgstr "Altura" - #: editor/plugins/script_editor_plugin.cpp msgid "Clear Recent Files" msgstr "Reestablecer Archivos Recientes" @@ -4760,6 +4321,8 @@ msgid "" "Close and save changes?\n" "\"" msgstr "" +"Cerrar y guardar cambios?\n" +"\"" #: editor/plugins/script_editor_plugin.cpp msgid "Error while saving theme" @@ -4787,7 +4350,7 @@ msgstr "Guardar Tema Como.." #: editor/plugins/script_editor_plugin.cpp msgid " Class Reference" -msgstr "" +msgstr " Referencia de Clases" #: editor/plugins/script_editor_plugin.cpp msgid "Next script" @@ -4841,10 +4404,13 @@ msgstr "Cerrar Docs" msgid "Close All" msgstr "Cerrar Todos" +#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp +msgid "Run" +msgstr "Ejecutar" + #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Toggle Scripts Panel" -msgstr "Act/Desact. Favorito" +msgstr "Act/Desact. Panel de Scripts" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -4879,21 +4445,8 @@ msgid "Keep Debugger Open" msgstr "Mantener el Debugger Abierto" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Debug with external editor" -msgstr "Abrir el Editor siguiente" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Window" -msgstr "Ventana" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Left" -msgstr "Mover a la Izquierda" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Right" -msgstr "Mover a la Derecha" +msgstr "Debuguear con editor externo" #: editor/plugins/script_editor_plugin.cpp msgid "Open Godot online documentation" @@ -4952,7 +4505,7 @@ msgstr "" #: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." -msgstr "" +msgstr "Solo se pueden depositar recursos del sistema de archivos." #: editor/plugins/script_text_editor.cpp msgid "Pick Color" @@ -4982,7 +4535,7 @@ msgstr "Cortar" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Copy" msgstr "Copiar" @@ -5001,9 +4554,8 @@ msgid "Move Down" msgstr "Bajar" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Delete Line" -msgstr "Eliminar Punto" +msgstr "Eliminar LÃnea" #: editor/plugins/script_text_editor.cpp msgid "Indent Left" @@ -5246,10 +4798,6 @@ msgid "View Plane Transform." msgstr "Ver Transformación en Plano." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Scaling to %s%%." -msgstr "Escalando a %s%%." - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." msgstr "Torando %s grados." @@ -5266,10 +4814,6 @@ msgid "Top View." msgstr "Vista Superior." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Top" -msgstr "Cima" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "Vista Anterior." @@ -5370,9 +4914,8 @@ msgid "Audio Listener" msgstr "Oyente de Audio" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Doppler Enable" -msgstr "Activar" +msgstr "Activar Doppler" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Left" @@ -5403,26 +4946,26 @@ msgid "Freelook Speed Modifier" msgstr "Modificador de Velocidad de Vista Libre" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "preview" -msgstr "Vista Previa" +msgstr "vista previa" #: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" msgstr "Dialogo XForm" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Select Mode (Q)\n" -msgstr "Modo Seleccionar" +msgstr "Modo Seleccionar (Q)\n" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "" "Drag: Rotate\n" "Alt+Drag: Move\n" "Alt+RMB: Depth list selection" -msgstr "Alt+Click Der.: Selección en depth list" +msgstr "" +"Arrastrar: Rotar\n" +"Alt+Arrastrar: Mover\n" +"Alt+Click Der.: Selección en depth list" #: editor/plugins/spatial_editor_plugin.cpp msgid "Move Mode (W)" @@ -5501,6 +5044,10 @@ msgid "Transform" msgstr "Transformar" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Configure Snap.." +msgstr "Configurar Snap.." + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Local Coords" msgstr "Coordenadas Locales" @@ -5646,6 +5193,10 @@ msgid "Speed (FPS):" msgstr "Velocidad (FPS):" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Loop" +msgstr "Loop" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animation Frames" msgstr "Cuadros de Animación" @@ -5658,21 +5209,22 @@ msgid "Insert Empty (After)" msgstr "Insertar VacÃo (Después)" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Up" -msgstr "Arriba" +#, fuzzy +msgid "Move (Before)" +msgstr "Mover Nodo(s)" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Down" -msgstr "Abajo" +#, fuzzy +msgid "Move (After)" +msgstr "Mover a la Izquierda" #: editor/plugins/style_box_editor_plugin.cpp msgid "StyleBox Preview:" msgstr "Vista Previa de StyleBox:" #: editor/plugins/texture_region_editor_plugin.cpp -#, fuzzy msgid "Set Region Rect" -msgstr "Setear region_rect" +msgstr "Setear Region Rect" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Snap Mode:" @@ -5732,14 +5284,12 @@ msgid "Remove Item" msgstr "Remover Item" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All Items" -msgstr "Quitar Items de Clases" +msgstr "Quitar Todos los Ãtems" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All" -msgstr "Quitar" +msgstr "Quitar Todos" #: editor/plugins/theme_editor_plugin.cpp msgid "Theme" @@ -5827,11 +5377,14 @@ msgid "Style" msgstr "Estilo" #: editor/plugins/theme_editor_plugin.cpp +msgid "Font" +msgstr "TipografÃa" + +#: editor/plugins/theme_editor_plugin.cpp msgid "Color" msgstr "Color" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Erase Selection" msgstr "Eliminar Selección" @@ -5840,16 +5393,14 @@ msgid "Paint TileMap" msgstr "Pintar TileMap" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Line Draw" -msgstr "Lineal" +msgstr "Dibujar LÃnea" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Rectangle Paint" -msgstr "" +msgstr "Pintar Rectángulo" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Bucket Fill" msgstr "Balde" @@ -5878,8 +5429,9 @@ msgid "Mirror Y" msgstr "Espejar Y" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Bucket" -msgstr "Balde" +#, fuzzy +msgid "Paint Tile" +msgstr "Pintar TileMap" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Pick Tile" @@ -5942,6 +5494,11 @@ msgid "Delete preset '%s'?" msgstr "Eliminar preset '%s'?" #: editor/project_export.cpp +#, fuzzy +msgid "Export templates for this platform are missing/corrupted: " +msgstr "Faltan las plantillas de exportación para esta plataforma:" + +#: editor/project_export.cpp msgid "Presets" msgstr "Presets" @@ -5996,18 +5553,16 @@ msgid "Make Patch" msgstr "Crear Parche" #: editor/project_export.cpp -#, fuzzy msgid "Features" -msgstr "Textura" +msgstr "CaracterÃsticas" #: editor/project_export.cpp msgid "Custom (comma-separated):" -msgstr "" +msgstr "Personalizado (separado por comas):" #: editor/project_export.cpp -#, fuzzy msgid "Feature List:" -msgstr "Lista de Métodos:" +msgstr "Lista de CaracterÃsticas:" #: editor/project_export.cpp msgid "Export PCK/Zip" @@ -6018,30 +5573,61 @@ msgid "Export templates for this platform are missing:" msgstr "Faltan las plantillas de exportación para esta plataforma:" #: editor/project_export.cpp +#, fuzzy +msgid "Export templates for this platform are missing/corrupted:" +msgstr "Faltan las plantillas de exportación para esta plataforma:" + +#: editor/project_export.cpp msgid "Export With Debug" msgstr "Exportar Como Debug" #: editor/project_manager.cpp -msgid "Invalid project path, the path must exist!" -msgstr "Ruta de proyecto inválida, la ruta debe existir!" +#, fuzzy +msgid "The path does not exists." +msgstr "El archivo existe." #: editor/project_manager.cpp -msgid "Invalid project path, project.godot must not exist." -msgstr "Ruta de proyecto inválida, project.godot no debe existir." +#, fuzzy +msgid "Please choose a 'project.godot' file." +msgstr "Por favor exportá afuera de la carpeta de proyecto!" #: editor/project_manager.cpp -msgid "Invalid project path, project.godot must exist." -msgstr "Ruta de proyecto inválida, project.godot debe existir." +msgid "" +"Your project will be created in a non empty folder (you might want to create " +"a new folder)." +msgstr "" + +#: editor/project_manager.cpp +msgid "Please choose a folder that does not contain a 'project.godot' file." +msgstr "" #: editor/project_manager.cpp msgid "Imported Project" msgstr "Proyecto Importado" #: editor/project_manager.cpp +msgid " " +msgstr "" + +#: editor/project_manager.cpp +msgid "It would be a good idea to name your project." +msgstr "" + +#: editor/project_manager.cpp msgid "Invalid project path (changed anything?)." msgstr "Ruta de proyecto inválida (cambiaste algo?)." #: editor/project_manager.cpp +#, fuzzy +msgid "Couldn't get project.godot in project path." +msgstr "No se pudo crear project.godot en la ruta de proyecto." + +#: editor/project_manager.cpp +#, fuzzy +msgid "Couldn't edit project.godot in project path." +msgstr "No se pudo crear project.godot en la ruta de proyecto." + +#: editor/project_manager.cpp msgid "Couldn't create project.godot in project path." msgstr "No se pudo crear project.godot en la ruta de proyecto." @@ -6050,38 +5636,49 @@ msgid "The following files failed extraction from package:" msgstr "Los siguientes archivos no se pudieron extraer del paquete:" #: editor/project_manager.cpp +#, fuzzy +msgid "Rename Project" +msgstr "Proyecto Sin Nombre" + +#: editor/project_manager.cpp +#, fuzzy +msgid "Couldn't get project.godot in the project path." +msgstr "No se pudo crear project.godot en la ruta de proyecto." + +#: editor/project_manager.cpp +msgid "New Game Project" +msgstr "Nuevo Proyecto de Juego" + +#: editor/project_manager.cpp msgid "Import Existing Project" msgstr "Importar Proyecto Existente" #: editor/project_manager.cpp -msgid "Project Path (Must Exist):" -msgstr "Ruta del Proyecto (Debe Existir):" +msgid "Create New Project" +msgstr "Crear Proyecto Nuevo" + +#: editor/project_manager.cpp +msgid "Install Project:" +msgstr "Instalar Proyecto:" #: editor/project_manager.cpp msgid "Project Name:" msgstr "Nombre del Proyecto:" #: editor/project_manager.cpp -msgid "Create New Project" -msgstr "Crear Proyecto Nuevo" +#, fuzzy +msgid "Create folder" +msgstr "Crear Carpeta" #: editor/project_manager.cpp msgid "Project Path:" msgstr "Ruta del Proyecto:" #: editor/project_manager.cpp -msgid "Install Project:" -msgstr "Instalar Proyecto:" - -#: editor/project_manager.cpp msgid "Browse" msgstr "Examinar" #: editor/project_manager.cpp -msgid "New Game Project" -msgstr "Nuevo Proyecto de Juego" - -#: editor/project_manager.cpp msgid "That's a BINGO!" msgstr "BINGO!" @@ -6090,25 +5687,32 @@ msgid "Unnamed Project" msgstr "Proyecto Sin Nombre" #: editor/project_manager.cpp +#, fuzzy +msgid "Can't open project" +msgstr "No se puede ejecutar el proyecto" + +#: editor/project_manager.cpp msgid "Are you sure to open more than one project?" msgstr "¿Estás seguro/a que querés abrir mas de un proyecto?" #: editor/project_manager.cpp -#, fuzzy msgid "" "Can't run project: no main scene defined.\n" "Please edit the project and set the main scene 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 categorÃa " -"'aplicación'." +"No sé puede ejecutar el proyecto: No se ha definido ninguna escena " +"principal.\n" +"Por favor editá el proyecto y seteá la escena principal en \"Ajustes de " +"Proyecto\" bajo la categorÃa 'Aplicación'." #: editor/project_manager.cpp msgid "" "Can't run project: Assets need to be imported.\n" "Please edit the project to trigger the initial import." msgstr "" +"No sé puede ejecutar el proyecto: Es necesario importar los assets.\n" +"Por favor editá el proyecto para provocar la importación inicial." #: editor/project_manager.cpp msgid "Are you sure to run more than one project?" @@ -6133,10 +5737,6 @@ msgid "Project List" msgstr "Listado de Proyectos" #: editor/project_manager.cpp -msgid "Run" -msgstr "Ejecutar" - -#: editor/project_manager.cpp msgid "Scan" msgstr "Escanear" @@ -6157,9 +5757,8 @@ msgid "Exit" msgstr "Salir" #: editor/project_manager.cpp -#, fuzzy msgid "Can't run project" -msgstr "No se puede conectar." +msgstr "No se puede ejecutar el proyecto" #: editor/project_settings_editor.cpp msgid "Key " @@ -6194,17 +5793,14 @@ msgid "Add Input Action Event" msgstr "Agregar Evento de Acción de Entrada" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Meta+" msgstr "Meta+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Shift+" msgstr "Shift+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Alt+" msgstr "Alt+" @@ -6265,7 +5861,7 @@ msgstr "Cambiar" msgid "Joypad Axis Index:" msgstr "Indice del Eje del Gamepad:" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Axis" msgstr "Eje" @@ -6285,57 +5881,64 @@ msgstr "Borrar Evento de Acción de Entrada" msgid "Add Event" msgstr "Agregar Evento" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Device" msgstr "Dispositivo" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Button" msgstr "Botón" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Left Button." msgstr "Botón Izquierdo." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Right Button." msgstr "Botón Derecho." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Middle Button." msgstr "Botón del Medio." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Up." msgstr "Rueda Arriba." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Down." msgstr "Rueda Abajo." #: editor/project_settings_editor.cpp -#, fuzzy msgid "Add Global Property" -msgstr "Agregar Propiedad Getter" +msgstr "Agregar Propiedad Global" #: editor/project_settings_editor.cpp -msgid "Select an setting item first!" -msgstr "" +#, fuzzy +msgid "Select a setting item first!" +msgstr "Selecciona un Ãtem de configuración primero!" #: editor/project_settings_editor.cpp -#, fuzzy msgid "No property '" -msgstr "Propiedad:" +msgstr "No existe la propiedad '" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Setting '" -msgstr "Configuración" +msgstr "Ajuste '" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Delete Item" -msgstr "Eliminar Entrada" +msgstr "Eliminar Ãtem" + +#: editor/project_settings_editor.cpp +#, fuzzy +msgid "Can't contain '/' or ':'" +msgstr "No se puede conectar al host:" + +#: editor/project_settings_editor.cpp +#, fuzzy +msgid "Already existing" +msgstr "Act/Desact. Persistente" #: editor/project_settings_editor.cpp msgid "Error saving settings." @@ -6347,7 +5950,7 @@ msgstr "Ajustes guardados satisfactoriamente." #: editor/project_settings_editor.cpp msgid "Override for Feature" -msgstr "" +msgstr "Sobreescribir para CaracterÃstica" #: editor/project_settings_editor.cpp msgid "Add Translation" @@ -6391,7 +5994,7 @@ msgstr "Propiedad:" #: editor/project_settings_editor.cpp msgid "Override For.." -msgstr "" +msgstr "Sobreescribir Para.." #: editor/project_settings_editor.cpp msgid "Input Map" @@ -6478,26 +6081,34 @@ msgid "Assign" msgstr "Asignar" #: editor/property_editor.cpp -#, fuzzy msgid "Select Node" -msgstr "Seleccionar un Nodo" +msgstr "Seleccionar Nodo" #: editor/property_editor.cpp msgid "New Script" msgstr "Nuevo Script" #: editor/property_editor.cpp +#, fuzzy +msgid "Make Unique" +msgstr "Crear Huesos" + +#: editor/property_editor.cpp msgid "Show in File System" msgstr "Mostrar en Sistema de Archivos" #: editor/property_editor.cpp +#, fuzzy +msgid "Convert To %s" +msgstr "Convertir A.." + +#: editor/property_editor.cpp msgid "Error loading file: Not a resource!" msgstr "Error al cargar el archivo: No es un recurso!" #: editor/property_editor.cpp -#, fuzzy msgid "Selected node is not a Viewport!" -msgstr "Seleccionar Nodo(s) para Importar" +msgstr "El nodo seleccionado no es un Viewport!" #: editor/property_editor.cpp msgid "Pick a Node" @@ -6528,6 +6139,11 @@ msgid "Select Property" msgstr "Seleccionar Propiedad" #: editor/property_selector.cpp +#, fuzzy +msgid "Select Virtual Method" +msgstr "Seleccionar Método" + +#: editor/property_selector.cpp msgid "Select Method" msgstr "Seleccionar Método" @@ -6556,26 +6172,6 @@ msgstr "Mantener Transformación Global" msgid "Reparent" msgstr "Reemparentar" -#: editor/resources_dock.cpp -msgid "Create New Resource" -msgstr "Crear Nuevo Recurso" - -#: editor/resources_dock.cpp -msgid "Open Resource" -msgstr "Abrir Recurso" - -#: editor/resources_dock.cpp -msgid "Save Resource" -msgstr "Guardar Recurso" - -#: editor/resources_dock.cpp -msgid "Resource Tools" -msgstr "Herramientas de Recursos" - -#: editor/resources_dock.cpp -msgid "Make Local" -msgstr "Crear Local" - #: editor/run_settings_dialog.cpp msgid "Run Mode:" msgstr "Modo de Ejecución:" @@ -6707,14 +6303,6 @@ msgid "Sub-Resources:" msgstr "Sub-Recursos:" #: editor/scene_tree_dock.cpp -msgid "Edit Groups" -msgstr "Editar Grupos" - -#: editor/scene_tree_dock.cpp -msgid "Edit Connections" -msgstr "Editar Conexiones" - -#: editor/scene_tree_dock.cpp msgid "Clear Inheritance" msgstr "Limpiar Herencia" @@ -6775,9 +6363,8 @@ msgstr "" "existe ningún nodo raÃz." #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Filter nodes" -msgstr "Filtros" +msgstr "Filtrar nodos" #: editor/scene_tree_dock.cpp msgid "Attach a new or existing script for the selected node." @@ -6872,18 +6459,16 @@ msgid "Scene Tree (Nodes):" msgstr "Arbol de Escenas (Nodos):" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "Node Configuration Warning!" -msgstr "Advertencia de configuración de nodo:" +msgstr "Advertencia de Configuración de Nodo!" #: editor/scene_tree_editor.cpp msgid "Select a Node" msgstr "Seleccionar un Nodo" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Error loading template '%s'" -msgstr "Error al cargar la imagen:" +msgstr "Error al cargar la plantilla '%s'" #: editor/script_create_dialog.cpp msgid "Error - Could not create script in filesystem." @@ -6910,6 +6495,15 @@ msgid "Invalid base path" msgstr "Ruta base inválida" #: editor/script_create_dialog.cpp +msgid "Directory of the same name exists" +msgstr "" + +#: editor/script_create_dialog.cpp +#, fuzzy +msgid "File exists, will be reused" +msgstr "El Archivo Existe, Sobreescribir?" + +#: editor/script_create_dialog.cpp msgid "Invalid extension" msgstr "Extensión invalida" @@ -6950,6 +6544,10 @@ msgid "Load existing script file" msgstr "Cargar script existente" #: editor/script_create_dialog.cpp +msgid "Language" +msgstr "Lenguaje" + +#: editor/script_create_dialog.cpp msgid "Inherits" msgstr "Hereda" @@ -6990,6 +6588,10 @@ msgid "Function:" msgstr "Funcion:" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Errors" msgstr "Errores" @@ -7070,6 +6672,10 @@ msgid "Type" msgstr "Tipo" #: editor/script_editor_debugger.cpp +msgid "Format" +msgstr "Formato" + +#: editor/script_editor_debugger.cpp msgid "Usage" msgstr "Uso" @@ -7103,7 +6709,7 @@ msgstr "Cambiar Radio de Luces" #: editor/spatial_editor_gizmos.cpp msgid "Change AudioStreamPlayer3D Emission Angle" -msgstr "" +msgstr "Cambiar el Ãngulo de Emisión del AudioStreamPlayer3D" #: editor/spatial_editor_gizmos.cpp msgid "Change Camera FOV" @@ -7145,12 +6751,30 @@ msgstr "Cambiar Particulas AABB" msgid "Change Probe Extents" msgstr "Cambiar Extensión de Sonda" +#: modules/gdnative/gd_native_library_editor.cpp +#, fuzzy +msgid "Library" +msgstr "MeshLibrary.." + +#: modules/gdnative/gd_native_library_editor.cpp +#, fuzzy +msgid "Status" +msgstr "Estado:" + +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Libraries: " +msgstr "" + +#: modules/gdnative/register_types.cpp +msgid "GDNative" +msgstr "" + #: 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/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "" @@ -7193,133 +6817,112 @@ msgstr "Diccionario de instancias inválido (subclases inválidas)" #: modules/gdscript/gd_functions.cpp msgid "Object can't provide a length." -msgstr "" +msgstr "El objeto no puede proveer un largo." #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Delete Selection" -msgstr "Eliminar Seleccionados" +msgstr "Eliminar Seleccionados en GridMap" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Duplicate Selection" -msgstr "Duplicar Selección" - -#: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Paint" -msgstr "" +msgstr "Duplicar Selección en GridMap" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Snap View" -msgstr "Vista Superior" +msgstr "Anclar Vista" #: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy msgid "Prev Level (%sDown Wheel)" -msgstr "" +msgstr "Nivel Prev. (" #: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy msgid "Next Level (%sUp Wheel)" -msgstr "" +msgstr "Nivel Anterior (" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Clip Disabled" -msgstr "Desactivado" +msgstr "Clip Desactivado" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Clip Above" -msgstr "" +msgstr "Clip Arriba" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Clip Below" -msgstr "" +msgstr "Clip Debajo" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Edit X Axis" -msgstr "" +msgstr "Editar Eje X" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Edit Y Axis" -msgstr "" +msgstr "Editar Eje Y" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Edit Z Axis" -msgstr "" +msgstr "Editar Eje Z" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Cursor Rotate X" -msgstr "Ctrl: Rotar" +msgstr "Rotar X en Cursor" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Cursor Rotate Y" -msgstr "Ctrl: Rotar" +msgstr "Rotar Y en Cursor" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Cursor Rotate Z" -msgstr "Ctrl: Rotar" +msgstr "Rotar Z en Cursor" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Back Rotate X" -msgstr "" +msgstr "Rotación Inversa X en Cursor" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Back Rotate Y" -msgstr "" +msgstr "Rotación Inversa Y en Cursor" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Back Rotate Z" -msgstr "" +msgstr "Rotación Inversa Z en Cursor" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Clear Rotation" -msgstr "" +msgstr "Restablecer Rotación en Cursor" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Create Area" -msgstr "Crear Nuevo" +msgstr "Crear Ãrea" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Create Exterior Connector" -msgstr "Crear Proyecto Nuevo" +msgstr "Crear Conector Exterior" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Erase Area" -msgstr "Borrar TileMap" +msgstr "Borrar Ãrea" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Selection -> Duplicate" -msgstr "Solo Selección" +msgstr "Selección -> Duplicar" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Selection -> Clear" -msgstr "Solo Selección" +msgstr "Selección -> Restablecer" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Settings" -msgstr "Ajustes de Snap" +msgstr "Ajustes de GridMap" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Pick Distance:" -msgstr "Instancia:" - -#: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy -msgid "Tiles" -msgstr " Archivos" +msgstr "Elegir Instancia:" -#: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Areas" +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "Builds" msgstr "" #: modules/visual_script/visual_script.cpp @@ -7360,29 +6963,24 @@ msgid "Stack overflow with stack depth: " msgstr "Stack overflow con la profundidad del stack: " #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Signal Arguments" -msgstr "Editar Argumentos de Señal:" +msgstr "Editar Argumentos de Señal" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Argument Type" -msgstr "Cambiar Tipo de Valor del Array" +msgstr "Cambiar Tipo de Argumento" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Argument name" -msgstr "Cambiar Nombre de Entrada" +msgstr "Cambiar Nombre de Argumento" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Set Variable Default Value" -msgstr "Cambiar Valor por Defecto" +msgstr "Asignar Valor Predeterminado de Variable" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Set Variable Type" -msgstr "Editar Variable:" +msgstr "Editar Tipo de Variable" #: modules/visual_script/visual_script_editor.cpp msgid "Functions:" @@ -7433,14 +7031,12 @@ msgid "Add Node" msgstr "Agregar Nodo" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Remove VisualScript Nodes" -msgstr "Quitar claves inválidas" +msgstr "Quitar Nodos VisualScript" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Duplicate VisualScript Nodes" -msgstr "Duplicar Nodo(s) de Gráfico" +msgstr "Duplicar Nodos VisualScript" #: modules/visual_script/visual_script_editor.cpp msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature." @@ -7487,24 +7083,20 @@ msgid "Add Setter Property" msgstr "Agregar Propiedad Setter" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Base Type" -msgstr "Cambiar Tipo" +msgstr "Cambiar Tipo Base" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Move Node(s)" -msgstr "Quitar Nodo(s)" +msgstr "Mover Nodo(s)" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Remove VisualScript Node" -msgstr "Quitar Nodo de Gráfico de Shaders" +msgstr "Quitar Nodo de VisualScript" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Connect Nodes" -msgstr "Conectar a Nodo:" +msgstr "Conectar Nodos" #: modules/visual_script/visual_script_editor.cpp msgid "Condition" @@ -7531,46 +7123,48 @@ msgid "Return" msgstr "Retornar" #: modules/visual_script/visual_script_editor.cpp +msgid "Call" +msgstr "Llamar" + +#: modules/visual_script/visual_script_editor.cpp msgid "Get" msgstr "Obtener" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy +msgid "Script already has function '%s'" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Input Value" -msgstr "Cambiar Nombre de Entrada" +msgstr "Cambiar Valor de Entrada" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Can't copy the function node." -msgstr "No se puede operar en '..'" +msgstr "No se puede copiar el nodo de función." #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Clipboard is empty!" -msgstr "Clipboard de Recursos vacÃo!" +msgstr "El portapapeles está vacÃo!" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Paste VisualScript Nodes" -msgstr "Pegar Nodos" +msgstr "Pegar Nodos de VisualScript" #: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "Quitar Función" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Edit Variable" -msgstr "Editar Variable:" +msgstr "Editar Variable" #: modules/visual_script/visual_script_editor.cpp msgid "Remove Variable" msgstr "Quitar Variable" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Edit Signal" -msgstr "Editando Señal:" +msgstr "Editar Señal" #: modules/visual_script/visual_script_editor.cpp msgid "Remove Signal" @@ -7811,6 +7405,9 @@ msgid "" "by the physics engine when running.\n" "Change the size in children collision shapes instead." msgstr "" +"Los cambios de tamaño a un RigidBody2D (en modos character o rigid) serán " +"sobreescritos por el motor de fÃsica al ejecutar.\n" +"Cambiá el tamaño de los collision shapes hijos." #: scene/2d/remote_transform_2d.cpp msgid "Path property must point to a valid Node2D node to work." @@ -7842,31 +7439,35 @@ msgstr "" #: scene/3d/arvr_nodes.cpp msgid "ARVRCamera must have an ARVROrigin node as its parent" -msgstr "" +msgstr "ARVRCamera debe tener un nodo ARVROrigin como su padre" #: scene/3d/arvr_nodes.cpp msgid "ARVRController must have an ARVROrigin node as its parent" -msgstr "" +msgstr "ARVRController debe tener un nodo ARVROrigin como su padre" #: scene/3d/arvr_nodes.cpp msgid "" "The controller id must not be 0 or this controller will not be bound to an " "actual controller" msgstr "" +"El id de controlador no debe ser 0 o este controlador no será vinculado a un " +"controlador real" #: scene/3d/arvr_nodes.cpp msgid "ARVRAnchor must have an ARVROrigin node as its parent" -msgstr "" +msgstr "ARVRAnchor debe tener un nodo ARVROrigin como su padre" #: scene/3d/arvr_nodes.cpp msgid "" "The anchor id must not be 0 or this anchor will not be bound to an actual " "anchor" msgstr "" +"El id de anclaje no debe ser 0 o este anclaje no podrá ser vinculado a un " +"anclaje real" #: scene/3d/arvr_nodes.cpp msgid "ARVROrigin requires an ARVRCamera child node" -msgstr "" +msgstr "ARVROrigin requiere un nodo hijo ARVRCamera" #: scene/3d/collision_polygon.cpp msgid "" @@ -7924,6 +7525,9 @@ msgid "" "the physics engine when running.\n" "Change the size in children collision shapes instead." msgstr "" +"Los cambios de tamaño a RigidBody (en modo character o rigid) seran " +"sobreescritos por el motor de fÃsica al ejecutar.\n" +"Cambiá el tamaño de los collision shapes hijos." #: scene/3d/remote_transform.cpp msgid "Path property must point to a valid Spatial node to work." @@ -7945,16 +7549,25 @@ msgstr "" "Un recurso SpriteFrames debe ser creado o asignado en la propiedad 'Frames' " "para que AnimatedSprite3D pueda mostrar frames." +#: scene/3d/vehicle_body.cpp +msgid "" +"VehicleWheel serves to provide a wheel system to a VehicleBody. Please use " +"it as a child of a VehicleBody." +msgstr "" + #: scene/gui/color_picker.cpp -#, fuzzy msgid "Raw Mode" -msgstr "Modo Paneo" +msgstr "Modo Raw" #: scene/gui/color_picker.cpp msgid "Add current color as a preset" msgstr "Agregar color actual como preset" #: scene/gui/dialogs.cpp +msgid "Cancel" +msgstr "Cancelar" + +#: scene/gui/dialogs.cpp msgid "Alert!" msgstr "Alerta!" @@ -7962,10 +7575,6 @@ msgstr "Alerta!" msgid "Please Confirm..." msgstr "Confirmá, por favor..." -#: scene/gui/input_action.cpp -msgid "Ctrl+" -msgstr "Ctrl+" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -8006,6 +7615,635 @@ msgstr "" "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 +msgid "Error initializing FreeType." +msgstr "Error inicializando FreeType." + +#: scene/resources/dynamic_font.cpp +msgid "Unknown font format." +msgstr "Formato de tipografÃa desconocido." + +#: scene/resources/dynamic_font.cpp +msgid "Error loading font." +msgstr "Error cargando tipografÃa." + +#: scene/resources/dynamic_font.cpp +msgid "Invalid font size." +msgstr "Tamaño de tipografÃa inválido." + +#~ msgid "Method List For '%s':" +#~ msgstr "Lista de Métodos Para '%s':" + +#~ msgid "Arguments:" +#~ msgstr "Argumentos:" + +#~ msgid "Return:" +#~ msgstr "Retornar:" + +#~ msgid "Added:" +#~ msgstr "Agregado:" + +#~ msgid "Removed:" +#~ msgstr "Removido:" + +#~ msgid "Error saving atlas:" +#~ msgstr "Error al guardar atlas:" + +#~ msgid "Could not save atlas subtexture:" +#~ msgstr "No se pudo guardar la subtextura de altas:" + +#~ msgid "Exporting for %s" +#~ msgstr "Exportando para %s" + +#~ msgid "Setting Up.." +#~ msgstr "Configurando.." + +#~ msgid "Error loading scene." +#~ msgstr "Error al cargar la escena." + +#~ msgid "Re-Import" +#~ msgstr "Reimportar" + +#~ msgid "Please wait for scan to complete." +#~ msgstr "Por favor aguarda a que el scan termine." + +#~ msgid "Current scene must be saved to re-import." +#~ msgstr "La escena actual debe ser guardada para reimportar." + +#~ msgid "Save & Re-Import" +#~ msgstr "Guardar y Reimportar" + +#~ msgid "Re-Importing" +#~ msgstr "Reimportando" + +#~ msgid "Re-Import Changed Resources" +#~ msgstr "Reimportar Recursos Cambiados" + +#~ msgid "Loading Export Templates" +#~ msgstr "Cargando Plantillas de Exportación" + +#~ msgid "" +#~ "\n" +#~ "Status: Needs Re-Import" +#~ msgstr "" +#~ "\n" +#~ "Estado: Necesita Reimportación" + +#~ msgid "Same source and destination files, doing nothing." +#~ msgstr "" +#~ "Archivos de origen y destino iguales, no se realizará ninguna acción." + +#~ msgid "Target file exists, can't overwrite. Delete first." +#~ msgstr "" +#~ "El archivo destino existe; no sé puede sobreescribir. Eliminalo primero." + +#~ msgid "Same source and destination paths, doing nothing." +#~ msgstr "Ruta de origen y destino iguales, no se realizará ninguna acción." + +#~ msgid "Can't move directories to within themselves." +#~ msgstr "No se pueden mover directorios dentro de si mismos." + +#~ msgid "Can't rename deps for:\n" +#~ msgstr "No se pueden renombrar las dependencias para:\n" + +#~ msgid "Error moving file:\n" +#~ msgstr "Error al mover el archivo:\n" + +#~ msgid "Pick New Name and Location For:" +#~ msgstr "Elejà un Nuevo Nombre y Ubicación Para:" + +#~ msgid "No files selected!" +#~ msgstr "Ningún Archivo seleccionado!" + +#~ msgid "Info" +#~ msgstr "Info" + +#~ msgid "Re-Import.." +#~ msgstr "Reimportando.." + +#~ msgid "No bit masks to import!" +#~ msgstr "Sin máscaras de bits para importar!" + +#~ msgid "Target path is empty." +#~ msgstr "La ruta de destino está vacÃa." + +#~ msgid "Target path must be a complete resource path." +#~ msgstr "La ruta de destino debe ser una ruta de recursos completa." + +#~ msgid "Target path must exist." +#~ msgstr "La ruta de destino debe existir." + +#~ msgid "Save path is empty!" +#~ msgstr "La ruta de guardado esta vacÃa!" + +#~ msgid "Import BitMasks" +#~ msgstr "Importar BitMasks" + +#~ msgid "Source Texture(s):" +#~ msgstr "Textura(s) de Origen:" + +#~ msgid "Target Path:" +#~ msgstr "Ruta de Destino:" + +#~ msgid "Accept" +#~ msgstr "Aceptar" + +#~ msgid "Bit Mask" +#~ msgstr "Máscara de Bits" + +#~ msgid "No source font file!" +#~ msgstr "Sin archivo de tipografÃas de origen!" + +#~ msgid "No target font resource!" +#~ msgstr "Sin recurso de tipografÃas de destino!" + +#~ msgid "" +#~ "Invalid file extension.\n" +#~ "Please use .font." +#~ msgstr "" +#~ "Extension de archivo inválida.\n" +#~ "Usá .fnt, por favor." + +#~ msgid "Couldn't save font." +#~ msgstr "No se pudo guardar la tipografÃa." + +#~ msgid "Source Font:" +#~ msgstr "TipografÃa de Origen:" + +#~ msgid "Source Font Size:" +#~ msgstr "Tamaño de la TipografÃa de Origen:" + +#~ msgid "Dest Resource:" +#~ msgstr "Recurso de Dest:" + +#~ msgid "The quick brown fox jumps over the lazy dog." +#~ msgstr "El veloz murciélago hindú comÃa feliz cardillo y kiwi." + +#~ msgid "Test:" +#~ msgstr "Prueba:" + +#~ msgid "Options:" +#~ msgstr "Opciones:" + +#~ msgid "Font Import" +#~ msgstr "Importar TipografÃas" + +#~ 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." + +#~ msgid "Failed opening as BMFont file." +#~ msgstr "Error al abrir como archivo BMFont." + +#~ msgid "Invalid font custom source." +#~ msgstr "Origen personalizado de tipografÃa inválido." + +#~ msgid "No meshes to import!" +#~ msgstr "Sin meshes para importar!" + +#~ msgid "Single Mesh Import" +#~ msgstr "Importar Mesh Individual" + +#~ msgid "Source Mesh(es):" +#~ msgstr "Importar Mesh(es) de Origen:" + +#~ msgid "Surface %d" +#~ msgstr "Superficie %d" + +#~ msgid "No samples to import!" +#~ msgstr "Sin muestras que importar!" + +#~ msgid "Import Audio Samples" +#~ msgstr "Importar Muestras de Audio" + +#~ msgid "Source Sample(s):" +#~ msgstr "Muestra(s) de Origen:" + +#~ msgid "Audio Sample" +#~ msgstr "Muestra de Audio" + +#~ msgid "New Clip" +#~ msgstr "Nuevo Clip" + +#~ msgid "Flags" +#~ msgstr "Flags" + +#~ msgid "Bake FPS:" +#~ msgstr "Hacer Bake de FPS:" + +#~ msgid "Optimizer" +#~ msgstr "Optimizar" + +#~ msgid "Max Linear Error" +#~ msgstr "Error Lineal Máximo" + +#~ msgid "Max Angular Error" +#~ msgstr "Error Angular Máximo" + +#~ msgid "Max Angle" +#~ msgstr "Angulo Máximo" + +#~ msgid "Clips" +#~ msgstr "Clips" + +#~ msgid "Start(s)" +#~ msgstr "Comienzo(s)" + +#~ msgid "End(s)" +#~ msgstr "Fin(es)" + +#~ msgid "Filters" +#~ msgstr "Filtros" + +#~ msgid "Source path is empty." +#~ msgstr "La ruta de origen esta vacÃa." + +#~ msgid "Couldn't load post-import script." +#~ msgstr "No se pudo cargar el script post-importación." + +#~ msgid "Invalid/broken script for post-import." +#~ msgstr "Script post-importación inválido o roto." + +#~ msgid "Error importing scene." +#~ msgstr "Error al importar escena." + +#~ msgid "Import 3D Scene" +#~ msgstr "Importar Escena 3D" + +#~ msgid "Source Scene:" +#~ msgstr "Escena de Origen:" + +#~ msgid "Same as Target Scene" +#~ msgstr "Igual que Escena de Destino" + +#~ msgid "Shared" +#~ msgstr "Compartido" + +#~ msgid "Target Texture Folder:" +#~ msgstr "Carpeta de Textura de Destino:" + +#~ msgid "Post-Process Script:" +#~ msgstr "Script de Postprocesado:" + +#~ msgid "Custom Root Node Type:" +#~ msgstr "Tipo de Nodo Raiz Customizado:" + +#~ msgid "Auto" +#~ msgstr "Auto" + +#~ msgid "Root Node Name:" +#~ msgstr "Nombre del Nodo RaÃz:" + +#~ msgid "The Following Files are Missing:" +#~ msgstr "Los Siguientes Archivos estan Faltando:" + +#~ msgid "Import Anyway" +#~ msgstr "Importar de Todos Modos" + +#~ msgid "Import & Open" +#~ msgstr "Importar y Abrir" + +#~ 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?" + +#~ msgid "Import Image:" +#~ msgstr "Importar Imagen:" + +#~ msgid "Couldn't localize path: %s (already local)" +#~ msgstr "No se pudo localizar la ruta: %s (ya es local)" + +#~ msgid "3D Scene Animation" +#~ msgstr "Animacion de Escena 3D" + +#~ msgid "Uncompressed" +#~ msgstr "Sin Comprimir" + +#~ msgid "Compress Lossless (PNG)" +#~ msgstr "Compresión Sin Pérdidas (PNG)" + +#~ msgid "Compress Lossy (WebP)" +#~ msgstr "Compresión con Pérdidas (WebP)" + +#~ msgid "Compress (VRAM)" +#~ msgstr "Comprimir (VRAM)" + +#~ msgid "Texture Format" +#~ msgstr "Formato de Textura" + +#~ msgid "Texture Compression Quality (WebP):" +#~ msgstr "Calidad de Compresión de Textura (WebP):" + +#~ msgid "Texture Options" +#~ msgstr "Opciones de Textura" + +#~ msgid "Please specify some files!" +#~ msgstr "Por favor especificá algunos archivos!" + +#~ msgid "At least one file needed for Atlas." +#~ msgstr "Se necesita al menos un archivo para el Atlas." + +#~ msgid "Error importing:" +#~ msgstr "Error al importar:" + +#~ msgid "Only one file is required for large texture." +#~ msgstr "Solo se requiere un archivo para textura grande." + +#~ msgid "Max Texture Size:" +#~ msgstr "Tamaño Max. de Textura:" + +#~ msgid "Import Textures for Atlas (2D)" +#~ msgstr "Importar Texturas para Atlas (2D)" + +#~ msgid "Cell Size:" +#~ msgstr "Tamaño de Celda:" + +#~ msgid "Large Texture" +#~ msgstr "Textura Grande" + +#~ msgid "Import Large Textures (2D)" +#~ msgstr "Importar Texturas Grandes (2D)" + +#~ msgid "Source Texture" +#~ msgstr "Textura de Origen" + +#~ msgid "Base Atlas Texture" +#~ msgstr "Textura Base de Atlas" + +#~ msgid "Source Texture(s)" +#~ msgstr "Textura(s) de Origen" + +#~ msgid "Import Textures for 2D" +#~ msgstr "Importar Texturas para 2D" + +#~ msgid "Import Textures for 3D" +#~ msgstr "Importar Texturas para 3D" + +#~ msgid "Import Textures" +#~ msgstr "Importar Texturas" + +#~ msgid "2D Texture" +#~ msgstr "Textura 2D" + +#~ msgid "3D Texture" +#~ msgstr "Textura 3D" + +#~ msgid "Atlas Texture" +#~ msgstr "Textura de Atlas" + +#~ 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." + +#~ msgid "Crop empty space." +#~ msgstr "Cropear espacio vacio." + +#~ msgid "Texture" +#~ msgstr "Textura" + +#~ msgid "Import Large Texture" +#~ msgstr "Importar Textura Grande" + +#~ msgid "Load Source Image" +#~ msgstr "Cargar Imagen de Origen" + +#~ msgid "Slicing" +#~ msgstr "Rebanar" + +#~ msgid "Saving" +#~ msgstr "Guardando" + +#~ msgid "Couldn't save large texture:" +#~ msgstr "No se pudo guardar la textura grande:" + +#~ msgid "Build Atlas For:" +#~ msgstr "Construir Atlar Para:" + +#~ msgid "Loading Image:" +#~ msgstr "Cargando Imagen:" + +#~ msgid "Couldn't load image:" +#~ msgstr "No se pudo cargar la imagen:" + +#~ msgid "Converting Images" +#~ msgstr "Convirtiendo Imágenes" + +#~ msgid "Cropping Images" +#~ msgstr "Cropeando Imágenes" + +#~ msgid "Blitting Images" +#~ msgstr "Haciendo Blitting de Imágenes" + +#~ msgid "Couldn't save atlas image:" +#~ msgstr "No se pudo guardar la imagen de atlas:" + +#~ msgid "Couldn't save converted texture:" +#~ msgstr "No se pudo guardar la textura convertida:" + +#~ msgid "Invalid source!" +#~ msgstr "Fuente inválida!" + +#~ msgid "Invalid translation source!" +#~ msgstr "Fuente de traducción inválida!" + +#~ msgid "Column" +#~ msgstr "Columna" + +#~ msgid "No items to import!" +#~ msgstr "Sin elementos para importar!" + +#~ msgid "No target path!" +#~ msgstr "Sin ruta de destino!" + +#~ msgid "Import Translations" +#~ msgstr "Importar Traducciones" + +#~ msgid "Couldn't import!" +#~ msgstr "No se pudo importar!" + +#~ msgid "Import Translation" +#~ msgstr "Importar Traducción" + +#~ msgid "Source CSV:" +#~ msgstr "CSV de Origen:" + +#~ msgid "Ignore First Row" +#~ msgstr "Ignorar Primera Columna" + +#~ msgid "Compress" +#~ msgstr "Comprimir" + +#~ msgid "Add to Project (project.godot)" +#~ msgstr "Agregar al Proyecto (project.godot)" + +#~ msgid "Import Languages:" +#~ msgstr "Importar Lenguajes:" + +#~ msgid "Translation" +#~ msgstr "Traducción" + +#~ msgid "Parsing %d Triangles:" +#~ msgstr "Parseando %d Triángulos:" + +#~ msgid "Triangle #" +#~ msgstr "Triangulo #" + +#~ msgid "Light Baker Setup:" +#~ msgstr "Configuración de Baker de Luces:" + +#~ msgid "Fixing Lights" +#~ msgstr "Fijando/Corrigiendo Luces" + +#~ msgid "Making BVH" +#~ msgstr "Creando BVH" + +#~ msgid "Transfer to Lightmaps:" +#~ msgstr "Transferencia a Lightmaps:" + +#~ msgid "Allocating Texture #" +#~ msgstr "Asignando Textura #" + +#~ msgid "Baking Triangle #" +#~ msgstr "Haciendo Bake de Triangulo #" + +#~ msgid "Post-Processing Texture #" +#~ msgstr "Postprocesando Textura #" + +#~ msgid "Reset the lightmap octree baking process (start over)." +#~ msgstr "" +#~ "Resetear el proceso de bake del octree de mapa de luces (empezar de " +#~ "nuevo)." + +#~ msgid "Zoom (%):" +#~ msgstr "Zoom (%):" + +#~ msgid "Skeleton.." +#~ msgstr "Esqueleto.." + +#~ msgid "Zoom Reset" +#~ msgstr "Resetear Zoom" + +#~ msgid "Zoom Set.." +#~ msgstr "Setear Zoom.." + +#~ msgid "Set a Value" +#~ msgstr "Setear un Valor" + +#~ msgid "Snap (Pixels):" +#~ msgstr "Snap (Pixeles):" + +#~ msgid "Parse BBCode" +#~ msgstr "Parsear BBCode" + +#~ msgid "Length:" +#~ msgstr "Largo:" + +#~ msgid "Open Sample File(s)" +#~ msgstr "Abrir Archivo(s) de Muestra" + +#~ msgid "ERROR: Couldn't load sample!" +#~ msgstr "ERROR: No se pudo cargar la muestra!" + +#~ msgid "Add Sample" +#~ msgstr "Agregar Muestra" + +#~ msgid "Rename Sample" +#~ msgstr "Renombrar Muestra" + +#~ msgid "Delete Sample" +#~ msgstr "Eliminar Muestra" + +#~ msgid "16 Bits" +#~ msgstr "16 Bits" + +#~ msgid "8 Bits" +#~ msgstr "8 Bits" + +#~ msgid "Stereo" +#~ msgstr "Estereo" + +#~ msgid "Mono" +#~ msgstr "Mono" + +#~ msgid "Pitch" +#~ msgstr "Altura" + +#~ msgid "Window" +#~ msgstr "Ventana" + +#~ msgid "Move Right" +#~ msgstr "Mover a la Derecha" + +#~ msgid "Scaling to %s%%." +#~ msgstr "Escalando a %s%%." + +#~ msgid "Up" +#~ msgstr "Arriba" + +#~ msgid "Down" +#~ msgstr "Abajo" + +#~ msgid "Bucket" +#~ msgstr "Balde" + +#~ msgid "Invalid project path, the path must exist!" +#~ msgstr "Ruta de proyecto inválida, la ruta debe existir!" + +#~ msgid "Invalid project path, project.godot must not exist." +#~ msgstr "Ruta de proyecto inválida, project.godot no debe existir." + +#~ msgid "Invalid project path, project.godot must exist." +#~ msgstr "Ruta de proyecto inválida, project.godot debe existir." + +#~ msgid "Project Path (Must Exist):" +#~ msgstr "Ruta del Proyecto (Debe Existir):" + +#~ msgid "Create New Resource" +#~ msgstr "Crear Nuevo Recurso" + +#~ msgid "Open Resource" +#~ msgstr "Abrir Recurso" + +#~ msgid "Save Resource" +#~ msgstr "Guardar Recurso" + +#~ msgid "Resource Tools" +#~ msgstr "Herramientas de Recursos" + +#~ msgid "Make Local" +#~ msgstr "Crear Local" + +#~ msgid "Edit Groups" +#~ msgstr "Editar Grupos" + +#~ msgid "Edit Connections" +#~ msgstr "Editar Conexiones" + +#~ msgid "GridMap Paint" +#~ msgstr "Pintar GridMap" + +#~ msgid "Tiles" +#~ msgstr "Tiles" + +#~ msgid "Areas" +#~ msgstr "Ãreas" + +#~ msgid "Ctrl+" +#~ msgstr "Ctrl+" + +#~ msgid "Down Wheel)" +#~ msgstr "Rueda Abajo)" + +#~ msgid "Up Wheel)" +#~ msgstr "Rueda Arriba)" + #~ msgid "Close scene? (Unsaved changes will be lost)" #~ msgstr "Cerrar escena? (Los cambios sin guardar se perderán)" @@ -8017,9 +8255,6 @@ msgstr "" #~ msgid "Close Goto Prev. Scene" #~ msgstr "Cerrar e Ir a Escena Prev." -#~ msgid "Expand to Parent" -#~ msgstr "Expandir al Padre" - #~ msgid "Del" #~ msgstr "Eliminar" @@ -8194,18 +8429,12 @@ msgstr "" #~ msgid "Save Translatable Strings" #~ msgstr "Guardar Strings Traducibles" -#~ msgid "Translatable Strings.." -#~ msgstr "Strings Traducibles.." - #~ msgid "Install Export Templates" #~ msgstr "Instalar Templates de Exportación" #~ msgid "Edit Script Options" #~ msgstr "Editar Opciones de Script" -#~ msgid "Please export outside the project folder!" -#~ msgstr "Por favor exportá afuera de la carpeta de proyecto!" - #~ msgid "Error exporting project!" #~ msgstr "Error al exportar el proyecto!" @@ -8264,18 +8493,12 @@ msgstr "" #~ msgid "Include" #~ msgstr "Incluir" -#~ msgid "Change Image Group" -#~ msgstr "Cambiar Grupo de Imágenes" - #~ msgid "Group name can't be empty!" #~ msgstr "El nombre del grupo no puede estar vacÃo!" #~ msgid "Invalid character in group name!" #~ msgstr "Caracter invalido en el nombre de grupo!" -#~ msgid "Group name already exists!" -#~ msgstr "El nombre de grupo ya existe!" - #~ msgid "Add Image Group" #~ msgstr "Agregar Grupo de Imágenes" @@ -8423,9 +8646,6 @@ msgstr "" #~ msgid "Lighting" #~ msgstr "Iluminación" -#~ msgid "Toggle Persisting" -#~ msgstr "Act/Desact. Persistente" - #~ msgid "Global" #~ msgstr "Global" diff --git a/editor/translations/fa.po b/editor/translations/fa.po index 8afc7bc844..6ee3ccb17e 100644 --- a/editor/translations/fa.po +++ b/editor/translations/fa.po @@ -195,10 +195,9 @@ msgid "Create %d NEW tracks and insert keys?" msgstr "تعداد d% ترک جدید ایجاد، Ùˆ کلیدها را درج کن؟" #: editor/animation_editor.cpp editor/create_dialog.cpp -#: editor/editor_audio_buses.cpp +#: editor/editor_audio_buses.cpp editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp #: editor/plugins/mesh_instance_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp editor/project_manager.cpp #: editor/script_create_dialog.cpp msgid "Create" @@ -361,269 +360,6 @@ msgstr "نوع مقدار آرایه را تغییر بده" msgid "Change Array Value" msgstr "مقدار آرایه را تغییر بده" -#: editor/asset_library_editor_plugin.cpp -msgid "Free" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp -msgid "Version:" -msgstr "نسخه:" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Contents:" -msgstr "مستمر" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "View Files" -msgstr "پرونده:" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_help.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp -msgid "Description:" -msgstr "توضیØ:" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -#: editor/project_manager.cpp -msgid "Install" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp -#: editor/connections_dialog.cpp editor/export_template_manager.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -#: editor/project_settings_editor.cpp editor/property_editor.cpp -#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Close" -msgstr "بستن" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve hostname:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Connection error, please try again." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Can't connect." -msgstr "در ØØ§Ù„ اتصال..." - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Can't connect to host:" -msgstr "اتصال به گره:" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response from host:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Request failed, return code:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Req. Failed." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Request failed, too many redirects" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Redirect Loop." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Bad download hash, assuming file has been tampered with." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Expected:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Got:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed sha256 hash check" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Asset Download Error:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -msgid "Success!" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Fetching:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Resolving.." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Connecting.." -msgstr "در ØØ§Ù„ اتصال..." - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Requesting.." -msgstr "آزمودن" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Error making request" -msgstr "خطای بارگذاری قلم." - -#: editor/asset_library_editor_plugin.cpp -msgid "Idle" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Retry" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Download Error" -msgstr "خطاهای بارگذاری" - -#: editor/asset_library_editor_plugin.cpp -msgid "Download for this asset is already in progress!" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "first" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "prev" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "next" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "last" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "All" -msgstr "همه" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/property_selector.cpp editor/quick_open.cpp -#: editor/settings_config_dialog.cpp -msgid "Search:" -msgstr "جستجو:" - -#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Search" -msgstr "جستجو" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/project_manager.cpp -msgid "Import" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Plugins" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Sort:" -msgstr "مرتب‌سازی:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Reverse" -msgstr "معکوس" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Category:" -msgstr "طبقه‌بندی:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Site:" -msgstr "تارنما:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "پشتیبانی.." - -#: editor/asset_library_editor_plugin.cpp -msgid "Official" -msgstr "Ø¯ÙØªØ±ÛŒ" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -msgid "Community" -msgstr "انجمن" - -#: editor/asset_library_editor_plugin.cpp -msgid "Testing" -msgstr "آزمودن" - -#: editor/asset_library_editor_plugin.cpp -msgid "Assets ZIP File" -msgstr "ÙØ§ÛŒÙ„ های ZIP‌ منابع بازی" - -#: editor/call_dialog.cpp -msgid "Method List For '%s':" -msgstr "لیست متد برای 's%' :" - -#: editor/call_dialog.cpp modules/visual_script/visual_script_editor.cpp -msgid "Call" -msgstr "ÙØ±Ø§Ø®ÙˆØ§Ù†ÛŒ" - -#: editor/call_dialog.cpp -msgid "Method List:" -msgstr "Ùهرست متدها:" - -#: editor/call_dialog.cpp -msgid "Arguments:" -msgstr "نشانوندها:" - -#: editor/call_dialog.cpp -msgid "Return:" -msgstr "بازگشت:" - #: editor/code_editor.cpp msgid "Go to Line" msgstr "برو به خط" @@ -661,6 +397,14 @@ msgstr "عین کلمات (بدون هیچ Ú©Ù… Ùˆ کاستی)" msgid "Selection Only" msgstr "تنها در قسمت انتخاب شده" +#: editor/code_editor.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp +msgid "Search" +msgstr "جستجو" + #: editor/code_editor.cpp editor/editor_help.cpp msgid "Find" msgstr "ÛŒØ§ÙØªÙ†" @@ -693,11 +437,11 @@ msgstr "موقع جایگزینی از کاربر بپرس" msgid "Skip" msgstr "رد کردن" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom In" msgstr "بزرگنمایی بیشتر" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom Out" msgstr "بزرگنمایی کمتر" @@ -765,6 +509,20 @@ msgstr "معوق" msgid "Oneshot" msgstr "تک شات" +#: editor/connections_dialog.cpp editor/dependency_editor.cpp +#: editor/export_template_manager.cpp +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Close" +msgstr "بستن" + #: editor/connections_dialog.cpp msgid "Connect" msgstr "اتصال" @@ -790,7 +548,7 @@ msgstr "در ØØ§Ù„ اتصال..." msgid "Disconnect" msgstr "عدم اتصال" -#: editor/connections_dialog.cpp editor/node_dock.cpp +#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" msgstr "سیگنال‌ها" @@ -807,12 +565,25 @@ msgstr "" msgid "Recent:" msgstr "" +#: editor/create_dialog.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp +#: editor/quick_open.cpp editor/settings_config_dialog.cpp +msgid "Search:" +msgstr "جستجو:" + #: editor/create_dialog.cpp editor/editor_help.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp #: editor/quick_open.cpp msgid "Matches:" msgstr "تطبیق‌ها:" +#: editor/create_dialog.cpp editor/editor_help.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp +#: editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "توضیØ:" + #: editor/dependency_editor.cpp #, fuzzy msgid "Search Replacement For:" @@ -873,6 +644,10 @@ msgid "Owners Of:" msgstr "مالکانÙ:" #: editor/dependency_editor.cpp +msgid "Remove selected files from the project? (no undo)" +msgstr "آیا پرونده‌های انتخاب شده از پروژه ØØ°Ù شوند؟ (بدون undo)" + +#: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" @@ -883,8 +658,8 @@ msgstr "" "آیا در هر صورت ØØ°Ù شوند (بدون undo)ØŸ" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (no undo)" -msgstr "آیا پرونده‌های انتخاب شده از پروژه ØØ°Ù شوند؟ (بدون undo)" +msgid "Cannot remove:\n" +msgstr "" #: editor/dependency_editor.cpp msgid "Error loading:" @@ -952,11 +727,6 @@ msgstr "" #: editor/editor_about.cpp #, fuzzy -msgid "Authors" -msgstr "خالق:" - -#: editor/editor_about.cpp -#, fuzzy msgid "Project Founders" msgstr "صادر کردن پروژه" @@ -973,6 +743,39 @@ msgid "Developers" msgstr "" #: editor/editor_about.cpp +#, fuzzy +msgid "Authors" +msgstr "خالق:" + +#: editor/editor_about.cpp +msgid "Platinum Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Mini Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Silver Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Bronze Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Donors" +msgstr "" + +#: editor/editor_about.cpp msgid "License" msgstr "" @@ -1016,6 +819,16 @@ msgid "Package Installed Successfully!" msgstr "" #: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Success!" +msgstr "" + +#: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp +msgid "Install" +msgstr "" + +#: editor/editor_asset_installer.cpp msgid "Package Installer" msgstr "" @@ -1066,10 +879,6 @@ msgid "Audio Bus, Drag and Drop to rearrange." msgstr "" #: editor/editor_audio_buses.cpp -msgid "Bus options" -msgstr "" - -#: editor/editor_audio_buses.cpp msgid "Solo" msgstr "" @@ -1081,6 +890,10 @@ msgstr "" msgid "Bypass" msgstr "" +#: editor/editor_audio_buses.cpp +msgid "Bus options" +msgstr "" + #: editor/editor_audio_buses.cpp editor/plugins/tile_map_editor_plugin.cpp #: editor/scene_tree_dock.cpp msgid "Duplicate" @@ -1088,6 +901,11 @@ msgstr "" #: editor/editor_audio_buses.cpp #, fuzzy +msgid "Reset Volume" +msgstr "بازنشانی بزرگنمایی" + +#: editor/editor_audio_buses.cpp +#, fuzzy msgid "Delete Effect" msgstr "انتخاب شده را ØØ°Ù Ú©Ù†" @@ -1111,6 +929,11 @@ msgstr "انتخاب شده را به دو تا تکثیر Ú©Ù†" #: editor/editor_audio_buses.cpp #, fuzzy +msgid "Reset Bus Volume" +msgstr "بازنشانی بزرگنمایی" + +#: editor/editor_audio_buses.cpp +#, fuzzy msgid "Move Audio Bus" msgstr "کلید Add را جابجا Ú©Ù†" @@ -1142,7 +965,8 @@ msgstr "" msgid "Create a new Bus Layout." msgstr "" -#: editor/editor_audio_buses.cpp editor/script_create_dialog.cpp +#: editor/editor_audio_buses.cpp editor/property_editor.cpp +#: editor/script_create_dialog.cpp msgid "Load" msgstr "" @@ -1233,7 +1057,7 @@ msgid "Rearrange Autoloads" msgstr "" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp scene/gui/file_dialog.cpp +#: scene/gui/file_dialog.cpp msgid "Path:" msgstr "مسیر:" @@ -1241,9 +1065,7 @@ msgstr "مسیر:" msgid "Node Name:" msgstr "" -#: editor/editor_autoload_settings.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp editor/project_manager.cpp +#: editor/editor_autoload_settings.cpp editor/project_manager.cpp msgid "Name" msgstr "" @@ -1276,18 +1098,19 @@ msgid "Choose a Directory" msgstr "" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Create Folder" msgstr "پوشه ایجاد Ú©Ù†" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: editor/editor_plugin_settings.cpp editor/plugins/theme_editor_plugin.cpp -#: editor/project_export.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp +#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp +#: scene/gui/file_dialog.cpp msgid "Name:" msgstr "نام:" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Could not create folder." msgstr "نمی‌تواند یک پوشه ایجاد شود." @@ -1307,30 +1130,6 @@ msgstr "" msgid "Template file not found:\n" msgstr "" -#: editor/editor_export.cpp -msgid "Added:" -msgstr "Ø§ÙØ²ÙˆØ¯Ù‡ شده:" - -#: editor/editor_export.cpp -msgid "Removed:" -msgstr "برداشته شده:" - -#: editor/editor_export.cpp -msgid "Error saving atlas:" -msgstr "" - -#: editor/editor_export.cpp -msgid "Could not save atlas subtexture:" -msgstr "" - -#: editor/editor_export.cpp -msgid "Exporting for %s" -msgstr "" - -#: editor/editor_export.cpp -msgid "Setting Up.." -msgstr "" - #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "ÙØ§ÛŒÙ„ وجود دارد، آیا بازنویسی شود؟" @@ -1415,6 +1214,11 @@ msgstr "" msgid "Move Favorite Down" msgstr "" +#: editor/editor_file_dialog.cpp +#, fuzzy +msgid "Go to parent folder" +msgstr "نمی‌تواند یک پوشه ایجاد شود." + #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Directories & Files:" msgstr "پوشه‌ها Ùˆ پرونده‌ها:" @@ -1458,6 +1262,10 @@ msgstr "Ùهرست کلاس:" msgid "Search Classes" msgstr "جستجوی کلاسها" +#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +msgid "Top" +msgstr "" + #: editor/editor_help.cpp editor/property_editor.cpp msgid "Class:" msgstr "کلاس:" @@ -1474,15 +1282,29 @@ msgstr "به ارث رسیده به وسیله:" msgid "Brief Description:" msgstr "خلاصه ØªÙˆØ¶ÛŒØØ§Øª:" +#: editor/editor_help.cpp +#, fuzzy +msgid "Members" +msgstr "عضوها:" + #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "عضوها:" #: editor/editor_help.cpp +#, fuzzy +msgid "Public Methods" +msgstr "انتخاب ØØ§Ù„ت" + +#: editor/editor_help.cpp msgid "Public Methods:" msgstr "" #: editor/editor_help.cpp +msgid "GUI Theme Items" +msgstr "" + +#: editor/editor_help.cpp msgid "GUI Theme Items:" msgstr "" @@ -1492,6 +1314,11 @@ msgstr "سیگنال ها:" #: editor/editor_help.cpp #, fuzzy +msgid "Enumerations" +msgstr "وظایÙ:" + +#: editor/editor_help.cpp +#, fuzzy msgid "Enumerations:" msgstr "وظایÙ:" @@ -1500,19 +1327,50 @@ msgid "enum " msgstr "" #: editor/editor_help.cpp +#, fuzzy +msgid "Constants" +msgstr "ثابت" + +#: editor/editor_help.cpp msgid "Constants:" msgstr "" #: editor/editor_help.cpp #, fuzzy +msgid "Description" +msgstr "توضیØ:" + +#: editor/editor_help.cpp +msgid "Properties" +msgstr "" + +#: editor/editor_help.cpp +#, fuzzy msgid "Property Description:" msgstr "خلاصه ØªÙˆØ¶ÛŒØØ§Øª:" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this property. Please help us by " +"[color=$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp +#, fuzzy +msgid "Methods" +msgstr "Ùهرست متدها:" + +#: editor/editor_help.cpp msgid "Method Description:" msgstr "" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this method. Please help us by [color=" +"$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp msgid "Search Text" msgstr "جستجوی متن" @@ -1522,24 +1380,21 @@ msgid "Output:" msgstr " خروجی:" #: editor/editor_log.cpp editor/plugins/animation_tree_editor_plugin.cpp -#: editor/plugins/rich_text_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_editor_debugger.cpp scene/gui/line_edit.cpp -#: scene/gui/text_edit.cpp +#: editor/property_editor.cpp editor/script_editor_debugger.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Clear" msgstr "پاک کردن" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Error saving resource!" msgstr "" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Save Resource As.." msgstr "ذخیره منبع از ..." -#: editor/editor_node.cpp editor/export_template_manager.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "I see.." msgstr "من میبینم ..." @@ -1556,6 +1411,29 @@ msgid "Error while saving." msgstr "" #: editor/editor_node.cpp +#, fuzzy +msgid "Can't open '%s'." +msgstr "در ØØ§Ù„ اتصال..." + +#: editor/editor_node.cpp +#, fuzzy +msgid "Error while parsing '%s'." +msgstr "خطای بارگذاری قلم." + +#: editor/editor_node.cpp +msgid "Unexpected end of file '%s'." +msgstr "" + +#: editor/editor_node.cpp +msgid "Missing '%s' or its dependencies." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Error while loading '%s'." +msgstr "خطای بارگذاری قلم." + +#: editor/editor_node.cpp msgid "Saving Scene" msgstr "ذخیره سازی صØÙ†Ù‡" @@ -1613,6 +1491,33 @@ msgid "Restored default layout to base settings." msgstr "" #: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was imported, so it's not editable.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was instanced or inherited.\n" +"Changes to it will not be kept when saving the current scene." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource was imported, so it's not editable. Change its settings in the " +"import panel and then re-import." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This scene was imported, so changes to it will not be kept.\n" +"Instancing it or inheriting will allow making changes to it.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp msgid "Copy Params" msgstr "" @@ -1776,6 +1681,12 @@ msgid "Save changes the following scene(s) before opening Project Manager?" msgstr "" #: editor/editor_node.cpp +msgid "" +"This option is deprecated. Situations where refresh must be forced are now " +"considered a bug. Please report." +msgstr "" + +#: editor/editor_node.cpp msgid "Pick a Main Scene" msgstr "" @@ -1802,7 +1713,7 @@ msgid "" msgstr "" #: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Ugh" msgstr "" @@ -1813,11 +1724,11 @@ msgid "" msgstr "" #: editor/editor_node.cpp -msgid "Error loading scene." +msgid "Scene '%s' has broken dependencies:" msgstr "" #: editor/editor_node.cpp -msgid "Scene '%s' has broken dependencies:" +msgid "Clear Recent Scenes" msgstr "" #: editor/editor_node.cpp @@ -1853,7 +1764,7 @@ msgstr "" msgid "Toggle distraction-free mode." msgstr "" -#: editor/editor_node.cpp editor/io_plugins/editor_scene_import_plugin.cpp +#: editor/editor_node.cpp msgid "Scene" msgstr "صØÙ†Ù‡" @@ -2075,6 +1986,10 @@ msgstr "" msgid "Issue Tracker" msgstr "" +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +msgid "Community" +msgstr "انجمن" + #: editor/editor_node.cpp msgid "About" msgstr "معرÙÛŒ" @@ -2083,7 +1998,7 @@ msgstr "معرÙÛŒ" msgid "Play the project." msgstr "" -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Play" msgstr "پخش" @@ -2099,7 +2014,7 @@ msgstr "" msgid "Stop the scene." msgstr "" -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Stop" msgstr "" @@ -2172,6 +2087,15 @@ msgid "Object properties." msgstr "" #: editor/editor_node.cpp +msgid "Changes may be lost!" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Import" +msgstr "" + +#: editor/editor_node.cpp msgid "FileSystem" msgstr "" @@ -2187,14 +2111,6 @@ msgstr "خروجی" msgid "Don't Save" msgstr "" -#: editor/editor_node.cpp editor/editor_reimport_dialog.cpp -msgid "Re-Import" -msgstr "" - -#: editor/editor_node.cpp editor/editor_plugin_settings.cpp -msgid "Update" -msgstr "بروز رسانی" - #: editor/editor_node.cpp msgid "Import Templates From ZIP File" msgstr "واردکردن قالب ها از درون یک ÙØ§ÛŒÙ„ ZIP" @@ -2261,11 +2177,28 @@ msgstr "ویرایشگر بستگی" msgid "Open the previous Editor" msgstr "" +#: editor/editor_plugin.cpp +msgid "Creating Mesh Previews" +msgstr "" + +#: editor/editor_plugin.cpp +msgid "Thumbnail.." +msgstr "" + #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" msgstr "Ø§ÙØ²ÙˆÙ†Ù‡ های نصب شده:" #: editor/editor_plugin_settings.cpp +msgid "Update" +msgstr "بروز رسانی" + +#: editor/editor_plugin_settings.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Version:" +msgstr "نسخه:" + +#: editor/editor_plugin_settings.cpp msgid "Author:" msgstr "خالق:" @@ -2317,26 +2250,6 @@ msgstr "" msgid "Frame #:" msgstr "" -#: editor/editor_reimport_dialog.cpp -msgid "Please wait for scan to complete." -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Current scene must be saved to re-import." -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Save & Re-Import" -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Importing" -msgstr "در ØØ§Ù„ وارد کردن دوباره..." - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Import Changed Resources" -msgstr "" - #: editor/editor_run_native.cpp msgid "Select device from the list" msgstr "" @@ -2447,10 +2360,6 @@ msgid "Importing:" msgstr "" #: editor/export_template_manager.cpp -msgid "Loading Export Templates" -msgstr "" - -#: editor/export_template_manager.cpp #, fuzzy msgid "Current Version:" msgstr "نسخه:" @@ -2487,9 +2396,17 @@ msgid "Cannot navigate to '" msgstr "" #: editor/filesystem_dock.cpp +msgid "View items as a grid of thumbnails" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "View items as a list" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "" "\n" -"Status: Needs Re-Import" +"Status: Import of file failed. Please fix file and reimport manually." msgstr "" #: editor/filesystem_dock.cpp @@ -2500,45 +2417,51 @@ msgid "" msgstr "منبع" #: editor/filesystem_dock.cpp -msgid "Same source and destination files, doing nothing." +msgid "Cannot move/rename resources root." msgstr "" #: editor/filesystem_dock.cpp -msgid "Target file exists, can't overwrite. Delete first." +msgid "Cannot move a folder into itself.\n" msgstr "" #: editor/filesystem_dock.cpp -msgid "Same source and destination paths, doing nothing." -msgstr "" +#, fuzzy +msgid "Error moving:\n" +msgstr "خطا در بارگذاری:" #: editor/filesystem_dock.cpp -msgid "Can't move directories to within themselves." +#, fuzzy +msgid "Unable to update dependencies:\n" +msgstr "خطا در بارگذاری صØÙ†Ù‡ به دلیل بستگی‌های Ù…Ùقود:" + +#: editor/filesystem_dock.cpp +msgid "No name provided" msgstr "" #: editor/filesystem_dock.cpp -msgid "Can't rename deps for:\n" +msgid "Provided name contains invalid characters" msgstr "" #: editor/filesystem_dock.cpp -#, fuzzy -msgid "Error moving file:\n" -msgstr "خطا در بارگذاری:" +msgid "No name provided." +msgstr "" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Error moving dir:\n" -msgstr "خطا در بارگذاری:" +msgid "Name contains invalid characters." +msgstr "کاراکترهای معتبر:" #: editor/filesystem_dock.cpp -msgid "Can't operate on '..'" +msgid "A file or folder with this name already exists." msgstr "" #: editor/filesystem_dock.cpp -msgid "Pick New Name and Location For:" -msgstr "" +#, fuzzy +msgid "Renaming file:" +msgstr "تغییر متغیر" #: editor/filesystem_dock.cpp -msgid "No files selected!" +msgid "Renaming folder:" msgstr "" #: editor/filesystem_dock.cpp @@ -2550,39 +2473,36 @@ msgid "Collapse all" msgstr "" #: editor/filesystem_dock.cpp -msgid "Show In File Manager" -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Instance" +msgid "Copy Path" msgstr "" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." +msgid "Rename.." msgstr "" #: editor/filesystem_dock.cpp -msgid "View Owners.." +msgid "Move To.." msgstr "" #: editor/filesystem_dock.cpp -msgid "Copy Path" -msgstr "" +#, fuzzy +msgid "New Folder.." +msgstr "پوشه ایجاد Ú©Ù†" #: editor/filesystem_dock.cpp -msgid "Rename or Move.." +msgid "Show In File Manager" msgstr "" #: editor/filesystem_dock.cpp -msgid "Move To.." +msgid "Instance" msgstr "" #: editor/filesystem_dock.cpp -msgid "Info" +msgid "Edit Dependencies.." msgstr "" #: editor/filesystem_dock.cpp -msgid "Re-Import.." +msgid "View Owners.." msgstr "" #: editor/filesystem_dock.cpp @@ -2615,6 +2535,11 @@ msgstr "" msgid "Move" msgstr "" +#: editor/filesystem_dock.cpp editor/plugins/animation_tree_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Rename" +msgstr "" + #: editor/groups_editor.cpp msgid "Add to Group" msgstr "" @@ -2628,6 +2553,10 @@ msgid "Import as Single Scene" msgstr "" #: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials" msgstr "" @@ -2640,6 +2569,18 @@ msgid "Import with Separate Objects+Materials" msgstr "" #: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Materials+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Materials+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes" msgstr "" @@ -2648,38 +2589,31 @@ msgid "Import as Multiple Scenes+Materials" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Import Scene" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Importing Scene.." msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Running Custom Script.." msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Couldn't load post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Invalid/broken script for post-import (check console):" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Error running post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Saving.." msgstr "" @@ -2709,581 +2643,54 @@ msgstr "" msgid "Reimport" msgstr "در ØØ§Ù„ وارد کردن دوباره..." -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "No bit masks to import!" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path is empty." -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must be a complete resource path." -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must exist." -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Save path is empty!" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Import BitMasks" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s):" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Target Path:" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Accept" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Bit Mask" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No source font file!" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No target font resource!" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "" -"Invalid file extension.\n" -"Please use .font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Can't load/process source font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Couldn't save font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font Size:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Dest Resource:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "The quick brown fox jumps over the lazy dog." -msgstr "" -"کلاغ ÙØ±Ø² Ùˆ چابک، ظهر هر روز با صدای ضخیم Ùˆ عذاب‌آورش بـه جستجوی یک مثقال گنج " -"پنهان در ØÛŒØ§Ø· رژه Ù…ÛŒ Ø±ÙØª." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Test:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Options:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Font Import" -msgstr "" - -#: 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 "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Failed opening as BMFont file." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error initializing FreeType." -msgstr "خطا در ارزش‌دهی آغارین به FreeType." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Unknown font format." -msgstr "ÙØ±Ù…ت قلم ناشناخته." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error loading font." -msgstr "خطای بارگذاری قلم." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Invalid font size." -msgstr "اندازه‌ی قلم نامعتبر." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Invalid font custom source." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/plugins/theme_editor_plugin.cpp -msgid "Font" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "No meshes to import!" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Single Mesh Import" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Source Mesh(es):" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Mesh" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Surface %d" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "No samples to import!" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Import Audio Samples" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Source Sample(s):" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Audio Sample" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "New Clip" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Animation Options" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Flags" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Bake FPS:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Optimizer" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Linear Error" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angular Error" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angle" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Clips" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Start(s)" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "End(s)" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Loop" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Filters" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source path is empty." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't load post-import script." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Invalid/broken script for post-import." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Error importing scene." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import 3D Scene" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source Scene:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Same as Target Scene" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Shared" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Target Texture Folder:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Post-Process Script:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Custom Root Node Type:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Auto" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Root Node Name:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "The Following Files are Missing:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Anyway" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp scene/gui/dialogs.cpp -msgid "Cancel" -msgstr "لغو" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import & Open" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Edited scene has not been saved, open imported scene anyway?" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Image:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Can't import a file over itself:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't localize path: %s (already local)" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "3D Scene Animation" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Uncompressed" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossless (PNG)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossy (WebP)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress (VRAM)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Format" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Compression Quality (WebP):" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Options" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Please specify some files!" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "At least one file needed for Atlas." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Error importing:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Only one file is required for large texture." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Max Texture Size:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for Atlas (2D)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cell Size:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Large Texture" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Textures (2D)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture" +#: editor/multi_node_edit.cpp +msgid "MultiNode Set" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Base Atlas Texture" +#: editor/node_dock.cpp +msgid "Groups" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s)" +#: editor/node_dock.cpp +msgid "Select a Node to edit Signals and Groups." msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 2D" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create Poly" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 3D" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures" +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Insert Point" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "2D Texture" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly (Remove Point)" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "3D Texture" +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Remove Poly And Point" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Atlas Texture" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create a new polygon from scratch." msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp +#: editor/plugins/abstract_polygon_2d_editor.cpp msgid "" -"NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files to " -"the project." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Crop empty space." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Texture" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Load Source Image" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Slicing" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Inserting" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Saving" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save large texture:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Build Atlas For:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Loading Image:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't load image:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Converting Images" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cropping Images" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Blitting Images" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save atlas image:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save converted texture:" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid source!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid translation source!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Column" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/script_create_dialog.cpp -msgid "Language" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No items to import!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No target path!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translations" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Couldn't import!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translation" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Source CSV:" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Ignore First Row" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Compress" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Add to Project (project.godot)" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Languages:" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Translation" -msgstr "" - -#: editor/multi_node_edit.cpp -msgid "MultiNode Set" -msgstr "" - -#: editor/node_dock.cpp -msgid "Groups" -msgstr "" - -#: editor/node_dock.cpp -msgid "Select a Node to edit Signals and Groups." +"Edit existing polygon:\n" +"LMB: Move Point.\n" +"Ctrl+LMB: Split Segment.\n" +"RMB: Erase Point." msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp @@ -3440,7 +2847,6 @@ msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp #: editor/script_create_dialog.cpp msgid "Error!" @@ -3551,10 +2957,6 @@ msgid "Delete Input" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Rename" -msgstr "" - -#: editor/plugins/animation_tree_editor_plugin.cpp msgid "Animation tree is valid." msgstr "" @@ -3610,64 +3012,189 @@ msgstr "" msgid "Filters.." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing %d Triangles:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Free" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Triangle #" +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Contents:" +msgstr "مستمر" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "View Files" +msgstr "پرونده:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve hostname:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Light Baker Setup:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing Geometry" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connection error, please try again." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Fixing Lights" +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Can't connect." +msgstr "در ØØ§Ù„ اتصال..." + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Can't connect to host:" +msgstr "اتصال به گره:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response from host:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Making BVH" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, return code:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Req. Failed." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Light Octree" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, too many redirects" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Octree Texture" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Redirect Loop." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Transfer to Lightmaps:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Allocating Texture #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Bad download hash, assuming file has been tampered with." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Baking Triangle #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Expected:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Post-Processing Texture #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Got:" msgstr "" -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Bake!" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed sha256 hash check" msgstr "" -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Reset the lightmap octree baking process (start over)." +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Asset Download Error:" msgstr "" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Fetching:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Resolving.." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Connecting.." +msgstr "در ØØ§Ù„ اتصال..." + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Requesting.." +msgstr "آزمودن" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Error making request" +msgstr "خطای بارگذاری قلم." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Idle" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Retry" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Download Error" +msgstr "خطاهای بارگذاری" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download for this asset is already in progress!" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "first" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "prev" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "next" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "last" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "All" +msgstr "همه" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Plugins" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Sort:" +msgstr "مرتب‌سازی:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Reverse" +msgstr "معکوس" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Category:" +msgstr "طبقه‌بندی:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Site:" +msgstr "تارنما:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Support.." +msgstr "پشتیبانی.." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Official" +msgstr "Ø¯ÙØªØ±ÛŒ" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Testing" +msgstr "آزمودن" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Assets ZIP File" +msgstr "ÙØ§ÛŒÙ„ های ZIP‌ منابع بازی" + #: editor/plugins/camera_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp msgid "Preview" msgstr "" @@ -3710,11 +3237,15 @@ msgid "Edit CanvasItem" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Change Anchors" +msgid "Anchors only" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Change Anchors and Margins" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom (%):" +msgid "Change Anchors" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3765,59 +3296,73 @@ msgid "Pan Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Lock the selected object in place (can't be moved)." +#, fuzzy +msgid "Toggles snapping" +msgstr "یک Breakpoint درج Ú©Ù†" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Unlock the selected object (can be moved)." +msgid "Snapping options" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Makes sure the object's children are not selectable." +msgid "Snap to grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Restores the object's children's ability to be selected." +msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp -#: editor/project_settings_editor.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Edit" -msgstr "ویرایش کردن" +msgid "Configure Snap..." +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +msgid "Snap Relative" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +msgid "Use Pixel Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Rotation Snap" +msgid "Smart snapping" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap Relative" +msgid "Snap to parent" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." +msgid "Snap to node anchor" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Pixel Snap" +msgid "Snap to node sides" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to other nodes" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Lock the selected object in place (can't be moved)." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Unlock the selected object (can be moved)." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Makes sure the object's children are not selectable." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Skeleton.." +msgid "Restores the object's children's ability to be selected." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3846,11 +3391,16 @@ msgid "View" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Reset" +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show helpers" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Set.." +msgid "Show rulers" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3862,7 +3412,7 @@ msgid "Frame Selection" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Anchor" +msgid "Layout" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3886,11 +3436,20 @@ msgid "Clear Pose" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Set a Value" +msgid "Drag pivot from mouse position" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap (Pixels):" +#, fuzzy +msgid "Set pivot at mouse position" +msgstr "برداشتن موج" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Multiply grid step by 2" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Divide grid step by 2" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3901,23 +3460,28 @@ msgstr "" msgid "Adding %s..." msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Create Node" msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Error instancing scene from %s" msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "OK :(" msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "No parent to instance a child at." msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "This operation requires a single selected node." msgstr "" @@ -3932,45 +3496,6 @@ msgid "" "Drag & drop + Alt : Change node type" msgstr "" -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Create Poly" -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly" -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly (Remove Point)" -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Create a new polygon from scratch." -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -msgid "" -"Edit existing polygon:\n" -"LMB: Move Point.\n" -"Ctrl+LMB: Split Segment.\n" -"RMB: Erase Point." -msgstr "" - #: editor/plugins/collision_polygon_editor_plugin.cpp msgid "Create Poly3D" msgstr "" @@ -3980,14 +3505,6 @@ msgid "Set Handle" msgstr "" #: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Creating Mesh Library" -msgstr "" - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Thumbnail.." -msgstr "" - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Remove item %d?" msgstr "" @@ -4010,6 +3527,27 @@ msgid "Update from Scene" msgstr "" #: editor/plugins/curve_editor_plugin.cpp +msgid "Flat0" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Flat1" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +#, fuzzy +msgid "Ease in" +msgstr "انتخاب شده را تغییر مقیاس بده" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Ease out" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Smoothstep" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp msgid "Modify Curve Point" msgstr "" @@ -4091,22 +3629,18 @@ msgid "Create Occluder Polygon" msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Edit existing polygon:" msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "LMB: Move Point." msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Ctrl+LMB: Split Segment." msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "RMB: Erase Point." msgstr "" @@ -4208,6 +3742,10 @@ msgid "Create Outline" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Body" msgstr "" @@ -4335,12 +3873,72 @@ msgstr "" msgid "Populate" msgstr "" -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Create Navigation Polygon" +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Bake!" +msgstr "" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Bake the navigation mesh.\n" +msgstr "" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Clear the navigation mesh." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Setting up Configuration..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Calculating grid size..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating heightfield..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Marking walkable triangles..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Constructing compact heightfield..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Eroding walkable area..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Partioning..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating contours..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating polymesh..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Converting to native navigation mesh..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Navigation Mesh Generator Setup:" +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Parsing Geometry..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Done!" msgstr "" #: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Remove Poly And Point" +msgid "Create Navigation Polygon" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4514,16 +4112,19 @@ msgid "Curve Point #" msgstr "" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Point Pos" -msgstr "" +#, fuzzy +msgid "Set Curve Point Position" +msgstr "برداشتن موج" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve In Pos" -msgstr "" +#, fuzzy +msgid "Set Curve In Position" +msgstr "برداشتن موج" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Out Pos" -msgstr "" +#, fuzzy +msgid "Set Curve Out Position" +msgstr "برداشتن موج" #: editor/plugins/path_editor_plugin.cpp msgid "Split Path" @@ -4583,6 +4184,14 @@ msgid "Scale Polygon" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit" +msgstr "ویرایش کردن" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon->UV" msgstr "" @@ -4637,63 +4246,10 @@ msgstr "" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "چسباندن" -#: editor/plugins/rich_text_editor_plugin.cpp -msgid "Parse BBCode" -msgstr "" - -#: editor/plugins/sample_editor_plugin.cpp -msgid "Length:" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Open Sample File(s)" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "ERROR: Couldn't load sample!" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Add Sample" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Rename Sample" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Delete Sample" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "16 Bits" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "8 Bits" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Stereo" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Mono" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/script_editor_debugger.cpp -msgid "Format" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Pitch" -msgstr "" - #: editor/plugins/script_editor_plugin.cpp msgid "Clear Recent Files" msgstr "" @@ -4785,6 +4341,10 @@ msgstr "" msgid "Close All" msgstr "بستن" +#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp +msgid "Run" +msgstr "" + #: editor/plugins/script_editor_plugin.cpp msgid "Toggle Scripts Panel" msgstr "" @@ -4827,18 +4387,6 @@ msgid "Debug with external editor" msgstr "ویرایشگر بستگی" #: editor/plugins/script_editor_plugin.cpp -msgid "Window" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Left" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Right" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp msgid "Open Godot online documentation" msgstr "" @@ -4922,7 +4470,7 @@ msgstr "بریدن" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Copy" msgstr "Ú©Ù¾ÛŒ کردن" @@ -5187,10 +4735,6 @@ msgid "View Plane Transform." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Scaling to %s%%." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." msgstr "" @@ -5207,10 +4751,6 @@ msgid "Top View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Top" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "" @@ -5443,6 +4983,10 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Configure Snap.." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Local Coords" msgstr "" @@ -5588,6 +5132,10 @@ msgid "Speed (FPS):" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Loop" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animation Frames" msgstr "" @@ -5600,11 +5148,12 @@ msgid "Insert Empty (After)" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Up" -msgstr "" +#, fuzzy +msgid "Move (Before)" +msgstr "مسیر به سمت گره:" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Down" +msgid "Move (After)" msgstr "" #: editor/plugins/style_box_editor_plugin.cpp @@ -5768,6 +5317,10 @@ msgid "Style" msgstr "" #: editor/plugins/theme_editor_plugin.cpp +msgid "Font" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp msgid "Color" msgstr "" @@ -5818,7 +5371,7 @@ msgid "Mirror Y" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Bucket" +msgid "Paint Tile" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp @@ -5884,6 +5437,10 @@ msgid "Delete preset '%s'?" msgstr "آیا پرونده‌های انتخاب شده ØØ°Ù شود؟" #: editor/project_export.cpp +msgid "Export templates for this platform are missing/corrupted: " +msgstr "" + +#: editor/project_export.cpp msgid "Presets" msgstr "" @@ -5956,19 +5513,30 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +msgid "Export templates for this platform are missing/corrupted:" +msgstr "" + +#: editor/project_export.cpp msgid "Export With Debug" msgstr "" #: editor/project_manager.cpp -msgid "Invalid project path, the path must exist!" +#, fuzzy +msgid "The path does not exists." +msgstr "پرونده موجود نیست." + +#: editor/project_manager.cpp +msgid "Please choose a 'project.godot' file." msgstr "" #: editor/project_manager.cpp -msgid "Invalid project path, project.godot must not exist." +msgid "" +"Your project will be created in a non empty folder (you might want to create " +"a new folder)." msgstr "" #: editor/project_manager.cpp -msgid "Invalid project path, project.godot must exist." +msgid "Please choose a folder that does not contain a 'project.godot' file." msgstr "" #: editor/project_manager.cpp @@ -5976,10 +5544,26 @@ msgid "Imported Project" msgstr "" #: editor/project_manager.cpp +msgid " " +msgstr "" + +#: editor/project_manager.cpp +msgid "It would be a good idea to name your project." +msgstr "" + +#: editor/project_manager.cpp msgid "Invalid project path (changed anything?)." msgstr "" #: editor/project_manager.cpp +msgid "Couldn't get project.godot in project path." +msgstr "" + +#: editor/project_manager.cpp +msgid "Couldn't edit project.godot in project path." +msgstr "" + +#: editor/project_manager.cpp msgid "Couldn't create project.godot in project path." msgstr "" @@ -5988,15 +5572,20 @@ msgid "The following files failed extraction from package:" msgstr "" #: editor/project_manager.cpp -msgid "Import Existing Project" +#, fuzzy +msgid "Rename Project" +msgstr "صادر کردن پروژه" + +#: editor/project_manager.cpp +msgid "Couldn't get project.godot in the project path." msgstr "" #: editor/project_manager.cpp -msgid "Project Path (Must Exist):" +msgid "New Game Project" msgstr "" #: editor/project_manager.cpp -msgid "Project Name:" +msgid "Import Existing Project" msgstr "" #: editor/project_manager.cpp @@ -6004,19 +5593,24 @@ msgid "Create New Project" msgstr "" #: editor/project_manager.cpp -msgid "Project Path:" +msgid "Install Project:" msgstr "" #: editor/project_manager.cpp -msgid "Install Project:" +msgid "Project Name:" msgstr "" #: editor/project_manager.cpp -msgid "Browse" +#, fuzzy +msgid "Create folder" +msgstr "پوشه ایجاد Ú©Ù†" + +#: editor/project_manager.cpp +msgid "Project Path:" msgstr "" #: editor/project_manager.cpp -msgid "New Game Project" +msgid "Browse" msgstr "" #: editor/project_manager.cpp @@ -6028,6 +5622,11 @@ msgid "Unnamed Project" msgstr "" #: editor/project_manager.cpp +#, fuzzy +msgid "Can't open project" +msgstr "در ØØ§Ù„ اتصال..." + +#: editor/project_manager.cpp msgid "Are you sure to open more than one project?" msgstr "" @@ -6065,10 +5664,6 @@ msgid "Project List" msgstr "" #: editor/project_manager.cpp -msgid "Run" -msgstr "" - -#: editor/project_manager.cpp msgid "Scan" msgstr "" @@ -6127,17 +5722,14 @@ msgid "Add Input Action Event" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Meta+" msgstr "+Meta" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Shift+" msgstr "+Shift" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Alt+" msgstr "+Alt" @@ -6198,7 +5790,7 @@ msgstr "تغییر بده" msgid "Joypad Axis Index:" msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Axis" msgstr "Ù…ØÙˆØ±" @@ -6218,31 +5810,31 @@ msgstr "" msgid "Add Event" msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Device" msgstr "دستگاه" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Button" msgstr "دکمه" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Left Button." msgstr "دکمه‌ی Ú†Ù¾." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Right Button." msgstr "دکمه‌ی راست." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Middle Button." msgstr "دکمه‌ی وسط." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Up." msgstr "غلطاندن به بالا." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Down." msgstr "غلطاندن به پایین." @@ -6252,7 +5844,7 @@ msgid "Add Global Property" msgstr "دارایی Getter را اضاÙÙ‡ Ú©Ù†" #: editor/project_settings_editor.cpp -msgid "Select an setting item first!" +msgid "Select a setting item first!" msgstr "" #: editor/project_settings_editor.cpp @@ -6270,6 +5862,15 @@ msgid "Delete Item" msgstr "ØØ°Ù Ú©Ù†" #: editor/project_settings_editor.cpp +#, fuzzy +msgid "Can't contain '/' or ':'" +msgstr "اتصال به گره:" + +#: editor/project_settings_editor.cpp +msgid "Already existing" +msgstr "" + +#: editor/project_settings_editor.cpp msgid "Error saving settings." msgstr "" @@ -6420,10 +6021,19 @@ msgid "New Script" msgstr "صØÙ†Ù‡ جدید" #: editor/property_editor.cpp +msgid "Make Unique" +msgstr "" + +#: editor/property_editor.cpp msgid "Show in File System" msgstr "" #: editor/property_editor.cpp +#, fuzzy +msgid "Convert To %s" +msgstr "اتصال به گره:" + +#: editor/property_editor.cpp msgid "Error loading file: Not a resource!" msgstr "" @@ -6463,6 +6073,11 @@ msgstr "دارایی Setter را اضاÙÙ‡ Ú©Ù†" #: editor/property_selector.cpp #, fuzzy +msgid "Select Virtual Method" +msgstr "انتخاب ØØ§Ù„ت" + +#: editor/property_selector.cpp +#, fuzzy msgid "Select Method" msgstr "انتخاب ØØ§Ù„ت" @@ -6490,26 +6105,6 @@ msgstr "" msgid "Reparent" msgstr "" -#: editor/resources_dock.cpp -msgid "Create New Resource" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Open Resource" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Save Resource" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Resource Tools" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Make Local" -msgstr "" - #: editor/run_settings_dialog.cpp msgid "Run Mode:" msgstr "" @@ -6637,14 +6232,6 @@ msgid "Sub-Resources:" msgstr "منبع" #: editor/scene_tree_dock.cpp -msgid "Edit Groups" -msgstr "" - -#: editor/scene_tree_dock.cpp -msgid "Edit Connections" -msgstr "" - -#: editor/scene_tree_dock.cpp msgid "Clear Inheritance" msgstr "" @@ -6832,6 +6419,15 @@ msgid "Invalid base path" msgstr "" #: editor/script_create_dialog.cpp +msgid "Directory of the same name exists" +msgstr "" + +#: editor/script_create_dialog.cpp +#, fuzzy +msgid "File exists, will be reused" +msgstr "ÙØ§ÛŒÙ„ وجود دارد، آیا بازنویسی شود؟" + +#: editor/script_create_dialog.cpp msgid "Invalid extension" msgstr "" @@ -6875,6 +6471,10 @@ msgid "Load existing script file" msgstr "" #: editor/script_create_dialog.cpp +msgid "Language" +msgstr "" + +#: editor/script_create_dialog.cpp #, fuzzy msgid "Inherits" msgstr "میراث:" @@ -6919,6 +6519,10 @@ msgid "Function:" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Errors" msgstr "" @@ -6999,6 +6603,10 @@ msgid "Type" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Format" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Usage" msgstr "" @@ -7074,6 +6682,24 @@ msgstr "" msgid "Change Probe Extents" msgstr "" +#: modules/gdnative/gd_native_library_editor.cpp +#, fuzzy +msgid "Library" +msgstr "صادکردن ÙØ§ÛŒÙ„ کتابخانه ای" + +#: modules/gdnative/gd_native_library_editor.cpp +#, fuzzy +msgid "Status" +msgstr "وضعیت:" + +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Libraries: " +msgstr "" + +#: modules/gdnative/register_types.cpp +msgid "GDNative" +msgstr "" + #: modules/gdscript/gd_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Invalid type argument to convert(), use TYPE_* constants." @@ -7081,7 +6707,7 @@ msgstr "" "نوع آرگومان برای متد ()convert ‌ نامعتبر است ،‌ از ثابت های *_TYPE‌ Ø§Ø³ØªÙØ§Ø¯Ù‡ " "کنید ." -#: modules/gdscript/gd_functions.cpp +#: modules/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "" @@ -7138,10 +6764,6 @@ msgid "GridMap Duplicate Selection" msgstr "انتخاب شده را به دو تا تکثیر Ú©Ù†" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Paint" -msgstr "" - -#: modules/gridmap/grid_map_editor_plugin.cpp msgid "Snap View" msgstr "" @@ -7238,13 +6860,8 @@ msgstr "ØªØ±Ø¬ÛŒØØ§Øª" msgid "Pick Distance:" msgstr "" -#: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy -msgid "Tiles" -msgstr "پرونده:" - -#: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Areas" +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "Builds" msgstr "" #: modules/visual_script/visual_script.cpp @@ -7455,10 +7072,18 @@ msgid "Return" msgstr "بازگشت:" #: modules/visual_script/visual_script_editor.cpp +msgid "Call" +msgstr "ÙØ±Ø§Ø®ÙˆØ§Ù†ÛŒ" + +#: modules/visual_script/visual_script_editor.cpp msgid "Get" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Script already has function '%s'" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Change Input Value" msgstr "مقدار آرایه را تغییر بده" @@ -7874,6 +7499,12 @@ msgstr "" "یک منبع SpriteFrames باید در دارایی Frames ایجاد شده باشد تا " "AnimatedSprite3D ÙØ±ÛŒÙ…‌ها را نمایش دهد." +#: scene/3d/vehicle_body.cpp +msgid "" +"VehicleWheel serves to provide a wheel system to a VehicleBody. Please use " +"it as a child of a VehicleBody." +msgstr "" + #: scene/gui/color_picker.cpp msgid "Raw Mode" msgstr "" @@ -7883,6 +7514,10 @@ msgid "Add current color as a preset" msgstr "" #: scene/gui/dialogs.cpp +msgid "Cancel" +msgstr "لغو" + +#: scene/gui/dialogs.cpp msgid "Alert!" msgstr "هشدار!" @@ -7890,10 +7525,6 @@ msgstr "هشدار!" msgid "Please Confirm..." msgstr "Ù„Ø·ÙØ§ تأیید کنید..." -#: scene/gui/input_action.cpp -msgid "Ctrl+" -msgstr "+Ctrl" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -7929,6 +7560,56 @@ msgstr "" "تا بتواند یک اندازه بگیرد. در غیر اینصورت، آن را یک RenderTarget قرار دهید Ùˆ " "Ø¨Ø§ÙØª داخلی آن را برای نمایش به تعدادی گره تخصیص دهید." +#: scene/resources/dynamic_font.cpp +msgid "Error initializing FreeType." +msgstr "خطا در ارزش‌دهی آغارین به FreeType." + +#: scene/resources/dynamic_font.cpp +msgid "Unknown font format." +msgstr "ÙØ±Ù…ت قلم ناشناخته." + +#: scene/resources/dynamic_font.cpp +msgid "Error loading font." +msgstr "خطای بارگذاری قلم." + +#: scene/resources/dynamic_font.cpp +msgid "Invalid font size." +msgstr "اندازه‌ی قلم نامعتبر." + +#~ msgid "Method List For '%s':" +#~ msgstr "لیست متد برای 's%' :" + +#~ msgid "Arguments:" +#~ msgstr "نشانوندها:" + +#~ msgid "Return:" +#~ msgstr "بازگشت:" + +#~ msgid "Added:" +#~ msgstr "Ø§ÙØ²ÙˆØ¯Ù‡ شده:" + +#~ msgid "Removed:" +#~ msgstr "برداشته شده:" + +#~ msgid "Re-Importing" +#~ msgstr "در ØØ§Ù„ وارد کردن دوباره..." + +#, fuzzy +#~ msgid "Error moving file:\n" +#~ msgstr "خطا در بارگذاری:" + +#~ msgid "The quick brown fox jumps over the lazy dog." +#~ msgstr "" +#~ "کلاغ ÙØ±Ø² Ùˆ چابک، ظهر هر روز با صدای ضخیم Ùˆ عذاب‌آورش بـه جستجوی یک مثقال " +#~ "گنج پنهان در ØÛŒØ§Ø· رژه Ù…ÛŒ Ø±ÙØª." + +#, fuzzy +#~ msgid "Tiles" +#~ msgstr "پرونده:" + +#~ msgid "Ctrl+" +#~ msgstr "+Ctrl" + #, fuzzy #~ msgid "Invalid unique name." #~ msgstr "نام نامعتبر." diff --git a/editor/translations/fi.po b/editor/translations/fi.po index 6cd55dbc6a..170a487e54 100644 --- a/editor/translations/fi.po +++ b/editor/translations/fi.po @@ -195,10 +195,9 @@ msgid "Create %d NEW tracks and insert keys?" msgstr "" #: editor/animation_editor.cpp editor/create_dialog.cpp -#: editor/editor_audio_buses.cpp +#: editor/editor_audio_buses.cpp editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp #: editor/plugins/mesh_instance_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp editor/project_manager.cpp #: editor/script_create_dialog.cpp msgid "Create" @@ -361,272 +360,6 @@ msgstr "Vaihda taulukon arvon tyyppiä" msgid "Change Array Value" msgstr "Vaihda taulukon arvoa" -#: editor/asset_library_editor_plugin.cpp -msgid "Free" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp -msgid "Version:" -msgstr "Versio:" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Contents:" -msgstr "Vakiot:" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "View Files" -msgstr " Tiedostot" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_help.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp -msgid "Description:" -msgstr "Kuvaus:" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -#: editor/project_manager.cpp -msgid "Install" -msgstr "Asenna" - -#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp -#: editor/connections_dialog.cpp editor/export_template_manager.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -#: editor/project_settings_editor.cpp editor/property_editor.cpp -#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Close" -msgstr "Sulje" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve hostname:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Connection error, please try again." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Can't connect." -msgstr "Yhdistä..." - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Can't connect to host:" -msgstr "Yhdistä Nodeen:" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response from host:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Request failed, return code:" -msgstr "Pyydetty tiedostomuoto tuntematon:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Req. Failed." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Request failed, too many redirects" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Redirect Loop." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Bad download hash, assuming file has been tampered with." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Expected:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Got:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed sha256 hash check" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Asset Download Error:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -msgid "Success!" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Fetching:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Resolving.." -msgstr "Tallennetaan..." - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Connecting.." -msgstr "Yhdistä..." - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Requesting.." -msgstr "Testaus" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Error making request" -msgstr "Virhe tallennettaessa resurssia!" - -#: editor/asset_library_editor_plugin.cpp -msgid "Idle" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Retry" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Download Error" -msgstr "Lataa" - -#: editor/asset_library_editor_plugin.cpp -msgid "Download for this asset is already in progress!" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "first" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "prev" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "next" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "last" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "All" -msgstr "Kaikki" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/property_selector.cpp editor/quick_open.cpp -#: editor/settings_config_dialog.cpp -msgid "Search:" -msgstr "Hae:" - -#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Search" -msgstr "Hae" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/project_manager.cpp -msgid "Import" -msgstr "Tuo" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Plugins" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Sort:" -msgstr "Lajittele:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Reverse" -msgstr "Käänteinen" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Category:" -msgstr "Kategoria:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Site:" -msgstr "Sivu:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "Tuki..." - -#: editor/asset_library_editor_plugin.cpp -msgid "Official" -msgstr "Virallinen" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -msgid "Community" -msgstr "Yhteisö" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Testing" -msgstr "Testaus" - -#: editor/asset_library_editor_plugin.cpp -msgid "Assets ZIP File" -msgstr "" - -#: editor/call_dialog.cpp -msgid "Method List For '%s':" -msgstr "" - -#: editor/call_dialog.cpp modules/visual_script/visual_script_editor.cpp -msgid "Call" -msgstr "Kutsu" - -#: editor/call_dialog.cpp -msgid "Method List:" -msgstr "Metodilista:" - -#: editor/call_dialog.cpp -msgid "Arguments:" -msgstr "Argumentit:" - -#: editor/call_dialog.cpp -msgid "Return:" -msgstr "Palaa:" - #: editor/code_editor.cpp msgid "Go to Line" msgstr "Mene riville" @@ -663,6 +396,14 @@ msgstr "Kokonaisia sanoja" msgid "Selection Only" msgstr "Pelkkä valinta" +#: editor/code_editor.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp +msgid "Search" +msgstr "Hae" + #: editor/code_editor.cpp editor/editor_help.cpp msgid "Find" msgstr "Etsi" @@ -695,11 +436,11 @@ msgstr "" msgid "Skip" msgstr "Ohita" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom In" msgstr "Lähennä" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom Out" msgstr "Loitonna" @@ -767,6 +508,20 @@ msgstr "Lykätty" msgid "Oneshot" msgstr "Ainoa" +#: editor/connections_dialog.cpp editor/dependency_editor.cpp +#: editor/export_template_manager.cpp +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Close" +msgstr "Sulje" + #: editor/connections_dialog.cpp msgid "Connect" msgstr "Yhdistä" @@ -792,7 +547,7 @@ msgstr "Yhdistä..." msgid "Disconnect" msgstr "Katkaise yhteys" -#: editor/connections_dialog.cpp editor/node_dock.cpp +#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" msgstr "Signaalit" @@ -810,12 +565,25 @@ msgstr "Suosikit:" msgid "Recent:" msgstr "Viimeaikainen / Viimeaikaiset:" +#: editor/create_dialog.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp +#: editor/quick_open.cpp editor/settings_config_dialog.cpp +msgid "Search:" +msgstr "Hae:" + #: editor/create_dialog.cpp editor/editor_help.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp #: editor/quick_open.cpp msgid "Matches:" msgstr "Osumat:" +#: editor/create_dialog.cpp editor/editor_help.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp +#: editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "Kuvaus:" + #: editor/dependency_editor.cpp msgid "Search Replacement For:" msgstr "Hae korvattava:" @@ -875,6 +643,10 @@ msgid "Owners Of:" msgstr "" #: editor/dependency_editor.cpp +msgid "Remove selected files from the project? (no undo)" +msgstr "Poista valitut tiedostot projektista? (ei voi kumota)" + +#: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" @@ -882,8 +654,8 @@ msgid "" msgstr "" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (no undo)" -msgstr "Poista valitut tiedostot projektista? (ei voi kumota)" +msgid "Cannot remove:\n" +msgstr "" #: editor/dependency_editor.cpp msgid "Error loading:" @@ -952,11 +724,6 @@ msgstr "" #: editor/editor_about.cpp #, fuzzy -msgid "Authors" -msgstr "Tekijä:" - -#: editor/editor_about.cpp -#, fuzzy msgid "Project Founders" msgstr "Projektinhallinta" @@ -973,6 +740,40 @@ msgid "Developers" msgstr "" #: editor/editor_about.cpp +#, fuzzy +msgid "Authors" +msgstr "Tekijä:" + +#: editor/editor_about.cpp +msgid "Platinum Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Mini Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Silver Donors" +msgstr "" + +#: editor/editor_about.cpp +#, fuzzy +msgid "Bronze Donors" +msgstr "Kloonaa alas" + +#: editor/editor_about.cpp +msgid "Donors" +msgstr "" + +#: editor/editor_about.cpp msgid "License" msgstr "" @@ -1016,6 +817,16 @@ msgid "Package Installed Successfully!" msgstr "Paketti asennettu onnistuneesti!" #: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Success!" +msgstr "" + +#: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp +msgid "Install" +msgstr "Asenna" + +#: editor/editor_asset_installer.cpp #, fuzzy msgid "Package Installer" msgstr "Paketti asennettu onnistuneesti!" @@ -1068,11 +879,6 @@ msgid "Audio Bus, Drag and Drop to rearrange." msgstr "" #: editor/editor_audio_buses.cpp -#, fuzzy -msgid "Bus options" -msgstr "Debug-asetukset" - -#: editor/editor_audio_buses.cpp msgid "Solo" msgstr "" @@ -1084,6 +890,11 @@ msgstr "" msgid "Bypass" msgstr "" +#: editor/editor_audio_buses.cpp +#, fuzzy +msgid "Bus options" +msgstr "Debug-asetukset" + #: editor/editor_audio_buses.cpp editor/plugins/tile_map_editor_plugin.cpp #: editor/scene_tree_dock.cpp msgid "Duplicate" @@ -1091,6 +902,11 @@ msgstr "Monista" #: editor/editor_audio_buses.cpp #, fuzzy +msgid "Reset Volume" +msgstr "Nollaa lähennys" + +#: editor/editor_audio_buses.cpp +#, fuzzy msgid "Delete Effect" msgstr "Poista valitut" @@ -1115,6 +931,11 @@ msgstr "Monista animaatio" #: editor/editor_audio_buses.cpp #, fuzzy +msgid "Reset Bus Volume" +msgstr "Nollaa lähennys" + +#: editor/editor_audio_buses.cpp +#, fuzzy msgid "Move Audio Bus" msgstr "Siirrä lisäyspainiketta" @@ -1149,7 +970,8 @@ msgstr "Lisää väylä" msgid "Create a new Bus Layout." msgstr "" -#: editor/editor_audio_buses.cpp editor/script_create_dialog.cpp +#: editor/editor_audio_buses.cpp editor/property_editor.cpp +#: editor/script_create_dialog.cpp msgid "Load" msgstr "Lataa" @@ -1241,7 +1063,7 @@ msgid "Rearrange Autoloads" msgstr "" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp scene/gui/file_dialog.cpp +#: scene/gui/file_dialog.cpp msgid "Path:" msgstr "Polku:" @@ -1249,9 +1071,7 @@ msgstr "Polku:" msgid "Node Name:" msgstr "Noden nimi:" -#: editor/editor_autoload_settings.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp editor/project_manager.cpp +#: editor/editor_autoload_settings.cpp editor/project_manager.cpp msgid "Name" msgstr "Nimi" @@ -1284,18 +1104,19 @@ msgid "Choose a Directory" msgstr "Valitse hakemisto" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Create Folder" msgstr "Luo kansio" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: editor/editor_plugin_settings.cpp editor/plugins/theme_editor_plugin.cpp -#: editor/project_export.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp +#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp +#: scene/gui/file_dialog.cpp msgid "Name:" msgstr "Nimi:" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Could not create folder." msgstr "Kansiota ei voitu luoda." @@ -1315,30 +1136,6 @@ msgstr "Pakataan" msgid "Template file not found:\n" msgstr "Mallitiedostoa ei löytynyt:\n" -#: editor/editor_export.cpp -msgid "Added:" -msgstr "Lisätty:" - -#: editor/editor_export.cpp -msgid "Removed:" -msgstr "Poistettu:" - -#: editor/editor_export.cpp -msgid "Error saving atlas:" -msgstr "Virhe tallennettaessa atlas-kuvaa:" - -#: editor/editor_export.cpp -msgid "Could not save atlas subtexture:" -msgstr "" - -#: editor/editor_export.cpp -msgid "Exporting for %s" -msgstr "" - -#: editor/editor_export.cpp -msgid "Setting Up.." -msgstr "" - #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "Tiedosto on jo olemassa, korvaa?" @@ -1425,6 +1222,11 @@ msgstr "Siirrä suosikkia ylös" msgid "Move Favorite Down" msgstr "Siirrä suosikkia alas" +#: editor/editor_file_dialog.cpp +#, fuzzy +msgid "Go to parent folder" +msgstr "Kansiota ei voitu luoda." + #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Directories & Files:" msgstr "Hakemistot & tiedostot:" @@ -1469,6 +1271,10 @@ msgstr "Luokkaluettelo:" msgid "Search Classes" msgstr "Etsi luokkia" +#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +msgid "Top" +msgstr "Pinta" + #: editor/editor_help.cpp editor/property_editor.cpp msgid "Class:" msgstr "Luokka:" @@ -1486,15 +1292,29 @@ msgstr "Peritty:" msgid "Brief Description:" msgstr "Lyhyt kuvaus:" +#: editor/editor_help.cpp +#, fuzzy +msgid "Members" +msgstr "Jäsenet:" + #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "Jäsenet:" #: editor/editor_help.cpp +#, fuzzy +msgid "Public Methods" +msgstr "Julkiset metodit:" + +#: editor/editor_help.cpp msgid "Public Methods:" msgstr "Julkiset metodit:" #: editor/editor_help.cpp +msgid "GUI Theme Items" +msgstr "" + +#: editor/editor_help.cpp msgid "GUI Theme Items:" msgstr "" @@ -1504,6 +1324,11 @@ msgstr "" #: editor/editor_help.cpp #, fuzzy +msgid "Enumerations" +msgstr "Animaatiot" + +#: editor/editor_help.cpp +#, fuzzy msgid "Enumerations:" msgstr "Animaatiot" @@ -1512,19 +1337,51 @@ msgid "enum " msgstr "" #: editor/editor_help.cpp +#, fuzzy +msgid "Constants" +msgstr "Vakiot:" + +#: editor/editor_help.cpp msgid "Constants:" msgstr "Vakiot:" #: editor/editor_help.cpp #, fuzzy +msgid "Description" +msgstr "Kuvaus:" + +#: editor/editor_help.cpp +#, fuzzy +msgid "Properties" +msgstr "Ominaisuudet:" + +#: editor/editor_help.cpp +#, fuzzy msgid "Property Description:" msgstr "Ominaisuuden kuvaus:" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this property. Please help us by " +"[color=$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp +#, fuzzy +msgid "Methods" +msgstr "Metodilista:" + +#: editor/editor_help.cpp msgid "Method Description:" msgstr "Metodin kuvaus:" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this method. Please help us by [color=" +"$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp msgid "Search Text" msgstr "Hae tekstiä" @@ -1534,24 +1391,21 @@ msgid "Output:" msgstr " Tuloste:" #: editor/editor_log.cpp editor/plugins/animation_tree_editor_plugin.cpp -#: editor/plugins/rich_text_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_editor_debugger.cpp scene/gui/line_edit.cpp -#: scene/gui/text_edit.cpp +#: editor/property_editor.cpp editor/script_editor_debugger.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Clear" msgstr "Tyhjennä" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Error saving resource!" msgstr "Virhe tallennettaessa resurssia!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Save Resource As.." msgstr "Tallenna resurssi nimellä..." -#: editor/editor_node.cpp editor/export_template_manager.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "I see.." msgstr "Ymmärrän..." @@ -1568,6 +1422,30 @@ msgid "Error while saving." msgstr "Virhe tallennettaessa." #: editor/editor_node.cpp +#, fuzzy +msgid "Can't open '%s'." +msgstr "Yhdistä..." + +#: editor/editor_node.cpp +#, fuzzy +msgid "Error while parsing '%s'." +msgstr "Virhe tallennettaessa." + +#: editor/editor_node.cpp +msgid "Unexpected end of file '%s'." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Missing '%s' or its dependencies." +msgstr "Scenellä '%s' on rikkinäisiä riippuvuuksia:" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Error while loading '%s'." +msgstr "Virhe tallennettaessa." + +#: editor/editor_node.cpp msgid "Saving Scene" msgstr "Tallennetaan sceneä" @@ -1626,6 +1504,33 @@ msgid "Restored default layout to base settings." msgstr "" #: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was imported, so it's not editable.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was instanced or inherited.\n" +"Changes to it will not be kept when saving the current scene." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource was imported, so it's not editable. Change its settings in the " +"import panel and then re-import." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This scene was imported, so changes to it will not be kept.\n" +"Instancing it or inheriting will allow making changes to it.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp msgid "Copy Params" msgstr "Kopioi parametrit" @@ -1801,6 +1706,12 @@ msgid "Save changes the following scene(s) before opening Project Manager?" msgstr "" #: editor/editor_node.cpp +msgid "" +"This option is deprecated. Situations where refresh must be forced are now " +"considered a bug. Please report." +msgstr "" + +#: editor/editor_node.cpp msgid "Pick a Main Scene" msgstr "Valitse pääscene" @@ -1829,7 +1740,7 @@ msgstr "" "Muokataksesi sitä voit luoda uuden perityn Scenen." #: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Ugh" msgstr "Äh" @@ -1842,14 +1753,15 @@ msgstr "" "toimintoa avataksesi Scenen ja tallenna se projektin polkuun." #: editor/editor_node.cpp -msgid "Error loading scene." -msgstr "Virhe ladatessa Sceneä." - -#: editor/editor_node.cpp msgid "Scene '%s' has broken dependencies:" msgstr "Scenellä '%s' on rikkinäisiä riippuvuuksia:" #: editor/editor_node.cpp +#, fuzzy +msgid "Clear Recent Scenes" +msgstr "Tyhjennä luut" + +#: editor/editor_node.cpp msgid "Save Layout" msgstr "Tallenna Layout" @@ -1883,7 +1795,7 @@ msgstr "" msgid "Toggle distraction-free mode." msgstr "" -#: editor/editor_node.cpp editor/io_plugins/editor_scene_import_plugin.cpp +#: editor/editor_node.cpp msgid "Scene" msgstr "Scene" @@ -2105,6 +2017,10 @@ msgstr "" msgid "Issue Tracker" msgstr "" +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +msgid "Community" +msgstr "Yhteisö" + #: editor/editor_node.cpp msgid "About" msgstr "Tietoja" @@ -2114,7 +2030,7 @@ msgstr "Tietoja" msgid "Play the project." msgstr "Toista projekti" -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp #, fuzzy msgid "Play" msgstr "Toista" @@ -2131,7 +2047,7 @@ msgstr "Pysäytä Scene" msgid "Stop the scene." msgstr "Lopeta Scene." -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Stop" msgstr "Pysäytä" @@ -2204,6 +2120,16 @@ msgid "Object properties." msgstr "Objektin ominaisuudet." #: editor/editor_node.cpp +#, fuzzy +msgid "Changes may be lost!" +msgstr "Vaihda säteen muodon pituutta" + +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Import" +msgstr "Tuo" + +#: editor/editor_node.cpp msgid "FileSystem" msgstr "Tiedostojärjestelmä" @@ -2219,14 +2145,6 @@ msgstr "Tuloste" msgid "Don't Save" msgstr "" -#: editor/editor_node.cpp editor/editor_reimport_dialog.cpp -msgid "Re-Import" -msgstr "Tuo uudelleen" - -#: editor/editor_node.cpp editor/editor_plugin_settings.cpp -msgid "Update" -msgstr "Päivitä" - #: editor/editor_node.cpp msgid "Import Templates From ZIP File" msgstr "Tuo mallit ZIP-tiedostosta" @@ -2294,11 +2212,28 @@ msgstr "Avaa editorissa" msgid "Open the previous Editor" msgstr "Avaa editorissa" +#: editor/editor_plugin.cpp +msgid "Creating Mesh Previews" +msgstr "" + +#: editor/editor_plugin.cpp +msgid "Thumbnail.." +msgstr "Pienoiskuva..." + #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" msgstr "Asennetut lisäosat:" #: editor/editor_plugin_settings.cpp +msgid "Update" +msgstr "Päivitä" + +#: editor/editor_plugin_settings.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Version:" +msgstr "Versio:" + +#: editor/editor_plugin_settings.cpp msgid "Author:" msgstr "Tekijä:" @@ -2351,27 +2286,6 @@ msgstr "Itse" msgid "Frame #:" msgstr "" -#: editor/editor_reimport_dialog.cpp -#, fuzzy -msgid "Please wait for scan to complete." -msgstr "Ole hyvä ja odota läpikäynnin valmistumista." - -#: editor/editor_reimport_dialog.cpp -msgid "Current scene must be saved to re-import." -msgstr "Nykyinen Scene täytyy tallentaa, jotta se voidaan tuoda uudelleen." - -#: editor/editor_reimport_dialog.cpp -msgid "Save & Re-Import" -msgstr "Tallenna & tuo uudelleen" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Importing" -msgstr "Tuodaan uudelleen" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Import Changed Resources" -msgstr "Tuo uudelleen vaihtuneet resurssit" - #: editor/editor_run_native.cpp msgid "Select device from the list" msgstr "" @@ -2481,10 +2395,6 @@ msgid "Importing:" msgstr "Tuodaan:" #: editor/export_template_manager.cpp -msgid "Loading Export Templates" -msgstr "" - -#: editor/export_template_manager.cpp msgid "Current Version:" msgstr "Nykyinen versio:" @@ -2517,11 +2427,18 @@ msgid "Cannot navigate to '" msgstr "Ei voida navigoida '" #: editor/filesystem_dock.cpp -#, fuzzy +msgid "View items as a grid of thumbnails" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "View items as a list" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "" "\n" -"Status: Needs Re-Import" -msgstr "Tallenna & tuo uudelleen" +"Status: Import of file failed. Please fix file and reimport manually." +msgstr "" #: editor/filesystem_dock.cpp #, fuzzy @@ -2531,46 +2448,55 @@ msgid "" msgstr "Lähde:" #: editor/filesystem_dock.cpp -msgid "Same source and destination files, doing nothing." -msgstr "Sama lähde ja kohdetiedosto, ei toimenpiteitä." +msgid "Cannot move/rename resources root." +msgstr "" #: editor/filesystem_dock.cpp -msgid "Target file exists, can't overwrite. Delete first." -msgstr "" +#, fuzzy +msgid "Cannot move a folder into itself.\n" +msgstr "Tiedostoa ei voi tuoda itseensä:" #: editor/filesystem_dock.cpp -msgid "Same source and destination paths, doing nothing." -msgstr "Sama lähde ja kohdepolku, ei toimenpiteitä." +#, fuzzy +msgid "Error moving:\n" +msgstr "Virhe tuotaessa:" #: editor/filesystem_dock.cpp -msgid "Can't move directories to within themselves." -msgstr "Hakemisto(j)a ei voida siirtää itseensä." +#, fuzzy +msgid "Unable to update dependencies:\n" +msgstr "Scenellä '%s' on rikkinäisiä riippuvuuksia:" + +#: editor/filesystem_dock.cpp +msgid "No name provided" +msgstr "" #: editor/filesystem_dock.cpp -msgid "Can't rename deps for:\n" +msgid "Provided name contains invalid characters" msgstr "" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Error moving file:\n" -msgstr "Virhe ladattaessa kuvaa:" +msgid "No name provided." +msgstr "Nimeä uudelleen tai siirrä..." #: editor/filesystem_dock.cpp #, fuzzy -msgid "Error moving dir:\n" -msgstr "Virhe tuotaessa:" +msgid "Name contains invalid characters." +msgstr "Kelvolliset merkit:" #: editor/filesystem_dock.cpp -msgid "Can't operate on '..'" +msgid "A file or folder with this name already exists." msgstr "" #: editor/filesystem_dock.cpp -msgid "Pick New Name and Location For:" -msgstr "Valitse uusi nimi ja sijainti:" +#, fuzzy +msgid "Renaming file:" +msgstr "Nimeä muuttuja uudelleen" #: editor/filesystem_dock.cpp -msgid "No files selected!" -msgstr "Ei valittuja tiedostoja!" +#, fuzzy +msgid "Renaming folder:" +msgstr "Nimeä Node uudelleen" #: editor/filesystem_dock.cpp msgid "Expand all" @@ -2581,40 +2507,38 @@ msgid "Collapse all" msgstr "Pienennä kaikki" #: editor/filesystem_dock.cpp -msgid "Show In File Manager" -msgstr "Näytä tiedostonhallinnassa" - -#: editor/filesystem_dock.cpp -msgid "Instance" -msgstr "Instanssi" +msgid "Copy Path" +msgstr "Kopioi polku" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "Muokkaa riippuvuuksia..." +#, fuzzy +msgid "Rename.." +msgstr "Nimeä uudelleen" #: editor/filesystem_dock.cpp -msgid "View Owners.." -msgstr "Tarkastele omistajia..." +msgid "Move To.." +msgstr "Siirrä..." #: editor/filesystem_dock.cpp -msgid "Copy Path" -msgstr "Kopioi polku" +#, fuzzy +msgid "New Folder.." +msgstr "Luo kansio" #: editor/filesystem_dock.cpp -msgid "Rename or Move.." -msgstr "Nimeä uudelleen tai siirrä..." +msgid "Show In File Manager" +msgstr "Näytä tiedostonhallinnassa" #: editor/filesystem_dock.cpp -msgid "Move To.." -msgstr "Siirrä..." +msgid "Instance" +msgstr "Instanssi" #: editor/filesystem_dock.cpp -msgid "Info" -msgstr "Tietoja" +msgid "Edit Dependencies.." +msgstr "Muokkaa riippuvuuksia..." #: editor/filesystem_dock.cpp -msgid "Re-Import.." -msgstr "Tuo uudelleen..." +msgid "View Owners.." +msgstr "Tarkastele omistajia..." #: editor/filesystem_dock.cpp msgid "Previous Directory" @@ -2646,6 +2570,11 @@ msgstr "" msgid "Move" msgstr "Siirrä" +#: editor/filesystem_dock.cpp editor/plugins/animation_tree_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Rename" +msgstr "Nimeä uudelleen" + #: editor/groups_editor.cpp msgid "Add to Group" msgstr "Lisää ryhmään" @@ -2660,6 +2589,11 @@ msgid "Import as Single Scene" msgstr "Tuodaan Scene..." #: editor/import/resource_importer_scene.cpp +#, fuzzy +msgid "Import with Separate Animations" +msgstr "Tuo animaatiot..." + +#: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials" msgstr "" @@ -2672,6 +2606,18 @@ msgid "Import with Separate Objects+Materials" msgstr "" #: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Materials+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Materials+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp #, fuzzy msgid "Import as Multiple Scenes" msgstr "Tuo 3D Scene" @@ -2681,38 +2627,31 @@ msgid "Import as Multiple Scenes+Materials" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Import Scene" msgstr "Tuo Scene" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Importing Scene.." msgstr "Tuodaan Scene..." #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Running Custom Script.." msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Couldn't load post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Invalid/broken script for post-import (check console):" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Error running post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Saving.." msgstr "Tallennetaan..." @@ -2741,595 +2680,55 @@ msgstr "Esiasetus..." msgid "Reimport" msgstr "Tuo uudelleen" -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "No bit masks to import!" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path is empty." -msgstr "Kohdepolku on tyhjä." - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must be a complete resource path." -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must exist." -msgstr "Kohdepolku täytyy olla olemassa." - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Save path is empty!" -msgstr "Tallennuspolku on tyhjä!" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Import BitMasks" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s):" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Target Path:" -msgstr "Kohdepolku:" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Accept" -msgstr "Hyväksy" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Bit Mask" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No source font file!" -msgstr "Ei fontin lähdetiedostoa!" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No target font resource!" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#, fuzzy -msgid "" -"Invalid file extension.\n" -"Please use .font." -msgstr "" -"Virheellinen tiedostolaajennus.\n" -"Käytä .fnt -tiedostoa." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Can't load/process source font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Couldn't save font." -msgstr "Fonttia ei voitu tallentaa." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font Size:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Dest Resource:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "The quick brown fox jumps over the lazy dog." -msgstr "Ovela kettu punaturkki laiskan koiran takaa kurkki." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Test:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Options:" -msgstr "Asetukset:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Font Import" -msgstr "Fontin tuonti" - -#: 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 "" -"Tämä tiedosto on jo Godotin fonttitiedosto, ole hyvä ja syötä BMFont -" -"tiedosto." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Failed opening as BMFont file." -msgstr "BMFont -tiedoston avaus epäonnistui." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error initializing FreeType." -msgstr "Virhe FreetType:n alustamisessa." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Unknown font format." -msgstr "Tuntematon fonttimuoto." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error loading font." -msgstr "Virhe fontin latauksessa." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Invalid font size." -msgstr "Virheellinen fonttikoko." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Invalid font custom source." -msgstr "Virheellinen fontin lähde." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/plugins/theme_editor_plugin.cpp -msgid "Font" -msgstr "Fontti" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "No meshes to import!" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Single Mesh Import" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Source Mesh(es):" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Mesh" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Surface %d" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "No samples to import!" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Import Audio Samples" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Source Sample(s):" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Audio Sample" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "New Clip" -msgstr "Uusi klippi" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Animation Options" -msgstr "Animaation asetukset" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Flags" -msgstr "Liput" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Bake FPS:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Optimizer" -msgstr "Optimoija" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Linear Error" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angular Error" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angle" -msgstr "Enimmäiskulma" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Clips" -msgstr "Klippejä" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#, fuzzy -msgid "Start(s)" -msgstr "Alkaa" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#, fuzzy -msgid "End(s)" -msgstr "Loppu(u)" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy -msgid "Loop" -msgstr "Toisto" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Filters" -msgstr "Suodattimet" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source path is empty." -msgstr "Lähdepolku on tyhjä." - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't load post-import script." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Invalid/broken script for post-import." +#: editor/multi_node_edit.cpp +msgid "MultiNode Set" msgstr "" -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Error importing scene." -msgstr "Virhe tuotaessa Sceneä." - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import 3D Scene" -msgstr "Tuo 3D Scene" +#: editor/node_dock.cpp +msgid "Groups" +msgstr "Ryhmät" -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source Scene:" +#: editor/node_dock.cpp +msgid "Select a Node to edit Signals and Groups." msgstr "" -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Same as Target Scene" -msgstr "Sama kuin kohdescene" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create Poly" +msgstr "Luo polygoni" -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Shared" -msgstr "Jaettu" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly" +msgstr "Muokkaa polygonia" -#: editor/io_plugins/editor_scene_import_plugin.cpp +#: editor/plugins/abstract_polygon_2d_editor.cpp #, fuzzy -msgid "Target Texture Folder:" -msgstr "Kohdetekstuurin kansio:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Post-Process Script:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Custom Root Node Type:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Auto" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Root Node Name:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "The Following Files are Missing:" -msgstr "Seuraavat tiedostot puuttuvat:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Anyway" -msgstr "Tuo joka tapauksessa" - -#: editor/io_plugins/editor_scene_import_plugin.cpp scene/gui/dialogs.cpp -msgid "Cancel" -msgstr "Peru" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import & Open" -msgstr "Tuo & Avaa" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Edited scene has not been saved, open imported scene anyway?" -msgstr "" -"Muokattua Sceneä ei ole tallennettu, avaa tuotu Scene joka tapauksessa?" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Image:" -msgstr "Tuo kuva:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Can't import a file over itself:" -msgstr "Tiedostoa ei voi tuoda itseensä:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't localize path: %s (already local)" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "3D Scene Animation" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Uncompressed" -msgstr "Purettu" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossless (PNG)" -msgstr "Pakkaa häviötön (PNG)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossy (WebP)" -msgstr "Pakkaa häviöllinen (WebP)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress (VRAM)" -msgstr "Pakkaa (VRAM)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Format" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Compression Quality (WebP):" -msgstr "Tekstuurin pakkauksen latu (WebP):" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Options" -msgstr "Tekstuurin asetukset" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Please specify some files!" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "At least one file needed for Atlas." -msgstr "Ainakin yksi tiedosto tarvitaan Atlas-kuvaa varten." - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Error importing:" -msgstr "Virhe tuotaessa:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Only one file is required for large texture." -msgstr "Vain yksi tiedosto vaaditaan suurikokoiselle tekstuurille." - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Max Texture Size:" -msgstr "Tekstuurin enimmäiskoko:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for Atlas (2D)" -msgstr "Tuo tekstuuri Atlakselle (2D)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cell Size:" -msgstr "Solun koko:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Large Texture" -msgstr "Suurikokoinen tekstuuri" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Textures (2D)" -msgstr "Tuo suurikokoisia tekstuureita (2D)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture" -msgstr "Lähdetekstuuri" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Base Atlas Texture" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s)" -msgstr "Lähdetekstuuri(t)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 2D" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 3D" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures" -msgstr "Tuo tekstuurit" +msgid "Insert Point" +msgstr "Poista piste" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "2D Texture" -msgstr "2D tekstuuri" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly (Remove Point)" +msgstr "Muokkaa polygonia (poista piste)" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "3D Texture" -msgstr "Kolmiulotteinen tekstuuri" +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Remove Poly And Point" +msgstr "Poista polygoni ja piste" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Atlas Texture" -msgstr "Atlastekstuuri" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create a new polygon from scratch." +msgstr "Luo uusi piste tyhjästä." -#: editor/io_plugins/editor_texture_import_plugin.cpp +#: editor/plugins/abstract_polygon_2d_editor.cpp msgid "" -"NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files to " -"the project." -msgstr "" -"HUOMAA: 2D tekstuurin tuonti ei ole pakollista. Voit kopioida png/jpg -" -"tiedostot projektiin." - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Crop empty space." -msgstr "Leikkaa pois tyhjä tila." - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture" -msgstr "Tekstuuri" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Texture" -msgstr "Tuo suurikokoinen tekstuuri" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Load Source Image" -msgstr "Lataa lähdekuva" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -#, fuzzy -msgid "Slicing" -msgstr "Siivutus" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Inserting" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Saving" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save large texture:" -msgstr "Isoa tekstuuria ei voitu tallentaa:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -#, fuzzy -msgid "Build Atlas For:" -msgstr "Luo atlas:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Loading Image:" -msgstr "Ladataan kuvaa:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't load image:" -msgstr "Kuvaa ei voitu ladata:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Converting Images" -msgstr "Muunnetaan kuvia" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cropping Images" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Blitting Images" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save atlas image:" -msgstr "Atlas-kuvaa ei voitu tallentaa:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save converted texture:" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid source!" -msgstr "Virheellinen lähde!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid translation source!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Column" -msgstr "Kolumni" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/script_create_dialog.cpp -msgid "Language" -msgstr "Kieli" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -#, fuzzy -msgid "No items to import!" -msgstr "Ei tuotavia asioita!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No target path!" -msgstr "Ei kohdepolkua!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translations" -msgstr "Tuo käännökset" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Couldn't import!" -msgstr "Ei voitu tuoda!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translation" -msgstr "Tuo käännös" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Source CSV:" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Ignore First Row" -msgstr "Sivuuta ensimmäinen rivi" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Compress" -msgstr "Tiivistä" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -#, fuzzy -msgid "Add to Project (project.godot)" -msgstr "Lisää projektiin (godot.cfg)" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Languages:" -msgstr "Tuo kielet:" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Translation" -msgstr "Siirtymä" - -#: editor/multi_node_edit.cpp -msgid "MultiNode Set" -msgstr "" - -#: editor/node_dock.cpp -msgid "Groups" -msgstr "Ryhmät" - -#: editor/node_dock.cpp -msgid "Select a Node to edit Signals and Groups." +"Edit existing polygon:\n" +"LMB: Move Point.\n" +"Ctrl+LMB: Split Segment.\n" +"RMB: Erase Point." msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp @@ -3485,7 +2884,6 @@ msgstr "Animaation nimi:" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp #: editor/script_create_dialog.cpp msgid "Error!" @@ -3596,10 +2994,6 @@ msgid "Delete Input" msgstr "Poista syöte" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Rename" -msgstr "Nimeä uudelleen" - -#: editor/plugins/animation_tree_editor_plugin.cpp msgid "Animation tree is valid." msgstr "Animaatiopuu on kelvollinen." @@ -3655,64 +3049,192 @@ msgstr "" msgid "Filters.." msgstr "Suodattimet..." -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing %d Triangles:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Free" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Triangle #" +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Contents:" +msgstr "Vakiot:" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "View Files" +msgstr " Tiedostot" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve hostname:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Light Baker Setup:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing Geometry" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connection error, please try again." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Fixing Lights" +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Can't connect." +msgstr "Yhdistä..." + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Can't connect to host:" +msgstr "Yhdistä Nodeen:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response from host:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Making BVH" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Light Octree" +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Request failed, return code:" +msgstr "Pyydetty tiedostomuoto tuntematon:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Req. Failed." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Octree Texture" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, too many redirects" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Transfer to Lightmaps:" -msgstr "Muunna Lightmapiksi:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Redirect Loop." +msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Allocating Texture #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Baking Triangle #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Bad download hash, assuming file has been tampered with." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Post-Processing Texture #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Expected:" msgstr "" -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Bake!" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Got:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed sha256 hash check" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Asset Download Error:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Fetching:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Resolving.." +msgstr "Tallennetaan..." + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Connecting.." +msgstr "Yhdistä..." + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Requesting.." +msgstr "Testaus" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Error making request" +msgstr "Virhe tallennettaessa resurssia!" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Idle" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Retry" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Download Error" +msgstr "Lataa" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download for this asset is already in progress!" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "first" msgstr "" -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Reset the lightmap octree baking process (start over)." +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "prev" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "next" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "last" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "All" +msgstr "Kaikki" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Plugins" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Sort:" +msgstr "Lajittele:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Reverse" +msgstr "Käänteinen" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Category:" +msgstr "Kategoria:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Site:" +msgstr "Sivu:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Support.." +msgstr "Tuki..." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Official" +msgstr "Virallinen" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Testing" +msgstr "Testaus" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Assets ZIP File" msgstr "" #: editor/plugins/camera_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp msgid "Preview" msgstr "Esikatselu" @@ -3755,12 +3277,18 @@ msgid "Edit CanvasItem" msgstr "Muokkaa CanvasItemiä" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Change Anchors" +#, fuzzy +msgid "Anchors only" +msgstr "Ankkuri" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Change Anchors and Margins" msgstr "Muuta ankkureita" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom (%):" -msgstr "Lähennä (%):" +msgid "Change Anchors" +msgstr "Muuta ankkureita" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Paste Pose" @@ -3812,60 +3340,75 @@ msgid "Pan Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Lock the selected object in place (can't be moved)." -msgstr "Lukitse valitut objektit paikalleen (ei voi liikutella)." +msgid "Toggles snapping" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Unlock the selected object (can be moved)." -msgstr "Poista valittujen objektien lukitus (voi liikutella)." +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Makes sure the object's children are not selectable." -msgstr "Varmistaa ettei objektin lapsia voi valita." +#, fuzzy +msgid "Snapping options" +msgstr "Animaation asetukset" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Restores the object's children's ability to be selected." +msgid "Snap to grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp -#: editor/project_settings_editor.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Edit" -msgstr "Muokkaa" +msgid "Use Rotation Snap" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +msgid "Configure Snap..." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" -msgstr "Näytä ruudukko" +msgid "Snap Relative" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Rotation Snap" +msgid "Use Pixel Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap Relative" +msgid "Smart snapping" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." +#, fuzzy +msgid "Snap to parent" +msgstr "Laajenna Parentiin" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to node anchor" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Pixel Snap" +msgid "Snap to node sides" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to other nodes" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Skeleton.." -msgstr "Luuranko..." +msgid "Lock the selected object in place (can't be moved)." +msgstr "Lukitse valitut objektit paikalleen (ei voi liikutella)." + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Unlock the selected object (can be moved)." +msgstr "Poista valittujen objektien lukitus (voi liikutella)." + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Makes sure the object's children are not selectable." +msgstr "Varmistaa ettei objektin lapsia voi valita." + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Restores the object's children's ability to be selected." +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Make Bones" @@ -3894,12 +3437,19 @@ msgid "View" msgstr "Näytä/Tarkastele" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Reset" -msgstr "Palauta lähennys" +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "Näytä ruudukko" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Set.." -msgstr "Aseta Zoomaus..." +#, fuzzy +msgid "Show helpers" +msgstr "Näytä luut" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show rulers" +msgstr "Näytä luut" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -3910,8 +3460,9 @@ msgid "Frame Selection" msgstr "Framen valinta" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Anchor" -msgstr "Ankkuri" +#, fuzzy +msgid "Layout" +msgstr "Tallenna Layout" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Keys" @@ -3934,11 +3485,20 @@ msgid "Clear Pose" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Set a Value" -msgstr "Aseta arvo" +msgid "Drag pivot from mouse position" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap (Pixels):" +#, fuzzy +msgid "Set pivot at mouse position" +msgstr "Siirrä pistettä" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Multiply grid step by 2" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Divide grid step by 2" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3949,23 +3509,28 @@ msgstr "Lisää %s" msgid "Adding %s..." msgstr "Lisätään %s..." -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Create Node" msgstr "Luo Node" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Error instancing scene from %s" msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "OK :(" msgstr "Asia kunnossa :(" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "No parent to instance a child at." msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "This operation requires a single selected node." msgstr "" @@ -3981,45 +3546,6 @@ msgstr "" "Vedä & pudota + Shift: Lisää Node sisarena\n" "Vedä & pudota + Alt: Muuta Noden tyyppiä" -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Create Poly" -msgstr "Luo polygoni" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly" -msgstr "Muokkaa polygonia" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly (Remove Point)" -msgstr "Muokkaa polygonia (poista piste)" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Create a new polygon from scratch." -msgstr "Luo uusi piste tyhjästä." - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -msgid "" -"Edit existing polygon:\n" -"LMB: Move Point.\n" -"Ctrl+LMB: Split Segment.\n" -"RMB: Erase Point." -msgstr "" - #: editor/plugins/collision_polygon_editor_plugin.cpp msgid "Create Poly3D" msgstr "Luo Poly3D" @@ -4029,14 +3555,6 @@ msgid "Set Handle" msgstr "" #: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Creating Mesh Library" -msgstr "" - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Thumbnail.." -msgstr "Pienoiskuva..." - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Remove item %d?" msgstr "" @@ -4061,6 +3579,27 @@ msgid "Update from Scene" msgstr "Päivitä Scenestä" #: editor/plugins/curve_editor_plugin.cpp +msgid "Flat0" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Flat1" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +#, fuzzy +msgid "Ease in" +msgstr "Framen valinta" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Ease out" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Smoothstep" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp #, fuzzy msgid "Modify Curve Point" msgstr "Muokkaa käyrää" @@ -4145,22 +3684,18 @@ msgid "Create Occluder Polygon" msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Edit existing polygon:" msgstr "Muokkaa olemassaolevaa polygonia:" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "LMB: Move Point." msgstr "VHP: Siirrä pistettä." #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Ctrl+LMB: Split Segment." msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "RMB: Erase Point." msgstr "OHP: Pyyhi piste." @@ -4262,6 +3797,10 @@ msgid "Create Outline" msgstr "Luo ääriviivat" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Body" msgstr "" @@ -4390,13 +3929,75 @@ msgstr "Satunnainen skaalaus:" msgid "Populate" msgstr "" -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Create Navigation Polygon" +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Bake!" +msgstr "" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Bake the navigation mesh.\n" +msgstr "" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Clear the navigation mesh." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Setting up Configuration..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Calculating grid size..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating heightfield..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Marking walkable triangles..." +msgstr "Varastoidaan paikalliset muutokset..." + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Constructing compact heightfield..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Eroding walkable area..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Partioning..." +msgstr "Varoitus" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating contours..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating polymesh..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Converting to native navigation mesh..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Navigation Mesh Generator Setup:" +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Parsing Geometry..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Done!" msgstr "" #: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Remove Poly And Point" -msgstr "Poista polygoni ja piste" +msgid "Create Navigation Polygon" +msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Clear Emission Mask" @@ -4577,16 +4178,19 @@ msgid "Curve Point #" msgstr "" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Point Pos" -msgstr "" +#, fuzzy +msgid "Set Curve Point Position" +msgstr "Siirrä pistettä" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve In Pos" -msgstr "" +#, fuzzy +msgid "Set Curve In Position" +msgstr "Siirrä pistettä" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Out Pos" -msgstr "" +#, fuzzy +msgid "Set Curve Out Position" +msgstr "Siirrä pistettä" #: editor/plugins/path_editor_plugin.cpp msgid "Split Path" @@ -4648,6 +4252,14 @@ msgid "Scale Polygon" msgstr "Skaalaa polygonia" #: editor/plugins/polygon_2d_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit" +msgstr "Muokkaa" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon->UV" msgstr "" @@ -4702,63 +4314,10 @@ msgstr "Lataa resurssi" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "Liitä" -#: editor/plugins/rich_text_editor_plugin.cpp -msgid "Parse BBCode" -msgstr "Liitä BBCode" - -#: editor/plugins/sample_editor_plugin.cpp -msgid "Length:" -msgstr "Pituus:" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Open Sample File(s)" -msgstr "Avaa Sample-tiedosto(t)" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "ERROR: Couldn't load sample!" -msgstr "VIRHE: Samplea ei voitu ladata!" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Add Sample" -msgstr "Lisää Sample" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Rename Sample" -msgstr "Nimeä Sample uudelleen" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Delete Sample" -msgstr "Poista Sample" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "16 Bits" -msgstr "16 bittiä" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "8 Bits" -msgstr "8 bittiä" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Stereo" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Mono" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/script_editor_debugger.cpp -msgid "Format" -msgstr "Muoto" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Pitch" -msgstr "Sävelkorkeus" - #: editor/plugins/script_editor_plugin.cpp #, fuzzy msgid "Clear Recent Files" @@ -4850,6 +4409,10 @@ msgstr "Sulje dokumentaatio" msgid "Close All" msgstr "Sulje kaikki" +#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp +msgid "Run" +msgstr "Aja" + #: editor/plugins/script_editor_plugin.cpp #, fuzzy msgid "Toggle Scripts Panel" @@ -4894,18 +4457,6 @@ msgid "Debug with external editor" msgstr "Avaa editorissa" #: editor/plugins/script_editor_plugin.cpp -msgid "Window" -msgstr "Ikkuna" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Left" -msgstr "Siirry vasemmalle" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Right" -msgstr "Siirry oikealle" - -#: editor/plugins/script_editor_plugin.cpp msgid "Open Godot online documentation" msgstr "" @@ -4993,7 +4544,7 @@ msgstr "Leikkaa" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Copy" msgstr "Kopioi" @@ -5259,10 +4810,6 @@ msgid "View Plane Transform." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Scaling to %s%%." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." msgstr "Kierto %s astetta." @@ -5279,10 +4826,6 @@ msgid "Top View." msgstr "Pintanäkymä." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Top" -msgstr "Pinta" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "Takanäkymä." @@ -5528,6 +5071,10 @@ msgid "Transform" msgstr "Muunna" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Configure Snap.." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Local Coords" msgstr "Paikalliset koordinaatit" @@ -5673,6 +5220,11 @@ msgid "Speed (FPS):" msgstr "Nopeus (FPS):" #: editor/plugins/sprite_frames_editor_plugin.cpp +#, fuzzy +msgid "Loop" +msgstr "Toisto" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animation Frames" msgstr "Animaatioframet" @@ -5685,12 +5237,14 @@ msgid "Insert Empty (After)" msgstr "Syötä tyhjä (jälkeen)" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Up" -msgstr "Ylös" +#, fuzzy +msgid "Move (Before)" +msgstr "Poista Node(t)" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Down" -msgstr "Alas" +#, fuzzy +msgid "Move (After)" +msgstr "Siirry vasemmalle" #: editor/plugins/style_box_editor_plugin.cpp msgid "StyleBox Preview:" @@ -5858,6 +5412,10 @@ msgid "Style" msgstr "Tyyli" #: editor/plugins/theme_editor_plugin.cpp +msgid "Font" +msgstr "Fontti" + +#: editor/plugins/theme_editor_plugin.cpp msgid "Color" msgstr "Väri" @@ -5909,8 +5467,9 @@ msgid "Mirror Y" msgstr "Peilaa Y" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Bucket" -msgstr "Sanko" +#, fuzzy +msgid "Paint Tile" +msgstr "Poimi tile" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Pick Tile" @@ -5973,6 +5532,10 @@ msgid "Delete preset '%s'?" msgstr "" #: editor/project_export.cpp +msgid "Export templates for this platform are missing/corrupted: " +msgstr "" + +#: editor/project_export.cpp msgid "Presets" msgstr "" @@ -6046,34 +5609,60 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +msgid "Export templates for this platform are missing/corrupted:" +msgstr "" + +#: editor/project_export.cpp msgid "Export With Debug" msgstr "Vie debugaten" #: editor/project_manager.cpp -msgid "Invalid project path, the path must exist!" -msgstr "Virheellinen projektin polku, polku täytyy olla olemassa!" +#, fuzzy +msgid "The path does not exists." +msgstr "Tiedostoa ei ole olemassa." #: editor/project_manager.cpp -#, fuzzy -msgid "Invalid project path, project.godot must not exist." -msgstr "Virheellinen projektin polku, godot.cfg -tiedostoa ei saa olla." +msgid "Please choose a 'project.godot' file." +msgstr "" #: editor/project_manager.cpp -#, fuzzy -msgid "Invalid project path, project.godot must exist." +msgid "" +"Your project will be created in a non empty folder (you might want to create " +"a new folder)." +msgstr "" + +#: editor/project_manager.cpp +msgid "Please choose a folder that does not contain a 'project.godot' file." msgstr "" -"Virheellinen projektin polku, godot.cfg -tiedosto täytyy olla olemassa." #: editor/project_manager.cpp msgid "Imported Project" msgstr "Tuotu projekti" #: editor/project_manager.cpp +msgid " " +msgstr "" + +#: editor/project_manager.cpp +msgid "It would be a good idea to name your project." +msgstr "" + +#: editor/project_manager.cpp msgid "Invalid project path (changed anything?)." msgstr "Virheellinen projektin polku (muuttuiko mikään?)." #: editor/project_manager.cpp #, fuzzy +msgid "Couldn't get project.godot in project path." +msgstr "Ei voitu luoda godot.cfg -tiedostoa projektin polkuun." + +#: editor/project_manager.cpp +#, fuzzy +msgid "Couldn't edit project.godot in project path." +msgstr "Ei voitu luoda godot.cfg -tiedostoa projektin polkuun." + +#: editor/project_manager.cpp +#, fuzzy msgid "Couldn't create project.godot in project path." msgstr "Ei voitu luoda godot.cfg -tiedostoa projektin polkuun." @@ -6082,38 +5671,49 @@ msgid "The following files failed extraction from package:" msgstr "Seuraavien tiedostojen purku paketista epäonnistui:" #: editor/project_manager.cpp +#, fuzzy +msgid "Rename Project" +msgstr "Nimetön projekti" + +#: editor/project_manager.cpp +#, fuzzy +msgid "Couldn't get project.godot in the project path." +msgstr "Ei voitu luoda godot.cfg -tiedostoa projektin polkuun." + +#: editor/project_manager.cpp +msgid "New Game Project" +msgstr "Uusi peliprojekti" + +#: editor/project_manager.cpp msgid "Import Existing Project" msgstr "Tuo olemassaoleva projekti" #: editor/project_manager.cpp -msgid "Project Path (Must Exist):" -msgstr "Projektin polku (täytyy olla olemassa):" +msgid "Create New Project" +msgstr "Luo uusi projekti" + +#: editor/project_manager.cpp +msgid "Install Project:" +msgstr "Asenna projekti:" #: editor/project_manager.cpp msgid "Project Name:" msgstr "Projektin nimi:" #: editor/project_manager.cpp -msgid "Create New Project" -msgstr "Luo uusi projekti" +#, fuzzy +msgid "Create folder" +msgstr "Luo kansio" #: editor/project_manager.cpp msgid "Project Path:" msgstr "Projektin polku:" #: editor/project_manager.cpp -msgid "Install Project:" -msgstr "Asenna projekti:" - -#: editor/project_manager.cpp msgid "Browse" msgstr "Selaa" #: editor/project_manager.cpp -msgid "New Game Project" -msgstr "Uusi peliprojekti" - -#: editor/project_manager.cpp msgid "That's a BINGO!" msgstr "" @@ -6122,6 +5722,11 @@ msgid "Unnamed Project" msgstr "Nimetön projekti" #: editor/project_manager.cpp +#, fuzzy +msgid "Can't open project" +msgstr "Yhdistä..." + +#: editor/project_manager.cpp msgid "Are you sure to open more than one project?" msgstr "Haluatko varmasti avata useamman kuin yhden projektin?" @@ -6160,10 +5765,6 @@ msgid "Project List" msgstr "Projektiluettelo" #: editor/project_manager.cpp -msgid "Run" -msgstr "Aja" - -#: editor/project_manager.cpp msgid "Scan" msgstr "" @@ -6222,17 +5823,14 @@ msgid "Add Input Action Event" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Meta+" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Shift+" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Alt+" msgstr "" @@ -6293,7 +5891,7 @@ msgstr "Muuta" msgid "Joypad Axis Index:" msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Axis" msgstr "Akseli" @@ -6314,31 +5912,31 @@ msgstr "" msgid "Add Event" msgstr "Lisää tyhjä" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Device" msgstr "Laite" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Button" msgstr "Painike" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Left Button." msgstr "Vasen painike." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Right Button." msgstr "Oikea painike." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Middle Button." msgstr "Keskimmäinen painike." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Up." msgstr "Rulla ylös." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Down." msgstr "Rulla alas." @@ -6347,7 +5945,7 @@ msgid "Add Global Property" msgstr "" #: editor/project_settings_editor.cpp -msgid "Select an setting item first!" +msgid "Select a setting item first!" msgstr "" #: editor/project_settings_editor.cpp @@ -6365,6 +5963,15 @@ msgid "Delete Item" msgstr "Poista syöte" #: editor/project_settings_editor.cpp +#, fuzzy +msgid "Can't contain '/' or ':'" +msgstr "Yhdistä Nodeen:" + +#: editor/project_settings_editor.cpp +msgid "Already existing" +msgstr "" + +#: editor/project_settings_editor.cpp msgid "Error saving settings." msgstr "Virhe tallennettaessa asetuksia." @@ -6515,10 +6122,20 @@ msgid "New Script" msgstr "" #: editor/property_editor.cpp +#, fuzzy +msgid "Make Unique" +msgstr "Tee luut" + +#: editor/property_editor.cpp msgid "Show in File System" msgstr "" #: editor/property_editor.cpp +#, fuzzy +msgid "Convert To %s" +msgstr "Muunna..." + +#: editor/property_editor.cpp msgid "Error loading file: Not a resource!" msgstr "" @@ -6556,6 +6173,11 @@ msgid "Select Property" msgstr "Valitse ominaisuus" #: editor/property_selector.cpp +#, fuzzy +msgid "Select Virtual Method" +msgstr "Valitse metodi" + +#: editor/property_selector.cpp msgid "Select Method" msgstr "Valitse metodi" @@ -6583,26 +6205,6 @@ msgstr "" msgid "Reparent" msgstr "" -#: editor/resources_dock.cpp -msgid "Create New Resource" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Open Resource" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Save Resource" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Resource Tools" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Make Local" -msgstr "" - #: editor/run_settings_dialog.cpp msgid "Run Mode:" msgstr "" @@ -6730,14 +6332,6 @@ msgid "Sub-Resources:" msgstr "Resurssit" #: editor/scene_tree_dock.cpp -msgid "Edit Groups" -msgstr "Muokkaa ryhmiä" - -#: editor/scene_tree_dock.cpp -msgid "Edit Connections" -msgstr "Muokkaa yhteyksiä" - -#: editor/scene_tree_dock.cpp msgid "Clear Inheritance" msgstr "" @@ -6922,6 +6516,15 @@ msgid "Invalid base path" msgstr "" #: editor/script_create_dialog.cpp +msgid "Directory of the same name exists" +msgstr "" + +#: editor/script_create_dialog.cpp +#, fuzzy +msgid "File exists, will be reused" +msgstr "Tiedosto on jo olemassa, korvaa?" + +#: editor/script_create_dialog.cpp msgid "Invalid extension" msgstr "Virheellinen laajennus" @@ -6965,6 +6568,10 @@ msgid "Load existing script file" msgstr "Lataa olemassaoleva skripti" #: editor/script_create_dialog.cpp +msgid "Language" +msgstr "Kieli" + +#: editor/script_create_dialog.cpp #, fuzzy msgid "Inherits" msgstr "Perii:" @@ -7009,6 +6616,10 @@ msgid "Function:" msgstr "Funktio:" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Errors" msgstr "Virheet" @@ -7089,6 +6700,10 @@ msgid "Type" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Format" +msgstr "Muoto" + +#: editor/script_editor_debugger.cpp msgid "Usage" msgstr "" @@ -7164,12 +6779,30 @@ msgstr "" msgid "Change Probe Extents" msgstr "" +#: modules/gdnative/gd_native_library_editor.cpp +#, fuzzy +msgid "Library" +msgstr "Vie kirjasto" + +#: modules/gdnative/gd_native_library_editor.cpp +#, fuzzy +msgid "Status" +msgstr "Tila:" + +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Libraries: " +msgstr "" + +#: modules/gdnative/register_types.cpp +msgid "GDNative" +msgstr "" + #: 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/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "" @@ -7221,10 +6854,6 @@ msgid "GridMap Duplicate Selection" msgstr "Monista valinta" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Paint" -msgstr "" - -#: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy msgid "Snap View" msgstr "Huippunäkymä" @@ -7327,13 +6956,8 @@ msgstr "Näyttöruudun asetukset" msgid "Pick Distance:" msgstr "Poimi tile" -#: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy -msgid "Tiles" -msgstr " Tiedostot" - -#: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Areas" +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "Builds" msgstr "" #: modules/visual_script/visual_script.cpp @@ -7531,10 +7155,18 @@ msgid "Return" msgstr "Palauta" #: modules/visual_script/visual_script_editor.cpp +msgid "Call" +msgstr "Kutsu" + +#: modules/visual_script/visual_script_editor.cpp msgid "Get" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Script already has function '%s'" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Change Input Value" msgstr "Vaihda syötteen nimi" @@ -7895,6 +7527,12 @@ msgid "" "order for AnimatedSprite3D to display frames." msgstr "" +#: scene/3d/vehicle_body.cpp +msgid "" +"VehicleWheel serves to provide a wheel system to a VehicleBody. Please use " +"it as a child of a VehicleBody." +msgstr "" + #: scene/gui/color_picker.cpp #, fuzzy msgid "Raw Mode" @@ -7905,6 +7543,10 @@ msgid "Add current color as a preset" msgstr "Lisää nykyinen väri esiasetukseksi" #: scene/gui/dialogs.cpp +msgid "Cancel" +msgstr "Peru" + +#: scene/gui/dialogs.cpp msgid "Alert!" msgstr "Huomio!" @@ -7912,10 +7554,6 @@ msgstr "Huomio!" msgid "Please Confirm..." msgstr "Ole hyvä ja vahvista..." -#: scene/gui/input_action.cpp -msgid "Ctrl+" -msgstr "Ctrl+" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -7954,6 +7592,433 @@ msgstr "" "koon. Muutoin tee siitä RenderTarget ja aseta sen sisäinen tekstuuri " "johonkin Nodeen näkyväksi." +#: scene/resources/dynamic_font.cpp +msgid "Error initializing FreeType." +msgstr "Virhe FreetType:n alustamisessa." + +#: scene/resources/dynamic_font.cpp +msgid "Unknown font format." +msgstr "Tuntematon fonttimuoto." + +#: scene/resources/dynamic_font.cpp +msgid "Error loading font." +msgstr "Virhe fontin latauksessa." + +#: scene/resources/dynamic_font.cpp +msgid "Invalid font size." +msgstr "Virheellinen fonttikoko." + +#~ msgid "Arguments:" +#~ msgstr "Argumentit:" + +#~ msgid "Return:" +#~ msgstr "Palaa:" + +#~ msgid "Added:" +#~ msgstr "Lisätty:" + +#~ msgid "Removed:" +#~ msgstr "Poistettu:" + +#~ msgid "Error saving atlas:" +#~ msgstr "Virhe tallennettaessa atlas-kuvaa:" + +#~ msgid "Error loading scene." +#~ msgstr "Virhe ladatessa Sceneä." + +#~ msgid "Re-Import" +#~ msgstr "Tuo uudelleen" + +#, fuzzy +#~ msgid "Please wait for scan to complete." +#~ msgstr "Ole hyvä ja odota läpikäynnin valmistumista." + +#~ msgid "Current scene must be saved to re-import." +#~ msgstr "Nykyinen Scene täytyy tallentaa, jotta se voidaan tuoda uudelleen." + +#~ msgid "Save & Re-Import" +#~ msgstr "Tallenna & tuo uudelleen" + +#~ msgid "Re-Importing" +#~ msgstr "Tuodaan uudelleen" + +#~ msgid "Re-Import Changed Resources" +#~ msgstr "Tuo uudelleen vaihtuneet resurssit" + +#, fuzzy +#~ msgid "" +#~ "\n" +#~ "Status: Needs Re-Import" +#~ msgstr "Tallenna & tuo uudelleen" + +#~ msgid "Same source and destination files, doing nothing." +#~ msgstr "Sama lähde ja kohdetiedosto, ei toimenpiteitä." + +#~ msgid "Same source and destination paths, doing nothing." +#~ msgstr "Sama lähde ja kohdepolku, ei toimenpiteitä." + +#~ msgid "Can't move directories to within themselves." +#~ msgstr "Hakemisto(j)a ei voida siirtää itseensä." + +#, fuzzy +#~ msgid "Error moving file:\n" +#~ msgstr "Virhe ladattaessa kuvaa:" + +#~ msgid "Pick New Name and Location For:" +#~ msgstr "Valitse uusi nimi ja sijainti:" + +#~ msgid "No files selected!" +#~ msgstr "Ei valittuja tiedostoja!" + +#~ msgid "Info" +#~ msgstr "Tietoja" + +#~ msgid "Re-Import.." +#~ msgstr "Tuo uudelleen..." + +#~ msgid "Target path is empty." +#~ msgstr "Kohdepolku on tyhjä." + +#~ msgid "Target path must exist." +#~ msgstr "Kohdepolku täytyy olla olemassa." + +#~ msgid "Save path is empty!" +#~ msgstr "Tallennuspolku on tyhjä!" + +#~ msgid "Target Path:" +#~ msgstr "Kohdepolku:" + +#~ msgid "Accept" +#~ msgstr "Hyväksy" + +#~ msgid "No source font file!" +#~ msgstr "Ei fontin lähdetiedostoa!" + +#, fuzzy +#~ msgid "" +#~ "Invalid file extension.\n" +#~ "Please use .font." +#~ msgstr "" +#~ "Virheellinen tiedostolaajennus.\n" +#~ "Käytä .fnt -tiedostoa." + +#~ msgid "Couldn't save font." +#~ msgstr "Fonttia ei voitu tallentaa." + +#~ msgid "The quick brown fox jumps over the lazy dog." +#~ msgstr "Ovela kettu punaturkki laiskan koiran takaa kurkki." + +#~ msgid "Options:" +#~ msgstr "Asetukset:" + +#~ msgid "Font Import" +#~ msgstr "Fontin tuonti" + +#~ msgid "" +#~ "This file is already a Godot font file, please supply a BMFont type file " +#~ "instead." +#~ msgstr "" +#~ "Tämä tiedosto on jo Godotin fonttitiedosto, ole hyvä ja syötä BMFont -" +#~ "tiedosto." + +#~ msgid "Failed opening as BMFont file." +#~ msgstr "BMFont -tiedoston avaus epäonnistui." + +#~ msgid "Invalid font custom source." +#~ msgstr "Virheellinen fontin lähde." + +#~ msgid "New Clip" +#~ msgstr "Uusi klippi" + +#~ msgid "Flags" +#~ msgstr "Liput" + +#~ msgid "Optimizer" +#~ msgstr "Optimoija" + +#~ msgid "Max Angle" +#~ msgstr "Enimmäiskulma" + +#~ msgid "Clips" +#~ msgstr "Klippejä" + +#, fuzzy +#~ msgid "Start(s)" +#~ msgstr "Alkaa" + +#, fuzzy +#~ msgid "End(s)" +#~ msgstr "Loppu(u)" + +#~ msgid "Filters" +#~ msgstr "Suodattimet" + +#~ msgid "Source path is empty." +#~ msgstr "Lähdepolku on tyhjä." + +#~ msgid "Error importing scene." +#~ msgstr "Virhe tuotaessa Sceneä." + +#~ msgid "Import 3D Scene" +#~ msgstr "Tuo 3D Scene" + +#~ msgid "Same as Target Scene" +#~ msgstr "Sama kuin kohdescene" + +#~ msgid "Shared" +#~ msgstr "Jaettu" + +#, fuzzy +#~ msgid "Target Texture Folder:" +#~ msgstr "Kohdetekstuurin kansio:" + +#~ msgid "The Following Files are Missing:" +#~ msgstr "Seuraavat tiedostot puuttuvat:" + +#~ msgid "Import Anyway" +#~ msgstr "Tuo joka tapauksessa" + +#~ msgid "Import & Open" +#~ msgstr "Tuo & Avaa" + +#~ msgid "Edited scene has not been saved, open imported scene anyway?" +#~ msgstr "" +#~ "Muokattua Sceneä ei ole tallennettu, avaa tuotu Scene joka tapauksessa?" + +#~ msgid "Import Image:" +#~ msgstr "Tuo kuva:" + +#~ msgid "Uncompressed" +#~ msgstr "Purettu" + +#~ msgid "Compress Lossless (PNG)" +#~ msgstr "Pakkaa häviötön (PNG)" + +#~ msgid "Compress Lossy (WebP)" +#~ msgstr "Pakkaa häviöllinen (WebP)" + +#~ msgid "Compress (VRAM)" +#~ msgstr "Pakkaa (VRAM)" + +#~ msgid "Texture Compression Quality (WebP):" +#~ msgstr "Tekstuurin pakkauksen latu (WebP):" + +#~ msgid "Texture Options" +#~ msgstr "Tekstuurin asetukset" + +#~ msgid "At least one file needed for Atlas." +#~ msgstr "Ainakin yksi tiedosto tarvitaan Atlas-kuvaa varten." + +#~ msgid "Error importing:" +#~ msgstr "Virhe tuotaessa:" + +#~ msgid "Only one file is required for large texture." +#~ msgstr "Vain yksi tiedosto vaaditaan suurikokoiselle tekstuurille." + +#~ msgid "Max Texture Size:" +#~ msgstr "Tekstuurin enimmäiskoko:" + +#~ msgid "Import Textures for Atlas (2D)" +#~ msgstr "Tuo tekstuuri Atlakselle (2D)" + +#~ msgid "Cell Size:" +#~ msgstr "Solun koko:" + +#~ msgid "Large Texture" +#~ msgstr "Suurikokoinen tekstuuri" + +#~ msgid "Import Large Textures (2D)" +#~ msgstr "Tuo suurikokoisia tekstuureita (2D)" + +#~ msgid "Source Texture" +#~ msgstr "Lähdetekstuuri" + +#~ msgid "Source Texture(s)" +#~ msgstr "Lähdetekstuuri(t)" + +#~ msgid "Import Textures" +#~ msgstr "Tuo tekstuurit" + +#~ msgid "2D Texture" +#~ msgstr "2D tekstuuri" + +#~ msgid "3D Texture" +#~ msgstr "Kolmiulotteinen tekstuuri" + +#~ msgid "Atlas Texture" +#~ msgstr "Atlastekstuuri" + +#~ msgid "" +#~ "NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files " +#~ "to the project." +#~ msgstr "" +#~ "HUOMAA: 2D tekstuurin tuonti ei ole pakollista. Voit kopioida png/jpg -" +#~ "tiedostot projektiin." + +#~ msgid "Crop empty space." +#~ msgstr "Leikkaa pois tyhjä tila." + +#~ msgid "Texture" +#~ msgstr "Tekstuuri" + +#~ msgid "Import Large Texture" +#~ msgstr "Tuo suurikokoinen tekstuuri" + +#~ msgid "Load Source Image" +#~ msgstr "Lataa lähdekuva" + +#, fuzzy +#~ msgid "Slicing" +#~ msgstr "Siivutus" + +#~ msgid "Couldn't save large texture:" +#~ msgstr "Isoa tekstuuria ei voitu tallentaa:" + +#, fuzzy +#~ msgid "Build Atlas For:" +#~ msgstr "Luo atlas:" + +#~ msgid "Loading Image:" +#~ msgstr "Ladataan kuvaa:" + +#~ msgid "Couldn't load image:" +#~ msgstr "Kuvaa ei voitu ladata:" + +#~ msgid "Converting Images" +#~ msgstr "Muunnetaan kuvia" + +#~ msgid "Couldn't save atlas image:" +#~ msgstr "Atlas-kuvaa ei voitu tallentaa:" + +#~ msgid "Invalid source!" +#~ msgstr "Virheellinen lähde!" + +#~ msgid "Column" +#~ msgstr "Kolumni" + +#, fuzzy +#~ msgid "No items to import!" +#~ msgstr "Ei tuotavia asioita!" + +#~ msgid "No target path!" +#~ msgstr "Ei kohdepolkua!" + +#~ msgid "Import Translations" +#~ msgstr "Tuo käännökset" + +#~ msgid "Couldn't import!" +#~ msgstr "Ei voitu tuoda!" + +#~ msgid "Import Translation" +#~ msgstr "Tuo käännös" + +#~ msgid "Ignore First Row" +#~ msgstr "Sivuuta ensimmäinen rivi" + +#~ msgid "Compress" +#~ msgstr "Tiivistä" + +#, fuzzy +#~ msgid "Add to Project (project.godot)" +#~ msgstr "Lisää projektiin (godot.cfg)" + +#~ msgid "Import Languages:" +#~ msgstr "Tuo kielet:" + +#~ msgid "Translation" +#~ msgstr "Siirtymä" + +#~ msgid "Transfer to Lightmaps:" +#~ msgstr "Muunna Lightmapiksi:" + +#~ msgid "Zoom (%):" +#~ msgstr "Lähennä (%):" + +#~ msgid "Skeleton.." +#~ msgstr "Luuranko..." + +#~ msgid "Zoom Reset" +#~ msgstr "Palauta lähennys" + +#~ msgid "Zoom Set.." +#~ msgstr "Aseta Zoomaus..." + +#~ msgid "Set a Value" +#~ msgstr "Aseta arvo" + +#~ msgid "Parse BBCode" +#~ msgstr "Liitä BBCode" + +#~ msgid "Length:" +#~ msgstr "Pituus:" + +#~ msgid "Open Sample File(s)" +#~ msgstr "Avaa Sample-tiedosto(t)" + +#~ msgid "ERROR: Couldn't load sample!" +#~ msgstr "VIRHE: Samplea ei voitu ladata!" + +#~ msgid "Add Sample" +#~ msgstr "Lisää Sample" + +#~ msgid "Rename Sample" +#~ msgstr "Nimeä Sample uudelleen" + +#~ msgid "Delete Sample" +#~ msgstr "Poista Sample" + +#~ msgid "16 Bits" +#~ msgstr "16 bittiä" + +#~ msgid "8 Bits" +#~ msgstr "8 bittiä" + +#~ msgid "Pitch" +#~ msgstr "Sävelkorkeus" + +#~ msgid "Window" +#~ msgstr "Ikkuna" + +#~ msgid "Move Right" +#~ msgstr "Siirry oikealle" + +#~ msgid "Up" +#~ msgstr "Ylös" + +#~ msgid "Down" +#~ msgstr "Alas" + +#~ msgid "Bucket" +#~ msgstr "Sanko" + +#~ msgid "Invalid project path, the path must exist!" +#~ msgstr "Virheellinen projektin polku, polku täytyy olla olemassa!" + +#, fuzzy +#~ msgid "Invalid project path, project.godot must not exist." +#~ msgstr "Virheellinen projektin polku, godot.cfg -tiedostoa ei saa olla." + +#, fuzzy +#~ msgid "Invalid project path, project.godot must exist." +#~ msgstr "" +#~ "Virheellinen projektin polku, godot.cfg -tiedosto täytyy olla olemassa." + +#~ msgid "Project Path (Must Exist):" +#~ msgstr "Projektin polku (täytyy olla olemassa):" + +#~ msgid "Edit Groups" +#~ msgstr "Muokkaa ryhmiä" + +#~ msgid "Edit Connections" +#~ msgstr "Muokkaa yhteyksiä" + +#, fuzzy +#~ msgid "Tiles" +#~ msgstr " Tiedostot" + +#~ msgid "Ctrl+" +#~ msgstr "Ctrl+" + #~ msgid "Close scene? (Unsaved changes will be lost)" #~ msgstr "Sulje scene? (tallentamattomat muutokset menetetään)" @@ -7964,9 +8029,6 @@ msgstr "" #~ "Avaa projektinhallinta?\n" #~ "(tallentamattomat muutokset menetetään)" -#~ msgid "Expand to Parent" -#~ msgstr "Laajenna Parentiin" - #~ msgid "just pressed" #~ msgstr "juuri painettu" diff --git a/editor/translations/fr.po b/editor/translations/fr.po index c499138c77..d484d50ffe 100644 --- a/editor/translations/fr.po +++ b/editor/translations/fr.po @@ -9,6 +9,7 @@ # finkiki <specialpopol@gmx.fr>, 2016. # Gilles Roudiere <gilles.roudiere@gmail.com>, 2017. # Hugo Locurcio <hugo.l@openmailbox.org>, 2016-2017. +# keltwookie <keltwookie@protonmail.com>, 2017. # Marc <marc.gilleron@gmail.com>, 2016-2017. # Nathan Lovato <nathan.lovato.art@gmail.com>, 2017. # Nicolas Lehuen <nicolas@lehuen.com>, 2016. @@ -23,8 +24,8 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2017-07-03 19:36+0000\n" -"Last-Translator: Gilles Roudiere <gilles.roudiere@gmail.com>\n" +"PO-Revision-Date: 2017-09-25 10:46+0000\n" +"Last-Translator: keltwookie <keltwookie@protonmail.com>\n" "Language-Team: French <https://hosted.weblate.org/projects/godot-engine/" "godot/fr/>\n" "Language: fr\n" @@ -32,7 +33,7 @@ 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.16-dev\n" +"X-Generator: Weblate 2.17-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -208,10 +209,9 @@ msgid "Create %d NEW tracks and insert keys?" msgstr "Créer %d NOUVELLES pistes et insérer des clés ?" #: editor/animation_editor.cpp editor/create_dialog.cpp -#: editor/editor_audio_buses.cpp +#: editor/editor_audio_buses.cpp editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp #: editor/plugins/mesh_instance_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp editor/project_manager.cpp #: editor/script_create_dialog.cpp msgid "Create" @@ -375,264 +375,6 @@ msgstr "Modifier type de valeur du tableau" msgid "Change Array Value" msgstr "Modifier valeur du tableau" -#: editor/asset_library_editor_plugin.cpp -msgid "Free" -msgstr "Libérer" - -#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp -msgid "Version:" -msgstr "Version :" - -#: editor/asset_library_editor_plugin.cpp -msgid "Contents:" -msgstr "Contenu:" - -#: editor/asset_library_editor_plugin.cpp -msgid "View Files" -msgstr "Voir Fichiers" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_help.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp -msgid "Description:" -msgstr "Description :" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -#: editor/project_manager.cpp -msgid "Install" -msgstr "Installer" - -#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp -#: editor/connections_dialog.cpp editor/export_template_manager.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -#: editor/project_settings_editor.cpp editor/property_editor.cpp -#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Close" -msgstr "Fermer" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve hostname:" -msgstr "Impossible de résoudre le nom de l'hôte:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve." -msgstr "Impossible à résoudre." - -#: editor/asset_library_editor_plugin.cpp -msgid "Connection error, please try again." -msgstr "Erreur de connection, veuillez essayer à nouveau." - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't connect." -msgstr "Connection impossible." - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't connect to host:" -msgstr "Connection à l'hôte impossible:" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response from host:" -msgstr "Pas de réponse de l'hôte:" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response." -msgstr "Pas de réponse." - -#: editor/asset_library_editor_plugin.cpp -msgid "Request failed, return code:" -msgstr "La requête a échoué, code retourné:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Req. Failed." -msgstr "Req. a Échoué." - -#: editor/asset_library_editor_plugin.cpp -msgid "Request failed, too many redirects" -msgstr "La requête a échoué, trop de redirections" - -#: editor/asset_library_editor_plugin.cpp -msgid "Redirect Loop." -msgstr "Boucle de Redirection." - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed:" -msgstr "Échec:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Bad download hash, assuming file has been tampered with." -msgstr "Vérification du téléchargement échouée, le fichier a été altéré." - -#: editor/asset_library_editor_plugin.cpp -msgid "Expected:" -msgstr "Attendu:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Got:" -msgstr "A:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed sha256 hash check" -msgstr "Vérification de brouillage sha256 échouée" - -#: editor/asset_library_editor_plugin.cpp -msgid "Asset Download Error:" -msgstr "Erreur dans le téléchargement d'une ressource:" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -msgid "Success!" -msgstr "Succès!" - -#: editor/asset_library_editor_plugin.cpp -msgid "Fetching:" -msgstr "Récupération:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Resolving.." -msgstr "Résolution.." - -#: editor/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "Connexion en cours.." - -#: editor/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "Envoi d'une requête.." - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Error making request" -msgstr "Erreur d'enregistrement de la ressource !" - -#: editor/asset_library_editor_plugin.cpp -msgid "Idle" -msgstr "Inactif" - -#: editor/asset_library_editor_plugin.cpp -msgid "Retry" -msgstr "Réessayer" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Download Error" -msgstr "Télécharger" - -#: editor/asset_library_editor_plugin.cpp -msgid "Download for this asset is already in progress!" -msgstr "Le téléchargement de cette ressource est déjà en cours!" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "first" -msgstr "prem" - -#: editor/asset_library_editor_plugin.cpp -msgid "prev" -msgstr "préc" - -#: editor/asset_library_editor_plugin.cpp -msgid "next" -msgstr "suiv" - -#: editor/asset_library_editor_plugin.cpp -msgid "last" -msgstr "dern" - -#: editor/asset_library_editor_plugin.cpp -msgid "All" -msgstr "Tout" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/property_selector.cpp editor/quick_open.cpp -#: editor/settings_config_dialog.cpp -msgid "Search:" -msgstr "Rechercher :" - -#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Search" -msgstr "Rechercher" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/project_manager.cpp -msgid "Import" -msgstr "Importer" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Plugins" -msgstr "Extensions" - -#: editor/asset_library_editor_plugin.cpp -msgid "Sort:" -msgstr "Trier :" - -#: editor/asset_library_editor_plugin.cpp -msgid "Reverse" -msgstr "Inverser" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Category:" -msgstr "Catégorie :" - -#: editor/asset_library_editor_plugin.cpp -msgid "Site:" -msgstr "Site :" - -#: editor/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "Support…" - -#: editor/asset_library_editor_plugin.cpp -msgid "Official" -msgstr "Officiel" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -msgid "Community" -msgstr "Communauté" - -#: editor/asset_library_editor_plugin.cpp -msgid "Testing" -msgstr "En test" - -#: editor/asset_library_editor_plugin.cpp -msgid "Assets ZIP File" -msgstr "Fichier ZIP de données" - -#: editor/call_dialog.cpp -msgid "Method List For '%s':" -msgstr "Liste des méthodes pour « %s » :" - -#: editor/call_dialog.cpp modules/visual_script/visual_script_editor.cpp -msgid "Call" -msgstr "Appel" - -#: editor/call_dialog.cpp -msgid "Method List:" -msgstr "Liste des méthodes :" - -#: editor/call_dialog.cpp -msgid "Arguments:" -msgstr "Paramètres :" - -#: editor/call_dialog.cpp -msgid "Return:" -msgstr "Retourne :" - #: editor/code_editor.cpp msgid "Go to Line" msgstr "Aller à la ligne" @@ -669,6 +411,14 @@ msgstr "Mots entiers" msgid "Selection Only" msgstr "Sélection uniquement" +#: editor/code_editor.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp +msgid "Search" +msgstr "Rechercher" + #: editor/code_editor.cpp editor/editor_help.cpp msgid "Find" msgstr "Trouver" @@ -701,11 +451,11 @@ msgstr "Avertir lors du remplacement" msgid "Skip" msgstr "Passer" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom In" msgstr "Zoomer" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom Out" msgstr "Dézoomer" @@ -774,6 +524,20 @@ msgstr "Différé" msgid "Oneshot" msgstr "One-shot" +#: editor/connections_dialog.cpp editor/dependency_editor.cpp +#: editor/export_template_manager.cpp +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Close" +msgstr "Fermer" + #: editor/connections_dialog.cpp msgid "Connect" msgstr "Connecter" @@ -799,7 +563,7 @@ msgstr "Connecter…" msgid "Disconnect" msgstr "Déconnecter" -#: editor/connections_dialog.cpp editor/node_dock.cpp +#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" msgstr "Signaux" @@ -816,12 +580,25 @@ msgstr "Favoris :" msgid "Recent:" msgstr "Récents :" +#: editor/create_dialog.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp +#: editor/quick_open.cpp editor/settings_config_dialog.cpp +msgid "Search:" +msgstr "Rechercher :" + #: editor/create_dialog.cpp editor/editor_help.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp #: editor/quick_open.cpp msgid "Matches:" msgstr "Correspondances :" +#: editor/create_dialog.cpp editor/editor_help.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp +#: editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "Description :" + #: editor/dependency_editor.cpp msgid "Search Replacement For:" msgstr "Rechercher un remplacement pour :" @@ -881,6 +658,12 @@ msgid "Owners Of:" msgstr "Propriétaires de :" #: editor/dependency_editor.cpp +msgid "Remove selected files from the project? (no undo)" +msgstr "" +"Supprimer les fichiers sélectionnés de ce projet ? (pas d'annulation " +"possible)" + +#: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" @@ -891,10 +674,9 @@ msgstr "" "Les supprimer tout de même ? (pas d'annulation possible)" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (no undo)" -msgstr "" -"Supprimer les fichiers sélectionnés de ce projet ? (pas d'annulation " -"possible)" +#, fuzzy +msgid "Cannot remove:\n" +msgstr "Impossible à résoudre." #: editor/dependency_editor.cpp msgid "Error loading:" @@ -962,19 +744,12 @@ msgid "Godot Engine contributors" msgstr "Contributeurs Godot Engine" #: editor/editor_about.cpp -#, fuzzy -msgid "Authors" -msgstr "Auteur :" - -#: editor/editor_about.cpp -#, fuzzy msgid "Project Founders" -msgstr "Gestionnaire de projets" +msgstr "Fondateurs du projet" #: editor/editor_about.cpp -#, fuzzy msgid "Lead Developer" -msgstr "Développeurs" +msgstr "Développeur principal" #: editor/editor_about.cpp editor/project_manager.cpp msgid "Project Manager" @@ -985,118 +760,155 @@ msgid "Developers" msgstr "Développeurs" #: editor/editor_about.cpp -msgid "License" +msgid "Authors" +msgstr "Auteurs" + +#: editor/editor_about.cpp +msgid "Platinum Sponsors" msgstr "" #: editor/editor_about.cpp -msgid "Thirdparty License" +msgid "Gold Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Mini Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Silver Donors" +msgstr "" + +#: editor/editor_about.cpp +#, fuzzy +msgid "Bronze Donors" +msgstr "Cloner en dessous" + +#: editor/editor_about.cpp +msgid "Donors" msgstr "" #: editor/editor_about.cpp +msgid "License" +msgstr "Licence" + +#: editor/editor_about.cpp +msgid "Thirdparty License" +msgstr "Licence tierce partie" + +#: editor/editor_about.cpp msgid "" "Godot Engine relies on a number of thirdparty free and open source " "libraries, all compatible with the terms of its MIT license. The following " "is an exhaustive list of all such thirdparty components with their " "respective copyright statements and license terms." msgstr "" +"Le moteur Godot s'appuie sur un certain nombre de bibliothèques gratuites et " +"open source tierce parties, toutes compatibles avec les termes de sa licence " +"MIT. Voici une liste exhaustive de tous ces composants tiers avec leurs " +"énoncés de droits d'auteur respectifs ainsi que les termes de leurs licences." #: editor/editor_about.cpp -#, fuzzy msgid "All Components" -msgstr "Contenu:" +msgstr "Tous les composants" #: editor/editor_about.cpp -#, fuzzy msgid "Components" -msgstr "Contenu:" +msgstr "Composants" #: editor/editor_about.cpp msgid "Licenses" -msgstr "" +msgstr "Licences" #: editor/editor_asset_installer.cpp editor/project_manager.cpp msgid "Error opening package file, not in zip format." -msgstr "" +msgstr "Erreur d'ouverture de paquetage, pas au format zip." #: editor/editor_asset_installer.cpp -#, fuzzy msgid "Uncompressing Assets" -msgstr "Non compressé" +msgstr "Ressource non compressé" #: editor/editor_asset_installer.cpp editor/project_manager.cpp msgid "Package Installed Successfully!" msgstr "Paquetage installé avec succès !" #: editor/editor_asset_installer.cpp -#, fuzzy +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Success!" +msgstr "Succès!" + +#: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp +msgid "Install" +msgstr "Installer" + +#: editor/editor_asset_installer.cpp msgid "Package Installer" -msgstr "Paquetage installé avec succès !" +msgstr "Installeur de paquetage" #: editor/editor_audio_buses.cpp msgid "Speakers" -msgstr "" +msgstr "Haut- parleurs" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Add Effect" -msgstr "Ajouter vide" +msgstr "Ajouter effet" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Rename Audio Bus" -msgstr "Ouvrir la Mise en Page des Bus Audio" +msgstr "Renommer bus audio" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Toggle Audio Bus Solo" -msgstr "Ouvrir la Mise en Page des Bus Audio" +msgstr "Basculer vers transport audio solo" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Toggle Audio Bus Mute" -msgstr "Ouvrir la Mise en Page des Bus Audio" +msgstr "Basculer vers désactivation de transport audio" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Bypass Effects" -msgstr "" +msgstr "Basculer vers effets de contournement de transport audio" #: editor/editor_audio_buses.cpp msgid "Select Audio Bus Send" -msgstr "" +msgstr "Sélectionner l'envoi de tranport audio" #: editor/editor_audio_buses.cpp msgid "Add Audio Bus Effect" -msgstr "" +msgstr "Ajouter effet de tranport audio" #: editor/editor_audio_buses.cpp msgid "Move Bus Effect" -msgstr "" +msgstr "Déplacer effet de transport" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Delete Bus Effect" -msgstr "Supprimer la selection" +msgstr "Supprimer l'effet de transport" #: editor/editor_audio_buses.cpp msgid "Audio Bus, Drag and Drop to rearrange." -msgstr "" - -#: editor/editor_audio_buses.cpp -#, fuzzy -msgid "Bus options" -msgstr "Options de débogage" +msgstr "Transport audio, glisser-déposer pour réorganiser." #: editor/editor_audio_buses.cpp msgid "Solo" -msgstr "" +msgstr "Solo" #: editor/editor_audio_buses.cpp msgid "Mute" -msgstr "" +msgstr "Assourdir" #: editor/editor_audio_buses.cpp msgid "Bypass" -msgstr "" +msgstr "Contournement" + +#: editor/editor_audio_buses.cpp +msgid "Bus options" +msgstr "Options de tranport" #: editor/editor_audio_buses.cpp editor/plugins/tile_map_editor_plugin.cpp #: editor/scene_tree_dock.cpp @@ -1105,75 +917,74 @@ msgstr "Dupliquer" #: editor/editor_audio_buses.cpp #, fuzzy +msgid "Reset Volume" +msgstr "Réinitialiser le zoom" + +#: editor/editor_audio_buses.cpp msgid "Delete Effect" -msgstr "Supprimer la selection" +msgstr "Supprimer l'effet" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Add Audio Bus" -msgstr "Ajouter un bus" +msgstr "Ajouter un transport audio" #: editor/editor_audio_buses.cpp msgid "Master bus can't be deleted!" -msgstr "" +msgstr "Le transport maître ne peut pas être supprimé !" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Delete Audio Bus" -msgstr "Supprimer la disposition" +msgstr "Supprimer le transport audio" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Duplicate Audio Bus" -msgstr "Dupliquer l'animation" +msgstr "Dupliquer le transport audio" #: editor/editor_audio_buses.cpp #, fuzzy +msgid "Reset Bus Volume" +msgstr "Réinitialiser le zoom" + +#: editor/editor_audio_buses.cpp msgid "Move Audio Bus" -msgstr "Déplacer l'action" +msgstr "Déplacer le transport audio" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Save Audio Bus Layout As.." -msgstr "Enregistrer la Disposition des Bus Audio Sous.." +msgstr "Enregistrer l'agencement du transport audio sous.." #: editor/editor_audio_buses.cpp msgid "Location for New Layout.." -msgstr "Emplacement de la Nouvelle Mise en Page.." +msgstr "Emplacement du nouvel agencement.." #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Open Audio Bus Layout" -msgstr "Ouvrir la Mise en Page des Bus Audio" +msgstr "Ouvrir agencement de transport audio" #: editor/editor_audio_buses.cpp msgid "There is no 'res://default_bus_layout.tres' file." -msgstr "" +msgstr "Il n'existe aucun 'res://default_bus_layout.tres'." #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Invalid file, not an audio bus layout." -msgstr "" -"Extension de fichier non valide.\n" -"Veuillez utiliser .fnt." +msgstr "Fichier invalide, pas un agencement de transport audio." #: editor/editor_audio_buses.cpp msgid "Add Bus" -msgstr "Ajouter un bus" +msgstr "Ajouter un transport" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Create a new Bus Layout." -msgstr "Créer une nouvelle ressource" +msgstr "Créer une nouvel agencement de tranport." -#: editor/editor_audio_buses.cpp editor/script_create_dialog.cpp +#: editor/editor_audio_buses.cpp editor/property_editor.cpp +#: editor/script_create_dialog.cpp msgid "Load" msgstr "Charger" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Load an existing Bus Layout." -msgstr "Charger une ressource existante depuis la disque et la modifier." +msgstr "Charger un agencement de tranport existant." #: editor/editor_audio_buses.cpp #: editor/plugins/animation_player_editor_plugin.cpp @@ -1181,18 +992,16 @@ msgid "Save As" msgstr "Enregistrer sous" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Save this Bus Layout to a file." -msgstr "Enregistrer la Disposition des Bus Audio Sous.." +msgstr "Sauvegarder l'agencement de ce transport vers un fichier." #: editor/editor_audio_buses.cpp editor/import_dock.cpp -#, fuzzy msgid "Load Default" -msgstr "Par défaut" +msgstr "Charger défaut" #: editor/editor_audio_buses.cpp msgid "Load the default Bus Layout." -msgstr "" +msgstr "Charger l'agencement de transport par défaut." #: editor/editor_autoload_settings.cpp msgid "Invalid name." @@ -1265,7 +1074,7 @@ msgid "Rearrange Autoloads" msgstr "Ré-organiser les AutoLoads" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp scene/gui/file_dialog.cpp +#: scene/gui/file_dialog.cpp msgid "Path:" msgstr "Chemin :" @@ -1273,9 +1082,7 @@ msgstr "Chemin :" msgid "Node Name:" msgstr "Nom de nÅ“ud :" -#: editor/editor_autoload_settings.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp editor/project_manager.cpp +#: editor/editor_autoload_settings.cpp editor/project_manager.cpp msgid "Name" msgstr "Nom" @@ -1300,27 +1107,27 @@ msgid "Updating scene.." msgstr "Mise à jour de la scène…" #: editor/editor_dir_dialog.cpp -#, fuzzy msgid "Please select a base directory first" -msgstr "Veuillez enregistrer la scène d'abord." +msgstr "Veuillez sélectionner un répertoire de base en premier" #: editor/editor_dir_dialog.cpp msgid "Choose a Directory" msgstr "Choisir un répertoire" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Create Folder" msgstr "Créer un dossier" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: editor/editor_plugin_settings.cpp editor/plugins/theme_editor_plugin.cpp -#: editor/project_export.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp +#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp +#: scene/gui/file_dialog.cpp msgid "Name:" msgstr "Nom :" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Could not create folder." msgstr "Impossible de créer le dossier." @@ -1340,30 +1147,6 @@ msgstr "Empaquetage" msgid "Template file not found:\n" msgstr "Fichier modèle introuvable :\n" -#: editor/editor_export.cpp -msgid "Added:" -msgstr "Ajouté :" - -#: editor/editor_export.cpp -msgid "Removed:" -msgstr "Supprimé :" - -#: editor/editor_export.cpp -msgid "Error saving atlas:" -msgstr "Erreur de sauvegarde de l'atlas :" - -#: editor/editor_export.cpp -msgid "Could not save atlas subtexture:" -msgstr "Impossible d'enregistrer la sous-texture atlas :" - -#: editor/editor_export.cpp -msgid "Exporting for %s" -msgstr "Exportation pour %s" - -#: editor/editor_export.cpp -msgid "Setting Up.." -msgstr "Configuration…" - #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "Le fichier existe, l'écraser ?" @@ -1448,6 +1231,11 @@ msgstr "Déplacer le favori vers le haut" msgid "Move Favorite Down" msgstr "Déplacer le favori vers le bas" +#: editor/editor_file_dialog.cpp +#, fuzzy +msgid "Go to parent folder" +msgstr "Impossible de créer le dossier." + #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Directories & Files:" msgstr "Répertoires et fichiers :" @@ -1490,6 +1278,10 @@ msgstr "Liste des classes :" msgid "Search Classes" msgstr "Chercher dans les classes" +#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +msgid "Top" +msgstr "Dessus" + #: editor/editor_help.cpp editor/property_editor.cpp msgid "Class:" msgstr "Classe :" @@ -1506,15 +1298,30 @@ msgstr "Héritée par :" msgid "Brief Description:" msgstr "Brève description :" +#: editor/editor_help.cpp +#, fuzzy +msgid "Members" +msgstr "Membres :" + #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "Membres :" #: editor/editor_help.cpp +#, fuzzy +msgid "Public Methods" +msgstr "Méthodes publiques :" + +#: editor/editor_help.cpp msgid "Public Methods:" msgstr "Méthodes publiques :" #: editor/editor_help.cpp +#, fuzzy +msgid "GUI Theme Items" +msgstr "Items de thème GUI :" + +#: editor/editor_help.cpp msgid "GUI Theme Items:" msgstr "Items de thème GUI :" @@ -1524,53 +1331,85 @@ msgstr "Signaux :" #: editor/editor_help.cpp #, fuzzy +msgid "Enumerations" +msgstr "Recensements :" + +#: editor/editor_help.cpp msgid "Enumerations:" -msgstr "Animations" +msgstr "Recensements :" #: editor/editor_help.cpp msgid "enum " -msgstr "" +msgstr "enum_ " + +#: editor/editor_help.cpp +#, fuzzy +msgid "Constants" +msgstr "Constantes :" #: editor/editor_help.cpp msgid "Constants:" msgstr "Constantes :" #: editor/editor_help.cpp +#, fuzzy +msgid "Description" +msgstr "Description :" + +#: editor/editor_help.cpp +#, fuzzy +msgid "Properties" +msgstr "Propriétés :" + +#: editor/editor_help.cpp msgid "Property Description:" msgstr "Description des propriétés :" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this property. Please help us by " +"[color=$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp +#, fuzzy +msgid "Methods" +msgstr "Liste des méthodes :" + +#: editor/editor_help.cpp msgid "Method Description:" msgstr "Description de la méthode :" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this method. Please help us by [color=" +"$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp msgid "Search Text" msgstr "Chercher du texte" #: editor/editor_log.cpp -#, fuzzy msgid "Output:" -msgstr " Sortie :" +msgstr "Sortie :" #: editor/editor_log.cpp editor/plugins/animation_tree_editor_plugin.cpp -#: editor/plugins/rich_text_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_editor_debugger.cpp scene/gui/line_edit.cpp -#: scene/gui/text_edit.cpp +#: editor/property_editor.cpp editor/script_editor_debugger.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Clear" msgstr "Effacer" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Error saving resource!" msgstr "Erreur d'enregistrement de la ressource !" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Save Resource As.." msgstr "Enregistrer la ressource sous…" -#: editor/editor_node.cpp editor/export_template_manager.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "I see.." msgstr "Je vois…" @@ -1587,6 +1426,30 @@ msgid "Error while saving." msgstr "Erreur lors de l'enregistrement." #: editor/editor_node.cpp +#, fuzzy +msgid "Can't open '%s'." +msgstr "Impossible d'opérer sur « .. »" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Error while parsing '%s'." +msgstr "Erreur lors de l'enregistrement." + +#: editor/editor_node.cpp +msgid "Unexpected end of file '%s'." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Missing '%s' or its dependencies." +msgstr "La scène « %s » a des dépendences cassées :" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Error while loading '%s'." +msgstr "Erreur lors de l'enregistrement." + +#: editor/editor_node.cpp msgid "Saving Scene" msgstr "Enregistrement de la scène" @@ -1599,9 +1462,8 @@ msgid "Creating Thumbnail" msgstr "Création de l'aperçu" #: editor/editor_node.cpp -#, fuzzy msgid "This operation can't be done without a tree root." -msgstr "Cette opération ne peut être réalisée sans une scène." +msgstr "Cette opération ne peut être réalisée sans une arborescence racine." #: editor/editor_node.cpp msgid "" @@ -1647,6 +1509,33 @@ msgid "Restored default layout to base settings." msgstr "Disposition par défaut remise à zéro." #: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was imported, so it's not editable.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was instanced or inherited.\n" +"Changes to it will not be kept when saving the current scene." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource was imported, so it's not editable. Change its settings in the " +"import panel and then re-import." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This scene was imported, so changes to it will not be kept.\n" +"Instancing it or inheriting will allow making changes to it.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp msgid "Copy Params" msgstr "Copier paramètres" @@ -1679,7 +1568,6 @@ msgid "There is no defined scene to run." msgstr "Il n'y a pas de scène définie pour être lancée." #: editor/editor_node.cpp -#, fuzzy msgid "" "No main scene has ever been defined, select one?\n" "You can change it later in \"Project Settings\" under the 'application' " @@ -1687,7 +1575,7 @@ msgid "" msgstr "" "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 »." +"sous la catégorie « application »." #: editor/editor_node.cpp msgid "" @@ -1737,22 +1625,20 @@ msgid "Quick Open Script.." msgstr "Ouvrir un script rapidement…" #: editor/editor_node.cpp -#, fuzzy msgid "Save & Close" -msgstr "Enregistrer un fichier" +msgstr "Enregistrer & fermer" #: editor/editor_node.cpp msgid "Save changes to '%s' before closing?" -msgstr "" +msgstr "Sauvegarder modifications de '%s' avant de quitter ?" #: editor/editor_node.cpp msgid "Save Scene As.." msgstr "Enregistrer la scène sous…" #: editor/editor_node.cpp -#, fuzzy msgid "No" -msgstr "NÅ“ud" +msgstr "Non" #: editor/editor_node.cpp msgid "Yes" @@ -1776,9 +1662,8 @@ msgid "Export Tile Set" msgstr "Exporter un ensemble de tuiles" #: editor/editor_node.cpp -#, fuzzy msgid "This operation can't be done without a selected node." -msgstr "Cette opération ne peut être réalisée sans une scène." +msgstr "Cette opération ne peut être réalisée sans noeud sélectionné." #: editor/editor_node.cpp msgid "Current scene not saved. Open anyway?" @@ -1809,22 +1694,30 @@ msgid "Exit the editor?" msgstr "Quitter l'éditeur ?" #: editor/editor_node.cpp -#, fuzzy msgid "Open Project Manager?" -msgstr "Gestionnaire de projets" +msgstr "Ouvrir gestionnaire de projets ?" #: editor/editor_node.cpp -#, fuzzy msgid "Save & Quit" -msgstr "Enregistrer un fichier" +msgstr "Sauvegarder & quitter" #: editor/editor_node.cpp msgid "Save changes to the following scene(s) before quitting?" msgstr "" +"Sauvegarder les modifications sur la (les) scène(s) suivante(s) avant de " +"quitter ?" #: editor/editor_node.cpp msgid "Save changes the following scene(s) before opening Project Manager?" msgstr "" +"Enregistrer les modifications sur la (les) scène(s) suivante(s) avant " +"d'ouvrir le gestionnaire de projet ?" + +#: editor/editor_node.cpp +msgid "" +"This option is deprecated. Situations where refresh must be forced are now " +"considered a bug. Please report." +msgstr "" #: editor/editor_node.cpp msgid "Pick a Main Scene" @@ -1832,19 +1725,20 @@ msgstr "Choisir une scène principale" #: editor/editor_node.cpp msgid "Unable to enable addon plugin at: '" -msgstr "" +msgstr "impossible d'activer le plugin depuis :" #: editor/editor_node.cpp msgid "' parsing of config failed." -msgstr "" +msgstr "L'analyse de la configuration a échoué." #: editor/editor_node.cpp msgid "Unable to find script field for addon plugin at: 'res://addons/" msgstr "" +"Impossible de trouver le champ de script pour le plugin dans : 'res://addons/" #: editor/editor_node.cpp msgid "Unable to load addon script from path: '" -msgstr "" +msgstr "Impossible de charger le script d'ajout depuis le chemin :" #: editor/editor_node.cpp msgid "" @@ -1856,7 +1750,7 @@ msgstr "" "Pour y apporter des modification, une scène fille peut être créée." #: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Ugh" msgstr "Oups" @@ -1870,14 +1764,15 @@ msgstr "" "le répertoire du projet." #: editor/editor_node.cpp -msgid "Error loading scene." -msgstr "Erreur lors du chargement de la scène." - -#: editor/editor_node.cpp msgid "Scene '%s' has broken dependencies:" msgstr "La scène « %s » a des dépendences cassées :" #: editor/editor_node.cpp +#, fuzzy +msgid "Clear Recent Scenes" +msgstr "Effacer les fichiers récents" + +#: editor/editor_node.cpp msgid "Save Layout" msgstr "Enregistrer la disposition" @@ -1907,11 +1802,10 @@ msgid "Distraction Free Mode" msgstr "Mode sans distraction" #: editor/editor_node.cpp -#, fuzzy msgid "Toggle distraction-free mode." -msgstr "Mode sans distraction" +msgstr "Basculer vers mode sans-distraction." -#: editor/editor_node.cpp editor/io_plugins/editor_scene_import_plugin.cpp +#: editor/editor_node.cpp msgid "Scene" msgstr "Scène" @@ -2112,9 +2006,8 @@ msgstr "" "plus efficace avec le système de fichiers réseau." #: editor/editor_node.cpp -#, fuzzy msgid "Editor" -msgstr "Modifier" +msgstr "Editeur" #: editor/editor_node.cpp editor/settings_config_dialog.cpp msgid "Editor Settings" @@ -2141,20 +2034,21 @@ msgid "Classes" msgstr "Classes" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Online Docs" -msgstr "Fermer les documentations" +msgstr "Documentation en ligne" #: editor/editor_node.cpp -#, fuzzy msgid "Q&A" msgstr "Questions et Réponses" #: editor/editor_node.cpp -#, fuzzy msgid "Issue Tracker" msgstr "Traqueur de problèmes" +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +msgid "Community" +msgstr "Communauté" + #: editor/editor_node.cpp msgid "About" msgstr "À propos" @@ -2163,7 +2057,7 @@ msgstr "À propos" msgid "Play the project." msgstr "Lancer le projet." -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Play" msgstr "Jouer" @@ -2179,7 +2073,7 @@ msgstr "Mettre en pause la scène" msgid "Stop the scene." msgstr "Arrêter la scène." -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Stop" msgstr "Arrêter" @@ -2252,6 +2146,16 @@ msgid "Object properties." msgstr "Propriétés de l'objet." #: editor/editor_node.cpp +#, fuzzy +msgid "Changes may be lost!" +msgstr "Changer le groupe d'images" + +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Import" +msgstr "Importer" + +#: editor/editor_node.cpp msgid "FileSystem" msgstr "Système de fichiers" @@ -2265,15 +2169,7 @@ msgstr "Sortie" #: editor/editor_node.cpp msgid "Don't Save" -msgstr "" - -#: editor/editor_node.cpp editor/editor_reimport_dialog.cpp -msgid "Re-Import" -msgstr "Ré-importer" - -#: editor/editor_node.cpp editor/editor_plugin_settings.cpp -msgid "Update" -msgstr "Mettre à jour" +msgstr "Ne pas enregistrer" #: editor/editor_node.cpp msgid "Import Templates From ZIP File" @@ -2300,9 +2196,8 @@ msgid "Open & Run a Script" msgstr "Ouvrir et exécuter un script" #: editor/editor_node.cpp -#, fuzzy msgid "New Inherited" -msgstr "Nouvelle scène héritée…" +msgstr "Nouveau hérité" #: editor/editor_node.cpp msgid "Load Errors" @@ -2313,40 +2208,52 @@ msgid "Select" msgstr "Sélectionner" #: editor/editor_node.cpp -#, fuzzy msgid "Open 2D Editor" -msgstr "Ouvrir dans l'éditeur" +msgstr "Ouvrir éditeur 2D" #: editor/editor_node.cpp -#, fuzzy msgid "Open 3D Editor" -msgstr "Ouvrir dans l'éditeur" +msgstr "Ouvrir éditeur 3D" #: editor/editor_node.cpp -#, fuzzy msgid "Open Script Editor" -msgstr "Ouvrir dans l'éditeur" +msgstr "Ouvrir éditeur de script" #: editor/editor_node.cpp -#, fuzzy msgid "Open Asset Library" -msgstr "Bibliothèque d'exportation" +msgstr "Ouvrir bibliothèque de ressource" #: editor/editor_node.cpp -#, fuzzy msgid "Open the next Editor" -msgstr "Ouvrir dans l'éditeur" +msgstr "Ouvrir éditeur suivant" #: editor/editor_node.cpp -#, fuzzy msgid "Open the previous Editor" -msgstr "Ouvrir dans l'éditeur" +msgstr "Ouvrir éditeur précédant" + +#: editor/editor_plugin.cpp +#, fuzzy +msgid "Creating Mesh Previews" +msgstr "Création de la bibliothèque de maillages" + +#: editor/editor_plugin.cpp +msgid "Thumbnail.." +msgstr "Aperçu…" #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" msgstr "Extensions installées :" #: editor/editor_plugin_settings.cpp +msgid "Update" +msgstr "Mettre à jour" + +#: editor/editor_plugin_settings.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Version:" +msgstr "Version :" + +#: editor/editor_plugin_settings.cpp msgid "Author:" msgstr "Auteur :" @@ -2379,9 +2286,8 @@ msgid "Frame %" msgstr "% d'image" #: editor/editor_profiler.cpp -#, fuzzy msgid "Fixed Frame %" -msgstr "Cadre prédéfini %" +msgstr "Frame fixe %" #: editor/editor_profiler.cpp editor/script_editor_debugger.cpp msgid "Time:" @@ -2396,39 +2302,20 @@ msgid "Self" msgstr "Soi" #: editor/editor_profiler.cpp -#, fuzzy msgid "Frame #:" -msgstr "Image #:" - -#: editor/editor_reimport_dialog.cpp -msgid "Please wait for scan to complete." -msgstr "Veuillez attendre la fin du scan." - -#: editor/editor_reimport_dialog.cpp -msgid "Current scene must be saved to re-import." -msgstr "La scène actuelle doit être enregistrée afin de pouvoir ré-importer." - -#: editor/editor_reimport_dialog.cpp -msgid "Save & Re-Import" -msgstr "Enregistrer et ré-importer" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Importing" -msgstr "Ré-importation" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Import Changed Resources" -msgstr "Ré-importer les ressources modifiées" +msgstr "Frame # :" #: editor/editor_run_native.cpp msgid "Select device from the list" -msgstr "" +msgstr "Sélectionner appareil depuis la liste" #: editor/editor_run_native.cpp msgid "" "No runnable export preset found for this platform.\n" "Please add a runnable preset in the export menu." msgstr "" +"Aucun préréglage d'exportation exécutable trouvé pour cette plate-forme. \n" +"Ajoutez un préréglage exécutable dans le menu d'exportation." #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." @@ -2503,71 +2390,56 @@ msgid "Can't open export templates zip." msgstr "Impossible d'ouvrir le ZIP de modèles d'exportation." #: editor/export_template_manager.cpp -#, fuzzy msgid "Invalid version.txt format inside templates." -msgstr "Le format de version.txt invalide dans les modèles." +msgstr "Format de version.txt invalide dans les modèles." #: editor/export_template_manager.cpp -#, fuzzy msgid "" "Invalid version.txt format inside templates. Revision is not a valid " "identifier." msgstr "" -"Le format de version.txt invalide dans les modèles. Revision n'est pas un " +"Format de version.txt invalide dans les modèles. Revision n'est pas un " "identifiant valide." #: editor/export_template_manager.cpp -#, fuzzy msgid "No version.txt found inside templates." -msgstr "Le fichier version.txt n'a pas été trouvé dans les modèles." +msgstr "Aucun version.txt n'a été trouvé dans les modèles." #: editor/export_template_manager.cpp -#, fuzzy msgid "Error creating path for templates:\n" -msgstr "Erreur de sauvegarde de l'atlas :" +msgstr "Erreur lors de la création du chemin pour les modèles:\n" #: editor/export_template_manager.cpp -#, fuzzy msgid "Extracting Export Templates" -msgstr "Chargement des modèles d'exportation" +msgstr "Extraction des modèles d'exportation" #: editor/export_template_manager.cpp msgid "Importing:" msgstr "Importation :" #: editor/export_template_manager.cpp -msgid "Loading Export Templates" -msgstr "Chargement des modèles d'exportation" - -#: editor/export_template_manager.cpp -#, fuzzy msgid "Current Version:" -msgstr "Version actuelle :" +msgstr "Version courante :" #: editor/export_template_manager.cpp -#, fuzzy msgid "Installed Versions:" -msgstr "Extensions installées :" +msgstr "Versions installées :" #: editor/export_template_manager.cpp -#, fuzzy msgid "Install From File" -msgstr "Projets récents :" +msgstr "Installer depuis fichier :" #: editor/export_template_manager.cpp -#, fuzzy msgid "Remove Template" -msgstr "Supprimer l'item" +msgstr "Supprimer le modèle" #: editor/export_template_manager.cpp -#, fuzzy msgid "Select template file" -msgstr "Supprimer les fichiers sélectionnés ?" +msgstr "Sélectionner le fichier de modèle" #: editor/export_template_manager.cpp -#, fuzzy msgid "Export Template Manager" -msgstr "Chargement des modèles d'exportation" +msgstr "Gestionnaire d'export de modèles" #: editor/file_type_cache.cpp msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" @@ -2580,105 +2452,121 @@ msgid "Cannot navigate to '" msgstr "Ne peux pas acceder à '" #: editor/filesystem_dock.cpp -#, fuzzy +msgid "View items as a grid of thumbnails" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "View items as a list" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "" "\n" -"Status: Needs Re-Import" -msgstr "Enregistrer et ré-importer" +"Status: Import of file failed. Please fix file and reimport manually." +msgstr "" #: editor/filesystem_dock.cpp -#, fuzzy msgid "" "\n" "Source: " -msgstr "Source :" +msgstr "" +"\n" +"Source : " #: editor/filesystem_dock.cpp -msgid "Same source and destination files, doing nothing." -msgstr "Fichiers source et destination identiques, rien à faire." +#, fuzzy +msgid "Cannot move/rename resources root." +msgstr "Impossible de charger ou traiter la police source." #: editor/filesystem_dock.cpp -msgid "Target file exists, can't overwrite. Delete first." -msgstr "" +#, fuzzy +msgid "Cannot move a folder into itself.\n" +msgstr "Impossible d'importer un fichier par-dessus lui-même :" #: editor/filesystem_dock.cpp -msgid "Same source and destination paths, doing nothing." -msgstr "Chemins source et destination identiques, rien à faire." +#, fuzzy +msgid "Error moving:\n" +msgstr "Erreur lors du déplacement du répertoire :\n" #: editor/filesystem_dock.cpp -msgid "Can't move directories to within themselves." -msgstr "Impossible de déplacer des répertoires vers eux-mêmes." +#, fuzzy +msgid "Unable to update dependencies:\n" +msgstr "La scène « %s » a des dépendences cassées :" #: editor/filesystem_dock.cpp -msgid "Can't rename deps for:\n" +msgid "No name provided" msgstr "" #: editor/filesystem_dock.cpp -#, fuzzy -msgid "Error moving file:\n" -msgstr "Erreur de chargement d'image :" +msgid "Provided name contains invalid characters" +msgstr "" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Error moving dir:\n" -msgstr "Erreur d'importation :" +msgid "No name provided." +msgstr "Renommer ou déplacer…" #: editor/filesystem_dock.cpp -msgid "Can't operate on '..'" -msgstr "Impossible d'opérer sur « .. »" +#, fuzzy +msgid "Name contains invalid characters." +msgstr "Caractères valides :" #: editor/filesystem_dock.cpp -msgid "Pick New Name and Location For:" -msgstr "Entrez un nouveau nom et chemin pour :" +#, fuzzy +msgid "A file or folder with this name already exists." +msgstr "Le nom du groupe existe déjà !" #: editor/filesystem_dock.cpp -msgid "No files selected!" -msgstr "Pas de fichiers sélectionnés !" +#, fuzzy +msgid "Renaming file:" +msgstr "Renommer la variable" #: editor/filesystem_dock.cpp #, fuzzy +msgid "Renaming folder:" +msgstr "Renommer le nÅ“ud" + +#: editor/filesystem_dock.cpp msgid "Expand all" -msgstr "Étendre au parent" +msgstr "Développer tout" #: editor/filesystem_dock.cpp msgid "Collapse all" msgstr "Réduire tout" #: editor/filesystem_dock.cpp -msgid "Show In File Manager" -msgstr "Montrer dans le gestionnaire de fichiers" - -#: editor/filesystem_dock.cpp -msgid "Instance" -msgstr "Instance" +msgid "Copy Path" +msgstr "Copier le chemin" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "Modifier les dépendances…" +#, fuzzy +msgid "Rename.." +msgstr "Renommer" #: editor/filesystem_dock.cpp -msgid "View Owners.." -msgstr "Voir les propriétaires…" +msgid "Move To.." +msgstr "Déplacer vers…" #: editor/filesystem_dock.cpp -msgid "Copy Path" -msgstr "Copier le chemin" +#, fuzzy +msgid "New Folder.." +msgstr "Créer un dossier" #: editor/filesystem_dock.cpp -msgid "Rename or Move.." -msgstr "Renommer ou déplacer…" +msgid "Show In File Manager" +msgstr "Montrer dans le gestionnaire de fichiers" #: editor/filesystem_dock.cpp -msgid "Move To.." -msgstr "Déplacer vers…" +msgid "Instance" +msgstr "Instance" #: editor/filesystem_dock.cpp -msgid "Info" -msgstr "Information" +msgid "Edit Dependencies.." +msgstr "Modifier les dépendances…" #: editor/filesystem_dock.cpp -msgid "Re-Import.." -msgstr "Ré-importer…" +msgid "View Owners.." +msgstr "Voir les propriétaires…" #: editor/filesystem_dock.cpp msgid "Previous Directory" @@ -2707,11 +2595,18 @@ msgid "" "Scanning Files,\n" "Please Wait.." msgstr "" +"Analyse des fichiers en cours,\n" +"Veuillez patienter..." #: editor/filesystem_dock.cpp msgid "Move" msgstr "Déplacer" +#: editor/filesystem_dock.cpp editor/plugins/animation_tree_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Rename" +msgstr "Renommer" + #: editor/groups_editor.cpp msgid "Add to Group" msgstr "Ajouter au groupe" @@ -2721,682 +2616,157 @@ msgid "Remove from Group" msgstr "Supprimer du groupe" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Import as Single Scene" -msgstr "Importation de la scène…" +msgstr "Importer comme scène unique" + +#: editor/import/resource_importer_scene.cpp +#, fuzzy +msgid "Import with Separate Animations" +msgstr "Importer avec matériaux séparés" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials" -msgstr "" +msgstr "Importer avec matériaux séparés" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects" -msgstr "" +msgstr "Importer avec des objets séparés" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects+Materials" -msgstr "" +msgstr "Importer avec objets+matériaux séparés" #: editor/import/resource_importer_scene.cpp #, fuzzy +msgid "Import with Separate Objects+Animations" +msgstr "Importer avec objets+matériaux séparés" + +#: editor/import/resource_importer_scene.cpp +#, fuzzy +msgid "Import with Separate Materials+Animations" +msgstr "Importer avec matériaux séparés" + +#: editor/import/resource_importer_scene.cpp +#, fuzzy +msgid "Import with Separate Objects+Materials+Animations" +msgstr "Importer avec objets+matériaux séparés" + +#: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes" -msgstr "Importer une scène 3D" +msgstr "Importer comme scènes multiples" #: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes+Materials" -msgstr "" +msgstr "Importer comme scènes+matériaux multiples" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Import Scene" msgstr "Importer une scène" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Importing Scene.." msgstr "Importation de la scène…" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Running Custom Script.." msgstr "Lancement du script personnalisé…" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Couldn't load post-import script:" msgstr "Impossible de charger le script de post-importation :" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Invalid/broken script for post-import (check console):" msgstr "" "Script de post-importation invalide ou corrompu (vérifiez la console) :" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Error running post-import script:" msgstr "Erreur d'exécution du script de post-importation :" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Saving.." msgstr "Enregistrement…" #: editor/import_dock.cpp msgid "Set as Default for '%s'" -msgstr "" +msgstr "Définir comme défaut pour '%s'" #: editor/import_dock.cpp msgid "Clear Default for '%s'" -msgstr "" +msgstr "Effacer défaut pour '%s'" #: editor/import_dock.cpp -#, fuzzy msgid " Files" -msgstr "Fichier" +msgstr " Fichiers" #: editor/import_dock.cpp -#, fuzzy msgid "Import As:" -msgstr "Importer" +msgstr "Importer comme :" #: editor/import_dock.cpp editor/property_editor.cpp msgid "Preset.." msgstr "Pré-réglage…" #: editor/import_dock.cpp -#, fuzzy msgid "Reimport" msgstr "Ré-importer" -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "No bit masks to import!" -msgstr "Pas de masques de bits à importer !" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path is empty." -msgstr "Le chemin de destination est vide." - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must be a complete resource path." -msgstr "" -"Le chemin de destination doit être un chemin complet vers une ressource." - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must exist." -msgstr "Le chemin de destination doit exister." - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Save path is empty!" -msgstr "Le chemin de sauvegarde est vide !" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Import BitMasks" -msgstr "Importer des BitMasks" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s):" -msgstr "Texture(s) source :" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Target Path:" -msgstr "Chemin de destination :" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Accept" -msgstr "Accepter" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#, fuzzy -msgid "Bit Mask" -msgstr "Masque de bits" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No source font file!" -msgstr "Pas de fichier de police source !" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No target font resource!" -msgstr "Pas de ressource de police de destination !" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#, fuzzy -msgid "" -"Invalid file extension.\n" -"Please use .font." -msgstr "" -"Extension de fichier non valide.\n" -"Veuillez utiliser .fnt." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Can't load/process source font." -msgstr "Impossible de charger ou traiter la police source." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Couldn't save font." -msgstr "Impossible d'enregistrer la police." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font:" -msgstr "Police source :" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font Size:" -msgstr "Taille de la police source :" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Dest Resource:" -msgstr "Ressource de destination :" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "The quick brown fox jumps over the lazy dog." -msgstr "Voix ambiguë d'un cÅ“ur qui, au zéphyr, préfère les jattes de kiwis." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Test:" -msgstr "Test :" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Options:" -msgstr "Options :" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Font Import" -msgstr "Importation d'une police" - -#: 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 "" -"Ce fichier est déjà un fichier de police Godot, veuillez fournir un fichier " -"de type BMFont à la place." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Failed opening as BMFont file." -msgstr "Impossible d'ouvrir le fichier en tant que fichier BMFont." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error initializing FreeType." -msgstr "Erreur à l'initialisation de Freetype." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Unknown font format." -msgstr "Format de police inconnu." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error loading font." -msgstr "Erreur lors du chargement de la police." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Invalid font size." -msgstr "Taille de police invalide." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Invalid font custom source." -msgstr "Source personnalisée de police invalide." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/plugins/theme_editor_plugin.cpp -msgid "Font" -msgstr "Police" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "No meshes to import!" -msgstr "Pas de maillages à importer !" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Single Mesh Import" -msgstr "Importer un maillage" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Source Mesh(es):" -msgstr "Maillage(s) source :" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Mesh" -msgstr "Maillage" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Surface %d" -msgstr "Surface %d" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "No samples to import!" -msgstr "Pas d'échantillons à importer !" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Import Audio Samples" -msgstr "Importer des échantillons audio" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Source Sample(s):" -msgstr "Échantillon(s) source :" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Audio Sample" -msgstr "Échantillon audio" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "New Clip" -msgstr "Nouvelle séquence" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Animation Options" -msgstr "Options d'animation" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Flags" -msgstr "Drapeaux" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Bake FPS:" -msgstr "FPS de calcul :" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Optimizer" -msgstr "Optimiseur" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Linear Error" -msgstr "Erreur linéaire maximale" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angular Error" -msgstr "Erreur angulaire maximale" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angle" -msgstr "Angle maximal" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Clips" -msgstr "Séquences" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Start(s)" -msgstr "Départ(s)" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "End(s)" -msgstr "Fin(s)" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Loop" -msgstr "Boucle" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Filters" -msgstr "Filtres" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source path is empty." -msgstr "Le chemin source est vide." - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't load post-import script." -msgstr "Impossible de charger le script de post-importation." - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Invalid/broken script for post-import." -msgstr "Script invalide ou cassé de post-importation." - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Error importing scene." -msgstr "Erreur à l'importation de la scène." - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import 3D Scene" -msgstr "Importer une scène 3D" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source Scene:" -msgstr "Scène source :" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Same as Target Scene" -msgstr "Identique à la scène de destination" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Shared" -msgstr "Partagé" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Target Texture Folder:" -msgstr "Dossier de destination des textures :" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Post-Process Script:" -msgstr "Script de post-traitement :" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Custom Root Node Type:" -msgstr "Type de nÅ“ud racine personnalisé :" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Auto" -msgstr "Auto." - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Root Node Name:" -msgstr "Nom de nÅ“ud racine :" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "The Following Files are Missing:" -msgstr "Les fichiers suivants sont manquants :" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Anyway" -msgstr "Importer quand même" - -#: editor/io_plugins/editor_scene_import_plugin.cpp scene/gui/dialogs.cpp -msgid "Cancel" -msgstr "Annuler" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import & Open" -msgstr "Importer et ouvrir" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Edited scene has not been saved, open imported scene anyway?" -msgstr "" -"La scène modifiée actuellement n'a pas été enregistrée, ouvrir la scène " -"importée quand même ?" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Image:" -msgstr "Importer une image :" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Can't import a file over itself:" -msgstr "Impossible d'importer un fichier par-dessus lui-même :" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't localize path: %s (already local)" -msgstr "Impossible de rendre le chemin local : %s (déjà local)" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "3D Scene Animation" -msgstr "Animation de scène 3D" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Uncompressed" -msgstr "Non compressé" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossless (PNG)" -msgstr "Compression sans perte (PNG)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossy (WebP)" -msgstr "Compression avec perte (WebP)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress (VRAM)" -msgstr "Compression GPU (VRAM)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Format" -msgstr "Format de texture" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Compression Quality (WebP):" -msgstr "Qualité de compression de la texture (WebP) :" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Options" -msgstr "Options de texture" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Please specify some files!" -msgstr "Veuillez spécifier des fichiers !" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "At least one file needed for Atlas." -msgstr "Il faut au moins un fichier pour créer un atlas." - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Error importing:" -msgstr "Erreur d'importation :" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Only one file is required for large texture." -msgstr "Un seul fichier est nécessaire pour créer une grande texture." - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Max Texture Size:" -msgstr "Taille de texture maximale :" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for Atlas (2D)" -msgstr "Importer des textures pour un atlas (2D)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cell Size:" -msgstr "Taille des cellules :" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Large Texture" -msgstr "Grande texture" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Textures (2D)" -msgstr "Importer des grandes textures (2D)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture" -msgstr "Texture source" +#: editor/multi_node_edit.cpp +msgid "MultiNode Set" +msgstr "Ensemble multi-nÅ“ud" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Base Atlas Texture" -msgstr "Texture d'atlas de base" +#: editor/node_dock.cpp +msgid "Groups" +msgstr "Groupes" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s)" -msgstr "Texture(s) source" +#: editor/node_dock.cpp +msgid "Select a Node to edit Signals and Groups." +msgstr "Sélectionnez un nÅ“ud pour editer des signaux et des groupes." -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 2D" -msgstr "Importer des textures pour la 2D" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create Poly" +msgstr "Créer un polygone" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 3D" -msgstr "Importer des textures pour la 3D" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly" +msgstr "Modifier le polygone" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures" -msgstr "Importer des textures" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#, fuzzy +msgid "Insert Point" +msgstr "Insertion" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "2D Texture" -msgstr "Texture 2D" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly (Remove Point)" +msgstr "Modifier le polygone (supprimer un point)" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "3D Texture" -msgstr "Texture 3D" +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Remove Poly And Point" +msgstr "Retirer Polygone et Point" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Atlas Texture" -msgstr "Texture atlas" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create a new polygon from scratch." +msgstr "Créer un nouveau polygone à partir de rien." -#: editor/io_plugins/editor_texture_import_plugin.cpp +#: editor/plugins/abstract_polygon_2d_editor.cpp msgid "" -"NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files to " -"the project." +"Edit existing polygon:\n" +"LMB: Move Point.\n" +"Ctrl+LMB: Split Segment.\n" +"RMB: Erase Point." msgstr "" -"REMARQUE : L'import de textures 2D n'est pas obligatoire. Copiez directement " -"les fichiers PNG ou JPEG dans le projet." - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Crop empty space." -msgstr "Rogner l'espace vide." - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture" -msgstr "Texture" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Texture" -msgstr "Importer une grande texture" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Load Source Image" -msgstr "Charger une image source" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Slicing" -msgstr "Découpage" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Inserting" -msgstr "Insertion" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Saving" -msgstr "Enregistrement" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save large texture:" -msgstr "Impossible d'enregistrer la grande texture :" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Build Atlas For:" -msgstr "Construire l'atlas pour :" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Loading Image:" -msgstr "Chargement de l'image :" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't load image:" -msgstr "Impossible de charger l'image :" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Converting Images" -msgstr "Conversion des images" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cropping Images" -msgstr "Rognage des images" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Blitting Images" -msgstr "Découpage des images" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save atlas image:" -msgstr "Impossible d'enregistrer l'image d'atlas :" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save converted texture:" -msgstr "Impossible d'enregistrer la texture convertie :" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid source!" -msgstr "Source invalide !" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid translation source!" -msgstr "Source de traduction invalide !" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Column" -msgstr "Colonne" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/script_create_dialog.cpp -msgid "Language" -msgstr "Langage" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No items to import!" -msgstr "Pas d'objets à importer !" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No target path!" -msgstr "Pas de chemin de destination !" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translations" -msgstr "Importer des traductions" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Couldn't import!" -msgstr "Impossible d'importer !" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translation" -msgstr "Importer une traduction" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Source CSV:" -msgstr "CSV source :" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Ignore First Row" -msgstr "Ignorer la première ligne" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Compress" -msgstr "Compresser" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -#, fuzzy -msgid "Add to Project (project.godot)" -msgstr "Ajouter au projet (engine.cfg)" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Languages:" -msgstr "Importer les langues :" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Translation" -msgstr "Traduction" - -#: editor/multi_node_edit.cpp -msgid "MultiNode Set" -msgstr "Ensemble multi-nÅ“ud" - -#: editor/node_dock.cpp -msgid "Groups" -msgstr "Groupes" - -#: editor/node_dock.cpp -#, fuzzy -msgid "Select a Node to edit Signals and Groups." -msgstr "Sélectionnez un nÅ“ud pour modifier des signaux et des groupes." +"Editer polygones existants :\n" +"Bouton gauche : Déplacer point\n" +"Ctrl+Bouton gauche : Diviser section.\n" +"Bouton droit: Effeacer point." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Toggle Autoplay" @@ -3415,9 +2785,8 @@ msgid "Change Animation Name:" msgstr "Modifier le nom de l'animation :" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Delete Animation?" -msgstr "Dupliquer l'animation" +msgstr "Supprimer l'animation ?" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp @@ -3443,12 +2812,10 @@ msgid "Add Animation" msgstr "Ajouter une animation" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Blend Next Changed" -msgstr "Mélange Suivant Changé" +msgstr "Mélange suivant modifié" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Change Blend Time" msgstr "Changer le temps de mélange" @@ -3486,16 +2853,14 @@ msgstr "" "Jouer l'animation sélectionnée à rebours depuis la position actuelle. (A)" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Play selected animation backwards from end. (Shift+A)" -msgstr "Lire l'animation sélectionnée à rebours de la fin. (Maj + A)" +msgstr "Lire l'animation sélectionnée à rebours depuis la fin. (Maj + A)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Stop animation playback. (S)" msgstr "Arrêter la lecture de l'animation. (S)" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Play selected animation from start. (Shift+D)" msgstr "Lire l'animation sélectionnée depuis le début. (Maj + D)" @@ -3536,7 +2901,6 @@ msgid "Autoplay on Load" msgstr "Lecture automatique au chargement" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Edit Target Blend Times" msgstr "Modifier les temps de mélange des cibles" @@ -3558,16 +2922,14 @@ msgstr "Nom de l'animation :" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp #: editor/script_create_dialog.cpp msgid "Error!" msgstr "Erreur !" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Blend Times:" -msgstr "Temps de mélange" +msgstr "Temps de mélange :" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Next (Auto Queue):" @@ -3587,9 +2949,8 @@ msgid "New name:" msgstr "Nouveau nom :" #: editor/plugins/animation_tree_editor_plugin.cpp -#, fuzzy msgid "Edit Filters" -msgstr "Modifier les filtres de nÅ“ud" +msgstr "Editer les filtres" #: editor/plugins/animation_tree_editor_plugin.cpp #: editor/plugins/multimesh_editor_plugin.cpp @@ -3670,10 +3031,6 @@ msgid "Delete Input" msgstr "Supprimer l'entrée" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Rename" -msgstr "Renommer" - -#: editor/plugins/animation_tree_editor_plugin.cpp msgid "Animation tree is valid." msgstr "L'arbre d'animations est valide." @@ -3729,64 +3086,181 @@ msgstr "Modifier les filtres de nÅ“ud" msgid "Filters.." msgstr "Filtres…" -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing %d Triangles:" -msgstr "Analyse de %d triangles :" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Free" +msgstr "Libérer" -#: editor/plugins/baked_light_baker.cpp -msgid "Triangle #" -msgstr "Triangle #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Contents:" +msgstr "Contenu:" -#: editor/plugins/baked_light_baker.cpp -msgid "Light Baker Setup:" -msgstr "Paramètres du calculateur d'éclairage :" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "View Files" +msgstr "Voir Fichiers" -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing Geometry" -msgstr "Analyse de la géométrie" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve hostname:" +msgstr "Impossible de résoudre le nom de l'hôte:" -#: editor/plugins/baked_light_baker.cpp -msgid "Fixing Lights" -msgstr "Correction des lumières" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve." +msgstr "Impossible à résoudre." -#: editor/plugins/baked_light_baker.cpp -msgid "Making BVH" -msgstr "Création du BVH" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connection error, please try again." +msgstr "Erreur de connection, veuillez essayer à nouveau." -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Light Octree" -msgstr "Création de l'octree de lumière" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't connect." +msgstr "Connection impossible." -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Octree Texture" -msgstr "Création de la texture d'octree" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't connect to host:" +msgstr "Connection à l'hôte impossible:" -#: editor/plugins/baked_light_baker.cpp -msgid "Transfer to Lightmaps:" -msgstr "Transfert vers des lightmaps :" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response from host:" +msgstr "Pas de réponse de l'hôte:" -#: editor/plugins/baked_light_baker.cpp -msgid "Allocating Texture #" -msgstr "Allocation de la texture #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response." +msgstr "Pas de réponse." -#: editor/plugins/baked_light_baker.cpp -msgid "Baking Triangle #" -msgstr "Calcul de la texture #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, return code:" +msgstr "La requête a échoué, code retourné:" -#: editor/plugins/baked_light_baker.cpp -msgid "Post-Processing Texture #" -msgstr "Post-traitement de la texture #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Req. Failed." +msgstr "Req. a Échoué." -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Bake!" -msgstr "Calculer !" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, too many redirects" +msgstr "La requête a échoué, trop de redirections" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Redirect Loop." +msgstr "Boucle de Redirection." -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Reset the lightmap octree baking process (start over)." -msgstr "Remettre le processus de calcul de l'éclairage à zéro (recommencer)." +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed:" +msgstr "Échec:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Bad download hash, assuming file has been tampered with." +msgstr "Vérification du téléchargement échouée, le fichier a été altéré." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Expected:" +msgstr "Attendu:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Got:" +msgstr "A:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed sha256 hash check" +msgstr "Vérification de brouillage sha256 échouée" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Asset Download Error:" +msgstr "Erreur dans le téléchargement d'une ressource:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Fetching:" +msgstr "Récupération:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Resolving.." +msgstr "Résolution.." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connecting.." +msgstr "Connexion en cours.." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Requesting.." +msgstr "Envoi d'une requête.." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Error making request" +msgstr "Erreur lors de la requête" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Idle" +msgstr "Inactif" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Retry" +msgstr "Réessayer" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download Error" +msgstr "Erreur de téléchargement" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download for this asset is already in progress!" +msgstr "Le téléchargement de cette ressource est déjà en cours!" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "first" +msgstr "premier" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "prev" +msgstr "préc" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "next" +msgstr "suiv" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "last" +msgstr "dern" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "All" +msgstr "Tout" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Plugins" +msgstr "Extensions" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Sort:" +msgstr "Trier :" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Reverse" +msgstr "Inverser" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Category:" +msgstr "Catégorie :" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Site:" +msgstr "Site :" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Support.." +msgstr "Support…" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Official" +msgstr "Officiel" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Testing" +msgstr "En test" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Assets ZIP File" +msgstr "Fichier ZIP de données" #: editor/plugins/camera_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp msgid "Preview" msgstr "Aperçu" @@ -3829,12 +3303,18 @@ msgid "Edit CanvasItem" msgstr "Modifier le CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Change Anchors" +#, fuzzy +msgid "Anchors only" +msgstr "Ancre" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Change Anchors and Margins" msgstr "Modifier les ancres" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom (%):" -msgstr "Zoom (%) :" +msgid "Change Anchors" +msgstr "Modifier les ancres" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Paste Pose" @@ -3867,9 +3347,8 @@ msgid "Move Mode" msgstr "Mode déplacement" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate Mode" -msgstr "Mode rotation (E)" +msgstr "Mode rotation" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -3889,60 +3368,78 @@ msgid "Pan Mode" msgstr "Mode navigation" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Lock the selected object in place (can't be moved)." -msgstr "Verrouiller l'objet sélectionné (il ne pourra plus être déplacé)." +#, fuzzy +msgid "Toggles snapping" +msgstr "Placer un point d'arrêt" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Unlock the selected object (can be moved)." -msgstr "Déverouiller l'objet sélectionné (il pourra être déplacé de nouveau)." +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "Aligner sur la grille" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Makes sure the object's children are not selectable." -msgstr "Rendre la sélection des enfants de l'objet impossible." +#, fuzzy +msgid "Snapping options" +msgstr "Options d'animation" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Restores the object's children's ability to be selected." -msgstr "Rendre la sélection des enfants de l'objet de nouveau possible." +#, fuzzy +msgid "Snap to grid" +msgstr "Mode d'aimantation :" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp -#: editor/project_settings_editor.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Edit" -msgstr "Modifier" +msgid "Use Rotation Snap" +msgstr "Rotation alignée" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" -msgstr "Aligner sur la grille" +#, fuzzy +msgid "Configure Snap..." +msgstr "Configurer la grille…" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" -msgstr "Afficher la grille" +msgid "Snap Relative" +msgstr "Alignement relatif" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Rotation Snap" -msgstr "Rotation alignée" +msgid "Use Pixel Snap" +msgstr "Aligner au pixel près" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap Relative" -msgstr "Alignement relatif" +msgid "Smart snapping" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "Configurer la grille…" +#, fuzzy +msgid "Snap to parent" +msgstr "Étendre au parent" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Pixel Snap" -msgstr "Aligner au pixel près" +msgid "Snap to node anchor" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to node sides" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to other nodes" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Lock the selected object in place (can't be moved)." +msgstr "Verrouiller l'objet sélectionné (il ne pourra plus être déplacé)." + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Unlock the selected object (can be moved)." +msgstr "Déverouiller l'objet sélectionné (il pourra être déplacé de nouveau)." + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Makes sure the object's children are not selectable." +msgstr "Rendre la sélection des enfants de l'objet impossible." #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Skeleton.." -msgstr "Squelette…" +msgid "Restores the object's children's ability to be selected." +msgstr "Rendre la sélection des enfants de l'objet de nouveau possible." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Make Bones" @@ -3970,12 +3467,19 @@ msgid "View" msgstr "Affichage" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Reset" -msgstr "Réinitialiser le zoom" +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "Afficher la grille" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show helpers" +msgstr "Afficher les os" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Set.." -msgstr "Définir le zoom…" +#, fuzzy +msgid "Show rulers" +msgstr "Afficher les os" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -3986,8 +3490,9 @@ msgid "Frame Selection" msgstr "Cadrer la sélection" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Anchor" -msgstr "Ancre" +#, fuzzy +msgid "Layout" +msgstr "Enregistrer la disposition" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Keys" @@ -4010,48 +3515,60 @@ msgid "Clear Pose" msgstr "Vider la pose" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Set a Value" -msgstr "Définir une valeur" +msgid "Drag pivot from mouse position" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Set pivot at mouse position" +msgstr "Définir courbe hors position" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap (Pixels):" -msgstr "Aligner (pixels) :" +msgid "Multiply grid step by 2" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Divide grid step by 2" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Add %s" -msgstr "Tout ajouter" +msgstr "Ajouter %s" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Adding %s..." msgstr "Ajout de %s..." -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Create Node" msgstr "Créer un nÅ“ud" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Error instancing scene from %s" msgstr "Erreur d'instanciation de la scène depuis %s" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "OK :(" msgstr "OK :(" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "No parent to instance a child at." msgstr "Pas de parent dans lequel instancier l'enfant." -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "This operation requires a single selected node." msgstr "" "Cette opération ne peut être réalisée uniquement avec un seul nÅ“ud " "sélectionné." #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Change default type" -msgstr "Changer la valeur par défaut" +msgstr "Changer le type par défaut" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "" @@ -4061,45 +3578,6 @@ msgstr "" "Glisser-déposer + Maj : Ajouter un nÅ“ud frère\n" "Glisser-déposer + Alt : Modifier le type de nÅ“ud" -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Create Poly" -msgstr "Créer un polygone" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly" -msgstr "Modifier le polygone" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly (Remove Point)" -msgstr "Modifier le polygone (supprimer un point)" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Create a new polygon from scratch." -msgstr "Créer un nouveau polygone à partir de rien." - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -msgid "" -"Edit existing polygon:\n" -"LMB: Move Point.\n" -"Ctrl+LMB: Split Segment.\n" -"RMB: Erase Point." -msgstr "" - #: editor/plugins/collision_polygon_editor_plugin.cpp msgid "Create Poly3D" msgstr "Créer un Poly3D" @@ -4109,14 +3587,6 @@ msgid "Set Handle" msgstr "Définir la poignée" #: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Creating Mesh Library" -msgstr "Création de la bibliothèque de maillages" - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Thumbnail.." -msgstr "Aperçu…" - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Remove item %d?" msgstr "Supprimer l'objet %d ?" @@ -4139,57 +3609,70 @@ msgid "Update from Scene" msgstr "Mettre à jour depuis la scène" #: editor/plugins/curve_editor_plugin.cpp +msgid "Flat0" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Flat1" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp #, fuzzy -msgid "Modify Curve Point" -msgstr "Modifier la carte de courbes" +msgid "Ease in" +msgstr "Ease in" #: editor/plugins/curve_editor_plugin.cpp #, fuzzy +msgid "Ease out" +msgstr "Ease out" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Smoothstep" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Modify Curve Point" +msgstr "Modifier le point de courbe" + +#: editor/plugins/curve_editor_plugin.cpp msgid "Modify Curve Tangent" -msgstr "Modifier la carte de courbes" +msgstr "Modifier la tangente de courbes" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Load Curve Preset" -msgstr "Charger une ressource" +msgstr "Charger un pré-réglage de courbe" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Add point" -msgstr "Ajouter une entrée" +msgstr "Ajouter un point" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Remove point" -msgstr "Supprimer le chemin du point" +msgstr "Supprimer point" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Left linear" -msgstr "Linéaire" +msgstr "Linéaire gauche" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Right linear" -msgstr "Vue de droite" +msgstr "Linéaire droite" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Load preset" -msgstr "Charger une ressource" +msgstr "Charger prérèglage" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Remove Curve Point" -msgstr "Supprimer le chemin du point" +msgstr "Supprimer point de courbe" #: editor/plugins/curve_editor_plugin.cpp msgid "Toggle Curve Linear Tangent" -msgstr "" +msgstr "Basculer vers tangente linéaire de courbe" #: editor/plugins/curve_editor_plugin.cpp msgid "Hold Shift to edit tangents individually" -msgstr "" +msgstr "Maintenez l'appui sur Maj pour éditer les tangentes individuellement" #: editor/plugins/gradient_editor_plugin.cpp msgid "Add/Remove Color Ramp Point" @@ -4217,45 +3700,39 @@ msgid "" "No OccluderPolygon2D resource on this node.\n" "Create and assign one?" msgstr "" +"Aucune ressource OccluderPolygon2D sur ce nÅ“ud. En créer et en attribuer un ?" #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "Create Occluder Polygon" msgstr "Créer un polygone occulteur" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Edit existing polygon:" msgstr "Modifier un polygone existant :" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "LMB: Move Point." msgstr "Bouton gauche : déplacer un point." #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Ctrl+LMB: Split Segment." msgstr "Contrôle + Bouton gauche : séparer le segment." #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "RMB: Erase Point." msgstr "Bouton droit : effacer un point." #: editor/plugins/line_2d_editor_plugin.cpp -#, fuzzy msgid "Remove Point from Line2D" -msgstr "Supprimer le point d'une courbe" +msgstr "Supprimer point de Line2D" #: editor/plugins/line_2d_editor_plugin.cpp -#, fuzzy msgid "Add Point to Line2D" -msgstr "Ajouter un point à la courbe" +msgstr "Ajouter point à Line2D" #: editor/plugins/line_2d_editor_plugin.cpp -#, fuzzy msgid "Move Point in Line2D" -msgstr "Déplacer le point dans la courbe" +msgstr "Déplacer point de Line2D" #: editor/plugins/line_2d_editor_plugin.cpp #: editor/plugins/path_2d_editor_plugin.cpp @@ -4288,9 +3765,8 @@ msgid "Add Point (in empty space)" msgstr "Ajouter un point (dans un espace vide)" #: editor/plugins/line_2d_editor_plugin.cpp -#, fuzzy msgid "Split Segment (in line)" -msgstr "Diviser le segment (en courbe)" +msgstr "Diviser le segment (dans la ligne)" #: editor/plugins/line_2d_editor_plugin.cpp #: editor/plugins/path_2d_editor_plugin.cpp @@ -4344,6 +3820,10 @@ msgid "Create Outline" msgstr "Créer le contour" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh" +msgstr "Maillage" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Body" msgstr "Créer un corps statique Trimesh" @@ -4476,14 +3956,83 @@ msgstr "Échelle aléatoire :" msgid "Populate" msgstr "Peupler" +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Bake!" +msgstr "Calculer !" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +#, fuzzy +msgid "Bake the navigation mesh.\n" +msgstr "Créer un maillage de navigation" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +#, fuzzy +msgid "Clear the navigation mesh." +msgstr "Créer un maillage de navigation" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Setting up Configuration..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Calculating grid size..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Creating heightfield..." +msgstr "Création de l'octree de lumière" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Marking walkable triangles..." +msgstr "Chaînes traduisibles…" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Constructing compact heightfield..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Eroding walkable area..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Partioning..." +msgstr "Avertissement" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Creating contours..." +msgstr "Création de la texture d'octree" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Creating polymesh..." +msgstr "Créer un maillage de contour…" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Converting to native navigation mesh..." +msgstr "Créer un maillage de navigation" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Navigation Mesh Generator Setup:" +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Parsing Geometry..." +msgstr "Analyse de la géométrie" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Done!" +msgstr "" + #: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Create Navigation Polygon" msgstr "Créer Polygone de Navigation" -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Remove Poly And Point" -msgstr "Retirer Polygone et Point" - #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Clear Emission Mask" msgstr "Effacer Masque d'Émission" @@ -4496,6 +4045,7 @@ msgstr "Générer AABB" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Can only set point into a ParticlesMaterial process material" msgstr "" +"Ne peut définir qu'un point dans un matériau de processus ParticlesMaterial" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Error loading image:" @@ -4519,9 +4069,8 @@ msgstr "Charger Masque d'Émission" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "Particles" -msgstr "Vertex" +msgstr "Particules" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generated Point Count:" @@ -4533,9 +4082,8 @@ msgid "Generation Time (sec):" msgstr "Temps de Génération (sec):" #: editor/plugins/particles_2d_editor_plugin.cpp -#, fuzzy msgid "Emission Mask" -msgstr "Définir le masque d'émission" +msgstr "Masque d'émission" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Capture from Pixel" @@ -4554,14 +4102,12 @@ msgid "Node does not contain geometry (faces)." msgstr "NÅ“ud ne contient pas de géométrie (faces)." #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "A processor material of type 'ParticlesMaterial' is required." msgstr "Un matériel processeur de type 'ParticlesMaterial' est requis." #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "Faces contain no area!" -msgstr "Faces ne contiennent pas de zone!" +msgstr "Des faces ne contiennent pas de zone !" #: editor/plugins/particles_editor_plugin.cpp msgid "No faces!" @@ -4596,7 +4142,6 @@ msgid "Surface Points" msgstr "Points de Surface" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "Surface Points+Normal (Directed)" msgstr "Points de Surface+Normale (Dirigée)" @@ -4617,14 +4162,12 @@ msgid "Remove Point from Curve" msgstr "Supprimer Point de la Courbe" #: editor/plugins/path_2d_editor_plugin.cpp -#, fuzzy msgid "Remove Out-Control from Curve" -msgstr "Supprimer le point d'une courbe" +msgstr "Supprimer Out-Control d'une courbe" #: editor/plugins/path_2d_editor_plugin.cpp -#, fuzzy msgid "Remove In-Control from Curve" -msgstr "Supprimer le point d'une courbe" +msgstr "Supprimer In-Control d'une courbe" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp @@ -4637,11 +4180,11 @@ msgstr "Déplacer le point dans la courbe" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Move In-Control in Curve" -msgstr "" +msgstr "Déplacer In-Control dans courbe" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Move Out-Control in Curve" -msgstr "" +msgstr "Déplacer Out-Control dans courbe" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Select Control Points (Shift+Drag)" @@ -4662,16 +4205,19 @@ msgid "Curve Point #" msgstr "Point de courbe #" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Point Pos" +#, fuzzy +msgid "Set Curve Point Position" msgstr "Définir la position du point de la courbe" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve In Pos" -msgstr "" +#, fuzzy +msgid "Set Curve In Position" +msgstr "Définir courbe en position" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Out Pos" -msgstr "" +#, fuzzy +msgid "Set Curve Out Position" +msgstr "Définir courbe hors position" #: editor/plugins/path_editor_plugin.cpp msgid "Split Path" @@ -4682,14 +4228,12 @@ msgid "Remove Path Point" msgstr "Supprimer le chemin du point" #: editor/plugins/path_editor_plugin.cpp -#, fuzzy msgid "Remove Out-Control Point" -msgstr "Supprimer le chemin du point" +msgstr "Supprimer point Out-Control" #: editor/plugins/path_editor_plugin.cpp -#, fuzzy msgid "Remove In-Control Point" -msgstr "Supprimer le chemin du point" +msgstr "Supprimer point In-Control" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Create UV Map" @@ -4732,6 +4276,14 @@ msgid "Scale Polygon" msgstr "Mettre à l'échelle le polygone" #: editor/plugins/polygon_2d_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit" +msgstr "Modifier" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon->UV" msgstr "Polygone -> UV" @@ -4786,73 +4338,19 @@ msgstr "Charger une ressource" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "Coller" -#: editor/plugins/rich_text_editor_plugin.cpp -msgid "Parse BBCode" -msgstr "Analyser le BBCode" - -#: editor/plugins/sample_editor_plugin.cpp -msgid "Length:" -msgstr "Longueur :" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Open Sample File(s)" -msgstr "Ouvrir un ou des fichiers d'échantillons" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "ERROR: Couldn't load sample!" -msgstr "ERREUR : Impossible de charger l'échantillon !" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Add Sample" -msgstr "Ajouter un échantillon" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Rename Sample" -msgstr "Renommer l'échantillon" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Delete Sample" -msgstr "Supprimer l'échantillon" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "16 Bits" -msgstr "16 bits" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "8 Bits" -msgstr "8 bits" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Stereo" -msgstr "Stéréo" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Mono" -msgstr "Mono" - -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/script_editor_debugger.cpp -msgid "Format" -msgstr "Format" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Pitch" -msgstr "Hauteur" - #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Clear Recent Files" -msgstr "Effacer les os" +msgstr "Effacer les fichiers récents" #: editor/plugins/script_editor_plugin.cpp msgid "" "Close and save changes?\n" "\"" -msgstr "" +msgstr "Quitter et sauvegarder les modifications?" #: editor/plugins/script_editor_plugin.cpp msgid "Error while saving theme" @@ -4880,7 +4378,7 @@ msgstr "Enregistrer le thème sous…" #: editor/plugins/script_editor_plugin.cpp msgid " Class Reference" -msgstr "" +msgstr " Référence de classe" #: editor/plugins/script_editor_plugin.cpp msgid "Next script" @@ -4903,7 +4401,6 @@ msgid "Save All" msgstr "Tout enregistrer" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Soft Reload Script" msgstr "Recharger le script (mode doux)" @@ -4935,10 +4432,13 @@ msgstr "Fermer les documentations" msgid "Close All" msgstr "Fermer tout" +#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp +msgid "Run" +msgstr "Lancer" + #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Toggle Scripts Panel" -msgstr "Basculer le favori" +msgstr "Basculer vers le panneau de scripts" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -4973,26 +4473,12 @@ msgid "Keep Debugger Open" msgstr "Garder le débogueur ouvert" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Debug with external editor" -msgstr "Ouvrir dans l'éditeur" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Window" -msgstr "Fenêtre" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Left" -msgstr "Aller à gauche" +msgstr "Deboguer avec un éditeur externe" #: editor/plugins/script_editor_plugin.cpp -msgid "Move Right" -msgstr "Aller à droite" - -#: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Open Godot online documentation" -msgstr "Chercher dans la documentation de référence." +msgstr "Ouvrir la documentation Godot en ligne" #: editor/plugins/script_editor_plugin.cpp msgid "Search the class hierarchy." @@ -5011,9 +4497,8 @@ msgid "Go to next edited document." msgstr "Aller au document modifié suivant." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Discard" -msgstr "Discret" +msgstr "Abandonner" #: editor/plugins/script_editor_plugin.cpp msgid "Create Script" @@ -5048,28 +4533,27 @@ msgstr "" #: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." -msgstr "" +msgstr "Seules les ressources du système de fichiers peuvent être abaissées." #: editor/plugins/script_text_editor.cpp msgid "Pick Color" msgstr "Prélever une couleur" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Convert Case" -msgstr "Conversion des images" +msgstr "Cas de conversion" #: editor/plugins/script_text_editor.cpp msgid "Uppercase" -msgstr "" +msgstr "Majuscule" #: editor/plugins/script_text_editor.cpp msgid "Lowercase" -msgstr "" +msgstr "Minuscule" #: editor/plugins/script_text_editor.cpp msgid "Capitalize" -msgstr "" +msgstr "Capitaliser" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp @@ -5079,7 +4563,7 @@ msgstr "Couper" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Copy" msgstr "Copier" @@ -5098,9 +4582,8 @@ msgid "Move Down" msgstr "Déplacer vers le bas" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Delete Line" -msgstr "Supprimer le point" +msgstr "Supprimer ligne" #: editor/plugins/script_text_editor.cpp msgid "Indent Left" @@ -5128,11 +4611,11 @@ msgstr "Supprimer les espaces de fin de ligne" #: editor/plugins/script_text_editor.cpp msgid "Convert Indent To Spaces" -msgstr "" +msgstr "Convertir indentations en espaces" #: editor/plugins/script_text_editor.cpp msgid "Convert Indent To Tabs" -msgstr "" +msgstr "Convertir indentations en espaces" #: editor/plugins/script_text_editor.cpp msgid "Auto Indent" @@ -5156,14 +4639,12 @@ msgid "Goto Previous Breakpoint" msgstr "Aller au point d'arrêt précédent" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Convert To Uppercase" -msgstr "Convertir vers…" +msgstr "Convertir en majuscule" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Convert To Lowercase" -msgstr "Convertir vers…" +msgstr "Convertir en minuscule" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp @@ -5190,7 +4671,7 @@ msgstr "Aide contextuelle" #: editor/plugins/shader_editor_plugin.cpp msgid "Shader" -msgstr "" +msgstr "Shader" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Scalar Constant" @@ -5234,15 +4715,15 @@ msgstr "Modifier une fonction vecteur" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Scalar Uniform" -msgstr "" +msgstr "Modifier échelle" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Vec Uniform" -msgstr "" +msgstr "Modifier vecteur" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change RGB Uniform" -msgstr "" +msgstr "Modifier RGB" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Default Value" @@ -5250,15 +4731,15 @@ msgstr "Changer la valeur par défaut" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change XForm Uniform" -msgstr "" +msgstr "Modifier XForm" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Texture Uniform" -msgstr "" +msgstr "Modifier texture" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Cubemap Uniform" -msgstr "" +msgstr "Modifier Cubemap" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Comment" @@ -5345,10 +4826,6 @@ msgid "View Plane Transform." msgstr "Transformation du plan de vue." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Scaling to %s%%." -msgstr "Mise à l'échelle %s%%." - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." msgstr "Rotation de %s degrés." @@ -5365,10 +4842,6 @@ msgid "Top View." msgstr "Vue de dessus." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Top" -msgstr "Dessus" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "Vue arrière." @@ -5410,29 +4883,25 @@ msgstr "Clé d'animation insérée." #: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" -msgstr "" +msgstr "Objets dessinés" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Material Changes" -msgstr "Repeindre quand modifié" +msgstr "Modifications de materiau" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Shader Changes" -msgstr "Repeindre quand modifié" +msgstr "Modification de shader" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Surface Changes" -msgstr "Repeindre quand modifié" +msgstr "Modifications de surface" #: editor/plugins/spatial_editor_plugin.cpp msgid "Draw Calls" -msgstr "" +msgstr "Appels de graphes" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Vertices" msgstr "Vertex" @@ -5453,66 +4922,58 @@ msgid "Display Overdraw" msgstr "Affichage des surimpressions" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Display Unshaded" -msgstr "Affichage sans ombrage" +msgstr "Afficher sans ombrage" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "View Environment" -msgstr "Environnement" +msgstr "Voir environnement" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "View Gizmos" -msgstr "Gizmos" +msgstr "Voir les gadgets" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Information" -msgstr "" +msgstr "Voir information" #: editor/plugins/spatial_editor_plugin.cpp msgid "Audio Listener" msgstr "Écouteur audio" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Doppler Enable" -msgstr "Activer" +msgstr "Activer Doppler" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Left" -msgstr "" +msgstr "Vue libre gauche" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Right" -msgstr "" +msgstr "Vue libre droite" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Freelook Forward" -msgstr "Avancer" +msgstr "Vue libre de devant" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Freelook Backwards" -msgstr "À l'envers" +msgstr "Vue libre de derrière" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Up" -msgstr "" +msgstr "Vue libre de dessus" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Freelook Down" -msgstr "Molette vers le bas." +msgstr "Vue libre de dessous" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Speed Modifier" -msgstr "" +msgstr "Modificateur de vitesse de la vue libre" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "preview" msgstr "Aperçu" @@ -5521,17 +4982,18 @@ msgid "XForm Dialog" msgstr "Dialogue XForm" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Select Mode (Q)\n" -msgstr "Sélectionner le mode" +msgstr "Sélectionner le mode (Q)\n" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "" "Drag: Rotate\n" "Alt+Drag: Move\n" "Alt+RMB: Depth list selection" -msgstr "Alt + Bouton droit : sélection détaillée par liste" +msgstr "" +"Glisser : Rotation\n" +"ALt+glisser : Déplacer\n" +"Alt + Bouton droit : sélection détaillée par liste" #: editor/plugins/spatial_editor_plugin.cpp msgid "Move Mode (W)" @@ -5590,30 +5052,30 @@ msgid "Align Selection With View" msgstr "Aligner la sélection avec la vue" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Tool Select" -msgstr "Sélectionner" +msgstr "Outil sélection" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Tool Move" -msgstr "Déplacer" +msgstr "Outil déplacement" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Tool Rotate" -msgstr "Contrôle: Tourner" +msgstr "Outil rotation" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Tool Scale" -msgstr "Échelle :" +msgstr "Outil échelle" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform" msgstr "Transformation" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Configure Snap.." +msgstr "Configurer la grille…" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Local Coords" msgstr "Coordonnées locales" @@ -5731,7 +5193,6 @@ msgid "Resource clipboard is empty or not a texture!" msgstr "Le presse-papiers des ressources est vide ou n'est pas une texture !" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Paste Frame" msgstr "Coller Frame" @@ -5760,6 +5221,10 @@ msgid "Speed (FPS):" msgstr "Vitesse (FPS) :" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Loop" +msgstr "Boucle" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animation Frames" msgstr "Trames d'animation" @@ -5772,21 +5237,22 @@ msgid "Insert Empty (After)" msgstr "Insérer vide (après)" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Up" -msgstr "Haut" +#, fuzzy +msgid "Move (Before)" +msgstr "Déplacer le(s) nÅ“ud(s)" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Down" -msgstr "Bas" +#, fuzzy +msgid "Move (After)" +msgstr "Aller à gauche" #: editor/plugins/style_box_editor_plugin.cpp msgid "StyleBox Preview:" msgstr "Aperçu de la StyleBox :" #: editor/plugins/texture_region_editor_plugin.cpp -#, fuzzy msgid "Set Region Rect" -msgstr "Région de texture" +msgstr "Définir région rectangulaire" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Snap Mode:" @@ -5813,7 +5279,6 @@ msgid "Offset:" msgstr "Décalage :" #: editor/plugins/texture_region_editor_plugin.cpp -#, fuzzy msgid "Step:" msgstr "Pas (s) :" @@ -5847,14 +5312,12 @@ msgid "Remove Item" msgstr "Supprimer l'item" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All Items" -msgstr "Supprimer des items de classe" +msgstr "Supprimer tous" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All" -msgstr "Supprimer" +msgstr "Supprimer tout" #: editor/plugins/theme_editor_plugin.cpp msgid "Theme" @@ -5942,11 +5405,14 @@ msgid "Style" msgstr "Style" #: editor/plugins/theme_editor_plugin.cpp +msgid "Font" +msgstr "Police" + +#: editor/plugins/theme_editor_plugin.cpp msgid "Color" msgstr "Couleur" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Erase Selection" msgstr "Supprimer la sélection" @@ -5955,18 +5421,16 @@ msgid "Paint TileMap" msgstr "Peindre sur la TileMap" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Line Draw" -msgstr "Linéaire" +msgstr "Dessin de ligne" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Rectangle Paint" -msgstr "" +msgstr "Peinture de rectangle" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Bucket Fill" -msgstr "Seau" +msgstr "Remplissage du seau" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Erase TileMap" @@ -5993,8 +5457,9 @@ msgid "Mirror Y" msgstr "Miroir Y" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Bucket" -msgstr "Seau" +#, fuzzy +msgid "Paint Tile" +msgstr "Peindre sur la TileMap" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Pick Tile" @@ -6045,24 +5510,25 @@ msgid "Error" msgstr "Erreur" #: editor/project_export.cpp -#, fuzzy msgid "Runnable" -msgstr "Activer" +msgstr "Activable" #: editor/project_export.cpp -#, fuzzy msgid "Delete patch '" -msgstr "Supprimer l'entrée" +msgstr "Supprimer patch" #: editor/project_export.cpp -#, fuzzy msgid "Delete preset '%s'?" -msgstr "Supprimer les fichiers sélectionnés ?" +msgstr "Supprimer pré-réglage '%s' ?" #: editor/project_export.cpp #, fuzzy +msgid "Export templates for this platform are missing/corrupted: " +msgstr "Modèles d'exportation manquants pour cette plateforme :" + +#: editor/project_export.cpp msgid "Presets" -msgstr "Pré-réglage…" +msgstr "Pré-réglages" #: editor/project_export.cpp editor/project_settings_editor.cpp msgid "Add.." @@ -6073,68 +5539,58 @@ msgid "Resources" msgstr "Ressources" #: editor/project_export.cpp -#, fuzzy msgid "Export all resources in the project" -msgstr "Exporter toutes les ressources dans le projet." +msgstr "Exporter toutes les ressources dans le projet" #: editor/project_export.cpp -#, fuzzy msgid "Export selected scenes (and dependencies)" -msgstr "Exporter les ressources sélectionnées (y compris les dépendences)." +msgstr "Exporter les scènes sélectionnées (y compris les dépendences)" #: editor/project_export.cpp -#, fuzzy msgid "Export selected resources (and dependencies)" -msgstr "Exporter les ressources sélectionnées (y compris les dépendences)." +msgstr "Exporter les ressources sélectionnées (y compris les dépendences)" #: editor/project_export.cpp msgid "Export Mode:" msgstr "Mode d'exportation :" #: editor/project_export.cpp -#, fuzzy msgid "Resources to export:" msgstr "Ressources à exporter :" #: editor/project_export.cpp -#, fuzzy msgid "" "Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" msgstr "" -"Filtres à utiliser pour l'exportation des fichiers (séparés par des " -"virgules, par exemple : *.json, *.txt) :" +"Filtres d'export de fichiers non ressources (séparés par des virgules, par " +"exemple : *.json, *.txt) :" #: editor/project_export.cpp -#, fuzzy msgid "" "Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" msgstr "" -"Filtres à utiliser pour exclure des fichiers (séparés par des virgules, par " +"Filtres pour exclure des fichiers du projet (séparés par des virgules, par " "exemple: *.json, *.txt) :" #: editor/project_export.cpp -#, fuzzy msgid "Patches" -msgstr "Correspondances :" +msgstr "Patches" #: editor/project_export.cpp -#, fuzzy msgid "Make Patch" -msgstr "Chemin de destination :" +msgstr "Conçevoir un patch" #: editor/project_export.cpp -#, fuzzy msgid "Features" -msgstr "Texture" +msgstr "Fonctionnalités" #: editor/project_export.cpp msgid "Custom (comma-separated):" -msgstr "" +msgstr "Personnalisé (séparé par des virgules) :" #: editor/project_export.cpp -#, fuzzy msgid "Feature List:" -msgstr "Liste des méthodes :" +msgstr "Liste des fonctionnalités :" #: editor/project_export.cpp msgid "Export PCK/Zip" @@ -6142,82 +5598,115 @@ msgstr "Exporter le PCK/ZIP" #: editor/project_export.cpp msgid "Export templates for this platform are missing:" -msgstr "" +msgstr "Modèles d'exportation manquants pour cette plateforme :" #: editor/project_export.cpp #, fuzzy +msgid "Export templates for this platform are missing/corrupted:" +msgstr "Modèles d'exportation manquants pour cette plateforme :" + +#: editor/project_export.cpp msgid "Export With Debug" -msgstr "Exporter un ensemble de tuiles" +msgstr "Exporter avec debug" #: editor/project_manager.cpp -msgid "Invalid project path, the path must exist!" -msgstr "Chemin de projet invalide, le chemin doit exister !" +#, fuzzy +msgid "The path does not exists." +msgstr "Le fichier n'existe pas." #: editor/project_manager.cpp #, fuzzy -msgid "Invalid project path, project.godot must not exist." -msgstr "Chemin de projet invalide, engine.cfg ne doit pas exister." +msgid "Please choose a 'project.godot' file." +msgstr "Veuillez exporter en dehors du dossier du projet !" #: editor/project_manager.cpp -#, fuzzy -msgid "Invalid project path, project.godot must exist." -msgstr "Chemin de projet invalide, engine.cfg doit exister." +msgid "" +"Your project will be created in a non empty folder (you might want to create " +"a new folder)." +msgstr "" + +#: editor/project_manager.cpp +msgid "Please choose a folder that does not contain a 'project.godot' file." +msgstr "" #: editor/project_manager.cpp msgid "Imported Project" msgstr "Projet importé" #: editor/project_manager.cpp +msgid " " +msgstr "" + +#: editor/project_manager.cpp +msgid "It would be a good idea to name your project." +msgstr "" + +#: editor/project_manager.cpp msgid "Invalid project path (changed anything?)." msgstr "Chemin de projet non valide (avez-vous changé quelque chose ?)." #: editor/project_manager.cpp #, fuzzy -msgid "Couldn't create project.godot in project path." -msgstr "" -"Impossible de créer le fichier engine.cfg dans le répertoire du projet." +msgid "Couldn't get project.godot in project path." +msgstr "Impossible de créer le fichier project.godot dans le chemin du projet." #: editor/project_manager.cpp #, fuzzy +msgid "Couldn't edit project.godot in project path." +msgstr "Impossible de créer le fichier project.godot dans le chemin du projet." + +#: editor/project_manager.cpp +msgid "Couldn't create project.godot in project path." +msgstr "Impossible de créer le fichier project.godot dans le chemin du projet." + +#: editor/project_manager.cpp msgid "The following files failed extraction from package:" -msgstr "" -"Les fichiers suivants sont plus récents sur le disque.\n" -"Quelle action doit être prise ? :" +msgstr "L'extraction des fichiers suivants a échoué depuis le paquetage :" + +#: editor/project_manager.cpp +#, fuzzy +msgid "Rename Project" +msgstr "Projet sans titre" + +#: editor/project_manager.cpp +#, fuzzy +msgid "Couldn't get project.godot in the project path." +msgstr "Impossible de créer le fichier project.godot dans le chemin du projet." + +#: editor/project_manager.cpp +msgid "New Game Project" +msgstr "Nouveau projet de jeu" #: editor/project_manager.cpp msgid "Import Existing Project" msgstr "Importer un projet existant" #: editor/project_manager.cpp -msgid "Project Path (Must Exist):" -msgstr "Chemin du projet (doit exister) :" +msgid "Create New Project" +msgstr "Créer un nouveau projet" + +#: editor/project_manager.cpp +msgid "Install Project:" +msgstr "Installer projet :" #: editor/project_manager.cpp msgid "Project Name:" msgstr "Nom du projet :" #: editor/project_manager.cpp -msgid "Create New Project" -msgstr "Créer un nouveau projet" +#, fuzzy +msgid "Create folder" +msgstr "Créer un dossier" #: editor/project_manager.cpp msgid "Project Path:" msgstr "Chemin du projet :" #: editor/project_manager.cpp -#, fuzzy -msgid "Install Project:" -msgstr "Projets récents :" - -#: editor/project_manager.cpp msgid "Browse" msgstr "Parcourir" #: editor/project_manager.cpp -msgid "New Game Project" -msgstr "Nouveau projet de jeu" - -#: editor/project_manager.cpp msgid "That's a BINGO!" msgstr "C'est un BINGO !" @@ -6227,28 +5716,32 @@ msgstr "Projet sans titre" #: editor/project_manager.cpp #, fuzzy +msgid "Can't open project" +msgstr "Impossible de lancer le projet" + +#: editor/project_manager.cpp msgid "Are you sure to open more than one project?" msgstr "Voulez-vous vraiment ouvrir plus d'un projet à la fois ?" #: editor/project_manager.cpp -#, fuzzy msgid "" "Can't run project: no main scene defined.\n" "Please edit the project and set the main scene 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 la modifier ultérieurement dans les « Paramètres du projet » " -"dans la catégorie « application »." +"Impossible de lancer le projet : Pas de scène principale définie\n" +"Veuillez éditer le projet et définir la scène principale dans \"Paramètres " +"du projet\" sous la catégorie \"Application\"." #: editor/project_manager.cpp msgid "" "Can't run project: Assets need to be imported.\n" "Please edit the project to trigger the initial import." msgstr "" +"Impossible d'exécuter le projet: Des ressources doivent être importées. \n" +"Veuillez éditer le projet pour déclencher l'importation initiale." #: editor/project_manager.cpp -#, fuzzy msgid "Are you sure to run more than one project?" msgstr "Voulez-vous vraiment lancer plus d'un projet à la fois ?" @@ -6270,10 +5763,6 @@ msgid "Project List" msgstr "Liste des projets" #: editor/project_manager.cpp -msgid "Run" -msgstr "Lancer" - -#: editor/project_manager.cpp msgid "Scan" msgstr "Scanner" @@ -6286,18 +5775,16 @@ msgid "New Project" msgstr "Nouveau projet" #: editor/project_manager.cpp -#, fuzzy msgid "Templates" -msgstr "Supprimer l'item" +msgstr "Modèles" #: editor/project_manager.cpp msgid "Exit" msgstr "Quitter" #: editor/project_manager.cpp -#, fuzzy msgid "Can't run project" -msgstr "Connection impossible." +msgstr "Impossible de lancer le projet" #: editor/project_settings_editor.cpp msgid "Key " @@ -6332,17 +5819,14 @@ msgid "Add Input Action Event" msgstr "Ajouter un événement d'action d'entrée" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Meta+" msgstr "Méta+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Shift+" msgstr "Maj+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Alt+" msgstr "Alt+" @@ -6400,18 +5884,16 @@ msgid "Change" msgstr "Changer" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Joypad Axis Index:" -msgstr "Index de l'axe du joystick :" +msgstr "Index de l'axe de la manette de jeu :" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Axis" msgstr "Axe" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Joypad Button Index:" -msgstr "Index du bouton du joystick :" +msgstr "Index de bouton de la manette de jeu :" #: editor/project_settings_editor.cpp msgid "Add Input Action" @@ -6422,61 +5904,67 @@ msgid "Erase Input Action Event" msgstr "Effacer l'événement d'action d'entrée" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Add Event" -msgstr "Ajouter vide" +msgstr "Ajouter évènement" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Device" msgstr "Périphérique" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Button" msgstr "Bouton" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Left Button." msgstr "Bouton gauche." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Right Button." msgstr "Bouton droite." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Middle Button." msgstr "Bouton du milieu." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Up." msgstr "Molette vers le haut." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Down." msgstr "Molette vers le bas." #: editor/project_settings_editor.cpp -#, fuzzy msgid "Add Global Property" -msgstr "Ajouter une propriété accesseur" +msgstr "Ajouter une propriété globale" #: editor/project_settings_editor.cpp -msgid "Select an setting item first!" -msgstr "" +#, fuzzy +msgid "Select a setting item first!" +msgstr "Choisissez d'abord un élément de réglage !" #: editor/project_settings_editor.cpp -#, fuzzy msgid "No property '" -msgstr "Propriété :" +msgstr "Pas de propriété" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Setting '" -msgstr "Paramètres" +msgstr "Paramètre" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Delete Item" -msgstr "Supprimer l'entrée" +msgstr "Supprimer élément" + +#: editor/project_settings_editor.cpp +#, fuzzy +msgid "Can't contain '/' or ':'" +msgstr "Connection à l'hôte impossible:" + +#: editor/project_settings_editor.cpp +#, fuzzy +msgid "Already existing" +msgstr "Mode persistant" #: editor/project_settings_editor.cpp msgid "Error saving settings." @@ -6488,7 +5976,7 @@ msgstr "Paramètres enregistrés avec succès." #: editor/project_settings_editor.cpp msgid "Override for Feature" -msgstr "" +msgstr "Remplacement de fonctionnalité" #: editor/project_settings_editor.cpp msgid "Add Translation" @@ -6504,24 +5992,23 @@ msgstr "Ajouter un chemin remappé" #: editor/project_settings_editor.cpp msgid "Resource Remap Add Remap" -msgstr "" +msgstr "Remap de ressources ajout de remap" #: editor/project_settings_editor.cpp msgid "Change Resource Remap Language" -msgstr "" +msgstr "Modifier language de remap de ressource" #: editor/project_settings_editor.cpp msgid "Remove Resource Remap" -msgstr "" +msgstr "Supprimer remap de ressource" #: editor/project_settings_editor.cpp msgid "Remove Resource Remap Option" -msgstr "" +msgstr "Supprimer option de remap de ressource" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Project Settings (project.godot)" -msgstr "Paramètres du projet (engine.cfg)" +msgstr "Paramètres du projet (project.godot)" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "General" @@ -6533,7 +6020,7 @@ msgstr "Propriété :" #: editor/project_settings_editor.cpp msgid "Override For.." -msgstr "" +msgstr "Remplacement pour.." #: editor/project_settings_editor.cpp msgid "Input Map" @@ -6584,9 +6071,8 @@ msgid "AutoLoad" msgstr "AutoLoad" #: editor/property_editor.cpp -#, fuzzy msgid "Pick a Viewport" -msgstr "1 vue" +msgstr "Choisissez un viewport" #: editor/property_editor.cpp msgid "Ease In" @@ -6621,7 +6107,6 @@ msgid "Assign" msgstr "Assigner" #: editor/property_editor.cpp -#, fuzzy msgid "Select Node" msgstr "Sélectionner un nÅ“ud" @@ -6631,22 +6116,29 @@ msgstr "Nouveau script" #: editor/property_editor.cpp #, fuzzy +msgid "Make Unique" +msgstr "Créer les os" + +#: editor/property_editor.cpp msgid "Show in File System" -msgstr "Système de fichiers" +msgstr "Montrer dans le système de fichiers" + +#: editor/property_editor.cpp +#, fuzzy +msgid "Convert To %s" +msgstr "Convertir vers…" #: editor/property_editor.cpp msgid "Error loading file: Not a resource!" msgstr "Erreur de chargement du fichier : ce n'est pas une ressource !" #: editor/property_editor.cpp -#, fuzzy msgid "Selected node is not a Viewport!" -msgstr "Sélectionner les nÅ“uds à importer" +msgstr "Le noeud sélectionné n'est pas un viewport !" #: editor/property_editor.cpp -#, fuzzy msgid "Pick a Node" -msgstr "Sélectionner un nÅ“ud" +msgstr "Choisissez un nÅ“ud" #: editor/property_editor.cpp msgid "Bit %d, val %d." @@ -6673,6 +6165,11 @@ msgid "Select Property" msgstr "Sélectionnez une propriété" #: editor/property_selector.cpp +#, fuzzy +msgid "Select Virtual Method" +msgstr "Sélectionner une méthode" + +#: editor/property_selector.cpp msgid "Select Method" msgstr "Sélectionner une méthode" @@ -6701,26 +6198,6 @@ msgstr "Conserver la transformation globale" msgid "Reparent" msgstr "Re-parenter" -#: editor/resources_dock.cpp -msgid "Create New Resource" -msgstr "Créer une nouvelle ressource" - -#: editor/resources_dock.cpp -msgid "Open Resource" -msgstr "Ouvrir la ressource" - -#: editor/resources_dock.cpp -msgid "Save Resource" -msgstr "Enregistrer la ressource" - -#: editor/resources_dock.cpp -msgid "Resource Tools" -msgstr "Outils des ressources" - -#: editor/resources_dock.cpp -msgid "Make Local" -msgstr "Rendre local" - #: editor/run_settings_dialog.cpp msgid "Run Mode:" msgstr "Mode d'exécution :" @@ -6792,7 +6269,7 @@ msgstr "Supprimer le(s) nÅ“ud(s) ?" #: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." -msgstr "" +msgstr "Ne peut fonctionner avec le noeud racine." #: editor/scene_tree_dock.cpp msgid "This operation can't be done on instanced scenes." @@ -6847,17 +6324,8 @@ msgid "Error duplicating scene to save it." msgstr "Erreur de duplication de la scène afin de l'enregistrer." #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Sub-Resources:" -msgstr "Ressources :" - -#: editor/scene_tree_dock.cpp -msgid "Edit Groups" -msgstr "Modifier les groupes" - -#: editor/scene_tree_dock.cpp -msgid "Edit Connections" -msgstr "Modifier les connexions" +msgstr "Ressources secondaires :" #: editor/scene_tree_dock.cpp msgid "Clear Inheritance" @@ -6884,9 +6352,8 @@ msgid "Change Type" msgstr "Changer le type" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Attach Script" -msgstr "Ajouter un script" +msgstr "Attacher un script" #: editor/scene_tree_dock.cpp msgid "Clear Script" @@ -6901,9 +6368,8 @@ msgid "Save Branch as Scene" msgstr "Sauvegarder la branche comme scène" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Copy Node Path" -msgstr "Copier le chemin" +msgstr "Copier le chemin du noeud" #: editor/scene_tree_dock.cpp msgid "Delete (No Confirm)" @@ -6922,19 +6388,17 @@ msgstr "" "nÅ“ud racine n'existe." #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Filter nodes" -msgstr "Filtres" +msgstr "Filtrer les noeuds" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Attach a new or existing script for the selected node." -msgstr "Créer un nouveau script pour le nÅ“ud sélectionné." +msgstr "" +"Attacher un nouveau script ou un script existant pour le nÅ“ud sélectionné ." #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Clear a script for the selected node." -msgstr "Créer un nouveau script pour le nÅ“ud sélectionné." +msgstr "Effacer un script pour le nÅ“ud sélectionné." #: editor/scene_tree_dock.cpp msgid "Clear Inheritance? (No Undo!)" @@ -6954,51 +6418,59 @@ msgstr "Afficher/cacher le CanvasItem" #: editor/scene_tree_editor.cpp msgid "Node configuration warning:" -msgstr "" +msgstr "Avertissement de configuration de noeud :" #: editor/scene_tree_editor.cpp msgid "" "Node has connection(s) and group(s)\n" "Click to show signals dock." msgstr "" +"Le noeud possède une (des) connection(s) et un (des) groupe(s)\n" +"Cliquez pour montrer l'arrimage de signaux." #: editor/scene_tree_editor.cpp msgid "" "Node has connections.\n" "Click to show signals dock." msgstr "" +"Le noeud possède des connections.\n" +"Cliquez pour montrer l'arrimage de signaux." #: editor/scene_tree_editor.cpp msgid "" "Node is in group(s).\n" "Click to show groups dock." msgstr "" +"Le noeud fait partie d'un (de) groupe(s).\n" +"Cliquez pour montrer l'arrimage de goupes." #: editor/scene_tree_editor.cpp msgid "Instance:" msgstr "Instance :" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "Open script" -msgstr "Script suivant" +msgstr "Ouvrir script" #: editor/scene_tree_editor.cpp msgid "" "Node is locked.\n" "Click to unlock" msgstr "" +"Noeud verouillé.\n" +"Cliquez pour dévérouiller" #: editor/scene_tree_editor.cpp msgid "" "Children are not selectable.\n" "Click to make selectable" msgstr "" +"Enfants non séléctionnable.\n" +"Cliquez pour les rendre sélectionnable" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "Toggle Visibility" -msgstr "Afficher/cacher le Spatial" +msgstr "Basculer visibilité" #: editor/scene_tree_editor.cpp msgid "Invalid node name, the following characters are not allowed:" @@ -7014,26 +6486,23 @@ msgstr "Arbre de scène (nÅ“uds) :" #: editor/scene_tree_editor.cpp msgid "Node Configuration Warning!" -msgstr "" +msgstr "Avertissement de configuration de noeud !" #: editor/scene_tree_editor.cpp msgid "Select a Node" msgstr "Sélectionner un nÅ“ud" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Error loading template '%s'" -msgstr "Erreur de chargement d'image :" +msgstr "Erreur de chargement de modèle '%s'" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Error - Could not create script in filesystem." -msgstr "Impossible de créer le script dans le système de fichiers." +msgstr "Erreur - Impossible de créer le script dans le système de fichiers." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Error loading script from %s" -msgstr "Erreur de chargement de la scène depuis %s" +msgstr "Erreur de chargement de script depuis %s" #: editor/script_create_dialog.cpp msgid "N/A" @@ -7052,74 +6521,77 @@ msgid "Invalid base path" msgstr "Chemin de base invalide" #: editor/script_create_dialog.cpp +msgid "Directory of the same name exists" +msgstr "" + +#: editor/script_create_dialog.cpp +#, fuzzy +msgid "File exists, will be reused" +msgstr "Le fichier existe, l'écraser ?" + +#: editor/script_create_dialog.cpp msgid "Invalid extension" msgstr "Extension invalide" #: editor/script_create_dialog.cpp msgid "Wrong extension chosen" -msgstr "" +msgstr "Choix d'extension erroné" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Invalid Path" -msgstr "Chemin invalide." +msgstr "Chemin invalide" #: editor/script_create_dialog.cpp msgid "Invalid class name" msgstr "Nom de classe invalide" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Invalid inherited parent name or path" -msgstr "Indice de nom de propriété invalide." +msgstr "Nom ou chemin parent hérité invalide" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Script valid" -msgstr "Script" +msgstr "Script valide" #: editor/script_create_dialog.cpp msgid "Allowed: a-z, A-Z, 0-9 and _" -msgstr "" +msgstr "Autorisé : a-z, A-Z, 0-9 et _" #: editor/script_create_dialog.cpp msgid "Built-in script (into scene file)" -msgstr "" +msgstr "Script intégré (dans le fichier scène)" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Create new script file" -msgstr "Créer un script" +msgstr "Créer nouveau fichier de script" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Load existing script file" -msgstr "Script suivant" +msgstr "Charger fichier de script existant" + +#: editor/script_create_dialog.cpp +msgid "Language" +msgstr "Langage" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Inherits" -msgstr "Hérite de :" +msgstr "Hérité de :" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Class Name" -msgstr "Nom de classe :" +msgstr "Nom de classe" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Template" -msgstr "Supprimer l'item" +msgstr "Modèle" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Built-in Script" msgstr "Script intégré" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Attach Node Script" -msgstr "Créer le script de nÅ“ud" +msgstr "Attacher script de nÅ“ud" #: editor/script_editor_debugger.cpp msgid "Bytes:" @@ -7142,6 +6614,10 @@ msgid "Function:" msgstr "Fonction :" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Errors" msgstr "Erreurs" @@ -7222,6 +6698,10 @@ msgid "Type" msgstr "Type" #: editor/script_editor_debugger.cpp +msgid "Format" +msgstr "Format" + +#: editor/script_editor_debugger.cpp msgid "Usage" msgstr "Utilisation" @@ -7255,7 +6735,7 @@ msgstr "Changer le rayon d'une lumière" #: editor/spatial_editor_gizmos.cpp msgid "Change AudioStreamPlayer3D Emission Angle" -msgstr "" +msgstr "Changer l'angle d'émission AudioStreamPlayer3D" #: editor/spatial_editor_gizmos.cpp msgid "Change Camera FOV" @@ -7291,12 +6771,29 @@ msgstr "Changer les extents d'un notificateur" #: editor/spatial_editor_gizmos.cpp msgid "Change Particles AABB" -msgstr "" +msgstr "Changer particules AABB" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Change Probe Extents" -msgstr "Changer les extents d'un notificateur" +msgstr "Changer les ampleurs de la sonde" + +#: modules/gdnative/gd_native_library_editor.cpp +#, fuzzy +msgid "Library" +msgstr "MeshLibrary…" + +#: modules/gdnative/gd_native_library_editor.cpp +#, fuzzy +msgid "Status" +msgstr "État :" + +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Libraries: " +msgstr "" + +#: modules/gdnative/register_types.cpp +msgid "GDNative" +msgstr "" #: modules/gdscript/gd_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -7304,7 +6801,7 @@ msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "" "Argument de type incorrect dans convert(), utilisez les constantes TYPE_*." -#: modules/gdscript/gd_functions.cpp +#: modules/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h #: 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." @@ -7347,133 +6844,112 @@ msgstr "" #: modules/gdscript/gd_functions.cpp msgid "Object can't provide a length." -msgstr "" +msgstr "L'objet ne peut fournir une longueur." #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Delete Selection" -msgstr "Supprimer la selection" +msgstr "Sélection de la supression de GridMap" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Duplicate Selection" -msgstr "Dupliquer la sélection" - -#: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Paint" -msgstr "" +msgstr "Sélection de la duplication de GridMap" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Snap View" -msgstr "Vue de dessus" +msgstr "Vue instantanée" #: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy msgid "Prev Level (%sDown Wheel)" -msgstr "" +msgstr "Niveau de prévisualisation (" #: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy msgid "Next Level (%sUp Wheel)" -msgstr "" +msgstr "Niveau suivant (" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Clip Disabled" -msgstr "Désactivé" +msgstr "Âgrafe désactivée" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Clip Above" -msgstr "" +msgstr "Agrafe ci-dessus" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Clip Below" -msgstr "" +msgstr "Agrafe ci-dessous" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Edit X Axis" -msgstr "" +msgstr "Editer axe X" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Edit Y Axis" -msgstr "" +msgstr "Editer axe Y" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Edit Z Axis" -msgstr "" +msgstr "Editer axe Z" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Cursor Rotate X" -msgstr "Contrôle: Tourner" +msgstr "Rotation de curseur X" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Cursor Rotate Y" -msgstr "Contrôle: Tourner" +msgstr "Rotation de curseur Y" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Cursor Rotate Z" -msgstr "Contrôle: Tourner" +msgstr "Rotation de curseur Z" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Back Rotate X" -msgstr "" +msgstr "Rotation arrière curseur X" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Back Rotate Y" -msgstr "" +msgstr "Rotation arrière curseur Y" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Back Rotate Z" -msgstr "" +msgstr "Rotation arrière curseur Z" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Clear Rotation" -msgstr "" +msgstr "Effacer rotation curseur" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Create Area" -msgstr "Créer un nouveau" +msgstr "Créer zone" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Create Exterior Connector" -msgstr "Créer un nouveau projet" +msgstr "Créer connecteur extérieur" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Erase Area" -msgstr "Supprimer la TileMap" +msgstr "Effacer zone" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Selection -> Duplicate" -msgstr "Sélection uniquement" +msgstr "Sélection -> Dupliquer" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Selection -> Clear" -msgstr "Sélection uniquement" +msgstr "Sélection -> Effacer" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Settings" -msgstr "Paramètres d'alignement" +msgstr "Paramètres GridMap" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Pick Distance:" -msgstr "Instance :" +msgstr "Choisissez distance :" -#: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy -msgid "Tiles" -msgstr "Fichier" - -#: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Areas" +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "Builds" msgstr "" #: modules/visual_script/visual_script.cpp @@ -7515,29 +6991,24 @@ msgid "Stack overflow with stack depth: " msgstr "Débordement de pile avec profondeur de pile: " #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Signal Arguments" -msgstr "Modifier les arguments du signal :" +msgstr "Modifier les arguments du signal" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Argument Type" -msgstr "Modifier type de valeur du tableau" +msgstr "Modifier type d'argument" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Argument name" -msgstr "Changer le nom de l'entrée" +msgstr "Changer nom d'argument" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Set Variable Default Value" -msgstr "Changer la valeur par défaut" +msgstr "Changer valeur de la variable par défaut" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Set Variable Type" -msgstr "Modifier la variable :" +msgstr "Définir type de variable" #: modules/visual_script/visual_script_editor.cpp msgid "Functions:" @@ -7588,14 +7059,12 @@ msgid "Add Node" msgstr "Ajouter un nÅ“ud" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Remove VisualScript Nodes" -msgstr "Supprimer les clés invalides" +msgstr "Supprimer noeuds VisualScript" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Duplicate VisualScript Nodes" -msgstr "Dupliquer le(s) nÅ“ud(s) de graphe" +msgstr "Dupliquer noeuds VisualScript" #: modules/visual_script/visual_script_editor.cpp msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature." @@ -7642,24 +7111,20 @@ msgid "Add Setter Property" msgstr "Ajouter une propriété mutateur" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Base Type" -msgstr "Changer le type" +msgstr "Changer le type de base" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Move Node(s)" -msgstr "Supprimer le(s) nÅ“ud(s)" +msgstr "Déplacer le(s) nÅ“ud(s)" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Remove VisualScript Node" -msgstr "Supprimer le nÅ“ud de graphe Shader" +msgstr "Supprimer nÅ“ud VisualScript" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Connect Nodes" -msgstr "Connecter au nÅ“ud :" +msgstr "Connecter nÅ“ud" #: modules/visual_script/visual_script_editor.cpp msgid "Condition" @@ -7686,46 +7151,48 @@ msgid "Return" msgstr "Retour" #: modules/visual_script/visual_script_editor.cpp +msgid "Call" +msgstr "Appel" + +#: modules/visual_script/visual_script_editor.cpp msgid "Get" msgstr "Récupérer" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy +msgid "Script already has function '%s'" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Input Value" -msgstr "Changer le nom de l'entrée" +msgstr "Changer nom de l'entrée" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Can't copy the function node." -msgstr "Impossible d'opérer sur « .. »" +msgstr "Impossible de copier le noeud de fonction." #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Clipboard is empty!" -msgstr "Le presse-papiers des ressources est vide !" +msgstr "Le presse-papiers est vide !" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Paste VisualScript Nodes" -msgstr "Coller les nÅ“uds" +msgstr "Coller les nÅ“uds VisualScript" #: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "Supprimer la fonction" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Edit Variable" -msgstr "Modifier la variable :" +msgstr "Editerr la variable :" #: modules/visual_script/visual_script_editor.cpp msgid "Remove Variable" msgstr "Supprimer la variable" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Edit Signal" -msgstr "Modification du signal :" +msgstr "Editer signal :" #: modules/visual_script/visual_script_editor.cpp msgid "Remove Signal" @@ -7838,28 +7305,24 @@ msgstr "" "out), ou une chaîne (erreur)." #: platform/javascript/export/export.cpp -#, fuzzy msgid "Run in Browser" -msgstr "Parcourir" +msgstr "Exécuter dans le navigateur" #: platform/javascript/export/export.cpp msgid "Run exported HTML in the system's default browser." -msgstr "" +msgstr "Exécutez le HTML exporté dans le navigateur par défaut du système." #: platform/javascript/export/export.cpp -#, fuzzy msgid "Could not write file:\n" -msgstr "Impossible de trouver la tuile :" +msgstr "Impossible d'écrire le fichier:\n" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Could not read file:\n" -msgstr "Impossible de trouver la tuile :" +msgstr "Impossible de lire le fichier:\n" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Could not open template for export:\n" -msgstr "Impossible de créer le dossier." +msgstr "Impossible d'ouvrir le modèle pour exportation:\n" #: scene/2d/animated_sprite.cpp msgid "" @@ -7959,6 +7422,8 @@ msgid "" "A material to process the particles is not assigned, so no behavior is " "imprinted." msgstr "" +"Un matériau de traitement des particules n'est pas assigné, aucun " +"comportement n'est donc imprimé." #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." @@ -7972,6 +7437,9 @@ msgid "" "by the physics engine when running.\n" "Change the size in children collision shapes instead." msgstr "" +"Les changements de taille pour RigidBody2D (en mode caractère ou rigide) " +"seront remplacés par le moteur physique lors de l'exécution. Modifiez la " +"taille des formes de collision enfants à la place." #: scene/2d/remote_transform_2d.cpp msgid "Path property must point to a valid Node2D node to work." @@ -8005,31 +7473,35 @@ msgstr "" #: scene/3d/arvr_nodes.cpp msgid "ARVRCamera must have an ARVROrigin node as its parent" -msgstr "" +msgstr "ARVRCamera doit avoir un noeud ARVROrigin comme parent" #: scene/3d/arvr_nodes.cpp msgid "ARVRController must have an ARVROrigin node as its parent" -msgstr "" +msgstr "ARVRController doit avoir un noeud ARVROrigin comme parent" #: scene/3d/arvr_nodes.cpp msgid "" "The controller id must not be 0 or this controller will not be bound to an " "actual controller" msgstr "" +"L'identifiant contrôleur ne doit pas être 0 ou ce contrôleur ne sera pas lié " +"à un contrôleur valide" #: scene/3d/arvr_nodes.cpp msgid "ARVRAnchor must have an ARVROrigin node as its parent" -msgstr "" +msgstr "ARVRAnchor doit avoir un noeud ARVROrigin comme parent" #: scene/3d/arvr_nodes.cpp msgid "" "The anchor id must not be 0 or this anchor will not be bound to an actual " "anchor" msgstr "" +"L'identifiant d'ancrage ne doit pas être 0 ou cette ancre ne sera pas liée à " +"une ancre valide" #: scene/3d/arvr_nodes.cpp msgid "ARVROrigin requires an ARVRCamera child node" -msgstr "" +msgstr "ARVROrigin requiert un nÅ“ud enfant ARVRCamera" #: scene/3d/collision_polygon.cpp msgid "" @@ -8079,6 +7551,8 @@ msgstr "" msgid "" "Nothing is visible because meshes have not been assigned to draw passes." msgstr "" +"Rien n'est visible car les maillages n'ont pas été assignés au tirage des " +"passes." #: scene/3d/physics_body.cpp msgid "" @@ -8086,6 +7560,9 @@ msgid "" "the physics engine when running.\n" "Change the size in children collision shapes instead." msgstr "" +"Les changements de taille pour RigidBody (dans les modes caractère ou " +"rigide) seront remplacés par le moteur physique lors de l'exécution. " +"Modifiez la taille dans les formes de collision enfants à la place." #: scene/3d/remote_transform.cpp msgid "Path property must point to a valid Spatial node to work." @@ -8107,14 +7584,23 @@ msgstr "" "Une ressource de type SampleFrames doit être créée ou définie dans la " "propriété « Frames » afin qu'une AnimatedSprite3D fonctionne." +#: scene/3d/vehicle_body.cpp +msgid "" +"VehicleWheel serves to provide a wheel system to a VehicleBody. Please use " +"it as a child of a VehicleBody." +msgstr "" + #: scene/gui/color_picker.cpp -#, fuzzy msgid "Raw Mode" -msgstr "Mode navigation" +msgstr "Mode brut" #: scene/gui/color_picker.cpp msgid "Add current color as a preset" -msgstr "" +msgstr "Ajouter la couleur courante comme pré-réglage" + +#: scene/gui/dialogs.cpp +msgid "Cancel" +msgstr "Annuler" #: scene/gui/dialogs.cpp msgid "Alert!" @@ -8124,10 +7610,6 @@ msgstr "Alerte !" msgid "Please Confirm..." msgstr "Veuillez confirmer…" -#: scene/gui/input_action.cpp -msgid "Ctrl+" -msgstr "Ctrl+" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -8145,12 +7627,17 @@ msgid "" "Use a container as child (VBox,HBox,etc), or a Control and set the custom " "minimum size manually." msgstr "" +"ScrollContainer est destiné à fonctionner avec un contrôle enfant unique. " +"Utilisez un conteneur comme enfant (VBox, HBox, etc.) ou un contrôle et " +"définissez manuellement la taille minimale personnalisée." #: scene/main/scene_tree.cpp msgid "" "Default Environment as specified in Project Setings (Rendering -> Viewport -" "> Default Environment) could not be loaded." msgstr "" +"L'environnement par défaut spécifié dans les réglages du projet (Rendu -> " +"Viewport -> Environnement par défaut) ne peut pas être chargé." #: scene/main/viewport.cpp msgid "" @@ -8164,6 +7651,635 @@ msgstr "" "nÅ“ud de type Control afin qu'il en obtienne une taille. Sinon, faites-en une " "RenderTarget et assignez sa texture à un nÅ“ud pouvant l'afficher." +#: scene/resources/dynamic_font.cpp +msgid "Error initializing FreeType." +msgstr "Erreur à l'initialisation de Freetype." + +#: scene/resources/dynamic_font.cpp +msgid "Unknown font format." +msgstr "Format de police inconnu." + +#: scene/resources/dynamic_font.cpp +msgid "Error loading font." +msgstr "Erreur lors du chargement de la police." + +#: scene/resources/dynamic_font.cpp +msgid "Invalid font size." +msgstr "Taille de police invalide." + +#~ msgid "Method List For '%s':" +#~ msgstr "Liste des méthodes pour « %s » :" + +#~ msgid "Arguments:" +#~ msgstr "Paramètres :" + +#~ msgid "Return:" +#~ msgstr "Retourne :" + +#~ msgid "Added:" +#~ msgstr "Ajouté :" + +#~ msgid "Removed:" +#~ msgstr "Supprimé :" + +#~ msgid "Error saving atlas:" +#~ msgstr "Erreur de sauvegarde de l'atlas :" + +#~ msgid "Could not save atlas subtexture:" +#~ msgstr "Impossible d'enregistrer la sous-texture atlas :" + +#~ msgid "Exporting for %s" +#~ msgstr "Exportation pour %s" + +#~ msgid "Setting Up.." +#~ msgstr "Configuration…" + +#~ msgid "Error loading scene." +#~ msgstr "Erreur lors du chargement de la scène." + +#~ msgid "Re-Import" +#~ msgstr "Ré-importer" + +#~ msgid "Please wait for scan to complete." +#~ msgstr "Veuillez attendre la fin du scan." + +#~ msgid "Current scene must be saved to re-import." +#~ msgstr "" +#~ "La scène actuelle doit être enregistrée afin de pouvoir ré-importer." + +#~ msgid "Save & Re-Import" +#~ msgstr "Enregistrer et ré-importer" + +#~ msgid "Re-Importing" +#~ msgstr "Ré-importation" + +#~ msgid "Re-Import Changed Resources" +#~ msgstr "Ré-importer les ressources modifiées" + +#~ msgid "Loading Export Templates" +#~ msgstr "Chargement des modèles d'exportation" + +#~ msgid "" +#~ "\n" +#~ "Status: Needs Re-Import" +#~ msgstr "" +#~ "\n" +#~ "Statut: Réimportation nécessaire" + +#~ msgid "Same source and destination files, doing nothing." +#~ msgstr "Fichiers source et destination identiques, rien à faire." + +#~ msgid "Target file exists, can't overwrite. Delete first." +#~ msgstr "" +#~ "Le fichier cible existe et ne peut être réécrit. Supprimez le d'abord." + +#~ msgid "Same source and destination paths, doing nothing." +#~ msgstr "Chemins source et destination identiques, rien à faire." + +#~ msgid "Can't move directories to within themselves." +#~ msgstr "Impossible de déplacer des répertoires vers eux-mêmes." + +#~ msgid "Can't rename deps for:\n" +#~ msgstr "Impossible de renommer dependances pour :\n" + +#~ msgid "Error moving file:\n" +#~ msgstr "Erreur lors du déplacement de fichier :\n" + +#~ msgid "Pick New Name and Location For:" +#~ msgstr "Entrez un nouveau nom et chemin pour :" + +#~ msgid "No files selected!" +#~ msgstr "Pas de fichiers sélectionnés !" + +#~ msgid "Info" +#~ msgstr "Information" + +#~ msgid "Re-Import.." +#~ msgstr "Ré-importer…" + +#~ msgid "No bit masks to import!" +#~ msgstr "Pas de masques de bits à importer !" + +#~ msgid "Target path is empty." +#~ msgstr "Le chemin de destination est vide." + +#~ msgid "Target path must be a complete resource path." +#~ msgstr "" +#~ "Le chemin de destination doit être un chemin complet vers une ressource." + +#~ msgid "Target path must exist." +#~ msgstr "Le chemin de destination doit exister." + +#~ msgid "Save path is empty!" +#~ msgstr "Le chemin de sauvegarde est vide !" + +#~ msgid "Import BitMasks" +#~ msgstr "Importer des BitMasks" + +#~ msgid "Source Texture(s):" +#~ msgstr "Texture(s) source :" + +#~ msgid "Target Path:" +#~ msgstr "Chemin de destination :" + +#~ msgid "Accept" +#~ msgstr "Accepter" + +#~ msgid "Bit Mask" +#~ msgstr "Masque de bits" + +#~ msgid "No source font file!" +#~ msgstr "Pas de fichier de police source !" + +#~ msgid "No target font resource!" +#~ msgstr "Pas de ressource de police de destination !" + +#~ msgid "" +#~ "Invalid file extension.\n" +#~ "Please use .font." +#~ msgstr "" +#~ "Extension de fichier invalide.\n" +#~ "Veuillez utiliser .font." + +#~ msgid "Couldn't save font." +#~ msgstr "Impossible d'enregistrer la police." + +#~ msgid "Source Font:" +#~ msgstr "Police source :" + +#~ msgid "Source Font Size:" +#~ msgstr "Taille de la police source :" + +#~ msgid "Dest Resource:" +#~ msgstr "Ressource de destination :" + +#~ msgid "The quick brown fox jumps over the lazy dog." +#~ msgstr "Voix ambiguë d'un cÅ“ur qui, au zéphyr, préfère les jattes de kiwis." + +#~ msgid "Test:" +#~ msgstr "Test :" + +#~ msgid "Options:" +#~ msgstr "Options :" + +#~ msgid "Font Import" +#~ msgstr "Importation d'une police" + +#~ msgid "" +#~ "This file is already a Godot font file, please supply a BMFont type file " +#~ "instead." +#~ msgstr "" +#~ "Ce fichier est déjà un fichier de police Godot, veuillez fournir un " +#~ "fichier de type BMFont à la place." + +#~ msgid "Failed opening as BMFont file." +#~ msgstr "Impossible d'ouvrir le fichier en tant que fichier BMFont." + +#~ msgid "Invalid font custom source." +#~ msgstr "Source personnalisée de police invalide." + +#~ msgid "No meshes to import!" +#~ msgstr "Pas de maillages à importer !" + +#~ msgid "Single Mesh Import" +#~ msgstr "Importer un maillage" + +#~ msgid "Source Mesh(es):" +#~ msgstr "Maillage(s) source :" + +#~ msgid "Surface %d" +#~ msgstr "Surface %d" + +#~ msgid "No samples to import!" +#~ msgstr "Pas d'échantillons à importer !" + +#~ msgid "Import Audio Samples" +#~ msgstr "Importer des échantillons audio" + +#~ msgid "Source Sample(s):" +#~ msgstr "Échantillon(s) source :" + +#~ msgid "Audio Sample" +#~ msgstr "Échantillon audio" + +#~ msgid "New Clip" +#~ msgstr "Nouvelle séquence" + +#~ msgid "Flags" +#~ msgstr "Drapeaux" + +#~ msgid "Bake FPS:" +#~ msgstr "FPS de calcul :" + +#~ msgid "Optimizer" +#~ msgstr "Optimiseur" + +#~ msgid "Max Linear Error" +#~ msgstr "Erreur linéaire maximale" + +#~ msgid "Max Angular Error" +#~ msgstr "Erreur angulaire maximale" + +#~ msgid "Max Angle" +#~ msgstr "Angle maximal" + +#~ msgid "Clips" +#~ msgstr "Séquences" + +#~ msgid "Start(s)" +#~ msgstr "Départ(s)" + +#~ msgid "End(s)" +#~ msgstr "Fin(s)" + +#~ msgid "Filters" +#~ msgstr "Filtres" + +#~ msgid "Source path is empty." +#~ msgstr "Le chemin source est vide." + +#~ msgid "Couldn't load post-import script." +#~ msgstr "Impossible de charger le script de post-importation." + +#~ msgid "Invalid/broken script for post-import." +#~ msgstr "Script invalide ou cassé de post-importation." + +#~ msgid "Error importing scene." +#~ msgstr "Erreur à l'importation de la scène." + +#~ msgid "Import 3D Scene" +#~ msgstr "Importer une scène 3D" + +#~ msgid "Source Scene:" +#~ msgstr "Scène source :" + +#~ msgid "Same as Target Scene" +#~ msgstr "Identique à la scène de destination" + +#~ msgid "Shared" +#~ msgstr "Partagé" + +#~ msgid "Target Texture Folder:" +#~ msgstr "Dossier de destination des textures :" + +#~ msgid "Post-Process Script:" +#~ msgstr "Script de post-traitement :" + +#~ msgid "Custom Root Node Type:" +#~ msgstr "Type de nÅ“ud racine personnalisé :" + +#~ msgid "Auto" +#~ msgstr "Auto." + +#~ msgid "Root Node Name:" +#~ msgstr "Nom de nÅ“ud racine :" + +#~ msgid "The Following Files are Missing:" +#~ msgstr "Les fichiers suivants sont manquants :" + +#~ msgid "Import Anyway" +#~ msgstr "Importer quand même" + +#~ msgid "Import & Open" +#~ msgstr "Importer et ouvrir" + +#~ msgid "Edited scene has not been saved, open imported scene anyway?" +#~ msgstr "" +#~ "La scène modifiée actuellement n'a pas été enregistrée, ouvrir la scène " +#~ "importée quand même ?" + +#~ msgid "Import Image:" +#~ msgstr "Importer une image :" + +#~ msgid "Couldn't localize path: %s (already local)" +#~ msgstr "Impossible de rendre le chemin local : %s (déjà local)" + +#~ msgid "3D Scene Animation" +#~ msgstr "Animation de scène 3D" + +#~ msgid "Uncompressed" +#~ msgstr "Non compressé" + +#~ msgid "Compress Lossless (PNG)" +#~ msgstr "Compression sans perte (PNG)" + +#~ msgid "Compress Lossy (WebP)" +#~ msgstr "Compression avec perte (WebP)" + +#~ msgid "Compress (VRAM)" +#~ msgstr "Compression GPU (VRAM)" + +#~ msgid "Texture Format" +#~ msgstr "Format de texture" + +#~ msgid "Texture Compression Quality (WebP):" +#~ msgstr "Qualité de compression de la texture (WebP) :" + +#~ msgid "Texture Options" +#~ msgstr "Options de texture" + +#~ msgid "Please specify some files!" +#~ msgstr "Veuillez spécifier des fichiers !" + +#~ msgid "At least one file needed for Atlas." +#~ msgstr "Il faut au moins un fichier pour créer un atlas." + +#~ msgid "Error importing:" +#~ msgstr "Erreur d'importation :" + +#~ msgid "Only one file is required for large texture." +#~ msgstr "Un seul fichier est nécessaire pour créer une grande texture." + +#~ msgid "Max Texture Size:" +#~ msgstr "Taille de texture maximale :" + +#~ msgid "Import Textures for Atlas (2D)" +#~ msgstr "Importer des textures pour un atlas (2D)" + +#~ msgid "Cell Size:" +#~ msgstr "Taille des cellules :" + +#~ msgid "Large Texture" +#~ msgstr "Grande texture" + +#~ msgid "Import Large Textures (2D)" +#~ msgstr "Importer des grandes textures (2D)" + +#~ msgid "Source Texture" +#~ msgstr "Texture source" + +#~ msgid "Base Atlas Texture" +#~ msgstr "Texture d'atlas de base" + +#~ msgid "Source Texture(s)" +#~ msgstr "Texture(s) source" + +#~ msgid "Import Textures for 2D" +#~ msgstr "Importer des textures pour la 2D" + +#~ msgid "Import Textures for 3D" +#~ msgstr "Importer des textures pour la 3D" + +#~ msgid "Import Textures" +#~ msgstr "Importer des textures" + +#~ msgid "2D Texture" +#~ msgstr "Texture 2D" + +#~ msgid "3D Texture" +#~ msgstr "Texture 3D" + +#~ msgid "Atlas Texture" +#~ msgstr "Texture atlas" + +#~ msgid "" +#~ "NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files " +#~ "to the project." +#~ msgstr "" +#~ "REMARQUE : L'import de textures 2D n'est pas obligatoire. Copiez " +#~ "directement les fichiers PNG ou JPEG dans le projet." + +#~ msgid "Crop empty space." +#~ msgstr "Rogner l'espace vide." + +#~ msgid "Texture" +#~ msgstr "Texture" + +#~ msgid "Import Large Texture" +#~ msgstr "Importer une grande texture" + +#~ msgid "Load Source Image" +#~ msgstr "Charger une image source" + +#~ msgid "Slicing" +#~ msgstr "Découpage" + +#~ msgid "Saving" +#~ msgstr "Enregistrement" + +#~ msgid "Couldn't save large texture:" +#~ msgstr "Impossible d'enregistrer la grande texture :" + +#~ msgid "Build Atlas For:" +#~ msgstr "Construire l'atlas pour :" + +#~ msgid "Loading Image:" +#~ msgstr "Chargement de l'image :" + +#~ msgid "Couldn't load image:" +#~ msgstr "Impossible de charger l'image :" + +#~ msgid "Converting Images" +#~ msgstr "Conversion des images" + +#~ msgid "Cropping Images" +#~ msgstr "Rognage des images" + +#~ msgid "Blitting Images" +#~ msgstr "Découpage des images" + +#~ msgid "Couldn't save atlas image:" +#~ msgstr "Impossible d'enregistrer l'image d'atlas :" + +#~ msgid "Couldn't save converted texture:" +#~ msgstr "Impossible d'enregistrer la texture convertie :" + +#~ msgid "Invalid source!" +#~ msgstr "Source invalide !" + +#~ msgid "Invalid translation source!" +#~ msgstr "Source de traduction invalide !" + +#~ msgid "Column" +#~ msgstr "Colonne" + +#~ msgid "No items to import!" +#~ msgstr "Pas d'objets à importer !" + +#~ msgid "No target path!" +#~ msgstr "Pas de chemin de destination !" + +#~ msgid "Import Translations" +#~ msgstr "Importer des traductions" + +#~ msgid "Couldn't import!" +#~ msgstr "Impossible d'importer !" + +#~ msgid "Import Translation" +#~ msgstr "Importer une traduction" + +#~ msgid "Source CSV:" +#~ msgstr "CSV source :" + +#~ msgid "Ignore First Row" +#~ msgstr "Ignorer la première ligne" + +#~ msgid "Compress" +#~ msgstr "Compresser" + +#~ msgid "Add to Project (project.godot)" +#~ msgstr "Ajouter au projet (project.godot)" + +#~ msgid "Import Languages:" +#~ msgstr "Importer les langues :" + +#~ msgid "Translation" +#~ msgstr "Traduction" + +#~ msgid "Parsing %d Triangles:" +#~ msgstr "Analyse de %d triangles :" + +#~ msgid "Triangle #" +#~ msgstr "Triangle #" + +#~ msgid "Light Baker Setup:" +#~ msgstr "Paramètres du calculateur d'éclairage :" + +#~ msgid "Fixing Lights" +#~ msgstr "Correction des lumières" + +#~ msgid "Making BVH" +#~ msgstr "Création du BVH" + +#~ msgid "Transfer to Lightmaps:" +#~ msgstr "Transfert vers des lightmaps :" + +#~ msgid "Allocating Texture #" +#~ msgstr "Allocation de la texture #" + +#~ msgid "Baking Triangle #" +#~ msgstr "Calcul de la texture #" + +#~ msgid "Post-Processing Texture #" +#~ msgstr "Post-traitement de la texture #" + +#~ msgid "Reset the lightmap octree baking process (start over)." +#~ msgstr "" +#~ "Remettre le processus de calcul de l'éclairage à zéro (recommencer)." + +#~ msgid "Zoom (%):" +#~ msgstr "Zoom (%) :" + +#~ msgid "Skeleton.." +#~ msgstr "Squelette…" + +#~ msgid "Zoom Reset" +#~ msgstr "Réinitialiser le zoom" + +#~ msgid "Zoom Set.." +#~ msgstr "Définir le zoom…" + +#~ msgid "Set a Value" +#~ msgstr "Définir une valeur" + +#~ msgid "Snap (Pixels):" +#~ msgstr "Aligner (pixels) :" + +#~ msgid "Parse BBCode" +#~ msgstr "Analyser le BBCode" + +#~ msgid "Length:" +#~ msgstr "Longueur :" + +#~ msgid "Open Sample File(s)" +#~ msgstr "Ouvrir un ou des fichiers d'échantillons" + +#~ msgid "ERROR: Couldn't load sample!" +#~ msgstr "ERREUR : Impossible de charger l'échantillon !" + +#~ msgid "Add Sample" +#~ msgstr "Ajouter un échantillon" + +#~ msgid "Rename Sample" +#~ msgstr "Renommer l'échantillon" + +#~ msgid "Delete Sample" +#~ msgstr "Supprimer l'échantillon" + +#~ msgid "16 Bits" +#~ msgstr "16 bits" + +#~ msgid "8 Bits" +#~ msgstr "8 bits" + +#~ msgid "Stereo" +#~ msgstr "Stéréo" + +#~ msgid "Mono" +#~ msgstr "Mono" + +#~ msgid "Pitch" +#~ msgstr "Hauteur" + +#~ msgid "Window" +#~ msgstr "Fenêtre" + +#~ msgid "Move Right" +#~ msgstr "Aller à droite" + +#~ msgid "Scaling to %s%%." +#~ msgstr "Mise à l'échelle %s%%." + +#~ msgid "Up" +#~ msgstr "Haut" + +#~ msgid "Down" +#~ msgstr "Bas" + +#~ msgid "Bucket" +#~ msgstr "Seau" + +#~ msgid "Invalid project path, the path must exist!" +#~ msgstr "Chemin de projet invalide, le chemin doit exister !" + +#~ msgid "Invalid project path, project.godot must not exist." +#~ msgstr "Chemin de projet invalide, project.godot ne doit pas exister." + +#~ msgid "Invalid project path, project.godot must exist." +#~ msgstr "Chemin de projet invalide, project.godot doit exister." + +#~ msgid "Project Path (Must Exist):" +#~ msgstr "Chemin du projet (doit exister) :" + +#~ msgid "Create New Resource" +#~ msgstr "Créer une nouvelle ressource" + +#~ msgid "Open Resource" +#~ msgstr "Ouvrir la ressource" + +#~ msgid "Save Resource" +#~ msgstr "Enregistrer la ressource" + +#~ msgid "Resource Tools" +#~ msgstr "Outils des ressources" + +#~ msgid "Make Local" +#~ msgstr "Rendre local" + +#~ msgid "Edit Groups" +#~ msgstr "Modifier les groupes" + +#~ msgid "Edit Connections" +#~ msgstr "Modifier les connexions" + +#~ msgid "GridMap Paint" +#~ msgstr "Peinture de GridMap" + +#~ msgid "Tiles" +#~ msgstr "Tuiles" + +#~ msgid "Areas" +#~ msgstr "Aires" + +#~ msgid "Ctrl+" +#~ msgstr "Ctrl+" + +#~ msgid "Down Wheel)" +#~ msgstr "Roue descendante)" + +#~ msgid "Up Wheel)" +#~ msgstr "Roue ascendante)" + #~ msgid "Close scene? (Unsaved changes will be lost)" #~ msgstr "" #~ "Fermer la scène ? (les modifications non sauvegardées seront perdues)" @@ -8178,9 +8294,6 @@ msgstr "" #~ msgid "Close Goto Prev. Scene" #~ msgstr "Fermer, aller à la scène précédente" -#~ msgid "Expand to Parent" -#~ msgstr "Étendre au parent" - #~ msgid "Del" #~ msgstr "Supprimer" @@ -8355,18 +8468,12 @@ msgstr "" #~ msgid "Save Translatable Strings" #~ msgstr "Enregistrer les chaînes traduisibles" -#~ msgid "Translatable Strings.." -#~ msgstr "Chaînes traduisibles…" - #~ msgid "Install Export Templates" #~ msgstr "Installer les modèles d'exportation" #~ msgid "Edit Script Options" #~ msgstr "Modifier les options du script" -#~ msgid "Please export outside the project folder!" -#~ msgstr "Veuillez exporter en dehors du dossier du projet !" - #~ msgid "Error exporting project!" #~ msgstr "Erreur d'exportation du projet !" @@ -8416,18 +8523,12 @@ msgstr "" #~ msgid "Include" #~ msgstr "Inclure" -#~ msgid "Change Image Group" -#~ msgstr "Changer le groupe d'images" - #~ msgid "Group name can't be empty!" #~ msgstr "Le nom du groupe ne peut pas être vide !" #~ msgid "Invalid character in group name!" #~ msgstr "Caractère invalide dans le nom du groupe !" -#~ msgid "Group name already exists!" -#~ msgstr "Le nom du groupe existe déjà !" - #~ msgid "Add Image Group" #~ msgstr "Ajouter un groupe d'images" @@ -8576,9 +8677,6 @@ msgstr "" #~ msgid "Lighting" #~ msgstr "Éclairage" -#~ msgid "Toggle Persisting" -#~ msgstr "Mode persistant" - #~ msgid "Global" #~ msgstr "Global" diff --git a/editor/translations/hu.po b/editor/translations/hu.po index d21541c339..38444d19d3 100644 --- a/editor/translations/hu.po +++ b/editor/translations/hu.po @@ -191,10 +191,9 @@ msgid "Create %d NEW tracks and insert keys?" msgstr "" #: editor/animation_editor.cpp editor/create_dialog.cpp -#: editor/editor_audio_buses.cpp +#: editor/editor_audio_buses.cpp editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp #: editor/plugins/mesh_instance_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp editor/project_manager.cpp #: editor/script_create_dialog.cpp msgid "Create" @@ -356,261 +355,6 @@ msgstr "" msgid "Change Array Value" msgstr "" -#: editor/asset_library_editor_plugin.cpp -msgid "Free" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp -msgid "Version:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Contents:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "View Files" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_help.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp -msgid "Description:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -#: editor/project_manager.cpp -msgid "Install" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp -#: editor/connections_dialog.cpp editor/export_template_manager.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -#: editor/project_settings_editor.cpp editor/property_editor.cpp -#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Close" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve hostname:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Connection error, please try again." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't connect." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't connect to host:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response from host:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Request failed, return code:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Req. Failed." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Request failed, too many redirects" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Redirect Loop." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Bad download hash, assuming file has been tampered with." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Expected:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Got:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed sha256 hash check" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Asset Download Error:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -msgid "Success!" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Fetching:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Resolving.." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Error making request" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Idle" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Retry" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Download Error" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Download for this asset is already in progress!" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "first" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "prev" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "next" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "last" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "All" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/property_selector.cpp editor/quick_open.cpp -#: editor/settings_config_dialog.cpp -msgid "Search:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Search" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/project_manager.cpp -msgid "Import" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Plugins" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Sort:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Reverse" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Category:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Site:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Official" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -msgid "Community" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Testing" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Assets ZIP File" -msgstr "" - -#: editor/call_dialog.cpp -msgid "Method List For '%s':" -msgstr "" - -#: editor/call_dialog.cpp modules/visual_script/visual_script_editor.cpp -msgid "Call" -msgstr "" - -#: editor/call_dialog.cpp -msgid "Method List:" -msgstr "" - -#: editor/call_dialog.cpp -msgid "Arguments:" -msgstr "" - -#: editor/call_dialog.cpp -msgid "Return:" -msgstr "" - #: editor/code_editor.cpp msgid "Go to Line" msgstr "" @@ -647,6 +391,14 @@ msgstr "" msgid "Selection Only" msgstr "" +#: editor/code_editor.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp +msgid "Search" +msgstr "" + #: editor/code_editor.cpp editor/editor_help.cpp msgid "Find" msgstr "" @@ -679,11 +431,11 @@ msgstr "" msgid "Skip" msgstr "" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom In" msgstr "" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom Out" msgstr "" @@ -750,6 +502,20 @@ msgstr "" msgid "Oneshot" msgstr "" +#: editor/connections_dialog.cpp editor/dependency_editor.cpp +#: editor/export_template_manager.cpp +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Close" +msgstr "" + #: editor/connections_dialog.cpp msgid "Connect" msgstr "" @@ -775,7 +541,7 @@ msgstr "" msgid "Disconnect" msgstr "" -#: editor/connections_dialog.cpp editor/node_dock.cpp +#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" msgstr "" @@ -792,12 +558,25 @@ msgstr "" msgid "Recent:" msgstr "" +#: editor/create_dialog.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp +#: editor/quick_open.cpp editor/settings_config_dialog.cpp +msgid "Search:" +msgstr "" + #: editor/create_dialog.cpp editor/editor_help.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp #: editor/quick_open.cpp msgid "Matches:" msgstr "" +#: editor/create_dialog.cpp editor/editor_help.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp +#: editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "" + #: editor/dependency_editor.cpp msgid "Search Replacement For:" msgstr "" @@ -853,6 +632,10 @@ msgid "Owners Of:" msgstr "" #: editor/dependency_editor.cpp +msgid "Remove selected files from the project? (no undo)" +msgstr "" + +#: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" @@ -860,7 +643,7 @@ msgid "" msgstr "" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (no undo)" +msgid "Cannot remove:\n" msgstr "" #: editor/dependency_editor.cpp @@ -927,10 +710,6 @@ msgid "Godot Engine contributors" msgstr "" #: editor/editor_about.cpp -msgid "Authors" -msgstr "" - -#: editor/editor_about.cpp msgid "Project Founders" msgstr "" @@ -947,6 +726,38 @@ msgid "Developers" msgstr "" #: editor/editor_about.cpp +msgid "Authors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Platinum Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Mini Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Silver Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Bronze Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Donors" +msgstr "" + +#: editor/editor_about.cpp msgid "License" msgstr "" @@ -987,6 +798,16 @@ msgid "Package Installed Successfully!" msgstr "" #: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Success!" +msgstr "" + +#: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp +msgid "Install" +msgstr "" + +#: editor/editor_asset_installer.cpp msgid "Package Installer" msgstr "" @@ -1035,10 +856,6 @@ msgid "Audio Bus, Drag and Drop to rearrange." msgstr "" #: editor/editor_audio_buses.cpp -msgid "Bus options" -msgstr "" - -#: editor/editor_audio_buses.cpp msgid "Solo" msgstr "" @@ -1050,12 +867,20 @@ msgstr "" msgid "Bypass" msgstr "" +#: editor/editor_audio_buses.cpp +msgid "Bus options" +msgstr "" + #: editor/editor_audio_buses.cpp editor/plugins/tile_map_editor_plugin.cpp #: editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "" #: editor/editor_audio_buses.cpp +msgid "Reset Volume" +msgstr "" + +#: editor/editor_audio_buses.cpp msgid "Delete Effect" msgstr "" @@ -1076,6 +901,10 @@ msgid "Duplicate Audio Bus" msgstr "" #: editor/editor_audio_buses.cpp +msgid "Reset Bus Volume" +msgstr "" + +#: editor/editor_audio_buses.cpp msgid "Move Audio Bus" msgstr "" @@ -1107,7 +936,8 @@ msgstr "" msgid "Create a new Bus Layout." msgstr "" -#: editor/editor_audio_buses.cpp editor/script_create_dialog.cpp +#: editor/editor_audio_buses.cpp editor/property_editor.cpp +#: editor/script_create_dialog.cpp msgid "Load" msgstr "" @@ -1197,7 +1027,7 @@ msgid "Rearrange Autoloads" msgstr "" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp scene/gui/file_dialog.cpp +#: scene/gui/file_dialog.cpp msgid "Path:" msgstr "" @@ -1205,9 +1035,7 @@ msgstr "" msgid "Node Name:" msgstr "" -#: editor/editor_autoload_settings.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp editor/project_manager.cpp +#: editor/editor_autoload_settings.cpp editor/project_manager.cpp msgid "Name" msgstr "" @@ -1240,18 +1068,19 @@ msgid "Choose a Directory" msgstr "" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Create Folder" msgstr "" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: editor/editor_plugin_settings.cpp editor/plugins/theme_editor_plugin.cpp -#: editor/project_export.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp +#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp +#: scene/gui/file_dialog.cpp msgid "Name:" msgstr "" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Could not create folder." msgstr "" @@ -1271,30 +1100,6 @@ msgstr "" msgid "Template file not found:\n" msgstr "" -#: editor/editor_export.cpp -msgid "Added:" -msgstr "" - -#: editor/editor_export.cpp -msgid "Removed:" -msgstr "" - -#: editor/editor_export.cpp -msgid "Error saving atlas:" -msgstr "" - -#: editor/editor_export.cpp -msgid "Could not save atlas subtexture:" -msgstr "" - -#: editor/editor_export.cpp -msgid "Exporting for %s" -msgstr "" - -#: editor/editor_export.cpp -msgid "Setting Up.." -msgstr "" - #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "" @@ -1379,6 +1184,10 @@ msgstr "" msgid "Move Favorite Down" msgstr "" +#: editor/editor_file_dialog.cpp +msgid "Go to parent folder" +msgstr "" + #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Directories & Files:" msgstr "" @@ -1421,6 +1230,10 @@ msgstr "" msgid "Search Classes" msgstr "" +#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +msgid "Top" +msgstr "" + #: editor/editor_help.cpp editor/property_editor.cpp msgid "Class:" msgstr "" @@ -1437,15 +1250,27 @@ msgstr "" msgid "Brief Description:" msgstr "" +#: editor/editor_help.cpp +msgid "Members" +msgstr "" + #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "" #: editor/editor_help.cpp +msgid "Public Methods" +msgstr "" + +#: editor/editor_help.cpp msgid "Public Methods:" msgstr "" #: editor/editor_help.cpp +msgid "GUI Theme Items" +msgstr "" + +#: editor/editor_help.cpp msgid "GUI Theme Items:" msgstr "" @@ -1454,6 +1279,10 @@ msgid "Signals:" msgstr "" #: editor/editor_help.cpp +msgid "Enumerations" +msgstr "" + +#: editor/editor_help.cpp msgid "Enumerations:" msgstr "" @@ -1462,18 +1291,46 @@ msgid "enum " msgstr "" #: editor/editor_help.cpp +msgid "Constants" +msgstr "" + +#: editor/editor_help.cpp msgid "Constants:" msgstr "" #: editor/editor_help.cpp +msgid "Description" +msgstr "" + +#: editor/editor_help.cpp +msgid "Properties" +msgstr "" + +#: editor/editor_help.cpp msgid "Property Description:" msgstr "" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this property. Please help us by " +"[color=$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp +msgid "Methods" +msgstr "" + +#: editor/editor_help.cpp msgid "Method Description:" msgstr "" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this method. Please help us by [color=" +"$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp msgid "Search Text" msgstr "" @@ -1482,24 +1339,21 @@ msgid "Output:" msgstr "" #: editor/editor_log.cpp editor/plugins/animation_tree_editor_plugin.cpp -#: editor/plugins/rich_text_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_editor_debugger.cpp scene/gui/line_edit.cpp -#: scene/gui/text_edit.cpp +#: editor/property_editor.cpp editor/script_editor_debugger.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Clear" msgstr "" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Error saving resource!" msgstr "" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Save Resource As.." msgstr "" -#: editor/editor_node.cpp editor/export_template_manager.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "I see.." msgstr "" @@ -1516,6 +1370,26 @@ msgid "Error while saving." msgstr "" #: editor/editor_node.cpp +msgid "Can't open '%s'." +msgstr "" + +#: editor/editor_node.cpp +msgid "Error while parsing '%s'." +msgstr "" + +#: editor/editor_node.cpp +msgid "Unexpected end of file '%s'." +msgstr "" + +#: editor/editor_node.cpp +msgid "Missing '%s' or its dependencies." +msgstr "" + +#: editor/editor_node.cpp +msgid "Error while loading '%s'." +msgstr "" + +#: editor/editor_node.cpp msgid "Saving Scene" msgstr "" @@ -1573,6 +1447,33 @@ msgid "Restored default layout to base settings." msgstr "" #: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was imported, so it's not editable.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was instanced or inherited.\n" +"Changes to it will not be kept when saving the current scene." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource was imported, so it's not editable. Change its settings in the " +"import panel and then re-import." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This scene was imported, so changes to it will not be kept.\n" +"Instancing it or inheriting will allow making changes to it.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp msgid "Copy Params" msgstr "" @@ -1734,6 +1635,12 @@ msgid "Save changes the following scene(s) before opening Project Manager?" msgstr "" #: editor/editor_node.cpp +msgid "" +"This option is deprecated. Situations where refresh must be forced are now " +"considered a bug. Please report." +msgstr "" + +#: editor/editor_node.cpp msgid "Pick a Main Scene" msgstr "" @@ -1760,7 +1667,7 @@ msgid "" msgstr "" #: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Ugh" msgstr "" @@ -1771,11 +1678,11 @@ msgid "" msgstr "" #: editor/editor_node.cpp -msgid "Error loading scene." +msgid "Scene '%s' has broken dependencies:" msgstr "" #: editor/editor_node.cpp -msgid "Scene '%s' has broken dependencies:" +msgid "Clear Recent Scenes" msgstr "" #: editor/editor_node.cpp @@ -1811,7 +1718,7 @@ msgstr "" msgid "Toggle distraction-free mode." msgstr "" -#: editor/editor_node.cpp editor/io_plugins/editor_scene_import_plugin.cpp +#: editor/editor_node.cpp msgid "Scene" msgstr "" @@ -2030,6 +1937,10 @@ msgstr "" msgid "Issue Tracker" msgstr "" +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +msgid "Community" +msgstr "" + #: editor/editor_node.cpp msgid "About" msgstr "" @@ -2038,7 +1949,7 @@ msgstr "" msgid "Play the project." msgstr "" -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Play" msgstr "" @@ -2054,7 +1965,7 @@ msgstr "" msgid "Stop the scene." msgstr "" -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Stop" msgstr "" @@ -2127,6 +2038,15 @@ msgid "Object properties." msgstr "" #: editor/editor_node.cpp +msgid "Changes may be lost!" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Import" +msgstr "" + +#: editor/editor_node.cpp msgid "FileSystem" msgstr "" @@ -2142,14 +2062,6 @@ msgstr "" msgid "Don't Save" msgstr "" -#: editor/editor_node.cpp editor/editor_reimport_dialog.cpp -msgid "Re-Import" -msgstr "" - -#: editor/editor_node.cpp editor/editor_plugin_settings.cpp -msgid "Update" -msgstr "" - #: editor/editor_node.cpp msgid "Import Templates From ZIP File" msgstr "" @@ -2210,11 +2122,28 @@ msgstr "" msgid "Open the previous Editor" msgstr "" +#: editor/editor_plugin.cpp +msgid "Creating Mesh Previews" +msgstr "" + +#: editor/editor_plugin.cpp +msgid "Thumbnail.." +msgstr "" + #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" msgstr "" #: editor/editor_plugin_settings.cpp +msgid "Update" +msgstr "" + +#: editor/editor_plugin_settings.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Version:" +msgstr "" + +#: editor/editor_plugin_settings.cpp msgid "Author:" msgstr "" @@ -2266,26 +2195,6 @@ msgstr "" msgid "Frame #:" msgstr "" -#: editor/editor_reimport_dialog.cpp -msgid "Please wait for scan to complete." -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Current scene must be saved to re-import." -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Save & Re-Import" -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Importing" -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Import Changed Resources" -msgstr "" - #: editor/editor_run_native.cpp msgid "Select device from the list" msgstr "" @@ -2395,10 +2304,6 @@ msgid "Importing:" msgstr "" #: editor/export_template_manager.cpp -msgid "Loading Export Templates" -msgstr "" - -#: editor/export_template_manager.cpp msgid "Current Version:" msgstr "" @@ -2431,9 +2336,17 @@ msgid "Cannot navigate to '" msgstr "" #: editor/filesystem_dock.cpp +msgid "View items as a grid of thumbnails" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "View items as a list" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "" "\n" -"Status: Needs Re-Import" +"Status: Import of file failed. Please fix file and reimport manually." msgstr "" #: editor/filesystem_dock.cpp @@ -2443,87 +2356,87 @@ msgid "" msgstr "" #: editor/filesystem_dock.cpp -msgid "Same source and destination files, doing nothing." +msgid "Cannot move/rename resources root." msgstr "" #: editor/filesystem_dock.cpp -msgid "Target file exists, can't overwrite. Delete first." +msgid "Cannot move a folder into itself.\n" msgstr "" #: editor/filesystem_dock.cpp -msgid "Same source and destination paths, doing nothing." +msgid "Error moving:\n" msgstr "" #: editor/filesystem_dock.cpp -msgid "Can't move directories to within themselves." +msgid "Unable to update dependencies:\n" msgstr "" #: editor/filesystem_dock.cpp -msgid "Can't rename deps for:\n" +msgid "No name provided" msgstr "" #: editor/filesystem_dock.cpp -msgid "Error moving file:\n" +msgid "Provided name contains invalid characters" msgstr "" #: editor/filesystem_dock.cpp -msgid "Error moving dir:\n" +msgid "No name provided." msgstr "" #: editor/filesystem_dock.cpp -msgid "Can't operate on '..'" +msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp -msgid "Pick New Name and Location For:" +msgid "A file or folder with this name already exists." msgstr "" #: editor/filesystem_dock.cpp -msgid "No files selected!" +msgid "Renaming file:" msgstr "" #: editor/filesystem_dock.cpp -msgid "Expand all" +msgid "Renaming folder:" msgstr "" #: editor/filesystem_dock.cpp -msgid "Collapse all" +msgid "Expand all" msgstr "" #: editor/filesystem_dock.cpp -msgid "Show In File Manager" +msgid "Collapse all" msgstr "" #: editor/filesystem_dock.cpp -msgid "Instance" +msgid "Copy Path" msgstr "" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." +msgid "Rename.." msgstr "" #: editor/filesystem_dock.cpp -msgid "View Owners.." +msgid "Move To.." msgstr "" #: editor/filesystem_dock.cpp -msgid "Copy Path" +msgid "New Folder.." msgstr "" #: editor/filesystem_dock.cpp -msgid "Rename or Move.." +msgid "Show In File Manager" msgstr "" #: editor/filesystem_dock.cpp -msgid "Move To.." +msgid "Instance" msgstr "" #: editor/filesystem_dock.cpp -msgid "Info" +msgid "Edit Dependencies.." msgstr "" #: editor/filesystem_dock.cpp -msgid "Re-Import.." +msgid "View Owners.." msgstr "" #: editor/filesystem_dock.cpp @@ -2556,6 +2469,11 @@ msgstr "" msgid "Move" msgstr "" +#: editor/filesystem_dock.cpp editor/plugins/animation_tree_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Rename" +msgstr "" + #: editor/groups_editor.cpp msgid "Add to Group" msgstr "" @@ -2569,6 +2487,10 @@ msgid "Import as Single Scene" msgstr "" #: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials" msgstr "" @@ -2581,6 +2503,18 @@ msgid "Import with Separate Objects+Materials" msgstr "" #: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Materials+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Materials+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes" msgstr "" @@ -2589,38 +2523,31 @@ msgid "Import as Multiple Scenes+Materials" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Import Scene" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Importing Scene.." msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Running Custom Script.." msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Couldn't load post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Invalid/broken script for post-import (check console):" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Error running post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Saving.." msgstr "" @@ -2648,579 +2575,54 @@ msgstr "" msgid "Reimport" msgstr "" -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "No bit masks to import!" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path is empty." -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must be a complete resource path." -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must exist." -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Save path is empty!" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Import BitMasks" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s):" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Target Path:" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Accept" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Bit Mask" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No source font file!" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No target font resource!" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "" -"Invalid file extension.\n" -"Please use .font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Can't load/process source font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Couldn't save font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font Size:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Dest Resource:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "The quick brown fox jumps over the lazy dog." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Test:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Options:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Font Import" -msgstr "" - -#: 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 "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Failed opening as BMFont file." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error initializing FreeType." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Unknown font format." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error loading font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Invalid font size." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Invalid font custom source." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/plugins/theme_editor_plugin.cpp -msgid "Font" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "No meshes to import!" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Single Mesh Import" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Source Mesh(es):" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Mesh" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Surface %d" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "No samples to import!" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Import Audio Samples" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Source Sample(s):" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Audio Sample" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "New Clip" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Animation Options" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Flags" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Bake FPS:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Optimizer" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Linear Error" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angular Error" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angle" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Clips" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Start(s)" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "End(s)" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Loop" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Filters" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source path is empty." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't load post-import script." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Invalid/broken script for post-import." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Error importing scene." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import 3D Scene" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source Scene:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Same as Target Scene" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Shared" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Target Texture Folder:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Post-Process Script:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Custom Root Node Type:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Auto" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Root Node Name:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "The Following Files are Missing:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Anyway" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp scene/gui/dialogs.cpp -msgid "Cancel" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import & Open" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Edited scene has not been saved, open imported scene anyway?" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Image:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Can't import a file over itself:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't localize path: %s (already local)" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "3D Scene Animation" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Uncompressed" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossless (PNG)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossy (WebP)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress (VRAM)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Format" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Compression Quality (WebP):" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Options" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Please specify some files!" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "At least one file needed for Atlas." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Error importing:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Only one file is required for large texture." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Max Texture Size:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for Atlas (2D)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cell Size:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Large Texture" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Textures (2D)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture" +#: editor/multi_node_edit.cpp +msgid "MultiNode Set" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Base Atlas Texture" +#: editor/node_dock.cpp +msgid "Groups" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s)" +#: editor/node_dock.cpp +msgid "Select a Node to edit Signals and Groups." msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 2D" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create Poly" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 3D" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures" +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Insert Point" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "2D Texture" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly (Remove Point)" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "3D Texture" +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Remove Poly And Point" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Atlas Texture" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create a new polygon from scratch." msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp +#: editor/plugins/abstract_polygon_2d_editor.cpp msgid "" -"NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files to " -"the project." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Crop empty space." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Texture" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Load Source Image" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Slicing" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Inserting" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Saving" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save large texture:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Build Atlas For:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Loading Image:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't load image:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Converting Images" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cropping Images" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Blitting Images" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save atlas image:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save converted texture:" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid source!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid translation source!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Column" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/script_create_dialog.cpp -msgid "Language" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No items to import!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No target path!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translations" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Couldn't import!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translation" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Source CSV:" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Ignore First Row" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Compress" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Add to Project (project.godot)" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Languages:" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Translation" -msgstr "" - -#: editor/multi_node_edit.cpp -msgid "MultiNode Set" -msgstr "" - -#: editor/node_dock.cpp -msgid "Groups" -msgstr "" - -#: editor/node_dock.cpp -msgid "Select a Node to edit Signals and Groups." +"Edit existing polygon:\n" +"LMB: Move Point.\n" +"Ctrl+LMB: Split Segment.\n" +"RMB: Erase Point." msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp @@ -3376,7 +2778,6 @@ msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp #: editor/script_create_dialog.cpp msgid "Error!" @@ -3486,10 +2887,6 @@ msgid "Delete Input" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Rename" -msgstr "" - -#: editor/plugins/animation_tree_editor_plugin.cpp msgid "Animation tree is valid." msgstr "" @@ -3545,64 +2942,181 @@ msgstr "" msgid "Filters.." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing %d Triangles:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Free" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Contents:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Triangle #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "View Files" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Light Baker Setup:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve hostname:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing Geometry" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Fixing Lights" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connection error, please try again." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Making BVH" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't connect." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Light Octree" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't connect to host:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Octree Texture" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response from host:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Transfer to Lightmaps:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Allocating Texture #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, return code:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Baking Triangle #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Req. Failed." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Post-Processing Texture #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, too many redirects" msgstr "" -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Bake!" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Redirect Loop." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Bad download hash, assuming file has been tampered with." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Expected:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Got:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed sha256 hash check" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Asset Download Error:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Fetching:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Resolving.." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connecting.." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Requesting.." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Error making request" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Idle" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Retry" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download Error" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download for this asset is already in progress!" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "first" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "prev" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "next" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "last" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "All" msgstr "" -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Reset the lightmap octree baking process (start over)." +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Plugins" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Sort:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Reverse" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Category:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Site:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Support.." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Official" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Testing" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Assets ZIP File" msgstr "" #: editor/plugins/camera_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp msgid "Preview" msgstr "" @@ -3645,11 +3159,15 @@ msgid "Edit CanvasItem" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Change Anchors" +msgid "Anchors only" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom (%):" +msgid "Change Anchors and Margins" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Change Anchors" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3700,59 +3218,72 @@ msgid "Pan Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Lock the selected object in place (can't be moved)." +msgid "Toggles snapping" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Unlock the selected object (can be moved)." +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Makes sure the object's children are not selectable." +msgid "Snapping options" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Restores the object's children's ability to be selected." +msgid "Snap to grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp -#: editor/project_settings_editor.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Edit" +msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +msgid "Configure Snap..." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +msgid "Snap Relative" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Rotation Snap" +msgid "Use Pixel Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap Relative" +msgid "Smart snapping" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." +msgid "Snap to parent" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Pixel Snap" +msgid "Snap to node anchor" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Skeleton.." +msgid "Snap to node sides" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to other nodes" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Lock the selected object in place (can't be moved)." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Unlock the selected object (can be moved)." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Makes sure the object's children are not selectable." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Restores the object's children's ability to be selected." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3781,11 +3312,16 @@ msgid "View" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Reset" +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show helpers" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Set.." +msgid "Show rulers" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3797,7 +3333,7 @@ msgid "Frame Selection" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Anchor" +msgid "Layout" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3821,11 +3357,19 @@ msgid "Clear Pose" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Set a Value" +msgid "Drag pivot from mouse position" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap (Pixels):" +msgid "Set pivot at mouse position" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Multiply grid step by 2" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Divide grid step by 2" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3836,23 +3380,28 @@ msgstr "" msgid "Adding %s..." msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Create Node" msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Error instancing scene from %s" msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "OK :(" msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "No parent to instance a child at." msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "This operation requires a single selected node." msgstr "" @@ -3866,45 +3415,6 @@ msgid "" "Drag & drop + Alt : Change node type" msgstr "" -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Create Poly" -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly" -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly (Remove Point)" -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Create a new polygon from scratch." -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -msgid "" -"Edit existing polygon:\n" -"LMB: Move Point.\n" -"Ctrl+LMB: Split Segment.\n" -"RMB: Erase Point." -msgstr "" - #: editor/plugins/collision_polygon_editor_plugin.cpp msgid "Create Poly3D" msgstr "" @@ -3914,14 +3424,6 @@ msgid "Set Handle" msgstr "" #: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Creating Mesh Library" -msgstr "" - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Thumbnail.." -msgstr "" - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Remove item %d?" msgstr "" @@ -3944,6 +3446,26 @@ msgid "Update from Scene" msgstr "" #: editor/plugins/curve_editor_plugin.cpp +msgid "Flat0" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Flat1" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Ease in" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Ease out" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Smoothstep" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp msgid "Modify Curve Point" msgstr "" @@ -4019,22 +3541,18 @@ msgid "Create Occluder Polygon" msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Edit existing polygon:" msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "LMB: Move Point." msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Ctrl+LMB: Split Segment." msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "RMB: Erase Point." msgstr "" @@ -4135,6 +3653,10 @@ msgid "Create Outline" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Body" msgstr "" @@ -4262,12 +3784,72 @@ msgstr "" msgid "Populate" msgstr "" -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Create Navigation Polygon" +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Bake!" +msgstr "" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Bake the navigation mesh.\n" +msgstr "" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Clear the navigation mesh." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Setting up Configuration..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Calculating grid size..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating heightfield..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Marking walkable triangles..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Constructing compact heightfield..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Eroding walkable area..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Partioning..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating contours..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating polymesh..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Converting to native navigation mesh..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Navigation Mesh Generator Setup:" +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Parsing Geometry..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Done!" msgstr "" #: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Remove Poly And Point" +msgid "Create Navigation Polygon" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4441,15 +4023,15 @@ msgid "Curve Point #" msgstr "" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Point Pos" +msgid "Set Curve Point Position" msgstr "" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve In Pos" +msgid "Set Curve In Position" msgstr "" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Out Pos" +msgid "Set Curve Out Position" msgstr "" #: editor/plugins/path_editor_plugin.cpp @@ -4509,6 +4091,14 @@ msgid "Scale Polygon" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon->UV" msgstr "" @@ -4563,63 +4153,10 @@ msgstr "" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "" -#: editor/plugins/rich_text_editor_plugin.cpp -msgid "Parse BBCode" -msgstr "" - -#: editor/plugins/sample_editor_plugin.cpp -msgid "Length:" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Open Sample File(s)" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "ERROR: Couldn't load sample!" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Add Sample" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Rename Sample" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Delete Sample" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "16 Bits" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "8 Bits" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Stereo" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Mono" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/script_editor_debugger.cpp -msgid "Format" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Pitch" -msgstr "" - #: editor/plugins/script_editor_plugin.cpp msgid "Clear Recent Files" msgstr "" @@ -4710,6 +4247,10 @@ msgstr "" msgid "Close All" msgstr "" +#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp +msgid "Run" +msgstr "" + #: editor/plugins/script_editor_plugin.cpp msgid "Toggle Scripts Panel" msgstr "" @@ -4751,18 +4292,6 @@ msgid "Debug with external editor" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Window" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Left" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Right" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp msgid "Open Godot online documentation" msgstr "" @@ -4845,7 +4374,7 @@ msgstr "" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Copy" msgstr "" @@ -5108,10 +4637,6 @@ msgid "View Plane Transform." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Scaling to %s%%." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." msgstr "" @@ -5128,10 +4653,6 @@ msgid "Top View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Top" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "" @@ -5359,6 +4880,10 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Configure Snap.." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Local Coords" msgstr "" @@ -5504,6 +5029,10 @@ msgid "Speed (FPS):" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Loop" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animation Frames" msgstr "" @@ -5516,11 +5045,11 @@ msgid "Insert Empty (After)" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Up" +msgid "Move (Before)" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Down" +msgid "Move (After)" msgstr "" #: editor/plugins/style_box_editor_plugin.cpp @@ -5682,6 +5211,10 @@ msgid "Style" msgstr "" #: editor/plugins/theme_editor_plugin.cpp +msgid "Font" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp msgid "Color" msgstr "" @@ -5730,7 +5263,7 @@ msgid "Mirror Y" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Bucket" +msgid "Paint Tile" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp @@ -5794,6 +5327,10 @@ msgid "Delete preset '%s'?" msgstr "" #: editor/project_export.cpp +msgid "Export templates for this platform are missing/corrupted: " +msgstr "" + +#: editor/project_export.cpp msgid "Presets" msgstr "" @@ -5864,19 +5401,29 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +msgid "Export templates for this platform are missing/corrupted:" +msgstr "" + +#: editor/project_export.cpp msgid "Export With Debug" msgstr "" #: editor/project_manager.cpp -msgid "Invalid project path, the path must exist!" +msgid "The path does not exists." +msgstr "" + +#: editor/project_manager.cpp +msgid "Please choose a 'project.godot' file." msgstr "" #: editor/project_manager.cpp -msgid "Invalid project path, project.godot must not exist." +msgid "" +"Your project will be created in a non empty folder (you might want to create " +"a new folder)." msgstr "" #: editor/project_manager.cpp -msgid "Invalid project path, project.godot must exist." +msgid "Please choose a folder that does not contain a 'project.godot' file." msgstr "" #: editor/project_manager.cpp @@ -5884,10 +5431,26 @@ msgid "Imported Project" msgstr "" #: editor/project_manager.cpp +msgid " " +msgstr "" + +#: editor/project_manager.cpp +msgid "It would be a good idea to name your project." +msgstr "" + +#: editor/project_manager.cpp msgid "Invalid project path (changed anything?)." msgstr "" #: editor/project_manager.cpp +msgid "Couldn't get project.godot in project path." +msgstr "" + +#: editor/project_manager.cpp +msgid "Couldn't edit project.godot in project path." +msgstr "" + +#: editor/project_manager.cpp msgid "Couldn't create project.godot in project path." msgstr "" @@ -5896,23 +5459,23 @@ msgid "The following files failed extraction from package:" msgstr "" #: editor/project_manager.cpp -msgid "Import Existing Project" +msgid "Rename Project" msgstr "" #: editor/project_manager.cpp -msgid "Project Path (Must Exist):" +msgid "Couldn't get project.godot in the project path." msgstr "" #: editor/project_manager.cpp -msgid "Project Name:" +msgid "New Game Project" msgstr "" #: editor/project_manager.cpp -msgid "Create New Project" +msgid "Import Existing Project" msgstr "" #: editor/project_manager.cpp -msgid "Project Path:" +msgid "Create New Project" msgstr "" #: editor/project_manager.cpp @@ -5920,11 +5483,19 @@ msgid "Install Project:" msgstr "" #: editor/project_manager.cpp -msgid "Browse" +msgid "Project Name:" msgstr "" #: editor/project_manager.cpp -msgid "New Game Project" +msgid "Create folder" +msgstr "" + +#: editor/project_manager.cpp +msgid "Project Path:" +msgstr "" + +#: editor/project_manager.cpp +msgid "Browse" msgstr "" #: editor/project_manager.cpp @@ -5936,6 +5507,10 @@ msgid "Unnamed Project" msgstr "" #: editor/project_manager.cpp +msgid "Can't open project" +msgstr "" + +#: editor/project_manager.cpp msgid "Are you sure to open more than one project?" msgstr "" @@ -5971,10 +5546,6 @@ msgid "Project List" msgstr "" #: editor/project_manager.cpp -msgid "Run" -msgstr "" - -#: editor/project_manager.cpp msgid "Scan" msgstr "" @@ -6031,17 +5602,14 @@ msgid "Add Input Action Event" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Meta+" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Shift+" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Alt+" msgstr "" @@ -6102,7 +5670,7 @@ msgstr "" msgid "Joypad Axis Index:" msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Axis" msgstr "" @@ -6122,31 +5690,31 @@ msgstr "" msgid "Add Event" msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Device" msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Button" msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Left Button." msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Right Button." msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Middle Button." msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Up." msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Down." msgstr "" @@ -6155,7 +5723,7 @@ msgid "Add Global Property" msgstr "" #: editor/project_settings_editor.cpp -msgid "Select an setting item first!" +msgid "Select a setting item first!" msgstr "" #: editor/project_settings_editor.cpp @@ -6171,6 +5739,14 @@ msgid "Delete Item" msgstr "" #: editor/project_settings_editor.cpp +msgid "Can't contain '/' or ':'" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Already existing" +msgstr "" + +#: editor/project_settings_editor.cpp msgid "Error saving settings." msgstr "" @@ -6319,10 +5895,18 @@ msgid "New Script" msgstr "" #: editor/property_editor.cpp +msgid "Make Unique" +msgstr "" + +#: editor/property_editor.cpp msgid "Show in File System" msgstr "" #: editor/property_editor.cpp +msgid "Convert To %s" +msgstr "" + +#: editor/property_editor.cpp msgid "Error loading file: Not a resource!" msgstr "" @@ -6359,6 +5943,10 @@ msgid "Select Property" msgstr "" #: editor/property_selector.cpp +msgid "Select Virtual Method" +msgstr "" + +#: editor/property_selector.cpp msgid "Select Method" msgstr "" @@ -6386,26 +5974,6 @@ msgstr "" msgid "Reparent" msgstr "" -#: editor/resources_dock.cpp -msgid "Create New Resource" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Open Resource" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Save Resource" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Resource Tools" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Make Local" -msgstr "" - #: editor/run_settings_dialog.cpp msgid "Run Mode:" msgstr "" @@ -6532,14 +6100,6 @@ msgid "Sub-Resources:" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Edit Groups" -msgstr "" - -#: editor/scene_tree_dock.cpp -msgid "Edit Connections" -msgstr "" - -#: editor/scene_tree_dock.cpp msgid "Clear Inheritance" msgstr "" @@ -6720,6 +6280,14 @@ msgid "Invalid base path" msgstr "" #: editor/script_create_dialog.cpp +msgid "Directory of the same name exists" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "File exists, will be reused" +msgstr "" + +#: editor/script_create_dialog.cpp msgid "Invalid extension" msgstr "" @@ -6760,6 +6328,10 @@ msgid "Load existing script file" msgstr "" #: editor/script_create_dialog.cpp +msgid "Language" +msgstr "" + +#: editor/script_create_dialog.cpp msgid "Inherits" msgstr "" @@ -6800,6 +6372,10 @@ msgid "Function:" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Errors" msgstr "" @@ -6880,6 +6456,10 @@ msgid "Type" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Format" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Usage" msgstr "" @@ -6955,12 +6535,28 @@ msgstr "" msgid "Change Probe Extents" msgstr "" +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Library" +msgstr "" + +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Status" +msgstr "" + +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Libraries: " +msgstr "" + +#: modules/gdnative/register_types.cpp +msgid "GDNative" +msgstr "" + #: 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/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "" @@ -7010,10 +6606,6 @@ msgid "GridMap Duplicate Selection" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Paint" -msgstr "" - -#: modules/gridmap/grid_map_editor_plugin.cpp msgid "Snap View" msgstr "" @@ -7105,12 +6697,8 @@ msgstr "" msgid "Pick Distance:" msgstr "" -#: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Tiles" -msgstr "" - -#: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Areas" +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "Builds" msgstr "" #: modules/visual_script/visual_script.cpp @@ -7300,10 +6888,18 @@ msgid "Return" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Call" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Get" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Script already has function '%s'" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Input Value" msgstr "" @@ -7657,6 +7253,12 @@ msgid "" "order for AnimatedSprite3D to display frames." msgstr "" +#: scene/3d/vehicle_body.cpp +msgid "" +"VehicleWheel serves to provide a wheel system to a VehicleBody. Please use " +"it as a child of a VehicleBody." +msgstr "" + #: scene/gui/color_picker.cpp msgid "Raw Mode" msgstr "" @@ -7666,15 +7268,15 @@ msgid "Add current color as a preset" msgstr "" #: scene/gui/dialogs.cpp -msgid "Alert!" +msgid "Cancel" msgstr "" #: scene/gui/dialogs.cpp -msgid "Please Confirm..." +msgid "Alert!" msgstr "" -#: scene/gui/input_action.cpp -msgid "Ctrl+" +#: scene/gui/dialogs.cpp +msgid "Please Confirm..." msgstr "" #: scene/gui/popup.cpp @@ -7704,3 +7306,19 @@ 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 +msgid "Error initializing FreeType." +msgstr "" + +#: scene/resources/dynamic_font.cpp +msgid "Unknown font format." +msgstr "" + +#: scene/resources/dynamic_font.cpp +msgid "Error loading font." +msgstr "" + +#: scene/resources/dynamic_font.cpp +msgid "Invalid font size." +msgstr "" diff --git a/editor/translations/id.po b/editor/translations/id.po index 6fbf6fabde..aa57d09136 100644 --- a/editor/translations/id.po +++ b/editor/translations/id.po @@ -7,20 +7,22 @@ # Andinawan Asa <asaandinawan@gmail.com>, 2016. # Damar S. M <the.last.walla@gmail.com>, 2017. # Khairul Hidayat <khairulcyber4rt@gmail.com>, 2016. +# Sofyan Sugianto <sofyanartem@gmail.com>, 2017. +# Tom My <tom.asadinawan@gmail.com>, 2017. # yursan9 <rizal.sagi@gmail.com>, 2016. # msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2017-01-18 13:18+0000\n" -"Last-Translator: Damar S. M. <the.last.walla@gmail.com>\n" +"PO-Revision-Date: 2017-09-13 10:49+0000\n" +"Last-Translator: Sofyan Sugianto <sofyanartem@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.11-dev\n" +"X-Generator: Weblate 2.17-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -35,19 +37,16 @@ msgid "Move Add Key" msgstr "Pindahkan Kunci Tambah" #: editor/animation_editor.cpp -#, fuzzy msgid "Anim Change Transition" -msgstr "Ubah Transisi Anim" +msgstr "Ubah Transisi Animasi" #: editor/animation_editor.cpp -#, fuzzy msgid "Anim Change Transform" -msgstr "Ubah Transformasi Anim" +msgstr "Ubah Transformasi Animasi" #: editor/animation_editor.cpp -#, fuzzy msgid "Anim Change Value" -msgstr "Ubah Nilai Anim" +msgstr "Ubah Nilai Animasi" #: editor/animation_editor.cpp #, fuzzy @@ -211,10 +210,9 @@ msgid "Create %d NEW tracks and insert keys?" msgstr "Buat track BARU %d dan masukkan tombol-tombol?" #: editor/animation_editor.cpp editor/create_dialog.cpp -#: editor/editor_audio_buses.cpp +#: editor/editor_audio_buses.cpp editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp #: editor/plugins/mesh_instance_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp editor/project_manager.cpp #: editor/script_create_dialog.cpp msgid "Create" @@ -381,277 +379,13 @@ msgstr "Ubah Tipe Nilai Array" msgid "Change Array Value" msgstr "Ubah Nilai Array" -#: editor/asset_library_editor_plugin.cpp -msgid "Free" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp -msgid "Version:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Contents:" -msgstr "Konstanta:" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "View Files" -msgstr "File:" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_help.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp -msgid "Description:" -msgstr "Deskripsi:" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -#: editor/project_manager.cpp -msgid "Install" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp -#: editor/connections_dialog.cpp editor/export_template_manager.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -#: editor/project_settings_editor.cpp editor/property_editor.cpp -#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Close" -msgstr "Tutup" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve hostname:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Connection error, please try again." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Can't connect." -msgstr "Menyambungkan.." - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Can't connect to host:" -msgstr "Sambungkan Ke Node:" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response from host:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Request failed, return code:" -msgstr "Format file yang diminta tidak diketahui:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Req. Failed." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Request failed, too many redirects" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Redirect Loop." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Bad download hash, assuming file has been tampered with." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Expected:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Got:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed sha256 hash check" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Asset Download Error:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -msgid "Success!" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Fetching:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Resolving.." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Connecting.." -msgstr "Menyambungkan.." - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Requesting.." -msgstr "Menguji" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Error making request" -msgstr "Error menyimpan resource!" - -#: editor/asset_library_editor_plugin.cpp -msgid "Idle" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Retry" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Download Error" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Download for this asset is already in progress!" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "first" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "prev" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "next" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "last" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "All" -msgstr "Semua" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/property_selector.cpp editor/quick_open.cpp -#: editor/settings_config_dialog.cpp -msgid "Search:" -msgstr "Cari:" - -#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Search" -msgstr "Cari" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/project_manager.cpp -msgid "Import" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Plugins" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Sort:" -msgstr "Sortir:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Reverse" -msgstr "Terbalik" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Category:" -msgstr "Kategori:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Site:" -msgstr "Situs:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "Dukungan.." - -#: editor/asset_library_editor_plugin.cpp -msgid "Official" -msgstr "Resmi" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -msgid "Community" -msgstr "Komunitas" - -#: editor/asset_library_editor_plugin.cpp -msgid "Testing" -msgstr "Menguji" - -#: editor/asset_library_editor_plugin.cpp -msgid "Assets ZIP File" -msgstr "Aset-aset File ZIP" - -#: editor/call_dialog.cpp -msgid "Method List For '%s':" -msgstr "Daftar Fungsi Untuk '%s':" - -#: editor/call_dialog.cpp modules/visual_script/visual_script_editor.cpp -msgid "Call" -msgstr "Panggil" - -#: editor/call_dialog.cpp -msgid "Method List:" -msgstr "Daftar Fungsi:" - -#: editor/call_dialog.cpp -msgid "Arguments:" -msgstr "Argumen:" - -#: editor/call_dialog.cpp -#, fuzzy -msgid "Return:" -msgstr "Kembali:" - #: editor/code_editor.cpp msgid "Go to Line" -msgstr "Pergi ke Barisan" +msgstr "Pergi ke Baris" #: editor/code_editor.cpp msgid "Line Number:" -msgstr "Nomor Barisan:" +msgstr "Baris Nomor:" #: editor/code_editor.cpp msgid "No Matches" @@ -664,11 +398,11 @@ msgstr "Diganti kejadian (kejadian-kejadian) %d." #: editor/code_editor.cpp msgid "Replace" -msgstr "Tukar" +msgstr "Ubah" #: editor/code_editor.cpp msgid "Replace All" -msgstr "Tukar Semua" +msgstr "Ubah Semua" #: editor/code_editor.cpp msgid "Match Case" @@ -682,6 +416,14 @@ msgstr "Semua Kata" msgid "Selection Only" msgstr "Hanya yang Dipilih" +#: editor/code_editor.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp +msgid "Search" +msgstr "Cari" + #: editor/code_editor.cpp editor/editor_help.cpp msgid "Find" msgstr "Cari" @@ -716,11 +458,11 @@ msgstr "Cepat Pada Penggantian" msgid "Skip" msgstr "Lalui" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom In" msgstr "Perbesar Pandangan" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom Out" msgstr "Perkecil Pandangan" @@ -787,6 +529,20 @@ msgstr "Ditunda" msgid "Oneshot" msgstr "Satu Waktu" +#: editor/connections_dialog.cpp editor/dependency_editor.cpp +#: editor/export_template_manager.cpp +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Close" +msgstr "Tutup" + #: editor/connections_dialog.cpp msgid "Connect" msgstr "Menghubungkan" @@ -812,7 +568,7 @@ msgstr "Menyambungkan.." msgid "Disconnect" msgstr "Tidak tersambung" -#: editor/connections_dialog.cpp editor/node_dock.cpp +#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" msgstr "Sinyal-sinyal" @@ -829,6 +585,13 @@ msgstr "Favorit:" msgid "Recent:" msgstr "Saat ini:" +#: editor/create_dialog.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp +#: editor/quick_open.cpp editor/settings_config_dialog.cpp +msgid "Search:" +msgstr "Cari:" + #: editor/create_dialog.cpp editor/editor_help.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp #: editor/quick_open.cpp @@ -836,6 +599,12 @@ msgstr "Saat ini:" msgid "Matches:" msgstr "Kecocokan:" +#: editor/create_dialog.cpp editor/editor_help.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp +#: editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "Deskripsi:" + #: editor/dependency_editor.cpp msgid "Search Replacement For:" msgstr "Cari Ganti Untuk:" @@ -897,6 +666,11 @@ msgstr "Pemilik Dari:" #: 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)" + +#: editor/dependency_editor.cpp +#, fuzzy msgid "" "The files being removed are required by other resources in order for them to " "work.\n" @@ -907,9 +681,8 @@ msgstr "" "Hapus saja mereka? (tanpa membatalkan/undo)" #: 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)" +msgid "Cannot remove:\n" +msgstr "" #: editor/dependency_editor.cpp msgid "Error loading:" @@ -978,10 +751,6 @@ msgid "Godot Engine contributors" msgstr "" #: editor/editor_about.cpp -msgid "Authors" -msgstr "" - -#: editor/editor_about.cpp msgid "Project Founders" msgstr "" @@ -998,6 +767,38 @@ msgid "Developers" msgstr "" #: editor/editor_about.cpp +msgid "Authors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Platinum Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Mini Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Silver Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Bronze Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Donors" +msgstr "" + +#: editor/editor_about.cpp msgid "License" msgstr "" @@ -1041,6 +842,16 @@ msgid "Package Installed Successfully!" msgstr "" #: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Success!" +msgstr "" + +#: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp +msgid "Install" +msgstr "Pasang" + +#: editor/editor_asset_installer.cpp msgid "Package Installer" msgstr "" @@ -1091,10 +902,6 @@ msgid "Audio Bus, Drag and Drop to rearrange." msgstr "" #: editor/editor_audio_buses.cpp -msgid "Bus options" -msgstr "" - -#: editor/editor_audio_buses.cpp msgid "Solo" msgstr "" @@ -1106,6 +913,10 @@ msgstr "" msgid "Bypass" msgstr "" +#: editor/editor_audio_buses.cpp +msgid "Bus options" +msgstr "" + #: editor/editor_audio_buses.cpp editor/plugins/tile_map_editor_plugin.cpp #: editor/scene_tree_dock.cpp msgid "Duplicate" @@ -1113,6 +924,11 @@ msgstr "" #: editor/editor_audio_buses.cpp #, fuzzy +msgid "Reset Volume" +msgstr "Kebalikan Semula Pandangan" + +#: editor/editor_audio_buses.cpp +#, fuzzy msgid "Delete Effect" msgstr "Hapus yang Dipilih" @@ -1136,6 +952,11 @@ msgstr "Duplikat Pilihan" #: editor/editor_audio_buses.cpp #, fuzzy +msgid "Reset Bus Volume" +msgstr "Kebalikan Semula Pandangan" + +#: editor/editor_audio_buses.cpp +#, fuzzy msgid "Move Audio Bus" msgstr "Pindahkan Kunci Tambah" @@ -1167,7 +988,8 @@ msgstr "" msgid "Create a new Bus Layout." msgstr "" -#: editor/editor_audio_buses.cpp editor/script_create_dialog.cpp +#: editor/editor_audio_buses.cpp editor/property_editor.cpp +#: editor/script_create_dialog.cpp msgid "Load" msgstr "" @@ -1261,7 +1083,7 @@ msgid "Rearrange Autoloads" msgstr "Mengatur kembali Autoload-autoload" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp scene/gui/file_dialog.cpp +#: scene/gui/file_dialog.cpp msgid "Path:" msgstr "Path:" @@ -1269,9 +1091,7 @@ msgstr "Path:" msgid "Node Name:" msgstr "Nama Node:" -#: editor/editor_autoload_settings.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp editor/project_manager.cpp +#: editor/editor_autoload_settings.cpp editor/project_manager.cpp msgid "Name" msgstr "Nama" @@ -1305,18 +1125,19 @@ msgid "Choose a Directory" msgstr "Pilih sebuah Direktori" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Create Folder" msgstr "Buat Folder" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: editor/editor_plugin_settings.cpp editor/plugins/theme_editor_plugin.cpp -#: editor/project_export.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp +#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp +#: scene/gui/file_dialog.cpp msgid "Name:" msgstr "Nama:" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Could not create folder." msgstr "Tidak dapat membuat folder." @@ -1336,30 +1157,6 @@ msgstr "Mengemas" msgid "Template file not found:\n" msgstr "" -#: editor/editor_export.cpp -msgid "Added:" -msgstr "Ditambahkan:" - -#: editor/editor_export.cpp -msgid "Removed:" -msgstr "Dihapus:" - -#: editor/editor_export.cpp -msgid "Error saving atlas:" -msgstr "Gagal menyimpan atlas:" - -#: editor/editor_export.cpp -msgid "Could not save atlas subtexture:" -msgstr "Tidak dapat menyimpan sub tekstur atlas:" - -#: editor/editor_export.cpp -msgid "Exporting for %s" -msgstr "Mengekspor untuk %s" - -#: editor/editor_export.cpp -msgid "Setting Up.." -msgstr "Mengatur.." - #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "File telah ada, Overwrite?" @@ -1447,6 +1244,11 @@ msgstr "Pindahkan Favorit Keatas" msgid "Move Favorite Down" msgstr "Pindahkan Favorit Kebawah" +#: editor/editor_file_dialog.cpp +#, fuzzy +msgid "Go to parent folder" +msgstr "Tidak dapat membuat folder." + #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Directories & Files:" msgstr "Direktori-direktori & File-file:" @@ -1490,6 +1292,10 @@ msgstr "Daftar Class:" msgid "Search Classes" msgstr "Cari Kelas" +#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +msgid "Top" +msgstr "Atas" + #: editor/editor_help.cpp editor/property_editor.cpp msgid "Class:" msgstr "Kelas:" @@ -1506,15 +1312,30 @@ msgstr "Diturunkan oleh:" msgid "Brief Description:" msgstr "Deskripsi Singkat:" +#: editor/editor_help.cpp +#, fuzzy +msgid "Members" +msgstr "Member-member:" + #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "Member-member:" #: editor/editor_help.cpp +#, fuzzy +msgid "Public Methods" +msgstr "Metode Publik:" + +#: editor/editor_help.cpp msgid "Public Methods:" msgstr "Metode Publik:" #: editor/editor_help.cpp +#, fuzzy +msgid "GUI Theme Items" +msgstr "Item-item Tema GUI:" + +#: editor/editor_help.cpp msgid "GUI Theme Items:" msgstr "Item-item Tema GUI:" @@ -1524,6 +1345,11 @@ msgstr "Sinyal-sinyal:" #: editor/editor_help.cpp #, fuzzy +msgid "Enumerations" +msgstr "Fungsi-fungsi:" + +#: editor/editor_help.cpp +#, fuzzy msgid "Enumerations:" msgstr "Fungsi-fungsi:" @@ -1532,19 +1358,51 @@ msgid "enum " msgstr "" #: editor/editor_help.cpp +#, fuzzy +msgid "Constants" +msgstr "Konstanta:" + +#: editor/editor_help.cpp msgid "Constants:" msgstr "Konstanta:" #: editor/editor_help.cpp #, fuzzy +msgid "Description" +msgstr "Deskripsi:" + +#: editor/editor_help.cpp +#, fuzzy +msgid "Properties" +msgstr "Properti Objek." + +#: editor/editor_help.cpp +#, fuzzy msgid "Property Description:" msgstr "Deskripsi Singkat:" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this property. Please help us by " +"[color=$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp +#, fuzzy +msgid "Methods" +msgstr "Daftar Fungsi:" + +#: editor/editor_help.cpp msgid "Method Description:" msgstr "Deskripsi Metode:" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this method. Please help us by [color=" +"$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp msgid "Search Text" msgstr "Mencari Teks" @@ -1554,24 +1412,21 @@ msgid "Output:" msgstr " Keluaran:" #: editor/editor_log.cpp editor/plugins/animation_tree_editor_plugin.cpp -#: editor/plugins/rich_text_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_editor_debugger.cpp scene/gui/line_edit.cpp -#: scene/gui/text_edit.cpp +#: editor/property_editor.cpp editor/script_editor_debugger.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Clear" msgstr "Bersihkan" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Error saving resource!" msgstr "Error menyimpan resource!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Save Resource As.." msgstr "Simpan Resource Sebagai.." -#: editor/editor_node.cpp editor/export_template_manager.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp #, fuzzy msgid "I see.." msgstr "Aku tahu.." @@ -1589,6 +1444,30 @@ msgid "Error while saving." msgstr "Error saat menyimpan." #: editor/editor_node.cpp +#, fuzzy +msgid "Can't open '%s'." +msgstr "Menyambungkan.." + +#: editor/editor_node.cpp +#, fuzzy +msgid "Error while parsing '%s'." +msgstr "Error saat menyimpan." + +#: editor/editor_node.cpp +msgid "Unexpected end of file '%s'." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Missing '%s' or its dependencies." +msgstr "Scene '%s' memiliki dependensi yang rusak:" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Error while loading '%s'." +msgstr "Error saat menyimpan." + +#: editor/editor_node.cpp msgid "Saving Scene" msgstr "Menyimpan Scene" @@ -1649,6 +1528,33 @@ msgid "Restored default layout to base settings." msgstr "Mengembalikan semula layout default ke pengaturan-pengaturan awal." #: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was imported, so it's not editable.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was instanced or inherited.\n" +"Changes to it will not be kept when saving the current scene." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource was imported, so it's not editable. Change its settings in the " +"import panel and then re-import." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This scene was imported, so changes to it will not be kept.\n" +"Instancing it or inheriting will allow making changes to it.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp msgid "Copy Params" msgstr "Salin Parameter" @@ -1816,11 +1722,19 @@ msgid "Save & Quit" msgstr "Simpan sebuah File" #: editor/editor_node.cpp +#, fuzzy msgid "Save changes to the following scene(s) before quitting?" -msgstr "" +msgstr "Simpan perubahan saat ini sebelum keluar?" #: editor/editor_node.cpp +#, fuzzy msgid "Save changes the following scene(s) before opening Project Manager?" +msgstr "Simpan perubahan saat ini sebelum membuka Manajer Projek?" + +#: editor/editor_node.cpp +msgid "" +"This option is deprecated. Situations where refresh must be forced are now " +"considered a bug. Please report." msgstr "" #: editor/editor_node.cpp @@ -1850,7 +1764,7 @@ msgid "" msgstr "" #: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp #, fuzzy msgid "Ugh" msgstr "Wadoo" @@ -1864,14 +1778,14 @@ msgstr "" "membuka scene tersebut, kemudian simpan di dalam alamat proyek." #: editor/editor_node.cpp -msgid "Error loading scene." -msgstr "Gagal memuat scene." - -#: editor/editor_node.cpp msgid "Scene '%s' has broken dependencies:" msgstr "Scene '%s' memiliki dependensi yang rusak:" #: editor/editor_node.cpp +msgid "Clear Recent Scenes" +msgstr "" + +#: editor/editor_node.cpp msgid "Save Layout" msgstr "Simpan Penampilan" @@ -1905,7 +1819,7 @@ msgstr "Mode Tanpa Gangguan" msgid "Toggle distraction-free mode." msgstr "Mode Tanpa Gangguan" -#: editor/editor_node.cpp editor/io_plugins/editor_scene_import_plugin.cpp +#: editor/editor_node.cpp msgid "Scene" msgstr "Suasana" @@ -2127,6 +2041,10 @@ msgstr "" msgid "Issue Tracker" msgstr "" +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +msgid "Community" +msgstr "Komunitas" + #: editor/editor_node.cpp msgid "About" msgstr "" @@ -2135,7 +2053,7 @@ msgstr "" msgid "Play the project." msgstr "" -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Play" msgstr "" @@ -2151,7 +2069,7 @@ msgstr "" msgid "Stop the scene." msgstr "" -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Stop" msgstr "" @@ -2221,55 +2139,59 @@ msgstr "" #: editor/editor_node.cpp msgid "Object properties." +msgstr "Properti Objek." + +#: editor/editor_node.cpp +msgid "Changes may be lost!" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Import" msgstr "" #: editor/editor_node.cpp msgid "FileSystem" -msgstr "" +msgstr "Berkas Sistem" #: editor/editor_node.cpp editor/node_dock.cpp +#, fuzzy msgid "Node" -msgstr "" +msgstr "Titik" #: editor/editor_node.cpp msgid "Output" -msgstr "" +msgstr "Luaran" #: editor/editor_node.cpp msgid "Don't Save" -msgstr "" - -#: editor/editor_node.cpp editor/editor_reimport_dialog.cpp -msgid "Re-Import" -msgstr "" - -#: editor/editor_node.cpp editor/editor_plugin_settings.cpp -msgid "Update" -msgstr "" +msgstr "Jangan Simpan" #: editor/editor_node.cpp +#, fuzzy msgid "Import Templates From ZIP File" -msgstr "" +msgstr "Impor Templat dari Berkas ZIP" #: editor/editor_node.cpp editor/project_export.cpp msgid "Export Project" -msgstr "" +msgstr "Ekspor Projek" #: editor/editor_node.cpp msgid "Export Library" -msgstr "" +msgstr "Ekspor Pustaka" #: editor/editor_node.cpp +#, fuzzy msgid "Merge With Existing" -msgstr "" +msgstr "Gabung dengan yang Ada" #: editor/editor_node.cpp msgid "Password:" -msgstr "" +msgstr "Sandi:" #: editor/editor_node.cpp msgid "Open & Run a Script" -msgstr "" +msgstr "Buka & Jalankan Skrip" #: editor/editor_node.cpp #, fuzzy @@ -2277,39 +2199,46 @@ msgid "New Inherited" msgstr "Scene Turunan Baru.." #: editor/editor_node.cpp +#, fuzzy msgid "Load Errors" -msgstr "" +msgstr "Muat Galat" #: editor/editor_node.cpp editor/plugins/tile_map_editor_plugin.cpp msgid "Select" -msgstr "" +msgstr "Pilih" #: editor/editor_node.cpp #, fuzzy msgid "Open 2D Editor" -msgstr "Buka sebuah Direktori" +msgstr "Buka Penyunting 2D" #: editor/editor_node.cpp #, fuzzy msgid "Open 3D Editor" -msgstr "Buka sebuah Direktori" +msgstr "Buka Penyunting 3D" #: editor/editor_node.cpp -#, fuzzy msgid "Open Script Editor" -msgstr "Editor Ketergantungan" +msgstr "Buka Penyunting Skrip" #: editor/editor_node.cpp msgid "Open Asset Library" -msgstr "" +msgstr "Buka Pustaka Aset" #: editor/editor_node.cpp -#, fuzzy msgid "Open the next Editor" -msgstr "Editor Ketergantungan" +msgstr "Buka Penyunting Selanjutnya" #: editor/editor_node.cpp msgid "Open the previous Editor" +msgstr "Buka Penyunting Sebelumnya" + +#: editor/editor_plugin.cpp +msgid "Creating Mesh Previews" +msgstr "" + +#: editor/editor_plugin.cpp +msgid "Thumbnail.." msgstr "" #: editor/editor_plugin_settings.cpp @@ -2317,6 +2246,15 @@ msgid "Installed Plugins:" msgstr "" #: editor/editor_plugin_settings.cpp +msgid "Update" +msgstr "Perbarui" + +#: editor/editor_plugin_settings.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Version:" +msgstr "" + +#: editor/editor_plugin_settings.cpp msgid "Author:" msgstr "" @@ -2368,26 +2306,6 @@ msgstr "" msgid "Frame #:" msgstr "" -#: editor/editor_reimport_dialog.cpp -msgid "Please wait for scan to complete." -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Current scene must be saved to re-import." -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Save & Re-Import" -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Importing" -msgstr "Mengimpor ulang" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Import Changed Resources" -msgstr "" - #: editor/editor_run_native.cpp msgid "Select device from the list" msgstr "" @@ -2499,10 +2417,6 @@ msgid "Importing:" msgstr "Mengimpor:" #: editor/export_template_manager.cpp -msgid "Loading Export Templates" -msgstr "Memuat Ekspor Template-template." - -#: editor/export_template_manager.cpp msgid "Current Version:" msgstr "" @@ -2538,9 +2452,17 @@ msgid "Cannot navigate to '" msgstr "" #: editor/filesystem_dock.cpp +msgid "View items as a grid of thumbnails" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "View items as a list" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "" "\n" -"Status: Needs Re-Import" +"Status: Import of file failed. Please fix file and reimport manually." msgstr "" #: editor/filesystem_dock.cpp @@ -2551,45 +2473,52 @@ msgid "" msgstr "Resource" #: editor/filesystem_dock.cpp -msgid "Same source and destination files, doing nothing." +msgid "Cannot move/rename resources root." msgstr "" #: editor/filesystem_dock.cpp -msgid "Target file exists, can't overwrite. Delete first." +msgid "Cannot move a folder into itself.\n" msgstr "" #: editor/filesystem_dock.cpp -msgid "Same source and destination paths, doing nothing." -msgstr "" +#, fuzzy +msgid "Error moving:\n" +msgstr "Error memuat:" + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Unable to update dependencies:\n" +msgstr "Scene '%s' memiliki dependensi yang rusak:" #: editor/filesystem_dock.cpp -msgid "Can't move directories to within themselves." +msgid "No name provided" msgstr "" #: editor/filesystem_dock.cpp -msgid "Can't rename deps for:\n" +msgid "Provided name contains invalid characters" msgstr "" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Error moving file:\n" -msgstr "Error menyimpan TileSet!" +msgid "No name provided." +msgstr "Ubah Nama atau Pindahkan.." #: editor/filesystem_dock.cpp #, fuzzy -msgid "Error moving dir:\n" -msgstr "Error memuat:" +msgid "Name contains invalid characters." +msgstr "Karakter sah:" #: editor/filesystem_dock.cpp -msgid "Can't operate on '..'" +msgid "A file or folder with this name already exists." msgstr "" #: editor/filesystem_dock.cpp -msgid "Pick New Name and Location For:" -msgstr "" +#, fuzzy +msgid "Renaming file:" +msgstr "Namai kembali Variabel" #: editor/filesystem_dock.cpp -msgid "No files selected!" +msgid "Renaming folder:" msgstr "" #: editor/filesystem_dock.cpp @@ -2601,52 +2530,50 @@ msgid "Collapse all" msgstr "" #: editor/filesystem_dock.cpp -msgid "Show In File Manager" -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Instance" +msgid "Copy Path" msgstr "" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "" +#, fuzzy +msgid "Rename.." +msgstr "Ubah Nama atau Pindahkan.." #: editor/filesystem_dock.cpp -msgid "View Owners.." -msgstr "" +msgid "Move To.." +msgstr "Pindah Ke.." #: editor/filesystem_dock.cpp -msgid "Copy Path" -msgstr "" +#, fuzzy +msgid "New Folder.." +msgstr "Buat Folder" #: editor/filesystem_dock.cpp -msgid "Rename or Move.." -msgstr "" +msgid "Show In File Manager" +msgstr "Tampilkan di Manajer Berkas" #: editor/filesystem_dock.cpp -msgid "Move To.." +msgid "Instance" msgstr "" #: editor/filesystem_dock.cpp -msgid "Info" +msgid "Edit Dependencies.." msgstr "" #: editor/filesystem_dock.cpp -msgid "Re-Import.." +msgid "View Owners.." msgstr "" #: editor/filesystem_dock.cpp msgid "Previous Directory" -msgstr "" +msgstr "Direktori Sebelumnya" #: editor/filesystem_dock.cpp msgid "Next Directory" -msgstr "" +msgstr "Direktori Selanjutnya" #: editor/filesystem_dock.cpp msgid "Re-Scan Filesystem" -msgstr "" +msgstr "Pindai Ulang Berkas Sistem" #: editor/filesystem_dock.cpp msgid "Toggle folder status as Favorite" @@ -2657,18 +2584,26 @@ msgid "Instance the selected scene(s) as child of the selected node." msgstr "" #: editor/filesystem_dock.cpp +#, fuzzy msgid "" "Scanning Files,\n" "Please Wait.." msgstr "" +"Memindai Berkas,\n" +"Silakan Tunggu.." #: editor/filesystem_dock.cpp msgid "Move" +msgstr "Pindahkan" + +#: editor/filesystem_dock.cpp editor/plugins/animation_tree_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Rename" msgstr "" #: editor/groups_editor.cpp msgid "Add to Group" -msgstr "" +msgstr "Tambahkan ke Grup" #: editor/groups_editor.cpp msgid "Remove from Group" @@ -2680,6 +2615,10 @@ msgid "Import as Single Scene" msgstr "Memperbaharui Scene" #: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials" msgstr "" @@ -2692,6 +2631,18 @@ msgid "Import with Separate Objects+Materials" msgstr "" #: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Materials+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Materials+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes" msgstr "" @@ -2700,38 +2651,31 @@ msgid "Import as Multiple Scenes+Materials" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Import Scene" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Importing Scene.." msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Running Custom Script.." msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Couldn't load post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Invalid/broken script for post-import (check console):" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Error running post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Saving.." msgstr "" @@ -2762,580 +2706,54 @@ msgstr "" msgid "Reimport" msgstr "Mengimpor ulang" -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "No bit masks to import!" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path is empty." -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must be a complete resource path." -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must exist." -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Save path is empty!" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Import BitMasks" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s):" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Target Path:" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Accept" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Bit Mask" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No source font file!" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No target font resource!" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "" -"Invalid file extension.\n" -"Please use .font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Can't load/process source font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Couldn't save font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font Size:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Dest Resource:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "The quick brown fox jumps over the lazy dog." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Test:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Options:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Font Import" -msgstr "" - -#: 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 "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Failed opening as BMFont file." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error initializing FreeType." -msgstr "Error menginisialisasi FreeType." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Unknown font format." -msgstr "Format font tidak diketahui." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error loading font." -msgstr "Error memuat font." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Invalid font size." -msgstr "Ukuran font tidak sah." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Invalid font custom source." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/plugins/theme_editor_plugin.cpp -msgid "Font" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "No meshes to import!" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Single Mesh Import" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Source Mesh(es):" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Mesh" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Surface %d" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "No samples to import!" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Import Audio Samples" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Source Sample(s):" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Audio Sample" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "New Clip" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Animation Options" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Flags" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Bake FPS:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Optimizer" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Linear Error" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angular Error" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angle" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Clips" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Start(s)" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "End(s)" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Loop" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Filters" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source path is empty." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't load post-import script." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Invalid/broken script for post-import." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Error importing scene." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import 3D Scene" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source Scene:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Same as Target Scene" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Shared" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Target Texture Folder:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Post-Process Script:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Custom Root Node Type:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Auto" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#, fuzzy -msgid "Root Node Name:" -msgstr "Nama Node:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "The Following Files are Missing:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Anyway" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp scene/gui/dialogs.cpp -msgid "Cancel" -msgstr "Batal" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import & Open" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Edited scene has not been saved, open imported scene anyway?" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Image:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Can't import a file over itself:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't localize path: %s (already local)" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "3D Scene Animation" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Uncompressed" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossless (PNG)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossy (WebP)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress (VRAM)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Format" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Compression Quality (WebP):" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Options" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Please specify some files!" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "At least one file needed for Atlas." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Error importing:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Only one file is required for large texture." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Max Texture Size:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for Atlas (2D)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cell Size:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Large Texture" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Textures (2D)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture" +#: editor/multi_node_edit.cpp +msgid "MultiNode Set" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Base Atlas Texture" +#: editor/node_dock.cpp +msgid "Groups" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s)" +#: editor/node_dock.cpp +msgid "Select a Node to edit Signals and Groups." msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 2D" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create Poly" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 3D" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures" +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Insert Point" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "2D Texture" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly (Remove Point)" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "3D Texture" +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Remove Poly And Point" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Atlas Texture" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create a new polygon from scratch." msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp +#: editor/plugins/abstract_polygon_2d_editor.cpp msgid "" -"NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files to " -"the project." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Crop empty space." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Texture" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Load Source Image" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Slicing" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Inserting" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Saving" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save large texture:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Build Atlas For:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Loading Image:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't load image:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Converting Images" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cropping Images" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Blitting Images" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save atlas image:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save converted texture:" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid source!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid translation source!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Column" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/script_create_dialog.cpp -msgid "Language" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No items to import!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No target path!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translations" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Couldn't import!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translation" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Source CSV:" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Ignore First Row" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Compress" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Add to Project (project.godot)" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Languages:" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Translation" -msgstr "" - -#: editor/multi_node_edit.cpp -msgid "MultiNode Set" -msgstr "" - -#: editor/node_dock.cpp -msgid "Groups" -msgstr "" - -#: editor/node_dock.cpp -msgid "Select a Node to edit Signals and Groups." +"Edit existing polygon:\n" +"LMB: Move Point.\n" +"Ctrl+LMB: Split Segment.\n" +"RMB: Erase Point." msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp @@ -3492,7 +2910,6 @@ msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp #: editor/script_create_dialog.cpp msgid "Error!" @@ -3513,7 +2930,7 @@ msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Animation" -msgstr "" +msgstr "Animasi" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "New name:" @@ -3603,10 +3020,6 @@ msgid "Delete Input" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Rename" -msgstr "" - -#: editor/plugins/animation_tree_editor_plugin.cpp msgid "Animation tree is valid." msgstr "" @@ -3662,64 +3075,190 @@ msgstr "" msgid "Filters.." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing %d Triangles:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Free" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Triangle #" +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Contents:" +msgstr "Konstanta:" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "View Files" +msgstr "File:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve hostname:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Light Baker Setup:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing Geometry" +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Connection error, please try again." +msgstr "Gangguan koneks, silakan coba lagi." + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Can't connect." +msgstr "Menyambungkan.." + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Can't connect to host:" +msgstr "Sambungkan Ke Node:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response from host:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response." +msgstr "Tidak ada respon." + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Request failed, return code:" +msgstr "Format file yang diminta tidak diketahui:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Req. Failed." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Fixing Lights" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, too many redirects" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Making BVH" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Redirect Loop." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Light Octree" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Octree Texture" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Bad download hash, assuming file has been tampered with." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Transfer to Lightmaps:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Expected:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Allocating Texture #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Got:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Baking Triangle #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed sha256 hash check" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Post-Processing Texture #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Asset Download Error:" msgstr "" -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Bake!" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Fetching:" msgstr "" -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Reset the lightmap octree baking process (start over)." +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Resolving.." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Connecting.." +msgstr "Menyambungkan.." + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Requesting.." +msgstr "Menguji" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Error making request" +msgstr "Error menyimpan resource!" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Idle" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Retry" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download Error" msgstr "" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download for this asset is already in progress!" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "first" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "prev" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "next" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "last" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "All" +msgstr "Semua" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Plugins" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Sort:" +msgstr "Sortir:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Reverse" +msgstr "Terbalik" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Category:" +msgstr "Kategori:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Site:" +msgstr "Situs:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Support.." +msgstr "Dukungan.." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Official" +msgstr "Resmi" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Testing" +msgstr "Menguji" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Assets ZIP File" +msgstr "Aset-aset File ZIP" + #: editor/plugins/camera_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp msgid "Preview" msgstr "" @@ -3762,11 +3301,15 @@ msgid "Edit CanvasItem" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Change Anchors" +msgid "Anchors only" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom (%):" +msgid "Change Anchors and Margins" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Change Anchors" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3817,59 +3360,73 @@ msgid "Pan Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Lock the selected object in place (can't be moved)." +#, fuzzy +msgid "Toggles snapping" +msgstr "Beralih Breakpoint" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Unlock the selected object (can be moved)." +msgid "Snapping options" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Makes sure the object's children are not selectable." +msgid "Snap to grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Restores the object's children's ability to be selected." +msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp -#: editor/project_settings_editor.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Edit" -msgstr "Edit" +msgid "Configure Snap..." +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +msgid "Snap Relative" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +msgid "Use Pixel Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Rotation Snap" +msgid "Smart snapping" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap Relative" +msgid "Snap to parent" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." +msgid "Snap to node anchor" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Pixel Snap" +msgid "Snap to node sides" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to other nodes" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Lock the selected object in place (can't be moved)." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Skeleton.." +msgid "Unlock the selected object (can be moved)." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Makes sure the object's children are not selectable." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Restores the object's children's ability to be selected." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3898,11 +3455,16 @@ msgid "View" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Reset" +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Set.." +msgid "Show helpers" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show rulers" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3914,8 +3476,9 @@ msgid "Frame Selection" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Anchor" -msgstr "" +#, fuzzy +msgid "Layout" +msgstr "Simpan Penampilan" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Keys" @@ -3938,11 +3501,20 @@ msgid "Clear Pose" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Set a Value" +msgid "Drag pivot from mouse position" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap (Pixels):" +#, fuzzy +msgid "Set pivot at mouse position" +msgstr "Hapus Sinyal" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Multiply grid step by 2" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Divide grid step by 2" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3953,23 +3525,28 @@ msgstr "" msgid "Adding %s..." msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Create Node" msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Error instancing scene from %s" msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "OK :(" msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "No parent to instance a child at." msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "This operation requires a single selected node." msgstr "" @@ -3984,45 +3561,6 @@ msgid "" "Drag & drop + Alt : Change node type" msgstr "" -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Create Poly" -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly" -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly (Remove Point)" -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Create a new polygon from scratch." -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -msgid "" -"Edit existing polygon:\n" -"LMB: Move Point.\n" -"Ctrl+LMB: Split Segment.\n" -"RMB: Erase Point." -msgstr "" - #: editor/plugins/collision_polygon_editor_plugin.cpp msgid "Create Poly3D" msgstr "" @@ -4032,14 +3570,6 @@ msgid "Set Handle" msgstr "" #: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Creating Mesh Library" -msgstr "" - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Thumbnail.." -msgstr "" - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Remove item %d?" msgstr "" @@ -4062,6 +3592,27 @@ msgid "Update from Scene" msgstr "" #: editor/plugins/curve_editor_plugin.cpp +msgid "Flat0" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Flat1" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +#, fuzzy +msgid "Ease in" +msgstr "Beri Skala Seleksi" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Ease out" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Smoothstep" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp msgid "Modify Curve Point" msgstr "" @@ -4141,22 +3692,18 @@ msgid "Create Occluder Polygon" msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Edit existing polygon:" msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "LMB: Move Point." msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Ctrl+LMB: Split Segment." msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "RMB: Erase Point." msgstr "" @@ -4258,6 +3805,10 @@ msgid "Create Outline" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Body" msgstr "" @@ -4385,12 +3936,73 @@ msgstr "" msgid "Populate" msgstr "" -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Create Navigation Polygon" +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Bake!" +msgstr "" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Bake the navigation mesh.\n" +msgstr "" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Clear the navigation mesh." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Setting up Configuration..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Calculating grid size..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating heightfield..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Marking walkable triangles..." +msgstr "Menyimpan perubahan-perubahan lokal.." + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Constructing compact heightfield..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Eroding walkable area..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Partioning..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating contours..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating polymesh..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Converting to native navigation mesh..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Navigation Mesh Generator Setup:" +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Parsing Geometry..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Done!" msgstr "" #: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Remove Poly And Point" +msgid "Create Navigation Polygon" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4408,7 +4020,7 @@ msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Error loading image:" -msgstr "" +msgstr "Galat saat memuat gambar:" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "No pixels with transparency > 128 in image.." @@ -4429,7 +4041,7 @@ msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp msgid "Particles" -msgstr "" +msgstr "Partikel" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generated Point Count:" @@ -4564,16 +4176,19 @@ msgid "Curve Point #" msgstr "" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Point Pos" -msgstr "" +#, fuzzy +msgid "Set Curve Point Position" +msgstr "Hapus Sinyal" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve In Pos" -msgstr "" +#, fuzzy +msgid "Set Curve In Position" +msgstr "Hapus Sinyal" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Out Pos" -msgstr "" +#, fuzzy +msgid "Set Curve Out Position" +msgstr "Hapus Sinyal" #: editor/plugins/path_editor_plugin.cpp msgid "Split Path" @@ -4633,6 +4248,14 @@ msgid "Scale Polygon" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit" +msgstr "Edit" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon->UV" msgstr "" @@ -4687,63 +4310,10 @@ msgstr "" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "Tempel" -#: editor/plugins/rich_text_editor_plugin.cpp -msgid "Parse BBCode" -msgstr "" - -#: editor/plugins/sample_editor_plugin.cpp -msgid "Length:" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Open Sample File(s)" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "ERROR: Couldn't load sample!" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Add Sample" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Rename Sample" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Delete Sample" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "16 Bits" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "8 Bits" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Stereo" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Mono" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/script_editor_debugger.cpp -msgid "Format" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Pitch" -msgstr "" - #: editor/plugins/script_editor_plugin.cpp msgid "Clear Recent Files" msgstr "" @@ -4792,15 +4362,15 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp msgid "File" -msgstr "" +msgstr "Berkas" #: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp msgid "New" -msgstr "" +msgstr "Baru" #: editor/plugins/script_editor_plugin.cpp msgid "Save All" -msgstr "" +msgstr "Simpan Semua" #: editor/plugins/script_editor_plugin.cpp msgid "Soft Reload Script" @@ -4816,24 +4386,27 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp msgid "Reload Theme" -msgstr "" +msgstr "Muat Ulang Tema" #: editor/plugins/script_editor_plugin.cpp msgid "Save Theme" -msgstr "" +msgstr "Simpan Tema" #: editor/plugins/script_editor_plugin.cpp msgid "Save Theme As" -msgstr "" +msgstr "Simpan Tema Sebagai" #: editor/plugins/script_editor_plugin.cpp msgid "Close Docs" -msgstr "" +msgstr "Tutup Dokumentasi" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Close All" -msgstr "Tutup" +msgstr "Tutup Semua" + +#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp +msgid "Run" +msgstr "Jalankan" #: editor/plugins/script_editor_plugin.cpp #, fuzzy @@ -4844,13 +4417,13 @@ msgstr "Beralih Favorit" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp msgid "Find.." -msgstr "" +msgstr "Cari.." #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp msgid "Find Next" -msgstr "" +msgstr "Pencarian Selanjutnya" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Step Over" @@ -4878,18 +4451,6 @@ msgid "Debug with external editor" msgstr "Editor Ketergantungan" #: editor/plugins/script_editor_plugin.cpp -msgid "Window" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Left" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Right" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp msgid "Open Godot online documentation" msgstr "" @@ -4973,7 +4534,7 @@ msgstr "Potong" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Copy" msgstr "Kopy" @@ -5238,60 +4799,52 @@ msgid "View Plane Transform." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Scaling to %s%%." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View." -msgstr "" +msgstr "Tampilan Bawah." #: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom" -msgstr "" +msgstr "Bawah" #: editor/plugins/spatial_editor_plugin.cpp msgid "Top View." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Top" -msgstr "" +msgstr "Tampilan Atas." #: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." -msgstr "" +msgstr "Tampilan Belakang." #: editor/plugins/spatial_editor_plugin.cpp msgid "Rear" -msgstr "" +msgstr "Belakang" #: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." -msgstr "" +msgstr "Tampilan Depan." #: editor/plugins/spatial_editor_plugin.cpp msgid "Front" -msgstr "" +msgstr "Depan" #: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." -msgstr "" +msgstr "Tampilan Kiri." #: editor/plugins/spatial_editor_plugin.cpp msgid "Left" -msgstr "" +msgstr "Kiri" #: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." -msgstr "" +msgstr "Tampilan Kanan." #: editor/plugins/spatial_editor_plugin.cpp msgid "Right" -msgstr "" +msgstr "Kanan" #: editor/plugins/spatial_editor_plugin.cpp msgid "Keying is disabled (no key inserted)." @@ -5498,6 +5051,10 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Configure Snap.." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Local Coords" msgstr "" @@ -5643,6 +5200,10 @@ msgid "Speed (FPS):" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Loop" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animation Frames" msgstr "" @@ -5655,11 +5216,12 @@ msgid "Insert Empty (After)" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Up" -msgstr "" +#, fuzzy +msgid "Move (Before)" +msgstr "Salin Resource" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Down" +msgid "Move (After)" msgstr "" #: editor/plugins/style_box_editor_plugin.cpp @@ -5816,16 +5378,20 @@ msgstr "" #: editor/plugins/theme_editor_plugin.cpp msgid "Icon" -msgstr "" +msgstr "Ikon" #: editor/plugins/theme_editor_plugin.cpp msgid "Style" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Color" +msgid "Font" msgstr "" +#: editor/plugins/theme_editor_plugin.cpp +msgid "Color" +msgstr "Warna" + #: editor/plugins/tile_map_editor_plugin.cpp #, fuzzy msgid "Erase Selection" @@ -5873,7 +5439,7 @@ msgid "Mirror Y" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Bucket" +msgid "Paint Tile" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp @@ -5940,6 +5506,10 @@ msgid "Delete preset '%s'?" msgstr "Hapus file yang dipilih?" #: editor/project_export.cpp +msgid "Export templates for this platform are missing/corrupted: " +msgstr "" + +#: editor/project_export.cpp msgid "Presets" msgstr "" @@ -6012,20 +5582,31 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +msgid "Export templates for this platform are missing/corrupted:" +msgstr "" + +#: editor/project_export.cpp #, fuzzy msgid "Export With Debug" msgstr "Ekspor Tile Set" #: editor/project_manager.cpp -msgid "Invalid project path, the path must exist!" +#, fuzzy +msgid "The path does not exists." +msgstr "File tidak ada." + +#: editor/project_manager.cpp +msgid "Please choose a 'project.godot' file." msgstr "" #: editor/project_manager.cpp -msgid "Invalid project path, project.godot must not exist." +msgid "" +"Your project will be created in a non empty folder (you might want to create " +"a new folder)." msgstr "" #: editor/project_manager.cpp -msgid "Invalid project path, project.godot must exist." +msgid "Please choose a folder that does not contain a 'project.godot' file." msgstr "" #: editor/project_manager.cpp @@ -6033,47 +5614,74 @@ msgid "Imported Project" msgstr "" #: editor/project_manager.cpp -msgid "Invalid project path (changed anything?)." +msgid " " msgstr "" #: editor/project_manager.cpp -msgid "Couldn't create project.godot in project path." +msgid "It would be a good idea to name your project." msgstr "" #: editor/project_manager.cpp -msgid "The following files failed extraction from package:" +msgid "Invalid project path (changed anything?)." msgstr "" #: editor/project_manager.cpp -msgid "Import Existing Project" +msgid "Couldn't get project.godot in project path." msgstr "" #: editor/project_manager.cpp -msgid "Project Path (Must Exist):" +msgid "Couldn't edit project.godot in project path." msgstr "" #: editor/project_manager.cpp -msgid "Project Name:" +msgid "Couldn't create project.godot in project path." msgstr "" #: editor/project_manager.cpp -msgid "Create New Project" +msgid "The following files failed extraction from package:" msgstr "" #: editor/project_manager.cpp -msgid "Project Path:" +#, fuzzy +msgid "Rename Project" +msgstr "Projek Baru Permainan" + +#: editor/project_manager.cpp +msgid "Couldn't get project.godot in the project path." msgstr "" #: editor/project_manager.cpp +#, fuzzy +msgid "New Game Project" +msgstr "Projek Baru Permainan" + +#: editor/project_manager.cpp +msgid "Import Existing Project" +msgstr "Impor Projek yang Sudah Ada" + +#: editor/project_manager.cpp +msgid "Create New Project" +msgstr "Buat Projek Baru" + +#: editor/project_manager.cpp msgid "Install Project:" msgstr "" #: editor/project_manager.cpp -msgid "Browse" -msgstr "" +msgid "Project Name:" +msgstr "Nama Projek:" #: editor/project_manager.cpp -msgid "New Game Project" +#, fuzzy +msgid "Create folder" +msgstr "Buat Folder" + +#: editor/project_manager.cpp +msgid "Project Path:" +msgstr "Lokasi Projek:" + +#: editor/project_manager.cpp +msgid "Browse" msgstr "" #: editor/project_manager.cpp @@ -6085,8 +5693,14 @@ msgid "Unnamed Project" msgstr "" #: editor/project_manager.cpp +#, fuzzy +msgid "Can't open project" +msgstr "Menyambungkan.." + +#: editor/project_manager.cpp +#, fuzzy msgid "Are you sure to open more than one project?" -msgstr "" +msgstr "Apakah Anda yakin membuka lebih dari satu projek?" #: editor/project_manager.cpp #, fuzzy @@ -6106,8 +5720,9 @@ msgid "" msgstr "" #: editor/project_manager.cpp +#, fuzzy msgid "Are you sure to run more than one project?" -msgstr "" +msgstr "Apakah Anda yakin menjalankan lebih dari satu projek?" #: editor/project_manager.cpp msgid "Remove project from the list? (Folder contents will not be modified)" @@ -6121,23 +5736,19 @@ msgstr "" #: editor/project_manager.cpp msgid "Project List" -msgstr "" - -#: editor/project_manager.cpp -msgid "Run" -msgstr "" +msgstr "Daftar Projek" #: editor/project_manager.cpp msgid "Scan" -msgstr "" +msgstr "Pindai" #: editor/project_manager.cpp msgid "Select a Folder to Scan" -msgstr "" +msgstr "Pilih Berkas untuk Dipindai" #: editor/project_manager.cpp msgid "New Project" -msgstr "" +msgstr "Projek Baru" #: editor/project_manager.cpp #, fuzzy @@ -6146,7 +5757,7 @@ msgstr "Hapus Pilihan" #: editor/project_manager.cpp msgid "Exit" -msgstr "" +msgstr "Keluar" #: editor/project_manager.cpp #, fuzzy @@ -6186,17 +5797,14 @@ msgid "Add Input Action Event" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Meta+" msgstr "Meta+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Shift+" msgstr "Shift+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Alt+" msgstr "Alt+" @@ -6257,7 +5865,7 @@ msgstr "Ubah" msgid "Joypad Axis Index:" msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Axis" msgstr "Axis" @@ -6277,32 +5885,32 @@ msgstr "" msgid "Add Event" msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Device" msgstr "Perangkat" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Button" msgstr "Tombol" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Left Button." msgstr "Tombol Kiri." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Right Button." msgstr "Tombol Kanan." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Middle Button." msgstr "Tombol Tengah." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp #, fuzzy msgid "Wheel Up." msgstr "Scroll keatas." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp #, fuzzy msgid "Wheel Down." msgstr "Scroll kebawah." @@ -6313,7 +5921,7 @@ msgid "Add Global Property" msgstr "Tambahkan Properti Getter" #: editor/project_settings_editor.cpp -msgid "Select an setting item first!" +msgid "Select a setting item first!" msgstr "" #: editor/project_settings_editor.cpp @@ -6331,6 +5939,15 @@ msgid "Delete Item" msgstr "Hapus" #: editor/project_settings_editor.cpp +#, fuzzy +msgid "Can't contain '/' or ':'" +msgstr "Sambungkan Ke Node:" + +#: editor/project_settings_editor.cpp +msgid "Already existing" +msgstr "" + +#: editor/project_settings_editor.cpp msgid "Error saving settings." msgstr "" @@ -6460,7 +6077,7 @@ msgstr "" #: editor/property_editor.cpp msgid "File.." -msgstr "" +msgstr "Berkas.." #: editor/property_editor.cpp msgid "Dir.." @@ -6481,12 +6098,24 @@ msgid "New Script" msgstr "Scene Baru" #: editor/property_editor.cpp +#, fuzzy +msgid "Make Unique" +msgstr "Membuat sub-Resource Unik" + +#: editor/property_editor.cpp +#, fuzzy msgid "Show in File System" -msgstr "" +msgstr "Tampilkan dalam Manajer Berkas" + +#: editor/property_editor.cpp +#, fuzzy +msgid "Convert To %s" +msgstr "Sambungkan Ke Node:" #: editor/property_editor.cpp +#, fuzzy msgid "Error loading file: Not a resource!" -msgstr "" +msgstr "Gagal saat memuat berkas: Bukan berkas resource!" #: editor/property_editor.cpp msgid "Selected node is not a Viewport!" @@ -6524,6 +6153,11 @@ msgstr "Tambahkan Properti Setter" #: editor/property_selector.cpp #, fuzzy +msgid "Select Virtual Method" +msgstr "Metode Publik:" + +#: editor/property_selector.cpp +#, fuzzy msgid "Select Method" msgstr "Metode Publik:" @@ -6551,26 +6185,6 @@ msgstr "" msgid "Reparent" msgstr "" -#: editor/resources_dock.cpp -msgid "Create New Resource" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Open Resource" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Save Resource" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Resource Tools" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Make Local" -msgstr "" - #: editor/run_settings_dialog.cpp msgid "Run Mode:" msgstr "" @@ -6698,14 +6312,6 @@ msgid "Sub-Resources:" msgstr "Resource" #: editor/scene_tree_dock.cpp -msgid "Edit Groups" -msgstr "" - -#: editor/scene_tree_dock.cpp -msgid "Edit Connections" -msgstr "" - -#: editor/scene_tree_dock.cpp msgid "Clear Inheritance" msgstr "" @@ -6894,6 +6500,15 @@ msgid "Invalid base path" msgstr "" #: editor/script_create_dialog.cpp +msgid "Directory of the same name exists" +msgstr "" + +#: editor/script_create_dialog.cpp +#, fuzzy +msgid "File exists, will be reused" +msgstr "File telah ada, Overwrite?" + +#: editor/script_create_dialog.cpp msgid "Invalid extension" msgstr "" @@ -6937,6 +6552,10 @@ msgid "Load existing script file" msgstr "" #: editor/script_create_dialog.cpp +msgid "Language" +msgstr "" + +#: editor/script_create_dialog.cpp #, fuzzy msgid "Inherits" msgstr "Turunan:" @@ -6981,6 +6600,10 @@ msgid "Function:" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Errors" msgstr "" @@ -7061,6 +6684,10 @@ msgid "Type" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Format" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Usage" msgstr "" @@ -7139,13 +6766,30 @@ msgstr "" msgid "Change Probe Extents" msgstr "" +#: modules/gdnative/gd_native_library_editor.cpp +#, fuzzy +msgid "Library" +msgstr "Ekspor Pustaka" + +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Status" +msgstr "" + +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Libraries: " +msgstr "" + +#: modules/gdnative/register_types.cpp +msgid "GDNative" +msgstr "" + #: 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/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h #: 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." @@ -7197,10 +6841,6 @@ msgid "GridMap Duplicate Selection" msgstr "Duplikat Pilihan" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Paint" -msgstr "" - -#: modules/gridmap/grid_map_editor_plugin.cpp msgid "Snap View" msgstr "" @@ -7296,13 +6936,8 @@ msgstr "" msgid "Pick Distance:" msgstr "" -#: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy -msgid "Tiles" -msgstr "File:" - -#: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Areas" +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "Builds" msgstr "" #: modules/visual_script/visual_script.cpp @@ -7514,10 +7149,18 @@ msgid "Return" msgstr "Kembali:" #: modules/visual_script/visual_script_editor.cpp +msgid "Call" +msgstr "Panggil" + +#: modules/visual_script/visual_script_editor.cpp msgid "Get" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Script already has function '%s'" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Change Input Value" msgstr "Ubah Nilai Array" @@ -7940,13 +7583,24 @@ msgstr "" "Sebuah resource SpriteFrames harus diciptakan atau diatur didalam properti " "'Frames' agar AnimatedSprite3D menampilkan frame-frame." +#: scene/3d/vehicle_body.cpp +msgid "" +"VehicleWheel serves to provide a wheel system to a VehicleBody. Please use " +"it as a child of a VehicleBody." +msgstr "" + #: scene/gui/color_picker.cpp msgid "Raw Mode" msgstr "" #: scene/gui/color_picker.cpp +#, fuzzy msgid "Add current color as a preset" -msgstr "" +msgstr "Tambah warna sekarang sebagai preset" + +#: scene/gui/dialogs.cpp +msgid "Cancel" +msgstr "Batal" #: scene/gui/dialogs.cpp msgid "Alert!" @@ -7956,10 +7610,6 @@ msgstr "Peringatan!" msgid "Please Confirm..." msgstr "Mohon konfirmasi..." -#: scene/gui/input_action.cpp -msgid "Ctrl+" -msgstr "Ctrl+" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -7978,10 +7628,13 @@ msgid "" msgstr "" #: scene/main/scene_tree.cpp +#, fuzzy msgid "" "Default Environment as specified in Project Setings (Rendering -> Viewport -" "> Default Environment) could not be loaded." msgstr "" +"Lingkungan Baku yang ditetapkan di Pengaturan Proyek (Rendering -> Viewport -" +"> Lingkungan Baku) tidak dapat dimuat" #: scene/main/viewport.cpp #, fuzzy @@ -7997,6 +7650,102 @@ msgstr "" "sebuah RenderTarget dan tetapkannya tekstur internal untuk beberapa node " "untuk ditampilkan." +#: scene/resources/dynamic_font.cpp +msgid "Error initializing FreeType." +msgstr "Error menginisialisasi FreeType." + +#: scene/resources/dynamic_font.cpp +msgid "Unknown font format." +msgstr "Format font tidak diketahui." + +#: scene/resources/dynamic_font.cpp +msgid "Error loading font." +msgstr "Error memuat font." + +#: scene/resources/dynamic_font.cpp +msgid "Invalid font size." +msgstr "Ukuran font tidak sah." + +#~ msgid "Method List For '%s':" +#~ msgstr "Daftar Fungsi Untuk '%s':" + +#~ msgid "Arguments:" +#~ msgstr "Argumen:" + +#, fuzzy +#~ msgid "Return:" +#~ msgstr "Kembali:" + +#~ msgid "Added:" +#~ msgstr "Ditambahkan:" + +#~ msgid "Removed:" +#~ msgstr "Dihapus:" + +#~ msgid "Error saving atlas:" +#~ msgstr "Gagal menyimpan atlas:" + +#~ msgid "Could not save atlas subtexture:" +#~ msgstr "Tidak dapat menyimpan sub tekstur atlas:" + +#~ msgid "Exporting for %s" +#~ msgstr "Mengekspor untuk %s" + +#~ msgid "Setting Up.." +#~ msgstr "Mengatur.." + +#~ msgid "Error loading scene." +#~ msgstr "Gagal memuat scene." + +#~ msgid "Re-Import" +#~ msgstr "Impor Ulang" + +#~ msgid "Re-Importing" +#~ msgstr "Mengimpor ulang" + +#~ msgid "Loading Export Templates" +#~ msgstr "Memuat Ekspor Template-template." + +#, fuzzy +#~ msgid "Error moving file:\n" +#~ msgstr "Error menyimpan TileSet!" + +#~ msgid "Pick New Name and Location For:" +#~ msgstr "Tentukan Nama dan Lokasi Baru untuk:" + +#~ msgid "No files selected!" +#~ msgstr "Tidak ada berkas dipilih!" + +#~ msgid "Re-Import.." +#~ msgstr "Impor Ulang.." + +#, fuzzy +#~ msgid "Root Node Name:" +#~ msgstr "Nama Node:" + +#~ msgid "Texture Format" +#~ msgstr "Format Tekstur" + +#, fuzzy +#~ msgid "Texture Options" +#~ msgstr "Opsi Tekstur" + +#~ msgid "Error importing:" +#~ msgstr "Galat saat mengimpor:" + +#~ msgid "Max Texture Size:" +#~ msgstr "Ukuran Tekstur Maksimum:" + +#~ msgid "Project Path (Must Exist):" +#~ msgstr "Lokasi Projek (Harus Ada):" + +#, fuzzy +#~ msgid "Tiles" +#~ msgstr "File:" + +#~ msgid "Ctrl+" +#~ msgstr "Ctrl+" + #~ msgid "Close scene? (Unsaved changes will be lost)" #~ msgstr "Tutup scene? (Perubahan-perubahan yang belum disimpan akan hilang)" diff --git a/editor/translations/it.po b/editor/translations/it.po index 9ca5debd55..01a7ddfd49 100644 --- a/editor/translations/it.po +++ b/editor/translations/it.po @@ -3,6 +3,7 @@ # This file is distributed under the same license as the Godot source code. # # Dario Bonfanti <bonfi.96@hotmail.it>, 2016-2017. +# dariocavada <cavada@ectrlsolutions.com>, 2017. # Marco Melorio <m.melorio@icloud.com>, 2017. # RealAquilus <JamesHeller@live.it>, 2017. # @@ -10,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2017-08-21 16:46+0000\n" +"PO-Revision-Date: 2017-10-09 18:46+0000\n" "Last-Translator: Dario Bonfanti <bonfi.96@hotmail.it>\n" "Language-Team: Italian <https://hosted.weblate.org/projects/godot-engine/" "godot/it/>\n" @@ -195,10 +196,9 @@ msgid "Create %d NEW tracks and insert keys?" msgstr "Creare %d NUOVE tracce e inserire key?" #: editor/animation_editor.cpp editor/create_dialog.cpp -#: editor/editor_audio_buses.cpp +#: editor/editor_audio_buses.cpp editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp #: editor/plugins/mesh_instance_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp editor/project_manager.cpp #: editor/script_create_dialog.cpp msgid "Create" @@ -361,261 +361,6 @@ msgstr "Cambia Tipo del Valore Array" msgid "Change Array Value" msgstr "Cambia Valore Array" -#: editor/asset_library_editor_plugin.cpp -msgid "Free" -msgstr "Gratuito" - -#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp -msgid "Version:" -msgstr "Versione:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Contents:" -msgstr "Contenuti:" - -#: editor/asset_library_editor_plugin.cpp -msgid "View Files" -msgstr "Vedi Files" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_help.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp -msgid "Description:" -msgstr "Descrizione:" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -#: editor/project_manager.cpp -msgid "Install" -msgstr "Installa" - -#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp -#: editor/connections_dialog.cpp editor/export_template_manager.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -#: editor/project_settings_editor.cpp editor/property_editor.cpp -#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Close" -msgstr "Chiudi" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve hostname:" -msgstr "Impossibile risolvere l'hostname:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve." -msgstr "Impossibile risolvete." - -#: editor/asset_library_editor_plugin.cpp -msgid "Connection error, please try again." -msgstr "Errore di connessione, si prega di riprovare." - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't connect." -msgstr "Impossibile connettersi." - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't connect to host:" -msgstr "Impossibile connetersi all'host:" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response from host:" -msgstr "Nessuna risposta dall'host:" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response." -msgstr "Nessuna risposta." - -#: editor/asset_library_editor_plugin.cpp -msgid "Request failed, return code:" -msgstr "Richiesta fallita, codice di return:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Req. Failed." -msgstr "Rich. Fall." - -#: editor/asset_library_editor_plugin.cpp -msgid "Request failed, too many redirects" -msgstr "Richiesta fallita, troppi ridirezionamenti" - -#: editor/asset_library_editor_plugin.cpp -msgid "Redirect Loop." -msgstr "Ridirigi Loop." - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed:" -msgstr "Fallito:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Bad download hash, assuming file has been tampered with." -msgstr "Hash di download non buono, si presume il file sia stato manipolato." - -#: editor/asset_library_editor_plugin.cpp -msgid "Expected:" -msgstr "Previsto:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Got:" -msgstr "Ottenuto:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed sha256 hash check" -msgstr "Check hash sha256 fallito" - -#: editor/asset_library_editor_plugin.cpp -msgid "Asset Download Error:" -msgstr "Errore di Download Asset:" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -msgid "Success!" -msgstr "Successo!" - -#: editor/asset_library_editor_plugin.cpp -msgid "Fetching:" -msgstr "Recupero:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Resolving.." -msgstr "Risolvendo.." - -#: editor/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "Connettendo.." - -#: editor/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "Richiedendo.." - -#: editor/asset_library_editor_plugin.cpp -msgid "Error making request" -msgstr "Errore nel fare richiesta" - -#: editor/asset_library_editor_plugin.cpp -msgid "Idle" -msgstr "Inattivo" - -#: editor/asset_library_editor_plugin.cpp -msgid "Retry" -msgstr "Riprova" - -#: editor/asset_library_editor_plugin.cpp -msgid "Download Error" -msgstr "Errore durante il download" - -#: editor/asset_library_editor_plugin.cpp -msgid "Download for this asset is already in progress!" -msgstr "Il download per questo asset è già in corso!" - -#: editor/asset_library_editor_plugin.cpp -msgid "first" -msgstr "primo" - -#: editor/asset_library_editor_plugin.cpp -msgid "prev" -msgstr "prec" - -#: editor/asset_library_editor_plugin.cpp -msgid "next" -msgstr "seguente" - -#: editor/asset_library_editor_plugin.cpp -msgid "last" -msgstr "ultimo" - -#: editor/asset_library_editor_plugin.cpp -msgid "All" -msgstr "Tutti" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/property_selector.cpp editor/quick_open.cpp -#: editor/settings_config_dialog.cpp -msgid "Search:" -msgstr "Cerca:" - -#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Search" -msgstr "Cerca" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/project_manager.cpp -msgid "Import" -msgstr "Importa" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Plugins" -msgstr "Plugins" - -#: editor/asset_library_editor_plugin.cpp -msgid "Sort:" -msgstr "Ordina:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Reverse" -msgstr "Inverti" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Category:" -msgstr "Categoria:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Site:" -msgstr "Sito:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "Supporta.." - -#: editor/asset_library_editor_plugin.cpp -msgid "Official" -msgstr "Ufficiale" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -msgid "Community" -msgstr "Comunità " - -#: editor/asset_library_editor_plugin.cpp -msgid "Testing" -msgstr "Testing" - -#: editor/asset_library_editor_plugin.cpp -msgid "Assets ZIP File" -msgstr "ZIP File degli Asset" - -#: editor/call_dialog.cpp -msgid "Method List For '%s':" -msgstr "Lista Metodi Per '%s':" - -#: editor/call_dialog.cpp modules/visual_script/visual_script_editor.cpp -msgid "Call" -msgstr "Chiama" - -#: editor/call_dialog.cpp -msgid "Method List:" -msgstr "Lista Metodi:" - -#: editor/call_dialog.cpp -msgid "Arguments:" -msgstr "Argomenti:" - -#: editor/call_dialog.cpp -msgid "Return:" -msgstr "Ritorna:" - #: editor/code_editor.cpp msgid "Go to Line" msgstr "Vai alla Linea" @@ -652,6 +397,14 @@ msgstr "Parole Intere" msgid "Selection Only" msgstr "Solo Selezione" +#: editor/code_editor.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp +msgid "Search" +msgstr "Cerca" + #: editor/code_editor.cpp editor/editor_help.cpp msgid "Find" msgstr "Trova" @@ -684,11 +437,11 @@ msgstr "Richiedi Per Sostituire" msgid "Skip" msgstr "Salta" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom In" msgstr "Zoom In" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom Out" msgstr "Zoom Out" @@ -757,6 +510,20 @@ msgstr "Differita" msgid "Oneshot" msgstr "Oneshot" +#: editor/connections_dialog.cpp editor/dependency_editor.cpp +#: editor/export_template_manager.cpp +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Close" +msgstr "Chiudi" + #: editor/connections_dialog.cpp msgid "Connect" msgstr "Connetti" @@ -782,7 +549,7 @@ msgstr "Connetti.." msgid "Disconnect" msgstr "Disconnetti" -#: editor/connections_dialog.cpp editor/node_dock.cpp +#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" msgstr "Segnali" @@ -799,12 +566,25 @@ msgstr "Preferiti:" msgid "Recent:" msgstr "Recenti:" +#: editor/create_dialog.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp +#: editor/quick_open.cpp editor/settings_config_dialog.cpp +msgid "Search:" +msgstr "Cerca:" + #: editor/create_dialog.cpp editor/editor_help.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp #: editor/quick_open.cpp msgid "Matches:" msgstr "Corrispondenze:" +#: editor/create_dialog.cpp editor/editor_help.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp +#: editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "Descrizione:" + #: editor/dependency_editor.cpp msgid "Search Replacement For:" msgstr "Cerca Rimpiazzo Per:" @@ -864,6 +644,10 @@ msgid "Owners Of:" msgstr "Proprietari Di:" #: editor/dependency_editor.cpp +msgid "Remove selected files from the project? (no undo)" +msgstr "Rimuovi i file selezionati dal progetto? (no undo)" + +#: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" @@ -874,8 +658,9 @@ msgstr "" "Rimuoverli comunque? (no undo)" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (no undo)" -msgstr "Rimuovi i file selezionati dal progetto? (no undo)" +#, fuzzy +msgid "Cannot remove:\n" +msgstr "Impossibile risolvete." #: editor/dependency_editor.cpp msgid "Error loading:" @@ -941,19 +726,12 @@ msgid "Godot Engine contributors" msgstr "Contributori a Godot Engine" #: editor/editor_about.cpp -#, fuzzy -msgid "Authors" -msgstr "Autore:" - -#: editor/editor_about.cpp -#, fuzzy msgid "Project Founders" -msgstr "Gestione Progetti" +msgstr "Fondatori Progetto" #: editor/editor_about.cpp -#, fuzzy msgid "Lead Developer" -msgstr "Sviluppatori" +msgstr "Lead Developer" #: editor/editor_about.cpp editor/project_manager.cpp msgid "Project Manager" @@ -964,118 +742,155 @@ msgid "Developers" msgstr "Sviluppatori" #: editor/editor_about.cpp -msgid "License" +msgid "Authors" +msgstr "Autori" + +#: editor/editor_about.cpp +msgid "Platinum Sponsors" msgstr "" #: editor/editor_about.cpp -msgid "Thirdparty License" +msgid "Gold Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Mini Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Silver Donors" +msgstr "" + +#: editor/editor_about.cpp +#, fuzzy +msgid "Bronze Donors" +msgstr "Clona Sotto" + +#: editor/editor_about.cpp +msgid "Donors" msgstr "" #: editor/editor_about.cpp +msgid "License" +msgstr "Licenza" + +#: editor/editor_about.cpp +msgid "Thirdparty License" +msgstr "Licenza di Terze Parti" + +#: editor/editor_about.cpp msgid "" "Godot Engine relies on a number of thirdparty free and open source " "libraries, all compatible with the terms of its MIT license. The following " "is an exhaustive list of all such thirdparty components with their " "respective copyright statements and license terms." msgstr "" +"Godot Engine si appoggia su un numero di librerie gratuite ed open source, " +"tutte compatibili con la licenza MIT. La seguente é una lista esaustiva di " +"tali componenti di terze parti con le rispettive dichiarazioni di copyright " +"e termini di licenza." #: editor/editor_about.cpp -#, fuzzy msgid "All Components" -msgstr "Contenuti:" +msgstr "Tutte le Componenti" #: editor/editor_about.cpp -#, fuzzy msgid "Components" -msgstr "Contenuti:" +msgstr "Componenti" #: editor/editor_about.cpp msgid "Licenses" -msgstr "" +msgstr "Licenze" #: editor/editor_asset_installer.cpp editor/project_manager.cpp msgid "Error opening package file, not in zip format." -msgstr "" +msgstr "Errore aprendo il pacchetto file, non è un formato di tipo zip." #: editor/editor_asset_installer.cpp -#, fuzzy msgid "Uncompressing Assets" -msgstr "Decompressi" +msgstr "Decompressione Assets" #: editor/editor_asset_installer.cpp editor/project_manager.cpp msgid "Package Installed Successfully!" msgstr "Pacchetto Installato Con Successo!" #: editor/editor_asset_installer.cpp -#, fuzzy +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Success!" +msgstr "Successo!" + +#: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp +msgid "Install" +msgstr "Installa" + +#: editor/editor_asset_installer.cpp msgid "Package Installer" -msgstr "Pacchetto Installato Con Successo!" +msgstr "Installer Pacchetto" #: editor/editor_audio_buses.cpp msgid "Speakers" -msgstr "" +msgstr "Altoparlanti" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Add Effect" -msgstr "Aggiungi Evento" +msgstr "Aggiungi Effetto" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Rename Audio Bus" -msgstr "Apri Layout Audio Bus" +msgstr "Rinomina Bus Audio" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Toggle Audio Bus Solo" -msgstr "Apri Layout Audio Bus" +msgstr "Imposta Bus Audio su Solo" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Toggle Audio Bus Mute" -msgstr "Apri Layout Audio Bus" +msgstr "Imposta Bus Audio su Mute" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Bypass Effects" -msgstr "" +msgstr "Imposta Audio Bus Bypassa Effetti" #: editor/editor_audio_buses.cpp msgid "Select Audio Bus Send" -msgstr "" +msgstr "Seleziona Bus Audio Invio" #: editor/editor_audio_buses.cpp msgid "Add Audio Bus Effect" -msgstr "" +msgstr "Aggiungi un effetto Bus Audio" #: editor/editor_audio_buses.cpp msgid "Move Bus Effect" -msgstr "" +msgstr "Sposta effetti bus" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Delete Bus Effect" -msgstr "Elimina selezionati" +msgstr "Cancella effetto bus" #: editor/editor_audio_buses.cpp msgid "Audio Bus, Drag and Drop to rearrange." -msgstr "" - -#: editor/editor_audio_buses.cpp -#, fuzzy -msgid "Bus options" -msgstr "Opzioni subscena" +msgstr "Bus Audio, prendi e trascina per riordinare." #: editor/editor_audio_buses.cpp msgid "Solo" -msgstr "" +msgstr "Solo" #: editor/editor_audio_buses.cpp msgid "Mute" -msgstr "" +msgstr "Mute" #: editor/editor_audio_buses.cpp msgid "Bypass" -msgstr "" +msgstr "Bypassa" + +#: editor/editor_audio_buses.cpp +msgid "Bus options" +msgstr "Opzioni bus" #: editor/editor_audio_buses.cpp editor/plugins/tile_map_editor_plugin.cpp #: editor/scene_tree_dock.cpp @@ -1084,32 +899,37 @@ msgstr "duplica" #: editor/editor_audio_buses.cpp #, fuzzy +msgid "Reset Volume" +msgstr "Resetta Zoom" + +#: editor/editor_audio_buses.cpp msgid "Delete Effect" -msgstr "Elimina selezionati" +msgstr "Elimina Effetto" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Add Audio Bus" -msgstr "Aggiungi Bus" +msgstr "Aggiungi Bus Audio" #: editor/editor_audio_buses.cpp msgid "Master bus can't be deleted!" -msgstr "" +msgstr "Il bus principale non può essere cancellato!" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Delete Audio Bus" -msgstr "Elimina Layout" +msgstr "Elimina bus audio" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Duplicate Audio Bus" -msgstr "Duplica Animazione" +msgstr "Duplica bus audio" #: editor/editor_audio_buses.cpp #, fuzzy +msgid "Reset Bus Volume" +msgstr "Resetta Zoom" + +#: editor/editor_audio_buses.cpp msgid "Move Audio Bus" -msgstr "Azione di spostamento" +msgstr "Sposta bus audio" #: editor/editor_audio_buses.cpp msgid "Save Audio Bus Layout As.." @@ -1121,36 +941,32 @@ msgstr "Posizione per Nuovo Layout..." #: editor/editor_audio_buses.cpp msgid "Open Audio Bus Layout" -msgstr "Apri Layout Audio Bus" +msgstr "Apri Layout Bus Audio" #: editor/editor_audio_buses.cpp msgid "There is no 'res://default_bus_layout.tres' file." -msgstr "" +msgstr "Non esiste il file 'res://default_bus_layout.tres'." #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Invalid file, not an audio bus layout." -msgstr "" -"Estensione file invalida.\n" -"Si prega di usare .font." +msgstr "File non valido, non è un layout di tipo bus audio." #: editor/editor_audio_buses.cpp msgid "Add Bus" msgstr "Aggiungi Bus" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Create a new Bus Layout." -msgstr "Crea Nuova Risorsa" +msgstr "Crea nuovo layout di tipo bus." -#: editor/editor_audio_buses.cpp editor/script_create_dialog.cpp +#: editor/editor_audio_buses.cpp editor/property_editor.cpp +#: editor/script_create_dialog.cpp msgid "Load" msgstr "Carica" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Load an existing Bus Layout." -msgstr "Carica una risorsa esistente dal disco e modificala." +msgstr "Carica un layout esistente di tipo bus." #: editor/editor_audio_buses.cpp #: editor/plugins/animation_player_editor_plugin.cpp @@ -1158,18 +974,16 @@ msgid "Save As" msgstr "Salva Come" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Save this Bus Layout to a file." -msgstr "Salva Layout Bus Audio Come..." +msgstr "Salva questo layout di tipo bus in un file." #: editor/editor_audio_buses.cpp editor/import_dock.cpp -#, fuzzy msgid "Load Default" -msgstr "Default" +msgstr "Carica predefiniti" #: editor/editor_audio_buses.cpp msgid "Load the default Bus Layout." -msgstr "" +msgstr "Carica il layout di tipo bus predefinito." #: editor/editor_autoload_settings.cpp msgid "Invalid name." @@ -1242,7 +1056,7 @@ msgid "Rearrange Autoloads" msgstr "Riordina gli Autoload" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp scene/gui/file_dialog.cpp +#: scene/gui/file_dialog.cpp msgid "Path:" msgstr "Percorso:" @@ -1250,9 +1064,7 @@ msgstr "Percorso:" msgid "Node Name:" msgstr "Nome Nodo:" -#: editor/editor_autoload_settings.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp editor/project_manager.cpp +#: editor/editor_autoload_settings.cpp editor/project_manager.cpp msgid "Name" msgstr "Nome" @@ -1277,27 +1089,27 @@ msgid "Updating scene.." msgstr "Aggiornando la scena.." #: editor/editor_dir_dialog.cpp -#, fuzzy msgid "Please select a base directory first" -msgstr "Si prega di salvare prima la scena." +msgstr "Si prega di selezionare prima una directory di base" #: editor/editor_dir_dialog.cpp msgid "Choose a Directory" msgstr "Scegli una Directory" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Create Folder" msgstr "Crea Cartella" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: editor/editor_plugin_settings.cpp editor/plugins/theme_editor_plugin.cpp -#: editor/project_export.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp +#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp +#: scene/gui/file_dialog.cpp msgid "Name:" msgstr "Nome:" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Could not create folder." msgstr "Impossibile creare cartella." @@ -1317,30 +1129,6 @@ msgstr "Impacchettando" msgid "Template file not found:\n" msgstr "File template non trovato:\n" -#: editor/editor_export.cpp -msgid "Added:" -msgstr "Agginto:" - -#: editor/editor_export.cpp -msgid "Removed:" -msgstr "Rimosso:" - -#: editor/editor_export.cpp -msgid "Error saving atlas:" -msgstr "Errore di salvataggio dell'atlas:" - -#: editor/editor_export.cpp -msgid "Could not save atlas subtexture:" -msgstr "Impossibile salvare la substruttura dell'atlas:" - -#: editor/editor_export.cpp -msgid "Exporting for %s" -msgstr "Esportando per %s" - -#: editor/editor_export.cpp -msgid "Setting Up.." -msgstr "Impostando.." - #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "File Esistente, Sovrascrivere?" @@ -1425,6 +1213,11 @@ msgstr "Sposta Preferito Su" msgid "Move Favorite Down" msgstr "Sposta Preferito Giù" +#: editor/editor_file_dialog.cpp +#, fuzzy +msgid "Go to parent folder" +msgstr "Impossibile creare cartella." + #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Directories & Files:" msgstr "Directory e File:" @@ -1467,6 +1260,10 @@ msgstr "Lista Classi:" msgid "Search Classes" msgstr "Cerca Classi" +#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +msgid "Top" +msgstr "Alto" + #: editor/editor_help.cpp editor/property_editor.cpp msgid "Class:" msgstr "Classe:" @@ -1483,15 +1280,30 @@ msgstr "Ereditato da:" msgid "Brief Description:" msgstr "Breve Descrizione:" +#: editor/editor_help.cpp +#, fuzzy +msgid "Members" +msgstr "Membri:" + #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "Membri:" #: editor/editor_help.cpp +#, fuzzy +msgid "Public Methods" +msgstr "Metodi Pubblici:" + +#: editor/editor_help.cpp msgid "Public Methods:" msgstr "Metodi Pubblici:" #: editor/editor_help.cpp +#, fuzzy +msgid "GUI Theme Items" +msgstr "Elementi Tema GUI:" + +#: editor/editor_help.cpp msgid "GUI Theme Items:" msgstr "Elementi Tema GUI:" @@ -1501,53 +1313,85 @@ msgstr "Segnali:" #: editor/editor_help.cpp #, fuzzy +msgid "Enumerations" +msgstr "Enumerazioni:" + +#: editor/editor_help.cpp msgid "Enumerations:" -msgstr "Animazioni" +msgstr "Enumerazioni:" #: editor/editor_help.cpp msgid "enum " -msgstr "" +msgstr "enum " + +#: editor/editor_help.cpp +#, fuzzy +msgid "Constants" +msgstr "Costanti:" #: editor/editor_help.cpp msgid "Constants:" msgstr "Costanti:" #: editor/editor_help.cpp +#, fuzzy +msgid "Description" +msgstr "Descrizione:" + +#: editor/editor_help.cpp +#, fuzzy +msgid "Properties" +msgstr "Proprietà :" + +#: editor/editor_help.cpp msgid "Property Description:" msgstr "Descrizione Proprietà :" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this property. Please help us by " +"[color=$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp +#, fuzzy +msgid "Methods" +msgstr "Lista Metodi:" + +#: editor/editor_help.cpp msgid "Method Description:" msgstr "Descrizione Metodo:" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this method. Please help us by [color=" +"$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp msgid "Search Text" msgstr "Cerca Testo" #: editor/editor_log.cpp -#, fuzzy msgid "Output:" -msgstr " Output:" +msgstr "Output:" #: editor/editor_log.cpp editor/plugins/animation_tree_editor_plugin.cpp -#: editor/plugins/rich_text_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_editor_debugger.cpp scene/gui/line_edit.cpp -#: scene/gui/text_edit.cpp +#: editor/property_editor.cpp editor/script_editor_debugger.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Clear" msgstr "Rimuovi" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Error saving resource!" msgstr "Errore salvando la Risorsa!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Save Resource As.." msgstr "Salva Risorsa Come.." -#: editor/editor_node.cpp editor/export_template_manager.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "I see.." msgstr "Capisco.." @@ -1564,6 +1408,30 @@ msgid "Error while saving." msgstr "Errore durante il salvataggio." #: editor/editor_node.cpp +#, fuzzy +msgid "Can't open '%s'." +msgstr "Non posso operare su '..'" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Error while parsing '%s'." +msgstr "Errore durante il salvataggio." + +#: editor/editor_node.cpp +msgid "Unexpected end of file '%s'." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Missing '%s' or its dependencies." +msgstr "La scena '%s' ha rotto le dipendenze:" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Error while loading '%s'." +msgstr "Errore durante il salvataggio." + +#: editor/editor_node.cpp msgid "Saving Scene" msgstr "Salvataggio Scena" @@ -1576,9 +1444,9 @@ msgid "Creating Thumbnail" msgstr "Creazione Miniature" #: editor/editor_node.cpp -#, fuzzy msgid "This operation can't be done without a tree root." -msgstr "Questa operazione non può essere eseguita senza una scena." +msgstr "" +"Questa operazione non può essere eseguita senza una radice dell'albero." #: editor/editor_node.cpp msgid "" @@ -1624,6 +1492,33 @@ msgid "Restored default layout to base settings." msgstr "Ripristinato il layout di default ai settaggi di base." #: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was imported, so it's not editable.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was instanced or inherited.\n" +"Changes to it will not be kept when saving the current scene." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource was imported, so it's not editable. Change its settings in the " +"import panel and then re-import." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This scene was imported, so changes to it will not be kept.\n" +"Instancing it or inheriting will allow making changes to it.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp msgid "Copy Params" msgstr "Copia parametri" @@ -1712,13 +1607,12 @@ msgid "Quick Open Script.." msgstr "Apri Script Rapido.." #: editor/editor_node.cpp -#, fuzzy msgid "Save & Close" -msgstr "Salva un File" +msgstr "Salva e Chiudi" #: editor/editor_node.cpp msgid "Save changes to '%s' before closing?" -msgstr "" +msgstr "Salvare le modifiche a '%s' prima di chiudere?" #: editor/editor_node.cpp msgid "Save Scene As.." @@ -1749,9 +1643,8 @@ msgid "Export Tile Set" msgstr "Esporta Tile Set" #: editor/editor_node.cpp -#, fuzzy msgid "This operation can't be done without a selected node." -msgstr "Questa operazione non può essere eseguita senza una scena." +msgstr "Questa operazione non può essere eseguita senza un nodo selezionato." #: editor/editor_node.cpp msgid "Current scene not saved. Open anyway?" @@ -1782,22 +1675,27 @@ msgid "Exit the editor?" msgstr "Uscire dall'editor?" #: editor/editor_node.cpp -#, fuzzy msgid "Open Project Manager?" -msgstr "Gestione Progetti" +msgstr "Aprire Gestione Progetti?" #: editor/editor_node.cpp -#, fuzzy msgid "Save & Quit" -msgstr "Salva un File" +msgstr "Salva e Esci" #: editor/editor_node.cpp msgid "Save changes to the following scene(s) before quitting?" -msgstr "" +msgstr "Salvare le modifiche alle scene seguenti prima di uscire?" #: editor/editor_node.cpp msgid "Save changes the following scene(s) before opening Project Manager?" msgstr "" +"Salvare le modifiche alle scene seguenti prima di aprire il Manager Progetti?" + +#: editor/editor_node.cpp +msgid "" +"This option is deprecated. Situations where refresh must be forced are now " +"considered a bug. Please report." +msgstr "" #: editor/editor_node.cpp msgid "Pick a Main Scene" @@ -1805,19 +1703,20 @@ msgstr "Scegli una Scena Principale" #: editor/editor_node.cpp msgid "Unable to enable addon plugin at: '" -msgstr "" +msgstr "Non riesco ad abilitare il plugin aggiunto a: '" #: editor/editor_node.cpp msgid "' parsing of config failed." -msgstr "" +msgstr "' fallita lettura della configurazione." #: editor/editor_node.cpp msgid "Unable to find script field for addon plugin at: 'res://addons/" msgstr "" +"Impossibile trovare il campo per lo script aggiuntivo in: 'res://addons/" #: editor/editor_node.cpp msgid "Unable to load addon script from path: '" -msgstr "" +msgstr "Impossibile caricare uno script aggiuntivo dal percorso: '" #: editor/editor_node.cpp msgid "" @@ -1829,7 +1728,7 @@ msgstr "" "Per effettuare cambiamenti, puo essere creata una nuova scena ereditata." #: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Ugh" msgstr "Ugh" @@ -1843,14 +1742,15 @@ msgstr "" "progetto." #: editor/editor_node.cpp -msgid "Error loading scene." -msgstr "Errore di caricamento della scena." - -#: editor/editor_node.cpp msgid "Scene '%s' has broken dependencies:" msgstr "La scena '%s' ha rotto le dipendenze:" #: editor/editor_node.cpp +#, fuzzy +msgid "Clear Recent Scenes" +msgstr "Elimina File recenti" + +#: editor/editor_node.cpp msgid "Save Layout" msgstr "Salva layout" @@ -1880,11 +1780,10 @@ msgid "Distraction Free Mode" msgstr "Modalità Senza Distrazioni" #: editor/editor_node.cpp -#, fuzzy msgid "Toggle distraction-free mode." -msgstr "Modalità Senza Distrazioni" +msgstr "Abilita modalità senza distrazioni." -#: editor/editor_node.cpp editor/io_plugins/editor_scene_import_plugin.cpp +#: editor/editor_node.cpp msgid "Scene" msgstr "Scena" @@ -2122,6 +2021,10 @@ msgstr "Domande e Risposte" msgid "Issue Tracker" msgstr "Tracciatore Segnalazioni" +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +msgid "Community" +msgstr "Comunità " + #: editor/editor_node.cpp msgid "About" msgstr "Riguardo a" @@ -2130,7 +2033,7 @@ msgstr "Riguardo a" msgid "Play the project." msgstr "Esegui il progetto." -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Play" msgstr "Play" @@ -2146,7 +2049,7 @@ msgstr "Pausa Scena" msgid "Stop the scene." msgstr "Ferma la scena." -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Stop" msgstr "Stop" @@ -2219,6 +2122,16 @@ msgid "Object properties." msgstr "Proprietà oggetto." #: editor/editor_node.cpp +#, fuzzy +msgid "Changes may be lost!" +msgstr "Cambia Gruppo Immagine" + +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Import" +msgstr "Importa" + +#: editor/editor_node.cpp msgid "FileSystem" msgstr "FileSystem" @@ -2232,15 +2145,7 @@ msgstr "Output" #: editor/editor_node.cpp msgid "Don't Save" -msgstr "" - -#: editor/editor_node.cpp editor/editor_reimport_dialog.cpp -msgid "Re-Import" -msgstr "Re-Importa" - -#: editor/editor_node.cpp editor/editor_plugin_settings.cpp -msgid "Update" -msgstr "Aggiorna" +msgstr "Non salvare" #: editor/editor_node.cpp msgid "Import Templates From ZIP File" @@ -2267,9 +2172,8 @@ msgid "Open & Run a Script" msgstr "Apri e Esegui uno Script" #: editor/editor_node.cpp -#, fuzzy msgid "New Inherited" -msgstr "Nuova Scena Ereditata.." +msgstr "Nuova Ereditata" #: editor/editor_node.cpp msgid "Load Errors" @@ -2303,11 +2207,29 @@ msgstr "Apri l'Editor successivo" msgid "Open the previous Editor" msgstr "Apri l'Editor precedente" +#: editor/editor_plugin.cpp +#, fuzzy +msgid "Creating Mesh Previews" +msgstr "Creazione Libreria Mesh" + +#: editor/editor_plugin.cpp +msgid "Thumbnail.." +msgstr "Miniatura.." + #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" msgstr "Plugins Installati:" #: editor/editor_plugin_settings.cpp +msgid "Update" +msgstr "Aggiorna" + +#: editor/editor_plugin_settings.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Version:" +msgstr "Versione:" + +#: editor/editor_plugin_settings.cpp msgid "Author:" msgstr "Autore:" @@ -2359,35 +2281,18 @@ msgstr "Se stesso" msgid "Frame #:" msgstr "Frame #:" -#: editor/editor_reimport_dialog.cpp -msgid "Please wait for scan to complete." -msgstr "Si prega di attendere che lo scan venga completato." - -#: editor/editor_reimport_dialog.cpp -msgid "Current scene must be saved to re-import." -msgstr "La scena corrente deve essere salvata per re-importare." - -#: editor/editor_reimport_dialog.cpp -msgid "Save & Re-Import" -msgstr "Salva e Re-Importa" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Importing" -msgstr "Re-Importando" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Import Changed Resources" -msgstr "Re-Importando Risorse Cambiate" - #: editor/editor_run_native.cpp msgid "Select device from the list" -msgstr "" +msgstr "Seleziona il dispositivo dall'elenco" #: editor/editor_run_native.cpp msgid "" "No runnable export preset found for this platform.\n" "Please add a runnable preset in the export menu." msgstr "" +"Non sono stati trovati dei modelli di export eseguibili per questa " +"piattaforma.\n" +"Prego aggiungere un modello di export eseguibile nel menu export." #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." @@ -2490,10 +2395,6 @@ msgid "Importing:" msgstr "Importo:" #: editor/export_template_manager.cpp -msgid "Loading Export Templates" -msgstr "Caricamento Template d'Esportazione" - -#: editor/export_template_manager.cpp msgid "Current Version:" msgstr "Versione Corrente:" @@ -2528,62 +2429,79 @@ msgid "Cannot navigate to '" msgstr "Impossibile navigare a '" #: editor/filesystem_dock.cpp -#, fuzzy +msgid "View items as a grid of thumbnails" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "View items as a list" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "" "\n" -"Status: Needs Re-Import" -msgstr "Salva e Re-Importa" +"Status: Import of file failed. Please fix file and reimport manually." +msgstr "" #: editor/filesystem_dock.cpp -#, fuzzy msgid "" "\n" "Source: " -msgstr "Sorgente:" +msgstr "" +"\n" +"Sorgente: " #: editor/filesystem_dock.cpp -msgid "Same source and destination files, doing nothing." -msgstr "Stessi file di origine e e destinazione, non faccio nulla." +#, fuzzy +msgid "Cannot move/rename resources root." +msgstr "Impossibile caricare/processare il font sorgente." #: editor/filesystem_dock.cpp -msgid "Target file exists, can't overwrite. Delete first." -msgstr "" +#, fuzzy +msgid "Cannot move a folder into itself.\n" +msgstr "Impossibile importare un file su se stesso:" #: editor/filesystem_dock.cpp -msgid "Same source and destination paths, doing nothing." -msgstr "" -"Stessi percorsi \n" -"di origine e e destinazione, non faccio nulla." +#, fuzzy +msgid "Error moving:\n" +msgstr "Errore spostamento directory:\n" + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Unable to update dependencies:\n" +msgstr "La scena '%s' ha rotto le dipendenze:" #: editor/filesystem_dock.cpp -msgid "Can't move directories to within themselves." -msgstr "Impossibile muovere le directory dentro se stesse." +msgid "No name provided" +msgstr "" #: editor/filesystem_dock.cpp -msgid "Can't rename deps for:\n" +msgid "Provided name contains invalid characters" msgstr "" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Error moving file:\n" -msgstr "Errore di caricamento immagine:" +msgid "No name provided." +msgstr "Rinomina o Sposta.." #: editor/filesystem_dock.cpp #, fuzzy -msgid "Error moving dir:\n" -msgstr "Errore di importazione:" +msgid "Name contains invalid characters." +msgstr "Caratteri validi:" #: editor/filesystem_dock.cpp -msgid "Can't operate on '..'" -msgstr "Non posso operare su '..'" +#, fuzzy +msgid "A file or folder with this name already exists." +msgstr "Il nome del gruppo è già esistente!" #: editor/filesystem_dock.cpp -msgid "Pick New Name and Location For:" -msgstr "Scegli un Nuovo Nome e Posizione Per:" +#, fuzzy +msgid "Renaming file:" +msgstr "Rinomina Variabile" #: editor/filesystem_dock.cpp -msgid "No files selected!" -msgstr "Nessun File selezionato!" +#, fuzzy +msgid "Renaming folder:" +msgstr "Rinomina Nodo" #: editor/filesystem_dock.cpp msgid "Expand all" @@ -2594,40 +2512,38 @@ msgid "Collapse all" msgstr "Comprimi tutto" #: editor/filesystem_dock.cpp -msgid "Show In File Manager" -msgstr "Mostra nel File Manager" - -#: editor/filesystem_dock.cpp -msgid "Instance" -msgstr "Istanza" +msgid "Copy Path" +msgstr "Copia Percorso" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "Modifica Dipendenze.." +#, fuzzy +msgid "Rename.." +msgstr "Rinomina" #: editor/filesystem_dock.cpp -msgid "View Owners.." -msgstr "Vedi Proprietari.." +msgid "Move To.." +msgstr "Sposta in.." #: editor/filesystem_dock.cpp -msgid "Copy Path" -msgstr "Copia Percorso" +#, fuzzy +msgid "New Folder.." +msgstr "Crea Cartella" #: editor/filesystem_dock.cpp -msgid "Rename or Move.." -msgstr "Rinomina o Sposta.." +msgid "Show In File Manager" +msgstr "Mostra nel File Manager" #: editor/filesystem_dock.cpp -msgid "Move To.." -msgstr "Sposta in.." +msgid "Instance" +msgstr "Istanza" #: editor/filesystem_dock.cpp -msgid "Info" -msgstr "Info" +msgid "Edit Dependencies.." +msgstr "Modifica Dipendenze.." #: editor/filesystem_dock.cpp -msgid "Re-Import.." -msgstr "Re-Importa.." +msgid "View Owners.." +msgstr "Vedi Proprietari.." #: editor/filesystem_dock.cpp msgid "Previous Directory" @@ -2654,11 +2570,18 @@ msgid "" "Scanning Files,\n" "Please Wait.." msgstr "" +"Scansione File,\n" +"Si prega di attendere.." #: editor/filesystem_dock.cpp msgid "Move" msgstr "Sposta" +#: editor/filesystem_dock.cpp editor/plugins/animation_tree_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Rename" +msgstr "Rinomina" + #: editor/groups_editor.cpp msgid "Add to Group" msgstr "Aggiungi a Gruppo" @@ -2668,17 +2591,21 @@ msgid "Remove from Group" msgstr "Rimuovi da Gruppo" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Import as Single Scene" -msgstr "Importando Scena.." +msgstr "Importa come Scena Singola" + +#: editor/import/resource_importer_scene.cpp +#, fuzzy +msgid "Import with Separate Animations" +msgstr "Importa con Materiali Separati" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials" -msgstr "" +msgstr "Importa con Materiali Separati" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects" -msgstr "" +msgstr "Importa con Oggetti Separati" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects+Materials" @@ -2686,6 +2613,21 @@ msgstr "" #: editor/import/resource_importer_scene.cpp #, fuzzy +msgid "Import with Separate Objects+Animations" +msgstr "Importa con Oggetti Separati" + +#: editor/import/resource_importer_scene.cpp +#, fuzzy +msgid "Import with Separate Materials+Animations" +msgstr "Importa con Materiali Separati" + +#: editor/import/resource_importer_scene.cpp +#, fuzzy +msgid "Import with Separate Objects+Materials+Animations" +msgstr "Importa con Materiali Separati" + +#: editor/import/resource_importer_scene.cpp +#, fuzzy msgid "Import as Multiple Scenes" msgstr "Importa Scena 3D" @@ -2694,38 +2636,31 @@ msgid "Import as Multiple Scenes+Materials" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Import Scene" msgstr "Importa Scena" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Importing Scene.." msgstr "Importando Scena.." #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Running Custom Script.." msgstr "Eseguendo Script Personalizzato.." #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Couldn't load post-import script:" msgstr "Impossibile caricare lo script di post-import:" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Invalid/broken script for post-import (check console):" msgstr "Script di post-import invalido/non funzionante (controllare console):" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Error running post-import script:" msgstr "Errore di esecuzione dello script di post-import:" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Saving.." msgstr "Salvataggio.." @@ -2753,577 +2688,6 @@ msgstr "Preset.." msgid "Reimport" msgstr "Reimporta" -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "No bit masks to import!" -msgstr "Nessuna bit mask da importare!" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path is empty." -msgstr "Il percorso di destinazione vuoto." - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must be a complete resource path." -msgstr "" -"Il percorso di destinazione deve essere un percorso completo di risorsa." - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must exist." -msgstr "Il percorso di destinazione deve esistere." - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Save path is empty!" -msgstr "Il percorso di salvataggio è vuoto!" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Import BitMasks" -msgstr "Importa BitMasks" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s):" -msgstr "Texture Sorgenti:" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Target Path:" -msgstr "Percorso di destinazione:" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Accept" -msgstr "Accetta" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Bit Mask" -msgstr "Bit Mask" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No source font file!" -msgstr "Nessun file font sorgente!" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No target font resource!" -msgstr "Nessuna risorsa font di destinazione!" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "" -"Invalid file extension.\n" -"Please use .font." -msgstr "" -"Estensione file invalida.\n" -"Si prega di usare .font." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Can't load/process source font." -msgstr "Impossibile caricare/processare il font sorgente." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Couldn't save font." -msgstr "Impossibile salvare font." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font:" -msgstr "Font Sorgente:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font Size:" -msgstr "Dimensione Font sorgente:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Dest Resource:" -msgstr "Risorsa di destin. :" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "The quick brown fox jumps over the lazy dog." -msgstr "La rapida volpe bianca scavalca il cane pigro." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Test:" -msgstr "Test:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Options:" -msgstr "Opzioni:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Font Import" -msgstr "Importazione font" - -#: 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 "" -"Questo file è già un file font di Godot, si prega di fornire invece un file " -"di tipo BMfont." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Failed opening as BMFont file." -msgstr "Apertura come BMFont file fallita." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error initializing FreeType." -msgstr "Errore inizializzazione FreeType." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Unknown font format." -msgstr "Formato font sconosciuto." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error loading font." -msgstr "Errore caricamento font." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Invalid font size." -msgstr "Dimensione font Invalida." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Invalid font custom source." -msgstr "Sorgente font personalizzato invalido." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/plugins/theme_editor_plugin.cpp -msgid "Font" -msgstr "Font" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "No meshes to import!" -msgstr "Nessuna mesh da importare!" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Single Mesh Import" -msgstr "Importa Mesh Singola" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Source Mesh(es):" -msgstr "Mesh Sorgente(i):" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Mesh" -msgstr "Mesh" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Surface %d" -msgstr "Superficie %d" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "No samples to import!" -msgstr "Nessun sample da importare!" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Import Audio Samples" -msgstr "Importa Sample Audio" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Source Sample(s):" -msgstr "Sample Sorgente(i):" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Audio Sample" -msgstr "Sample Audio" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "New Clip" -msgstr "Nuova Clip" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Animation Options" -msgstr "Opzioni Animazione" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Flags" -msgstr "Flags" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Bake FPS:" -msgstr "Bake FPS:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Optimizer" -msgstr "Ottimizzatore" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Linear Error" -msgstr "Errore Lineare Max" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angular Error" -msgstr "Errore Angolare Max" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angle" -msgstr "Angolo Max" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Clips" -msgstr "Clips" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Start(s)" -msgstr "Inizio(i)" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "End(s)" -msgstr "Fine(i)" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Loop" -msgstr "Loop" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Filters" -msgstr "Filtri" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source path is empty." -msgstr "Il percorso sorgente è vuoto." - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't load post-import script." -msgstr "Impossibile caricare script di post-importazione." - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Invalid/broken script for post-import." -msgstr "Script di post-importazione invalido/non funzionante." - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Error importing scene." -msgstr "Errore di importazione scena." - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import 3D Scene" -msgstr "Importa Scena 3D" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source Scene:" -msgstr "Scena Sorgente:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Same as Target Scene" -msgstr "Stesso che Scena di Destinazione" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Shared" -msgstr "Condiviso" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Target Texture Folder:" -msgstr "Cartella Texture di Destinazione:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Post-Process Script:" -msgstr "Script di Post-Process:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Custom Root Node Type:" -msgstr "Tipo di Nodo Root Personalizzato:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Auto" -msgstr "Auto" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Root Node Name:" -msgstr "Nome Nodo di Root:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "The Following Files are Missing:" -msgstr "I File Seguenti sono Mancanti:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Anyway" -msgstr "Importa ComunqueImporta Comunque" - -#: editor/io_plugins/editor_scene_import_plugin.cpp scene/gui/dialogs.cpp -msgid "Cancel" -msgstr "Annulla" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import & Open" -msgstr "Importa e Apri" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Edited scene has not been saved, open imported scene anyway?" -msgstr "" -"La scena modificata non è stata salvata, aprire la scena importata comunque?" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Image:" -msgstr "Importa Immagine:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Can't import a file over itself:" -msgstr "Impossibile importare un file su se stesso:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't localize path: %s (already local)" -msgstr "Impossibile localizzare il percorso: %s (già locale)" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "3D Scene Animation" -msgstr "Animazione Scena 3D" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Uncompressed" -msgstr "Decompressi" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossless (PNG)" -msgstr "Comprimi Lossless (PNG)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossy (WebP)" -msgstr "Comprimi Lossy (WebP)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress (VRAM)" -msgstr "Comprimi (VRAM)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Format" -msgstr "Formato Texture" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Compression Quality (WebP):" -msgstr "Qualità Compressione Texture (WebP):" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Options" -msgstr "Opzioni Texture" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Please specify some files!" -msgstr "Si prega di specificare qualche file!" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "At least one file needed for Atlas." -msgstr "Almeno un file è richiesto per l'Atlas." - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Error importing:" -msgstr "Errore di importazione:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Only one file is required for large texture." -msgstr "Solo un file è richiesto per una texture grande." - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Max Texture Size:" -msgstr "Dimensione Texture Massima:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for Atlas (2D)" -msgstr "Importa Textures per Atlas (2D)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cell Size:" -msgstr "Dimensione Cella:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Large Texture" -msgstr "Texture Grande" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Textures (2D)" -msgstr "Importa Texture Grandi (2D)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture" -msgstr "Texture Sorgente" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Base Atlas Texture" -msgstr "Texture Base Atlas" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s)" -msgstr "Texture Sorgente(i)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 2D" -msgstr "Importa Textures per 2D" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 3D" -msgstr "Importa Textures per 3D" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures" -msgstr "Importa Textures" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "2D Texture" -msgstr "Texture 2D" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "3D Texture" -msgstr "Texture 3D" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Atlas Texture" -msgstr "Texture dell'Atlas" - -#: 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 "" -"NOTA: Importare texture 2D non è obbligatorio. Basta copiare i file png/jpg " -"nel progetto." - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Crop empty space." -msgstr "Ritaglia spazio vuoto." - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture" -msgstr "Texture" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Texture" -msgstr "Importa Texture Grande" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Load Source Image" -msgstr "Carica Immagine Sorgente" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Slicing" -msgstr "Taglio" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Inserting" -msgstr "Inserimento" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Saving" -msgstr "Salvataggio" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save large texture:" -msgstr "Impossibile salvare texture grande:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Build Atlas For:" -msgstr "Costruisci Atlas Per:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Loading Image:" -msgstr "Immagine Caricamento:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't load image:" -msgstr "Impossibile caricare immagine:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Converting Images" -msgstr "Convertendo Immagini" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cropping Images" -msgstr "Tagliando Immagini" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Blitting Images" -msgstr "Bliting Immagini" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save atlas image:" -msgstr "Impossibile salvare l'immagine di atlas:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save converted texture:" -msgstr "Impossibile salvare la texture convertita:" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid source!" -msgstr "Sorgente invalida!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid translation source!" -msgstr "Sorgente traduzione invalida!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Column" -msgstr "Colonna" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/script_create_dialog.cpp -msgid "Language" -msgstr "Linguaggio" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No items to import!" -msgstr "Nessun elemento da importare!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No target path!" -msgstr "Nessun percorso di destinazione!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translations" -msgstr "Importa Traduzioni" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Couldn't import!" -msgstr "Impossibile Importare!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translation" -msgstr "Importa Traduzione" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Source CSV:" -msgstr "CSV Sorgente:" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Ignore First Row" -msgstr "Ignora Prima Riga" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Compress" -msgstr "Comprimi" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Add to Project (project.godot)" -msgstr "Aggiungi a Progetto (project.godot)" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Languages:" -msgstr "Importa Lingue:" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Translation" -msgstr "Traduzione" - #: editor/multi_node_edit.cpp msgid "MultiNode Set" msgstr "MultiNode Set" @@ -3336,6 +2700,45 @@ msgstr "Gruppi" msgid "Select a Node to edit Signals and Groups." msgstr "Seleziona un Nodo per modificare Segnali e Gruppi." +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create Poly" +msgstr "Crea Poly" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly" +msgstr "Modifica Poly" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +#, fuzzy +msgid "Insert Point" +msgstr "Inserimento" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly (Remove Point)" +msgstr "Modifica Poly (Rimuovi Punto)" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Remove Poly And Point" +msgstr "Rimuovi Poligono e Punto" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create a new polygon from scratch." +msgstr "Crea un nuovo poligono dal nulla." + +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "" +"Edit existing polygon:\n" +"LMB: Move Point.\n" +"Ctrl+LMB: Split Segment.\n" +"RMB: Erase Point." +msgstr "" + #: editor/plugins/animation_player_editor_plugin.cpp msgid "Toggle Autoplay" msgstr "Abilità Autoplay" @@ -3490,7 +2893,6 @@ msgstr "Nome Animazione:" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp #: editor/script_create_dialog.cpp msgid "Error!" @@ -3601,10 +3003,6 @@ msgid "Delete Input" msgstr "Elimina Input" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Rename" -msgstr "Rinomina" - -#: editor/plugins/animation_tree_editor_plugin.cpp msgid "Animation tree is valid." msgstr "Animation tree valido." @@ -3660,64 +3058,181 @@ msgstr "Modifica Filtri Nodi" msgid "Filters.." msgstr "Filtri.." -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing %d Triangles:" -msgstr "Elaborazione %d Triangoli:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Free" +msgstr "Gratuito" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Contents:" +msgstr "Contenuti:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "View Files" +msgstr "Vedi Files" -#: editor/plugins/baked_light_baker.cpp -msgid "Triangle #" -msgstr "Triangolo #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve hostname:" +msgstr "Impossibile risolvere l'hostname:" -#: editor/plugins/baked_light_baker.cpp -msgid "Light Baker Setup:" -msgstr "Impostazioni Baker Luci:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve." +msgstr "Impossibile risolvete." -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing Geometry" -msgstr "Elaborazione Geometria" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connection error, please try again." +msgstr "Errore di connessione, si prega di riprovare." -#: editor/plugins/baked_light_baker.cpp -msgid "Fixing Lights" -msgstr "Aggiustando le Luci" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't connect." +msgstr "Impossibile connettersi." -#: editor/plugins/baked_light_baker.cpp -msgid "Making BVH" -msgstr "Creazione BVH" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't connect to host:" +msgstr "Impossibile connetersi all'host:" -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Light Octree" -msgstr "Creazione Octree Luci" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response from host:" +msgstr "Nessuna risposta dall'host:" -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Octree Texture" -msgstr "Creazione Octree Texture" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response." +msgstr "Nessuna risposta." -#: editor/plugins/baked_light_baker.cpp -msgid "Transfer to Lightmaps:" -msgstr "Trasferisci a Lightmap:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, return code:" +msgstr "Richiesta fallita, codice di return:" -#: editor/plugins/baked_light_baker.cpp -msgid "Allocating Texture #" -msgstr "Allocazione Texture #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Req. Failed." +msgstr "Rich. Fall." -#: editor/plugins/baked_light_baker.cpp -msgid "Baking Triangle #" -msgstr "Backing Triangoli #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, too many redirects" +msgstr "Richiesta fallita, troppi ridirezionamenti" -#: editor/plugins/baked_light_baker.cpp -msgid "Post-Processing Texture #" -msgstr "Texture Post-Processing #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Redirect Loop." +msgstr "Ridirigi Loop." -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Bake!" -msgstr "Bake!" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed:" +msgstr "Fallito:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Bad download hash, assuming file has been tampered with." +msgstr "Hash di download non buono, si presume il file sia stato manipolato." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Expected:" +msgstr "Previsto:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Got:" +msgstr "Ottenuto:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed sha256 hash check" +msgstr "Check hash sha256 fallito" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Asset Download Error:" +msgstr "Errore di Download Asset:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Fetching:" +msgstr "Recupero:" -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Reset the lightmap octree baking process (start over)." -msgstr "Resetta il processo di baking dell'octree (ricomincia da capo)." +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Resolving.." +msgstr "Risolvendo.." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connecting.." +msgstr "Connettendo.." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Requesting.." +msgstr "Richiedendo.." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Error making request" +msgstr "Errore nel fare richiesta" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Idle" +msgstr "Inattivo" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Retry" +msgstr "Riprova" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download Error" +msgstr "Errore durante il download" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download for this asset is already in progress!" +msgstr "Il download per questo asset è già in corso!" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "first" +msgstr "primo" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "prev" +msgstr "prec" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "next" +msgstr "seguente" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "last" +msgstr "ultimo" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "All" +msgstr "Tutti" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Plugins" +msgstr "Plugins" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Sort:" +msgstr "Ordina:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Reverse" +msgstr "Inverti" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Category:" +msgstr "Categoria:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Site:" +msgstr "Sito:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Support.." +msgstr "Supporta.." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Official" +msgstr "Ufficiale" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Testing" +msgstr "Testing" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Assets ZIP File" +msgstr "ZIP File degli Asset" #: editor/plugins/camera_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp msgid "Preview" msgstr "Anteprima" @@ -3760,12 +3275,18 @@ msgid "Edit CanvasItem" msgstr "Modifica CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Change Anchors" +#, fuzzy +msgid "Anchors only" +msgstr "Ancora" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Change Anchors and Margins" msgstr "Cambia Ancore" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom (%):" -msgstr "Zoom(%):" +msgid "Change Anchors" +msgstr "Cambia Ancore" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Paste Pose" @@ -3819,60 +3340,78 @@ msgid "Pan Mode" msgstr "Modalità di Pan" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Lock the selected object in place (can't be moved)." -msgstr "Blocca l'oggetto selezionato sul posto (non può essere mosso)." +#, fuzzy +msgid "Toggles snapping" +msgstr "Abilita Breakpoint" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Unlock the selected object (can be moved)." -msgstr "Sblocca l'oggetto selezionato (può essere mosso)." +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "Usa lo Snap" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Makes sure the object's children are not selectable." -msgstr "Accerta che I figli dell'oggetto non siano selezionabili." +#, fuzzy +msgid "Snapping options" +msgstr "Opzioni Animazione" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Restores the object's children's ability to be selected." -msgstr "Ripristina l'abilità dei figli dell'oggetto di essere selezionati." +#, fuzzy +msgid "Snap to grid" +msgstr "Modalità Snap:" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp -#: editor/project_settings_editor.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Edit" -msgstr "Modifica" +msgid "Use Rotation Snap" +msgstr "Usa lo Snap di Rotazione" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" -msgstr "Usa lo Snap" +#, fuzzy +msgid "Configure Snap..." +msgstr "Configura Snap..." #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" -msgstr "Mostra Griglia" +msgid "Snap Relative" +msgstr "Snap Relativo" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Rotation Snap" -msgstr "Usa lo Snap di Rotazione" +msgid "Use Pixel Snap" +msgstr "Usa Snap a Pixel" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap Relative" -msgstr "Snap Relativo" +msgid "Smart snapping" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "Configura Snap..." +#, fuzzy +msgid "Snap to parent" +msgstr "Espandi a Genitore" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Pixel Snap" -msgstr "Usa Snap a Pixel" +msgid "Snap to node anchor" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to node sides" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to other nodes" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Lock the selected object in place (can't be moved)." +msgstr "Blocca l'oggetto selezionato sul posto (non può essere mosso)." + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Unlock the selected object (can be moved)." +msgstr "Sblocca l'oggetto selezionato (può essere mosso)." + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Makes sure the object's children are not selectable." +msgstr "Accerta che I figli dell'oggetto non siano selezionabili." #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Skeleton.." -msgstr "Scheletro.." +msgid "Restores the object's children's ability to be selected." +msgstr "Ripristina l'abilità dei figli dell'oggetto di essere selezionati." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Make Bones" @@ -3900,12 +3439,19 @@ msgid "View" msgstr "Vista" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Reset" -msgstr "Zoom Reset" +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "Mostra Griglia" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Set.." -msgstr "Imposta Zoom.." +#, fuzzy +msgid "Show helpers" +msgstr "Mostra Ossa" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show rulers" +msgstr "Mostra Ossa" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -3916,8 +3462,9 @@ msgid "Frame Selection" msgstr "Selezione Frame" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Anchor" -msgstr "Ancora" +#, fuzzy +msgid "Layout" +msgstr "Salva layout" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Keys" @@ -3940,12 +3487,21 @@ msgid "Clear Pose" msgstr "Pulisci Posa" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Set a Value" -msgstr "Imposta un Valore" +msgid "Drag pivot from mouse position" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Set pivot at mouse position" +msgstr "Imposta Posizione Curve Out" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Multiply grid step by 2" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap (Pixels):" -msgstr "Snap (Pixels):" +msgid "Divide grid step by 2" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Add %s" @@ -3955,23 +3511,28 @@ msgstr "Aggiungi %s" msgid "Adding %s..." msgstr "Aggiungendo %s..." -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Create Node" msgstr "Crea Nodo" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Error instancing scene from %s" msgstr "Errore istanziamento scena da %s" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "OK :(" msgstr "OK :(" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "No parent to instance a child at." msgstr "Nessun genitore del quale istanziare un figlio." -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "This operation requires a single selected node." msgstr "Questa operazione richiede un solo nodo selezionato." @@ -3987,45 +3548,6 @@ msgstr "" "Premi & Trascina + Shift : Aggiungi nodo come fratello\n" "Premi & Trascina + Alt : Cambia tipo del nodo" -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Create Poly" -msgstr "Crea Poly" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly" -msgstr "Modifica Poly" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly (Remove Point)" -msgstr "Modifica Poly (Rimuovi Punto)" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Create a new polygon from scratch." -msgstr "Crea un nuovo poligono dal nulla." - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -msgid "" -"Edit existing polygon:\n" -"LMB: Move Point.\n" -"Ctrl+LMB: Split Segment.\n" -"RMB: Erase Point." -msgstr "" - #: editor/plugins/collision_polygon_editor_plugin.cpp msgid "Create Poly3D" msgstr "Crea Poly3D" @@ -4035,14 +3557,6 @@ msgid "Set Handle" msgstr "Imposta Maniglia" #: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Creating Mesh Library" -msgstr "Creazione Libreria Mesh" - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Thumbnail.." -msgstr "Miniatura.." - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Remove item %d?" msgstr "Rimuovi elemento %d?" @@ -4065,6 +3579,28 @@ msgid "Update from Scene" msgstr "Aggiorna da Scena" #: editor/plugins/curve_editor_plugin.cpp +msgid "Flat0" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Flat1" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +#, fuzzy +msgid "Ease in" +msgstr "Ease In" + +#: editor/plugins/curve_editor_plugin.cpp +#, fuzzy +msgid "Ease out" +msgstr "Ease Out" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Smoothstep" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp #, fuzzy msgid "Modify Curve Point" msgstr "Modifica Curva" @@ -4146,22 +3682,18 @@ msgid "Create Occluder Polygon" msgstr "Crea Poligono di occlusione" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Edit existing polygon:" msgstr "Modifica poligono esistente:" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "LMB: Move Point." msgstr "LMB: Sposta punto." #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Ctrl+LMB: Split Segment." msgstr "Ctrl+LMB: dividi Segmento." #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "RMB: Erase Point." msgstr "RMB: Elimina Punto." @@ -4262,6 +3794,10 @@ msgid "Create Outline" msgstr "Crea Outline" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh" +msgstr "Mesh" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Body" msgstr "Crea Corpo Statico Trimesh" @@ -4391,14 +3927,83 @@ msgstr "Scala Casuale:" msgid "Populate" msgstr "Popola" +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Bake!" +msgstr "Bake!" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +#, fuzzy +msgid "Bake the navigation mesh.\n" +msgstr "Crea Mesh di Navigazione" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +#, fuzzy +msgid "Clear the navigation mesh." +msgstr "Crea Mesh di Navigazione" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Setting up Configuration..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Calculating grid size..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Creating heightfield..." +msgstr "Creazione Octree Luci" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Marking walkable triangles..." +msgstr "Stringhe Traducibili.." + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Constructing compact heightfield..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Eroding walkable area..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Partioning..." +msgstr "Avvertimento" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Creating contours..." +msgstr "Creazione Octree Texture" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Creating polymesh..." +msgstr "Crea Mesh di Outline.." + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Converting to native navigation mesh..." +msgstr "Crea Mesh di Navigazione" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Navigation Mesh Generator Setup:" +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Parsing Geometry..." +msgstr "Elaborazione Geometria" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Done!" +msgstr "" + #: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Create Navigation Polygon" msgstr "Crea Poligono di Navigazione" -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Remove Poly And Point" -msgstr "Rimuovi Poligono e Punto" - #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Clear Emission Mask" msgstr "Cancella Maschera Emissione" @@ -4573,15 +4178,18 @@ msgid "Curve Point #" msgstr "Punto Curva #" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Point Pos" +#, fuzzy +msgid "Set Curve Point Position" msgstr "Imposta Posizione Punti curva" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve In Pos" +#, fuzzy +msgid "Set Curve In Position" msgstr "Imposta Posizione Curve In" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Out Pos" +#, fuzzy +msgid "Set Curve Out Position" msgstr "Imposta Posizione Curve Out" #: editor/plugins/path_editor_plugin.cpp @@ -4641,6 +4249,14 @@ msgid "Scale Polygon" msgstr "Scala Poligono" #: editor/plugins/polygon_2d_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit" +msgstr "Modifica" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon->UV" msgstr "Poligono->UV" @@ -4695,63 +4311,10 @@ msgstr "Carica Risorsa" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "Incolla" -#: editor/plugins/rich_text_editor_plugin.cpp -msgid "Parse BBCode" -msgstr "Decodifica BBCode" - -#: editor/plugins/sample_editor_plugin.cpp -msgid "Length:" -msgstr "Lunghezza:" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Open Sample File(s)" -msgstr "Apri File(s) Sample" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "ERROR: Couldn't load sample!" -msgstr "ERRORE: Impossibile caricare sample!" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Add Sample" -msgstr "Aggiungi Sample" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Rename Sample" -msgstr "Rinomina Sample" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Delete Sample" -msgstr "Elimina Sample" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "16 Bits" -msgstr "16 Bits" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "8 Bits" -msgstr "8 Bits" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Stereo" -msgstr "Stereo" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Mono" -msgstr "Mono" - -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/script_editor_debugger.cpp -msgid "Format" -msgstr "Formato" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Pitch" -msgstr "Pitch" - #: editor/plugins/script_editor_plugin.cpp msgid "Clear Recent Files" msgstr "Elimina File recenti" @@ -4842,6 +4405,10 @@ msgstr "Chiudi Documentazione" msgid "Close All" msgstr "Chiudi Tutto" +#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp +msgid "Run" +msgstr "Esegui" + #: editor/plugins/script_editor_plugin.cpp #, fuzzy msgid "Toggle Scripts Panel" @@ -4885,18 +4452,6 @@ msgid "Debug with external editor" msgstr "Apri l'Editor successivo" #: editor/plugins/script_editor_plugin.cpp -msgid "Window" -msgstr "Finestra" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Left" -msgstr "Sposta a Sinistra" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Right" -msgstr "Sposta a Destra" - -#: editor/plugins/script_editor_plugin.cpp msgid "Open Godot online documentation" msgstr "Apri la documentazione online di Godot" @@ -4983,7 +4538,7 @@ msgstr "Taglia" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Copy" msgstr "Copia" @@ -5247,10 +4802,6 @@ msgid "View Plane Transform." msgstr "Visualizza Tranform del Piano." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Scaling to %s%%." -msgstr "Scalando a %s%%." - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." msgstr "Ruotando di %s gradi." @@ -5267,10 +4818,6 @@ msgid "Top View." msgstr "Vista dall'Alto." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Top" -msgstr "Alto" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "Vista dal Retro." @@ -5502,6 +5049,10 @@ msgid "Transform" msgstr "Transform" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Configure Snap.." +msgstr "Configura Snap..." + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Local Coords" msgstr "Coordinate locali" @@ -5647,6 +5198,10 @@ msgid "Speed (FPS):" msgstr "Velocità (FPS):" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Loop" +msgstr "Loop" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animation Frames" msgstr "Frames Animazione" @@ -5659,12 +5214,14 @@ msgid "Insert Empty (After)" msgstr "Inserisci Vuoto (Dopo)" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Up" -msgstr "Su" +#, fuzzy +msgid "Move (Before)" +msgstr "Rimuovi nodo(i)" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Down" -msgstr "Giù" +#, fuzzy +msgid "Move (After)" +msgstr "Sposta a Sinistra" #: editor/plugins/style_box_editor_plugin.cpp msgid "StyleBox Preview:" @@ -5828,6 +5385,10 @@ msgid "Style" msgstr "Stile" #: editor/plugins/theme_editor_plugin.cpp +msgid "Font" +msgstr "Font" + +#: editor/plugins/theme_editor_plugin.cpp msgid "Color" msgstr "Colore" @@ -5879,8 +5440,9 @@ msgid "Mirror Y" msgstr "Specchia Y" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Bucket" -msgstr "Secchiello" +#, fuzzy +msgid "Paint Tile" +msgstr "Disegna TileMap" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Pick Tile" @@ -5943,6 +5505,11 @@ msgid "Delete preset '%s'?" msgstr "Eliminare preset '%s'?" #: editor/project_export.cpp +#, fuzzy +msgid "Export templates for this platform are missing/corrupted: " +msgstr "Le export templates per questa piattaforma sono mancanti:" + +#: editor/project_export.cpp msgid "Presets" msgstr "Presets" @@ -6019,30 +5586,61 @@ msgid "Export templates for this platform are missing:" msgstr "Le export templates per questa piattaforma sono mancanti:" #: editor/project_export.cpp +#, fuzzy +msgid "Export templates for this platform are missing/corrupted:" +msgstr "Le export templates per questa piattaforma sono mancanti:" + +#: editor/project_export.cpp msgid "Export With Debug" msgstr "Esporta Con Debug" #: editor/project_manager.cpp -msgid "Invalid project path, the path must exist!" -msgstr "Percorso di progetto invalido, il percorso deve esistere!" +#, fuzzy +msgid "The path does not exists." +msgstr "File non esistente." + +#: editor/project_manager.cpp +#, fuzzy +msgid "Please choose a 'project.godot' file." +msgstr "Si prega di esportare al di fuori della cartella del progetto!" #: editor/project_manager.cpp -msgid "Invalid project path, project.godot must not exist." -msgstr "Percorso di progetto invalido, project.godot non esiste." +msgid "" +"Your project will be created in a non empty folder (you might want to create " +"a new folder)." +msgstr "" #: editor/project_manager.cpp -msgid "Invalid project path, project.godot must exist." -msgstr "Percorso di progetto invalido, project.godot deve esistere." +msgid "Please choose a folder that does not contain a 'project.godot' file." +msgstr "" #: editor/project_manager.cpp msgid "Imported Project" msgstr "Progetto Importato" #: editor/project_manager.cpp +msgid " " +msgstr "" + +#: editor/project_manager.cpp +msgid "It would be a good idea to name your project." +msgstr "" + +#: editor/project_manager.cpp msgid "Invalid project path (changed anything?)." msgstr "Percorso di progetto invalido (cambiato qualcosa?)." #: editor/project_manager.cpp +#, fuzzy +msgid "Couldn't get project.godot in project path." +msgstr "Impossibile creare project.godot nel percorso di progetto." + +#: editor/project_manager.cpp +#, fuzzy +msgid "Couldn't edit project.godot in project path." +msgstr "Impossibile creare project.godot nel percorso di progetto." + +#: editor/project_manager.cpp msgid "Couldn't create project.godot in project path." msgstr "Impossibile creare project.godot nel percorso di progetto." @@ -6051,38 +5649,49 @@ msgid "The following files failed extraction from package:" msgstr "Impossibile estrarre i file seguenti dal pacchetto:" #: editor/project_manager.cpp +#, fuzzy +msgid "Rename Project" +msgstr "Progetto Senza Nome" + +#: editor/project_manager.cpp +#, fuzzy +msgid "Couldn't get project.godot in the project path." +msgstr "Impossibile creare project.godot nel percorso di progetto." + +#: editor/project_manager.cpp +msgid "New Game Project" +msgstr "Nuovo Progetto di Gioco" + +#: editor/project_manager.cpp msgid "Import Existing Project" msgstr "Importa Progetto Esistente" #: editor/project_manager.cpp -msgid "Project Path (Must Exist):" -msgstr "Percorso Progetto (Deve Esistere):" +msgid "Create New Project" +msgstr "Crea Nuovo Progetto" + +#: editor/project_manager.cpp +msgid "Install Project:" +msgstr "Installa Progetto:" #: editor/project_manager.cpp msgid "Project Name:" msgstr "Nome Progetto:" #: editor/project_manager.cpp -msgid "Create New Project" -msgstr "Crea Nuovo Progetto" +#, fuzzy +msgid "Create folder" +msgstr "Crea Cartella" #: editor/project_manager.cpp msgid "Project Path:" msgstr "Percorso Progetto:" #: editor/project_manager.cpp -msgid "Install Project:" -msgstr "Installa Progetto:" - -#: editor/project_manager.cpp msgid "Browse" msgstr "Sfoglia" #: editor/project_manager.cpp -msgid "New Game Project" -msgstr "Nuovo Progetto di Gioco" - -#: editor/project_manager.cpp msgid "That's a BINGO!" msgstr "Questo è un BINGO!" @@ -6091,6 +5700,11 @@ msgid "Unnamed Project" msgstr "Progetto Senza Nome" #: editor/project_manager.cpp +#, fuzzy +msgid "Can't open project" +msgstr "Impossibile connettersi." + +#: editor/project_manager.cpp msgid "Are you sure to open more than one project?" msgstr "Sei sicuro di voler aprire più di un progetto?" @@ -6132,10 +5746,6 @@ msgid "Project List" msgstr "Lista Progetti" #: editor/project_manager.cpp -msgid "Run" -msgstr "Esegui" - -#: editor/project_manager.cpp msgid "Scan" msgstr "Esamina" @@ -6193,17 +5803,14 @@ msgid "Add Input Action Event" msgstr "Aggiungi Evento di Azione Input" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Meta+" msgstr "Meta+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Shift+" msgstr "Shift+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Alt+" msgstr "Alt+" @@ -6264,7 +5871,7 @@ msgstr "Cambia" msgid "Joypad Axis Index:" msgstr "Indice Asse Joypad:" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Axis" msgstr "Asse" @@ -6284,31 +5891,31 @@ msgstr "Elimina Evento di Azione Input" msgid "Add Event" msgstr "Aggiungi Evento" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Device" msgstr "Dispositivo" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Button" msgstr "Pulsante" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Left Button." msgstr "Pulsante Sinistro." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Right Button." msgstr "Pulsante DEstro." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Middle Button." msgstr "Pulsante centrale." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Up." msgstr "Rotellina su." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Down." msgstr "Rotellina Giù." @@ -6318,7 +5925,7 @@ msgid "Add Global Property" msgstr "Aggiungi Proprietà Getter" #: editor/project_settings_editor.cpp -msgid "Select an setting item first!" +msgid "Select a setting item first!" msgstr "" #: editor/project_settings_editor.cpp @@ -6337,6 +5944,16 @@ msgid "Delete Item" msgstr "Elimina Input" #: editor/project_settings_editor.cpp +#, fuzzy +msgid "Can't contain '/' or ':'" +msgstr "Impossibile connetersi all'host:" + +#: editor/project_settings_editor.cpp +#, fuzzy +msgid "Already existing" +msgstr "Attiva Persistenza" + +#: editor/project_settings_editor.cpp msgid "Error saving settings." msgstr "Errore nel salvare le impostazioni." @@ -6486,10 +6103,20 @@ msgid "New Script" msgstr "Nuovo Script" #: editor/property_editor.cpp +#, fuzzy +msgid "Make Unique" +msgstr "Crea Ossa" + +#: editor/property_editor.cpp msgid "Show in File System" msgstr "Mostra nel File System" #: editor/property_editor.cpp +#, fuzzy +msgid "Convert To %s" +msgstr "Converti In.." + +#: editor/property_editor.cpp msgid "Error loading file: Not a resource!" msgstr "Errore caricamento file: Non è una risorsa!" @@ -6527,6 +6154,11 @@ msgid "Select Property" msgstr "Seleziona Proprietà " #: editor/property_selector.cpp +#, fuzzy +msgid "Select Virtual Method" +msgstr "Seleziona Metodo" + +#: editor/property_selector.cpp msgid "Select Method" msgstr "Seleziona Metodo" @@ -6554,26 +6186,6 @@ msgstr "Mantieni Transform Globale" msgid "Reparent" msgstr "Cambia Genitore" -#: editor/resources_dock.cpp -msgid "Create New Resource" -msgstr "Crea Nuova Risorsa" - -#: editor/resources_dock.cpp -msgid "Open Resource" -msgstr "Apri Risorsa" - -#: editor/resources_dock.cpp -msgid "Save Resource" -msgstr "Salva Risorsa" - -#: editor/resources_dock.cpp -msgid "Resource Tools" -msgstr "Strumenti Risorsa" - -#: editor/resources_dock.cpp -msgid "Make Local" -msgstr "Rendi Locale" - #: editor/run_settings_dialog.cpp msgid "Run Mode:" msgstr "Modalità esecuzione:" @@ -6704,14 +6316,6 @@ msgid "Sub-Resources:" msgstr "Sub-Risorse:" #: editor/scene_tree_dock.cpp -msgid "Edit Groups" -msgstr "Modifica Gruppi" - -#: editor/scene_tree_dock.cpp -msgid "Edit Connections" -msgstr "Modifica Connessioni" - -#: editor/scene_tree_dock.cpp msgid "Clear Inheritance" msgstr "Liberare ereditarietà " @@ -6908,6 +6512,15 @@ msgid "Invalid base path" msgstr "Percorso di base invalido" #: editor/script_create_dialog.cpp +msgid "Directory of the same name exists" +msgstr "" + +#: editor/script_create_dialog.cpp +#, fuzzy +msgid "File exists, will be reused" +msgstr "File Esistente, Sovrascrivere?" + +#: editor/script_create_dialog.cpp msgid "Invalid extension" msgstr "Estensione Invalida" @@ -6948,6 +6561,10 @@ msgid "Load existing script file" msgstr "Carica file script esistente" #: editor/script_create_dialog.cpp +msgid "Language" +msgstr "Linguaggio" + +#: editor/script_create_dialog.cpp msgid "Inherits" msgstr "Eredita" @@ -6988,6 +6605,10 @@ msgid "Function:" msgstr "Funzione:" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Errors" msgstr "Errori" @@ -7068,6 +6689,10 @@ msgid "Type" msgstr "Tipo" #: editor/script_editor_debugger.cpp +msgid "Format" +msgstr "Formato" + +#: editor/script_editor_debugger.cpp msgid "Usage" msgstr "Utilizzo" @@ -7143,12 +6768,30 @@ msgstr "Cambia AABB Particelle" msgid "Change Probe Extents" msgstr "Cambia Estensione Probe" +#: modules/gdnative/gd_native_library_editor.cpp +#, fuzzy +msgid "Library" +msgstr "MeshLibrary.." + +#: modules/gdnative/gd_native_library_editor.cpp +#, fuzzy +msgid "Status" +msgstr "Stato:" + +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Libraries: " +msgstr "" + +#: modules/gdnative/register_types.cpp +msgid "GDNative" +msgstr "" + #: 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/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "" @@ -7203,10 +6846,6 @@ msgid "GridMap Duplicate Selection" msgstr "Duplica Selezione" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Paint" -msgstr "" - -#: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy msgid "Snap View" msgstr "Vista dall'Alto" @@ -7310,13 +6949,8 @@ msgstr "Impostazioni Snap" msgid "Pick Distance:" msgstr "Istanza:" -#: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy -msgid "Tiles" -msgstr " Files" - -#: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Areas" +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "Builds" msgstr "" #: modules/visual_script/visual_script.cpp @@ -7527,10 +7161,18 @@ msgid "Return" msgstr "Ritorna" #: modules/visual_script/visual_script_editor.cpp +msgid "Call" +msgstr "Chiama" + +#: modules/visual_script/visual_script_editor.cpp msgid "Get" msgstr "Get" #: modules/visual_script/visual_script_editor.cpp +msgid "Script already has function '%s'" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Change Input Value" msgstr "Cambia Nome Input" @@ -7952,6 +7594,12 @@ msgstr "" "Una risorsa SpriteFrames deve essere creata o impostata nella proprietà " "'Frames' affinché AnimatedSprite3D mostri i frame." +#: scene/3d/vehicle_body.cpp +msgid "" +"VehicleWheel serves to provide a wheel system to a VehicleBody. Please use " +"it as a child of a VehicleBody." +msgstr "" + #: scene/gui/color_picker.cpp #, fuzzy msgid "Raw Mode" @@ -7962,6 +7610,10 @@ msgid "Add current color as a preset" msgstr "Aggiungi colore attuale come preset" #: scene/gui/dialogs.cpp +msgid "Cancel" +msgstr "Annulla" + +#: scene/gui/dialogs.cpp msgid "Alert!" msgstr "Attenzione!" @@ -7969,10 +7621,6 @@ msgstr "Attenzione!" msgid "Please Confirm..." msgstr "Per Favore Conferma..." -#: scene/gui/input_action.cpp -msgid "Ctrl+" -msgstr "Ctrl+" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -8013,6 +7661,625 @@ msgstr "" "Control, in modo che possa ottenere una dimensione. Altrimenti, renderlo un " "RenderTarget e assegnare alla sua texture interna qualche nodo da mostrare." +#: scene/resources/dynamic_font.cpp +msgid "Error initializing FreeType." +msgstr "Errore inizializzazione FreeType." + +#: scene/resources/dynamic_font.cpp +msgid "Unknown font format." +msgstr "Formato font sconosciuto." + +#: scene/resources/dynamic_font.cpp +msgid "Error loading font." +msgstr "Errore caricamento font." + +#: scene/resources/dynamic_font.cpp +msgid "Invalid font size." +msgstr "Dimensione font Invalida." + +#~ msgid "Method List For '%s':" +#~ msgstr "Lista Metodi Per '%s':" + +#~ msgid "Arguments:" +#~ msgstr "Argomenti:" + +#~ msgid "Return:" +#~ msgstr "Ritorna:" + +#~ msgid "Added:" +#~ msgstr "Agginto:" + +#~ msgid "Removed:" +#~ msgstr "Rimosso:" + +#~ msgid "Error saving atlas:" +#~ msgstr "Errore di salvataggio dell'atlas:" + +#~ msgid "Could not save atlas subtexture:" +#~ msgstr "Impossibile salvare la substruttura dell'atlas:" + +#~ msgid "Exporting for %s" +#~ msgstr "Esportando per %s" + +#~ msgid "Setting Up.." +#~ msgstr "Impostando.." + +#~ msgid "Error loading scene." +#~ msgstr "Errore di caricamento della scena." + +#~ msgid "Re-Import" +#~ msgstr "Re-Importa" + +#~ msgid "Please wait for scan to complete." +#~ msgstr "Si prega di attendere che lo scan venga completato." + +#~ msgid "Current scene must be saved to re-import." +#~ msgstr "La scena corrente deve essere salvata per re-importare." + +#~ msgid "Save & Re-Import" +#~ msgstr "Salva e Re-Importa" + +#~ msgid "Re-Importing" +#~ msgstr "Re-Importando" + +#~ msgid "Re-Import Changed Resources" +#~ msgstr "Re-Importando Risorse Cambiate" + +#~ msgid "Loading Export Templates" +#~ msgstr "Caricamento Template d'Esportazione" + +#~ msgid "" +#~ "\n" +#~ "Status: Needs Re-Import" +#~ msgstr "" +#~ "\n" +#~ "Stato: Richiede Re-Importazione" + +#~ msgid "Same source and destination files, doing nothing." +#~ msgstr "Stessi file di origine e e destinazione, non faccio nulla." + +#~ msgid "Target file exists, can't overwrite. Delete first." +#~ msgstr "" +#~ "Il file di destinazione esiste, non è possibile sovrascriverlo. Occorre " +#~ "prima cancellarlo." + +#~ msgid "Same source and destination paths, doing nothing." +#~ msgstr "" +#~ "Stessi percorsi \n" +#~ "di origine e e destinazione, non faccio nulla." + +#~ msgid "Can't move directories to within themselves." +#~ msgstr "Impossibile muovere le directory dentro se stesse." + +#~ msgid "Can't rename deps for:\n" +#~ msgstr "Impossibile rinominare dipendenze per:\n" + +#~ msgid "Error moving file:\n" +#~ msgstr "Errore spostamento file:\n" + +#~ msgid "Pick New Name and Location For:" +#~ msgstr "Scegli un Nuovo Nome e Posizione Per:" + +#~ msgid "No files selected!" +#~ msgstr "Nessun File selezionato!" + +#~ msgid "Info" +#~ msgstr "Info" + +#~ msgid "Re-Import.." +#~ msgstr "Re-Importa.." + +#~ msgid "No bit masks to import!" +#~ msgstr "Nessuna bit mask da importare!" + +#~ msgid "Target path is empty." +#~ msgstr "Il percorso di destinazione vuoto." + +#~ msgid "Target path must be a complete resource path." +#~ msgstr "" +#~ "Il percorso di destinazione deve essere un percorso completo di risorsa." + +#~ msgid "Target path must exist." +#~ msgstr "Il percorso di destinazione deve esistere." + +#~ msgid "Save path is empty!" +#~ msgstr "Il percorso di salvataggio è vuoto!" + +#~ msgid "Import BitMasks" +#~ msgstr "Importa BitMasks" + +#~ msgid "Source Texture(s):" +#~ msgstr "Texture Sorgenti:" + +#~ msgid "Target Path:" +#~ msgstr "Percorso di destinazione:" + +#~ msgid "Accept" +#~ msgstr "Accetta" + +#~ msgid "Bit Mask" +#~ msgstr "Bit Mask" + +#~ msgid "No source font file!" +#~ msgstr "Nessun file font sorgente!" + +#~ msgid "No target font resource!" +#~ msgstr "Nessuna risorsa font di destinazione!" + +#~ msgid "" +#~ "Invalid file extension.\n" +#~ "Please use .font." +#~ msgstr "" +#~ "Estensione file invalida.\n" +#~ "Si prega di usare .font." + +#~ msgid "Couldn't save font." +#~ msgstr "Impossibile salvare font." + +#~ msgid "Source Font:" +#~ msgstr "Font Sorgente:" + +#~ msgid "Source Font Size:" +#~ msgstr "Dimensione Font sorgente:" + +#~ msgid "Dest Resource:" +#~ msgstr "Risorsa di destin. :" + +#~ msgid "The quick brown fox jumps over the lazy dog." +#~ msgstr "La rapida volpe bianca scavalca il cane pigro." + +#~ msgid "Test:" +#~ msgstr "Test:" + +#~ msgid "Options:" +#~ msgstr "Opzioni:" + +#~ msgid "Font Import" +#~ msgstr "Importazione font" + +#~ msgid "" +#~ "This file is already a Godot font file, please supply a BMFont type file " +#~ "instead." +#~ msgstr "" +#~ "Questo file è già un file font di Godot, si prega di fornire invece un " +#~ "file di tipo BMfont." + +#~ msgid "Failed opening as BMFont file." +#~ msgstr "Apertura come BMFont file fallita." + +#~ msgid "Invalid font custom source." +#~ msgstr "Sorgente font personalizzato invalido." + +#~ msgid "No meshes to import!" +#~ msgstr "Nessuna mesh da importare!" + +#~ msgid "Single Mesh Import" +#~ msgstr "Importa Mesh Singola" + +#~ msgid "Source Mesh(es):" +#~ msgstr "Mesh Sorgente(i):" + +#~ msgid "Surface %d" +#~ msgstr "Superficie %d" + +#~ msgid "No samples to import!" +#~ msgstr "Nessun sample da importare!" + +#~ msgid "Import Audio Samples" +#~ msgstr "Importa Sample Audio" + +#~ msgid "Source Sample(s):" +#~ msgstr "Sample Sorgente(i):" + +#~ msgid "Audio Sample" +#~ msgstr "Sample Audio" + +#~ msgid "New Clip" +#~ msgstr "Nuova Clip" + +#~ msgid "Flags" +#~ msgstr "Flags" + +#~ msgid "Bake FPS:" +#~ msgstr "Bake FPS:" + +#~ msgid "Optimizer" +#~ msgstr "Ottimizzatore" + +#~ msgid "Max Linear Error" +#~ msgstr "Errore Lineare Max" + +#~ msgid "Max Angular Error" +#~ msgstr "Errore Angolare Max" + +#~ msgid "Max Angle" +#~ msgstr "Angolo Max" + +#~ msgid "Clips" +#~ msgstr "Clips" + +#~ msgid "Start(s)" +#~ msgstr "Inizio(i)" + +#~ msgid "End(s)" +#~ msgstr "Fine(i)" + +#~ msgid "Filters" +#~ msgstr "Filtri" + +#~ msgid "Source path is empty." +#~ msgstr "Il percorso sorgente è vuoto." + +#~ msgid "Couldn't load post-import script." +#~ msgstr "Impossibile caricare script di post-importazione." + +#~ msgid "Invalid/broken script for post-import." +#~ msgstr "Script di post-importazione invalido/non funzionante." + +#~ msgid "Error importing scene." +#~ msgstr "Errore di importazione scena." + +#~ msgid "Import 3D Scene" +#~ msgstr "Importa Scena 3D" + +#~ msgid "Source Scene:" +#~ msgstr "Scena Sorgente:" + +#~ msgid "Same as Target Scene" +#~ msgstr "Stesso che Scena di Destinazione" + +#~ msgid "Shared" +#~ msgstr "Condiviso" + +#~ msgid "Target Texture Folder:" +#~ msgstr "Cartella Texture di Destinazione:" + +#~ msgid "Post-Process Script:" +#~ msgstr "Script di Post-Process:" + +#~ msgid "Custom Root Node Type:" +#~ msgstr "Tipo di Nodo Root Personalizzato:" + +#~ msgid "Auto" +#~ msgstr "Auto" + +#~ msgid "Root Node Name:" +#~ msgstr "Nome Nodo di Root:" + +#~ msgid "The Following Files are Missing:" +#~ msgstr "I File Seguenti sono Mancanti:" + +#~ msgid "Import Anyway" +#~ msgstr "Importa ComunqueImporta Comunque" + +#~ msgid "Import & Open" +#~ msgstr "Importa e Apri" + +#~ msgid "Edited scene has not been saved, open imported scene anyway?" +#~ msgstr "" +#~ "La scena modificata non è stata salvata, aprire la scena importata " +#~ "comunque?" + +#~ msgid "Import Image:" +#~ msgstr "Importa Immagine:" + +#~ msgid "Couldn't localize path: %s (already local)" +#~ msgstr "Impossibile localizzare il percorso: %s (già locale)" + +#~ msgid "3D Scene Animation" +#~ msgstr "Animazione Scena 3D" + +#~ msgid "Uncompressed" +#~ msgstr "Decompressi" + +#~ msgid "Compress Lossless (PNG)" +#~ msgstr "Comprimi Lossless (PNG)" + +#~ msgid "Compress Lossy (WebP)" +#~ msgstr "Comprimi Lossy (WebP)" + +#~ msgid "Compress (VRAM)" +#~ msgstr "Comprimi (VRAM)" + +#~ msgid "Texture Format" +#~ msgstr "Formato Texture" + +#~ msgid "Texture Compression Quality (WebP):" +#~ msgstr "Qualità Compressione Texture (WebP):" + +#~ msgid "Texture Options" +#~ msgstr "Opzioni Texture" + +#~ msgid "Please specify some files!" +#~ msgstr "Si prega di specificare qualche file!" + +#~ msgid "At least one file needed for Atlas." +#~ msgstr "Almeno un file è richiesto per l'Atlas." + +#~ msgid "Error importing:" +#~ msgstr "Errore di importazione:" + +#~ msgid "Only one file is required for large texture." +#~ msgstr "Solo un file è richiesto per una texture grande." + +#~ msgid "Max Texture Size:" +#~ msgstr "Dimensione Texture Massima:" + +#~ msgid "Import Textures for Atlas (2D)" +#~ msgstr "Importa Textures per Atlas (2D)" + +#~ msgid "Cell Size:" +#~ msgstr "Dimensione Cella:" + +#~ msgid "Large Texture" +#~ msgstr "Texture Grande" + +#~ msgid "Import Large Textures (2D)" +#~ msgstr "Importa Texture Grandi (2D)" + +#~ msgid "Source Texture" +#~ msgstr "Texture Sorgente" + +#~ msgid "Base Atlas Texture" +#~ msgstr "Texture Base Atlas" + +#~ msgid "Source Texture(s)" +#~ msgstr "Texture Sorgente(i)" + +#~ msgid "Import Textures for 2D" +#~ msgstr "Importa Textures per 2D" + +#~ msgid "Import Textures for 3D" +#~ msgstr "Importa Textures per 3D" + +#~ msgid "Import Textures" +#~ msgstr "Importa Textures" + +#~ msgid "2D Texture" +#~ msgstr "Texture 2D" + +#~ msgid "3D Texture" +#~ msgstr "Texture 3D" + +#~ msgid "Atlas Texture" +#~ msgstr "Texture dell'Atlas" + +#~ msgid "" +#~ "NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files " +#~ "to the project." +#~ msgstr "" +#~ "NOTA: Importare texture 2D non è obbligatorio. Basta copiare i file png/" +#~ "jpg nel progetto." + +#~ msgid "Crop empty space." +#~ msgstr "Ritaglia spazio vuoto." + +#~ msgid "Texture" +#~ msgstr "Texture" + +#~ msgid "Import Large Texture" +#~ msgstr "Importa Texture Grande" + +#~ msgid "Load Source Image" +#~ msgstr "Carica Immagine Sorgente" + +#~ msgid "Slicing" +#~ msgstr "Taglio" + +#~ msgid "Saving" +#~ msgstr "Salvataggio" + +#~ msgid "Couldn't save large texture:" +#~ msgstr "Impossibile salvare texture grande:" + +#~ msgid "Build Atlas For:" +#~ msgstr "Costruisci Atlas Per:" + +#~ msgid "Loading Image:" +#~ msgstr "Immagine Caricamento:" + +#~ msgid "Couldn't load image:" +#~ msgstr "Impossibile caricare immagine:" + +#~ msgid "Converting Images" +#~ msgstr "Convertendo Immagini" + +#~ msgid "Cropping Images" +#~ msgstr "Tagliando Immagini" + +#~ msgid "Blitting Images" +#~ msgstr "Bliting Immagini" + +#~ msgid "Couldn't save atlas image:" +#~ msgstr "Impossibile salvare l'immagine di atlas:" + +#~ msgid "Couldn't save converted texture:" +#~ msgstr "Impossibile salvare la texture convertita:" + +#~ msgid "Invalid source!" +#~ msgstr "Sorgente invalida!" + +#~ msgid "Invalid translation source!" +#~ msgstr "Sorgente traduzione invalida!" + +#~ msgid "Column" +#~ msgstr "Colonna" + +#~ msgid "No items to import!" +#~ msgstr "Nessun elemento da importare!" + +#~ msgid "No target path!" +#~ msgstr "Nessun percorso di destinazione!" + +#~ msgid "Import Translations" +#~ msgstr "Importa Traduzioni" + +#~ msgid "Couldn't import!" +#~ msgstr "Impossibile Importare!" + +#~ msgid "Import Translation" +#~ msgstr "Importa Traduzione" + +#~ msgid "Source CSV:" +#~ msgstr "CSV Sorgente:" + +#~ msgid "Ignore First Row" +#~ msgstr "Ignora Prima Riga" + +#~ msgid "Compress" +#~ msgstr "Comprimi" + +#~ msgid "Add to Project (project.godot)" +#~ msgstr "Aggiungi a Progetto (project.godot)" + +#~ msgid "Import Languages:" +#~ msgstr "Importa Lingue:" + +#~ msgid "Translation" +#~ msgstr "Traduzione" + +#~ msgid "Parsing %d Triangles:" +#~ msgstr "Elaborazione %d Triangoli:" + +#~ msgid "Triangle #" +#~ msgstr "Triangolo #" + +#~ msgid "Light Baker Setup:" +#~ msgstr "Impostazioni Baker Luci:" + +#~ msgid "Fixing Lights" +#~ msgstr "Aggiustando le Luci" + +#~ msgid "Making BVH" +#~ msgstr "Creazione BVH" + +#~ msgid "Transfer to Lightmaps:" +#~ msgstr "Trasferisci a Lightmap:" + +#~ msgid "Allocating Texture #" +#~ msgstr "Allocazione Texture #" + +#~ msgid "Baking Triangle #" +#~ msgstr "Backing Triangoli #" + +#~ msgid "Post-Processing Texture #" +#~ msgstr "Texture Post-Processing #" + +#~ msgid "Reset the lightmap octree baking process (start over)." +#~ msgstr "Resetta il processo di baking dell'octree (ricomincia da capo)." + +#~ msgid "Zoom (%):" +#~ msgstr "Zoom(%):" + +#~ msgid "Skeleton.." +#~ msgstr "Scheletro.." + +#~ msgid "Zoom Reset" +#~ msgstr "Zoom Reset" + +#~ msgid "Zoom Set.." +#~ msgstr "Imposta Zoom.." + +#~ msgid "Set a Value" +#~ msgstr "Imposta un Valore" + +#~ msgid "Snap (Pixels):" +#~ msgstr "Snap (Pixels):" + +#~ msgid "Parse BBCode" +#~ msgstr "Decodifica BBCode" + +#~ msgid "Length:" +#~ msgstr "Lunghezza:" + +#~ msgid "Open Sample File(s)" +#~ msgstr "Apri File(s) Sample" + +#~ msgid "ERROR: Couldn't load sample!" +#~ msgstr "ERRORE: Impossibile caricare sample!" + +#~ msgid "Add Sample" +#~ msgstr "Aggiungi Sample" + +#~ msgid "Rename Sample" +#~ msgstr "Rinomina Sample" + +#~ msgid "Delete Sample" +#~ msgstr "Elimina Sample" + +#~ msgid "16 Bits" +#~ msgstr "16 Bits" + +#~ msgid "8 Bits" +#~ msgstr "8 Bits" + +#~ msgid "Stereo" +#~ msgstr "Stereo" + +#~ msgid "Mono" +#~ msgstr "Mono" + +#~ msgid "Pitch" +#~ msgstr "Pitch" + +#~ msgid "Window" +#~ msgstr "Finestra" + +#~ msgid "Move Right" +#~ msgstr "Sposta a Destra" + +#~ msgid "Scaling to %s%%." +#~ msgstr "Scalando a %s%%." + +#~ msgid "Up" +#~ msgstr "Su" + +#~ msgid "Down" +#~ msgstr "Giù" + +#~ msgid "Bucket" +#~ msgstr "Secchiello" + +#~ msgid "Invalid project path, the path must exist!" +#~ msgstr "Percorso di progetto invalido, il percorso deve esistere!" + +#~ msgid "Invalid project path, project.godot must not exist." +#~ msgstr "Percorso di progetto invalido, project.godot non esiste." + +#~ msgid "Invalid project path, project.godot must exist." +#~ msgstr "Percorso di progetto invalido, project.godot deve esistere." + +#~ msgid "Project Path (Must Exist):" +#~ msgstr "Percorso Progetto (Deve Esistere):" + +#~ msgid "Create New Resource" +#~ msgstr "Crea Nuova Risorsa" + +#~ msgid "Open Resource" +#~ msgstr "Apri Risorsa" + +#~ msgid "Save Resource" +#~ msgstr "Salva Risorsa" + +#~ msgid "Resource Tools" +#~ msgstr "Strumenti Risorsa" + +#~ msgid "Make Local" +#~ msgstr "Rendi Locale" + +#~ msgid "Edit Groups" +#~ msgstr "Modifica Gruppi" + +#~ msgid "Edit Connections" +#~ msgstr "Modifica Connessioni" + +#, fuzzy +#~ msgid "Tiles" +#~ msgstr " Files" + +#~ msgid "Ctrl+" +#~ msgstr "Ctrl+" + #~ msgid "Close scene? (Unsaved changes will be lost)" #~ msgstr "Chiudi scena? (I cambiamenti non salvati saranno persi)" @@ -8026,9 +8293,6 @@ msgstr "" #~ msgid "Close Goto Prev. Scene" #~ msgstr "Vai a Scena Preced." -#~ msgid "Expand to Parent" -#~ msgstr "Espandi a Genitore" - #~ msgid "Del" #~ msgstr "Elim." @@ -8205,18 +8469,12 @@ msgstr "" #~ msgid "Save Translatable Strings" #~ msgstr "Salva Stringhe Traducibili" -#~ msgid "Translatable Strings.." -#~ msgstr "Stringhe Traducibili.." - #~ msgid "Install Export Templates" #~ msgstr "Installa Template di Esportazione" #~ msgid "Edit Script Options" #~ msgstr "Modifica le opzioni di script" -#~ msgid "Please export outside the project folder!" -#~ msgstr "Si prega di esportare al di fuori della cartella del progetto!" - #~ msgid "Error exporting project!" #~ msgstr "Errore di esportazione del progetto!" @@ -8275,18 +8533,12 @@ msgstr "" #~ msgid "Include" #~ msgstr "Includi" -#~ msgid "Change Image Group" -#~ msgstr "Cambia Gruppo Immagine" - #~ msgid "Group name can't be empty!" #~ msgstr "Il nome del gruppo non può essere vuoto!" #~ msgid "Invalid character in group name!" #~ msgstr "Carattere invalido nel nome del gruppo!" -#~ msgid "Group name already exists!" -#~ msgstr "Il nome del gruppo è già esistente!" - #~ msgid "Add Image Group" #~ msgstr "Aggiungi Gruppo Immagini" @@ -8434,9 +8686,6 @@ msgstr "" #~ msgid "Lighting" #~ msgstr "Illuminazione" -#~ msgid "Toggle Persisting" -#~ msgstr "Attiva Persistenza" - #~ msgid "Global" #~ msgstr "Globale" diff --git a/editor/translations/ja.po b/editor/translations/ja.po index 0cbbe217bb..fa60fc2e5a 100644 --- a/editor/translations/ja.po +++ b/editor/translations/ja.po @@ -3,7 +3,7 @@ # This file is distributed under the same license as the Godot source code. # # akirakido <achts.y@gmail.com>, 2016-2017. -# hopping tappy (ãŸã£ã´ã•ã‚“) <hopping.tappy@gmail.com>, 2016. +# hopping tappy (ãŸã£ã´ã•ã‚“) <hopping.tappy@gmail.com>, 2016-2017. # Lexi Grafen <shfeedly@gmail.com>, 2017. # Tetsuji Ochiai <ochiaixp@gmail.com>, 2017. # Tohru Ike (rokujyouhitoma) <rokujyouhitomajp@gmail.com>, 2017. @@ -11,15 +11,15 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2017-07-27 05:10+0000\n" -"Last-Translator: Tetsuji Ochiai <ochiaixp@gmail.com>\n" +"PO-Revision-Date: 2017-08-28 04:47+0000\n" +"Last-Translator: hopping tappy <hopping.tappy@gmail.com>\n" "Language-Team: Japanese <https://hosted.weblate.org/projects/godot-engine/" "godot/ja/>\n" "Language: ja\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.16-dev\n" +"X-Generator: Weblate 2.17-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -211,10 +211,9 @@ msgid "Create %d NEW tracks and insert keys?" msgstr "æ–°ã—ã„ %d トラックを作æˆã—ã€ã‚ーを挿入ã—ã¾ã™ã‹ï¼Ÿ" #: editor/animation_editor.cpp editor/create_dialog.cpp -#: editor/editor_audio_buses.cpp +#: editor/editor_audio_buses.cpp editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp #: editor/plugins/mesh_instance_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp editor/project_manager.cpp #: editor/script_create_dialog.cpp msgid "Create" @@ -378,313 +377,6 @@ msgstr "é…列ã®å€¤ã®ç¨®é¡žã®å¤‰æ›´" msgid "Change Array Value" msgstr "é…列ã®å€¤ã‚’変更" -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Free" -msgstr "解放" - -#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp -#, fuzzy -msgid "Version:" -msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³:" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Contents:" -msgstr "コンテンツ:" - -#: editor/asset_library_editor_plugin.cpp -msgid "View Files" -msgstr "ビューファイル:" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_help.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp -#, fuzzy -msgid "Description:" -msgstr "記述:" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -#: editor/project_manager.cpp -#, fuzzy -msgid "Install" -msgstr "インストール" - -#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp -#: editor/connections_dialog.cpp editor/export_template_manager.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -#: editor/project_settings_editor.cpp editor/property_editor.cpp -#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Close" -msgstr "é–‰ã˜ã‚‹" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve hostname:" -msgstr "ホストåを解決ã§ãã¾ã›ã‚“:" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Can't resolve." -msgstr "解決ã§ãã¾ã›ã‚“." - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Connection error, please try again." -msgstr "接続失敗 å†è©¦è¡Œã‚’" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Can't connect." -msgstr "接続失敗." - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Can't connect to host:" -msgstr "ãƒ›ã‚¹ãƒˆã«æŽ¥ç¶šã§ãã¾ã›ã‚“:" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "No response from host:" -msgstr "ホストã‹ã‚‰å¿œç”ãŒã‚りã¾ã›ã‚“:" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "No response." -msgstr "応ç”ãŒã‚りã¾ã›ã‚“." - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Request failed, return code:" -msgstr "リクエスト失敗 リターン コード:" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Req. Failed." -msgstr "リクエスト失敗." - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Request failed, too many redirects" -msgstr "リクエスト失敗 リダイレクトã®å›žæ•°ãŒå¤šã™ãŽã¾ã™" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Redirect Loop." -msgstr "リダイレクトã®ãƒ«ãƒ¼ãƒ—." - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Failed:" -msgstr "失敗:" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Bad download hash, assuming file has been tampered with." -msgstr "ダウンãƒãƒ¼ãƒ‰å†…容ã®ãƒãƒƒã‚·ãƒ¥ãŒä¸æ•´åˆã€€æ”¹ã–ã‚“ã®å¯èƒ½æ€§ãŒã‚りã¾ã™." - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Expected:" -msgstr "予測:" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Got:" -msgstr "å–å¾—:" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Failed sha256 hash check" -msgstr "sha256ã®ãƒãƒƒã‚·ãƒ¥ãƒã‚§ãƒƒã‚¯å¤±æ•—" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Asset Download Error:" -msgstr "アセットã®ãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰å¤±æ•—:" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -#, fuzzy -msgid "Success!" -msgstr "æˆåŠŸï¼" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Fetching:" -msgstr "å–å¾—ä¸:" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Resolving.." -msgstr "解決ä¸.." - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Connecting.." -msgstr "接続ä¸.." - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Requesting.." -msgstr "リクエストä¸.." - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Error making request" -msgstr "リクエスト発行エラー" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Idle" -msgstr "待機ä¸" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Retry" -msgstr "å†è©¦è¡Œ" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Download Error" -msgstr "ダウンãƒãƒ¼ãƒ‰å¤±æ•—" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Download for this asset is already in progress!" -msgstr "ã“ã®ã‚¢ã‚»ãƒƒãƒˆã®ãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰ã¯æ—¢ã«é€²è¡Œä¸ï¼" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "first" -msgstr "最åˆã®" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "prev" -msgstr "å‰ã®" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "next" -msgstr "次ã®" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "last" -msgstr "最後ã®" - -#: editor/asset_library_editor_plugin.cpp -msgid "All" -msgstr "ã™ã¹ã¦ã®" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/property_selector.cpp editor/quick_open.cpp -#: editor/settings_config_dialog.cpp -#, fuzzy -msgid "Search:" -msgstr "検索:" - -#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp -#, fuzzy -msgid "Search" -msgstr "検索" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/project_manager.cpp -msgid "Import" -msgstr "インãƒãƒ¼ãƒˆï¼ˆå–り込ã¿ï¼‰" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -#, fuzzy -msgid "Plugins" -msgstr "プラグイン" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Sort:" -msgstr "ä¸¦ã¹æ›¿ãˆ:" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Reverse" -msgstr "逆" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -#, fuzzy -msgid "Category:" -msgstr "カテゴリー:" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Site:" -msgstr "サイト:" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Support.." -msgstr "サãƒãƒ¼ãƒˆ.." - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Official" -msgstr "å…¬å¼" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -#, fuzzy -msgid "Community" -msgstr "コミュニティ" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Testing" -msgstr "テストä¸" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Assets ZIP File" -msgstr "アセットã®zipファイル" - -#: editor/call_dialog.cpp -#, fuzzy -msgid "Method List For '%s':" -msgstr "'%s' ã®ãƒ¡ã‚½ãƒƒãƒ‰ä¸€è¦§ï¼š" - -#: editor/call_dialog.cpp modules/visual_script/visual_script_editor.cpp -#, fuzzy -msgid "Call" -msgstr "呼ã³å‡ºã—" - -#: editor/call_dialog.cpp -#, fuzzy -msgid "Method List:" -msgstr "メソッド一覧:" - -#: editor/call_dialog.cpp -#, fuzzy -msgid "Arguments:" -msgstr "引数:" - -#: editor/call_dialog.cpp -#, fuzzy -msgid "Return:" -msgstr "戻り値:" - #: editor/code_editor.cpp #, fuzzy msgid "Go to Line" @@ -730,6 +422,15 @@ msgstr "å˜èªžå…¨ä½“" msgid "Selection Only" msgstr "é¸æŠžç¯„å›²ã®ã¿" +#: editor/code_editor.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp +#, fuzzy +msgid "Search" +msgstr "検索" + #: editor/code_editor.cpp editor/editor_help.cpp #, fuzzy msgid "Find" @@ -769,12 +470,12 @@ msgstr "ç½®æ›æ™‚ã«ç¢ºèª" msgid "Skip" msgstr "スã‚ップ" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp #, fuzzy msgid "Zoom In" msgstr "ズームイン" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp #, fuzzy msgid "Zoom Out" msgstr "ズームアウト" @@ -855,6 +556,20 @@ msgstr "é…å»¶" msgid "Oneshot" msgstr "一括" +#: editor/connections_dialog.cpp editor/dependency_editor.cpp +#: editor/export_template_manager.cpp +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Close" +msgstr "é–‰ã˜ã‚‹" + #: editor/connections_dialog.cpp #, fuzzy msgid "Connect" @@ -886,7 +601,7 @@ msgstr "接続.." msgid "Disconnect" msgstr "切æ–" -#: editor/connections_dialog.cpp editor/node_dock.cpp +#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp #, fuzzy msgid "Signals" msgstr "シグナル" @@ -905,6 +620,14 @@ msgstr "ãŠæ°—ã«å…¥ã‚Š:" msgid "Recent:" msgstr "最近ã®:" +#: editor/create_dialog.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp +#: editor/quick_open.cpp editor/settings_config_dialog.cpp +#, fuzzy +msgid "Search:" +msgstr "検索:" + #: editor/create_dialog.cpp editor/editor_help.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp #: editor/quick_open.cpp @@ -912,6 +635,13 @@ msgstr "最近ã®:" msgid "Matches:" msgstr "一致:" +#: editor/create_dialog.cpp editor/editor_help.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Description:" +msgstr "記述:" + #: editor/dependency_editor.cpp #, fuzzy msgid "Search Replacement For:" @@ -981,6 +711,11 @@ msgstr "~ã®ã‚ªãƒ¼ãƒŠãƒ¼:" #: editor/dependency_editor.cpp #, fuzzy +msgid "Remove selected files from the project? (no undo)" +msgstr "é¸æŠžã—ãŸãƒ•ァイルをプãƒã‚¸ã‚§ã‚¯ãƒˆã‹ã‚‰å–り除ã(å–り消ã—ã§ãã¾ã›ã‚“)" + +#: editor/dependency_editor.cpp +#, fuzzy msgid "" "The files being removed are required by other resources in order for them to " "work.\n" @@ -991,8 +726,8 @@ msgstr "" #: editor/dependency_editor.cpp #, fuzzy -msgid "Remove selected files from the project? (no undo)" -msgstr "é¸æŠžã—ãŸãƒ•ァイルをプãƒã‚¸ã‚§ã‚¯ãƒˆã‹ã‚‰å–り除ã(å–り消ã—ã§ãã¾ã›ã‚“)" +msgid "Cannot remove:\n" +msgstr "解決ã§ãã¾ã›ã‚“." #: editor/dependency_editor.cpp #, fuzzy @@ -1070,11 +805,6 @@ msgstr "Godotエンジンã«è²¢çŒ®ã—ãŸäººã€…" #: editor/editor_about.cpp #, fuzzy -msgid "Authors" -msgstr "作者:" - -#: editor/editor_about.cpp -#, fuzzy msgid "Project Founders" msgstr "プãƒã‚¸ã‚§ã‚¯ãƒˆãƒžãƒãƒ¼ã‚¸ãƒ£ãƒ¼" @@ -1093,10 +823,44 @@ msgid "Developers" msgstr "開発者" #: editor/editor_about.cpp -msgid "License" +#, fuzzy +msgid "Authors" +msgstr "作者:" + +#: editor/editor_about.cpp +msgid "Platinum Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Sponsors" msgstr "" #: editor/editor_about.cpp +msgid "Mini Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Silver Donors" +msgstr "" + +#: editor/editor_about.cpp +#, fuzzy +msgid "Bronze Donors" +msgstr "複製ã—ã¦ãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰" + +#: editor/editor_about.cpp +msgid "Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "License" +msgstr "ライセンス" + +#: editor/editor_about.cpp msgid "Thirdparty License" msgstr "" @@ -1136,13 +900,25 @@ msgid "Package Installed Successfully!" msgstr "パッケージインストールæˆåŠŸ!" #: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Success!" +msgstr "æˆåŠŸï¼" + +#: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp +#, fuzzy +msgid "Install" +msgstr "インストール" + +#: editor/editor_asset_installer.cpp #, fuzzy msgid "Package Installer" msgstr "パッケージインストールæˆåŠŸ!" #: editor/editor_audio_buses.cpp msgid "Speakers" -msgstr "" +msgstr "スピーカー" #: editor/editor_audio_buses.cpp #, fuzzy @@ -1190,11 +966,6 @@ msgid "Audio Bus, Drag and Drop to rearrange." msgstr "" #: editor/editor_audio_buses.cpp -#, fuzzy -msgid "Bus options" -msgstr "サブシーンã®ã‚ªãƒ—ション" - -#: editor/editor_audio_buses.cpp msgid "Solo" msgstr "" @@ -1206,6 +977,11 @@ msgstr "" msgid "Bypass" msgstr "" +#: editor/editor_audio_buses.cpp +#, fuzzy +msgid "Bus options" +msgstr "サブシーンã®ã‚ªãƒ—ション" + #: editor/editor_audio_buses.cpp editor/plugins/tile_map_editor_plugin.cpp #: editor/scene_tree_dock.cpp msgid "Duplicate" @@ -1213,6 +989,11 @@ msgstr "複製" #: editor/editor_audio_buses.cpp #, fuzzy +msgid "Reset Volume" +msgstr "ズームをリセット" + +#: editor/editor_audio_buses.cpp +#, fuzzy msgid "Delete Effect" msgstr "é¸æŠžç¯„å›²ã‚’æ¶ˆåŽ»" @@ -1237,6 +1018,11 @@ msgstr "アニメーションを複製" #: editor/editor_audio_buses.cpp #, fuzzy +msgid "Reset Bus Volume" +msgstr "ズームをリセット" + +#: editor/editor_audio_buses.cpp +#, fuzzy msgid "Move Audio Bus" msgstr "移動動作" @@ -1276,7 +1062,8 @@ msgstr "ãƒã‚¹ã‚’è¿½åŠ ã™ã‚‹" msgid "Create a new Bus Layout." msgstr "æ–°ã—ã„リソースを生æˆ" -#: editor/editor_audio_buses.cpp editor/script_create_dialog.cpp +#: editor/editor_audio_buses.cpp editor/property_editor.cpp +#: editor/script_create_dialog.cpp #, fuzzy msgid "Load" msgstr "èªã¿è¾¼ã‚€" @@ -1385,7 +1172,7 @@ msgid "Rearrange Autoloads" msgstr "自動èªã¿è¾¼ã¿ã‚’çµ„ã¿æ›¿ãˆã‚‹" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp scene/gui/file_dialog.cpp +#: scene/gui/file_dialog.cpp msgid "Path:" msgstr "Path:" @@ -1394,9 +1181,7 @@ msgstr "Path:" msgid "Node Name:" msgstr "ノードã®åå‰:" -#: editor/editor_autoload_settings.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp editor/project_manager.cpp +#: editor/editor_autoload_settings.cpp editor/project_manager.cpp #, fuzzy msgid "Name" msgstr "åå‰" @@ -1434,18 +1219,19 @@ msgid "Choose a Directory" msgstr "ディレクトリをé¸ã¶" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Create Folder" msgstr "フォルダを作æˆã™ã‚‹" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: editor/editor_plugin_settings.cpp editor/plugins/theme_editor_plugin.cpp -#: editor/project_export.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp +#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp +#: scene/gui/file_dialog.cpp msgid "Name:" msgstr "åå‰:" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Could not create folder." msgstr "フォルダを作æˆã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" @@ -1469,35 +1255,6 @@ msgstr "パッã‚ングã™ã‚‹" msgid "Template file not found:\n" msgstr "テンプレートファイルãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“:\n" -#: editor/editor_export.cpp -#, fuzzy -msgid "Added:" -msgstr "åŠ ãˆãŸã®ã¯:" - -#: editor/editor_export.cpp -msgid "Removed:" -msgstr "å–り除ã„ãŸã®ã¯:" - -#: editor/editor_export.cpp -#, fuzzy -msgid "Error saving atlas:" -msgstr "アトラスã®ä¿å˜ã«å¤±æ•—ã—ã¾ã—ãŸ:" - -#: editor/editor_export.cpp -#, fuzzy -msgid "Could not save atlas subtexture:" -msgstr "アトラスã®è¦ç´ ã§ã‚るテクスãƒãƒ£ã®ä¿å˜ãŒã§ãã¾ã›ã‚“:" - -#: editor/editor_export.cpp -#, fuzzy -msgid "Exporting for %s" -msgstr "%sã«ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆä¸" - -#: editor/editor_export.cpp -#, fuzzy -msgid "Setting Up.." -msgstr "セットアップä¸.." - #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "ãƒ•ã‚¡ã‚¤ãƒ«ãŒæ—¢ã«å˜åœ¨ã—ã¾ã™ã€‚上書ãã—ã¾ã™ã‹ï¼Ÿ" @@ -1593,6 +1350,11 @@ msgstr "ãŠæ°—ã«å…¥ã‚Šã‚’上ã’ã‚‹" msgid "Move Favorite Down" msgstr "ãŠæ°—ã«å…¥ã‚Šã‚’下ã’ã‚‹" +#: editor/editor_file_dialog.cpp +#, fuzzy +msgid "Go to parent folder" +msgstr "フォルダを作æˆã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" + #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Directories & Files:" msgstr "ディレクトリã¾ãŸã¯ãƒ•ァイル:" @@ -1640,6 +1402,10 @@ msgstr "クラスã®ãƒªã‚¹ãƒˆ:" msgid "Search Classes" msgstr "ã‚¯ãƒ©ã‚¹ã®æ¤œç´¢" +#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +msgid "Top" +msgstr "上é¢" + #: editor/editor_help.cpp editor/property_editor.cpp #, fuzzy msgid "Class:" @@ -1660,6 +1426,11 @@ msgstr "~ã«ç¶™æ‰¿ã•れる:" msgid "Brief Description:" msgstr "è¦ç´„:" +#: editor/editor_help.cpp +#, fuzzy +msgid "Members" +msgstr "メンãƒãƒ¼:" + #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Members:" @@ -1667,11 +1438,21 @@ msgstr "メンãƒãƒ¼:" #: editor/editor_help.cpp #, fuzzy +msgid "Public Methods" +msgstr "公開メソッド:" + +#: editor/editor_help.cpp +#, fuzzy msgid "Public Methods:" msgstr "公開メソッド:" #: editor/editor_help.cpp #, fuzzy +msgid "GUI Theme Items" +msgstr "GUIテーマã®éƒ¨å“:" + +#: editor/editor_help.cpp +#, fuzzy msgid "GUI Theme Items:" msgstr "GUIテーマã®éƒ¨å“:" @@ -1682,6 +1463,11 @@ msgstr "シグナル:" #: editor/editor_help.cpp #, fuzzy +msgid "Enumerations" +msgstr "アニメーション" + +#: editor/editor_help.cpp +#, fuzzy msgid "Enumerations:" msgstr "アニメーション" @@ -1691,20 +1477,52 @@ msgstr "" #: editor/editor_help.cpp #, fuzzy +msgid "Constants" +msgstr "定数:" + +#: editor/editor_help.cpp +#, fuzzy msgid "Constants:" msgstr "定数:" #: editor/editor_help.cpp #, fuzzy +msgid "Description" +msgstr "記述:" + +#: editor/editor_help.cpp +#, fuzzy +msgid "Properties" +msgstr "プãƒãƒ‘ティ:" + +#: editor/editor_help.cpp +#, fuzzy msgid "Property Description:" msgstr "プãƒãƒ‘ティã«ã¤ã„ã¦ã®è¨˜è¼‰:" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this property. Please help us by " +"[color=$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp +#, fuzzy +msgid "Methods" +msgstr "メソッド一覧:" + +#: editor/editor_help.cpp #, fuzzy msgid "Method Description:" msgstr "メソッドã«ã¤ã„ã¦ã®è¨˜è¼‰:" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this method. Please help us by [color=" +"$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp #, fuzzy msgid "Search Text" msgstr "テã‚ストを探ã™" @@ -1715,26 +1533,23 @@ msgid "Output:" msgstr " 出力:" #: editor/editor_log.cpp editor/plugins/animation_tree_editor_plugin.cpp -#: editor/plugins/rich_text_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_editor_debugger.cpp scene/gui/line_edit.cpp -#: scene/gui/text_edit.cpp +#: editor/property_editor.cpp editor/script_editor_debugger.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Clear" msgstr "削除" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp #, fuzzy msgid "Error saving resource!" msgstr "リソースä¿å˜ã‚¨ãƒ©ãƒ¼!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp #, fuzzy msgid "Save Resource As.." msgstr "~ã¨ã„ã†åå‰ã§ãƒªã‚½ãƒ¼ã‚¹ã‚’ä¿å˜ã™ã‚‹" -#: editor/editor_node.cpp editor/export_template_manager.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp #, fuzzy msgid "I see.." msgstr "ã‚ã‹ã£ãŸ.." @@ -1755,6 +1570,30 @@ msgid "Error while saving." msgstr "ä¿å˜ä¸ã«ã‚¨ãƒ©ãƒ¼ãŒèµ·ãã¾ã—ãŸ." #: editor/editor_node.cpp +#, fuzzy +msgid "Can't open '%s'." +msgstr "'..'を処ç†ã§ãã¾ã›ã‚“" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Error while parsing '%s'." +msgstr "ä¿å˜ä¸ã«ã‚¨ãƒ©ãƒ¼ãŒèµ·ãã¾ã—ãŸ." + +#: editor/editor_node.cpp +msgid "Unexpected end of file '%s'." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Missing '%s' or its dependencies." +msgstr "シーン'%s' ã¯ä¾å˜é–¢ä¿‚ãŒå£Šã‚Œã¦ã„ã¾ã™:" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Error while loading '%s'." +msgstr "ä¿å˜ä¸ã«ã‚¨ãƒ©ãƒ¼ãŒèµ·ãã¾ã—ãŸ." + +#: editor/editor_node.cpp msgid "Saving Scene" msgstr "シーンをä¿å˜" @@ -1826,6 +1665,33 @@ msgid "Restored default layout to base settings." msgstr "標準レイアウトを基本è¨å®šã«æˆ»ã—ã¾ã—ãŸ" #: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was imported, so it's not editable.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was instanced or inherited.\n" +"Changes to it will not be kept when saving the current scene." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource was imported, so it's not editable. Change its settings in the " +"import panel and then re-import." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This scene was imported, so changes to it will not be kept.\n" +"Instancing it or inheriting will allow making changes to it.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp #, fuzzy msgid "Copy Params" msgstr "パラメーターをコピーã™ã‚‹" @@ -2025,6 +1891,12 @@ msgid "Save changes the following scene(s) before opening Project Manager?" msgstr "" #: editor/editor_node.cpp +msgid "" +"This option is deprecated. Situations where refresh must be forced are now " +"considered a bug. Please report." +msgstr "" + +#: editor/editor_node.cpp #, fuzzy msgid "Pick a Main Scene" msgstr "メインシーンを指定" @@ -2054,7 +1926,7 @@ msgstr "" "変更ã™ã‚‹ãŸã‚ã«ã¯ã€ã‚·ãƒ¼ãƒ³ã‚’継承ã—ã¦æ–°ã—ã生æˆã—ã¾ã™." #: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp #, fuzzy msgid "Ugh" msgstr "ã†ã‡" @@ -2070,13 +1942,13 @@ msgstr "" #: editor/editor_node.cpp #, fuzzy -msgid "Error loading scene." -msgstr "シーンã®èªã¿è¾¼ã¿ã‚¨ãƒ©ãƒ¼" +msgid "Scene '%s' has broken dependencies:" +msgstr "シーン'%s' ã¯ä¾å˜é–¢ä¿‚ãŒå£Šã‚Œã¦ã„ã¾ã™:" #: editor/editor_node.cpp #, fuzzy -msgid "Scene '%s' has broken dependencies:" -msgstr "シーン'%s' ã¯ä¾å˜é–¢ä¿‚ãŒå£Šã‚Œã¦ã„ã¾ã™:" +msgid "Clear Recent Scenes" +msgstr "最近開ã„ãŸãƒ•ァイルã®è¨˜éŒ²ã‚’クリア" #: editor/editor_node.cpp msgid "Save Layout" @@ -2117,7 +1989,7 @@ msgstr "最低é™ãƒ¢ãƒ¼ãƒ‰" msgid "Toggle distraction-free mode." msgstr "最低é™ãƒ¢ãƒ¼ãƒ‰" -#: editor/editor_node.cpp editor/io_plugins/editor_scene_import_plugin.cpp +#: editor/editor_node.cpp #, fuzzy msgid "Scene" msgstr "シーン" @@ -2177,9 +2049,8 @@ msgid "Close Scene" msgstr "シーンを閉ã˜ã‚‹" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Open Recent" -msgstr "最近ã®ã‚’é–‹ã" +msgstr "最近使ã£ãŸãƒ•ァイルを開ã" #: editor/editor_node.cpp #, fuzzy @@ -2394,6 +2265,11 @@ msgstr "Q&A" msgid "Issue Tracker" msgstr "課題(ãƒã‚°ï¼‰ç®¡ç†ã‚·ã‚¹ãƒ†ãƒ " +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Community" +msgstr "コミュニティ" + #: editor/editor_node.cpp #, fuzzy msgid "About" @@ -2404,7 +2280,7 @@ msgstr "ã«ã¤ã„ã¦" msgid "Play the project." msgstr "プãƒã‚¸ã‚§ã‚¯ãƒˆã®å®Ÿè¡Œ" -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp #, fuzzy msgid "Play" msgstr "実行" @@ -2424,7 +2300,7 @@ msgstr "ã‚·ãƒ¼ãƒ³ã‚’ä¸€æ™‚åœæ¢" msgid "Stop the scene." msgstr "シーンをæ¢ã‚ã‚‹" -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp #, fuzzy msgid "Stop" msgstr "æ¢ã‚ã‚‹" @@ -2513,6 +2389,16 @@ msgstr "オブジェクトã®ãƒ—ãƒãƒ‘ティ" #: editor/editor_node.cpp #, fuzzy +msgid "Changes may be lost!" +msgstr "ベクトル定数を変更" + +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Import" +msgstr "インãƒãƒ¼ãƒˆï¼ˆå–り込ã¿ï¼‰" + +#: editor/editor_node.cpp +#, fuzzy msgid "FileSystem" msgstr "ファイルシステム" @@ -2530,14 +2416,6 @@ msgstr "出力" msgid "Don't Save" msgstr "" -#: editor/editor_node.cpp editor/editor_reimport_dialog.cpp -msgid "Re-Import" -msgstr "å†ã‚¤ãƒ³ãƒãƒ¼ãƒˆ" - -#: editor/editor_node.cpp editor/editor_plugin_settings.cpp -msgid "Update" -msgstr "アップデート" - #: editor/editor_node.cpp #, fuzzy msgid "Import Templates From ZIP File" @@ -2607,11 +2485,30 @@ msgstr "次ã®ã‚¨ãƒ‡ã‚£ã‚¿ã‚’é–‹ã" msgid "Open the previous Editor" msgstr "å‰ã®ã‚¨ãƒ‡ã‚£ã‚¿ã‚’é–‹ã" +#: editor/editor_plugin.cpp +#, fuzzy +msgid "Creating Mesh Previews" +msgstr "メッシュライブラリを生æˆ" + +#: editor/editor_plugin.cpp +msgid "Thumbnail.." +msgstr "サムãƒã‚¤ãƒ«.." + #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" msgstr "インストール済ã¿ã®ãƒ—ラグイン:" #: editor/editor_plugin_settings.cpp +msgid "Update" +msgstr "アップデート" + +#: editor/editor_plugin_settings.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Version:" +msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³:" + +#: editor/editor_plugin_settings.cpp #, fuzzy msgid "Author:" msgstr "作者:" @@ -2675,31 +2572,6 @@ msgstr "セルフ" msgid "Frame #:" msgstr "フレーム#:" -#: editor/editor_reimport_dialog.cpp -#, fuzzy -msgid "Please wait for scan to complete." -msgstr "走査完了をãŠå¾…ã¡ãã ã•ã„" - -#: editor/editor_reimport_dialog.cpp -#, fuzzy -msgid "Current scene must be saved to re-import." -msgstr "å†ã‚¤ãƒ³ãƒãƒ¼ãƒˆã™ã‚‹ãŸã‚ã«ã¯ç¾åœ¨ã®ã‚·ãƒ¼ãƒ³ã‚’ä¿å˜ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™" - -#: editor/editor_reimport_dialog.cpp -#, fuzzy -msgid "Save & Re-Import" -msgstr "ä¿å˜ã—ã¦å†ã‚¤ãƒ³ãƒãƒ¼ãƒˆ" - -#: editor/editor_reimport_dialog.cpp -#, fuzzy -msgid "Re-Importing" -msgstr "å†ã‚¤ãƒ³ãƒãƒ¼ãƒˆ" - -#: editor/editor_reimport_dialog.cpp -#, fuzzy -msgid "Re-Import Changed Resources" -msgstr "変更ã—ãŸãƒªã‚½ãƒ¼ã‚¹ã‚’å†ã‚¤ãƒ³ãƒãƒ¼ãƒˆ" - #: editor/editor_run_native.cpp msgid "Select device from the list" msgstr "" @@ -2833,11 +2705,6 @@ msgstr "インãƒãƒ¼ãƒˆ:" #: editor/export_template_manager.cpp #, fuzzy -msgid "Loading Export Templates" -msgstr "エクスãƒãƒ¼ãƒˆã€€ãƒ†ãƒ³ãƒ—レートã®èªã¿è¾¼ã¿" - -#: editor/export_template_manager.cpp -#, fuzzy msgid "Current Version:" msgstr "ç¾åœ¨ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³:" @@ -2879,11 +2746,18 @@ msgid "Cannot navigate to '" msgstr "~ã«ç§»å‹•ã§ãã¾ã›ã‚“" #: editor/filesystem_dock.cpp -#, fuzzy +msgid "View items as a grid of thumbnails" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "View items as a list" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "" "\n" -"Status: Needs Re-Import" -msgstr "ä¿å˜ã—ã¦å†ã‚¤ãƒ³ãƒãƒ¼ãƒˆ" +"Status: Import of file failed. Please fix file and reimport manually." +msgstr "" #: editor/filesystem_dock.cpp #, fuzzy @@ -2894,51 +2768,55 @@ msgstr "ソース:" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Same source and destination files, doing nothing." -msgstr "åŒã˜ãƒ•ã‚¡ã‚¤ãƒ«ãŒæŒ‡å®šã•れã¦ã„ã‚‹ã®ã§ã€ä½•も行ã„ã¾ã›ã‚“." +msgid "Cannot move/rename resources root." +msgstr "ソースã®ãƒ•ォントをèªã¿è¾¼ã¿/処ç†ã§ãã¾ã›ã‚“." #: editor/filesystem_dock.cpp -msgid "Target file exists, can't overwrite. Delete first." -msgstr "" +#, fuzzy +msgid "Cannot move a folder into itself.\n" +msgstr "åŒã˜ãƒ•ァイルã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆã§ãã¾ã›ã‚“:" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Same source and destination paths, doing nothing." -msgstr "åŒã˜ãƒ‘ã‚¹ãŒæŒ‡å®šã•れã¦ã„ã‚‹ã®ã§ã€ä½•も行ã„ã¾ã›ã‚“" +msgid "Error moving:\n" +msgstr "エラーをインãƒãƒ¼ãƒˆä¸:" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Can't move directories to within themselves." -msgstr "ディレクトリを自身ã®å†…部ã«ã¯ç§»å‹•ã§ãã¾ã›ã‚“" +msgid "Unable to update dependencies:\n" +msgstr "シーン'%s' ã¯ä¾å˜é–¢ä¿‚ãŒå£Šã‚Œã¦ã„ã¾ã™:" #: editor/filesystem_dock.cpp -msgid "Can't rename deps for:\n" +msgid "No name provided" msgstr "" #: editor/filesystem_dock.cpp -#, fuzzy -msgid "Error moving file:\n" -msgstr "イメージèªã¿è¾¼ã¿ã‚¨ãƒ©ãƒ¼:" +msgid "Provided name contains invalid characters" +msgstr "" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Error moving dir:\n" -msgstr "エラーをインãƒãƒ¼ãƒˆä¸:" +msgid "No name provided." +msgstr "åå‰ã‚’変ãˆã‚‹ã‹ç§»å‹•ã—ã¦ãã ã•ã„.." #: editor/filesystem_dock.cpp #, fuzzy -msgid "Can't operate on '..'" -msgstr "'..'を処ç†ã§ãã¾ã›ã‚“" +msgid "Name contains invalid characters." +msgstr "使用å¯èƒ½ãªæ–‡å—:" + +#: editor/filesystem_dock.cpp +msgid "A file or folder with this name already exists." +msgstr "" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Pick New Name and Location For:" -msgstr "æ–°ã—ã„åå‰ã¨ãƒã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã‚’é¸æŠž:" +msgid "Renaming file:" +msgstr "変数ã®åå‰ã‚’変ãˆã‚‹" #: editor/filesystem_dock.cpp #, fuzzy -msgid "No files selected!" -msgstr "ファイルãŒé¸æŠžã•れã¦ã„ã¾ã›ã‚“!" +msgid "Renaming folder:" +msgstr "ノードã®åå‰ã‚’変更" #: editor/filesystem_dock.cpp #, fuzzy @@ -2952,48 +2830,43 @@ msgstr "ã™ã¹ã¦æŠ˜ã‚ŠãŸãŸã‚€" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Show In File Manager" -msgstr "ファイルマãƒãƒ¼ã‚¸ãƒ£ãƒ¼ã§è¡¨ç¤º" - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Instance" -msgstr "インスタンス" +msgid "Copy Path" +msgstr "パスをコピーã™ã‚‹" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Edit Dependencies.." -msgstr "ä¾å˜é–¢ä¿‚を編集.." +msgid "Rename.." +msgstr "åå‰ã‚’変更ã™ã‚‹" #: editor/filesystem_dock.cpp #, fuzzy -msgid "View Owners.." -msgstr "オーナーを見る.." +msgid "Move To.." +msgstr "~ã¸ç§»å‹•ã™ã‚‹.." #: editor/filesystem_dock.cpp #, fuzzy -msgid "Copy Path" -msgstr "パスをコピーã™ã‚‹" +msgid "New Folder.." +msgstr "フォルダを作æˆã™ã‚‹" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Rename or Move.." -msgstr "åå‰ã‚’変ãˆã‚‹ã‹ç§»å‹•ã—ã¦ãã ã•ã„.." +msgid "Show In File Manager" +msgstr "ファイルマãƒãƒ¼ã‚¸ãƒ£ãƒ¼ã§è¡¨ç¤º" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Move To.." -msgstr "~ã¸ç§»å‹•ã™ã‚‹.." +msgid "Instance" +msgstr "インスタンス" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Info" -msgstr "インフォーメーション" +msgid "Edit Dependencies.." +msgstr "ä¾å˜é–¢ä¿‚を編集.." #: editor/filesystem_dock.cpp #, fuzzy -msgid "Re-Import.." -msgstr "å†ã‚¤ãƒ³ãƒãƒ¼ãƒˆ.." +msgid "View Owners.." +msgstr "オーナーを見る.." #: editor/filesystem_dock.cpp msgid "Previous Directory" @@ -3030,6 +2903,11 @@ msgstr "" msgid "Move" msgstr "移動" +#: editor/filesystem_dock.cpp editor/plugins/animation_tree_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Rename" +msgstr "åå‰ã‚’変更ã™ã‚‹" + #: editor/groups_editor.cpp #, fuzzy msgid "Add to Group" @@ -3046,6 +2924,11 @@ msgid "Import as Single Scene" msgstr "シーンをインãƒãƒ¼ãƒˆä¸.." #: editor/import/resource_importer_scene.cpp +#, fuzzy +msgid "Import with Separate Animations" +msgstr "アニメーションをインãƒãƒ¼ãƒˆ.." + +#: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials" msgstr "" @@ -3058,6 +2941,18 @@ msgid "Import with Separate Objects+Materials" msgstr "" #: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Materials+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Materials+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp #, fuzzy msgid "Import as Multiple Scenes" msgstr "3Dシーンをインãƒãƒ¼ãƒˆ" @@ -3067,45 +2962,38 @@ msgid "Import as Multiple Scenes+Materials" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp #: editor/plugins/cube_grid_theme_editor_plugin.cpp #, fuzzy msgid "Import Scene" msgstr "シーンをインãƒãƒ¼ãƒˆ" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp #, fuzzy msgid "Importing Scene.." msgstr "シーンをインãƒãƒ¼ãƒˆä¸.." #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp #, fuzzy msgid "Running Custom Script.." msgstr "カスタムスクリプトを実行ä¸" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp #, fuzzy msgid "Couldn't load post-import script:" msgstr "æ—¢ã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆã—ãŸã‚¹ã‚¯ãƒªãƒ—トをèªã¿è¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸ:" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp #, fuzzy msgid "Invalid/broken script for post-import (check console):" msgstr "" "無効ãª/壊れãŸã‚¤ãƒ³ãƒãƒ¼ãƒˆæ¸ˆã¿ã®ã‚¹ã‚¯ãƒªãƒ—ト(コンソールをãƒã‚§ãƒƒã‚¯ã—ã¦ãã ã•ã„)" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp #, fuzzy msgid "Error running post-import script:" msgstr "インãƒãƒ¼ãƒˆæ¸ˆã¿ã®ã‚¹ã‚¯ãƒªãƒ—ト実行エラー" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp #, fuzzy msgid "Saving.." msgstr "ä¿å˜ä¸.." @@ -3137,686 +3025,59 @@ msgstr "åˆæœŸè¨å®šå€¤.." msgid "Reimport" msgstr "å†ã‚¤ãƒ³ãƒãƒ¼ãƒˆ" -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#, fuzzy -msgid "No bit masks to import!" -msgstr "インãƒãƒ¼ãƒˆã™ã‚‹ãƒ“ットマスクãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“!" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#, fuzzy -msgid "Target path is empty." -msgstr "ターゲットã®ãƒ‘スã«ä½•ã‚‚ã‚りã¾ã›ã‚“" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#, fuzzy -msgid "Target path must be a complete resource path." -msgstr "ターゲットã®ãƒ‘スã¯ãƒªã‚½ãƒ¼ã‚¹ã®å®Œå…¨ãªãƒ‘スã§ãªã‘れã°ã„ã‘ã¾ã›ã‚“." - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#, fuzzy -msgid "Target path must exist." -msgstr "ターゲットã®ãƒ‘スãŒå˜åœ¨ã—ã¾ã›ã‚“" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#, fuzzy -msgid "Save path is empty!" -msgstr "ä¿å˜ã™ã‚‹ãƒ‘スãŒã‚りã¾ã›ã‚“!" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#, fuzzy -msgid "Import BitMasks" -msgstr "ビットマスクをインãƒãƒ¼ãƒˆ" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#, fuzzy -msgid "Source Texture(s):" -msgstr "ソースã®ãƒ†ã‚¯ã‚¹ãƒãƒ£:" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -#, fuzzy -msgid "Target Path:" -msgstr "ターゲットã®ãƒ‘ス:" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -#, fuzzy -msgid "Accept" -msgstr "å—å–OK" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Bit Mask" -msgstr "ビットマスク" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#, fuzzy -msgid "No source font file!" -msgstr "ソースã®ãƒ•ォントファイルãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“!" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#, fuzzy -msgid "No target font resource!" -msgstr "ターゲットã®ãƒ•ォントリソースãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“!" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#, fuzzy -msgid "" -"Invalid file extension.\n" -"Please use .font." -msgstr "" -"ファイル拡張åãŒä¸æ£ã§ã™.\n" -" .fontを使ã£ã¦ãã ã•ã„." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#, fuzzy -msgid "Can't load/process source font." -msgstr "ソースã®ãƒ•ォントをèªã¿è¾¼ã¿/処ç†ã§ãã¾ã›ã‚“." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#, fuzzy -msgid "Couldn't save font." -msgstr "フォントをä¿å˜ã§ãã¾ã›ã‚“ã§ã—ãŸ" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#, fuzzy -msgid "Source Font:" -msgstr "ソース フォント:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#, fuzzy -msgid "Source Font Size:" -msgstr "ソース フォントサイズ:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#, fuzzy -msgid "Dest Resource:" -msgstr "é€ã‚Šå…ˆã®ãƒªã‚½ãƒ¼ã‚¹:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#, fuzzy -msgid "The quick brown fox jumps over the lazy dog." -msgstr "ã„ã‚ã¯ã«ã»ã¸ã¨ï½ž." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Test:" -msgstr "テスト:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Options:" -msgstr "オプション:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#, fuzzy -msgid "Font Import" -msgstr "フォントã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆ" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#, fuzzy -msgid "" -"This file is already a Godot font file, please supply a BMFont type file " -"instead." -msgstr "" -"ã“ã®ãƒ•ァイルã¯ã‚‚ã†Godotã®ãƒ•ォントファイルã§ã™. BMFont type ã®ãƒ•ァイルを代ã‚り" -"ã«åˆ©ç”¨ã—ã¦ãã ã•ã„." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#, fuzzy -msgid "Failed opening as BMFont file." -msgstr "BMFont ファイルを開ã‘ã¾ã›ã‚“ã§ã—ãŸ" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error initializing FreeType." -msgstr "FreeType ã®åˆæœŸåŒ–エラー。" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Unknown font format." -msgstr "䏿˜Žãªãƒ•ォント形å¼ã§ã™ã€‚" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error loading font." -msgstr "フォントèªã¿è¾¼ã¿ã‚¨ãƒ©ãƒ¼ã€‚" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Invalid font size." -msgstr "無効ãªãƒ•ォント サイズã§ã™ã€‚" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#, fuzzy -msgid "Invalid font custom source." -msgstr "䏿£ãªãƒ•ォントカスタムソース" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/plugins/theme_editor_plugin.cpp -msgid "Font" -msgstr "フォント" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#, fuzzy -msgid "No meshes to import!" -msgstr "インãƒãƒ¼ãƒˆã™ã‚‹ãƒ¡ãƒƒã‚·ãƒ¥ãŒã‚りã¾ã›ã‚“" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#, fuzzy -msgid "Single Mesh Import" -msgstr "シングルメッシュをインãƒãƒ¼ãƒˆ" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#, fuzzy -msgid "Source Mesh(es):" -msgstr "ソース メッシュ:" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Mesh" -msgstr "メッシュ" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#, fuzzy -msgid "Surface %d" -msgstr "サーフェース %d" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -#, fuzzy -msgid "No samples to import!" -msgstr "インãƒãƒ¼ãƒˆã™ã‚‹ã‚µãƒ³ãƒ—ルãŒã‚りã¾ã›ã‚“!" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -#, fuzzy -msgid "Import Audio Samples" -msgstr "オーディオサンプルをインãƒãƒ¼ãƒˆ" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -#, fuzzy -msgid "Source Sample(s):" -msgstr "ソースã®ã‚µãƒ³ãƒ—ル:" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Audio Sample" -msgstr "オーディオサンプル" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#, fuzzy -msgid "New Clip" -msgstr "æ–°ã—ã„クリップ" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Animation Options" -msgstr "アニメーションã®ã‚ªãƒ—ション" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#, fuzzy -msgid "Flags" -msgstr "フラグ" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#, fuzzy -msgid "Bake FPS:" -msgstr "FPSを焼ãè¾¼ã¿(ベイク):" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Optimizer" -msgstr "オプティマイザ" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#, fuzzy -msgid "Max Linear Error" -msgstr "最大ä½ç½®ã‚¨ãƒ©ãƒ¼" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#, fuzzy -msgid "Max Angular Error" -msgstr "最大角度エラー" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#, fuzzy -msgid "Max Angle" -msgstr "最大角度" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Clips" -msgstr "クリップ" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Start(s)" -msgstr "é–‹å§‹" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "End(s)" -msgstr "終了" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Loop" -msgstr "ループ" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Filters" -msgstr "フィルター" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#, fuzzy -msgid "Source path is empty." -msgstr "ソースã®ãƒ‘スã¯ç©ºã§ã™" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#, fuzzy -msgid "Couldn't load post-import script." -msgstr "インãƒãƒ¼ãƒˆæ¸ˆã¿ã®ã‚¹ã‚¯ãƒªãƒ—トをèªã¿è¾¼ã¿ã¾ã›ã‚“ã§ã—ãŸ" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#, fuzzy -msgid "Invalid/broken script for post-import." -msgstr "インãƒãƒ¼ãƒˆæ¸ˆã¿ã®ã‚¹ã‚¯ãƒªãƒ—トã¯ä¸æ£ãª/壊れãŸã‚¹ã‚¯ãƒªãƒ—トã§ã™" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#, fuzzy -msgid "Error importing scene." -msgstr "シーン インãƒãƒ¼ãƒˆã®ã‚¨ãƒ©ãƒ¼" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#, fuzzy -msgid "Import 3D Scene" -msgstr "3Dシーンをインãƒãƒ¼ãƒˆ" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source Scene:" -msgstr "ソース シーン:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#, fuzzy -msgid "Same as Target Scene" -msgstr "ターゲットシーンã¨åŒã˜" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Shared" -msgstr "共有ã•れã¦ã„ã‚‹" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#, fuzzy -msgid "Target Texture Folder:" -msgstr "ターゲットテクスãƒãƒ£ã®ãƒ•ォルダ:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#, fuzzy -msgid "Post-Process Script:" -msgstr "後処ç†ã‚¹ã‚¯ãƒªãƒ—ト:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#, fuzzy -msgid "Custom Root Node Type:" -msgstr "ルートノードã®ã‚«ã‚¹ã‚¿ãƒ タイプ:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Auto" -msgstr "自動" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#, fuzzy -msgid "Root Node Name:" -msgstr "ルートノードã®åå‰:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#, fuzzy -msgid "The Following Files are Missing:" -msgstr "以下ã®ãƒ•ァイルãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#, fuzzy -msgid "Import Anyway" -msgstr "ã¨ã‚Šã‚ãˆãšã‚¤ãƒ³ãƒãƒ¼ãƒˆ" - -#: editor/io_plugins/editor_scene_import_plugin.cpp scene/gui/dialogs.cpp -msgid "Cancel" -msgstr "ã‚ャンセル" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#, fuzzy -msgid "Import & Open" -msgstr "インãƒãƒ¼ãƒˆã—ã¦é–‹ã" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#, fuzzy -msgid "Edited scene has not been saved, open imported scene anyway?" -msgstr "" -"編集ã—ãŸã‚·ãƒ¼ãƒ³ã¯ä¿å˜ã•れã¦ã„ã¾ã›ã‚“ãŒã€ãれã§ã‚‚インãƒãƒ¼ãƒˆã—ãŸã‚·ãƒ¼ãƒ³ã‚’é–‹ãã¾ã™" -"ã‹ï¼Ÿ" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#, fuzzy -msgid "Import Image:" -msgstr "イメージをインãƒãƒ¼ãƒˆ:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#, fuzzy -msgid "Can't import a file over itself:" -msgstr "åŒã˜ãƒ•ァイルã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆã§ãã¾ã›ã‚“:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#, fuzzy -msgid "Couldn't localize path: %s (already local)" -msgstr "パスをãƒãƒ¼ã‚«ãƒ©ã‚¤ã‚ºã§ãã¾ã›ã‚“: %s (ã™ã§ã«ãƒãƒ¼ã‚«ãƒ«)" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#, fuzzy -msgid "3D Scene Animation" -msgstr "3Dシーンアニメーション" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Uncompressed" -msgstr "éžåœ§ç¸®" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -#, fuzzy -msgid "Compress Lossless (PNG)" -msgstr "ãƒã‚¹ãƒ¬ã‚¹åœ§ç¸®(PNG)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -#, fuzzy -msgid "Compress Lossy (WebP)" -msgstr "éžå¯é€†åœ§ç¸®(WebP)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -#, fuzzy -msgid "Compress (VRAM)" -msgstr "圧縮 (VRAM)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Format" -msgstr "テクスãƒãƒ£ãƒ•ォーマット" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -#, fuzzy -msgid "Texture Compression Quality (WebP):" -msgstr "テクスãƒãƒ£åœ§ç¸®å“質 (WebP):" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -#, fuzzy -msgid "Texture Options" -msgstr "テクスãƒãƒ£ã€€ã‚ªãƒ—ション" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -#, fuzzy -msgid "Please specify some files!" -msgstr "ãªã«ã‹ãƒ•ァイルを指定ã—ã¦ãã ã•ã„!" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -#, fuzzy -msgid "At least one file needed for Atlas." -msgstr "ã‚¢ãƒˆãƒ©ã‚¹ã«æœ€ä½Žä¸€ã¤ã®ãƒ•ァイルを指定ã—ã¦ãã ã•ã„" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -#, fuzzy -msgid "Error importing:" -msgstr "エラーをインãƒãƒ¼ãƒˆä¸:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -#, fuzzy -msgid "Only one file is required for large texture." -msgstr "大ããªãƒ†ã‚¯ã‚¹ãƒãƒ£ã®ãŸã‚ã«ä¸€ã¤ãƒ•ァイルãŒå¿…è¦ã§ã™" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -#, fuzzy -msgid "Max Texture Size:" -msgstr "最大テクスãƒãƒ£ã‚µã‚¤ã‚º:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -#, fuzzy -msgid "Import Textures for Atlas (2D)" -msgstr "アトラスã®ãƒ†ã‚¯ã‚¹ãƒãƒ£ã‚’インãƒãƒ¼ãƒˆ (2D)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -#, fuzzy -msgid "Cell Size:" -msgstr "セルサイズ:" +#: editor/multi_node_edit.cpp +msgid "MultiNode Set" +msgstr "複数ノード セット" -#: editor/io_plugins/editor_texture_import_plugin.cpp -#, fuzzy -msgid "Large Texture" -msgstr "大ããªãƒ†ã‚¯ã‚¹ãƒãƒ£" +#: editor/node_dock.cpp +msgid "Groups" +msgstr "グループ" -#: editor/io_plugins/editor_texture_import_plugin.cpp +#: editor/node_dock.cpp #, fuzzy -msgid "Import Large Textures (2D)" -msgstr "大ããªãƒ†ã‚¯ã‚¹ãƒãƒ£ã‚’インãƒãƒ¼ãƒˆ (2D)" +msgid "Select a Node to edit Signals and Groups." +msgstr "シグナルã¨ã‚°ãƒ«ãƒ¼ãƒ—を編集ã™ã‚‹ãŸã‚ãƒŽãƒ¼ãƒ‰ã‚’é¸æŠž" -#: editor/io_plugins/editor_texture_import_plugin.cpp -#, fuzzy -msgid "Source Texture" -msgstr "ソーステクスãƒãƒ£" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create Poly" +msgstr "ãƒãƒªã‚´ãƒ³ã‚’生æˆ" -#: editor/io_plugins/editor_texture_import_plugin.cpp -#, fuzzy -msgid "Base Atlas Texture" -msgstr "基本アトラステクスãƒãƒ£" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly" +msgstr "ãƒãƒªã‚´ãƒ³ã‚’編集" -#: editor/io_plugins/editor_texture_import_plugin.cpp +#: editor/plugins/abstract_polygon_2d_editor.cpp #, fuzzy -msgid "Source Texture(s)" -msgstr "ソース テクスãƒãƒ£" +msgid "Insert Point" +msgstr "挿入" -#: editor/io_plugins/editor_texture_import_plugin.cpp +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp #, fuzzy -msgid "Import Textures for 2D" -msgstr "2Dテクスãƒãƒ£ã‚’インãƒãƒ¼ãƒˆ" +msgid "Edit Poly (Remove Point)" +msgstr "ãƒãƒªã‚´ãƒ³ã‚’編集(ãƒã‚¤ãƒ³ãƒˆï¼ç‚¹ã‚’除去)" -#: editor/io_plugins/editor_texture_import_plugin.cpp -#, fuzzy -msgid "Import Textures for 3D" -msgstr "3Dテクスãƒãƒ£ã‚’インãƒãƒ¼ãƒˆ" +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Remove Poly And Point" +msgstr "ãƒãƒªã‚´ãƒ³ã¨ãƒã‚¤ãƒ³ãƒˆã‚’除去" -#: editor/io_plugins/editor_texture_import_plugin.cpp +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp #, fuzzy -msgid "Import Textures" -msgstr "テクスãƒãƒ£ã‚’インãƒãƒ¼ãƒˆ" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "2D Texture" -msgstr "2Dテクスãƒãƒ£" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "3D Texture" -msgstr "3Dテクスãƒãƒ£" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Atlas Texture" -msgstr "アトラステクスãƒãƒ£" +msgid "Create a new polygon from scratch." +msgstr "æ–°è¦ã«ãƒãƒªã‚´ãƒ³ã‚’生æˆã™ã‚‹" -#: editor/io_plugins/editor_texture_import_plugin.cpp -#, fuzzy +#: editor/plugins/abstract_polygon_2d_editor.cpp msgid "" -"NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files to " -"the project." +"Edit existing polygon:\n" +"LMB: Move Point.\n" +"Ctrl+LMB: Split Segment.\n" +"RMB: Erase Point." msgstr "" -"注æ„:2Dテクスãƒãƒ£ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆã¯å¿…é ˆã§ã¯ã‚りã¾ã›ã‚“. png/jpgファイルをプãƒã‚¸ã‚§" -"クトã«ã‚³ãƒ”ーã—ã¦ãã ã•ã„." - -#: editor/io_plugins/editor_texture_import_plugin.cpp -#, fuzzy -msgid "Crop empty space." -msgstr "空白を刈り込む" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture" -msgstr "テクスãƒãƒ£" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -#, fuzzy -msgid "Import Large Texture" -msgstr "大ããªãƒ†ã‚¯ã‚¹ãƒãƒ£ã‚’インãƒãƒ¼ãƒˆ" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -#, fuzzy -msgid "Load Source Image" -msgstr "ソースイメージをèªã¿è¾¼ã‚€" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Slicing" -msgstr "スライシング" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Inserting" -msgstr "挿入" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Saving" -msgstr "ä¿å˜ä¸" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save large texture:" -msgstr "大ããªãƒ†ã‚¯ã‚¹ãƒãƒ£ãŒä¿å˜ã§ãã¾ã›ã‚“ã§ã—ãŸ:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -#, fuzzy -msgid "Build Atlas For:" -msgstr "~ã®ã‚¢ãƒˆãƒ©ã‚¹ã‚’ビルド:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -#, fuzzy -msgid "Loading Image:" -msgstr "イメージをèªã¿è¾¼ã¿ä¸:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -#, fuzzy -msgid "Couldn't load image:" -msgstr "イメージをèªã¿è¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸ:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -#, fuzzy -msgid "Converting Images" -msgstr "イメージを変æ›ä¸" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -#, fuzzy -msgid "Cropping Images" -msgstr "イメージをクãƒãƒƒãƒ”ング(トリミング)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -#, fuzzy -msgid "Blitting Images" -msgstr "イメージをé…ç½®(Blit)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -#, fuzzy -msgid "Couldn't save atlas image:" -msgstr "アトラスイメージをä¿å˜ã§ãã¾ã›ã‚“ã§ã—ãŸ:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -#, fuzzy -msgid "Couldn't save converted texture:" -msgstr "変æ›ã—ãŸãƒ†ã‚¯ã‚¹ãƒãƒ£ã‚’ä¿å˜ã§ãã¾ã›ã‚“ã§ã—ãŸ:" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -#, fuzzy -msgid "Invalid source!" -msgstr "䏿£ãªã‚½ãƒ¼ã‚¹!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid translation source!" -msgstr "䏿£ãªç¿»è¨³ã‚½ãƒ¼ã‚¹!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -#, fuzzy -msgid "Column" -msgstr "カラム" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/script_create_dialog.cpp -#, fuzzy -msgid "Language" -msgstr "言語" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -#, fuzzy -msgid "No items to import!" -msgstr "インãƒãƒ¼ãƒˆã™ã‚‹ã‚‚ã®ãŒã‚りã¾ã›ã‚“!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -#, fuzzy -msgid "No target path!" -msgstr "ターゲットã®ãƒ‘スãŒã‚りã¾ã›ã‚“!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -#, fuzzy -msgid "Import Translations" -msgstr "翻訳をインãƒãƒ¼ãƒˆ" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -#, fuzzy -msgid "Couldn't import!" -msgstr "インãƒãƒ¼ãƒˆã§ãã¾ã›ã‚“ã§ã—ãŸ!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -#, fuzzy -msgid "Import Translation" -msgstr "翻訳をインãƒãƒ¼ãƒˆ" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -#, fuzzy -msgid "Source CSV:" -msgstr "ソースCSVファイル:" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -#, fuzzy -msgid "Ignore First Row" -msgstr "最åˆã®è¡Œã‚’無視" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Compress" -msgstr "圧縮" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -#, fuzzy -msgid "Add to Project (project.godot)" -msgstr "プãƒã‚¸ã‚§ã‚¯ãƒˆã«è¿½åŠ (project.godot)" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -#, fuzzy -msgid "Import Languages:" -msgstr "言語をインãƒãƒ¼ãƒˆ:" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Translation" -msgstr "翻訳" - -#: editor/multi_node_edit.cpp -msgid "MultiNode Set" -msgstr "複数ノード セット" - -#: editor/node_dock.cpp -msgid "Groups" -msgstr "グループ" - -#: editor/node_dock.cpp -#, fuzzy -msgid "Select a Node to edit Signals and Groups." -msgstr "シグナルã¨ã‚°ãƒ«ãƒ¼ãƒ—を編集ã™ã‚‹ãŸã‚ãƒŽãƒ¼ãƒ‰ã‚’é¸æŠž" #: editor/plugins/animation_player_editor_plugin.cpp #, fuzzy @@ -4003,7 +3264,6 @@ msgstr "アニメーションã®åå‰:" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp #: editor/script_create_dialog.cpp msgid "Error!" @@ -4132,10 +3392,6 @@ msgid "Delete Input" msgstr "入力を消去" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Rename" -msgstr "åå‰ã‚’変更ã™ã‚‹" - -#: editor/plugins/animation_tree_editor_plugin.cpp #, fuzzy msgid "Animation tree is valid." msgstr "アニメーションツリーã¯å•題ã‚りã¾ã›ã‚“." @@ -4199,76 +3455,221 @@ msgstr "ノードフィルターã®ç·¨é›†" msgid "Filters.." msgstr "フィルター.." -#: editor/plugins/baked_light_baker.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Free" +msgstr "解放" + +#: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy -msgid "Parsing %d Triangles:" -msgstr "%d 三角形をパースä¸ã§ã™:" +msgid "Contents:" +msgstr "コンテンツ:" -#: editor/plugins/baked_light_baker.cpp -msgid "Triangle #" -msgstr "三角形 #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "View Files" +msgstr "ビューファイル:" -#: editor/plugins/baked_light_baker.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve hostname:" +msgstr "ホストåを解決ã§ãã¾ã›ã‚“:" + +#: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy -msgid "Light Baker Setup:" -msgstr "ライティング(照明)ベイクè¨å®š:" +msgid "Can't resolve." +msgstr "解決ã§ãã¾ã›ã‚“." -#: editor/plugins/baked_light_baker.cpp +#: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy -msgid "Parsing Geometry" -msgstr "ジオメトリーをパース" +msgid "Connection error, please try again." +msgstr "接続失敗 å†è©¦è¡Œã‚’" -#: editor/plugins/baked_light_baker.cpp +#: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy -msgid "Fixing Lights" -msgstr "照明(ライティング)ã®ä¿®å¾©" +msgid "Can't connect." +msgstr "接続失敗." -#: editor/plugins/baked_light_baker.cpp +#: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy -msgid "Making BVH" -msgstr "BVHデータを生æˆ" +msgid "Can't connect to host:" +msgstr "ãƒ›ã‚¹ãƒˆã«æŽ¥ç¶šã§ãã¾ã›ã‚“:" -#: editor/plugins/baked_light_baker.cpp +#: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy -msgid "Creating Light Octree" -msgstr "照明ã®å…«åˆ†æœ¨ã‚’生æˆ" +msgid "No response from host:" +msgstr "ホストã‹ã‚‰å¿œç”ãŒã‚りã¾ã›ã‚“:" -#: editor/plugins/baked_light_baker.cpp +#: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy -msgid "Creating Octree Texture" -msgstr "八分木テクスãƒãƒ£ã‚’生æˆ" +msgid "No response." +msgstr "応ç”ãŒã‚りã¾ã›ã‚“." -#: editor/plugins/baked_light_baker.cpp +#: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy -msgid "Transfer to Lightmaps:" -msgstr "ライトマップã¸ã®è»¢å†™:" +msgid "Request failed, return code:" +msgstr "リクエスト失敗 リターン コード:" -#: editor/plugins/baked_light_baker.cpp +#: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy -msgid "Allocating Texture #" -msgstr "テクスãƒãƒ£ã‚’(メモリ上ã§ï¼‰ç¢ºä¿#" +msgid "Req. Failed." +msgstr "リクエスト失敗." -#: editor/plugins/baked_light_baker.cpp +#: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy -msgid "Baking Triangle #" -msgstr "三角形をベイク#" +msgid "Request failed, too many redirects" +msgstr "リクエスト失敗 リダイレクトã®å›žæ•°ãŒå¤šã™ãŽã¾ã™" -#: editor/plugins/baked_light_baker.cpp +#: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy -msgid "Post-Processing Texture #" -msgstr "後処ç†ã®ãƒ†ã‚¯ã‚¹ãƒãƒ£#" +msgid "Redirect Loop." +msgstr "リダイレクトã®ãƒ«ãƒ¼ãƒ—." -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Bake!" -msgstr "ベイク!" +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Failed:" +msgstr "失敗:" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Bad download hash, assuming file has been tampered with." +msgstr "ダウンãƒãƒ¼ãƒ‰å†…容ã®ãƒãƒƒã‚·ãƒ¥ãŒä¸æ•´åˆã€€æ”¹ã–ã‚“ã®å¯èƒ½æ€§ãŒã‚りã¾ã™." + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Expected:" +msgstr "予測:" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Got:" +msgstr "å–å¾—:" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Failed sha256 hash check" +msgstr "sha256ã®ãƒãƒƒã‚·ãƒ¥ãƒã‚§ãƒƒã‚¯å¤±æ•—" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Asset Download Error:" +msgstr "アセットã®ãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰å¤±æ•—:" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Fetching:" +msgstr "å–å¾—ä¸:" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Resolving.." +msgstr "解決ä¸.." + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Connecting.." +msgstr "接続ä¸.." -#: editor/plugins/baked_light_editor_plugin.cpp +#: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy -msgid "Reset the lightmap octree baking process (start over)." -msgstr "ライトマップ八分木ベイクã®ãƒ—ãƒã‚»ã‚¹ã‚’リセット(やり直ã—)." +msgid "Requesting.." +msgstr "リクエストä¸.." + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Error making request" +msgstr "リクエスト発行エラー" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Idle" +msgstr "待機ä¸" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Retry" +msgstr "å†è©¦è¡Œ" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Download Error" +msgstr "ダウンãƒãƒ¼ãƒ‰å¤±æ•—" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Download for this asset is already in progress!" +msgstr "ã“ã®ã‚¢ã‚»ãƒƒãƒˆã®ãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰ã¯æ—¢ã«é€²è¡Œä¸ï¼" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "first" +msgstr "最åˆã®" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "prev" +msgstr "å‰ã®" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "next" +msgstr "次ã®" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "last" +msgstr "最後ã®" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "All" +msgstr "ã™ã¹ã¦ã®" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +#, fuzzy +msgid "Plugins" +msgstr "プラグイン" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Sort:" +msgstr "ä¸¦ã¹æ›¿ãˆ:" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Reverse" +msgstr "逆" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +#, fuzzy +msgid "Category:" +msgstr "カテゴリー:" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Site:" +msgstr "サイト:" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Support.." +msgstr "サãƒãƒ¼ãƒˆ.." + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Official" +msgstr "å…¬å¼" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Testing" +msgstr "テストä¸" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Assets ZIP File" +msgstr "アセットã®zipファイル" #: editor/plugins/camera_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp msgid "Preview" msgstr "プレビュー" @@ -4321,12 +3722,18 @@ msgstr "ã‚ャンãƒã‚¹ã‚¢ã‚¤ãƒ†ãƒ ã®ç·¨é›†" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy -msgid "Change Anchors" +msgid "Anchors only" +msgstr "アンカー" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Change Anchors and Margins" msgstr "アンカーを変更ã™ã‚‹" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom (%):" -msgstr "ズーム(%):" +#, fuzzy +msgid "Change Anchors" +msgstr "アンカーを変更ã™ã‚‹" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy @@ -4389,69 +3796,85 @@ msgstr "パン・モード" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy -msgid "Lock the selected object in place (can't be moved)." -msgstr "é¸æŠžã—ãŸã‚ªãƒ–ジェクトをãƒãƒƒã‚¯ã—ã¦ç§»å‹•ä¸èƒ½ã¨ã™ã‚‹." +msgid "Toggles snapping" +msgstr "ブレークãƒã‚¤ãƒ³ãƒˆã‚’切替" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp #, fuzzy -msgid "Unlock the selected object (can be moved)." -msgstr "é¸æŠžã—ãŸã‚ªãƒ–ジェクトをãƒãƒƒã‚¯è§£é™¤ã—ã¦ç§»å‹•å¯èƒ½ã¨ã™ã‚‹." +msgid "Use Snap" +msgstr "スナップ機能を使ã†" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy -msgid "Makes sure the object's children are not selectable." -msgstr "ã“ã®ã‚ªãƒ–ジェクトã®åï¼ˆã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆï¼‰ã‚’é¸æŠžä¸å¯ã¨ã™ã‚‹." +msgid "Snapping options" +msgstr "アニメーションã®ã‚ªãƒ—ション" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy -msgid "Restores the object's children's ability to be selected." -msgstr "ã“ã®ã‚ªãƒ–ジェクトã®åï¼ˆã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆï¼‰ã‚’é¸æŠžå¯èƒ½ã¨ã™ã‚‹." +msgid "Snap to grid" +msgstr "Snapモード:" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp -#: editor/project_settings_editor.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Edit" -msgstr "編集" +#, fuzzy +msgid "Use Rotation Snap" +msgstr "回転スナップ機能を使ã†" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp #, fuzzy -msgid "Use Snap" -msgstr "スナップ機能を使ã†" +msgid "Configure Snap..." +msgstr "スナップ機能ã®è¨å®š" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" -msgstr "グリッドを表示" +#, fuzzy +msgid "Snap Relative" +msgstr "相対スナップ機能" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy -msgid "Use Rotation Snap" -msgstr "回転スナップ機能を使ã†" +msgid "Use Pixel Snap" +msgstr "ピクセルå˜ä½ã‚¹ãƒŠãƒƒãƒ—" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Smart snapping" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy -msgid "Snap Relative" -msgstr "相対スナップ機能" +msgid "Snap to parent" +msgstr "親ã¾ã§å±•é–‹ã™ã‚‹" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to node anchor" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to node sides" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to other nodes" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp #, fuzzy -msgid "Configure Snap.." -msgstr "スナップ機能ã®è¨å®š" +msgid "Lock the selected object in place (can't be moved)." +msgstr "é¸æŠžã—ãŸã‚ªãƒ–ジェクトをãƒãƒƒã‚¯ã—ã¦ç§»å‹•ä¸èƒ½ã¨ã™ã‚‹." #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy -msgid "Use Pixel Snap" -msgstr "ピクセルå˜ä½ã‚¹ãƒŠãƒƒãƒ—" +msgid "Unlock the selected object (can be moved)." +msgstr "é¸æŠžã—ãŸã‚ªãƒ–ジェクトをãƒãƒƒã‚¯è§£é™¤ã—ã¦ç§»å‹•å¯èƒ½ã¨ã™ã‚‹." #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy -msgid "Skeleton.." -msgstr "スケルトン.." +msgid "Makes sure the object's children are not selectable." +msgstr "ã“ã®ã‚ªãƒ–ジェクトã®åï¼ˆã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆï¼‰ã‚’é¸æŠžä¸å¯ã¨ã™ã‚‹." + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Restores the object's children's ability to be selected." +msgstr "ã“ã®ã‚ªãƒ–ジェクトã®åï¼ˆã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆï¼‰ã‚’é¸æŠžå¯èƒ½ã¨ã™ã‚‹." #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy @@ -4485,13 +3908,19 @@ msgid "View" msgstr "ビュー" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Reset" -msgstr "ズームをリセット" +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "グリッドを表示" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show helpers" +msgstr "ボーンを表示ã™ã‚‹" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy -msgid "Zoom Set.." -msgstr "ズームをセットã™ã‚‹.." +msgid "Show rulers" +msgstr "ボーンを表示ã™ã‚‹" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy @@ -4505,8 +3934,8 @@ msgstr "é¸æŠžå¯¾è±¡ã‚’ãƒ•ãƒ¬ãƒ¼ãƒ ã®ä¸å¤®ã«" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy -msgid "Anchor" -msgstr "アンカー" +msgid "Layout" +msgstr "レイアウトをä¿å˜" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy @@ -4532,13 +3961,21 @@ msgid "Clear Pose" msgstr "ãƒãƒ¼ã‚ºã‚’クリアã™ã‚‹" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Set a Value" -msgstr "値をè¨å®šã™ã‚‹" +msgid "Drag pivot from mouse position" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy -msgid "Snap (Pixels):" -msgstr "スナップ機能(ピクセルå˜ä½ï¼‰:" +msgid "Set pivot at mouse position" +msgstr "曲線ã®Out-ãƒãƒ³ãƒ‰ãƒ«ã®ä½ç½®ã‚’指定" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Multiply grid step by 2" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Divide grid step by 2" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy @@ -4550,26 +3987,31 @@ msgstr "%sè¿½åŠ ã™ã‚‹" msgid "Adding %s..." msgstr "%sè¿½åŠ ä¸..." -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp #, fuzzy msgid "Create Node" msgstr "ノードを生æˆ" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp #, fuzzy msgid "Error instancing scene from %s" msgstr "%sシーンã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹åŒ–エラー" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "OK :(" msgstr "ãŠãƒ¼ã‘ー :(" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp #, fuzzy msgid "No parent to instance a child at." msgstr "åインスタンスを生æˆã™ã‚‹ãŸã‚ã®è¦ªãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp #, fuzzy msgid "This operation requires a single selected node." msgstr "一ã¤ãƒŽãƒ¼ãƒ‰ã‚’指定ã—ãªã„ã¨ã€ã“ã®æ“作ã¯ã§ãã¾ã›ã‚“" @@ -4587,47 +4029,6 @@ msgstr "" "ドラッグ&ドãƒãƒƒãƒ— + Shift : 兄弟ノードã¨ã—ã¦åŠ ãˆã‚‹ \n" "ドラッグ&ドãƒãƒƒãƒ— + Alt : ノードã®ã‚¿ã‚¤ãƒ—を変更ã™ã‚‹" -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Create Poly" -msgstr "ãƒãƒªã‚´ãƒ³ã‚’生æˆ" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly" -msgstr "ãƒãƒªã‚´ãƒ³ã‚’編集" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy -msgid "Edit Poly (Remove Point)" -msgstr "ãƒãƒªã‚´ãƒ³ã‚’編集(ãƒã‚¤ãƒ³ãƒˆï¼ç‚¹ã‚’除去)" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#, fuzzy -msgid "Create a new polygon from scratch." -msgstr "æ–°è¦ã«ãƒãƒªã‚´ãƒ³ã‚’生æˆã™ã‚‹" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -msgid "" -"Edit existing polygon:\n" -"LMB: Move Point.\n" -"Ctrl+LMB: Split Segment.\n" -"RMB: Erase Point." -msgstr "" - #: editor/plugins/collision_polygon_editor_plugin.cpp msgid "Create Poly3D" msgstr "3Dãƒãƒªã‚´ãƒ³ã‚’生æˆã™ã‚‹" @@ -4638,15 +4039,6 @@ msgid "Set Handle" msgstr "ãƒãƒ³ãƒ‰ãƒ«ã‚’è¨å®šã™ã‚‹" #: editor/plugins/cube_grid_theme_editor_plugin.cpp -#, fuzzy -msgid "Creating Mesh Library" -msgstr "メッシュライブラリを生æˆ" - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Thumbnail.." -msgstr "サムãƒã‚¤ãƒ«.." - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Remove item %d?" msgstr "アイテム%dã‚’å–り除ãã¾ã™ã‹ï¼Ÿ" @@ -4669,6 +4061,28 @@ msgid "Update from Scene" msgstr "シーンã‹ã‚‰ã‚¢ãƒƒãƒ—デート" #: editor/plugins/curve_editor_plugin.cpp +msgid "Flat0" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Flat1" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +#, fuzzy +msgid "Ease in" +msgstr "イージング(Ease In)" + +#: editor/plugins/curve_editor_plugin.cpp +#, fuzzy +msgid "Ease out" +msgstr "イージング(Ease Out)" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Smoothstep" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp #, fuzzy msgid "Modify Curve Point" msgstr "カーブを修æ£ã™ã‚‹" @@ -4751,23 +4165,19 @@ msgid "Create Occluder Polygon" msgstr "オクルージョンを生ã˜ã‚‹ãƒãƒªã‚´ãƒ³ã‚’生æˆ" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Edit existing polygon:" msgstr "æ—¢å˜ã®ãƒãƒªã‚´ãƒ³ã‚’編集:" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "LMB: Move Point." msgstr "マウス左ボタン:ãƒã‚¤ãƒ³ãƒˆï¼ç‚¹ã‚’移動." #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp #, fuzzy msgid "Ctrl+LMB: Split Segment." msgstr "Ctrl+マウス左ボタン: セグメントを分割" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "RMB: Erase Point." msgstr "マウスå³ãƒœã‚¿ãƒ³:ãƒã‚¤ãƒ³ãƒˆï¼ç‚¹ã‚’除去." @@ -4881,6 +4291,10 @@ msgid "Create Outline" msgstr "アウトラインを生æˆ" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh" +msgstr "メッシュ" + +#: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy msgid "Create Trimesh Static Body" msgstr "スタティック(ä¸å¤‰ï¼‰ä¸‰è§’形メッシュ ボディを作æˆ" @@ -5037,14 +4451,83 @@ msgstr "縮尺をランダムã«å¤‰æ›´:" msgid "Populate" msgstr "åˆæœŸå€¤ã‚’è¨å®š" +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Bake!" +msgstr "ベイク!" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +#, fuzzy +msgid "Bake the navigation mesh.\n" +msgstr "ナビメッシュ(ナビゲーションメッシュ)ã®ç”Ÿæˆ" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +#, fuzzy +msgid "Clear the navigation mesh." +msgstr "ナビメッシュ(ナビゲーションメッシュ)ã®ç”Ÿæˆ" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Setting up Configuration..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Calculating grid size..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Creating heightfield..." +msgstr "照明ã®å…«åˆ†æœ¨ã‚’生æˆ" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Marking walkable triangles..." +msgstr "ãƒãƒ¼ã‚«ãƒ«ç’°å¢ƒã®å¤‰æ›´ã‚’ä¿å˜ã™ã‚‹.." + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Constructing compact heightfield..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Eroding walkable area..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Partioning..." +msgstr "è¦å‘Š" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Creating contours..." +msgstr "八分木テクスãƒãƒ£ã‚’生æˆ" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Creating polymesh..." +msgstr "アウトラインメッシュを生æˆ.." + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Converting to native navigation mesh..." +msgstr "ナビメッシュ(ナビゲーションメッシュ)ã®ç”Ÿæˆ" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Navigation Mesh Generator Setup:" +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Parsing Geometry..." +msgstr "ジオメトリーをパース" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Done!" +msgstr "" + #: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Create Navigation Polygon" msgstr "ナビゲーションãƒãƒªã‚´ãƒ³ã‚’生æˆ" -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Remove Poly And Point" -msgstr "ãƒãƒªã‚´ãƒ³ã¨ãƒã‚¤ãƒ³ãƒˆã‚’除去" - #: editor/plugins/particles_2d_editor_plugin.cpp #, fuzzy msgid "Clear Emission Mask" @@ -5250,17 +4733,17 @@ msgstr "曲線ã®ãƒã‚¤ãƒ³ãƒˆ#" #: editor/plugins/path_editor_plugin.cpp #, fuzzy -msgid "Set Curve Point Pos" +msgid "Set Curve Point Position" msgstr "曲線ã®ãƒã‚¤ãƒ³ãƒˆã®ä½ç½®ã‚’指定" #: editor/plugins/path_editor_plugin.cpp #, fuzzy -msgid "Set Curve In Pos" +msgid "Set Curve In Position" msgstr "曲線ã®In-ãƒãƒ³ãƒ‰ãƒ«ã®ä½ç½®ã‚’指定" #: editor/plugins/path_editor_plugin.cpp #, fuzzy -msgid "Set Curve Out Pos" +msgid "Set Curve Out Position" msgstr "曲線ã®Out-ãƒãƒ³ãƒ‰ãƒ«ã®ä½ç½®ã‚’指定" #: editor/plugins/path_editor_plugin.cpp @@ -5331,6 +4814,14 @@ msgid "Scale Polygon" msgstr "ãƒãƒªã‚´ãƒ³ã®ç¸®å°ºã‚’変更" #: editor/plugins/polygon_2d_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit" +msgstr "編集" + +#: editor/plugins/polygon_2d_editor_plugin.cpp #, fuzzy msgid "Polygon->UV" msgstr "ãƒãƒªã‚´ãƒ³->UV" @@ -5393,67 +4884,10 @@ msgstr "リソースをèªã¿è¾¼ã‚€" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "貼り付ã‘" -#: editor/plugins/rich_text_editor_plugin.cpp -#, fuzzy -msgid "Parse BBCode" -msgstr "BBコードをパースã™ã‚‹" - -#: editor/plugins/sample_editor_plugin.cpp -#, fuzzy -msgid "Length:" -msgstr "é•·ã•:" - -#: editor/plugins/sample_library_editor_plugin.cpp -#, fuzzy -msgid "Open Sample File(s)" -msgstr "サンプルファイルを開ã‘ã‚‹" - -#: editor/plugins/sample_library_editor_plugin.cpp -#, fuzzy -msgid "ERROR: Couldn't load sample!" -msgstr "エラー:サンプルをèªã¿è¾¼ã‚ã¾ã›ã‚“!" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Add Sample" -msgstr "ã‚µãƒ³ãƒ—ãƒ«ã‚’è¿½åŠ " - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Rename Sample" -msgstr "サンプルã®åå‰ã‚’変ãˆã‚‹" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Delete Sample" -msgstr "サンプルを消去ã™ã‚‹" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "16 Bits" -msgstr "16ビット" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "8 Bits" -msgstr "8ビット" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Stereo" -msgstr "ステレオ音声" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Mono" -msgstr "モノラル音声" - -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/script_editor_debugger.cpp -msgid "Format" -msgstr "フォーマット" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Pitch" -msgstr "ピッãƒ" - #: editor/plugins/script_editor_plugin.cpp #, fuzzy msgid "Clear Recent Files" @@ -5552,6 +4986,10 @@ msgstr "é–‰ã˜ã‚‹" msgid "Close All" msgstr "é–‰ã˜ã‚‹" +#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp +msgid "Run" +msgstr "実行" + #: editor/plugins/script_editor_plugin.cpp #, fuzzy msgid "Toggle Scripts Panel" @@ -5598,20 +5036,6 @@ msgid "Debug with external editor" msgstr "次ã®ã‚¨ãƒ‡ã‚£ã‚¿ã‚’é–‹ã" #: editor/plugins/script_editor_plugin.cpp -msgid "Window" -msgstr "ウィンドウ" - -#: editor/plugins/script_editor_plugin.cpp -#, fuzzy -msgid "Move Left" -msgstr "å·¦ã«ç§»å‹•" - -#: editor/plugins/script_editor_plugin.cpp -#, fuzzy -msgid "Move Right" -msgstr "å³ã«ç§»å‹•" - -#: editor/plugins/script_editor_plugin.cpp msgid "Open Godot online documentation" msgstr "Godotã®ã‚ªãƒ³ãƒ©ã‚¤ãƒ³æ–‡æ›¸ã‚’é–‹ã" @@ -5701,7 +5125,7 @@ msgstr "切りå–り" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Copy" msgstr "コピー" @@ -5989,11 +5413,6 @@ msgid "View Plane Transform." msgstr "ビュー平é¢ãƒˆãƒ©ãƒ³ã‚¹ãƒ•ォーム." #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy -msgid "Scaling to %s%%." -msgstr "æ‹¡å¤§ç¸®å°æ¯”率%s%%." - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." msgstr "%s 度回転." @@ -6010,10 +5429,6 @@ msgid "Top View." msgstr "上é¢å›³." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Top" -msgstr "上é¢" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "後é¢å›³." @@ -6258,6 +5673,11 @@ msgid "Transform" msgstr "トランスフォーム" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Configure Snap.." +msgstr "スナップ機能ã®è¨å®š" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Local Coords" msgstr "ãƒãƒ¼ã‚«ãƒ«åº§æ¨™ç³»" @@ -6414,6 +5834,10 @@ msgid "Speed (FPS):" msgstr "速度(FPS):" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Loop" +msgstr "ループ" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animation Frames" msgstr "アニメーションã®ãƒ•レーム" @@ -6426,12 +5850,14 @@ msgid "Insert Empty (After)" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Up" -msgstr "上" +#, fuzzy +msgid "Move (Before)" +msgstr "ノードを除去" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Down" -msgstr "下" +#, fuzzy +msgid "Move (After)" +msgstr "å·¦ã«ç§»å‹•" #: editor/plugins/style_box_editor_plugin.cpp msgid "StyleBox Preview:" @@ -6601,6 +6027,10 @@ msgid "Style" msgstr "スタイル" #: editor/plugins/theme_editor_plugin.cpp +msgid "Font" +msgstr "フォント" + +#: editor/plugins/theme_editor_plugin.cpp msgid "Color" msgstr "色" @@ -6653,7 +6083,7 @@ msgid "Mirror Y" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Bucket" +msgid "Paint Tile" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp @@ -6724,6 +6154,12 @@ msgid "Delete preset '%s'?" msgstr "åˆæœŸè¨å®šå€¤ '%s'?を削除ã—ã¾ã™ã‹ï¼Ÿ" #: editor/project_export.cpp +#, fuzzy +msgid "Export templates for this platform are missing/corrupted: " +msgstr "" +"ã“ã®ãƒ—ラットフォームã«å‘ã‘ã¦ã®ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã®ãƒ†ãƒ³ãƒ—レートãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“:" + +#: editor/project_export.cpp msgid "Presets" msgstr "åˆæœŸè¨å®šå€¤" @@ -6808,35 +6244,63 @@ msgstr "" "ã“ã®ãƒ—ラットフォームã«å‘ã‘ã¦ã®ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã®ãƒ†ãƒ³ãƒ—レートãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“:" #: editor/project_export.cpp +#, fuzzy +msgid "Export templates for this platform are missing/corrupted:" +msgstr "" +"ã“ã®ãƒ—ラットフォームã«å‘ã‘ã¦ã®ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã®ãƒ†ãƒ³ãƒ—レートãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“:" + +#: editor/project_export.cpp msgid "Export With Debug" msgstr "デãƒãƒƒã‚°ä»˜ãエクスãƒãƒ¼ãƒˆ" #: editor/project_manager.cpp #, fuzzy -msgid "Invalid project path, the path must exist!" -msgstr "パスãŒä¸æ£ã§ã™.パスãŒå˜åœ¨ã—ãªã„ã¨ã„ã‘ã¾ã›ã‚“." +msgid "The path does not exists." +msgstr "ファイルãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“." #: editor/project_manager.cpp -#, fuzzy -msgid "Invalid project path, project.godot must not exist." -msgstr "プãƒã‚¸ã‚§ã‚¯ãƒˆã®ãƒ‘スãŒä¸æ£ã§ã™.project.godotã¯å˜åœ¨ã—ã¾ã›ã‚“." +msgid "Please choose a 'project.godot' file." +msgstr "" #: editor/project_manager.cpp -#, fuzzy -msgid "Invalid project path, project.godot must exist." -msgstr "プãƒã‚¸ã‚§ã‚¯ãƒˆã®ãƒ‘スãŒä¸æ£ã§ã™.project.godotã¯å˜åœ¨ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" +msgid "" +"Your project will be created in a non empty folder (you might want to create " +"a new folder)." +msgstr "" + +#: editor/project_manager.cpp +msgid "Please choose a folder that does not contain a 'project.godot' file." +msgstr "" #: editor/project_manager.cpp msgid "Imported Project" msgstr "インãƒãƒ¼ãƒˆã•れãŸãƒ—ãƒã‚¸ã‚§ã‚¯ãƒˆ" #: editor/project_manager.cpp +msgid " " +msgstr "" + +#: editor/project_manager.cpp +msgid "It would be a good idea to name your project." +msgstr "" + +#: editor/project_manager.cpp #, fuzzy msgid "Invalid project path (changed anything?)." msgstr "䏿£ãªãƒ—ãƒã‚¸ã‚§ã‚¯ãƒˆã®ãƒ‘ス(何ã‹å¤‰ãˆã¾ã—ãŸã‹ï¼Ÿï¼‰" #: editor/project_manager.cpp #, fuzzy +msgid "Couldn't get project.godot in project path." +msgstr "project.godotをプãƒã‚¸ã‚§ã‚¯ãƒˆãƒ‘スã«ç”Ÿæˆã§ãã¾ã›ã‚“ã§ã—ãŸ" + +#: editor/project_manager.cpp +#, fuzzy +msgid "Couldn't edit project.godot in project path." +msgstr "project.godotをプãƒã‚¸ã‚§ã‚¯ãƒˆãƒ‘スã«ç”Ÿæˆã§ãã¾ã›ã‚“ã§ã—ãŸ" + +#: editor/project_manager.cpp +#, fuzzy msgid "Couldn't create project.godot in project path." msgstr "project.godotをプãƒã‚¸ã‚§ã‚¯ãƒˆãƒ‘スã«ç”Ÿæˆã§ãã¾ã›ã‚“ã§ã—ãŸ" @@ -6846,13 +6310,30 @@ msgid "The following files failed extraction from package:" msgstr "以下ã®ãƒ•ァイルをパッケージã‹ã‚‰æŠ½å‡ºã§ãã¾ã›ã‚“ã§ã—ãŸ:" #: editor/project_manager.cpp +#, fuzzy +msgid "Rename Project" +msgstr "åç„¡ã—ã®ãƒ—ãƒã‚¸ã‚§ã‚¯ãƒˆ" + +#: editor/project_manager.cpp +#, fuzzy +msgid "Couldn't get project.godot in the project path." +msgstr "project.godotをプãƒã‚¸ã‚§ã‚¯ãƒˆãƒ‘スã«ç”Ÿæˆã§ãã¾ã›ã‚“ã§ã—ãŸ" + +#: editor/project_manager.cpp +msgid "New Game Project" +msgstr "æ–°ã—ã„ゲームプãƒã‚¸ã‚§ã‚¯ãƒˆ" + +#: editor/project_manager.cpp msgid "Import Existing Project" msgstr "æ—¢å˜ã®ãƒ—ãƒã‚¸ã‚§ã‚¯ãƒˆã‚’インãƒãƒ¼ãƒˆ" #: editor/project_manager.cpp -#, fuzzy -msgid "Project Path (Must Exist):" -msgstr "プãƒã‚¸ã‚§ã‚¯ãƒˆãƒ‘ス(å˜åœ¨ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ï¼‰" +msgid "Create New Project" +msgstr "æ–°ã—ã„プãƒã‚¸ã‚§ã‚¯ãƒˆã‚’作る" + +#: editor/project_manager.cpp +msgid "Install Project:" +msgstr "プãƒã‚¸ã‚§ã‚¯ãƒˆã‚’インストール:" #: editor/project_manager.cpp #, fuzzy @@ -6860,26 +6341,19 @@ msgid "Project Name:" msgstr "プãƒã‚¸ã‚§ã‚¯ãƒˆå:" #: editor/project_manager.cpp -msgid "Create New Project" -msgstr "æ–°ã—ã„プãƒã‚¸ã‚§ã‚¯ãƒˆã‚’作る" +#, fuzzy +msgid "Create folder" +msgstr "フォルダを作æˆã™ã‚‹" #: editor/project_manager.cpp msgid "Project Path:" msgstr "プãƒã‚¸ã‚§ã‚¯ãƒˆãƒ‘ス:" #: editor/project_manager.cpp -msgid "Install Project:" -msgstr "プãƒã‚¸ã‚§ã‚¯ãƒˆã‚’インストール:" - -#: editor/project_manager.cpp msgid "Browse" msgstr "" #: editor/project_manager.cpp -msgid "New Game Project" -msgstr "æ–°ã—ã„ゲームプãƒã‚¸ã‚§ã‚¯ãƒˆ" - -#: editor/project_manager.cpp msgid "That's a BINGO!" msgstr "当ãŸã‚Š!" @@ -6888,6 +6362,11 @@ msgid "Unnamed Project" msgstr "åç„¡ã—ã®ãƒ—ãƒã‚¸ã‚§ã‚¯ãƒˆ" #: editor/project_manager.cpp +#, fuzzy +msgid "Can't open project" +msgstr "接続失敗." + +#: editor/project_manager.cpp msgid "Are you sure to open more than one project?" msgstr "複数ã®ãƒ—ãƒã‚¸ã‚§ã‚¯ãƒˆã‚’本当ã«é–‹ã‘ã¾ã™ã‹ï¼Ÿ" @@ -6930,10 +6409,6 @@ msgid "Project List" msgstr "プãƒã‚¸ã‚§ã‚¯ãƒˆã®ãƒªã‚¹ãƒˆ" #: editor/project_manager.cpp -msgid "Run" -msgstr "実行" - -#: editor/project_manager.cpp msgid "Scan" msgstr "スã‚ャン" @@ -6996,17 +6471,14 @@ msgid "Add Input Action Event" msgstr "å…¥åŠ›ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚¤ãƒ™ãƒ³ãƒˆã‚’è¿½åŠ " #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Meta+" msgstr "Meta+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Shift+" msgstr "Shift+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Alt+" msgstr "Alt+" @@ -7072,7 +6544,7 @@ msgstr "変更" msgid "Joypad Axis Index:" msgstr "ジョイパッド軸ã®Index:" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Axis" msgstr "アナãƒã‚°" @@ -7095,32 +6567,32 @@ msgstr "入力アクションイベントを消去" msgid "Add Event" msgstr "ã‚¤ãƒ™ãƒ³ãƒˆã‚’è¿½åŠ " -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Device" msgstr "デãƒã‚¤ã‚¹" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Button" msgstr "ボタン" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Left Button." msgstr "左クリック" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Right Button." msgstr "å³ã‚¯ãƒªãƒƒã‚¯" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Middle Button." msgstr "ä¸ã‚¯ãƒªãƒƒã‚¯" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp #, fuzzy msgid "Wheel Up." msgstr "マウスホイールを上ã¸." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Down." msgstr "マウスホイールを下." @@ -7130,7 +6602,7 @@ msgid "Add Global Property" msgstr "プãƒãƒ‘ティã«getter(get method)を作る" #: editor/project_settings_editor.cpp -msgid "Select an setting item first!" +msgid "Select a setting item first!" msgstr "" #: editor/project_settings_editor.cpp @@ -7150,6 +6622,16 @@ msgstr "入力を消去" #: editor/project_settings_editor.cpp #, fuzzy +msgid "Can't contain '/' or ':'" +msgstr "ãƒ›ã‚¹ãƒˆã«æŽ¥ç¶šã§ãã¾ã›ã‚“:" + +#: editor/project_settings_editor.cpp +#, fuzzy +msgid "Already existing" +msgstr "アクション'%s'ã¯æ—¢ã«ã‚りã¾ã™!" + +#: editor/project_settings_editor.cpp +#, fuzzy msgid "Error saving settings." msgstr "è¨å®šã‚’ä¿å˜ã§ãã¾ã›ã‚“ã§ã—ãŸ." @@ -7309,11 +6791,21 @@ msgid "New Script" msgstr "æ–°è¦ã‚¹ã‚¯ãƒªãƒ—ト" #: editor/property_editor.cpp +#, fuzzy +msgid "Make Unique" +msgstr "ボーンを生æˆ" + +#: editor/property_editor.cpp msgid "Show in File System" msgstr "" #: editor/property_editor.cpp #, fuzzy +msgid "Convert To %s" +msgstr "~ã«å¤‰æ›ã™ã‚‹.." + +#: editor/property_editor.cpp +#, fuzzy msgid "Error loading file: Not a resource!" msgstr "ファイルèªã¿è¾¼ã¿ã‚¨ãƒ©ãƒ¼:リソースã§ã¯ã‚りã¾ã›ã‚“!" @@ -7356,6 +6848,11 @@ msgstr "ã™ã¹ã¦é¸æŠž" #: editor/property_selector.cpp #, fuzzy +msgid "Select Virtual Method" +msgstr "ã™ã¹ã¦é¸æŠž" + +#: editor/property_selector.cpp +#, fuzzy msgid "Select Method" msgstr "ã™ã¹ã¦é¸æŠž" @@ -7383,27 +6880,6 @@ msgstr "" msgid "Reparent" msgstr "" -#: editor/resources_dock.cpp -msgid "Create New Resource" -msgstr "æ–°ã—ã„リソースを生æˆ" - -#: editor/resources_dock.cpp -msgid "Open Resource" -msgstr "リソースを開ã‘ã‚‹" - -#: editor/resources_dock.cpp -msgid "Save Resource" -msgstr "リソースをä¿å˜" - -#: editor/resources_dock.cpp -#, fuzzy -msgid "Resource Tools" -msgstr "リソースã®ãƒ„ール" - -#: editor/resources_dock.cpp -msgid "Make Local" -msgstr "" - #: editor/run_settings_dialog.cpp msgid "Run Mode:" msgstr "" @@ -7552,14 +7028,6 @@ msgid "Sub-Resources:" msgstr "サブリソース:" #: editor/scene_tree_dock.cpp -msgid "Edit Groups" -msgstr "グループを編集" - -#: editor/scene_tree_dock.cpp -msgid "Edit Connections" -msgstr "コãƒã‚¯ã‚·ãƒ§ãƒ³ã‚’編集" - -#: editor/scene_tree_dock.cpp #, fuzzy msgid "Clear Inheritance" msgstr "継承をクリアã™ã‚‹" @@ -7778,6 +7246,15 @@ msgid "Invalid base path" msgstr "䏿£ãªãƒ™ãƒ¼ã‚¹ï¼ˆbase)パス" #: editor/script_create_dialog.cpp +msgid "Directory of the same name exists" +msgstr "" + +#: editor/script_create_dialog.cpp +#, fuzzy +msgid "File exists, will be reused" +msgstr "ãƒ•ã‚¡ã‚¤ãƒ«ãŒæ—¢ã«å˜åœ¨ã—ã¾ã™ã€‚上書ãã—ã¾ã™ã‹ï¼Ÿ" + +#: editor/script_create_dialog.cpp msgid "Invalid extension" msgstr "" @@ -7822,6 +7299,11 @@ msgid "Load existing script file" msgstr "æ—¢å˜ã®ã‚¹ã‚¯ãƒªãƒ—トファイルをèªã¿è¾¼ã‚€" #: editor/script_create_dialog.cpp +#, fuzzy +msgid "Language" +msgstr "言語" + +#: editor/script_create_dialog.cpp msgid "Inherits" msgstr "継承" @@ -7864,6 +7346,10 @@ msgid "Function:" msgstr "関数:" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Errors" msgstr "エラー" @@ -7947,6 +7433,10 @@ msgid "Type" msgstr "タイプ(型)" #: editor/script_editor_debugger.cpp +msgid "Format" +msgstr "フォーマット" + +#: editor/script_editor_debugger.cpp msgid "Usage" msgstr "使用" @@ -8027,13 +7517,31 @@ msgstr "パーティクルã®è»¸å¹³è¡Œå¢ƒç•Œãƒœãƒƒã‚¯ã‚¹ã‚’変更" msgid "Change Probe Extents" msgstr "" +#: modules/gdnative/gd_native_library_editor.cpp +#, fuzzy +msgid "Library" +msgstr "メッシュライブラリ.." + +#: modules/gdnative/gd_native_library_editor.cpp +#, fuzzy +msgid "Status" +msgstr "ステータス:" + +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Libraries: " +msgstr "" + +#: modules/gdnative/register_types.cpp +msgid "GDNative" +msgstr "" + #: 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/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h #: modules/visual_script/visual_script_builtin_funcs.cpp #, fuzzy msgid "Not enough bytes for decoding bytes, or invalid format." @@ -8090,10 +7598,6 @@ msgid "GridMap Duplicate Selection" msgstr "é¸æŠžç¯„å›²ã‚’è¤‡è£½" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Paint" -msgstr "" - -#: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy msgid "Snap View" msgstr "上é¢å›³" @@ -8197,13 +7701,8 @@ msgstr "Snapã®è¨å®š" msgid "Pick Distance:" msgstr "インスタンス:" -#: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy -msgid "Tiles" -msgstr "ファイル:" - -#: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Areas" +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "Builds" msgstr "" #: modules/visual_script/visual_script.cpp @@ -8439,10 +7938,19 @@ msgstr "戻り値" #: modules/visual_script/visual_script_editor.cpp #, fuzzy +msgid "Call" +msgstr "呼ã³å‡ºã—" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Get" msgstr "Getメソッド" #: modules/visual_script/visual_script_editor.cpp +msgid "Script already has function '%s'" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Change Input Value" msgstr "入力ã®åå‰ã‚’変更" @@ -8889,6 +8397,12 @@ msgstr "" "SpriteFrames リソースを作æˆã¾ãŸã¯ AnimatedSprite3D フレームを表示ã™ã‚‹ãŸã‚ã«" "㯠'Frames' プãƒãƒ‘ティã«è¨å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" +#: scene/3d/vehicle_body.cpp +msgid "" +"VehicleWheel serves to provide a wheel system to a VehicleBody. Please use " +"it as a child of a VehicleBody." +msgstr "" + #: scene/gui/color_picker.cpp #, fuzzy msgid "Raw Mode" @@ -8900,6 +8414,10 @@ msgid "Add current color as a preset" msgstr "ã“ã®è‰²ã‚’åˆæœŸè¨å®šå€¤ã¨ã—ã¦è¿½åŠ ã™ã‚‹" #: scene/gui/dialogs.cpp +msgid "Cancel" +msgstr "ã‚ャンセル" + +#: scene/gui/dialogs.cpp msgid "Alert!" msgstr "è¦å‘Š!" @@ -8907,10 +8425,6 @@ msgstr "è¦å‘Š!" msgid "Please Confirm..." msgstr "確èªã—ã¦ãã ã•ã„。" -#: scene/gui/input_action.cpp -msgid "Ctrl+" -msgstr "Ctrl+" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -8953,6 +8467,748 @@ msgstr "" "ãりã¾ã™ã€‚ãれ以外ã®å ´åˆã€ãƒ¬ãƒ³ãƒ€ãƒ¼ ターゲットã—ã€ãã®å†…部ã®ãƒ†ã‚¯ã‚¹ãƒãƒ£è¡¨ç¤ºã®ã„" "ãã¤ã‹ã®ãƒŽãƒ¼ãƒ‰ã«å‰²ã‚Šå½“ã¦ã¾ã™ã€‚" +#: scene/resources/dynamic_font.cpp +msgid "Error initializing FreeType." +msgstr "FreeType ã®åˆæœŸåŒ–エラー。" + +#: scene/resources/dynamic_font.cpp +msgid "Unknown font format." +msgstr "䏿˜Žãªãƒ•ォント形å¼ã§ã™ã€‚" + +#: scene/resources/dynamic_font.cpp +msgid "Error loading font." +msgstr "フォントèªã¿è¾¼ã¿ã‚¨ãƒ©ãƒ¼ã€‚" + +#: scene/resources/dynamic_font.cpp +msgid "Invalid font size." +msgstr "無効ãªãƒ•ォント サイズã§ã™ã€‚" + +#, fuzzy +#~ msgid "Method List For '%s':" +#~ msgstr "'%s' ã®ãƒ¡ã‚½ãƒƒãƒ‰ä¸€è¦§ï¼š" + +#, fuzzy +#~ msgid "Arguments:" +#~ msgstr "引数:" + +#, fuzzy +#~ msgid "Return:" +#~ msgstr "戻り値:" + +#, fuzzy +#~ msgid "Added:" +#~ msgstr "åŠ ãˆãŸã®ã¯:" + +#~ msgid "Removed:" +#~ msgstr "å–り除ã„ãŸã®ã¯:" + +#, fuzzy +#~ msgid "Error saving atlas:" +#~ msgstr "アトラスã®ä¿å˜ã«å¤±æ•—ã—ã¾ã—ãŸ:" + +#, fuzzy +#~ msgid "Could not save atlas subtexture:" +#~ msgstr "アトラスã®è¦ç´ ã§ã‚るテクスãƒãƒ£ã®ä¿å˜ãŒã§ãã¾ã›ã‚“:" + +#, fuzzy +#~ msgid "Exporting for %s" +#~ msgstr "%sã«ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆä¸" + +#, fuzzy +#~ msgid "Setting Up.." +#~ msgstr "セットアップä¸.." + +#, fuzzy +#~ msgid "Error loading scene." +#~ msgstr "シーンã®èªã¿è¾¼ã¿ã‚¨ãƒ©ãƒ¼" + +#~ msgid "Re-Import" +#~ msgstr "å†ã‚¤ãƒ³ãƒãƒ¼ãƒˆ" + +#, fuzzy +#~ msgid "Please wait for scan to complete." +#~ msgstr "走査完了をãŠå¾…ã¡ãã ã•ã„" + +#, fuzzy +#~ msgid "Current scene must be saved to re-import." +#~ msgstr "å†ã‚¤ãƒ³ãƒãƒ¼ãƒˆã™ã‚‹ãŸã‚ã«ã¯ç¾åœ¨ã®ã‚·ãƒ¼ãƒ³ã‚’ä¿å˜ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™" + +#, fuzzy +#~ msgid "Save & Re-Import" +#~ msgstr "ä¿å˜ã—ã¦å†ã‚¤ãƒ³ãƒãƒ¼ãƒˆ" + +#, fuzzy +#~ msgid "Re-Importing" +#~ msgstr "å†ã‚¤ãƒ³ãƒãƒ¼ãƒˆ" + +#, fuzzy +#~ msgid "Re-Import Changed Resources" +#~ msgstr "変更ã—ãŸãƒªã‚½ãƒ¼ã‚¹ã‚’å†ã‚¤ãƒ³ãƒãƒ¼ãƒˆ" + +#, fuzzy +#~ msgid "Loading Export Templates" +#~ msgstr "エクスãƒãƒ¼ãƒˆã€€ãƒ†ãƒ³ãƒ—レートã®èªã¿è¾¼ã¿" + +#, fuzzy +#~ msgid "" +#~ "\n" +#~ "Status: Needs Re-Import" +#~ msgstr "ä¿å˜ã—ã¦å†ã‚¤ãƒ³ãƒãƒ¼ãƒˆ" + +#, fuzzy +#~ msgid "Same source and destination files, doing nothing." +#~ msgstr "åŒã˜ãƒ•ã‚¡ã‚¤ãƒ«ãŒæŒ‡å®šã•れã¦ã„ã‚‹ã®ã§ã€ä½•も行ã„ã¾ã›ã‚“." + +#, fuzzy +#~ msgid "Same source and destination paths, doing nothing." +#~ msgstr "åŒã˜ãƒ‘ã‚¹ãŒæŒ‡å®šã•れã¦ã„ã‚‹ã®ã§ã€ä½•も行ã„ã¾ã›ã‚“" + +#, fuzzy +#~ msgid "Can't move directories to within themselves." +#~ msgstr "ディレクトリを自身ã®å†…部ã«ã¯ç§»å‹•ã§ãã¾ã›ã‚“" + +#, fuzzy +#~ msgid "Error moving file:\n" +#~ msgstr "イメージèªã¿è¾¼ã¿ã‚¨ãƒ©ãƒ¼:" + +#, fuzzy +#~ msgid "Pick New Name and Location For:" +#~ msgstr "æ–°ã—ã„åå‰ã¨ãƒã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã‚’é¸æŠž:" + +#, fuzzy +#~ msgid "No files selected!" +#~ msgstr "ファイルãŒé¸æŠžã•れã¦ã„ã¾ã›ã‚“!" + +#, fuzzy +#~ msgid "Info" +#~ msgstr "インフォーメーション" + +#, fuzzy +#~ msgid "Re-Import.." +#~ msgstr "å†ã‚¤ãƒ³ãƒãƒ¼ãƒˆ.." + +#, fuzzy +#~ msgid "No bit masks to import!" +#~ msgstr "インãƒãƒ¼ãƒˆã™ã‚‹ãƒ“ットマスクãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“!" + +#, fuzzy +#~ msgid "Target path is empty." +#~ msgstr "ターゲットã®ãƒ‘スã«ä½•ã‚‚ã‚りã¾ã›ã‚“" + +#, fuzzy +#~ msgid "Target path must be a complete resource path." +#~ msgstr "ターゲットã®ãƒ‘スã¯ãƒªã‚½ãƒ¼ã‚¹ã®å®Œå…¨ãªãƒ‘スã§ãªã‘れã°ã„ã‘ã¾ã›ã‚“." + +#, fuzzy +#~ msgid "Target path must exist." +#~ msgstr "ターゲットã®ãƒ‘スãŒå˜åœ¨ã—ã¾ã›ã‚“" + +#, fuzzy +#~ msgid "Save path is empty!" +#~ msgstr "ä¿å˜ã™ã‚‹ãƒ‘スãŒã‚りã¾ã›ã‚“!" + +#, fuzzy +#~ msgid "Import BitMasks" +#~ msgstr "ビットマスクをインãƒãƒ¼ãƒˆ" + +#, fuzzy +#~ msgid "Source Texture(s):" +#~ msgstr "ソースã®ãƒ†ã‚¯ã‚¹ãƒãƒ£:" + +#, fuzzy +#~ msgid "Target Path:" +#~ msgstr "ターゲットã®ãƒ‘ス:" + +#, fuzzy +#~ msgid "Accept" +#~ msgstr "å—å–OK" + +#~ msgid "Bit Mask" +#~ msgstr "ビットマスク" + +#, fuzzy +#~ msgid "No source font file!" +#~ msgstr "ソースã®ãƒ•ォントファイルãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“!" + +#, fuzzy +#~ msgid "No target font resource!" +#~ msgstr "ターゲットã®ãƒ•ォントリソースãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“!" + +#, fuzzy +#~ msgid "" +#~ "Invalid file extension.\n" +#~ "Please use .font." +#~ msgstr "" +#~ "ファイル拡張åãŒä¸æ£ã§ã™.\n" +#~ " .fontを使ã£ã¦ãã ã•ã„." + +#, fuzzy +#~ msgid "Couldn't save font." +#~ msgstr "フォントをä¿å˜ã§ãã¾ã›ã‚“ã§ã—ãŸ" + +#, fuzzy +#~ msgid "Source Font:" +#~ msgstr "ソース フォント:" + +#, fuzzy +#~ msgid "Source Font Size:" +#~ msgstr "ソース フォントサイズ:" + +#, fuzzy +#~ msgid "Dest Resource:" +#~ msgstr "é€ã‚Šå…ˆã®ãƒªã‚½ãƒ¼ã‚¹:" + +#, fuzzy +#~ msgid "The quick brown fox jumps over the lazy dog." +#~ msgstr "ã„ã‚ã¯ã«ã»ã¸ã¨ï½ž." + +#~ msgid "Test:" +#~ msgstr "テスト:" + +#~ msgid "Options:" +#~ msgstr "オプション:" + +#, fuzzy +#~ msgid "Font Import" +#~ msgstr "フォントã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆ" + +#, fuzzy +#~ msgid "" +#~ "This file is already a Godot font file, please supply a BMFont type file " +#~ "instead." +#~ msgstr "" +#~ "ã“ã®ãƒ•ァイルã¯ã‚‚ã†Godotã®ãƒ•ォントファイルã§ã™. BMFont type ã®ãƒ•ァイルを代" +#~ "ã‚りã«åˆ©ç”¨ã—ã¦ãã ã•ã„." + +#, fuzzy +#~ msgid "Failed opening as BMFont file." +#~ msgstr "BMFont ファイルを開ã‘ã¾ã›ã‚“ã§ã—ãŸ" + +#, fuzzy +#~ msgid "Invalid font custom source." +#~ msgstr "䏿£ãªãƒ•ォントカスタムソース" + +#, fuzzy +#~ msgid "No meshes to import!" +#~ msgstr "インãƒãƒ¼ãƒˆã™ã‚‹ãƒ¡ãƒƒã‚·ãƒ¥ãŒã‚りã¾ã›ã‚“" + +#, fuzzy +#~ msgid "Single Mesh Import" +#~ msgstr "シングルメッシュをインãƒãƒ¼ãƒˆ" + +#, fuzzy +#~ msgid "Source Mesh(es):" +#~ msgstr "ソース メッシュ:" + +#, fuzzy +#~ msgid "Surface %d" +#~ msgstr "サーフェース %d" + +#, fuzzy +#~ msgid "No samples to import!" +#~ msgstr "インãƒãƒ¼ãƒˆã™ã‚‹ã‚µãƒ³ãƒ—ルãŒã‚りã¾ã›ã‚“!" + +#, fuzzy +#~ msgid "Import Audio Samples" +#~ msgstr "オーディオサンプルをインãƒãƒ¼ãƒˆ" + +#, fuzzy +#~ msgid "Source Sample(s):" +#~ msgstr "ソースã®ã‚µãƒ³ãƒ—ル:" + +#~ msgid "Audio Sample" +#~ msgstr "オーディオサンプル" + +#, fuzzy +#~ msgid "New Clip" +#~ msgstr "æ–°ã—ã„クリップ" + +#, fuzzy +#~ msgid "Flags" +#~ msgstr "フラグ" + +#, fuzzy +#~ msgid "Bake FPS:" +#~ msgstr "FPSを焼ãè¾¼ã¿(ベイク):" + +#~ msgid "Optimizer" +#~ msgstr "オプティマイザ" + +#, fuzzy +#~ msgid "Max Linear Error" +#~ msgstr "最大ä½ç½®ã‚¨ãƒ©ãƒ¼" + +#, fuzzy +#~ msgid "Max Angular Error" +#~ msgstr "最大角度エラー" + +#, fuzzy +#~ msgid "Max Angle" +#~ msgstr "最大角度" + +#~ msgid "Clips" +#~ msgstr "クリップ" + +#~ msgid "Start(s)" +#~ msgstr "é–‹å§‹" + +#~ msgid "End(s)" +#~ msgstr "終了" + +#~ msgid "Filters" +#~ msgstr "フィルター" + +#, fuzzy +#~ msgid "Source path is empty." +#~ msgstr "ソースã®ãƒ‘スã¯ç©ºã§ã™" + +#, fuzzy +#~ msgid "Couldn't load post-import script." +#~ msgstr "インãƒãƒ¼ãƒˆæ¸ˆã¿ã®ã‚¹ã‚¯ãƒªãƒ—トをèªã¿è¾¼ã¿ã¾ã›ã‚“ã§ã—ãŸ" + +#, fuzzy +#~ msgid "Invalid/broken script for post-import." +#~ msgstr "インãƒãƒ¼ãƒˆæ¸ˆã¿ã®ã‚¹ã‚¯ãƒªãƒ—トã¯ä¸æ£ãª/壊れãŸã‚¹ã‚¯ãƒªãƒ—トã§ã™" + +#, fuzzy +#~ msgid "Error importing scene." +#~ msgstr "シーン インãƒãƒ¼ãƒˆã®ã‚¨ãƒ©ãƒ¼" + +#, fuzzy +#~ msgid "Import 3D Scene" +#~ msgstr "3Dシーンをインãƒãƒ¼ãƒˆ" + +#~ msgid "Source Scene:" +#~ msgstr "ソース シーン:" + +#, fuzzy +#~ msgid "Same as Target Scene" +#~ msgstr "ターゲットシーンã¨åŒã˜" + +#~ msgid "Shared" +#~ msgstr "共有ã•れã¦ã„ã‚‹" + +#, fuzzy +#~ msgid "Target Texture Folder:" +#~ msgstr "ターゲットテクスãƒãƒ£ã®ãƒ•ォルダ:" + +#, fuzzy +#~ msgid "Post-Process Script:" +#~ msgstr "後処ç†ã‚¹ã‚¯ãƒªãƒ—ト:" + +#, fuzzy +#~ msgid "Custom Root Node Type:" +#~ msgstr "ルートノードã®ã‚«ã‚¹ã‚¿ãƒ タイプ:" + +#~ msgid "Auto" +#~ msgstr "自動" + +#, fuzzy +#~ msgid "Root Node Name:" +#~ msgstr "ルートノードã®åå‰:" + +#, fuzzy +#~ msgid "The Following Files are Missing:" +#~ msgstr "以下ã®ãƒ•ァイルãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“:" + +#, fuzzy +#~ msgid "Import Anyway" +#~ msgstr "ã¨ã‚Šã‚ãˆãšã‚¤ãƒ³ãƒãƒ¼ãƒˆ" + +#, fuzzy +#~ msgid "Import & Open" +#~ msgstr "インãƒãƒ¼ãƒˆã—ã¦é–‹ã" + +#, fuzzy +#~ msgid "Edited scene has not been saved, open imported scene anyway?" +#~ msgstr "" +#~ "編集ã—ãŸã‚·ãƒ¼ãƒ³ã¯ä¿å˜ã•れã¦ã„ã¾ã›ã‚“ãŒã€ãれã§ã‚‚インãƒãƒ¼ãƒˆã—ãŸã‚·ãƒ¼ãƒ³ã‚’é–‹ãã¾" +#~ "ã™ã‹ï¼Ÿ" + +#, fuzzy +#~ msgid "Import Image:" +#~ msgstr "イメージをインãƒãƒ¼ãƒˆ:" + +#, fuzzy +#~ msgid "Couldn't localize path: %s (already local)" +#~ msgstr "パスをãƒãƒ¼ã‚«ãƒ©ã‚¤ã‚ºã§ãã¾ã›ã‚“: %s (ã™ã§ã«ãƒãƒ¼ã‚«ãƒ«)" + +#, fuzzy +#~ msgid "3D Scene Animation" +#~ msgstr "3Dシーンアニメーション" + +#~ msgid "Uncompressed" +#~ msgstr "éžåœ§ç¸®" + +#, fuzzy +#~ msgid "Compress Lossless (PNG)" +#~ msgstr "ãƒã‚¹ãƒ¬ã‚¹åœ§ç¸®(PNG)" + +#, fuzzy +#~ msgid "Compress Lossy (WebP)" +#~ msgstr "éžå¯é€†åœ§ç¸®(WebP)" + +#, fuzzy +#~ msgid "Compress (VRAM)" +#~ msgstr "圧縮 (VRAM)" + +#~ msgid "Texture Format" +#~ msgstr "テクスãƒãƒ£ãƒ•ォーマット" + +#, fuzzy +#~ msgid "Texture Compression Quality (WebP):" +#~ msgstr "テクスãƒãƒ£åœ§ç¸®å“質 (WebP):" + +#, fuzzy +#~ msgid "Texture Options" +#~ msgstr "テクスãƒãƒ£ã€€ã‚ªãƒ—ション" + +#, fuzzy +#~ msgid "Please specify some files!" +#~ msgstr "ãªã«ã‹ãƒ•ァイルを指定ã—ã¦ãã ã•ã„!" + +#, fuzzy +#~ msgid "At least one file needed for Atlas." +#~ msgstr "ã‚¢ãƒˆãƒ©ã‚¹ã«æœ€ä½Žä¸€ã¤ã®ãƒ•ァイルを指定ã—ã¦ãã ã•ã„" + +#, fuzzy +#~ msgid "Error importing:" +#~ msgstr "エラーをインãƒãƒ¼ãƒˆä¸:" + +#, fuzzy +#~ msgid "Only one file is required for large texture." +#~ msgstr "大ããªãƒ†ã‚¯ã‚¹ãƒãƒ£ã®ãŸã‚ã«ä¸€ã¤ãƒ•ァイルãŒå¿…è¦ã§ã™" + +#, fuzzy +#~ msgid "Max Texture Size:" +#~ msgstr "最大テクスãƒãƒ£ã‚µã‚¤ã‚º:" + +#, fuzzy +#~ msgid "Import Textures for Atlas (2D)" +#~ msgstr "アトラスã®ãƒ†ã‚¯ã‚¹ãƒãƒ£ã‚’インãƒãƒ¼ãƒˆ (2D)" + +#, fuzzy +#~ msgid "Cell Size:" +#~ msgstr "セルサイズ:" + +#, fuzzy +#~ msgid "Large Texture" +#~ msgstr "大ããªãƒ†ã‚¯ã‚¹ãƒãƒ£" + +#, fuzzy +#~ msgid "Import Large Textures (2D)" +#~ msgstr "大ããªãƒ†ã‚¯ã‚¹ãƒãƒ£ã‚’インãƒãƒ¼ãƒˆ (2D)" + +#, fuzzy +#~ msgid "Source Texture" +#~ msgstr "ソーステクスãƒãƒ£" + +#, fuzzy +#~ msgid "Base Atlas Texture" +#~ msgstr "基本アトラステクスãƒãƒ£" + +#, fuzzy +#~ msgid "Source Texture(s)" +#~ msgstr "ソース テクスãƒãƒ£" + +#, fuzzy +#~ msgid "Import Textures for 2D" +#~ msgstr "2Dテクスãƒãƒ£ã‚’インãƒãƒ¼ãƒˆ" + +#, fuzzy +#~ msgid "Import Textures for 3D" +#~ msgstr "3Dテクスãƒãƒ£ã‚’インãƒãƒ¼ãƒˆ" + +#, fuzzy +#~ msgid "Import Textures" +#~ msgstr "テクスãƒãƒ£ã‚’インãƒãƒ¼ãƒˆ" + +#~ msgid "2D Texture" +#~ msgstr "2Dテクスãƒãƒ£" + +#~ msgid "3D Texture" +#~ msgstr "3Dテクスãƒãƒ£" + +#~ msgid "Atlas Texture" +#~ msgstr "アトラステクスãƒãƒ£" + +#, fuzzy +#~ msgid "" +#~ "NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files " +#~ "to the project." +#~ msgstr "" +#~ "注æ„:2Dテクスãƒãƒ£ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆã¯å¿…é ˆã§ã¯ã‚りã¾ã›ã‚“. png/jpgファイルをプãƒ" +#~ "ジェクトã«ã‚³ãƒ”ーã—ã¦ãã ã•ã„." + +#, fuzzy +#~ msgid "Crop empty space." +#~ msgstr "空白を刈り込む" + +#~ msgid "Texture" +#~ msgstr "テクスãƒãƒ£" + +#, fuzzy +#~ msgid "Import Large Texture" +#~ msgstr "大ããªãƒ†ã‚¯ã‚¹ãƒãƒ£ã‚’インãƒãƒ¼ãƒˆ" + +#, fuzzy +#~ msgid "Load Source Image" +#~ msgstr "ソースイメージをèªã¿è¾¼ã‚€" + +#~ msgid "Slicing" +#~ msgstr "スライシング" + +#~ msgid "Saving" +#~ msgstr "ä¿å˜ä¸" + +#~ msgid "Couldn't save large texture:" +#~ msgstr "大ããªãƒ†ã‚¯ã‚¹ãƒãƒ£ãŒä¿å˜ã§ãã¾ã›ã‚“ã§ã—ãŸ:" + +#, fuzzy +#~ msgid "Build Atlas For:" +#~ msgstr "~ã®ã‚¢ãƒˆãƒ©ã‚¹ã‚’ビルド:" + +#, fuzzy +#~ msgid "Loading Image:" +#~ msgstr "イメージをèªã¿è¾¼ã¿ä¸:" + +#, fuzzy +#~ msgid "Couldn't load image:" +#~ msgstr "イメージをèªã¿è¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸ:" + +#, fuzzy +#~ msgid "Converting Images" +#~ msgstr "イメージを変æ›ä¸" + +#, fuzzy +#~ msgid "Cropping Images" +#~ msgstr "イメージをクãƒãƒƒãƒ”ング(トリミング)" + +#, fuzzy +#~ msgid "Blitting Images" +#~ msgstr "イメージをé…ç½®(Blit)" + +#, fuzzy +#~ msgid "Couldn't save atlas image:" +#~ msgstr "アトラスイメージをä¿å˜ã§ãã¾ã›ã‚“ã§ã—ãŸ:" + +#, fuzzy +#~ msgid "Couldn't save converted texture:" +#~ msgstr "変æ›ã—ãŸãƒ†ã‚¯ã‚¹ãƒãƒ£ã‚’ä¿å˜ã§ãã¾ã›ã‚“ã§ã—ãŸ:" + +#, fuzzy +#~ msgid "Invalid source!" +#~ msgstr "䏿£ãªã‚½ãƒ¼ã‚¹!" + +#~ msgid "Invalid translation source!" +#~ msgstr "䏿£ãªç¿»è¨³ã‚½ãƒ¼ã‚¹!" + +#, fuzzy +#~ msgid "Column" +#~ msgstr "カラム" + +#, fuzzy +#~ msgid "No items to import!" +#~ msgstr "インãƒãƒ¼ãƒˆã™ã‚‹ã‚‚ã®ãŒã‚りã¾ã›ã‚“!" + +#, fuzzy +#~ msgid "No target path!" +#~ msgstr "ターゲットã®ãƒ‘スãŒã‚りã¾ã›ã‚“!" + +#, fuzzy +#~ msgid "Import Translations" +#~ msgstr "翻訳をインãƒãƒ¼ãƒˆ" + +#, fuzzy +#~ msgid "Couldn't import!" +#~ msgstr "インãƒãƒ¼ãƒˆã§ãã¾ã›ã‚“ã§ã—ãŸ!" + +#, fuzzy +#~ msgid "Import Translation" +#~ msgstr "翻訳をインãƒãƒ¼ãƒˆ" + +#, fuzzy +#~ msgid "Source CSV:" +#~ msgstr "ソースCSVファイル:" + +#, fuzzy +#~ msgid "Ignore First Row" +#~ msgstr "最åˆã®è¡Œã‚’無視" + +#~ msgid "Compress" +#~ msgstr "圧縮" + +#, fuzzy +#~ msgid "Add to Project (project.godot)" +#~ msgstr "プãƒã‚¸ã‚§ã‚¯ãƒˆã«è¿½åŠ (project.godot)" + +#, fuzzy +#~ msgid "Import Languages:" +#~ msgstr "言語をインãƒãƒ¼ãƒˆ:" + +#~ msgid "Translation" +#~ msgstr "翻訳" + +#, fuzzy +#~ msgid "Parsing %d Triangles:" +#~ msgstr "%d 三角形をパースä¸ã§ã™:" + +#~ msgid "Triangle #" +#~ msgstr "三角形 #" + +#, fuzzy +#~ msgid "Light Baker Setup:" +#~ msgstr "ライティング(照明)ベイクè¨å®š:" + +#, fuzzy +#~ msgid "Fixing Lights" +#~ msgstr "照明(ライティング)ã®ä¿®å¾©" + +#, fuzzy +#~ msgid "Making BVH" +#~ msgstr "BVHデータを生æˆ" + +#, fuzzy +#~ msgid "Transfer to Lightmaps:" +#~ msgstr "ライトマップã¸ã®è»¢å†™:" + +#, fuzzy +#~ msgid "Allocating Texture #" +#~ msgstr "テクスãƒãƒ£ã‚’(メモリ上ã§ï¼‰ç¢ºä¿#" + +#, fuzzy +#~ msgid "Baking Triangle #" +#~ msgstr "三角形をベイク#" + +#, fuzzy +#~ msgid "Post-Processing Texture #" +#~ msgstr "後処ç†ã®ãƒ†ã‚¯ã‚¹ãƒãƒ£#" + +#, fuzzy +#~ msgid "Reset the lightmap octree baking process (start over)." +#~ msgstr "ライトマップ八分木ベイクã®ãƒ—ãƒã‚»ã‚¹ã‚’リセット(やり直ã—)." + +#~ msgid "Zoom (%):" +#~ msgstr "ズーム(%):" + +#, fuzzy +#~ msgid "Skeleton.." +#~ msgstr "スケルトン.." + +#~ msgid "Zoom Reset" +#~ msgstr "ズームをリセット" + +#, fuzzy +#~ msgid "Zoom Set.." +#~ msgstr "ズームをセットã™ã‚‹.." + +#~ msgid "Set a Value" +#~ msgstr "値をè¨å®šã™ã‚‹" + +#, fuzzy +#~ msgid "Snap (Pixels):" +#~ msgstr "スナップ機能(ピクセルå˜ä½ï¼‰:" + +#, fuzzy +#~ msgid "Parse BBCode" +#~ msgstr "BBコードをパースã™ã‚‹" + +#, fuzzy +#~ msgid "Length:" +#~ msgstr "é•·ã•:" + +#, fuzzy +#~ msgid "Open Sample File(s)" +#~ msgstr "サンプルファイルを開ã‘ã‚‹" + +#, fuzzy +#~ msgid "ERROR: Couldn't load sample!" +#~ msgstr "エラー:サンプルをèªã¿è¾¼ã‚ã¾ã›ã‚“!" + +#~ msgid "Add Sample" +#~ msgstr "ã‚µãƒ³ãƒ—ãƒ«ã‚’è¿½åŠ " + +#~ msgid "Rename Sample" +#~ msgstr "サンプルã®åå‰ã‚’変ãˆã‚‹" + +#~ msgid "Delete Sample" +#~ msgstr "サンプルを消去ã™ã‚‹" + +#~ msgid "16 Bits" +#~ msgstr "16ビット" + +#~ msgid "8 Bits" +#~ msgstr "8ビット" + +#~ msgid "Stereo" +#~ msgstr "ステレオ音声" + +#~ msgid "Mono" +#~ msgstr "モノラル音声" + +#~ msgid "Pitch" +#~ msgstr "ピッãƒ" + +#~ msgid "Window" +#~ msgstr "ウィンドウ" + +#, fuzzy +#~ msgid "Move Right" +#~ msgstr "å³ã«ç§»å‹•" + +#, fuzzy +#~ msgid "Scaling to %s%%." +#~ msgstr "æ‹¡å¤§ç¸®å°æ¯”率%s%%." + +#~ msgid "Up" +#~ msgstr "上" + +#~ msgid "Down" +#~ msgstr "下" + +#, fuzzy +#~ msgid "Invalid project path, the path must exist!" +#~ msgstr "パスãŒä¸æ£ã§ã™.パスãŒå˜åœ¨ã—ãªã„ã¨ã„ã‘ã¾ã›ã‚“." + +#, fuzzy +#~ msgid "Invalid project path, project.godot must not exist." +#~ msgstr "プãƒã‚¸ã‚§ã‚¯ãƒˆã®ãƒ‘スãŒä¸æ£ã§ã™.project.godotã¯å˜åœ¨ã—ã¾ã›ã‚“." + +#, fuzzy +#~ msgid "Invalid project path, project.godot must exist." +#~ msgstr "" +#~ "プãƒã‚¸ã‚§ã‚¯ãƒˆã®ãƒ‘スãŒä¸æ£ã§ã™.project.godotã¯å˜åœ¨ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#, fuzzy +#~ msgid "Project Path (Must Exist):" +#~ msgstr "プãƒã‚¸ã‚§ã‚¯ãƒˆãƒ‘ス(å˜åœ¨ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ï¼‰" + +#~ msgid "Create New Resource" +#~ msgstr "æ–°ã—ã„リソースを生æˆ" + +#~ msgid "Open Resource" +#~ msgstr "リソースを開ã‘ã‚‹" + +#~ msgid "Save Resource" +#~ msgstr "リソースをä¿å˜" + +#, fuzzy +#~ msgid "Resource Tools" +#~ msgstr "リソースã®ãƒ„ール" + +#~ msgid "Edit Groups" +#~ msgstr "グループを編集" + +#~ msgid "Edit Connections" +#~ msgstr "コãƒã‚¯ã‚·ãƒ§ãƒ³ã‚’編集" + +#, fuzzy +#~ msgid "Tiles" +#~ msgstr "ファイル:" + +#~ msgid "Ctrl+" +#~ msgstr "Ctrl+" + #, fuzzy #~ msgid "Close scene? (Unsaved changes will be lost)" #~ msgstr "シーンを閉ã˜ã¾ã™ã‹?(セーブã—ã¦ã„ãªã„変更ã¯å¤±ã‚れã¾ã™ï¼‰" @@ -8969,10 +9225,6 @@ msgstr "" #~ msgid "Close Goto Prev. Scene" #~ msgstr "é–‰ã˜ã¦éŽå޻開ã„ãŸã‚·ãƒ¼ãƒ³ã«ç§»å‹•" -#, fuzzy -#~ msgid "Expand to Parent" -#~ msgstr "親ã¾ã§å±•é–‹ã™ã‚‹" - #~ msgid "Del" #~ msgstr "deleteã‚ー" diff --git a/editor/translations/ko.po b/editor/translations/ko.po index b531720ebd..bbee0acb37 100644 --- a/editor/translations/ko.po +++ b/editor/translations/ko.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2017-02-08 16:38+0000\n" +"PO-Revision-Date: 2017-10-16 18:47+0000\n" "Last-Translator: 박한얼 <volzhs@gmail.com>\n" "Language-Team: Korean <https://hosted.weblate.org/projects/godot-engine/" "godot/ko/>\n" @@ -17,7 +17,7 @@ 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.12-dev\n" +"X-Generator: Weblate 2.17\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -84,9 +84,8 @@ msgid "Anim Track Change Value Mode" msgstr "트랙 ê°’ 모드 변경" #: editor/animation_editor.cpp -#, fuzzy msgid "Anim Track Change Wrap Mode" -msgstr "트랙 ê°’ 모드 변경" +msgstr "ì• ë‹ˆë©”ì´ì…˜ 트랙 ëž© 모드 변경" #: editor/animation_editor.cpp msgid "Edit Node Curve" @@ -194,10 +193,9 @@ msgid "Create %d NEW tracks and insert keys?" msgstr "%dê°œì˜ ìƒˆ íŠ¸ëž™ì„ ìƒì„±í•˜ê³ 키를 ì¶”ê°€í•˜ì‹œê² ìŠµë‹ˆê¹Œ?" #: editor/animation_editor.cpp editor/create_dialog.cpp -#: editor/editor_audio_buses.cpp +#: editor/editor_audio_buses.cpp editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp #: editor/plugins/mesh_instance_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp editor/project_manager.cpp #: editor/script_create_dialog.cpp msgid "Create" @@ -359,271 +357,6 @@ msgstr "ë°°ì—´ ê°’ 타입 변경" msgid "Change Array Value" msgstr "ë°°ì—´ ê°’ 변경" -#: editor/asset_library_editor_plugin.cpp -msgid "Free" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp -msgid "Version:" -msgstr "ë²„ì „:" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Contents:" -msgstr "ìƒìˆ˜:" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "View Files" -msgstr "파ì¼" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_help.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp -msgid "Description:" -msgstr "설명:" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -#: editor/project_manager.cpp -msgid "Install" -msgstr "설치" - -#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp -#: editor/connections_dialog.cpp editor/export_template_manager.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -#: editor/project_settings_editor.cpp editor/property_editor.cpp -#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Close" -msgstr "닫기" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve hostname:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Connection error, please try again." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Can't connect." -msgstr "연결하기.." - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Can't connect to host:" -msgstr "ì—°ê²°í• ë…¸ë“œ:" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response from host:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Request failed, return code:" -msgstr "ìš”ì²í•œ íŒŒì¼ í˜•ì‹ì„ 알 수 ì—†ìŒ:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Req. Failed." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Request failed, too many redirects" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Redirect Loop." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Bad download hash, assuming file has been tampered with." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Expected:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Got:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed sha256 hash check" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Asset Download Error:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -msgid "Success!" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Fetching:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Resolving.." -msgstr "ì €ìž¥ 중.." - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Connecting.." -msgstr "연결하기.." - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Requesting.." -msgstr "테스팅" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Error making request" -msgstr "리소스 ì €ìž¥ 중 ì—러!" - -#: editor/asset_library_editor_plugin.cpp -msgid "Idle" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Retry" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Download Error" -msgstr "아래" - -#: editor/asset_library_editor_plugin.cpp -msgid "Download for this asset is already in progress!" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "first" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "prev" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "next" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "last" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "All" -msgstr "모ë‘" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/property_selector.cpp editor/quick_open.cpp -#: editor/settings_config_dialog.cpp -msgid "Search:" -msgstr "검색:" - -#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Search" -msgstr "검색" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/project_manager.cpp -msgid "Import" -msgstr "ê°€ì ¸ì˜¤ê¸°" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Plugins" -msgstr "플러그ì¸" - -#: editor/asset_library_editor_plugin.cpp -msgid "Sort:" -msgstr "ì •ë ¬:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Reverse" -msgstr "뒤집기" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Category:" -msgstr "ì¹´í…Œê³ ë¦¬:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Site:" -msgstr "사ì´íЏ:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "ì§€ì›.." - -#: editor/asset_library_editor_plugin.cpp -msgid "Official" -msgstr "ê³µì‹" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -msgid "Community" -msgstr "커뮤니티" - -#: editor/asset_library_editor_plugin.cpp -msgid "Testing" -msgstr "테스팅" - -#: editor/asset_library_editor_plugin.cpp -msgid "Assets ZIP File" -msgstr "ì—ì…‹ ZIP 파ì¼" - -#: editor/call_dialog.cpp -msgid "Method List For '%s':" -msgstr "'%s' 함수 목ë¡:" - -#: editor/call_dialog.cpp modules/visual_script/visual_script_editor.cpp -msgid "Call" -msgstr "호출" - -#: editor/call_dialog.cpp -msgid "Method List:" -msgstr "함수 목ë¡:" - -#: editor/call_dialog.cpp -msgid "Arguments:" -msgstr "ì¸ìˆ˜:" - -#: editor/call_dialog.cpp -msgid "Return:" -msgstr "리턴:" - #: editor/code_editor.cpp msgid "Go to Line" msgstr "ë¼ì¸ìœ¼ë¡œ ì´ë™" @@ -637,9 +370,8 @@ msgid "No Matches" msgstr "ì¼ì¹˜ ê²°ê³¼ ì—†ìŒ" #: editor/code_editor.cpp -#, fuzzy msgid "Replaced %d occurrence(s)." -msgstr "%d 회 변경ë¨." +msgstr "%d 회 êµì²´ë¨." #: editor/code_editor.cpp msgid "Replace" @@ -661,6 +393,14 @@ msgstr "ì „ì²´ 단어" msgid "Selection Only" msgstr "ì„ íƒì˜ì—ë§Œ" +#: editor/code_editor.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp +msgid "Search" +msgstr "검색" + #: editor/code_editor.cpp editor/editor_help.cpp msgid "Find" msgstr "찾기" @@ -693,11 +433,11 @@ msgstr "변경 시 알림" msgid "Skip" msgstr "건너뛰기" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom In" msgstr "확대" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom Out" msgstr "축소" @@ -766,6 +506,20 @@ msgstr "지연" msgid "Oneshot" msgstr "1회" +#: editor/connections_dialog.cpp editor/dependency_editor.cpp +#: editor/export_template_manager.cpp +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Close" +msgstr "닫기" + #: editor/connections_dialog.cpp msgid "Connect" msgstr "ì—°ê²°" @@ -791,7 +545,7 @@ msgstr "연결하기.." msgid "Disconnect" msgstr "ì—°ê²°í•´ì œ" -#: editor/connections_dialog.cpp editor/node_dock.cpp +#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" msgstr "시그ë„" @@ -808,12 +562,25 @@ msgstr "ì¦ê²¨ì°¾ê¸°:" msgid "Recent:" msgstr "최근:" +#: editor/create_dialog.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp +#: editor/quick_open.cpp editor/settings_config_dialog.cpp +msgid "Search:" +msgstr "검색:" + #: editor/create_dialog.cpp editor/editor_help.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp #: editor/quick_open.cpp msgid "Matches:" msgstr "ì¼ì¹˜:" +#: editor/create_dialog.cpp editor/editor_help.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp +#: editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "설명:" + #: editor/dependency_editor.cpp msgid "Search Replacement For:" msgstr "ëŒ€ì²´í• ëŒ€ìƒ ì°¾ê¸°:" @@ -873,6 +640,10 @@ msgid "Owners Of:" msgstr "ì†Œìœ ìž:" #: editor/dependency_editor.cpp +msgid "Remove selected files from the project? (no undo)" +msgstr "프로ì 트ì—서 ì„ íƒëœ 파ì¼ë“¤ì„ ì‚ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ? (ë˜ëŒë¦¬ê¸° 불가)" + +#: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" @@ -882,8 +653,8 @@ msgstr "" "ì •ë§ë¡œ ì‚ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ? (ë˜ëŒë¦¬ê¸° 불가)" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (no undo)" -msgstr "프로ì 트ì—서 ì„ íƒëœ 파ì¼ë“¤ì„ ì‚ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ? (ë˜ëŒë¦¬ê¸° 불가)" +msgid "Cannot remove:\n" +msgstr "" #: editor/dependency_editor.cpp msgid "Error loading:" @@ -949,14 +720,8 @@ msgid "Godot Engine contributors" msgstr "" #: editor/editor_about.cpp -#, fuzzy -msgid "Authors" -msgstr "ì €ìž:" - -#: editor/editor_about.cpp -#, fuzzy msgid "Project Founders" -msgstr "프로ì 트 ë§¤ë‹ˆì €" +msgstr "프로ì 트 창립ìž" #: editor/editor_about.cpp msgid "Lead Developer" @@ -971,6 +736,39 @@ msgid "Developers" msgstr "" #: editor/editor_about.cpp +msgid "Authors" +msgstr "ì €ìž" + +#: editor/editor_about.cpp +msgid "Platinum Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Mini Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Silver Donors" +msgstr "" + +#: editor/editor_about.cpp +#, fuzzy +msgid "Bronze Donors" +msgstr "아래로 ë³µì œ" + +#: editor/editor_about.cpp +msgid "Donors" +msgstr "" + +#: editor/editor_about.cpp msgid "License" msgstr "" @@ -987,14 +785,12 @@ msgid "" msgstr "" #: editor/editor_about.cpp -#, fuzzy msgid "All Components" -msgstr "ìƒìˆ˜:" +msgstr "ëª¨ë“ ì»´í¬ë„ŒíЏ" #: editor/editor_about.cpp -#, fuzzy msgid "Components" -msgstr "ìƒìˆ˜:" +msgstr "ì»´í¬ë„ŒíЏ" #: editor/editor_about.cpp msgid "Licenses" @@ -1005,37 +801,42 @@ msgid "Error opening package file, not in zip format." msgstr "" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "Uncompressing Assets" -msgstr "무압축" +msgstr "ì–´ì…‹ ì••ì¶•í•´ì œ" #: editor/editor_asset_installer.cpp editor/project_manager.cpp msgid "Package Installed Successfully!" msgstr "패키지가 성공ì 으로 설치ë˜ì—ˆìŠµë‹ˆë‹¤!" #: editor/editor_asset_installer.cpp -#, fuzzy +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Success!" +msgstr "" + +#: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp +msgid "Install" +msgstr "설치" + +#: editor/editor_asset_installer.cpp msgid "Package Installer" -msgstr "패키지가 성공ì 으로 설치ë˜ì—ˆìŠµë‹ˆë‹¤!" +msgstr "패키지 ì¸ìŠ¤í†¨ëŸ¬" #: editor/editor_audio_buses.cpp msgid "Speakers" msgstr "" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Add Effect" -msgstr "빈 í”„ë ˆìž„ 추가" +msgstr "ì´íŽ™íŠ¸ 추가" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Rename Audio Bus" -msgstr "ìžë™ 로드 ì´ë¦„ 변경" +msgstr "오디오 버스 ì´ë¦„ 변경" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Toggle Audio Bus Solo" -msgstr "ìžë™ ìž¬ìƒ ì „í™˜" +msgstr "오디오 버스 솔로 í† ê¸€" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Mute" @@ -1058,20 +859,14 @@ msgid "Move Bus Effect" msgstr "" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Delete Bus Effect" -msgstr "ì„ íƒ í•목 ì‚ì œ" +msgstr "버스 ì´íŽ™íŠ¸ ì‚ì œ" #: editor/editor_audio_buses.cpp msgid "Audio Bus, Drag and Drop to rearrange." msgstr "" #: editor/editor_audio_buses.cpp -#, fuzzy -msgid "Bus options" -msgstr "디버그 옵션" - -#: editor/editor_audio_buses.cpp msgid "Solo" msgstr "" @@ -1083,6 +878,10 @@ msgstr "" msgid "Bypass" msgstr "" +#: editor/editor_audio_buses.cpp +msgid "Bus options" +msgstr "버스 옵션" + #: editor/editor_audio_buses.cpp editor/plugins/tile_map_editor_plugin.cpp #: editor/scene_tree_dock.cpp msgid "Duplicate" @@ -1090,32 +889,37 @@ msgstr "ë³µì œ" #: editor/editor_audio_buses.cpp #, fuzzy +msgid "Reset Volume" +msgstr "줌 리셋" + +#: editor/editor_audio_buses.cpp msgid "Delete Effect" -msgstr "ì„ íƒ í•목 ì‚ì œ" +msgstr "ì´íŽ™íŠ¸ ì‚ì œ" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Add Audio Bus" -msgstr "%s 추가" +msgstr "오디오 버스 추가" #: editor/editor_audio_buses.cpp msgid "Master bus can't be deleted!" msgstr "" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Delete Audio Bus" -msgstr "ë ˆì´ì•„웃 ì‚ì œ" +msgstr "오디오 버스 ì‚ì œ" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Duplicate Audio Bus" -msgstr "ì• ë‹ˆë©”ì´ì…˜ ë³µì œí•˜ê¸°" +msgstr "오디오 버스 ë³µì œ" #: editor/editor_audio_buses.cpp #, fuzzy +msgid "Reset Bus Volume" +msgstr "줌 리셋" + +#: editor/editor_audio_buses.cpp msgid "Move Audio Bus" -msgstr "ì´ë™ ì•¡ì…˜" +msgstr "오디오 버스 ì´ë™" #: editor/editor_audio_buses.cpp msgid "Save Audio Bus Layout As.." @@ -1134,30 +938,25 @@ msgid "There is no 'res://default_bus_layout.tres' file." msgstr "" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Invalid file, not an audio bus layout." -msgstr "" -"ìœ íš¨í•˜ì§€ ì•Šì€ íŒŒì¼ í™•ìž¥ìž.\n" -".fnt 를 사용하세요." +msgstr "오디오 버스 ë ˆì´ì•„ì›ƒì´ ì•„ë‹Œ, ìœ íš¨í•˜ì§€ ì•Šì€ íŒŒì¼." #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Add Bus" -msgstr "%s 추가" +msgstr "버스 추가" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Create a new Bus Layout." -msgstr "새 리소스 만들기" +msgstr "새로운 버스 ë ˆì´ì•„웃 만들기." -#: editor/editor_audio_buses.cpp editor/script_create_dialog.cpp +#: editor/editor_audio_buses.cpp editor/property_editor.cpp +#: editor/script_create_dialog.cpp msgid "Load" msgstr "로드" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Load an existing Bus Layout." -msgstr "디스í¬ì—서 기존 리소스를 로드하여 편집합니다." +msgstr "기존 버스 ë ˆì´ì•„웃 불러오기." #: editor/editor_audio_buses.cpp #: editor/plugins/animation_player_editor_plugin.cpp @@ -1169,9 +968,8 @@ msgid "Save this Bus Layout to a file." msgstr "" #: editor/editor_audio_buses.cpp editor/import_dock.cpp -#, fuzzy msgid "Load Default" -msgstr "Default" +msgstr "기본값 불러오기" #: editor/editor_audio_buses.cpp msgid "Load the default Bus Layout." @@ -1244,7 +1042,7 @@ msgid "Rearrange Autoloads" msgstr "ìžë™ 로드 위치 변경" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp scene/gui/file_dialog.cpp +#: scene/gui/file_dialog.cpp msgid "Path:" msgstr "경로:" @@ -1252,9 +1050,7 @@ msgstr "경로:" msgid "Node Name:" msgstr "노드 ì´ë¦„:" -#: editor/editor_autoload_settings.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp editor/project_manager.cpp +#: editor/editor_autoload_settings.cpp editor/project_manager.cpp msgid "Name" msgstr "ì´ë¦„" @@ -1279,27 +1075,27 @@ msgid "Updating scene.." msgstr "씬 ì—…ë°ì´íЏ 중.." #: editor/editor_dir_dialog.cpp -#, fuzzy msgid "Please select a base directory first" -msgstr "ë¨¼ì € ì”¬ì„ ì €ìž¥í•´ì£¼ì„¸ìš”." +msgstr "ë¨¼ì € 기본 ë””ë ‰í† ë¦¬ë¥¼ ì„ íƒí•´ì£¼ì„¸ìš”" #: editor/editor_dir_dialog.cpp msgid "Choose a Directory" msgstr "ë””ë ‰í† ë¦¬ ì„ íƒ" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Create Folder" msgstr "í´ë” ìƒì„±" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: editor/editor_plugin_settings.cpp editor/plugins/theme_editor_plugin.cpp -#: editor/project_export.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp +#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp +#: scene/gui/file_dialog.cpp msgid "Name:" msgstr "ì´ë¦„:" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Could not create folder." msgstr "í´ë”를 만들 수 없습니다." @@ -1319,30 +1115,6 @@ msgstr "패킹중" msgid "Template file not found:\n" msgstr "" -#: editor/editor_export.cpp -msgid "Added:" -msgstr "추가ë¨:" - -#: editor/editor_export.cpp -msgid "Removed:" -msgstr "ì œê±°ë¨:" - -#: editor/editor_export.cpp -msgid "Error saving atlas:" -msgstr "ì•„í‹€ë¼ìФ ì €ìž¥ 중 ì—러:" - -#: editor/editor_export.cpp -msgid "Could not save atlas subtexture:" -msgstr "ì•„í‹€ë¼ìФ 서브 í…스ì³ë¥¼ ì €ìž¥í• ìˆ˜ 없습니다:" - -#: editor/editor_export.cpp -msgid "Exporting for %s" -msgstr "%s 내보내기" - -#: editor/editor_export.cpp -msgid "Setting Up.." -msgstr "ì„¤ì • 중.." - #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "파ì¼ì´ 존재합니다. ë®ì–´ì“°ì‹œê² 습니까?" @@ -1427,6 +1199,11 @@ msgstr "ì¦ê²¨ì°¾ê¸° 위로 ì´ë™" msgid "Move Favorite Down" msgstr "ì¦ê²¨ì°¾ê¸° 아래로 ì´ë™" +#: editor/editor_file_dialog.cpp +#, fuzzy +msgid "Go to parent folder" +msgstr "í´ë”를 만들 수 없습니다." + #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Directories & Files:" msgstr "ë””ë ‰í† ë¦¬ì™€ 파ì¼:" @@ -1453,9 +1230,8 @@ msgid "ScanSources" msgstr "소스 조사" #: editor/editor_file_system.cpp -#, fuzzy msgid "(Re)Importing Assets" -msgstr "다시 ê°€ì ¸ì˜¤ê¸°" +msgstr "ì–´ì…‹ (다시) ê°€ì ¸ì˜¤ê¸°" #: editor/editor_help.cpp editor/editor_node.cpp #: editor/plugins/script_editor_plugin.cpp @@ -1470,6 +1246,10 @@ msgstr "í´ëž˜ìФ 목ë¡:" msgid "Search Classes" msgstr "í´ëž˜ìФ 검색" +#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +msgid "Top" +msgstr "윗면" + #: editor/editor_help.cpp editor/property_editor.cpp msgid "Class:" msgstr "í´ëž˜ìФ:" @@ -1486,15 +1266,30 @@ msgstr "ìƒì†í•œ í´ëž˜ìФ:" msgid "Brief Description:" msgstr "간단한 설명:" +#: editor/editor_help.cpp +#, fuzzy +msgid "Members" +msgstr "멤버:" + #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "멤버:" #: editor/editor_help.cpp +#, fuzzy +msgid "Public Methods" +msgstr "공개 함수:" + +#: editor/editor_help.cpp msgid "Public Methods:" msgstr "공개 함수:" #: editor/editor_help.cpp +#, fuzzy +msgid "GUI Theme Items" +msgstr "GUI 테마 í•목:" + +#: editor/editor_help.cpp msgid "GUI Theme Items:" msgstr "GUI 테마 í•목:" @@ -1504,53 +1299,85 @@ msgstr "시그ë„:" #: editor/editor_help.cpp #, fuzzy +msgid "Enumerations" +msgstr "Enumerations:" + +#: editor/editor_help.cpp msgid "Enumerations:" -msgstr "ì• ë‹ˆë©”ì´ì…˜" +msgstr "Enumerations:" #: editor/editor_help.cpp msgid "enum " msgstr "" #: editor/editor_help.cpp +#, fuzzy +msgid "Constants" +msgstr "ìƒìˆ˜:" + +#: editor/editor_help.cpp msgid "Constants:" msgstr "ìƒìˆ˜:" #: editor/editor_help.cpp +#, fuzzy +msgid "Description" +msgstr "설명:" + +#: editor/editor_help.cpp +#, fuzzy +msgid "Properties" +msgstr "ì†ì„±:" + +#: editor/editor_help.cpp msgid "Property Description:" msgstr "ì†ì„± 설명:" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this property. Please help us by " +"[color=$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp +#, fuzzy +msgid "Methods" +msgstr "함수 목ë¡:" + +#: editor/editor_help.cpp msgid "Method Description:" msgstr "함수 설명:" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this method. Please help us by [color=" +"$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp msgid "Search Text" msgstr "ë¬¸ìž ê²€ìƒ‰" #: editor/editor_log.cpp -#, fuzzy msgid "Output:" -msgstr " ì¶œë ¥:" +msgstr "ì¶œë ¥:" #: editor/editor_log.cpp editor/plugins/animation_tree_editor_plugin.cpp -#: editor/plugins/rich_text_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_editor_debugger.cpp scene/gui/line_edit.cpp -#: scene/gui/text_edit.cpp +#: editor/property_editor.cpp editor/script_editor_debugger.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Clear" msgstr "지우기" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Error saving resource!" msgstr "리소스 ì €ìž¥ 중 ì—러!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Save Resource As.." msgstr "리소스를 다른 ì´ë¦„으로 ì €ìž¥.." -#: editor/editor_node.cpp editor/export_template_manager.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "I see.." msgstr "ì•Œê² ìŠµë‹ˆë‹¤.." @@ -1567,6 +1394,30 @@ msgid "Error while saving." msgstr "ì €ìž¥ 중 ì—러." #: editor/editor_node.cpp +#, fuzzy +msgid "Can't open '%s'." +msgstr "'..'ì— ìˆ˜í–‰í• ìˆ˜ ì—†ìŒ" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Error while parsing '%s'." +msgstr "ì €ìž¥ 중 ì—러." + +#: editor/editor_node.cpp +msgid "Unexpected end of file '%s'." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Missing '%s' or its dependencies." +msgstr "'%s' ì”¬ì˜ ì¢…ì† í•ëª©ì´ ê¹¨ì ¸ìžˆìŠµë‹ˆë‹¤.:" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Error while loading '%s'." +msgstr "ì €ìž¥ 중 ì—러." + +#: editor/editor_node.cpp msgid "Saving Scene" msgstr "씬 ì €ìž¥" @@ -1579,9 +1430,8 @@ msgid "Creating Thumbnail" msgstr "ì¸ë„¤ì¼ ìƒì„± 중" #: editor/editor_node.cpp -#, fuzzy msgid "This operation can't be done without a tree root." -msgstr "ì´ ìž‘ì—…ì€ ì”¬ ì—†ì´ëŠ” 불가합니다." +msgstr "ì´ ìž‘ì—…ì€ íŠ¸ë¦¬ 루트 ì—†ì´ëŠ” 불가합니다." #: editor/editor_node.cpp msgid "" @@ -1626,6 +1476,33 @@ msgid "Restored default layout to base settings." msgstr "기본 ë ˆì´ì•„ì›ƒì´ ì´ˆê¸° ì„¤ì •ìœ¼ë¡œ ë³µì›ë˜ì—ˆìŠµë‹ˆë‹¤." #: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was imported, so it's not editable.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was instanced or inherited.\n" +"Changes to it will not be kept when saving the current scene." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource was imported, so it's not editable. Change its settings in the " +"import panel and then re-import." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This scene was imported, so changes to it will not be kept.\n" +"Instancing it or inheriting will allow making changes to it.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp msgid "Copy Params" msgstr "ì†ì„± 복사" @@ -1658,7 +1535,6 @@ msgid "There is no defined scene to run." msgstr "실행하기 위해 ì •ì˜ëœ ì”¬ì´ ì—†ìŠµë‹ˆë‹¤." #: editor/editor_node.cpp -#, fuzzy msgid "" "No main scene has ever been defined, select one?\n" "You can change it later in \"Project Settings\" under the 'application' " @@ -1710,9 +1586,8 @@ msgid "Quick Open Script.." msgstr "ë¹ ë¥¸ 스í¬ë¦½íЏ 열기.." #: editor/editor_node.cpp -#, fuzzy msgid "Save & Close" -msgstr "파ì¼ë¡œ ì €ìž¥í•˜ê¸°" +msgstr "ì €ìž¥ ë° ë‹«ê¸°" #: editor/editor_node.cpp msgid "Save changes to '%s' before closing?" @@ -1723,9 +1598,8 @@ msgid "Save Scene As.." msgstr "ì”¬ì„ ë‹¤ë¥¸ ì´ë¦„으로 ì €ìž¥.." #: editor/editor_node.cpp -#, fuzzy msgid "No" -msgstr "노드" +msgstr "아니오" #: editor/editor_node.cpp msgid "Yes" @@ -1748,9 +1622,8 @@ msgid "Export Tile Set" msgstr "íƒ€ì¼ ì…‹ 내보내기" #: editor/editor_node.cpp -#, fuzzy msgid "This operation can't be done without a selected node." -msgstr "ì´ ìž‘ì—…ì€ ì”¬ ì—†ì´ëŠ” 불가합니다." +msgstr "ì´ ìž‘ì—…ì€ ì„ íƒëœ 노드가 ì—†ì„때는 불가합니다." #: editor/editor_node.cpp msgid "Current scene not saved. Open anyway?" @@ -1781,14 +1654,12 @@ msgid "Exit the editor?" msgstr "ì—디터를 ì¢…ë£Œí•˜ì‹œê² ìŠµë‹ˆê¹Œ?" #: editor/editor_node.cpp -#, fuzzy msgid "Open Project Manager?" -msgstr "프로ì 트 ë§¤ë‹ˆì €" +msgstr "프로ì 트 ë§¤ë‹ˆì €ë¥¼ ì—¬ì‹œê² ìŠµë‹ˆê¹Œ?" #: editor/editor_node.cpp -#, fuzzy msgid "Save & Quit" -msgstr "파ì¼ë¡œ ì €ìž¥í•˜ê¸°" +msgstr "ì €ìž¥ ë° ì¢…ë£Œ" #: editor/editor_node.cpp msgid "Save changes to the following scene(s) before quitting?" @@ -1799,6 +1670,12 @@ msgid "Save changes the following scene(s) before opening Project Manager?" msgstr "" #: editor/editor_node.cpp +msgid "" +"This option is deprecated. Situations where refresh must be forced are now " +"considered a bug. Please report." +msgstr "" + +#: editor/editor_node.cpp msgid "Pick a Main Scene" msgstr "ë©”ì¸ ì”¬ ì„ íƒ" @@ -1825,7 +1702,7 @@ msgid "" msgstr "" #: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Ugh" msgstr "오우" @@ -1838,14 +1715,15 @@ msgstr "" "기'로 ì”¬ì„ ì—° 후ì—, 프로ì 트 경로 ì•ˆì— ì €ìž¥í•˜ì„¸ìš”." #: editor/editor_node.cpp -msgid "Error loading scene." -msgstr "씬 로딩 중 ì—러." - -#: editor/editor_node.cpp msgid "Scene '%s' has broken dependencies:" msgstr "'%s' ì”¬ì˜ ì¢…ì† í•ëª©ì´ ê¹¨ì ¸ìžˆìŠµë‹ˆë‹¤.:" #: editor/editor_node.cpp +#, fuzzy +msgid "Clear Recent Scenes" +msgstr "Bones ì—†ì• ê¸°" + +#: editor/editor_node.cpp msgid "Save Layout" msgstr "ë ˆì´ì•„웃 ì €ìž¥" @@ -1875,11 +1753,10 @@ msgid "Distraction Free Mode" msgstr "초집중 모드" #: editor/editor_node.cpp -#, fuzzy msgid "Toggle distraction-free mode." -msgstr "초집중 모드" +msgstr "집중 모드 í† ê¸€." -#: editor/editor_node.cpp editor/io_plugins/editor_scene_import_plugin.cpp +#: editor/editor_node.cpp msgid "Scene" msgstr "씬" @@ -1896,9 +1773,8 @@ msgid "Previous tab" msgstr "ì´ì „ íƒ" #: editor/editor_node.cpp -#, fuzzy msgid "Filter Files.." -msgstr "ë¹ ë¥¸ íŒŒì¼ í•„í„°ë§.." +msgstr "íŒŒì¼ í•„í„°ë§.." #: editor/editor_node.cpp msgid "Operations with scene files." @@ -1964,9 +1840,8 @@ msgid "Miscellaneous project or scene-wide tools." msgstr "프로ì 트 ë˜ëŠ” 씬 ê´€ë ¨ 여러가지 ë„구들." #: editor/editor_node.cpp -#, fuzzy msgid "Project" -msgstr "새 프로ì 트" +msgstr "프로ì 트" #: editor/editor_node.cpp msgid "Project Settings" @@ -2081,9 +1956,8 @@ msgstr "" "니다." #: editor/editor_node.cpp -#, fuzzy msgid "Editor" -msgstr "편집" +msgstr "ì—디터" #: editor/editor_node.cpp editor/settings_config_dialog.cpp msgid "Editor Settings" @@ -2098,9 +1972,8 @@ msgid "Toggle Fullscreen" msgstr "ì „ì²´í™”ë©´ í† ê¸€" #: editor/editor_node.cpp editor/project_export.cpp -#, fuzzy msgid "Manage Export Templates" -msgstr "내보내기 템플릿 로딩 중" +msgstr "내보내기 템플릿 관리" #: editor/editor_node.cpp msgid "Help" @@ -2111,9 +1984,8 @@ msgid "Classes" msgstr "í´ëž˜ìФ" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Online Docs" -msgstr "문서 닫기" +msgstr "온ë¼ì¸ 문서" #: editor/editor_node.cpp msgid "Q&A" @@ -2123,6 +1995,10 @@ msgstr "" msgid "Issue Tracker" msgstr "" +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +msgid "Community" +msgstr "커뮤니티" + #: editor/editor_node.cpp msgid "About" msgstr "ì •ë³´" @@ -2131,7 +2007,7 @@ msgstr "ì •ë³´" msgid "Play the project." msgstr "프로ì 트 실행." -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Play" msgstr "재성" @@ -2147,7 +2023,7 @@ msgstr "씬 ì¼ì‹œ ì •ì§€" msgid "Stop the scene." msgstr "씬 ì •ì§€." -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Stop" msgstr "ì •ì§€" @@ -2220,6 +2096,16 @@ msgid "Object properties." msgstr "오브ì 트 ì†ì„±." #: editor/editor_node.cpp +#, fuzzy +msgid "Changes may be lost!" +msgstr "ì´ë¯¸ì§€ 그룹 변경" + +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Import" +msgstr "ê°€ì ¸ì˜¤ê¸°" + +#: editor/editor_node.cpp msgid "FileSystem" msgstr "íŒŒì¼ ì‹œìŠ¤í…œ" @@ -2235,14 +2121,6 @@ msgstr "ì¶œë ¥" msgid "Don't Save" msgstr "" -#: editor/editor_node.cpp editor/editor_reimport_dialog.cpp -msgid "Re-Import" -msgstr "다시 ê°€ì ¸ì˜¤ê¸°" - -#: editor/editor_node.cpp editor/editor_plugin_settings.cpp -msgid "Update" -msgstr "ê°±ì‹ " - #: editor/editor_node.cpp msgid "Import Templates From ZIP File" msgstr "ZIP 파ì¼ë¡œë¶€í„° í…œí”Œë¦¿ì„ ê°€ì ¸ì˜¤ê¸°" @@ -2268,9 +2146,8 @@ msgid "Open & Run a Script" msgstr "스í¬ë¦½íŠ¸ë¥¼ ì—´ê³ ì‹¤í–‰" #: editor/editor_node.cpp -#, fuzzy msgid "New Inherited" -msgstr "새 ìƒì† 씬.." +msgstr "새 ìƒì† 씬" #: editor/editor_node.cpp msgid "Load Errors" @@ -2281,40 +2158,52 @@ msgid "Select" msgstr "ì„ íƒ" #: editor/editor_node.cpp -#, fuzzy msgid "Open 2D Editor" -msgstr "ì—디터ì—서 열기" +msgstr "2D ì—디터 열기" #: editor/editor_node.cpp -#, fuzzy msgid "Open 3D Editor" -msgstr "ì—디터ì—서 열기" +msgstr "3D ì—디터 열기" #: editor/editor_node.cpp -#, fuzzy msgid "Open Script Editor" -msgstr "ì—디터ì—서 열기" +msgstr "스í¬ë¦½íЏ ì—디터 열기" #: editor/editor_node.cpp -#, fuzzy msgid "Open Asset Library" -msgstr "ë¼ì´ë¸ŒëŸ¬ë¦¬ 내보내기" +msgstr "ì–´ì…‹ ë¼ì´ë¸ŒëŸ¬ë¦¬ 열기" #: editor/editor_node.cpp -#, fuzzy msgid "Open the next Editor" -msgstr "ì—디터ì—서 열기" +msgstr "ë‹¤ìŒ ì—디터 열기" #: editor/editor_node.cpp -#, fuzzy msgid "Open the previous Editor" -msgstr "ì—디터ì—서 열기" +msgstr "ì´ì „ ì—디터 열기" + +#: editor/editor_plugin.cpp +#, fuzzy +msgid "Creating Mesh Previews" +msgstr "메쉬 ë¼ì´ë¸ŒëŸ¬ë¦¬ ìƒì„± 중" + +#: editor/editor_plugin.cpp +msgid "Thumbnail.." +msgstr "ì¸ë„¤ì¼.." #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" msgstr "ì„¤ì¹˜ëœ í”ŒëŸ¬ê·¸ì¸:" #: editor/editor_plugin_settings.cpp +msgid "Update" +msgstr "ê°±ì‹ " + +#: editor/editor_plugin_settings.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Version:" +msgstr "ë²„ì „:" + +#: editor/editor_plugin_settings.cpp msgid "Author:" msgstr "ì €ìž:" @@ -2366,26 +2255,6 @@ msgstr "ìžì‹ " msgid "Frame #:" msgstr "í”„ë ˆìž„ #:" -#: editor/editor_reimport_dialog.cpp -msgid "Please wait for scan to complete." -msgstr "ìŠ¤ìº”ì´ ì™„ë£Œë 때까지 ê¸°ë‹¤ë ¤ì£¼ì„¸ìš”." - -#: editor/editor_reimport_dialog.cpp -msgid "Current scene must be saved to re-import." -msgstr "다시 ê°€ì ¸ì˜¤ê¸° 위해서는 현재 ì”¬ì„ ì €ìž¥í•´ì•¼ 합니다." - -#: editor/editor_reimport_dialog.cpp -msgid "Save & Re-Import" -msgstr "ì €ìž¥ ë° ë‹¤ì‹œ ê°€ì ¸ì˜¤ê¸°" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Importing" -msgstr "다시 ê°€ì ¸ì˜¤ê¸°" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Import Changed Resources" -msgstr "ë³€ê²½ëœ ë¦¬ì†ŒìŠ¤ 다시 ê°€ì ¸ì˜¤ê¸°" - #: editor/editor_run_native.cpp msgid "Select device from the list" msgstr "" @@ -2437,33 +2306,28 @@ msgid "Import From Node:" msgstr "노드ì—서 ê°€ì ¸ì˜¤ê¸°:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Re-Download" -msgstr "다시 로드" +msgstr "다시 다운로드" #: editor/export_template_manager.cpp -#, fuzzy msgid "Uninstall" -msgstr "설치" +msgstr "ì‚ì œ" #: editor/export_template_manager.cpp -#, fuzzy msgid "(Installed)" -msgstr "설치" +msgstr "(설치ë¨)" #: editor/export_template_manager.cpp -#, fuzzy msgid "Download" -msgstr "아래" +msgstr "다운로드" #: editor/export_template_manager.cpp msgid "(Missing)" msgstr "" #: editor/export_template_manager.cpp -#, fuzzy msgid "(Current)" -msgstr "현재:" +msgstr "(현재)" #: editor/export_template_manager.cpp msgid "Remove template version '%s'?" @@ -2488,52 +2352,40 @@ msgid "No version.txt found inside templates." msgstr "" #: editor/export_template_manager.cpp -#, fuzzy msgid "Error creating path for templates:\n" -msgstr "ì•„í‹€ë¼ìФ ì €ìž¥ 중 ì—러:" +msgstr "템플릿 경로 ìƒì„± ì—러:\n" #: editor/export_template_manager.cpp -#, fuzzy msgid "Extracting Export Templates" -msgstr "내보내기 템플릿 로딩 중" +msgstr "내보내기 템플릿 ì••ì¶•í•´ì œ 중" #: editor/export_template_manager.cpp msgid "Importing:" msgstr "ê°€ì ¸ì˜¤ëŠ” 중:" #: editor/export_template_manager.cpp -msgid "Loading Export Templates" -msgstr "내보내기 템플릿 로딩 중" - -#: editor/export_template_manager.cpp -#, fuzzy msgid "Current Version:" -msgstr "현재 씬" +msgstr "현재 ë²„ì „:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Installed Versions:" -msgstr "ì„¤ì¹˜ëœ í”ŒëŸ¬ê·¸ì¸:" +msgstr "ì„¤ì¹˜ëœ ë²„ì „:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Install From File" -msgstr "프로ì 트 설치:" +msgstr "파ì¼ë¡œë¶€í„° 설치" #: editor/export_template_manager.cpp -#, fuzzy msgid "Remove Template" -msgstr "ì•„ì´í…œ ì‚ì œ" +msgstr "템플릿 ì œê±°" #: editor/export_template_manager.cpp -#, fuzzy msgid "Select template file" -msgstr "ì„ íƒëœ 파ì¼ë“¤ì„ ì‚ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ?" +msgstr "템플릿 íŒŒì¼ ì„ íƒ" #: editor/export_template_manager.cpp -#, fuzzy msgid "Export Template Manager" -msgstr "내보내기 템플릿 로딩 중" +msgstr "내보내기 템플릿 ë§¤ë‹ˆì €" #: editor/file_type_cache.cpp msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" @@ -2544,105 +2396,121 @@ msgid "Cannot navigate to '" msgstr "" #: editor/filesystem_dock.cpp -#, fuzzy +msgid "View items as a grid of thumbnails" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "View items as a list" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "" "\n" -"Status: Needs Re-Import" -msgstr "ì €ìž¥ ë° ë‹¤ì‹œ ê°€ì ¸ì˜¤ê¸°" +"Status: Import of file failed. Please fix file and reimport manually." +msgstr "" #: editor/filesystem_dock.cpp -#, fuzzy msgid "" "\n" "Source: " -msgstr "소스:" +msgstr "" +"\n" +"소스: " #: editor/filesystem_dock.cpp -msgid "Same source and destination files, doing nothing." -msgstr "소스와 ëŒ€ìƒ íŒŒì¼ì´ ë™ì¼í•˜ì—¬, 무시ë©ë‹ˆë‹¤." +#, fuzzy +msgid "Cannot move/rename resources root." +msgstr "소스 í°íŠ¸ë¥¼ 로드/ì²˜ë¦¬í• ìˆ˜ 없습니다." #: editor/filesystem_dock.cpp -msgid "Target file exists, can't overwrite. Delete first." -msgstr "" +#, fuzzy +msgid "Cannot move a folder into itself.\n" +msgstr "ìžì‹ ì„ ê°€ì ¸ì˜¬ 수 없습니다:" #: editor/filesystem_dock.cpp -msgid "Same source and destination paths, doing nothing." -msgstr "소스와 ëŒ€ìƒ ê²½ë¡œê°€ ë™ì¼í•˜ì—¬, 무시ë©ë‹ˆë‹¤." +#, fuzzy +msgid "Error moving:\n" +msgstr "ë””ë ‰í† ë¦¬ ì´ë™ ì—러:\n" #: editor/filesystem_dock.cpp -msgid "Can't move directories to within themselves." -msgstr "ë””ë ‰í† ë¦¬ë¥¼ ìžì‹ 으로 ì´ë™í• 수 없습니다." +#, fuzzy +msgid "Unable to update dependencies:\n" +msgstr "'%s' ì”¬ì˜ ì¢…ì† í•ëª©ì´ ê¹¨ì ¸ìžˆìŠµë‹ˆë‹¤.:" #: editor/filesystem_dock.cpp -msgid "Can't rename deps for:\n" +msgid "No name provided" msgstr "" #: editor/filesystem_dock.cpp -#, fuzzy -msgid "Error moving file:\n" -msgstr "ì´ë¯¸ì§€ 로드 ì—러:" +msgid "Provided name contains invalid characters" +msgstr "" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Error moving dir:\n" -msgstr "ê°€ì ¸ì˜¤ê¸° ì—러:" +msgid "No name provided." +msgstr "ì´ë¦„ 변경 ë˜ëŠ” ì´ë™.." #: editor/filesystem_dock.cpp -msgid "Can't operate on '..'" -msgstr "'..'ì— ìˆ˜í–‰í• ìˆ˜ ì—†ìŒ" +#, fuzzy +msgid "Name contains invalid characters." +msgstr "ìœ íš¨í•œ 문ìž:" #: editor/filesystem_dock.cpp -msgid "Pick New Name and Location For:" -msgstr "새로운 ì´ë¦„ê³¼ 위치를 ê³ ë¥´ì„¸ìš”:" +#, fuzzy +msgid "A file or folder with this name already exists." +msgstr "그룹 ì´ë¦„ì´ ì´ë¯¸ 사용중입니다!" #: editor/filesystem_dock.cpp -msgid "No files selected!" -msgstr "파ì¼ì´ ì„ íƒë˜ì§€ 않았습니다!" +#, fuzzy +msgid "Renaming file:" +msgstr "변수명 변경" #: editor/filesystem_dock.cpp #, fuzzy +msgid "Renaming folder:" +msgstr "노드 ì´ë¦„ 변경" + +#: editor/filesystem_dock.cpp msgid "Expand all" -msgstr "부모로 확장" +msgstr "ëª¨ë‘ í™•ìž¥" #: editor/filesystem_dock.cpp msgid "Collapse all" msgstr "" #: editor/filesystem_dock.cpp -msgid "Show In File Manager" -msgstr "íŒŒì¼ ë§¤ë‹ˆì €ì—서 보기" - -#: editor/filesystem_dock.cpp -msgid "Instance" -msgstr "ì¸ìŠ¤í„´ìŠ¤" +msgid "Copy Path" +msgstr "경로 복사" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "ì¢…ì† ê´€ê³„ 편집.." +#, fuzzy +msgid "Rename.." +msgstr "ì´ë¦„ 변경" #: editor/filesystem_dock.cpp -msgid "View Owners.." -msgstr "ì†Œìœ ìž ë³´ê¸°.." +msgid "Move To.." +msgstr "ì´ë™.." #: editor/filesystem_dock.cpp -msgid "Copy Path" -msgstr "경로 복사" +#, fuzzy +msgid "New Folder.." +msgstr "í´ë” ìƒì„±" #: editor/filesystem_dock.cpp -msgid "Rename or Move.." -msgstr "ì´ë¦„ 변경 ë˜ëŠ” ì´ë™.." +msgid "Show In File Manager" +msgstr "íŒŒì¼ ë§¤ë‹ˆì €ì—서 보기" #: editor/filesystem_dock.cpp -msgid "Move To.." -msgstr "ì´ë™.." +msgid "Instance" +msgstr "ì¸ìŠ¤í„´ìŠ¤" #: editor/filesystem_dock.cpp -msgid "Info" -msgstr "ì •ë³´" +msgid "Edit Dependencies.." +msgstr "ì¢…ì† ê´€ê³„ 편집.." #: editor/filesystem_dock.cpp -msgid "Re-Import.." -msgstr "다시 ê°€ì ¸ì˜¤ê¸°.." +msgid "View Owners.." +msgstr "ì†Œìœ ìž ë³´ê¸°.." #: editor/filesystem_dock.cpp msgid "Previous Directory" @@ -2674,6 +2542,11 @@ msgstr "" msgid "Move" msgstr "ì´ë™" +#: editor/filesystem_dock.cpp editor/plugins/animation_tree_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Rename" +msgstr "ì´ë¦„ 변경" + #: editor/groups_editor.cpp msgid "Add to Group" msgstr "ê·¸ë£¹ì— ì¶”ê°€" @@ -2683,9 +2556,13 @@ msgid "Remove from Group" msgstr "그룹ì—서 ì œê±°" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Import as Single Scene" -msgstr "씬 ê°€ì ¸ì˜¤ëŠ” 중.." +msgstr "ë‹¨ì¼ ì”¬ìœ¼ë¡œ ê°€ì ¸ì˜¤ê¸°" + +#: editor/import/resource_importer_scene.cpp +#, fuzzy +msgid "Import with Separate Animations" +msgstr "ì• ë‹ˆë©”ì´ì…˜ ê°€ì ¸ì˜¤ê¸°.." #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials" @@ -2700,48 +2577,52 @@ msgid "Import with Separate Objects+Materials" msgstr "" #: editor/import/resource_importer_scene.cpp -#, fuzzy +msgid "Import with Separate Objects+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Materials+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Materials+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes" -msgstr "3D 씬 ê°€ì ¸ì˜¤ê¸°" +msgstr "ì—¬ëŸ¬ê°œì˜ ì”¬ìœ¼ë¡œ ê°€ì ¸ì˜¤ê¸°" #: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes+Materials" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Import Scene" msgstr "씬 ê°€ì ¸ì˜¤ê¸°" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Importing Scene.." msgstr "씬 ê°€ì ¸ì˜¤ëŠ” 중.." #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Running Custom Script.." msgstr "ì‚¬ìš©ìž ì •ì˜ ìŠ¤í¬ë¦½íЏ 실행중.." #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Couldn't load post-import script:" msgstr "ê°€ì ¸ì˜¤ê¸° 후 ì‹¤í–‰í• ìŠ¤í¬ë¦½íŠ¸ë¥¼ ë¡œë“œí• ìˆ˜ 없습니다:" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Invalid/broken script for post-import (check console):" msgstr "" "ê°€ì ¸ì˜¤ê¸° 후 ì‹¤í–‰í• ìŠ¤í¬ë¦½íŠ¸ê°€ ìœ íš¨í•˜ì§€ 않거나 ê¹¨ì ¸ìžˆìŠµë‹ˆë‹¤ (콘솔 확ì¸):" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Error running post-import script:" msgstr "ê°€ì ¸ì˜¤ê¸° 후 ì‹¤í–‰í• ìŠ¤í¬ë¦½íЏ 실행 중 ì—러:" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Saving.." msgstr "ì €ìž¥ 중.." @@ -2754,606 +2635,71 @@ msgid "Clear Default for '%s'" msgstr "" #: editor/import_dock.cpp -#, fuzzy msgid " Files" -msgstr "파ì¼" +msgstr " 파ì¼" #: editor/import_dock.cpp -#, fuzzy msgid "Import As:" -msgstr "ê°€ì ¸ì˜¤ê¸°" +msgstr "ë‹¤ìŒ í˜•ì‹ìœ¼ë¡œ ê°€ì ¸ì˜¤ê¸°:" #: editor/import_dock.cpp editor/property_editor.cpp msgid "Preset.." msgstr "프리셋.." #: editor/import_dock.cpp -#, fuzzy msgid "Reimport" msgstr "다시 ê°€ì ¸ì˜¤ê¸°" -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "No bit masks to import!" -msgstr "ê°€ì ¸ì˜¬ 비트 마스í¬ê°€ 없습니다!" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path is empty." -msgstr "ëŒ€ìƒ ê²½ë¡œê°€ 없습니다." - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must be a complete resource path." -msgstr "ëŒ€ìƒ ê²½ë¡œëŠ” ì™„ì „í•œ 리소스 경로여야 합니다." - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must exist." -msgstr "ëŒ€ìƒ ê²½ë¡œê°€ 존재해야 합니다." - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Save path is empty!" -msgstr "ì €ìž¥ 경로가 없습니다!" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Import BitMasks" -msgstr "ë¹„íŠ¸ë§ˆìŠ¤í¬ ê°€ì ¸ì˜¤ê¸°" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s):" -msgstr "소스 í…스ì³:" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Target Path:" -msgstr "ëŒ€ìƒ ê²½ë¡œ:" +#: editor/multi_node_edit.cpp +msgid "MultiNode Set" +msgstr "다중 노드 ì„¤ì •" -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Accept" -msgstr "수ë½" +#: editor/node_dock.cpp +msgid "Groups" +msgstr "그룹" -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Bit Mask" -msgstr "비트 마스í¬" +#: editor/node_dock.cpp +msgid "Select a Node to edit Signals and Groups." +msgstr "시그ë„ê³¼ ê·¸ë£¹ì„ íŽ¸ì§‘í• ë…¸ë“œë¥¼ ì„ íƒí•˜ì„¸ìš”." -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No source font file!" -msgstr "소스 í°íЏ 파ì¼ì´ 없습니다!" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create Poly" +msgstr "í´ë¦¬ê³¤ ìƒì„±" -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No target font resource!" -msgstr "í°íЏ 리소스 경로가 없습니다!" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly" +msgstr "í´ë¦¬ê³¤ 편집" -#: editor/io_plugins/editor_font_import_plugin.cpp +#: editor/plugins/abstract_polygon_2d_editor.cpp #, fuzzy -msgid "" -"Invalid file extension.\n" -"Please use .font." -msgstr "" -"ìœ íš¨í•˜ì§€ ì•Šì€ íŒŒì¼ í™•ìž¥ìž.\n" -".fnt 를 사용하세요." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Can't load/process source font." -msgstr "소스 í°íŠ¸ë¥¼ 로드/ì²˜ë¦¬í• ìˆ˜ 없습니다." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Couldn't save font." -msgstr "í°íŠ¸ë¥¼ ì €ìž¥í• ìˆ˜ 없습니다." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font:" -msgstr "소스 í°íЏ:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font Size:" -msgstr "소스 í°íЏ í¬ê¸°:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Dest Resource:" -msgstr "리소스 경로:" - -#: 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.\n" -"ë‹¤ëžŒì¥ í—Œ ì³‡ë°”í€´ì— íƒ€ê³ íŒŒ." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Test:" -msgstr "테스트:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Options:" -msgstr "옵션:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Font Import" -msgstr "í°íЏ ê°€ì ¸ì˜¤ê¸°" - -#: 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 "ì´ íŒŒì¼ì€ ì´ë¯¸ Godot í°íЏ 파ì¼ìž…니다. BMFont 파ì¼ì„ ì„ íƒí•˜ì„¸ìš”." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Failed opening as BMFont file." -msgstr "BMFont 파ì¼ì„ ì—¬ëŠ”ë° ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error initializing FreeType." -msgstr "FreeType 초기화 ì—러." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Unknown font format." -msgstr "알 수 없는 í°íЏ í¬ë©§." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error loading font." -msgstr "í°íЏ 로딩 ì—러." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Invalid font size." -msgstr "ìœ ìš”í•˜ì§€ ì•Šì€ í°íЏ 사ì´ì¦ˆ." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Invalid font custom source." -msgstr "ì‚¬ìš©ìž ì§€ì • í°íЏ 소스가 ìœ íš¨í•˜ì§€ 않습니다." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/plugins/theme_editor_plugin.cpp -msgid "Font" -msgstr "í°íЏ" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "No meshes to import!" -msgstr "ê°€ì ¸ì˜¬ 메쉬가 없습니다!" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Single Mesh Import" -msgstr "ë‹¨ì¼ ë©”ì‰¬ ê°€ì ¸ì˜¤ê¸°" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Source Mesh(es):" -msgstr "소스 메쉬:" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Mesh" -msgstr "메쉬" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Surface %d" -msgstr "서페ì´ìФ %d" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "No samples to import!" -msgstr "ê°€ì ¸ì˜¬ ìƒ˜í”Œì´ ì—†ìŠµë‹ˆë‹¤!" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Import Audio Samples" -msgstr "오디오 샘플 ê°€ì ¸ì˜¤ê¸°" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Source Sample(s):" -msgstr "소스 샘플:" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Audio Sample" -msgstr "오디오 샘플" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "New Clip" -msgstr "새 í´ë¦½" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Animation Options" -msgstr "ì• ë‹ˆë©”ì´ì…˜ 옵션" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Flags" -msgstr "플래그" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Bake FPS:" -msgstr "FPS ì„¤ì •:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Optimizer" -msgstr "최ì í™”" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Linear Error" -msgstr "최대 ì„ í˜• 오류" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angular Error" -msgstr "최대 ê°ë„ 오류" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angle" -msgstr "최대 ê°ë„" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Clips" -msgstr "í´ë¦½" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Start(s)" -msgstr "시작(ì´ˆ)" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "End(s)" -msgstr "ë(ì´ˆ)" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Loop" -msgstr "루프" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Filters" -msgstr "í•„í„°" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source path is empty." -msgstr "소스 경로가 비어있습니다." - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't load post-import script." -msgstr "ê°€ì ¸ì˜¤ê¸° 후 ì‹¤í–‰í• ìŠ¤í¬ë¦½íŠ¸ë¥¼ ë¡œë“œí• ìˆ˜ 없습니다." - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Invalid/broken script for post-import." -msgstr "ê°€ì ¸ì˜¤ê¸° 후 ì‹¤í–‰í• ìŠ¤í¬ë¦½íŠ¸ê°€ ìœ íš¨í•˜ì§€ 않거나 ê¹¨ì ¸ìžˆìŠµë‹ˆë‹¤." - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Error importing scene." -msgstr "씬 ê°€ì ¸ì˜¤ê¸° ì—러." - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import 3D Scene" -msgstr "3D 씬 ê°€ì ¸ì˜¤ê¸°" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source Scene:" -msgstr "소스 씬:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Same as Target Scene" -msgstr "ëŒ€ìƒ ì”¬ê³¼ ê°™ìŒ" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Shared" -msgstr "ê³µìœ ë¨" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Target Texture Folder:" -msgstr "ëŒ€ìƒ í…ìŠ¤ì³ í´ë”:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Post-Process Script:" -msgstr "ê°€ì ¸ì˜¤ê¸° 후 ìˆ˜í–‰í• ìŠ¤í¬ë¦½íЏ:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Custom Root Node Type:" -msgstr "ì‚¬ìš©ìž ì •ì˜ ë£¨íŠ¸ 노드 타입:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Auto" -msgstr "ìžë™" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Root Node Name:" -msgstr "루트 노드 ì´ë¦„:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "The Following Files are Missing:" -msgstr "다ìŒì˜ 파ì¼ë“¤ì´ ë¹ ì ¸ìžˆìŠµë‹ˆë‹¤:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Anyway" -msgstr "ë¬´ì‹œí•˜ê³ ê°€ì ¸ì˜¤ê¸°" - -#: editor/io_plugins/editor_scene_import_plugin.cpp scene/gui/dialogs.cpp -msgid "Cancel" -msgstr "취소" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import & Open" -msgstr "ê°€ì ¸ì˜¤ê¸° 후 열기" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Edited scene has not been saved, open imported scene anyway?" -msgstr "íŽ¸ì§‘ëœ ì”¬ì´ ì €ìž¥ë˜ì§€ 않았습니다. ë¬´ì‹œí•˜ê³ ê°€ì ¸ì˜¨ ì”¬ì„ ì—¬ì‹œê² ìŠµë‹ˆê¹Œ?" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Image:" -msgstr "ì´ë¯¸ì§€ ê°€ì ¸ì˜¤ê¸°:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Can't import a file over itself:" -msgstr "ìžì‹ ì„ ê°€ì ¸ì˜¬ 수 없습니다:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't localize path: %s (already local)" -msgstr "경로를 로컬 경로로 바꿀 수 없습니다: %s (ì´ë¯¸ 로컬 경로)" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "3D Scene Animation" -msgstr "3D 씬 ì• ë‹ˆë©”ì´ì…˜" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Uncompressed" -msgstr "무압축" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossless (PNG)" -msgstr "무ì†ì‹¤ ì••ì¶• (PNG)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossy (WebP)" -msgstr "ì†ì‹¤ ì••ì¶• (PNG)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress (VRAM)" -msgstr "ì••ì¶• (VRAM)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Format" -msgstr "í…ìŠ¤ì³ í¬ë©§" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Compression Quality (WebP):" -msgstr "í…ìŠ¤ì³ ì••ì¶• 품질 (WebP):" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Options" -msgstr "í…ìŠ¤ì³ ì˜µì…˜" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Please specify some files!" -msgstr "파ì¼ì„ ì§€ì •í•˜ì„¸ìš”!" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "At least one file needed for Atlas." -msgstr "ì•„í‹€ë¼ìФ ìƒì„±ì„ 위해서는 최소 1ê°œ ì´ìƒì˜ 파ì¼ì´ 필요합니다." - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Error importing:" -msgstr "ê°€ì ¸ì˜¤ê¸° ì—러:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Only one file is required for large texture." -msgstr "í° í…스ì³ë¥¼ 위해서는 단 í•˜ë‚˜ì˜ íŒŒì¼ë§Œ 요구ë©ë‹ˆë‹¤." - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Max Texture Size:" -msgstr "최대 í…ìŠ¤ì³ ì‚¬ì´ì¦ˆ:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for Atlas (2D)" -msgstr "ì•„í‹€ë¼ìŠ¤ë¥¼ 위한 í…ìŠ¤ì³ ê°€ì ¸ì˜¤ê¸° (2D)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cell Size:" -msgstr "쎌 사ì´ì¦ˆ:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Large Texture" -msgstr "í° í…스ì³" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Textures (2D)" -msgstr "í° í…ìŠ¤ì³ ê°€ì ¸ì˜¤ê¸° (2D)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture" -msgstr "소스 í…스ì³" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Base Atlas Texture" -msgstr "기본 ì•„í‹€ë¼ìФ í…스ì³" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s)" -msgstr "소트 í…스ì³" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 2D" -msgstr "2D í…ìŠ¤ì³ ê°€ì ¸ì˜¤ê¸°" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 3D" -msgstr "3D í…ìŠ¤ì³ ê°€ì ¸ì˜¤ê¸°" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures" -msgstr "í…ìŠ¤ì³ ê°€ì ¸ì˜¤ê¸°" +msgid "Insert Point" +msgstr "삽입 중" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "2D Texture" -msgstr "2D í…스ì³" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly (Remove Point)" +msgstr "í´ë¦¬ê³¤ 편집 (ì ì‚ì œ)" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "3D Texture" -msgstr "3D í…스ì³" +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Remove Poly And Point" +msgstr "í´ë¦¬ê³¤ê³¼ í¬ì¸íЏ ì‚ì œ" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Atlas Texture" -msgstr "í…ìŠ¤ì³ ì•„í‹€ë¼ìФ" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create a new polygon from scratch." +msgstr "처ìŒë¶€í„° 새로운 í´ë¦¬ê³¤ 만들기." -#: editor/io_plugins/editor_texture_import_plugin.cpp +#: editor/plugins/abstract_polygon_2d_editor.cpp msgid "" -"NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files to " -"the project." +"Edit existing polygon:\n" +"LMB: Move Point.\n" +"Ctrl+LMB: Split Segment.\n" +"RMB: Erase Point." msgstr "" -"알림: 2D í…ìŠ¤ì³ ê°€ì ¸ì˜¤ê¸°ê°€ 필수는 아닙니다. png/jpg 파ì¼ë“¤ì„ 프로ì íŠ¸ì— ë³µì‚¬" -"해서 ì‚¬ìš©í•´ë„ ë©ë‹ˆë‹¤." - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Crop empty space." -msgstr "빈 ì˜ì— 잘ë¼ë‚´ê¸°." - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture" -msgstr "í…스ì³" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Texture" -msgstr "í° í…ìŠ¤ì³ ê°€ì ¸ì˜¤ê¸°" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Load Source Image" -msgstr "소스 ì´ë¯¸ì§€ 로드" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Slicing" -msgstr "ìžë¥´ëŠ” 중" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Inserting" -msgstr "삽입 중" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Saving" -msgstr "ì €ìž¥ 중" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save large texture:" -msgstr "í° í…스ì³ë¥¼ ì €ìž¥í• ìˆ˜ ì—†ìŒ:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Build Atlas For:" -msgstr "ì•„í‹€ë¼ìФ ìƒì„±:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Loading Image:" -msgstr "ì´ë¯¸ì§€ 로딩:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't load image:" -msgstr "ì´ë¯¸ì§€ë¥¼ ë¡œë“œí• ìˆ˜ ì—†ìŒ:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Converting Images" -msgstr "ì´ë¯¸ì§€ 변환 중" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cropping Images" -msgstr "ì´ë¯¸ì§€ ìžë¥´ëŠ” 중" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Blitting Images" -msgstr "ì´ë¯¸ì§€ 병합 중" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save atlas image:" -msgstr "ì•„í‹€ë¼ìФ ì´ë¯¸ì§€ë¥¼ ì €ìž¥í• ìˆ˜ ì—†ìŒ:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save converted texture:" -msgstr "ë³€í™˜ëœ í…스ì³ë¥¼ ì €ìž¥í• ìˆ˜ ì—†ìŒ:" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid source!" -msgstr "ìœ íš¨í•˜ì§€ ì•Šì€ ì†ŒìŠ¤!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid translation source!" -msgstr "ìœ íš¨í•˜ì§€ ì•Šì€ ë²ˆì— ì†ŒìŠ¤!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Column" -msgstr "ì—´" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/script_create_dialog.cpp -msgid "Language" -msgstr "언어" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No items to import!" -msgstr "ê°€ì ¸ì˜¬ í•ëª©ì´ ì—†ìŠµë‹ˆë‹¤!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No target path!" -msgstr "ëŒ€ìƒ ê²½ë¡œê°€ 없습니다!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translations" -msgstr "ë²ˆì— ê°€ì ¸ì˜¤ê¸°" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Couldn't import!" -msgstr "ê°€ì ¸ì˜¬ 수 없습니다!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translation" -msgstr "ë²ˆì— ê°€ì ¸ì˜¤ê¸°" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Source CSV:" -msgstr "소스 CSV:" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Ignore First Row" -msgstr "첫째줄 무시" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Compress" -msgstr "ì••ì¶•" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -#, fuzzy -msgid "Add to Project (project.godot)" -msgstr "프로ì íŠ¸ì— ì¶”ê°€ (engine.cfg)" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Languages:" -msgstr "언어 ê°€ì ¸ì˜¤ê¸°:" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Translation" -msgstr "번ì—" - -#: editor/multi_node_edit.cpp -msgid "MultiNode Set" -msgstr "다중 노드 ì„¤ì •" - -#: editor/node_dock.cpp -msgid "Groups" -msgstr "그룹" - -#: editor/node_dock.cpp -msgid "Select a Node to edit Signals and Groups." -msgstr "시그ë„ê³¼ ê·¸ë£¹ì„ íŽ¸ì§‘í• ë…¸ë“œë¥¼ ì„ íƒí•˜ì„¸ìš”." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Toggle Autoplay" @@ -3372,9 +2718,8 @@ msgid "Change Animation Name:" msgstr "ì• ë‹ˆë©”ì´ì…˜ ì´ë¦„ 변경:" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Delete Animation?" -msgstr "ì• ë‹ˆë©”ì´ì…˜ ë³µì œí•˜ê¸°" +msgstr "ì• ë‹ˆë©”ì´ì…˜ì„ ì‚ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ?" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp @@ -3509,7 +2854,6 @@ msgstr "ì• ë‹ˆë©”ì´ì…˜ ì´ë¦„:" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp #: editor/script_create_dialog.cpp msgid "Error!" @@ -3537,9 +2881,8 @@ msgid "New name:" msgstr "새 ì´ë¦„:" #: editor/plugins/animation_tree_editor_plugin.cpp -#, fuzzy msgid "Edit Filters" -msgstr "노드 í•„í„° 편집" +msgstr "í•„í„° 편집" #: editor/plugins/animation_tree_editor_plugin.cpp #: editor/plugins/multimesh_editor_plugin.cpp @@ -3620,10 +2963,6 @@ msgid "Delete Input" msgstr "ìž…ë ¥ ì‚ì œ" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Rename" -msgstr "ì´ë¦„ 변경" - -#: editor/plugins/animation_tree_editor_plugin.cpp msgid "Animation tree is valid." msgstr "ì• ë‹ˆë©”ì´ì…˜ 트리가 ìœ íš¨í•©ë‹ˆë‹¤." @@ -3679,64 +3018,181 @@ msgstr "노드 í•„í„° 편집" msgid "Filters.." msgstr "í•„í„°.." -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing %d Triangles:" -msgstr "%dê°œ 삼ê°í˜• ë¶„ì„ ì¤‘:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Free" +msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Triangle #" -msgstr "삼ê°í˜• #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Contents:" +msgstr "컨í…ì¸ :" -#: editor/plugins/baked_light_baker.cpp -msgid "Light Baker Setup:" -msgstr "ë¼ì´íЏ ë² ì´ì»¤ ì„¤ì •:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "View Files" +msgstr "íŒŒì¼ ë³´ê¸°" -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing Geometry" -msgstr "지오미트리 ë¶„ì„ ì¤‘" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve hostname:" +msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Fixing Lights" -msgstr "ë¼ì´íЏ ìˆ˜ì • 중" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve." +msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Making BVH" -msgstr "BVH 만드는 중" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connection error, please try again." +msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Light Octree" -msgstr "ë¼ì´íЏ 오í¬íŠ¸ë¦¬ ìƒì„± 중" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't connect." +msgstr "ì—°ê²°í• ìˆ˜ ì—†ìŒ." -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Octree Texture" -msgstr "오í¬íŠ¸ë¦¬ í…ìŠ¤ì³ ìƒì„± 중" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't connect to host:" +msgstr "í˜¸ìŠ¤íŠ¸ì— ì—°ê²°í• ìˆ˜ ì—†ìŒ:" -#: editor/plugins/baked_light_baker.cpp -msgid "Transfer to Lightmaps:" -msgstr "ë¼ì´íŠ¸ë§µìœ¼ë¡œ ì „ì†¡:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response from host:" +msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Allocating Texture #" -msgstr "í…ìŠ¤ì³ í• ë‹¹ 중 #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response." +msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Baking Triangle #" -msgstr "삼ê°í˜• 굽는 중 #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, return code:" +msgstr "ìš”ì² ì‹¤íŒ¨, 리턴 코드:" -#: editor/plugins/baked_light_baker.cpp -msgid "Post-Processing Texture #" -msgstr "í…ìŠ¤ì³ í›„ì²˜ë¦¬ 중 #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Req. Failed." +msgstr "" -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Bake!" -msgstr "굽기!" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, too many redirects" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Redirect Loop." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Bad download hash, assuming file has been tampered with." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Expected:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Got:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed sha256 hash check" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Asset Download Error:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Fetching:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Resolving.." +msgstr "í•´ê²° 중.." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connecting.." +msgstr "연결중.." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Requesting.." +msgstr "ìš”ì²ì¤‘.." -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Reset the lightmap octree baking process (start over)." -msgstr "ë¼ì´íŠ¸ë§µ 오í¬íŠ¸ë¦¬ 굽기 프로세스 ìž¬ì„¤ì • (처ìŒë¶€í„° 다시)." +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Error making request" +msgstr "ìš”ì² ì—러" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Idle" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Retry" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download Error" +msgstr "다운로드 ì—러" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download for this asset is already in progress!" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "first" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "prev" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "next" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "last" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "All" +msgstr "모ë‘" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Plugins" +msgstr "플러그ì¸" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Sort:" +msgstr "ì •ë ¬:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Reverse" +msgstr "뒤집기" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Category:" +msgstr "ì¹´í…Œê³ ë¦¬:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Site:" +msgstr "사ì´íЏ:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Support.." +msgstr "ì§€ì›.." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Official" +msgstr "ê³µì‹" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Testing" +msgstr "테스팅" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Assets ZIP File" +msgstr "ì—ì…‹ ZIP 파ì¼" #: editor/plugins/camera_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp msgid "Preview" msgstr "미리보기" @@ -3779,12 +3235,18 @@ msgid "Edit CanvasItem" msgstr "CanvasItem 편집" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Change Anchors" +#, fuzzy +msgid "Anchors only" +msgstr "앵커" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Change Anchors and Margins" msgstr "앵커 변경" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom (%):" -msgstr "확대 (%):" +msgid "Change Anchors" +msgstr "앵커 변경" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Paste Pose" @@ -3836,60 +3298,78 @@ msgid "Pan Mode" msgstr "팬 모드" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Lock the selected object in place (can't be moved)." -msgstr "ì„ íƒëœ 오브ì 트를 ìž ê¸‰ë‹ˆë‹¤ (ì´ë™ë¶ˆê°€)." +#, fuzzy +msgid "Toggles snapping" +msgstr "중단ì í† ê¸€" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Unlock the selected object (can be moved)." -msgstr "ì„ íƒëœ 오브ì 트를 ìž ê¸ˆ í•´ì œí•©ë‹ˆë‹¤ (ì´ë™ê°€ëŠ¥)." +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "스냅 사용" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Makes sure the object's children are not selectable." -msgstr "오브ì íŠ¸ì˜ ìžì‹ë…¸ë“œê°€ ì„ íƒë 수 ì—†ë„ë¡ ì„¤ì •í•©ë‹ˆë‹¤." +#, fuzzy +msgid "Snapping options" +msgstr "ì• ë‹ˆë©”ì´ì…˜ 옵션" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Restores the object's children's ability to be selected." -msgstr "오브ì íŠ¸ì˜ ìžì‹ë…¸ë“œê°€ ì„ íƒë 수 있ë„ë¡ ë³µì›í•©ë‹ˆë‹¤." +#, fuzzy +msgid "Snap to grid" +msgstr "스냅 모드:" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp -#: editor/project_settings_editor.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Edit" -msgstr "편집" +msgid "Use Rotation Snap" +msgstr "íšŒì „ 스냅 사용" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" -msgstr "스냅 사용" +#, fuzzy +msgid "Configure Snap..." +msgstr "스냅 ì„¤ì •.." #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" -msgstr "그리드 ë³´ì´ê¸°" +msgid "Snap Relative" +msgstr "ìƒëŒ€ì ì¸ ìŠ¤ëƒ…" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Rotation Snap" -msgstr "íšŒì „ 스냅 사용" +msgid "Use Pixel Snap" +msgstr "픽셀 스냅 사용" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap Relative" -msgstr "ìƒëŒ€ì ì¸ ìŠ¤ëƒ…" +msgid "Smart snapping" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "스냅 ì„¤ì •.." +#, fuzzy +msgid "Snap to parent" +msgstr "부모로 확장" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Pixel Snap" -msgstr "픽셀 스냅 사용" +msgid "Snap to node anchor" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to node sides" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Skeleton.." -msgstr "ìŠ¤ì¼ˆë ˆí†¤.." +msgid "Snap to other nodes" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Lock the selected object in place (can't be moved)." +msgstr "ì„ íƒëœ 오브ì 트를 ìž ê¸‰ë‹ˆë‹¤ (ì´ë™ë¶ˆê°€)." + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Unlock the selected object (can be moved)." +msgstr "ì„ íƒëœ 오브ì 트를 ìž ê¸ˆ í•´ì œí•©ë‹ˆë‹¤ (ì´ë™ê°€ëŠ¥)." + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Makes sure the object's children are not selectable." +msgstr "오브ì íŠ¸ì˜ ìžì‹ë…¸ë“œê°€ ì„ íƒë 수 ì—†ë„ë¡ ì„¤ì •í•©ë‹ˆë‹¤." + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Restores the object's children's ability to be selected." +msgstr "오브ì íŠ¸ì˜ ìžì‹ë…¸ë“œê°€ ì„ íƒë 수 있ë„ë¡ ë³µì›í•©ë‹ˆë‹¤." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Make Bones" @@ -3917,12 +3397,19 @@ msgid "View" msgstr "보기" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Reset" -msgstr "확대 초기화" +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "그리드 ë³´ì´ê¸°" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Set.." -msgstr "확대 ì„¤ì •.." +#, fuzzy +msgid "Show helpers" +msgstr "뼈대 보기" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show rulers" +msgstr "뼈대 보기" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -3933,8 +3420,9 @@ msgid "Frame Selection" msgstr "ì„ íƒí•목 화면 꽉차게 표시" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Anchor" -msgstr "앵커" +#, fuzzy +msgid "Layout" +msgstr "ë ˆì´ì•„웃 ì €ìž¥" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Keys" @@ -3957,12 +3445,21 @@ msgid "Clear Pose" msgstr "í¬ì¦ˆ ì •ë¦¬" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Set a Value" -msgstr "ê°’ ì„¤ì •" +msgid "Drag pivot from mouse position" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap (Pixels):" -msgstr "스냅 (픽셀):" +#, fuzzy +msgid "Set pivot at mouse position" +msgstr "커브 í¬ì¸íЏ Out ì„¤ì •" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Multiply grid step by 2" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Divide grid step by 2" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Add %s" @@ -3972,23 +3469,28 @@ msgstr "%s 추가" msgid "Adding %s..." msgstr "%s 추가중..." -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Create Node" msgstr "노드 ìƒì„±" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Error instancing scene from %s" msgstr "'%s' 로부터 씬 ì¸ìŠ¤í„´ìŠ¤ 중 ì—러" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "OK :(" msgstr "넹 :(" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "No parent to instance a child at." msgstr "ì„ íƒëœ 부모 노드가 없어서 ìžì‹ë…¸ë“œë¥¼ ì¸ìŠ¤í„´ìŠ¤í• ìˆ˜ 없습니다." -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "This operation requires a single selected node." msgstr "ì´ ìž‘ì—…ì€ í•˜ë‚˜ì˜ ì„ íƒëœ 노드를 필요로 합니다." @@ -4004,45 +3506,6 @@ msgstr "" "드래그 & ë“œëž + 쉬프트 : í˜•ì œ 노드로 추가\n" "드래그 & ë“œëž + 알트 : 노드 타입 변경" -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Create Poly" -msgstr "í´ë¦¬ê³¤ ìƒì„±" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly" -msgstr "í´ë¦¬ê³¤ 편집" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly (Remove Point)" -msgstr "í´ë¦¬ê³¤ 편집 (ì ì‚ì œ)" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Create a new polygon from scratch." -msgstr "처ìŒë¶€í„° 새로운 í´ë¦¬ê³¤ 만들기." - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -msgid "" -"Edit existing polygon:\n" -"LMB: Move Point.\n" -"Ctrl+LMB: Split Segment.\n" -"RMB: Erase Point." -msgstr "" - #: editor/plugins/collision_polygon_editor_plugin.cpp msgid "Create Poly3D" msgstr "í´ë¦¬ê³¤3D 만들기" @@ -4052,14 +3515,6 @@ msgid "Set Handle" msgstr "핸들 ì„¤ì •" #: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Creating Mesh Library" -msgstr "메쉬 ë¼ì´ë¸ŒëŸ¬ë¦¬ ìƒì„± 중" - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Thumbnail.." -msgstr "ì¸ë„¤ì¼.." - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Remove item %d?" msgstr "%d í•ëª©ì„ ì‚ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ?" @@ -4082,29 +3537,46 @@ msgid "Update from Scene" msgstr "씬으로부터 ê°±ì‹ í•˜ê¸°" #: editor/plugins/curve_editor_plugin.cpp +msgid "Flat0" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Flat1" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp #, fuzzy -msgid "Modify Curve Point" -msgstr "커브맵 ìˆ˜ì •" +msgid "Ease in" +msgstr "ê°ì†" #: editor/plugins/curve_editor_plugin.cpp #, fuzzy +msgid "Ease out" +msgstr "ê°€ì†" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Smoothstep" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Modify Curve Point" +msgstr "커브 í¬ì¸íЏ ìˆ˜ì •" + +#: editor/plugins/curve_editor_plugin.cpp msgid "Modify Curve Tangent" -msgstr "커브맵 ìˆ˜ì •" +msgstr "커브 탄ì 트 ìˆ˜ì •" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Load Curve Preset" -msgstr "리소스 로드" +msgstr "커브 프리셋 로드" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Add point" -msgstr "ìž…ë ¥ 추가" +msgstr "í¬ì¸íЏ 추가" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Remove point" -msgstr "경로 í¬ì¸íЏ ì‚ì œ" +msgstr "í¬ì¸íЏ ì œê±°" #: editor/plugins/curve_editor_plugin.cpp #, fuzzy @@ -4166,22 +3638,18 @@ msgid "Create Occluder Polygon" msgstr "Occluder í´ë¦¬ê³¤ 만들기" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Edit existing polygon:" msgstr "기존 í´ë¦¬ê³¤ 편집:" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "LMB: Move Point." msgstr "좌í´ë¦: í¬ì¸íЏ ì´ë™." #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Ctrl+LMB: Split Segment." msgstr "컨트롤+좌í´ë¦: 세그먼트 ë¶„í• ." #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "RMB: Erase Point." msgstr "ìš°í´ë¦: í¬ì¸íЏ ì‚ì œ." @@ -4286,6 +3754,10 @@ msgid "Create Outline" msgstr "ì™¸ê³½ì„ ë§Œë“¤ê¸°" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh" +msgstr "메쉬" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Body" msgstr "Trimesh Static Body 만들기" @@ -4413,14 +3885,83 @@ msgstr "ìž„ì˜ í¬ê¸°:" msgid "Populate" msgstr "ìƒì„±" +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Bake!" +msgstr "굽기!" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +#, fuzzy +msgid "Bake the navigation mesh.\n" +msgstr "네비게ì´ì…˜ 메쉬 만들기" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +#, fuzzy +msgid "Clear the navigation mesh." +msgstr "네비게ì´ì…˜ 메쉬 만들기" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Setting up Configuration..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Calculating grid size..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Creating heightfield..." +msgstr "ë¼ì´íЏ 오í¬íŠ¸ë¦¬ ìƒì„± 중" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Marking walkable triangles..." +msgstr "ë²ˆì— ê°€ëŠ¥í•œ 문ìžì—´.." + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Constructing compact heightfield..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Eroding walkable area..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Partioning..." +msgstr "ê²½ê³ " + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Creating contours..." +msgstr "오í¬íŠ¸ë¦¬ í…ìŠ¤ì³ ìƒì„± 중" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Creating polymesh..." +msgstr "ì™¸ê³½ì„ ë©”ì‰¬ 만들기.." + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Converting to native navigation mesh..." +msgstr "네비게ì´ì…˜ 메쉬 만들기" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Navigation Mesh Generator Setup:" +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Parsing Geometry..." +msgstr "지오미트리 ë¶„ì„ ì¤‘" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Done!" +msgstr "" + #: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Create Navigation Polygon" msgstr "네비게ì´ì…˜ í´ë¦¬ê³¤ 만들기" -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Remove Poly And Point" -msgstr "í´ë¦¬ê³¤ê³¼ í¬ì¸íЏ ì‚ì œ" - #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Clear Emission Mask" msgstr "ì—미션 ë§ˆìŠ¤í¬ ì •ë¦¬" @@ -4606,15 +4147,18 @@ msgid "Curve Point #" msgstr "커브 í¬ì¸íЏ #" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Point Pos" +#, fuzzy +msgid "Set Curve Point Position" msgstr "커브 í¬ì¸íЏ 위치 ì„¤ì •" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve In Pos" +#, fuzzy +msgid "Set Curve In Position" msgstr "커브 í¬ì¸íЏ In ì„¤ì •" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Out Pos" +#, fuzzy +msgid "Set Curve Out Position" msgstr "커브 í¬ì¸íЏ Out ì„¤ì •" #: editor/plugins/path_editor_plugin.cpp @@ -4676,6 +4220,14 @@ msgid "Scale Polygon" msgstr "í´ë¦¬ê³¤ í¬ê¸° ì¡°ì ˆ" #: editor/plugins/polygon_2d_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit" +msgstr "편집" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon->UV" msgstr "í´ë¦¬ê³¤->UV" @@ -4730,63 +4282,10 @@ msgstr "리소스 로드" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "붙여넣기" -#: editor/plugins/rich_text_editor_plugin.cpp -msgid "Parse BBCode" -msgstr "BBCode ì½ê¸°" - -#: editor/plugins/sample_editor_plugin.cpp -msgid "Length:" -msgstr "길ì´:" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Open Sample File(s)" -msgstr "샘플 íŒŒì¼ ì—´ê¸°" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "ERROR: Couldn't load sample!" -msgstr "ì—러: ìƒ˜í”Œì„ ë¡œë“œí• ìˆ˜ 없습니다!" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Add Sample" -msgstr "샘플 추가" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Rename Sample" -msgstr "샘플 ì´ë¦„ 변경" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Delete Sample" -msgstr "샘플 ì‚ì œ" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "16 Bits" -msgstr "16 비트" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "8 Bits" -msgstr "8 비트" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Stereo" -msgstr "ìŠ¤í…Œë ˆì˜¤" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Mono" -msgstr "모노" - -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/script_editor_debugger.cpp -msgid "Format" -msgstr "í¬ë©§" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Pitch" -msgstr "피치" - #: editor/plugins/script_editor_plugin.cpp #, fuzzy msgid "Clear Recent Files" @@ -4878,6 +4377,10 @@ msgstr "문서 닫기" msgid "Close All" msgstr "ëª¨ë‘ ë‹«ê¸°" +#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp +msgid "Run" +msgstr "실행" + #: editor/plugins/script_editor_plugin.cpp #, fuzzy msgid "Toggle Scripts Panel" @@ -4921,18 +4424,6 @@ msgid "Debug with external editor" msgstr "ì—디터ì—서 열기" #: editor/plugins/script_editor_plugin.cpp -msgid "Window" -msgstr "윈ë„ìš°" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Left" -msgstr "왼쪽으로 ì´ë™" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Right" -msgstr "오른쪽으로 ì´ë™" - -#: editor/plugins/script_editor_plugin.cpp #, fuzzy msgid "Open Godot online documentation" msgstr "ë ˆí¼ëŸ°ìФ 문서 검색." @@ -5020,7 +4511,7 @@ msgstr "잘ë¼ë‚´ê¸°" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Copy" msgstr "복사하기" @@ -5286,10 +4777,6 @@ msgid "View Plane Transform." msgstr "ë·° í‰ë©´ 변형." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Scaling to %s%%." -msgstr "%s%%로 í¬ê¸° 변경." - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." msgstr "%së„로 íšŒì „." @@ -5306,10 +4793,6 @@ msgid "Top View." msgstr "윗면 보기." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Top" -msgstr "윗면" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "ë’·ë©´ 보기." @@ -5555,6 +5038,10 @@ msgid "Transform" msgstr "변환" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Configure Snap.." +msgstr "스냅 ì„¤ì •.." + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Local Coords" msgstr "로컬 좌표" @@ -5700,6 +5187,10 @@ msgid "Speed (FPS):" msgstr "ì†ë„ (FPS):" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Loop" +msgstr "루프" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animation Frames" msgstr "ì• ë‹ˆë©”ì´ì…˜ í”„ë ˆìž„" @@ -5712,12 +5203,14 @@ msgid "Insert Empty (After)" msgstr "빈 í”„ë ˆìž„ 삽입 (ì´í›„)" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Up" -msgstr "위" +#, fuzzy +msgid "Move (Before)" +msgstr "노드 ì‚ì œ" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Down" -msgstr "아래" +#, fuzzy +msgid "Move (After)" +msgstr "왼쪽으로 ì´ë™" #: editor/plugins/style_box_editor_plugin.cpp msgid "StyleBox Preview:" @@ -5881,6 +5374,10 @@ msgid "Style" msgstr "스타ì¼" #: editor/plugins/theme_editor_plugin.cpp +msgid "Font" +msgstr "í°íЏ" + +#: editor/plugins/theme_editor_plugin.cpp msgid "Color" msgstr "색깔" @@ -5932,8 +5429,9 @@ msgid "Mirror Y" msgstr "Yì¶• 뒤집기" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Bucket" -msgstr "채우기" +#, fuzzy +msgid "Paint Tile" +msgstr "타ì¼ë§µ ì¹ í•˜ê¸°" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Pick Tile" @@ -5999,6 +5497,10 @@ msgid "Delete preset '%s'?" msgstr "ì„ íƒëœ 파ì¼ë“¤ì„ ì‚ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ?" #: editor/project_export.cpp +msgid "Export templates for this platform are missing/corrupted: " +msgstr "" + +#: editor/project_export.cpp #, fuzzy msgid "Presets" msgstr "프리셋.." @@ -6080,34 +5582,62 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +msgid "Export templates for this platform are missing/corrupted:" +msgstr "" + +#: editor/project_export.cpp #, fuzzy msgid "Export With Debug" msgstr "íƒ€ì¼ ì…‹ 내보내기" #: editor/project_manager.cpp -msgid "Invalid project path, the path must exist!" -msgstr "프로ì 트 경로가 ìœ íš¨í•˜ì§€ 않습니다. 경로가 반드시 존재해야 합니다!" +#, fuzzy +msgid "The path does not exists." +msgstr "파ì¼ì´ 존재하지 않습니다." #: editor/project_manager.cpp #, fuzzy -msgid "Invalid project path, project.godot must not exist." -msgstr "프로ì 트 경로가 ìœ íš¨í•˜ì§€ 않습니다. engine.cfgê°€ 있으면 안ë©ë‹ˆë‹¤." +msgid "Please choose a 'project.godot' file." +msgstr "프로ì 트 í´ë” ë°”ê¹¥ì— ë‚´ë³´ë‚´ê¸°ë¥¼ 하세요!" #: editor/project_manager.cpp -#, fuzzy -msgid "Invalid project path, project.godot must exist." -msgstr "프로ì 트 경로가 ìœ íš¨í•˜ì§€ 않습니다. engine.cfgê°€ 존재해야합니다." +msgid "" +"Your project will be created in a non empty folder (you might want to create " +"a new folder)." +msgstr "" + +#: editor/project_manager.cpp +msgid "Please choose a folder that does not contain a 'project.godot' file." +msgstr "" #: editor/project_manager.cpp msgid "Imported Project" msgstr "ê°€ì ¸ì˜¨ 프로ì 트" #: editor/project_manager.cpp +msgid " " +msgstr "" + +#: editor/project_manager.cpp +msgid "It would be a good idea to name your project." +msgstr "" + +#: editor/project_manager.cpp msgid "Invalid project path (changed anything?)." msgstr "ìœ íš¨í•˜ì§€ ì•Šì€ í”„ë¡œì 트 경로 (ë”ê°€ ë³€ê²½í•˜ì‹ ê±°ë¼ë„?)." #: editor/project_manager.cpp #, fuzzy +msgid "Couldn't get project.godot in project path." +msgstr "프로ì 트 ê²½ë¡œì— engine.cfg를 ìƒì„±í• 수 없습니다." + +#: editor/project_manager.cpp +#, fuzzy +msgid "Couldn't edit project.godot in project path." +msgstr "프로ì 트 ê²½ë¡œì— engine.cfg를 ìƒì„±í• 수 없습니다." + +#: editor/project_manager.cpp +#, fuzzy msgid "Couldn't create project.godot in project path." msgstr "프로ì 트 ê²½ë¡œì— engine.cfg를 ìƒì„±í• 수 없습니다." @@ -6116,38 +5646,49 @@ msgid "The following files failed extraction from package:" msgstr "다ìŒì˜ 파ì¼ë“¤ì„ 패키지로부터 ì¶”ì¶œí•˜ëŠ”ë° ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤:" #: editor/project_manager.cpp +#, fuzzy +msgid "Rename Project" +msgstr "ì´ë¦„없는 프로ì 트" + +#: editor/project_manager.cpp +#, fuzzy +msgid "Couldn't get project.godot in the project path." +msgstr "프로ì 트 ê²½ë¡œì— engine.cfg를 ìƒì„±í• 수 없습니다." + +#: editor/project_manager.cpp +msgid "New Game Project" +msgstr "새 게임 프로ì 트" + +#: editor/project_manager.cpp msgid "Import Existing Project" msgstr "기존 프로ì 트 ê°€ì ¸ì˜¤ê¸°" #: editor/project_manager.cpp -msgid "Project Path (Must Exist):" -msgstr "프로ì 트 경로 (반드시 í•„ìš”):" +msgid "Create New Project" +msgstr "새 프로ì 트 만들기" + +#: editor/project_manager.cpp +msgid "Install Project:" +msgstr "프로ì 트 설치:" #: editor/project_manager.cpp msgid "Project Name:" msgstr "프로ì 트 명:" #: editor/project_manager.cpp -msgid "Create New Project" -msgstr "새 프로ì 트 만들기" +#, fuzzy +msgid "Create folder" +msgstr "í´ë” ìƒì„±" #: editor/project_manager.cpp msgid "Project Path:" msgstr "프로ì 트 경로:" #: editor/project_manager.cpp -msgid "Install Project:" -msgstr "프로ì 트 설치:" - -#: editor/project_manager.cpp msgid "Browse" msgstr "찾아보기" #: editor/project_manager.cpp -msgid "New Game Project" -msgstr "새 게임 프로ì 트" - -#: editor/project_manager.cpp msgid "That's a BINGO!" msgstr "ë¹™ê³ !" @@ -6156,6 +5697,11 @@ msgid "Unnamed Project" msgstr "ì´ë¦„없는 프로ì 트" #: editor/project_manager.cpp +#, fuzzy +msgid "Can't open project" +msgstr "연결하기.." + +#: editor/project_manager.cpp msgid "Are you sure to open more than one project?" msgstr "ë‘ê°œ ì´ìƒì˜ 프로ì 트를 ì—´ë ¤ëŠ” ê²ƒì´ í™•ì‹¤í•©ë‹ˆê¹Œ?" @@ -6195,10 +5741,6 @@ msgid "Project List" msgstr "프로ì 트 목ë¡" #: editor/project_manager.cpp -msgid "Run" -msgstr "실행" - -#: editor/project_manager.cpp msgid "Scan" msgstr "스캔" @@ -6257,17 +5799,14 @@ msgid "Add Input Action Event" msgstr "ìž…ë ¥ ì•¡ì…˜ ì´ë²¤íЏ 추가" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Meta+" msgstr "메타+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Shift+" msgstr "쉬프트+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Alt+" msgstr "알트+" @@ -6329,7 +5868,7 @@ msgstr "변경" msgid "Joypad Axis Index:" msgstr "ì¡°ì´ìŠ¤í‹± ì¶• ì¸ë±ìФ:" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Axis" msgstr "ì¶•" @@ -6351,31 +5890,31 @@ msgstr "ìž…ë ¥ ì•¡ì…˜ ì´ë²¤íЏ ì‚ì œ" msgid "Add Event" msgstr "빈 í”„ë ˆìž„ 추가" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Device" msgstr "기기" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Button" msgstr "버튼" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Left Button." msgstr "왼쪽 버튼." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Right Button." msgstr "오른쪽 버튼." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Middle Button." msgstr "ê°€ìš´ë° ë²„íŠ¼." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Up." msgstr "íœ ìœ„ë¡œ." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Down." msgstr "íœ ì•„ëž˜ë¡œ." @@ -6384,7 +5923,7 @@ msgid "Add Global Property" msgstr "" #: editor/project_settings_editor.cpp -msgid "Select an setting item first!" +msgid "Select a setting item first!" msgstr "" #: editor/project_settings_editor.cpp @@ -6403,6 +5942,16 @@ msgid "Delete Item" msgstr "ìž…ë ¥ ì‚ì œ" #: editor/project_settings_editor.cpp +#, fuzzy +msgid "Can't contain '/' or ':'" +msgstr "í˜¸ìŠ¤íŠ¸ì— ì—°ê²°í• ìˆ˜ ì—†ìŒ:" + +#: editor/project_settings_editor.cpp +#, fuzzy +msgid "Already existing" +msgstr "ì§€ì† ì „í™˜" + +#: editor/project_settings_editor.cpp msgid "Error saving settings." msgstr "ì„¤ì • ì €ìž¥ 중 ì—러." @@ -6555,10 +6104,20 @@ msgstr "새 스í¬ë¦½íЏ" #: editor/property_editor.cpp #, fuzzy +msgid "Make Unique" +msgstr "Bones 만들기" + +#: editor/property_editor.cpp +#, fuzzy msgid "Show in File System" msgstr "íŒŒì¼ ì‹œìŠ¤í…œ" #: editor/property_editor.cpp +#, fuzzy +msgid "Convert To %s" +msgstr "변환.." + +#: editor/property_editor.cpp msgid "Error loading file: Not a resource!" msgstr "íŒŒì¼ ë¡œë“œ ì—러: 리소스가 아닙니다!" @@ -6597,6 +6156,11 @@ msgid "Select Property" msgstr "ì†ì„± ì„ íƒ" #: editor/property_selector.cpp +#, fuzzy +msgid "Select Virtual Method" +msgstr "메소드 ì„ íƒ" + +#: editor/property_selector.cpp msgid "Select Method" msgstr "메소드 ì„ íƒ" @@ -6624,26 +6188,6 @@ msgstr "현재 모양새 ìœ ì§€" msgid "Reparent" msgstr "부모노드 ìž¬ì§€ì •" -#: editor/resources_dock.cpp -msgid "Create New Resource" -msgstr "새 리소스 만들기" - -#: editor/resources_dock.cpp -msgid "Open Resource" -msgstr "리소스 열기" - -#: editor/resources_dock.cpp -msgid "Save Resource" -msgstr "리로스 ì €ìž¥" - -#: editor/resources_dock.cpp -msgid "Resource Tools" -msgstr "리소스 ë„구" - -#: editor/resources_dock.cpp -msgid "Make Local" -msgstr "로컬로 만들기" - #: editor/run_settings_dialog.cpp msgid "Run Mode:" msgstr "실행 모드:" @@ -6772,14 +6316,6 @@ msgid "Sub-Resources:" msgstr "리소스:" #: editor/scene_tree_dock.cpp -msgid "Edit Groups" -msgstr "그룹 편집" - -#: editor/scene_tree_dock.cpp -msgid "Edit Connections" -msgstr "ì—°ê²° 편집" - -#: editor/scene_tree_dock.cpp msgid "Clear Inheritance" msgstr "ìƒì† ì—†ì• ê¸°" @@ -6967,6 +6503,15 @@ msgid "Invalid base path" msgstr "기본 경로가 ìœ ìš”í•˜ì§€ 않ìŒ" #: editor/script_create_dialog.cpp +msgid "Directory of the same name exists" +msgstr "" + +#: editor/script_create_dialog.cpp +#, fuzzy +msgid "File exists, will be reused" +msgstr "파ì¼ì´ 존재합니다. ë®ì–´ì“°ì‹œê² 습니까?" + +#: editor/script_create_dialog.cpp msgid "Invalid extension" msgstr "확장ìžê°€ ìœ ìš”í•˜ì§€ 않ìŒ" @@ -7012,6 +6557,10 @@ msgid "Load existing script file" msgstr "기존 스í¬ë¦½íЏ 로드하기" #: editor/script_create_dialog.cpp +msgid "Language" +msgstr "언어" + +#: editor/script_create_dialog.cpp #, fuzzy msgid "Inherits" msgstr "ìƒì†:" @@ -7056,6 +6605,10 @@ msgid "Function:" msgstr "함수:" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Errors" msgstr "ì—러" @@ -7136,6 +6689,10 @@ msgid "Type" msgstr "타입" #: editor/script_editor_debugger.cpp +msgid "Format" +msgstr "í¬ë©§" + +#: editor/script_editor_debugger.cpp msgid "Usage" msgstr "사용" @@ -7211,13 +6768,31 @@ msgstr "" msgid "Change Probe Extents" msgstr "프로브 범위 변경" +#: modules/gdnative/gd_native_library_editor.cpp +#, fuzzy +msgid "Library" +msgstr "메쉬 ë¼ì´ë¸ŒëŸ¬ë¦¬.." + +#: modules/gdnative/gd_native_library_editor.cpp +#, fuzzy +msgid "Status" +msgstr "ìƒíƒœ:" + +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Libraries: " +msgstr "" + +#: modules/gdnative/register_types.cpp +msgid "GDNative" +msgstr "" + #: 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/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "ë””ì½”ë”©í• ë°”ì´íŠ¸ê°€ 모ìžë¼ê±°ë‚˜, ìœ íš¨í•˜ì§€ ì•Šì€ í˜•ì‹ìž…니다." @@ -7271,10 +6846,6 @@ msgid "GridMap Duplicate Selection" msgstr "ì„ íƒí‚¤ ë³µì œ" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Paint" -msgstr "" - -#: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy msgid "Snap View" msgstr "ìƒë‹¨ ë·°" @@ -7378,13 +6949,8 @@ msgstr "스냅 ì„¤ì •" msgid "Pick Distance:" msgstr "ì¸ìŠ¤í„´ìŠ¤:" -#: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy -msgid "Tiles" -msgstr "파ì¼" - -#: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Areas" +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "Builds" msgstr "" #: modules/visual_script/visual_script.cpp @@ -7585,10 +7151,18 @@ msgid "Return" msgstr "리턴" #: modules/visual_script/visual_script_editor.cpp +msgid "Call" +msgstr "호출" + +#: modules/visual_script/visual_script_editor.cpp msgid "Get" msgstr "얻기" #: modules/visual_script/visual_script_editor.cpp +msgid "Script already has function '%s'" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Change Input Value" msgstr "ìž…ë ¥ ì´ë¦„ 변경" @@ -7990,6 +7564,12 @@ msgstr "" "AnimatedSprite3Dê°€ í”„ë ˆìž„ì„ ë³´ì—¬ì£¼ê¸° 위해서는 'Frames' ì†ì„±ì— SpriteFrames 리" "소스 만들거나 ì§€ì •í•´ì•¼ 합니다." +#: scene/3d/vehicle_body.cpp +msgid "" +"VehicleWheel serves to provide a wheel system to a VehicleBody. Please use " +"it as a child of a VehicleBody." +msgstr "" + #: scene/gui/color_picker.cpp #, fuzzy msgid "Raw Mode" @@ -8000,6 +7580,10 @@ msgid "Add current color as a preset" msgstr "" #: scene/gui/dialogs.cpp +msgid "Cancel" +msgstr "취소" + +#: scene/gui/dialogs.cpp msgid "Alert!" msgstr "ê²½ê³ !" @@ -8007,10 +7591,6 @@ msgstr "ê²½ê³ !" msgid "Please Confirm..." msgstr "확ì¸í•´ì£¼ì„¸ìš”..." -#: scene/gui/input_action.cpp -msgid "Ctrl+" -msgstr "컨트롤+" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -8045,6 +7625,614 @@ msgstr "" "합니다. ê·¸ë ‡ì§€ ì•Šì„ ê²½ìš°, í™”ë©´ì— í‘œì‹œí•˜ê¸° 위해서는 Render target으로 ì„¤ì •í•˜" "ê³ ë‚´ë¶€ì ì¸ í…스ì³ë¥¼ 다른 ë…¸ë“œì— í• ë‹¹í•´ì•¼ 합니다." +#: scene/resources/dynamic_font.cpp +msgid "Error initializing FreeType." +msgstr "FreeType 초기화 ì—러." + +#: scene/resources/dynamic_font.cpp +msgid "Unknown font format." +msgstr "알 수 없는 í°íЏ í¬ë©§." + +#: scene/resources/dynamic_font.cpp +msgid "Error loading font." +msgstr "í°íЏ 로딩 ì—러." + +#: scene/resources/dynamic_font.cpp +msgid "Invalid font size." +msgstr "ìœ ìš”í•˜ì§€ ì•Šì€ í°íЏ 사ì´ì¦ˆ." + +#~ msgid "Method List For '%s':" +#~ msgstr "'%s' 함수 목ë¡:" + +#~ msgid "Arguments:" +#~ msgstr "ì¸ìˆ˜:" + +#~ msgid "Return:" +#~ msgstr "리턴:" + +#~ msgid "Added:" +#~ msgstr "추가ë¨:" + +#~ msgid "Removed:" +#~ msgstr "ì œê±°ë¨:" + +#~ msgid "Error saving atlas:" +#~ msgstr "ì•„í‹€ë¼ìФ ì €ìž¥ 중 ì—러:" + +#~ msgid "Could not save atlas subtexture:" +#~ msgstr "ì•„í‹€ë¼ìФ 서브 í…스ì³ë¥¼ ì €ìž¥í• ìˆ˜ 없습니다:" + +#~ msgid "Exporting for %s" +#~ msgstr "%s 내보내기" + +#~ msgid "Setting Up.." +#~ msgstr "ì„¤ì • 중.." + +#~ msgid "Error loading scene." +#~ msgstr "씬 로딩 중 ì—러." + +#~ msgid "Re-Import" +#~ msgstr "다시 ê°€ì ¸ì˜¤ê¸°" + +#~ msgid "Please wait for scan to complete." +#~ msgstr "ìŠ¤ìº”ì´ ì™„ë£Œë 때까지 ê¸°ë‹¤ë ¤ì£¼ì„¸ìš”." + +#~ msgid "Current scene must be saved to re-import." +#~ msgstr "다시 ê°€ì ¸ì˜¤ê¸° 위해서는 현재 ì”¬ì„ ì €ìž¥í•´ì•¼ 합니다." + +#~ msgid "Save & Re-Import" +#~ msgstr "ì €ìž¥ ë° ë‹¤ì‹œ ê°€ì ¸ì˜¤ê¸°" + +#~ msgid "Re-Importing" +#~ msgstr "다시 ê°€ì ¸ì˜¤ê¸°" + +#~ msgid "Re-Import Changed Resources" +#~ msgstr "ë³€ê²½ëœ ë¦¬ì†ŒìŠ¤ 다시 ê°€ì ¸ì˜¤ê¸°" + +#~ msgid "Loading Export Templates" +#~ msgstr "내보내기 템플릿 로딩 중" + +#~ msgid "" +#~ "\n" +#~ "Status: Needs Re-Import" +#~ msgstr "" +#~ "\n" +#~ "ìƒíƒœ: 다시 ìž„í¬íЏ í•„ìš”" + +#~ msgid "Same source and destination files, doing nothing." +#~ msgstr "소스와 ëŒ€ìƒ íŒŒì¼ì´ ë™ì¼í•˜ì—¬, 무시ë©ë‹ˆë‹¤." + +#~ msgid "Same source and destination paths, doing nothing." +#~ msgstr "소스와 ëŒ€ìƒ ê²½ë¡œê°€ ë™ì¼í•˜ì—¬, 무시ë©ë‹ˆë‹¤." + +#~ msgid "Can't move directories to within themselves." +#~ msgstr "ë””ë ‰í† ë¦¬ë¥¼ ìžì‹ 으로 ì´ë™í• 수 없습니다." + +#~ msgid "Error moving file:\n" +#~ msgstr "íŒŒì¼ ì´ë™ ì—러:\n" + +#~ msgid "Pick New Name and Location For:" +#~ msgstr "새로운 ì´ë¦„ê³¼ 위치를 ê³ ë¥´ì„¸ìš”:" + +#~ msgid "No files selected!" +#~ msgstr "파ì¼ì´ ì„ íƒë˜ì§€ 않았습니다!" + +#~ msgid "Info" +#~ msgstr "ì •ë³´" + +#~ msgid "Re-Import.." +#~ msgstr "다시 ê°€ì ¸ì˜¤ê¸°.." + +#~ msgid "No bit masks to import!" +#~ msgstr "ê°€ì ¸ì˜¬ 비트 마스í¬ê°€ 없습니다!" + +#~ msgid "Target path is empty." +#~ msgstr "ëŒ€ìƒ ê²½ë¡œê°€ 없습니다." + +#~ msgid "Target path must be a complete resource path." +#~ msgstr "ëŒ€ìƒ ê²½ë¡œëŠ” ì™„ì „í•œ 리소스 경로여야 합니다." + +#~ msgid "Target path must exist." +#~ msgstr "ëŒ€ìƒ ê²½ë¡œê°€ 존재해야 합니다." + +#~ msgid "Save path is empty!" +#~ msgstr "ì €ìž¥ 경로가 없습니다!" + +#~ msgid "Import BitMasks" +#~ msgstr "ë¹„íŠ¸ë§ˆìŠ¤í¬ ê°€ì ¸ì˜¤ê¸°" + +#~ msgid "Source Texture(s):" +#~ msgstr "소스 í…스ì³:" + +#~ msgid "Target Path:" +#~ msgstr "ëŒ€ìƒ ê²½ë¡œ:" + +#~ msgid "Accept" +#~ msgstr "수ë½" + +#~ msgid "Bit Mask" +#~ msgstr "비트 마스í¬" + +#~ msgid "No source font file!" +#~ msgstr "소스 í°íЏ 파ì¼ì´ 없습니다!" + +#~ msgid "No target font resource!" +#~ msgstr "í°íЏ 리소스 경로가 없습니다!" + +#~ msgid "" +#~ "Invalid file extension.\n" +#~ "Please use .font." +#~ msgstr "" +#~ "ìœ íš¨í•˜ì§€ ì•Šì€ íŒŒì¼ í™•ìž¥ìž.\n" +#~ ".font 를 사용하세요." + +#~ msgid "Couldn't save font." +#~ msgstr "í°íŠ¸ë¥¼ ì €ìž¥í• ìˆ˜ 없습니다." + +#~ msgid "Source Font:" +#~ msgstr "소스 í°íЏ:" + +#~ msgid "Source Font Size:" +#~ msgstr "소스 í°íЏ í¬ê¸°:" + +#~ msgid "Dest Resource:" +#~ msgstr "리소스 경로:" + +#~ msgid "The quick brown fox jumps over the lazy dog." +#~ msgstr "" +#~ "The quick brown fox jumps over the lazy dog.\n" +#~ "ë‹¤ëžŒì¥ í—Œ ì³‡ë°”í€´ì— íƒ€ê³ íŒŒ." + +#~ msgid "Test:" +#~ msgstr "테스트:" + +#~ msgid "Options:" +#~ msgstr "옵션:" + +#~ msgid "Font Import" +#~ msgstr "í°íЏ ê°€ì ¸ì˜¤ê¸°" + +#~ msgid "" +#~ "This file is already a Godot font file, please supply a BMFont type file " +#~ "instead." +#~ msgstr "ì´ íŒŒì¼ì€ ì´ë¯¸ Godot í°íЏ 파ì¼ìž…니다. BMFont 파ì¼ì„ ì„ íƒí•˜ì„¸ìš”." + +#~ msgid "Failed opening as BMFont file." +#~ msgstr "BMFont 파ì¼ì„ ì—¬ëŠ”ë° ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤." + +#~ msgid "Invalid font custom source." +#~ msgstr "ì‚¬ìš©ìž ì§€ì • í°íЏ 소스가 ìœ íš¨í•˜ì§€ 않습니다." + +#~ msgid "No meshes to import!" +#~ msgstr "ê°€ì ¸ì˜¬ 메쉬가 없습니다!" + +#~ msgid "Single Mesh Import" +#~ msgstr "ë‹¨ì¼ ë©”ì‰¬ ê°€ì ¸ì˜¤ê¸°" + +#~ msgid "Source Mesh(es):" +#~ msgstr "소스 메쉬:" + +#~ msgid "Surface %d" +#~ msgstr "서페ì´ìФ %d" + +#~ msgid "No samples to import!" +#~ msgstr "ê°€ì ¸ì˜¬ ìƒ˜í”Œì´ ì—†ìŠµë‹ˆë‹¤!" + +#~ msgid "Import Audio Samples" +#~ msgstr "오디오 샘플 ê°€ì ¸ì˜¤ê¸°" + +#~ msgid "Source Sample(s):" +#~ msgstr "소스 샘플:" + +#~ msgid "Audio Sample" +#~ msgstr "오디오 샘플" + +#~ msgid "New Clip" +#~ msgstr "새 í´ë¦½" + +#~ msgid "Flags" +#~ msgstr "플래그" + +#~ msgid "Bake FPS:" +#~ msgstr "FPS ì„¤ì •:" + +#~ msgid "Optimizer" +#~ msgstr "최ì í™”" + +#~ msgid "Max Linear Error" +#~ msgstr "최대 ì„ í˜• 오류" + +#~ msgid "Max Angular Error" +#~ msgstr "최대 ê°ë„ 오류" + +#~ msgid "Max Angle" +#~ msgstr "최대 ê°ë„" + +#~ msgid "Clips" +#~ msgstr "í´ë¦½" + +#~ msgid "Start(s)" +#~ msgstr "시작(ì´ˆ)" + +#~ msgid "End(s)" +#~ msgstr "ë(ì´ˆ)" + +#~ msgid "Filters" +#~ msgstr "í•„í„°" + +#~ msgid "Source path is empty." +#~ msgstr "소스 경로가 비어있습니다." + +#~ msgid "Couldn't load post-import script." +#~ msgstr "ê°€ì ¸ì˜¤ê¸° 후 ì‹¤í–‰í• ìŠ¤í¬ë¦½íŠ¸ë¥¼ ë¡œë“œí• ìˆ˜ 없습니다." + +#~ msgid "Invalid/broken script for post-import." +#~ msgstr "ê°€ì ¸ì˜¤ê¸° 후 ì‹¤í–‰í• ìŠ¤í¬ë¦½íŠ¸ê°€ ìœ íš¨í•˜ì§€ 않거나 ê¹¨ì ¸ìžˆìŠµë‹ˆë‹¤." + +#~ msgid "Error importing scene." +#~ msgstr "씬 ê°€ì ¸ì˜¤ê¸° ì—러." + +#~ msgid "Import 3D Scene" +#~ msgstr "3D 씬 ê°€ì ¸ì˜¤ê¸°" + +#~ msgid "Source Scene:" +#~ msgstr "소스 씬:" + +#~ msgid "Same as Target Scene" +#~ msgstr "ëŒ€ìƒ ì”¬ê³¼ ê°™ìŒ" + +#~ msgid "Shared" +#~ msgstr "ê³µìœ ë¨" + +#~ msgid "Target Texture Folder:" +#~ msgstr "ëŒ€ìƒ í…ìŠ¤ì³ í´ë”:" + +#~ msgid "Post-Process Script:" +#~ msgstr "ê°€ì ¸ì˜¤ê¸° 후 ìˆ˜í–‰í• ìŠ¤í¬ë¦½íЏ:" + +#~ msgid "Custom Root Node Type:" +#~ msgstr "ì‚¬ìš©ìž ì •ì˜ ë£¨íŠ¸ 노드 타입:" + +#~ msgid "Auto" +#~ msgstr "ìžë™" + +#~ msgid "Root Node Name:" +#~ msgstr "루트 노드 ì´ë¦„:" + +#~ msgid "The Following Files are Missing:" +#~ msgstr "다ìŒì˜ 파ì¼ë“¤ì´ ë¹ ì ¸ìžˆìŠµë‹ˆë‹¤:" + +#~ msgid "Import Anyway" +#~ msgstr "ë¬´ì‹œí•˜ê³ ê°€ì ¸ì˜¤ê¸°" + +#~ msgid "Import & Open" +#~ msgstr "ê°€ì ¸ì˜¤ê¸° 후 열기" + +#~ msgid "Edited scene has not been saved, open imported scene anyway?" +#~ msgstr "íŽ¸ì§‘ëœ ì”¬ì´ ì €ìž¥ë˜ì§€ 않았습니다. ë¬´ì‹œí•˜ê³ ê°€ì ¸ì˜¨ ì”¬ì„ ì—¬ì‹œê² ìŠµë‹ˆê¹Œ?" + +#~ msgid "Import Image:" +#~ msgstr "ì´ë¯¸ì§€ ê°€ì ¸ì˜¤ê¸°:" + +#~ msgid "Couldn't localize path: %s (already local)" +#~ msgstr "경로를 로컬 경로로 바꿀 수 없습니다: %s (ì´ë¯¸ 로컬 경로)" + +#~ msgid "3D Scene Animation" +#~ msgstr "3D 씬 ì• ë‹ˆë©”ì´ì…˜" + +#~ msgid "Uncompressed" +#~ msgstr "무압축" + +#~ msgid "Compress Lossless (PNG)" +#~ msgstr "무ì†ì‹¤ ì••ì¶• (PNG)" + +#~ msgid "Compress Lossy (WebP)" +#~ msgstr "ì†ì‹¤ ì••ì¶• (PNG)" + +#~ msgid "Compress (VRAM)" +#~ msgstr "ì••ì¶• (VRAM)" + +#~ msgid "Texture Format" +#~ msgstr "í…ìŠ¤ì³ í¬ë©§" + +#~ msgid "Texture Compression Quality (WebP):" +#~ msgstr "í…ìŠ¤ì³ ì••ì¶• 품질 (WebP):" + +#~ msgid "Texture Options" +#~ msgstr "í…ìŠ¤ì³ ì˜µì…˜" + +#~ msgid "Please specify some files!" +#~ msgstr "파ì¼ì„ ì§€ì •í•˜ì„¸ìš”!" + +#~ msgid "At least one file needed for Atlas." +#~ msgstr "ì•„í‹€ë¼ìФ ìƒì„±ì„ 위해서는 최소 1ê°œ ì´ìƒì˜ 파ì¼ì´ 필요합니다." + +#~ msgid "Error importing:" +#~ msgstr "ê°€ì ¸ì˜¤ê¸° ì—러:" + +#~ msgid "Only one file is required for large texture." +#~ msgstr "í° í…스ì³ë¥¼ 위해서는 단 í•˜ë‚˜ì˜ íŒŒì¼ë§Œ 요구ë©ë‹ˆë‹¤." + +#~ msgid "Max Texture Size:" +#~ msgstr "최대 í…ìŠ¤ì³ ì‚¬ì´ì¦ˆ:" + +#~ msgid "Import Textures for Atlas (2D)" +#~ msgstr "ì•„í‹€ë¼ìŠ¤ë¥¼ 위한 í…ìŠ¤ì³ ê°€ì ¸ì˜¤ê¸° (2D)" + +#~ msgid "Cell Size:" +#~ msgstr "쎌 사ì´ì¦ˆ:" + +#~ msgid "Large Texture" +#~ msgstr "í° í…스ì³" + +#~ msgid "Import Large Textures (2D)" +#~ msgstr "í° í…ìŠ¤ì³ ê°€ì ¸ì˜¤ê¸° (2D)" + +#~ msgid "Source Texture" +#~ msgstr "소스 í…스ì³" + +#~ msgid "Base Atlas Texture" +#~ msgstr "기본 ì•„í‹€ë¼ìФ í…스ì³" + +#~ msgid "Source Texture(s)" +#~ msgstr "소트 í…스ì³" + +#~ msgid "Import Textures for 2D" +#~ msgstr "2D í…ìŠ¤ì³ ê°€ì ¸ì˜¤ê¸°" + +#~ msgid "Import Textures for 3D" +#~ msgstr "3D í…ìŠ¤ì³ ê°€ì ¸ì˜¤ê¸°" + +#~ msgid "Import Textures" +#~ msgstr "í…ìŠ¤ì³ ê°€ì ¸ì˜¤ê¸°" + +#~ msgid "2D Texture" +#~ msgstr "2D í…스ì³" + +#~ msgid "3D Texture" +#~ msgstr "3D í…스ì³" + +#~ msgid "Atlas Texture" +#~ msgstr "í…ìŠ¤ì³ ì•„í‹€ë¼ìФ" + +#~ msgid "" +#~ "NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files " +#~ "to the project." +#~ msgstr "" +#~ "알림: 2D í…ìŠ¤ì³ ê°€ì ¸ì˜¤ê¸°ê°€ 필수는 아닙니다. png/jpg 파ì¼ë“¤ì„ 프로ì íŠ¸ì— ë³µ" +#~ "사해서 ì‚¬ìš©í•´ë„ ë©ë‹ˆë‹¤." + +#~ msgid "Crop empty space." +#~ msgstr "빈 ì˜ì— 잘ë¼ë‚´ê¸°." + +#~ msgid "Texture" +#~ msgstr "í…스ì³" + +#~ msgid "Import Large Texture" +#~ msgstr "í° í…ìŠ¤ì³ ê°€ì ¸ì˜¤ê¸°" + +#~ msgid "Load Source Image" +#~ msgstr "소스 ì´ë¯¸ì§€ 로드" + +#~ msgid "Slicing" +#~ msgstr "ìžë¥´ëŠ” 중" + +#~ msgid "Saving" +#~ msgstr "ì €ìž¥ 중" + +#~ msgid "Couldn't save large texture:" +#~ msgstr "í° í…스ì³ë¥¼ ì €ìž¥í• ìˆ˜ ì—†ìŒ:" + +#~ msgid "Build Atlas For:" +#~ msgstr "ì•„í‹€ë¼ìФ ìƒì„±:" + +#~ msgid "Loading Image:" +#~ msgstr "ì´ë¯¸ì§€ 로딩:" + +#~ msgid "Couldn't load image:" +#~ msgstr "ì´ë¯¸ì§€ë¥¼ ë¡œë“œí• ìˆ˜ ì—†ìŒ:" + +#~ msgid "Converting Images" +#~ msgstr "ì´ë¯¸ì§€ 변환 중" + +#~ msgid "Cropping Images" +#~ msgstr "ì´ë¯¸ì§€ ìžë¥´ëŠ” 중" + +#~ msgid "Blitting Images" +#~ msgstr "ì´ë¯¸ì§€ 병합 중" + +#~ msgid "Couldn't save atlas image:" +#~ msgstr "ì•„í‹€ë¼ìФ ì´ë¯¸ì§€ë¥¼ ì €ìž¥í• ìˆ˜ ì—†ìŒ:" + +#~ msgid "Couldn't save converted texture:" +#~ msgstr "ë³€í™˜ëœ í…스ì³ë¥¼ ì €ìž¥í• ìˆ˜ ì—†ìŒ:" + +#~ msgid "Invalid source!" +#~ msgstr "ìœ íš¨í•˜ì§€ ì•Šì€ ì†ŒìŠ¤!" + +#~ msgid "Invalid translation source!" +#~ msgstr "ìœ íš¨í•˜ì§€ ì•Šì€ ë²ˆì— ì†ŒìŠ¤!" + +#~ msgid "Column" +#~ msgstr "ì—´" + +#~ msgid "No items to import!" +#~ msgstr "ê°€ì ¸ì˜¬ í•ëª©ì´ ì—†ìŠµë‹ˆë‹¤!" + +#~ msgid "No target path!" +#~ msgstr "ëŒ€ìƒ ê²½ë¡œê°€ 없습니다!" + +#~ msgid "Import Translations" +#~ msgstr "ë²ˆì— ê°€ì ¸ì˜¤ê¸°" + +#~ msgid "Couldn't import!" +#~ msgstr "ê°€ì ¸ì˜¬ 수 없습니다!" + +#~ msgid "Import Translation" +#~ msgstr "ë²ˆì— ê°€ì ¸ì˜¤ê¸°" + +#~ msgid "Source CSV:" +#~ msgstr "소스 CSV:" + +#~ msgid "Ignore First Row" +#~ msgstr "첫째줄 무시" + +#~ msgid "Compress" +#~ msgstr "ì••ì¶•" + +#~ msgid "Add to Project (project.godot)" +#~ msgstr "프로ì íŠ¸ì— ì¶”ê°€ (project.godot)" + +#~ msgid "Import Languages:" +#~ msgstr "언어 ê°€ì ¸ì˜¤ê¸°:" + +#~ msgid "Translation" +#~ msgstr "번ì—" + +#~ msgid "Parsing %d Triangles:" +#~ msgstr "%dê°œ 삼ê°í˜• ë¶„ì„ ì¤‘:" + +#~ msgid "Triangle #" +#~ msgstr "삼ê°í˜• #" + +#~ msgid "Light Baker Setup:" +#~ msgstr "ë¼ì´íЏ ë² ì´ì»¤ ì„¤ì •:" + +#~ msgid "Fixing Lights" +#~ msgstr "ë¼ì´íЏ ìˆ˜ì • 중" + +#~ msgid "Making BVH" +#~ msgstr "BVH 만드는 중" + +#~ msgid "Transfer to Lightmaps:" +#~ msgstr "ë¼ì´íŠ¸ë§µìœ¼ë¡œ ì „ì†¡:" + +#~ msgid "Allocating Texture #" +#~ msgstr "í…ìŠ¤ì³ í• ë‹¹ 중 #" + +#~ msgid "Baking Triangle #" +#~ msgstr "삼ê°í˜• 굽는 중 #" + +#~ msgid "Post-Processing Texture #" +#~ msgstr "í…ìŠ¤ì³ í›„ì²˜ë¦¬ 중 #" + +#~ msgid "Reset the lightmap octree baking process (start over)." +#~ msgstr "ë¼ì´íŠ¸ë§µ 오í¬íŠ¸ë¦¬ 굽기 프로세스 ìž¬ì„¤ì • (처ìŒë¶€í„° 다시)." + +#~ msgid "Zoom (%):" +#~ msgstr "확대 (%):" + +#~ msgid "Skeleton.." +#~ msgstr "ìŠ¤ì¼ˆë ˆí†¤.." + +#~ msgid "Zoom Reset" +#~ msgstr "확대 초기화" + +#~ msgid "Zoom Set.." +#~ msgstr "확대 ì„¤ì •.." + +#~ msgid "Set a Value" +#~ msgstr "ê°’ ì„¤ì •" + +#~ msgid "Snap (Pixels):" +#~ msgstr "스냅 (픽셀):" + +#~ msgid "Parse BBCode" +#~ msgstr "BBCode ì½ê¸°" + +#~ msgid "Length:" +#~ msgstr "길ì´:" + +#~ msgid "Open Sample File(s)" +#~ msgstr "샘플 íŒŒì¼ ì—´ê¸°" + +#~ msgid "ERROR: Couldn't load sample!" +#~ msgstr "ì—러: ìƒ˜í”Œì„ ë¡œë“œí• ìˆ˜ 없습니다!" + +#~ msgid "Add Sample" +#~ msgstr "샘플 추가" + +#~ msgid "Rename Sample" +#~ msgstr "샘플 ì´ë¦„ 변경" + +#~ msgid "Delete Sample" +#~ msgstr "샘플 ì‚ì œ" + +#~ msgid "16 Bits" +#~ msgstr "16 비트" + +#~ msgid "8 Bits" +#~ msgstr "8 비트" + +#~ msgid "Stereo" +#~ msgstr "ìŠ¤í…Œë ˆì˜¤" + +#~ msgid "Mono" +#~ msgstr "모노" + +#~ msgid "Pitch" +#~ msgstr "피치" + +#~ msgid "Window" +#~ msgstr "윈ë„ìš°" + +#~ msgid "Move Right" +#~ msgstr "오른쪽으로 ì´ë™" + +#~ msgid "Scaling to %s%%." +#~ msgstr "%s%%로 í¬ê¸° 변경." + +#~ msgid "Up" +#~ msgstr "위" + +#~ msgid "Down" +#~ msgstr "아래" + +#~ msgid "Bucket" +#~ msgstr "채우기" + +#~ msgid "Invalid project path, the path must exist!" +#~ msgstr "프로ì 트 경로가 ìœ íš¨í•˜ì§€ 않습니다. 경로가 반드시 존재해야 합니다!" + +#, fuzzy +#~ msgid "Invalid project path, project.godot must not exist." +#~ msgstr "프로ì 트 경로가 ìœ íš¨í•˜ì§€ 않습니다. engine.cfgê°€ 있으면 안ë©ë‹ˆë‹¤." + +#, fuzzy +#~ msgid "Invalid project path, project.godot must exist." +#~ msgstr "프로ì 트 경로가 ìœ íš¨í•˜ì§€ 않습니다. engine.cfgê°€ 존재해야합니다." + +#~ msgid "Project Path (Must Exist):" +#~ msgstr "프로ì 트 경로 (반드시 í•„ìš”):" + +#~ msgid "Create New Resource" +#~ msgstr "새 리소스 만들기" + +#~ msgid "Open Resource" +#~ msgstr "리소스 열기" + +#~ msgid "Save Resource" +#~ msgstr "리로스 ì €ìž¥" + +#~ msgid "Resource Tools" +#~ msgstr "리소스 ë„구" + +#~ msgid "Make Local" +#~ msgstr "로컬로 만들기" + +#~ msgid "Edit Groups" +#~ msgstr "그룹 편집" + +#~ msgid "Edit Connections" +#~ msgstr "ì—°ê²° 편집" + +#, fuzzy +#~ msgid "Tiles" +#~ msgstr "파ì¼" + +#~ msgid "Ctrl+" +#~ msgstr "컨트롤+" + #~ msgid "Close scene? (Unsaved changes will be lost)" #~ msgstr "ì”¬ì„ ë‹«ìœ¼ì‹œê² ìŠµë‹ˆê¹Œ? (ì €ìž¥í•˜ì§€ ì•Šì€ ë³€ê²½ì‚¬í•ì€ ì‚¬ë¼ì§‘니다.)" @@ -8058,9 +8246,6 @@ msgstr "" #~ msgid "Close Goto Prev. Scene" #~ msgstr "ë‹«ê³ ì´ì „ 씬으로 ì´ë™" -#~ msgid "Expand to Parent" -#~ msgstr "부모로 확장" - #~ msgid "Del" #~ msgstr "ì‚ì œ" @@ -8216,18 +8401,12 @@ msgstr "" #~ msgid "Save Translatable Strings" #~ msgstr "번ì—가능한 문ìžì—´ ì €ìž¥" -#~ msgid "Translatable Strings.." -#~ msgstr "ë²ˆì— ê°€ëŠ¥í•œ 문ìžì—´.." - #~ msgid "Install Export Templates" #~ msgstr "내보내기 템플릿 설치" #~ msgid "Edit Script Options" #~ msgstr "스í¬ë¦½íЏ 옵션 편집" -#~ msgid "Please export outside the project folder!" -#~ msgstr "프로ì 트 í´ë” ë°”ê¹¥ì— ë‚´ë³´ë‚´ê¸°ë¥¼ 하세요!" - #~ msgid "Error exporting project!" #~ msgstr "프로ì 트 내보내기 중 ì—러!" @@ -8261,18 +8440,12 @@ msgstr "" #~ msgid "Include" #~ msgstr "í¬í•¨" -#~ msgid "Change Image Group" -#~ msgstr "ì´ë¯¸ì§€ 그룹 변경" - #~ msgid "Group name can't be empty!" #~ msgstr "그룹 ì´ë¦„ì„ ì§€ì •í•´ì•¼ 합니다!" #~ msgid "Invalid character in group name!" #~ msgstr "그룹 ì´ë¦„ì— ìœ íš¨í•˜ì§€ ì•Šì€ ë¬¸ìžê°€ 사용ë˜ì—ˆìŠµë‹ˆë‹¤!" -#~ msgid "Group name already exists!" -#~ msgstr "그룹 ì´ë¦„ì´ ì´ë¯¸ 사용중입니다!" - #~ msgid "Add Image Group" #~ msgstr "ì´ë¯¸ì§€ 그룹 추가" @@ -8420,9 +8593,6 @@ msgstr "" #~ msgid "Lighting" #~ msgstr "ë¼ì´íŒ…" -#~ msgid "Toggle Persisting" -#~ msgstr "ì§€ì† ì „í™˜" - #~ msgid "Global" #~ msgstr "Global" diff --git a/editor/translations/nb.po b/editor/translations/nb.po index eb230cc1ac..04f87dde0b 100644 --- a/editor/translations/nb.po +++ b/editor/translations/nb.po @@ -192,10 +192,9 @@ msgid "Create %d NEW tracks and insert keys?" msgstr "" #: editor/animation_editor.cpp editor/create_dialog.cpp -#: editor/editor_audio_buses.cpp +#: editor/editor_audio_buses.cpp editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp #: editor/plugins/mesh_instance_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp editor/project_manager.cpp #: editor/script_create_dialog.cpp msgid "Create" @@ -357,262 +356,6 @@ msgstr "" msgid "Change Array Value" msgstr "" -#: editor/asset_library_editor_plugin.cpp -msgid "Free" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp -msgid "Version:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Contents:" -msgstr "Kontinuerlig" - -#: editor/asset_library_editor_plugin.cpp -msgid "View Files" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_help.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp -msgid "Description:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -#: editor/project_manager.cpp -msgid "Install" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp -#: editor/connections_dialog.cpp editor/export_template_manager.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -#: editor/project_settings_editor.cpp editor/property_editor.cpp -#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Close" -msgstr "Lukk" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve hostname:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Connection error, please try again." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't connect." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't connect to host:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response from host:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Request failed, return code:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Req. Failed." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Request failed, too many redirects" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Redirect Loop." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Bad download hash, assuming file has been tampered with." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Expected:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Got:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed sha256 hash check" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Asset Download Error:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -msgid "Success!" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Fetching:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Resolving.." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Error making request" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Idle" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Retry" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Download Error" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Download for this asset is already in progress!" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "first" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "prev" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "next" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "last" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "All" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/property_selector.cpp editor/quick_open.cpp -#: editor/settings_config_dialog.cpp -msgid "Search:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Search" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/project_manager.cpp -msgid "Import" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Plugins" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Sort:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Reverse" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Category:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Site:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Official" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -msgid "Community" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Testing" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Assets ZIP File" -msgstr "" - -#: editor/call_dialog.cpp -msgid "Method List For '%s':" -msgstr "" - -#: editor/call_dialog.cpp modules/visual_script/visual_script_editor.cpp -msgid "Call" -msgstr "Ring" - -#: editor/call_dialog.cpp -msgid "Method List:" -msgstr "" - -#: editor/call_dialog.cpp -msgid "Arguments:" -msgstr "" - -#: editor/call_dialog.cpp -msgid "Return:" -msgstr "" - #: editor/code_editor.cpp msgid "Go to Line" msgstr "" @@ -649,6 +392,14 @@ msgstr "" msgid "Selection Only" msgstr "" +#: editor/code_editor.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp +msgid "Search" +msgstr "" + #: editor/code_editor.cpp editor/editor_help.cpp msgid "Find" msgstr "" @@ -681,11 +432,11 @@ msgstr "" msgid "Skip" msgstr "" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom In" msgstr "" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom Out" msgstr "" @@ -752,6 +503,20 @@ msgstr "" msgid "Oneshot" msgstr "" +#: editor/connections_dialog.cpp editor/dependency_editor.cpp +#: editor/export_template_manager.cpp +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Close" +msgstr "Lukk" + #: editor/connections_dialog.cpp msgid "Connect" msgstr "" @@ -777,7 +542,7 @@ msgstr "" msgid "Disconnect" msgstr "" -#: editor/connections_dialog.cpp editor/node_dock.cpp +#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" msgstr "" @@ -794,12 +559,25 @@ msgstr "" msgid "Recent:" msgstr "" +#: editor/create_dialog.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp +#: editor/quick_open.cpp editor/settings_config_dialog.cpp +msgid "Search:" +msgstr "" + #: editor/create_dialog.cpp editor/editor_help.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp #: editor/quick_open.cpp msgid "Matches:" msgstr "" +#: editor/create_dialog.cpp editor/editor_help.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp +#: editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "" + #: editor/dependency_editor.cpp msgid "Search Replacement For:" msgstr "" @@ -855,6 +633,10 @@ msgid "Owners Of:" msgstr "" #: editor/dependency_editor.cpp +msgid "Remove selected files from the project? (no undo)" +msgstr "" + +#: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" @@ -862,7 +644,7 @@ msgid "" msgstr "" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (no undo)" +msgid "Cannot remove:\n" msgstr "" #: editor/dependency_editor.cpp @@ -929,10 +711,6 @@ msgid "Godot Engine contributors" msgstr "" #: editor/editor_about.cpp -msgid "Authors" -msgstr "" - -#: editor/editor_about.cpp msgid "Project Founders" msgstr "" @@ -949,6 +727,38 @@ msgid "Developers" msgstr "" #: editor/editor_about.cpp +msgid "Authors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Platinum Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Mini Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Silver Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Bronze Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Donors" +msgstr "" + +#: editor/editor_about.cpp msgid "License" msgstr "" @@ -991,6 +801,16 @@ msgid "Package Installed Successfully!" msgstr "" #: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Success!" +msgstr "" + +#: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp +msgid "Install" +msgstr "" + +#: editor/editor_asset_installer.cpp msgid "Package Installer" msgstr "" @@ -1040,10 +860,6 @@ msgid "Audio Bus, Drag and Drop to rearrange." msgstr "" #: editor/editor_audio_buses.cpp -msgid "Bus options" -msgstr "" - -#: editor/editor_audio_buses.cpp msgid "Solo" msgstr "" @@ -1055,12 +871,20 @@ msgstr "" msgid "Bypass" msgstr "" +#: editor/editor_audio_buses.cpp +msgid "Bus options" +msgstr "" + #: editor/editor_audio_buses.cpp editor/plugins/tile_map_editor_plugin.cpp #: editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "" #: editor/editor_audio_buses.cpp +msgid "Reset Volume" +msgstr "" + +#: editor/editor_audio_buses.cpp #, fuzzy msgid "Delete Effect" msgstr "Slett Valgte" @@ -1083,6 +907,10 @@ msgid "Duplicate Audio Bus" msgstr "Dupliser Utvalg" #: editor/editor_audio_buses.cpp +msgid "Reset Bus Volume" +msgstr "" + +#: editor/editor_audio_buses.cpp #, fuzzy msgid "Move Audio Bus" msgstr "Flytt Legg til Nøkkel" @@ -1115,7 +943,8 @@ msgstr "" msgid "Create a new Bus Layout." msgstr "" -#: editor/editor_audio_buses.cpp editor/script_create_dialog.cpp +#: editor/editor_audio_buses.cpp editor/property_editor.cpp +#: editor/script_create_dialog.cpp msgid "Load" msgstr "" @@ -1205,7 +1034,7 @@ msgid "Rearrange Autoloads" msgstr "" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp scene/gui/file_dialog.cpp +#: scene/gui/file_dialog.cpp msgid "Path:" msgstr "" @@ -1213,9 +1042,7 @@ msgstr "" msgid "Node Name:" msgstr "" -#: editor/editor_autoload_settings.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp editor/project_manager.cpp +#: editor/editor_autoload_settings.cpp editor/project_manager.cpp msgid "Name" msgstr "" @@ -1248,18 +1075,19 @@ msgid "Choose a Directory" msgstr "" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Create Folder" msgstr "" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: editor/editor_plugin_settings.cpp editor/plugins/theme_editor_plugin.cpp -#: editor/project_export.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp +#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp +#: scene/gui/file_dialog.cpp msgid "Name:" msgstr "" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Could not create folder." msgstr "" @@ -1279,30 +1107,6 @@ msgstr "" msgid "Template file not found:\n" msgstr "" -#: editor/editor_export.cpp -msgid "Added:" -msgstr "" - -#: editor/editor_export.cpp -msgid "Removed:" -msgstr "" - -#: editor/editor_export.cpp -msgid "Error saving atlas:" -msgstr "" - -#: editor/editor_export.cpp -msgid "Could not save atlas subtexture:" -msgstr "" - -#: editor/editor_export.cpp -msgid "Exporting for %s" -msgstr "" - -#: editor/editor_export.cpp -msgid "Setting Up.." -msgstr "" - #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "" @@ -1387,6 +1191,10 @@ msgstr "" msgid "Move Favorite Down" msgstr "" +#: editor/editor_file_dialog.cpp +msgid "Go to parent folder" +msgstr "" + #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Directories & Files:" msgstr "" @@ -1429,6 +1237,10 @@ msgstr "" msgid "Search Classes" msgstr "" +#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +msgid "Top" +msgstr "" + #: editor/editor_help.cpp editor/property_editor.cpp msgid "Class:" msgstr "" @@ -1445,15 +1257,28 @@ msgstr "" msgid "Brief Description:" msgstr "" +#: editor/editor_help.cpp +#, fuzzy +msgid "Members" +msgstr "Medlemmer:" + #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "Medlemmer:" #: editor/editor_help.cpp +msgid "Public Methods" +msgstr "" + +#: editor/editor_help.cpp msgid "Public Methods:" msgstr "" #: editor/editor_help.cpp +msgid "GUI Theme Items" +msgstr "" + +#: editor/editor_help.cpp msgid "GUI Theme Items:" msgstr "" @@ -1463,6 +1288,11 @@ msgstr "Signaler:" #: editor/editor_help.cpp #, fuzzy +msgid "Enumerations" +msgstr "Funksjoner:" + +#: editor/editor_help.cpp +#, fuzzy msgid "Enumerations:" msgstr "Funksjoner:" @@ -1471,18 +1301,46 @@ msgid "enum " msgstr "" #: editor/editor_help.cpp +msgid "Constants" +msgstr "" + +#: editor/editor_help.cpp msgid "Constants:" msgstr "" #: editor/editor_help.cpp +msgid "Description" +msgstr "" + +#: editor/editor_help.cpp +msgid "Properties" +msgstr "" + +#: editor/editor_help.cpp msgid "Property Description:" msgstr "" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this property. Please help us by " +"[color=$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp +msgid "Methods" +msgstr "" + +#: editor/editor_help.cpp msgid "Method Description:" msgstr "" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this method. Please help us by [color=" +"$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp msgid "Search Text" msgstr "" @@ -1491,24 +1349,21 @@ msgid "Output:" msgstr "" #: editor/editor_log.cpp editor/plugins/animation_tree_editor_plugin.cpp -#: editor/plugins/rich_text_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_editor_debugger.cpp scene/gui/line_edit.cpp -#: scene/gui/text_edit.cpp +#: editor/property_editor.cpp editor/script_editor_debugger.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Clear" msgstr "" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Error saving resource!" msgstr "" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Save Resource As.." msgstr "" -#: editor/editor_node.cpp editor/export_template_manager.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "I see.." msgstr "" @@ -1525,6 +1380,26 @@ msgid "Error while saving." msgstr "" #: editor/editor_node.cpp +msgid "Can't open '%s'." +msgstr "" + +#: editor/editor_node.cpp +msgid "Error while parsing '%s'." +msgstr "" + +#: editor/editor_node.cpp +msgid "Unexpected end of file '%s'." +msgstr "" + +#: editor/editor_node.cpp +msgid "Missing '%s' or its dependencies." +msgstr "" + +#: editor/editor_node.cpp +msgid "Error while loading '%s'." +msgstr "" + +#: editor/editor_node.cpp msgid "Saving Scene" msgstr "" @@ -1582,6 +1457,33 @@ msgid "Restored default layout to base settings." msgstr "" #: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was imported, so it's not editable.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was instanced or inherited.\n" +"Changes to it will not be kept when saving the current scene." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource was imported, so it's not editable. Change its settings in the " +"import panel and then re-import." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This scene was imported, so changes to it will not be kept.\n" +"Instancing it or inheriting will allow making changes to it.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp msgid "Copy Params" msgstr "" @@ -1743,6 +1645,12 @@ msgid "Save changes the following scene(s) before opening Project Manager?" msgstr "" #: editor/editor_node.cpp +msgid "" +"This option is deprecated. Situations where refresh must be forced are now " +"considered a bug. Please report." +msgstr "" + +#: editor/editor_node.cpp msgid "Pick a Main Scene" msgstr "" @@ -1769,7 +1677,7 @@ msgid "" msgstr "" #: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Ugh" msgstr "" @@ -1780,11 +1688,11 @@ msgid "" msgstr "" #: editor/editor_node.cpp -msgid "Error loading scene." +msgid "Scene '%s' has broken dependencies:" msgstr "" #: editor/editor_node.cpp -msgid "Scene '%s' has broken dependencies:" +msgid "Clear Recent Scenes" msgstr "" #: editor/editor_node.cpp @@ -1820,7 +1728,7 @@ msgstr "" msgid "Toggle distraction-free mode." msgstr "" -#: editor/editor_node.cpp editor/io_plugins/editor_scene_import_plugin.cpp +#: editor/editor_node.cpp msgid "Scene" msgstr "" @@ -2040,6 +1948,10 @@ msgstr "" msgid "Issue Tracker" msgstr "" +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +msgid "Community" +msgstr "" + #: editor/editor_node.cpp msgid "About" msgstr "" @@ -2048,7 +1960,7 @@ msgstr "" msgid "Play the project." msgstr "" -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Play" msgstr "" @@ -2064,7 +1976,7 @@ msgstr "" msgid "Stop the scene." msgstr "" -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Stop" msgstr "" @@ -2137,6 +2049,15 @@ msgid "Object properties." msgstr "" #: editor/editor_node.cpp +msgid "Changes may be lost!" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Import" +msgstr "" + +#: editor/editor_node.cpp msgid "FileSystem" msgstr "" @@ -2152,14 +2073,6 @@ msgstr "" msgid "Don't Save" msgstr "" -#: editor/editor_node.cpp editor/editor_reimport_dialog.cpp -msgid "Re-Import" -msgstr "" - -#: editor/editor_node.cpp editor/editor_plugin_settings.cpp -msgid "Update" -msgstr "" - #: editor/editor_node.cpp msgid "Import Templates From ZIP File" msgstr "" @@ -2220,11 +2133,28 @@ msgstr "" msgid "Open the previous Editor" msgstr "" +#: editor/editor_plugin.cpp +msgid "Creating Mesh Previews" +msgstr "" + +#: editor/editor_plugin.cpp +msgid "Thumbnail.." +msgstr "" + #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" msgstr "" #: editor/editor_plugin_settings.cpp +msgid "Update" +msgstr "" + +#: editor/editor_plugin_settings.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Version:" +msgstr "" + +#: editor/editor_plugin_settings.cpp msgid "Author:" msgstr "" @@ -2276,26 +2206,6 @@ msgstr "" msgid "Frame #:" msgstr "" -#: editor/editor_reimport_dialog.cpp -msgid "Please wait for scan to complete." -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Current scene must be saved to re-import." -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Save & Re-Import" -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Importing" -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Import Changed Resources" -msgstr "" - #: editor/editor_run_native.cpp msgid "Select device from the list" msgstr "" @@ -2405,10 +2315,6 @@ msgid "Importing:" msgstr "" #: editor/export_template_manager.cpp -msgid "Loading Export Templates" -msgstr "" - -#: editor/export_template_manager.cpp msgid "Current Version:" msgstr "" @@ -2441,9 +2347,17 @@ msgid "Cannot navigate to '" msgstr "" #: editor/filesystem_dock.cpp +msgid "View items as a grid of thumbnails" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "View items as a list" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "" "\n" -"Status: Needs Re-Import" +"Status: Import of file failed. Please fix file and reimport manually." msgstr "" #: editor/filesystem_dock.cpp @@ -2453,87 +2367,87 @@ msgid "" msgstr "" #: editor/filesystem_dock.cpp -msgid "Same source and destination files, doing nothing." +msgid "Cannot move/rename resources root." msgstr "" #: editor/filesystem_dock.cpp -msgid "Target file exists, can't overwrite. Delete first." +msgid "Cannot move a folder into itself.\n" msgstr "" #: editor/filesystem_dock.cpp -msgid "Same source and destination paths, doing nothing." +msgid "Error moving:\n" msgstr "" #: editor/filesystem_dock.cpp -msgid "Can't move directories to within themselves." +msgid "Unable to update dependencies:\n" msgstr "" #: editor/filesystem_dock.cpp -msgid "Can't rename deps for:\n" +msgid "No name provided" msgstr "" #: editor/filesystem_dock.cpp -msgid "Error moving file:\n" +msgid "Provided name contains invalid characters" msgstr "" #: editor/filesystem_dock.cpp -msgid "Error moving dir:\n" +msgid "No name provided." msgstr "" #: editor/filesystem_dock.cpp -msgid "Can't operate on '..'" +msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp -msgid "Pick New Name and Location For:" +msgid "A file or folder with this name already exists." msgstr "" #: editor/filesystem_dock.cpp -msgid "No files selected!" +msgid "Renaming file:" msgstr "" #: editor/filesystem_dock.cpp -msgid "Expand all" +msgid "Renaming folder:" msgstr "" #: editor/filesystem_dock.cpp -msgid "Collapse all" +msgid "Expand all" msgstr "" #: editor/filesystem_dock.cpp -msgid "Show In File Manager" +msgid "Collapse all" msgstr "" #: editor/filesystem_dock.cpp -msgid "Instance" +msgid "Copy Path" msgstr "" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." +msgid "Rename.." msgstr "" #: editor/filesystem_dock.cpp -msgid "View Owners.." +msgid "Move To.." msgstr "" #: editor/filesystem_dock.cpp -msgid "Copy Path" +msgid "New Folder.." msgstr "" #: editor/filesystem_dock.cpp -msgid "Rename or Move.." +msgid "Show In File Manager" msgstr "" #: editor/filesystem_dock.cpp -msgid "Move To.." +msgid "Instance" msgstr "" #: editor/filesystem_dock.cpp -msgid "Info" +msgid "Edit Dependencies.." msgstr "" #: editor/filesystem_dock.cpp -msgid "Re-Import.." +msgid "View Owners.." msgstr "" #: editor/filesystem_dock.cpp @@ -2566,6 +2480,11 @@ msgstr "" msgid "Move" msgstr "" +#: editor/filesystem_dock.cpp editor/plugins/animation_tree_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Rename" +msgstr "" + #: editor/groups_editor.cpp msgid "Add to Group" msgstr "" @@ -2579,6 +2498,10 @@ msgid "Import as Single Scene" msgstr "" #: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials" msgstr "" @@ -2591,6 +2514,18 @@ msgid "Import with Separate Objects+Materials" msgstr "" #: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Materials+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Materials+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes" msgstr "" @@ -2599,38 +2534,31 @@ msgid "Import as Multiple Scenes+Materials" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Import Scene" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Importing Scene.." msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Running Custom Script.." msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Couldn't load post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Invalid/broken script for post-import (check console):" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Error running post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Saving.." msgstr "" @@ -2658,579 +2586,54 @@ msgstr "" msgid "Reimport" msgstr "" -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "No bit masks to import!" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path is empty." -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must be a complete resource path." -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must exist." -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Save path is empty!" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Import BitMasks" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s):" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Target Path:" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Accept" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Bit Mask" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No source font file!" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No target font resource!" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "" -"Invalid file extension.\n" -"Please use .font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Can't load/process source font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Couldn't save font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font Size:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Dest Resource:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "The quick brown fox jumps over the lazy dog." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Test:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Options:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Font Import" -msgstr "" - -#: 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 "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Failed opening as BMFont file." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error initializing FreeType." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Unknown font format." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error loading font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Invalid font size." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Invalid font custom source." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/plugins/theme_editor_plugin.cpp -msgid "Font" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "No meshes to import!" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Single Mesh Import" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Source Mesh(es):" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Mesh" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Surface %d" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "No samples to import!" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Import Audio Samples" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Source Sample(s):" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Audio Sample" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "New Clip" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Animation Options" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Flags" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Bake FPS:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Optimizer" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Linear Error" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angular Error" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angle" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Clips" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Start(s)" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "End(s)" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Loop" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Filters" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source path is empty." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't load post-import script." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Invalid/broken script for post-import." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Error importing scene." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import 3D Scene" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source Scene:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Same as Target Scene" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Shared" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Target Texture Folder:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Post-Process Script:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Custom Root Node Type:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Auto" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Root Node Name:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "The Following Files are Missing:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Anyway" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp scene/gui/dialogs.cpp -msgid "Cancel" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import & Open" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Edited scene has not been saved, open imported scene anyway?" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Image:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Can't import a file over itself:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't localize path: %s (already local)" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "3D Scene Animation" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Uncompressed" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossless (PNG)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossy (WebP)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress (VRAM)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Format" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Compression Quality (WebP):" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Options" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Please specify some files!" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "At least one file needed for Atlas." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Error importing:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Only one file is required for large texture." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Max Texture Size:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for Atlas (2D)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cell Size:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Large Texture" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Textures (2D)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture" +#: editor/multi_node_edit.cpp +msgid "MultiNode Set" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Base Atlas Texture" +#: editor/node_dock.cpp +msgid "Groups" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s)" +#: editor/node_dock.cpp +msgid "Select a Node to edit Signals and Groups." msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 2D" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create Poly" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 3D" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures" +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Insert Point" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "2D Texture" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly (Remove Point)" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "3D Texture" +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Remove Poly And Point" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Atlas Texture" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create a new polygon from scratch." msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp +#: editor/plugins/abstract_polygon_2d_editor.cpp msgid "" -"NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files to " -"the project." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Crop empty space." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Texture" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Load Source Image" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Slicing" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Inserting" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Saving" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save large texture:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Build Atlas For:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Loading Image:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't load image:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Converting Images" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cropping Images" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Blitting Images" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save atlas image:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save converted texture:" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid source!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid translation source!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Column" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/script_create_dialog.cpp -msgid "Language" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No items to import!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No target path!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translations" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Couldn't import!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translation" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Source CSV:" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Ignore First Row" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Compress" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Add to Project (project.godot)" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Languages:" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Translation" -msgstr "" - -#: editor/multi_node_edit.cpp -msgid "MultiNode Set" -msgstr "" - -#: editor/node_dock.cpp -msgid "Groups" -msgstr "" - -#: editor/node_dock.cpp -msgid "Select a Node to edit Signals and Groups." +"Edit existing polygon:\n" +"LMB: Move Point.\n" +"Ctrl+LMB: Split Segment.\n" +"RMB: Erase Point." msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp @@ -3386,7 +2789,6 @@ msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp #: editor/script_create_dialog.cpp msgid "Error!" @@ -3497,10 +2899,6 @@ msgid "Delete Input" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Rename" -msgstr "" - -#: editor/plugins/animation_tree_editor_plugin.cpp msgid "Animation tree is valid." msgstr "" @@ -3556,64 +2954,182 @@ msgstr "" msgid "Filters.." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing %d Triangles:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Free" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Triangle #" +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Contents:" +msgstr "Kontinuerlig" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "View Files" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Light Baker Setup:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve hostname:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing Geometry" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Fixing Lights" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connection error, please try again." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Making BVH" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't connect." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Light Octree" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't connect to host:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Octree Texture" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response from host:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Transfer to Lightmaps:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Allocating Texture #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, return code:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Baking Triangle #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Req. Failed." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Post-Processing Texture #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, too many redirects" msgstr "" -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Bake!" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Redirect Loop." msgstr "" -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Reset the lightmap octree baking process (start over)." +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Bad download hash, assuming file has been tampered with." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Expected:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Got:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed sha256 hash check" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Asset Download Error:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Fetching:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Resolving.." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connecting.." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Requesting.." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Error making request" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Idle" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Retry" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download Error" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download for this asset is already in progress!" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "first" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "prev" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "next" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "last" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "All" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Plugins" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Sort:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Reverse" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Category:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Site:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Support.." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Official" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Testing" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Assets ZIP File" msgstr "" #: editor/plugins/camera_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp msgid "Preview" msgstr "" @@ -3656,11 +3172,15 @@ msgid "Edit CanvasItem" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Change Anchors" +msgid "Anchors only" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom (%):" +msgid "Change Anchors and Margins" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Change Anchors" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3711,59 +3231,72 @@ msgid "Pan Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Lock the selected object in place (can't be moved)." +msgid "Toggles snapping" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Unlock the selected object (can be moved)." +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Makes sure the object's children are not selectable." +msgid "Snapping options" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Restores the object's children's ability to be selected." +msgid "Snap to grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp -#: editor/project_settings_editor.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Edit" -msgstr "Rediger" +msgid "Use Rotation Snap" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +msgid "Configure Snap..." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +msgid "Snap Relative" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Rotation Snap" +msgid "Use Pixel Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap Relative" +msgid "Smart snapping" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." +msgid "Snap to parent" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Pixel Snap" +msgid "Snap to node anchor" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to node sides" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to other nodes" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Lock the selected object in place (can't be moved)." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Unlock the selected object (can be moved)." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Makes sure the object's children are not selectable." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Skeleton.." +msgid "Restores the object's children's ability to be selected." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3792,11 +3325,16 @@ msgid "View" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Reset" +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show helpers" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Set.." +msgid "Show rulers" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3808,7 +3346,7 @@ msgid "Frame Selection" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Anchor" +msgid "Layout" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3832,11 +3370,20 @@ msgid "Clear Pose" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Set a Value" +msgid "Drag pivot from mouse position" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Set pivot at mouse position" +msgstr "Fjern Funksjon" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Multiply grid step by 2" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap (Pixels):" +msgid "Divide grid step by 2" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3847,23 +3394,28 @@ msgstr "" msgid "Adding %s..." msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Create Node" msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Error instancing scene from %s" msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "OK :(" msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "No parent to instance a child at." msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "This operation requires a single selected node." msgstr "" @@ -3877,45 +3429,6 @@ msgid "" "Drag & drop + Alt : Change node type" msgstr "" -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Create Poly" -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly" -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly (Remove Point)" -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Create a new polygon from scratch." -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -msgid "" -"Edit existing polygon:\n" -"LMB: Move Point.\n" -"Ctrl+LMB: Split Segment.\n" -"RMB: Erase Point." -msgstr "" - #: editor/plugins/collision_polygon_editor_plugin.cpp msgid "Create Poly3D" msgstr "" @@ -3925,14 +3438,6 @@ msgid "Set Handle" msgstr "" #: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Creating Mesh Library" -msgstr "" - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Thumbnail.." -msgstr "" - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Remove item %d?" msgstr "" @@ -3955,6 +3460,27 @@ msgid "Update from Scene" msgstr "" #: editor/plugins/curve_editor_plugin.cpp +msgid "Flat0" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Flat1" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +#, fuzzy +msgid "Ease in" +msgstr "Fjern Utvalg" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Ease out" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Smoothstep" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp msgid "Modify Curve Point" msgstr "" @@ -4032,22 +3558,18 @@ msgid "Create Occluder Polygon" msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Edit existing polygon:" msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "LMB: Move Point." msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Ctrl+LMB: Split Segment." msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "RMB: Erase Point." msgstr "" @@ -4148,6 +3670,10 @@ msgid "Create Outline" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Body" msgstr "" @@ -4275,12 +3801,72 @@ msgstr "" msgid "Populate" msgstr "" -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Create Navigation Polygon" +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Bake!" +msgstr "" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Bake the navigation mesh.\n" +msgstr "" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Clear the navigation mesh." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Setting up Configuration..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Calculating grid size..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating heightfield..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Marking walkable triangles..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Constructing compact heightfield..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Eroding walkable area..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Partioning..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating contours..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating polymesh..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Converting to native navigation mesh..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Navigation Mesh Generator Setup:" +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Parsing Geometry..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Done!" msgstr "" #: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Remove Poly And Point" +msgid "Create Navigation Polygon" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4454,16 +4040,19 @@ msgid "Curve Point #" msgstr "" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Point Pos" -msgstr "" +#, fuzzy +msgid "Set Curve Point Position" +msgstr "Fjern Funksjon" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve In Pos" -msgstr "" +#, fuzzy +msgid "Set Curve In Position" +msgstr "Fjern Funksjon" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Out Pos" -msgstr "" +#, fuzzy +msgid "Set Curve Out Position" +msgstr "Fjern Funksjon" #: editor/plugins/path_editor_plugin.cpp msgid "Split Path" @@ -4523,6 +4112,14 @@ msgid "Scale Polygon" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit" +msgstr "Rediger" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon->UV" msgstr "" @@ -4577,63 +4174,10 @@ msgstr "" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "" -#: editor/plugins/rich_text_editor_plugin.cpp -msgid "Parse BBCode" -msgstr "" - -#: editor/plugins/sample_editor_plugin.cpp -msgid "Length:" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Open Sample File(s)" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "ERROR: Couldn't load sample!" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Add Sample" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Rename Sample" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Delete Sample" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "16 Bits" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "8 Bits" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Stereo" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Mono" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/script_editor_debugger.cpp -msgid "Format" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Pitch" -msgstr "" - #: editor/plugins/script_editor_plugin.cpp msgid "Clear Recent Files" msgstr "" @@ -4724,6 +4268,10 @@ msgstr "" msgid "Close All" msgstr "" +#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp +msgid "Run" +msgstr "" + #: editor/plugins/script_editor_plugin.cpp msgid "Toggle Scripts Panel" msgstr "" @@ -4765,18 +4313,6 @@ msgid "Debug with external editor" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Window" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Left" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Right" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp msgid "Open Godot online documentation" msgstr "" @@ -4859,7 +4395,7 @@ msgstr "" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Copy" msgstr "" @@ -5123,10 +4659,6 @@ msgid "View Plane Transform." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Scaling to %s%%." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." msgstr "" @@ -5143,10 +4675,6 @@ msgid "Top View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Top" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "" @@ -5376,6 +4904,10 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Configure Snap.." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Local Coords" msgstr "" @@ -5521,6 +5053,10 @@ msgid "Speed (FPS):" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Loop" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animation Frames" msgstr "" @@ -5533,11 +5069,12 @@ msgid "Insert Empty (After)" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Up" -msgstr "" +#, fuzzy +msgid "Move (Before)" +msgstr "Kopier Noder" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Down" +msgid "Move (After)" msgstr "" #: editor/plugins/style_box_editor_plugin.cpp @@ -5700,6 +5237,10 @@ msgid "Style" msgstr "" #: editor/plugins/theme_editor_plugin.cpp +msgid "Font" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp msgid "Color" msgstr "" @@ -5749,7 +5290,7 @@ msgid "Mirror Y" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Bucket" +msgid "Paint Tile" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp @@ -5813,6 +5354,10 @@ msgid "Delete preset '%s'?" msgstr "" #: editor/project_export.cpp +msgid "Export templates for this platform are missing/corrupted: " +msgstr "" + +#: editor/project_export.cpp msgid "Presets" msgstr "" @@ -5883,19 +5428,29 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +msgid "Export templates for this platform are missing/corrupted:" +msgstr "" + +#: editor/project_export.cpp msgid "Export With Debug" msgstr "" #: editor/project_manager.cpp -msgid "Invalid project path, the path must exist!" +msgid "The path does not exists." +msgstr "" + +#: editor/project_manager.cpp +msgid "Please choose a 'project.godot' file." msgstr "" #: editor/project_manager.cpp -msgid "Invalid project path, project.godot must not exist." +msgid "" +"Your project will be created in a non empty folder (you might want to create " +"a new folder)." msgstr "" #: editor/project_manager.cpp -msgid "Invalid project path, project.godot must exist." +msgid "Please choose a folder that does not contain a 'project.godot' file." msgstr "" #: editor/project_manager.cpp @@ -5903,10 +5458,26 @@ msgid "Imported Project" msgstr "" #: editor/project_manager.cpp +msgid " " +msgstr "" + +#: editor/project_manager.cpp +msgid "It would be a good idea to name your project." +msgstr "" + +#: editor/project_manager.cpp msgid "Invalid project path (changed anything?)." msgstr "" #: editor/project_manager.cpp +msgid "Couldn't get project.godot in project path." +msgstr "" + +#: editor/project_manager.cpp +msgid "Couldn't edit project.godot in project path." +msgstr "" + +#: editor/project_manager.cpp msgid "Couldn't create project.godot in project path." msgstr "" @@ -5915,23 +5486,23 @@ msgid "The following files failed extraction from package:" msgstr "" #: editor/project_manager.cpp -msgid "Import Existing Project" +msgid "Rename Project" msgstr "" #: editor/project_manager.cpp -msgid "Project Path (Must Exist):" +msgid "Couldn't get project.godot in the project path." msgstr "" #: editor/project_manager.cpp -msgid "Project Name:" +msgid "New Game Project" msgstr "" #: editor/project_manager.cpp -msgid "Create New Project" +msgid "Import Existing Project" msgstr "" #: editor/project_manager.cpp -msgid "Project Path:" +msgid "Create New Project" msgstr "" #: editor/project_manager.cpp @@ -5939,11 +5510,19 @@ msgid "Install Project:" msgstr "" #: editor/project_manager.cpp -msgid "Browse" +msgid "Project Name:" msgstr "" #: editor/project_manager.cpp -msgid "New Game Project" +msgid "Create folder" +msgstr "" + +#: editor/project_manager.cpp +msgid "Project Path:" +msgstr "" + +#: editor/project_manager.cpp +msgid "Browse" msgstr "" #: editor/project_manager.cpp @@ -5955,6 +5534,10 @@ msgid "Unnamed Project" msgstr "" #: editor/project_manager.cpp +msgid "Can't open project" +msgstr "" + +#: editor/project_manager.cpp msgid "Are you sure to open more than one project?" msgstr "" @@ -5990,10 +5573,6 @@ msgid "Project List" msgstr "" #: editor/project_manager.cpp -msgid "Run" -msgstr "" - -#: editor/project_manager.cpp msgid "Scan" msgstr "" @@ -6050,17 +5629,14 @@ msgid "Add Input Action Event" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Meta+" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Shift+" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Alt+" msgstr "" @@ -6121,7 +5697,7 @@ msgstr "Forandre" msgid "Joypad Axis Index:" msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Axis" msgstr "" @@ -6141,31 +5717,31 @@ msgstr "" msgid "Add Event" msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Device" msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Button" msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Left Button." msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Right Button." msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Middle Button." msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Up." msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Down." msgstr "" @@ -6174,7 +5750,7 @@ msgid "Add Global Property" msgstr "" #: editor/project_settings_editor.cpp -msgid "Select an setting item first!" +msgid "Select a setting item first!" msgstr "" #: editor/project_settings_editor.cpp @@ -6191,6 +5767,14 @@ msgid "Delete Item" msgstr "Slett Valgte" #: editor/project_settings_editor.cpp +msgid "Can't contain '/' or ':'" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Already existing" +msgstr "" + +#: editor/project_settings_editor.cpp msgid "Error saving settings." msgstr "" @@ -6340,10 +5924,18 @@ msgid "New Script" msgstr "" #: editor/property_editor.cpp +msgid "Make Unique" +msgstr "" + +#: editor/property_editor.cpp msgid "Show in File System" msgstr "" #: editor/property_editor.cpp +msgid "Convert To %s" +msgstr "" + +#: editor/property_editor.cpp msgid "Error loading file: Not a resource!" msgstr "" @@ -6381,6 +5973,10 @@ msgid "Select Property" msgstr "" #: editor/property_selector.cpp +msgid "Select Virtual Method" +msgstr "" + +#: editor/property_selector.cpp msgid "Select Method" msgstr "" @@ -6408,26 +6004,6 @@ msgstr "" msgid "Reparent" msgstr "" -#: editor/resources_dock.cpp -msgid "Create New Resource" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Open Resource" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Save Resource" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Resource Tools" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Make Local" -msgstr "" - #: editor/run_settings_dialog.cpp msgid "Run Mode:" msgstr "" @@ -6554,14 +6130,6 @@ msgid "Sub-Resources:" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Edit Groups" -msgstr "" - -#: editor/scene_tree_dock.cpp -msgid "Edit Connections" -msgstr "" - -#: editor/scene_tree_dock.cpp msgid "Clear Inheritance" msgstr "" @@ -6744,6 +6312,14 @@ msgid "Invalid base path" msgstr "" #: editor/script_create_dialog.cpp +msgid "Directory of the same name exists" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "File exists, will be reused" +msgstr "" + +#: editor/script_create_dialog.cpp msgid "Invalid extension" msgstr "" @@ -6785,6 +6361,10 @@ msgid "Load existing script file" msgstr "" #: editor/script_create_dialog.cpp +msgid "Language" +msgstr "" + +#: editor/script_create_dialog.cpp msgid "Inherits" msgstr "" @@ -6825,6 +6405,10 @@ msgid "Function:" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Errors" msgstr "" @@ -6905,6 +6489,10 @@ msgid "Type" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Format" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Usage" msgstr "" @@ -6980,12 +6568,28 @@ msgstr "" msgid "Change Probe Extents" msgstr "" +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Library" +msgstr "" + +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Status" +msgstr "" + +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Libraries: " +msgstr "" + +#: modules/gdnative/register_types.cpp +msgid "GDNative" +msgstr "" + #: 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/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "" @@ -7037,10 +6641,6 @@ msgid "GridMap Duplicate Selection" msgstr "Dupliser Utvalg" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Paint" -msgstr "" - -#: modules/gridmap/grid_map_editor_plugin.cpp msgid "Snap View" msgstr "" @@ -7134,12 +6734,8 @@ msgstr "" msgid "Pick Distance:" msgstr "" -#: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Tiles" -msgstr "" - -#: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Areas" +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "Builds" msgstr "" #: modules/visual_script/visual_script.cpp @@ -7337,10 +6933,18 @@ msgid "Return" msgstr "Returner" #: modules/visual_script/visual_script_editor.cpp +msgid "Call" +msgstr "Ring" + +#: modules/visual_script/visual_script_editor.cpp msgid "Get" msgstr "FÃ¥" #: modules/visual_script/visual_script_editor.cpp +msgid "Script already has function '%s'" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Change Input Value" msgstr "Anim Forandre Verdi" @@ -7699,6 +7303,12 @@ msgid "" "order for AnimatedSprite3D to display frames." msgstr "" +#: scene/3d/vehicle_body.cpp +msgid "" +"VehicleWheel serves to provide a wheel system to a VehicleBody. Please use " +"it as a child of a VehicleBody." +msgstr "" + #: scene/gui/color_picker.cpp msgid "Raw Mode" msgstr "" @@ -7708,15 +7318,15 @@ msgid "Add current color as a preset" msgstr "" #: scene/gui/dialogs.cpp -msgid "Alert!" +msgid "Cancel" msgstr "" #: scene/gui/dialogs.cpp -msgid "Please Confirm..." +msgid "Alert!" msgstr "" -#: scene/gui/input_action.cpp -msgid "Ctrl+" +#: scene/gui/dialogs.cpp +msgid "Please Confirm..." msgstr "" #: scene/gui/popup.cpp @@ -7746,3 +7356,19 @@ 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 +msgid "Error initializing FreeType." +msgstr "" + +#: scene/resources/dynamic_font.cpp +msgid "Unknown font format." +msgstr "" + +#: scene/resources/dynamic_font.cpp +msgid "Error loading font." +msgstr "" + +#: scene/resources/dynamic_font.cpp +msgid "Invalid font size." +msgstr "" diff --git a/editor/translations/nl.po b/editor/translations/nl.po index 0b8a154735..5a5665675b 100644 --- a/editor/translations/nl.po +++ b/editor/translations/nl.po @@ -2,20 +2,21 @@ # Copyright (C) 2016-2017 Juan Linietsky, Ariel Manzur and the Godot community # This file is distributed under the same license as the Godot source code. # -# Aram Nap <xyphex.aram@gmail.com>, 2017 +# Aram Nap <xyphex.aram@gmail.com>, 2017. +# Senno Kaasjager <senno.kaasjager@gmail.com>, 2017. # msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2017-04-13 18:15+0000\n" -"Last-Translator: Aram Nap <xyphex.aram@gmail.com>\n" +"PO-Revision-Date: 2017-09-19 22:45+0000\n" +"Last-Translator: Senno Kaasjager <senno.kaasjager@gmail.com>\n" "Language-Team: Dutch <https://hosted.weblate.org/projects/godot-engine/godot/" "nl/>\n" "Language: nl\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.14-dev\n" +"X-Generator: Weblate 2.17-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -153,7 +154,7 @@ msgstr "Lineair" #: editor/animation_editor.cpp editor/plugins/theme_editor_plugin.cpp msgid "Constant" -msgstr "Constant" +msgstr "Constante" #: editor/animation_editor.cpp msgid "In" @@ -192,10 +193,9 @@ msgid "Create %d NEW tracks and insert keys?" msgstr "Maak %d NIEUWE tracks aan en keys invoeren?" #: editor/animation_editor.cpp editor/create_dialog.cpp -#: editor/editor_audio_buses.cpp +#: editor/editor_audio_buses.cpp editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp #: editor/plugins/mesh_instance_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp editor/project_manager.cpp #: editor/script_create_dialog.cpp msgid "Create" @@ -358,277 +358,13 @@ msgstr "Wijzig Array Waarde Type" msgid "Change Array Value" msgstr "Wijzig Array Waarde" -#: editor/asset_library_editor_plugin.cpp -msgid "Free" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp -msgid "Version:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Contents:" -msgstr "Constanten:" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "View Files" -msgstr "Bestand:" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_help.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp -msgid "Description:" -msgstr "Omschrijving:" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -#: editor/project_manager.cpp -msgid "Install" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp -#: editor/connections_dialog.cpp editor/export_template_manager.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -#: editor/project_settings_editor.cpp editor/property_editor.cpp -#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Close" -msgstr "Sluiten" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve hostname:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Connection error, please try again." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Can't connect." -msgstr "Verbind.." - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Can't connect to host:" -msgstr "Verbind Aan Node:" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response from host:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Request failed, return code:" -msgstr "Opgevraagde bestandsformaat onbekend:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Req. Failed." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Request failed, too many redirects" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Redirect Loop." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Bad download hash, assuming file has been tampered with." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Expected:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Got:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed sha256 hash check" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Asset Download Error:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -msgid "Success!" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Fetching:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Resolving.." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Connecting.." -msgstr "Verbind.." - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Requesting.." -msgstr "Testen" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Error making request" -msgstr "Error bij het opslaan van resource!" - -#: editor/asset_library_editor_plugin.cpp -msgid "Idle" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Retry" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Download Error" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Download for this asset is already in progress!" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "first" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "prev" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "next" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "last" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "All" -msgstr "Alle" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/property_selector.cpp editor/quick_open.cpp -#: editor/settings_config_dialog.cpp -msgid "Search:" -msgstr "Zoeken:" - -#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Search" -msgstr "Zoeken" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/project_manager.cpp -msgid "Import" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Plugins" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Sort:" -msgstr "Sorteren:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Reverse" -msgstr "Omkeren" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Category:" -msgstr "Categorie:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Site:" -msgstr "Site:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "Ondersteuning.." - -#: editor/asset_library_editor_plugin.cpp -msgid "Official" -msgstr "Officieel" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -msgid "Community" -msgstr "Gemeenschap" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Testing" -msgstr "Testen" - -#: editor/asset_library_editor_plugin.cpp -msgid "Assets ZIP File" -msgstr "Assets ZIP Bestand" - -#: editor/call_dialog.cpp -msgid "Method List For '%s':" -msgstr "Methode Lijst Voor '%s':" - -#: editor/call_dialog.cpp modules/visual_script/visual_script_editor.cpp -msgid "Call" -msgstr "Aanroep" - -#: editor/call_dialog.cpp -msgid "Method List:" -msgstr "Methode Lijst:" - -#: editor/call_dialog.cpp -msgid "Arguments:" -msgstr "Argumenten:" - -#: editor/call_dialog.cpp -msgid "Return:" -msgstr "Teruggave:" - #: editor/code_editor.cpp msgid "Go to Line" msgstr "Ga naar Regel" #: editor/code_editor.cpp msgid "Line Number:" -msgstr "Regel Nummer:" +msgstr "Regelnummer:" #: editor/code_editor.cpp msgid "No Matches" @@ -659,6 +395,14 @@ msgstr "Hele Woorden" msgid "Selection Only" msgstr "Alleen Selectie" +#: editor/code_editor.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp +msgid "Search" +msgstr "Zoeken" + #: editor/code_editor.cpp editor/editor_help.cpp msgid "Find" msgstr "Zoeken" @@ -691,11 +435,11 @@ msgstr "Vragen Bij Vervangen" msgid "Skip" msgstr "Overslaan" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom In" msgstr "Inzoomen" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom Out" msgstr "Uitzoomen" @@ -764,6 +508,20 @@ msgstr "Uitgesteld" msgid "Oneshot" msgstr "Eénschots" +#: editor/connections_dialog.cpp editor/dependency_editor.cpp +#: editor/export_template_manager.cpp +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Close" +msgstr "Sluiten" + #: editor/connections_dialog.cpp msgid "Connect" msgstr "Verbinden" @@ -790,7 +548,7 @@ msgstr "Verbind.." msgid "Disconnect" msgstr "Losmaken" -#: editor/connections_dialog.cpp editor/node_dock.cpp +#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" msgstr "Signalen" @@ -807,12 +565,25 @@ msgstr "Favorieten:" msgid "Recent:" msgstr "Recente:" +#: editor/create_dialog.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp +#: editor/quick_open.cpp editor/settings_config_dialog.cpp +msgid "Search:" +msgstr "Zoeken:" + #: editor/create_dialog.cpp editor/editor_help.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp #: editor/quick_open.cpp msgid "Matches:" msgstr "Matches:" +#: editor/create_dialog.cpp editor/editor_help.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp +#: editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "Omschrijving:" + #: editor/dependency_editor.cpp msgid "Search Replacement For:" msgstr "Zoek Vervanging Voor:" @@ -872,6 +643,12 @@ msgid "Owners Of:" msgstr "Eigenaren Van:" #: editor/dependency_editor.cpp +msgid "Remove selected files from the project? (no undo)" +msgstr "" +"Verwijder geselecteerde bestanden van het project? (Kan niet ongedaan " +"worden.)" + +#: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" @@ -882,10 +659,8 @@ msgstr "" "Toch verwijderen? (Kan niet ongedaan worden.)" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (no undo)" +msgid "Cannot remove:\n" msgstr "" -"Verwijder geselecteerde bestanden van het project? (Kan niet ongedaan " -"worden.)" #: editor/dependency_editor.cpp msgid "Error loading:" @@ -951,10 +726,6 @@ msgid "Godot Engine contributors" msgstr "" #: editor/editor_about.cpp -msgid "Authors" -msgstr "" - -#: editor/editor_about.cpp msgid "Project Founders" msgstr "" @@ -971,6 +742,38 @@ msgid "Developers" msgstr "" #: editor/editor_about.cpp +msgid "Authors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Platinum Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Mini Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Silver Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Bronze Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Donors" +msgstr "" + +#: editor/editor_about.cpp msgid "License" msgstr "" @@ -1014,6 +817,16 @@ msgid "Package Installed Successfully!" msgstr "" #: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Success!" +msgstr "Succes!" + +#: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp +msgid "Install" +msgstr "Installeer" + +#: editor/editor_asset_installer.cpp msgid "Package Installer" msgstr "" @@ -1066,10 +879,6 @@ msgid "Audio Bus, Drag and Drop to rearrange." msgstr "" #: editor/editor_audio_buses.cpp -msgid "Bus options" -msgstr "" - -#: editor/editor_audio_buses.cpp msgid "Solo" msgstr "" @@ -1081,6 +890,10 @@ msgstr "" msgid "Bypass" msgstr "" +#: editor/editor_audio_buses.cpp +msgid "Bus options" +msgstr "" + #: editor/editor_audio_buses.cpp editor/plugins/tile_map_editor_plugin.cpp #: editor/scene_tree_dock.cpp msgid "Duplicate" @@ -1088,6 +901,11 @@ msgstr "" #: editor/editor_audio_buses.cpp #, fuzzy +msgid "Reset Volume" +msgstr "Reset Zoom" + +#: editor/editor_audio_buses.cpp +#, fuzzy msgid "Delete Effect" msgstr "Geselecteerde Verwijderen" @@ -1112,6 +930,11 @@ msgstr "Dupliceer Selectie" #: editor/editor_audio_buses.cpp #, fuzzy +msgid "Reset Bus Volume" +msgstr "Reset Zoom" + +#: editor/editor_audio_buses.cpp +#, fuzzy msgid "Move Audio Bus" msgstr "Open Audio Bus Layout" @@ -1125,7 +948,7 @@ msgstr "Locatie voor Nieuwe Layout.." #: editor/editor_audio_buses.cpp msgid "Open Audio Bus Layout" -msgstr "Open Audio Bus Layout" +msgstr "Open Audio Bus Lay-out" #: editor/editor_audio_buses.cpp msgid "There is no 'res://default_bus_layout.tres' file." @@ -1144,7 +967,8 @@ msgstr "Bus Toevoegen" msgid "Create a new Bus Layout." msgstr "Sla Audio Bus Layout Op Als.." -#: editor/editor_audio_buses.cpp editor/script_create_dialog.cpp +#: editor/editor_audio_buses.cpp editor/property_editor.cpp +#: editor/script_create_dialog.cpp msgid "Load" msgstr "Laden" @@ -1239,7 +1063,7 @@ msgid "Rearrange Autoloads" msgstr "Herschik Autoloads" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp scene/gui/file_dialog.cpp +#: scene/gui/file_dialog.cpp msgid "Path:" msgstr "Pad:" @@ -1247,9 +1071,7 @@ msgstr "Pad:" msgid "Node Name:" msgstr "Node Naam:" -#: editor/editor_autoload_settings.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp editor/project_manager.cpp +#: editor/editor_autoload_settings.cpp editor/project_manager.cpp msgid "Name" msgstr "Naam" @@ -1282,18 +1104,19 @@ msgid "Choose a Directory" msgstr "Kies een Map" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Create Folder" msgstr "Map Maken" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: editor/editor_plugin_settings.cpp editor/plugins/theme_editor_plugin.cpp -#: editor/project_export.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp +#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp +#: scene/gui/file_dialog.cpp msgid "Name:" msgstr "Naam:" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Could not create folder." msgstr "Map kon niet gemaakt worden." @@ -1315,30 +1138,6 @@ msgstr "Inpakken" msgid "Template file not found:\n" msgstr "Template bestand niet gevonden:\n" -#: editor/editor_export.cpp -msgid "Added:" -msgstr "Toegevoegd:" - -#: editor/editor_export.cpp -msgid "Removed:" -msgstr "Verwijderd:" - -#: editor/editor_export.cpp -msgid "Error saving atlas:" -msgstr "Error bij het opslaan van atlas:" - -#: editor/editor_export.cpp -msgid "Could not save atlas subtexture:" -msgstr "Kon atlas subtexture niet opslaan:" - -#: editor/editor_export.cpp -msgid "Exporting for %s" -msgstr "Aan het exporteren voor %s" - -#: editor/editor_export.cpp -msgid "Setting Up.." -msgstr "Aan Het Opzetten.." - #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "Bestand Bestaat, Overschrijven?" @@ -1423,6 +1222,11 @@ msgstr "Verplaats Favoriet Naar Boven" msgid "Move Favorite Down" msgstr "Verplaats Favoriet Naar Beneden" +#: editor/editor_file_dialog.cpp +#, fuzzy +msgid "Go to parent folder" +msgstr "Map kon niet gemaakt worden." + #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Directories & Files:" msgstr "Mappen & Bestanden:" @@ -1467,6 +1271,10 @@ msgstr "Klasse Lijst:" msgid "Search Classes" msgstr "Zoek Klasses" +#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +msgid "Top" +msgstr "" + #: editor/editor_help.cpp editor/property_editor.cpp msgid "Class:" msgstr "Klasse:" @@ -1483,15 +1291,30 @@ msgstr "Geërfd door:" msgid "Brief Description:" msgstr "Korte Beschrijving:" +#: editor/editor_help.cpp +#, fuzzy +msgid "Members" +msgstr "Leden:" + #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "Leden:" #: editor/editor_help.cpp +#, fuzzy +msgid "Public Methods" +msgstr "Publieke Methodes:" + +#: editor/editor_help.cpp msgid "Public Methods:" msgstr "Publieke Methodes:" #: editor/editor_help.cpp +#, fuzzy +msgid "GUI Theme Items" +msgstr "GUI Thema Items:" + +#: editor/editor_help.cpp msgid "GUI Theme Items:" msgstr "GUI Thema Items:" @@ -1501,6 +1324,11 @@ msgstr "Signalen:" #: editor/editor_help.cpp #, fuzzy +msgid "Enumerations" +msgstr "Functies:" + +#: editor/editor_help.cpp +#, fuzzy msgid "Enumerations:" msgstr "Functies:" @@ -1509,18 +1337,49 @@ msgid "enum " msgstr "" #: editor/editor_help.cpp +#, fuzzy +msgid "Constants" +msgstr "Constanten:" + +#: editor/editor_help.cpp msgid "Constants:" msgstr "Constanten:" #: editor/editor_help.cpp +#, fuzzy +msgid "Description" +msgstr "Omschrijving:" + +#: editor/editor_help.cpp +msgid "Properties" +msgstr "" + +#: editor/editor_help.cpp msgid "Property Description:" msgstr "Eigenschap Beschrijving:" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this property. Please help us by " +"[color=$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp +#, fuzzy +msgid "Methods" +msgstr "Methode Lijst:" + +#: editor/editor_help.cpp msgid "Method Description:" msgstr "Methode Beschrijving:" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this method. Please help us by [color=" +"$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp msgid "Search Text" msgstr "Zoek Tekst" @@ -1530,24 +1389,21 @@ msgid "Output:" msgstr " Uitvoer:" #: editor/editor_log.cpp editor/plugins/animation_tree_editor_plugin.cpp -#: editor/plugins/rich_text_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_editor_debugger.cpp scene/gui/line_edit.cpp -#: scene/gui/text_edit.cpp +#: editor/property_editor.cpp editor/script_editor_debugger.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Clear" msgstr "Leegmaken" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Error saving resource!" msgstr "Error bij het opslaan van resource!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Save Resource As.." msgstr "Resource Opslaan Als.." -#: editor/editor_node.cpp editor/export_template_manager.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp #, fuzzy msgid "I see.." msgstr "Ik snap het.." @@ -1565,6 +1421,29 @@ msgid "Error while saving." msgstr "Error bij het opslaan." #: editor/editor_node.cpp +#, fuzzy +msgid "Can't open '%s'." +msgstr "Kan niet verbinden." + +#: editor/editor_node.cpp +#, fuzzy +msgid "Error while parsing '%s'." +msgstr "Error bij het opslaan." + +#: editor/editor_node.cpp +msgid "Unexpected end of file '%s'." +msgstr "" + +#: editor/editor_node.cpp +msgid "Missing '%s' or its dependencies." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Error while loading '%s'." +msgstr "Error bij het opslaan." + +#: editor/editor_node.cpp msgid "Saving Scene" msgstr "Scene Aan Het Opslaan" @@ -1617,13 +1496,40 @@ msgstr "" #: editor/editor_node.cpp msgid "Layout name not found!" -msgstr "" +msgstr "Lay-out naam niet gevonden!" #: editor/editor_node.cpp msgid "Restored default layout to base settings." msgstr "" #: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was imported, so it's not editable.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was instanced or inherited.\n" +"Changes to it will not be kept when saving the current scene." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource was imported, so it's not editable. Change its settings in the " +"import panel and then re-import." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This scene was imported, so changes to it will not be kept.\n" +"Instancing it or inheriting will allow making changes to it.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp msgid "Copy Params" msgstr "" @@ -1787,6 +1693,12 @@ msgid "Save changes the following scene(s) before opening Project Manager?" msgstr "" #: editor/editor_node.cpp +msgid "" +"This option is deprecated. Situations where refresh must be forced are now " +"considered a bug. Please report." +msgstr "" + +#: editor/editor_node.cpp msgid "Pick a Main Scene" msgstr "" @@ -1813,7 +1725,7 @@ msgid "" msgstr "" #: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Ugh" msgstr "" @@ -1824,11 +1736,11 @@ msgid "" msgstr "" #: editor/editor_node.cpp -msgid "Error loading scene." +msgid "Scene '%s' has broken dependencies:" msgstr "" #: editor/editor_node.cpp -msgid "Scene '%s' has broken dependencies:" +msgid "Clear Recent Scenes" msgstr "" #: editor/editor_node.cpp @@ -1864,7 +1776,7 @@ msgstr "" msgid "Toggle distraction-free mode." msgstr "" -#: editor/editor_node.cpp editor/io_plugins/editor_scene_import_plugin.cpp +#: editor/editor_node.cpp msgid "Scene" msgstr "" @@ -2084,6 +1996,10 @@ msgstr "" msgid "Issue Tracker" msgstr "" +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +msgid "Community" +msgstr "Gemeenschap" + #: editor/editor_node.cpp msgid "About" msgstr "" @@ -2092,7 +2008,7 @@ msgstr "" msgid "Play the project." msgstr "" -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Play" msgstr "" @@ -2108,7 +2024,7 @@ msgstr "" msgid "Stop the scene." msgstr "" -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Stop" msgstr "" @@ -2181,6 +2097,15 @@ msgid "Object properties." msgstr "" #: editor/editor_node.cpp +msgid "Changes may be lost!" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Import" +msgstr "Importeren" + +#: editor/editor_node.cpp msgid "FileSystem" msgstr "" @@ -2196,14 +2121,6 @@ msgstr "" msgid "Don't Save" msgstr "" -#: editor/editor_node.cpp editor/editor_reimport_dialog.cpp -msgid "Re-Import" -msgstr "" - -#: editor/editor_node.cpp editor/editor_plugin_settings.cpp -msgid "Update" -msgstr "" - #: editor/editor_node.cpp msgid "Import Templates From ZIP File" msgstr "" @@ -2269,11 +2186,28 @@ msgstr "Afhankelijkheden Editor" msgid "Open the previous Editor" msgstr "" +#: editor/editor_plugin.cpp +msgid "Creating Mesh Previews" +msgstr "" + +#: editor/editor_plugin.cpp +msgid "Thumbnail.." +msgstr "" + #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" msgstr "" #: editor/editor_plugin_settings.cpp +msgid "Update" +msgstr "" + +#: editor/editor_plugin_settings.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Version:" +msgstr "Versie:" + +#: editor/editor_plugin_settings.cpp msgid "Author:" msgstr "" @@ -2325,26 +2259,6 @@ msgstr "" msgid "Frame #:" msgstr "" -#: editor/editor_reimport_dialog.cpp -msgid "Please wait for scan to complete." -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Current scene must be saved to re-import." -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Save & Re-Import" -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Importing" -msgstr "Aan Het Herimporteren" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Import Changed Resources" -msgstr "" - #: editor/editor_run_native.cpp msgid "Select device from the list" msgstr "" @@ -2455,10 +2369,6 @@ msgid "Importing:" msgstr "Aan Het Importeren:" #: editor/export_template_manager.cpp -msgid "Loading Export Templates" -msgstr "" - -#: editor/export_template_manager.cpp msgid "Current Version:" msgstr "" @@ -2493,9 +2403,17 @@ msgid "Cannot navigate to '" msgstr "" #: editor/filesystem_dock.cpp +msgid "View items as a grid of thumbnails" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "View items as a list" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "" "\n" -"Status: Needs Re-Import" +"Status: Import of file failed. Please fix file and reimport manually." msgstr "" #: editor/filesystem_dock.cpp @@ -2506,45 +2424,51 @@ msgid "" msgstr "Resource" #: editor/filesystem_dock.cpp -msgid "Same source and destination files, doing nothing." +msgid "Cannot move/rename resources root." msgstr "" #: editor/filesystem_dock.cpp -msgid "Target file exists, can't overwrite. Delete first." +msgid "Cannot move a folder into itself.\n" msgstr "" #: editor/filesystem_dock.cpp -msgid "Same source and destination paths, doing nothing." -msgstr "" +#, fuzzy +msgid "Error moving:\n" +msgstr "Error bij het laden van:" + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Unable to update dependencies:\n" +msgstr "Scene faalde om te laden door ontbrekende afhankelijkheden:" #: editor/filesystem_dock.cpp -msgid "Can't move directories to within themselves." +msgid "No name provided" msgstr "" #: editor/filesystem_dock.cpp -msgid "Can't rename deps for:\n" +msgid "Provided name contains invalid characters" msgstr "" #: editor/filesystem_dock.cpp -#, fuzzy -msgid "Error moving file:\n" -msgstr "Error bij het opslaan van TileSet!" +msgid "No name provided." +msgstr "" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Error moving dir:\n" -msgstr "Error bij het laden van:" +msgid "Name contains invalid characters." +msgstr "Geldige karakters:" #: editor/filesystem_dock.cpp -msgid "Can't operate on '..'" +msgid "A file or folder with this name already exists." msgstr "" #: editor/filesystem_dock.cpp -msgid "Pick New Name and Location For:" -msgstr "" +#, fuzzy +msgid "Renaming file:" +msgstr "Hernoem Variabele" #: editor/filesystem_dock.cpp -msgid "No files selected!" +msgid "Renaming folder:" msgstr "" #: editor/filesystem_dock.cpp @@ -2556,39 +2480,36 @@ msgid "Collapse all" msgstr "" #: editor/filesystem_dock.cpp -msgid "Show In File Manager" -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Instance" +msgid "Copy Path" msgstr "" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." +msgid "Rename.." msgstr "" #: editor/filesystem_dock.cpp -msgid "View Owners.." +msgid "Move To.." msgstr "" #: editor/filesystem_dock.cpp -msgid "Copy Path" -msgstr "" +#, fuzzy +msgid "New Folder.." +msgstr "Map Maken" #: editor/filesystem_dock.cpp -msgid "Rename or Move.." +msgid "Show In File Manager" msgstr "" #: editor/filesystem_dock.cpp -msgid "Move To.." +msgid "Instance" msgstr "" #: editor/filesystem_dock.cpp -msgid "Info" +msgid "Edit Dependencies.." msgstr "" #: editor/filesystem_dock.cpp -msgid "Re-Import.." +msgid "View Owners.." msgstr "" #: editor/filesystem_dock.cpp @@ -2621,6 +2542,11 @@ msgstr "" msgid "Move" msgstr "" +#: editor/filesystem_dock.cpp editor/plugins/animation_tree_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Rename" +msgstr "" + #: editor/groups_editor.cpp msgid "Add to Group" msgstr "" @@ -2635,6 +2561,10 @@ msgid "Import as Single Scene" msgstr "Scene aan het Updaten" #: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials" msgstr "" @@ -2647,6 +2577,18 @@ msgid "Import with Separate Objects+Materials" msgstr "" #: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Materials+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Materials+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes" msgstr "" @@ -2655,38 +2597,31 @@ msgid "Import as Multiple Scenes+Materials" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Import Scene" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Importing Scene.." msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Running Custom Script.." msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Couldn't load post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Invalid/broken script for post-import (check console):" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Error running post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Saving.." msgstr "" @@ -2717,579 +2652,54 @@ msgstr "" msgid "Reimport" msgstr "Aan Het Herimporteren" -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "No bit masks to import!" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path is empty." -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must be a complete resource path." -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must exist." -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Save path is empty!" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Import BitMasks" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s):" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Target Path:" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Accept" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Bit Mask" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No source font file!" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No target font resource!" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "" -"Invalid file extension.\n" -"Please use .font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Can't load/process source font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Couldn't save font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font Size:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Dest Resource:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "The quick brown fox jumps over the lazy dog." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Test:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Options:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Font Import" -msgstr "" - -#: 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 "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Failed opening as BMFont file." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error initializing FreeType." -msgstr "Error bij het initialiseren van FreeType." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Unknown font format." -msgstr "Onbekende lettertype formaat." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error loading font." -msgstr "Error bij het laden van lettertype." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Invalid font size." -msgstr "Ongeldige lettertype grootte." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Invalid font custom source." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/plugins/theme_editor_plugin.cpp -msgid "Font" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "No meshes to import!" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Single Mesh Import" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Source Mesh(es):" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Mesh" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Surface %d" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "No samples to import!" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Import Audio Samples" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Source Sample(s):" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Audio Sample" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "New Clip" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Animation Options" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Flags" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Bake FPS:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Optimizer" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Linear Error" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angular Error" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angle" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Clips" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Start(s)" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "End(s)" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Loop" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Filters" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source path is empty." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't load post-import script." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Invalid/broken script for post-import." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Error importing scene." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import 3D Scene" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source Scene:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Same as Target Scene" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Shared" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Target Texture Folder:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Post-Process Script:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Custom Root Node Type:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Auto" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Root Node Name:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "The Following Files are Missing:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Anyway" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp scene/gui/dialogs.cpp -msgid "Cancel" -msgstr "Annuleren" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import & Open" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Edited scene has not been saved, open imported scene anyway?" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Image:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Can't import a file over itself:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't localize path: %s (already local)" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "3D Scene Animation" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Uncompressed" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossless (PNG)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossy (WebP)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress (VRAM)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Format" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Compression Quality (WebP):" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Options" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Please specify some files!" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "At least one file needed for Atlas." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Error importing:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Only one file is required for large texture." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Max Texture Size:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for Atlas (2D)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cell Size:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Large Texture" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Textures (2D)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture" +#: editor/multi_node_edit.cpp +msgid "MultiNode Set" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Base Atlas Texture" +#: editor/node_dock.cpp +msgid "Groups" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s)" +#: editor/node_dock.cpp +msgid "Select a Node to edit Signals and Groups." msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 2D" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create Poly" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 3D" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures" +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Insert Point" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "2D Texture" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly (Remove Point)" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "3D Texture" +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Remove Poly And Point" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Atlas Texture" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create a new polygon from scratch." msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp +#: editor/plugins/abstract_polygon_2d_editor.cpp msgid "" -"NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files to " -"the project." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Crop empty space." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Texture" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Load Source Image" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Slicing" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Inserting" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Saving" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save large texture:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Build Atlas For:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Loading Image:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't load image:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Converting Images" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cropping Images" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Blitting Images" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save atlas image:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save converted texture:" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid source!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid translation source!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Column" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/script_create_dialog.cpp -msgid "Language" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No items to import!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No target path!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translations" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Couldn't import!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translation" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Source CSV:" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Ignore First Row" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Compress" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Add to Project (project.godot)" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Languages:" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Translation" -msgstr "" - -#: editor/multi_node_edit.cpp -msgid "MultiNode Set" -msgstr "" - -#: editor/node_dock.cpp -msgid "Groups" -msgstr "" - -#: editor/node_dock.cpp -msgid "Select a Node to edit Signals and Groups." +"Edit existing polygon:\n" +"LMB: Move Point.\n" +"Ctrl+LMB: Split Segment.\n" +"RMB: Erase Point." msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp @@ -3446,7 +2856,6 @@ msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp #: editor/script_create_dialog.cpp msgid "Error!" @@ -3557,10 +2966,6 @@ msgid "Delete Input" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Rename" -msgstr "" - -#: editor/plugins/animation_tree_editor_plugin.cpp msgid "Animation tree is valid." msgstr "" @@ -3616,64 +3021,182 @@ msgstr "" msgid "Filters.." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing %d Triangles:" -msgstr "" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Free" +msgstr "Vrij" -#: editor/plugins/baked_light_baker.cpp -msgid "Triangle #" -msgstr "" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Contents:" +msgstr "Inhoud:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "View Files" +msgstr "Bekijk Bestanden" -#: editor/plugins/baked_light_baker.cpp -msgid "Light Baker Setup:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve hostname:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing Geometry" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Fixing Lights" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connection error, please try again." +msgstr "Verbindingsfout, probeer het nog eens." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't connect." +msgstr "Kan niet verbinden." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't connect to host:" +msgstr "Kan niet verbinden met host:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response from host:" +msgstr "Geen antwoord van host:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response." +msgstr "Geen antwoord." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, return code:" +msgstr "Aanvraag mislukt, retourcode:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Req. Failed." +msgstr "Aanv. Mislukt." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, too many redirects" +msgstr "Aanvraag mislukt, te veel redirects" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Redirect Loop." +msgstr "Redirectlus." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed:" +msgstr "Mislukt:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Bad download hash, assuming file has been tampered with." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Making BVH" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Expected:" +msgstr "Verwacht:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Got:" +msgstr "Gekregen:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed sha256 hash check" +msgstr "Sha256 hash controle mislukt" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Asset Download Error:" +msgstr "Asset download fout:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Fetching:" +msgstr "Ophalen:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Resolving.." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Light Octree" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connecting.." +msgstr "Verbinden.." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Requesting.." +msgstr "Opvragen..." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Error making request" +msgstr "Fout bij opvragen" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Idle" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Octree Texture" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Retry" +msgstr "Probeer opnieuw" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download Error" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Transfer to Lightmaps:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download for this asset is already in progress!" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Allocating Texture #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "first" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Baking Triangle #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "prev" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Post-Processing Texture #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "next" msgstr "" -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Bake!" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "last" msgstr "" -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Reset the lightmap octree baking process (start over)." +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "All" +msgstr "Alle" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Plugins" msgstr "" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Sort:" +msgstr "Sorteren:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Reverse" +msgstr "Omkeren" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Category:" +msgstr "Categorie:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Site:" +msgstr "Site:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Support.." +msgstr "Ondersteuning.." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Official" +msgstr "Officieel" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Testing" +msgstr "Testen" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Assets ZIP File" +msgstr "Assets ZIP Bestand" + #: editor/plugins/camera_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp msgid "Preview" msgstr "" @@ -3716,11 +3239,15 @@ msgid "Edit CanvasItem" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Change Anchors" +msgid "Anchors only" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Change Anchors and Margins" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom (%):" +msgid "Change Anchors" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3771,59 +3298,73 @@ msgid "Pan Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Lock the selected object in place (can't be moved)." +#, fuzzy +msgid "Toggles snapping" +msgstr "Breekpunt Aan- of Uitschakelen" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Unlock the selected object (can be moved)." +msgid "Snapping options" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Makes sure the object's children are not selectable." +msgid "Snap to grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Restores the object's children's ability to be selected." +msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp -#: editor/project_settings_editor.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Edit" -msgstr "Bewerken" +msgid "Configure Snap..." +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +msgid "Snap Relative" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +msgid "Use Pixel Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Rotation Snap" +msgid "Smart snapping" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap Relative" +msgid "Snap to parent" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." +msgid "Snap to node anchor" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Pixel Snap" +msgid "Snap to node sides" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to other nodes" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Lock the selected object in place (can't be moved)." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Unlock the selected object (can be moved)." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Makes sure the object's children are not selectable." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Skeleton.." +msgid "Restores the object's children's ability to be selected." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3852,11 +3393,16 @@ msgid "View" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Reset" +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show helpers" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Set.." +msgid "Show rulers" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3868,7 +3414,7 @@ msgid "Frame Selection" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Anchor" +msgid "Layout" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3892,11 +3438,20 @@ msgid "Clear Pose" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Set a Value" +msgid "Drag pivot from mouse position" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Set pivot at mouse position" +msgstr "Verwijder Signaal" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Multiply grid step by 2" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap (Pixels):" +msgid "Divide grid step by 2" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3907,23 +3462,28 @@ msgstr "" msgid "Adding %s..." msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Create Node" msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Error instancing scene from %s" msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "OK :(" msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "No parent to instance a child at." msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "This operation requires a single selected node." msgstr "" @@ -3937,45 +3497,6 @@ msgid "" "Drag & drop + Alt : Change node type" msgstr "" -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Create Poly" -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly" -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly (Remove Point)" -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Create a new polygon from scratch." -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -msgid "" -"Edit existing polygon:\n" -"LMB: Move Point.\n" -"Ctrl+LMB: Split Segment.\n" -"RMB: Erase Point." -msgstr "" - #: editor/plugins/collision_polygon_editor_plugin.cpp msgid "Create Poly3D" msgstr "" @@ -3985,14 +3506,6 @@ msgid "Set Handle" msgstr "" #: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Creating Mesh Library" -msgstr "" - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Thumbnail.." -msgstr "" - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Remove item %d?" msgstr "" @@ -4015,6 +3528,27 @@ msgid "Update from Scene" msgstr "" #: editor/plugins/curve_editor_plugin.cpp +msgid "Flat0" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Flat1" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +#, fuzzy +msgid "Ease in" +msgstr "Schaal Selectie" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Ease out" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Smoothstep" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp msgid "Modify Curve Point" msgstr "" @@ -4094,22 +3628,18 @@ msgid "Create Occluder Polygon" msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Edit existing polygon:" msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "LMB: Move Point." msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Ctrl+LMB: Split Segment." msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "RMB: Erase Point." msgstr "" @@ -4211,6 +3741,10 @@ msgid "Create Outline" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Body" msgstr "" @@ -4338,12 +3872,73 @@ msgstr "" msgid "Populate" msgstr "" -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Create Navigation Polygon" +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Bake!" +msgstr "" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Bake the navigation mesh.\n" +msgstr "" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Clear the navigation mesh." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Setting up Configuration..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Calculating grid size..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating heightfield..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Marking walkable triangles..." +msgstr "Lokale wijziging aan het opslaan.." + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Constructing compact heightfield..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Eroding walkable area..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Partioning..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating contours..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating polymesh..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Converting to native navigation mesh..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Navigation Mesh Generator Setup:" +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Parsing Geometry..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Done!" msgstr "" #: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Remove Poly And Point" +msgid "Create Navigation Polygon" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4517,16 +4112,19 @@ msgid "Curve Point #" msgstr "" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Point Pos" -msgstr "" +#, fuzzy +msgid "Set Curve Point Position" +msgstr "Verwijder Signaal" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve In Pos" -msgstr "" +#, fuzzy +msgid "Set Curve In Position" +msgstr "Verwijder Signaal" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Out Pos" -msgstr "" +#, fuzzy +msgid "Set Curve Out Position" +msgstr "Verwijder Signaal" #: editor/plugins/path_editor_plugin.cpp msgid "Split Path" @@ -4586,6 +4184,14 @@ msgid "Scale Polygon" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit" +msgstr "Bewerken" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon->UV" msgstr "" @@ -4640,63 +4246,10 @@ msgstr "" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "Plakken" -#: editor/plugins/rich_text_editor_plugin.cpp -msgid "Parse BBCode" -msgstr "" - -#: editor/plugins/sample_editor_plugin.cpp -msgid "Length:" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Open Sample File(s)" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "ERROR: Couldn't load sample!" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Add Sample" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Rename Sample" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Delete Sample" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "16 Bits" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "8 Bits" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Stereo" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Mono" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/script_editor_debugger.cpp -msgid "Format" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Pitch" -msgstr "" - #: editor/plugins/script_editor_plugin.cpp msgid "Clear Recent Files" msgstr "" @@ -4787,6 +4340,10 @@ msgstr "" msgid "Close All" msgstr "" +#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp +msgid "Run" +msgstr "" + #: editor/plugins/script_editor_plugin.cpp #, fuzzy msgid "Toggle Scripts Panel" @@ -4830,18 +4387,6 @@ msgid "Debug with external editor" msgstr "Afhankelijkheden Editor" #: editor/plugins/script_editor_plugin.cpp -msgid "Window" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Left" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Right" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp msgid "Open Godot online documentation" msgstr "" @@ -4925,7 +4470,7 @@ msgstr "Knippen" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Copy" msgstr "Kopiëren" @@ -5190,10 +4735,6 @@ msgid "View Plane Transform." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Scaling to %s%%." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." msgstr "" @@ -5210,10 +4751,6 @@ msgid "Top View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Top" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "" @@ -5449,6 +4986,10 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Configure Snap.." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Local Coords" msgstr "" @@ -5594,6 +5135,10 @@ msgid "Speed (FPS):" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Loop" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animation Frames" msgstr "" @@ -5606,11 +5151,12 @@ msgid "Insert Empty (After)" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Up" -msgstr "" +#, fuzzy +msgid "Move (Before)" +msgstr "Kopiëer Nodes" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Down" +msgid "Move (After)" msgstr "" #: editor/plugins/style_box_editor_plugin.cpp @@ -5774,6 +5320,10 @@ msgid "Style" msgstr "" #: editor/plugins/theme_editor_plugin.cpp +msgid "Font" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp msgid "Color" msgstr "" @@ -5824,7 +5374,7 @@ msgid "Mirror Y" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Bucket" +msgid "Paint Tile" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp @@ -5891,6 +5441,10 @@ msgid "Delete preset '%s'?" msgstr "Verwijder geselecteerde bestanden?" #: editor/project_export.cpp +msgid "Export templates for this platform are missing/corrupted: " +msgstr "" + +#: editor/project_export.cpp msgid "Presets" msgstr "" @@ -5963,19 +5517,30 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +msgid "Export templates for this platform are missing/corrupted:" +msgstr "" + +#: editor/project_export.cpp msgid "Export With Debug" msgstr "" #: editor/project_manager.cpp -msgid "Invalid project path, the path must exist!" +#, fuzzy +msgid "The path does not exists." +msgstr "Bestand bestaat niet." + +#: editor/project_manager.cpp +msgid "Please choose a 'project.godot' file." msgstr "" #: editor/project_manager.cpp -msgid "Invalid project path, project.godot must not exist." +msgid "" +"Your project will be created in a non empty folder (you might want to create " +"a new folder)." msgstr "" #: editor/project_manager.cpp -msgid "Invalid project path, project.godot must exist." +msgid "Please choose a folder that does not contain a 'project.godot' file." msgstr "" #: editor/project_manager.cpp @@ -5983,10 +5548,26 @@ msgid "Imported Project" msgstr "" #: editor/project_manager.cpp +msgid " " +msgstr "" + +#: editor/project_manager.cpp +msgid "It would be a good idea to name your project." +msgstr "" + +#: editor/project_manager.cpp msgid "Invalid project path (changed anything?)." msgstr "" #: editor/project_manager.cpp +msgid "Couldn't get project.godot in project path." +msgstr "" + +#: editor/project_manager.cpp +msgid "Couldn't edit project.godot in project path." +msgstr "" + +#: editor/project_manager.cpp msgid "Couldn't create project.godot in project path." msgstr "" @@ -5995,15 +5576,20 @@ msgid "The following files failed extraction from package:" msgstr "" #: editor/project_manager.cpp -msgid "Import Existing Project" +#, fuzzy +msgid "Rename Project" +msgstr "Hernoem Functie" + +#: editor/project_manager.cpp +msgid "Couldn't get project.godot in the project path." msgstr "" #: editor/project_manager.cpp -msgid "Project Path (Must Exist):" +msgid "New Game Project" msgstr "" #: editor/project_manager.cpp -msgid "Project Name:" +msgid "Import Existing Project" msgstr "" #: editor/project_manager.cpp @@ -6011,19 +5597,24 @@ msgid "Create New Project" msgstr "" #: editor/project_manager.cpp -msgid "Project Path:" +msgid "Install Project:" msgstr "" #: editor/project_manager.cpp -msgid "Install Project:" +msgid "Project Name:" msgstr "" #: editor/project_manager.cpp -msgid "Browse" +#, fuzzy +msgid "Create folder" +msgstr "Map Maken" + +#: editor/project_manager.cpp +msgid "Project Path:" msgstr "" #: editor/project_manager.cpp -msgid "New Game Project" +msgid "Browse" msgstr "" #: editor/project_manager.cpp @@ -6035,6 +5626,11 @@ msgid "Unnamed Project" msgstr "" #: editor/project_manager.cpp +#, fuzzy +msgid "Can't open project" +msgstr "Verbind.." + +#: editor/project_manager.cpp msgid "Are you sure to open more than one project?" msgstr "" @@ -6070,10 +5666,6 @@ msgid "Project List" msgstr "" #: editor/project_manager.cpp -msgid "Run" -msgstr "" - -#: editor/project_manager.cpp msgid "Scan" msgstr "" @@ -6132,17 +5724,14 @@ msgid "Add Input Action Event" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Meta+" msgstr "Meta+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Shift+" msgstr "Shift+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Alt+" msgstr "Alt+" @@ -6203,7 +5792,7 @@ msgstr "Wijzig" msgid "Joypad Axis Index:" msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Axis" msgstr "As" @@ -6223,31 +5812,31 @@ msgstr "" msgid "Add Event" msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Device" msgstr "Apparaat" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Button" msgstr "Knop" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Left Button." msgstr "Linker Knop." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Right Button." msgstr "Rechter Knop." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Middle Button." msgstr "Middelste Knop." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Up." msgstr "Scrollwiel Omhoog." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Down." msgstr "Scrollwiel Omlaag." @@ -6257,7 +5846,7 @@ msgid "Add Global Property" msgstr "Getter Property Toevoegen" #: editor/project_settings_editor.cpp -msgid "Select an setting item first!" +msgid "Select a setting item first!" msgstr "" #: editor/project_settings_editor.cpp @@ -6275,6 +5864,15 @@ msgid "Delete Item" msgstr "Verwijder" #: editor/project_settings_editor.cpp +#, fuzzy +msgid "Can't contain '/' or ':'" +msgstr "Kan niet verbinden met host:" + +#: editor/project_settings_editor.cpp +msgid "Already existing" +msgstr "" + +#: editor/project_settings_editor.cpp msgid "Error saving settings." msgstr "" @@ -6424,10 +6022,19 @@ msgid "New Script" msgstr "" #: editor/property_editor.cpp +msgid "Make Unique" +msgstr "" + +#: editor/property_editor.cpp msgid "Show in File System" msgstr "" #: editor/property_editor.cpp +#, fuzzy +msgid "Convert To %s" +msgstr "Verbind Aan Node:" + +#: editor/property_editor.cpp msgid "Error loading file: Not a resource!" msgstr "" @@ -6465,6 +6072,10 @@ msgid "Select Property" msgstr "" #: editor/property_selector.cpp +msgid "Select Virtual Method" +msgstr "" + +#: editor/property_selector.cpp msgid "Select Method" msgstr "" @@ -6492,26 +6103,6 @@ msgstr "" msgid "Reparent" msgstr "" -#: editor/resources_dock.cpp -msgid "Create New Resource" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Open Resource" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Save Resource" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Resource Tools" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Make Local" -msgstr "" - #: editor/run_settings_dialog.cpp msgid "Run Mode:" msgstr "" @@ -6639,14 +6230,6 @@ msgid "Sub-Resources:" msgstr "Resource" #: editor/scene_tree_dock.cpp -msgid "Edit Groups" -msgstr "" - -#: editor/scene_tree_dock.cpp -msgid "Edit Connections" -msgstr "" - -#: editor/scene_tree_dock.cpp msgid "Clear Inheritance" msgstr "" @@ -6832,6 +6415,15 @@ msgid "Invalid base path" msgstr "" #: editor/script_create_dialog.cpp +msgid "Directory of the same name exists" +msgstr "" + +#: editor/script_create_dialog.cpp +#, fuzzy +msgid "File exists, will be reused" +msgstr "Bestand Bestaat, Overschrijven?" + +#: editor/script_create_dialog.cpp msgid "Invalid extension" msgstr "" @@ -6875,6 +6467,10 @@ msgid "Load existing script file" msgstr "" #: editor/script_create_dialog.cpp +msgid "Language" +msgstr "" + +#: editor/script_create_dialog.cpp #, fuzzy msgid "Inherits" msgstr "Erft:" @@ -6918,6 +6514,10 @@ msgid "Function:" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Errors" msgstr "" @@ -6998,6 +6598,10 @@ msgid "Type" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Format" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Usage" msgstr "" @@ -7073,12 +6677,28 @@ msgstr "" msgid "Change Probe Extents" msgstr "" +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Library" +msgstr "" + +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Status" +msgstr "" + +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Libraries: " +msgstr "" + +#: modules/gdnative/register_types.cpp +msgid "GDNative" +msgstr "" + #: modules/gdscript/gd_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "Ongeldige type argument voor convert(), gebruik TYPE_* constanten." -#: modules/gdscript/gd_functions.cpp +#: modules/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "Niet genoeg bytes om bytes te decoderen, of ongeldig formaat." @@ -7131,10 +6751,6 @@ msgid "GridMap Duplicate Selection" msgstr "Dupliceer Selectie" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Paint" -msgstr "" - -#: modules/gridmap/grid_map_editor_plugin.cpp msgid "Snap View" msgstr "" @@ -7230,13 +6846,8 @@ msgstr "" msgid "Pick Distance:" msgstr "" -#: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy -msgid "Tiles" -msgstr "Bestand:" - -#: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Areas" +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "Builds" msgstr "" #: modules/visual_script/visual_script.cpp @@ -7449,10 +7060,18 @@ msgid "Return" msgstr "Teruggave" #: modules/visual_script/visual_script_editor.cpp +msgid "Call" +msgstr "Aanroep" + +#: modules/visual_script/visual_script_editor.cpp msgid "Get" msgstr "Krijg" #: modules/visual_script/visual_script_editor.cpp +msgid "Script already has function '%s'" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Change Input Value" msgstr "Wijzig Array Waarde" @@ -7867,6 +7486,12 @@ msgstr "" "Een SpriteFrames resource moet gemaakt of gegeven worden in de 'Frames' " "eigenschap om AnimatedSprite3D frames te laten tonen." +#: scene/3d/vehicle_body.cpp +msgid "" +"VehicleWheel serves to provide a wheel system to a VehicleBody. Please use " +"it as a child of a VehicleBody." +msgstr "" + #: scene/gui/color_picker.cpp msgid "Raw Mode" msgstr "" @@ -7876,6 +7501,10 @@ msgid "Add current color as a preset" msgstr "" #: scene/gui/dialogs.cpp +msgid "Cancel" +msgstr "Annuleren" + +#: scene/gui/dialogs.cpp msgid "Alert!" msgstr "Alarm!" @@ -7883,10 +7512,6 @@ msgstr "Alarm!" msgid "Please Confirm..." msgstr "Bevestig Alsjeblieft..." -#: scene/gui/input_action.cpp -msgid "Ctrl+" -msgstr "Ctrl+" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -7922,6 +7547,63 @@ msgstr "" "inhoud direct op het scherm te weergeven. Anders, maak er een RenderTarget " "van en wijs zijn interne texture toe aan een node om te tonen." +#: scene/resources/dynamic_font.cpp +msgid "Error initializing FreeType." +msgstr "Error bij het initialiseren van FreeType." + +#: scene/resources/dynamic_font.cpp +msgid "Unknown font format." +msgstr "Onbekende lettertype formaat." + +#: scene/resources/dynamic_font.cpp +msgid "Error loading font." +msgstr "Error bij het laden van lettertype." + +#: scene/resources/dynamic_font.cpp +msgid "Invalid font size." +msgstr "Ongeldige lettertype grootte." + +#~ msgid "Method List For '%s':" +#~ msgstr "Methodelijst voor '%s':" + +#~ msgid "Arguments:" +#~ msgstr "Argumenten:" + +#~ msgid "Return:" +#~ msgstr "Teruggave:" + +#~ msgid "Added:" +#~ msgstr "Toegevoegd:" + +#~ msgid "Removed:" +#~ msgstr "Verwijderd:" + +#~ msgid "Error saving atlas:" +#~ msgstr "Error bij het opslaan van atlas:" + +#~ msgid "Could not save atlas subtexture:" +#~ msgstr "Kon atlas subtexture niet opslaan:" + +#~ msgid "Exporting for %s" +#~ msgstr "Aan het exporteren voor %s" + +#~ msgid "Setting Up.." +#~ msgstr "Aan Het Opzetten.." + +#~ msgid "Re-Importing" +#~ msgstr "Aan Het Herimporteren" + +#, fuzzy +#~ msgid "Error moving file:\n" +#~ msgstr "Error bij het opslaan van TileSet!" + +#, fuzzy +#~ msgid "Tiles" +#~ msgstr "Bestand:" + +#~ msgid "Ctrl+" +#~ msgstr "Ctrl+" + #~ msgid "just pressed" #~ msgstr "reeds ingedrukt" diff --git a/editor/translations/pl.po b/editor/translations/pl.po index d9234269fd..297cc89d14 100644 --- a/editor/translations/pl.po +++ b/editor/translations/pl.po @@ -208,10 +208,9 @@ msgid "Create %d NEW tracks and insert keys?" msgstr "Utworzyć NOWÄ„ Å›cieżkÄ™ i dodać klatkÄ™ kluczowÄ…?" #: editor/animation_editor.cpp editor/create_dialog.cpp -#: editor/editor_audio_buses.cpp +#: editor/editor_audio_buses.cpp editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp #: editor/plugins/mesh_instance_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp editor/project_manager.cpp #: editor/script_create_dialog.cpp msgid "Create" @@ -378,272 +377,6 @@ msgstr "ZmieÅ„ Typ Tablicy" msgid "Change Array Value" msgstr "ZmieÅ„ Wartość Tablicy" -#: editor/asset_library_editor_plugin.cpp -msgid "Free" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp -msgid "Version:" -msgstr "Wersja:" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Contents:" -msgstr "StaÅ‚e:" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "View Files" -msgstr "Plik" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_help.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp -msgid "Description:" -msgstr "Opis:" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -#: editor/project_manager.cpp -msgid "Install" -msgstr "Instaluj" - -#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp -#: editor/connections_dialog.cpp editor/export_template_manager.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -#: editor/project_settings_editor.cpp editor/property_editor.cpp -#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Close" -msgstr "Zamknij" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve hostname:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Connection error, please try again." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Can't connect." -msgstr "Połącz.." - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Can't connect to host:" -msgstr "Podłącz do wÄ™zÅ‚a:" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response from host:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Request failed, return code:" -msgstr "Nieznany format pliku:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Req. Failed." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Request failed, too many redirects" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Redirect Loop." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Bad download hash, assuming file has been tampered with." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Expected:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Got:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed sha256 hash check" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Asset Download Error:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -msgid "Success!" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Fetching:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Resolving.." -msgstr "Zapisywanie.." - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Connecting.." -msgstr "Połącz.." - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Requesting.." -msgstr "Testowanie" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Error making request" -msgstr "Błąd podczas zapisu zasobu!" - -#: editor/asset_library_editor_plugin.cpp -msgid "Idle" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Retry" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Download Error" -msgstr "Pobierz" - -#: editor/asset_library_editor_plugin.cpp -msgid "Download for this asset is already in progress!" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "first" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "prev" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "next" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "last" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "All" -msgstr "Wszystko" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/property_selector.cpp editor/quick_open.cpp -#: editor/settings_config_dialog.cpp -msgid "Search:" -msgstr "Szukaj:" - -#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Search" -msgstr "Szukaj" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/project_manager.cpp -msgid "Import" -msgstr "Importuj" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Plugins" -msgstr "Wtyczki" - -#: editor/asset_library_editor_plugin.cpp -msgid "Sort:" -msgstr "Sortuj:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Reverse" -msgstr "Odwróć" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Category:" -msgstr "Kategoria:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Site:" -msgstr "ŹródÅ‚o:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "Wsparcie.." - -#: editor/asset_library_editor_plugin.cpp -msgid "Official" -msgstr "Oficjalny" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -msgid "Community" -msgstr "SpoÅ‚eczność" - -#: editor/asset_library_editor_plugin.cpp -msgid "Testing" -msgstr "Testowanie" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Assets ZIP File" -msgstr "Plik ZIP assetów" - -#: editor/call_dialog.cpp -msgid "Method List For '%s':" -msgstr "Lista metod '%s':" - -#: editor/call_dialog.cpp modules/visual_script/visual_script_editor.cpp -msgid "Call" -msgstr "WywoÅ‚anie" - -#: editor/call_dialog.cpp -msgid "Method List:" -msgstr "Lista metod:" - -#: editor/call_dialog.cpp -msgid "Arguments:" -msgstr "Argumenty:" - -#: editor/call_dialog.cpp -msgid "Return:" -msgstr "Zwraca:" - #: editor/code_editor.cpp msgid "Go to Line" msgstr "Idź do lini" @@ -681,6 +414,14 @@ msgstr "CaÅ‚e sÅ‚owa" msgid "Selection Only" msgstr "Tylko zaznaczenie" +#: editor/code_editor.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp +msgid "Search" +msgstr "Szukaj" + #: editor/code_editor.cpp editor/editor_help.cpp msgid "Find" msgstr "Szukaj" @@ -713,11 +454,11 @@ msgstr "Zaptytaj przy zastÄ…pieniu" msgid "Skip" msgstr "PomiÅ„" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom In" msgstr "Przybliż" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom Out" msgstr "Oddal" @@ -788,6 +529,20 @@ msgstr "Odroczone" msgid "Oneshot" msgstr "WywoÅ‚aj raz" +#: editor/connections_dialog.cpp editor/dependency_editor.cpp +#: editor/export_template_manager.cpp +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Close" +msgstr "Zamknij" + #: editor/connections_dialog.cpp msgid "Connect" msgstr "Połącz" @@ -814,7 +569,7 @@ msgstr "Połącz.." msgid "Disconnect" msgstr "Rozłącz" -#: editor/connections_dialog.cpp editor/node_dock.cpp +#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" msgstr "SygnaÅ‚y" @@ -831,12 +586,25 @@ msgstr "Ulubione:" msgid "Recent:" msgstr "Ostatnie:" +#: editor/create_dialog.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp +#: editor/quick_open.cpp editor/settings_config_dialog.cpp +msgid "Search:" +msgstr "Szukaj:" + #: editor/create_dialog.cpp editor/editor_help.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp #: editor/quick_open.cpp msgid "Matches:" msgstr "PasujÄ…ce:" +#: editor/create_dialog.cpp editor/editor_help.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp +#: editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "Opis:" + #: editor/dependency_editor.cpp msgid "Search Replacement For:" msgstr "Znajdź i zamieÅ„:" @@ -897,6 +665,10 @@ msgid "Owners Of:" msgstr "WÅ‚aÅ›ciciele:" #: editor/dependency_editor.cpp +msgid "Remove selected files from the project? (no undo)" +msgstr "Usunąć wybrane pliki z projektu? (Nie można tego cofnąć)" + +#: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" @@ -906,8 +678,8 @@ msgstr "" "Usunąć mimo to? (Nie można tego cofnąć)" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (no undo)" -msgstr "Usunąć wybrane pliki z projektu? (Nie można tego cofnąć)" +msgid "Cannot remove:\n" +msgstr "" #: editor/dependency_editor.cpp msgid "Error loading:" @@ -974,11 +746,6 @@ msgstr "" #: editor/editor_about.cpp #, fuzzy -msgid "Authors" -msgstr "Autor:" - -#: editor/editor_about.cpp -#, fuzzy msgid "Project Founders" msgstr "Menedżer projektów" @@ -995,6 +762,40 @@ msgid "Developers" msgstr "" #: editor/editor_about.cpp +#, fuzzy +msgid "Authors" +msgstr "Autor:" + +#: editor/editor_about.cpp +msgid "Platinum Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Mini Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Silver Donors" +msgstr "" + +#: editor/editor_about.cpp +#, fuzzy +msgid "Bronze Donors" +msgstr "Duplikuj liniÄ™" + +#: editor/editor_about.cpp +msgid "Donors" +msgstr "" + +#: editor/editor_about.cpp msgid "License" msgstr "" @@ -1038,6 +839,16 @@ msgid "Package Installed Successfully!" msgstr "Pakiet zastaÅ‚ zainstalowany poprawnie!" #: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Success!" +msgstr "" + +#: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp +msgid "Install" +msgstr "Instaluj" + +#: editor/editor_asset_installer.cpp #, fuzzy msgid "Package Installer" msgstr "Pakiet zastaÅ‚ zainstalowany poprawnie!" @@ -1092,11 +903,6 @@ msgid "Audio Bus, Drag and Drop to rearrange." msgstr "" #: editor/editor_audio_buses.cpp -#, fuzzy -msgid "Bus options" -msgstr "Opcje debugowania" - -#: editor/editor_audio_buses.cpp msgid "Solo" msgstr "" @@ -1108,6 +914,11 @@ msgstr "" msgid "Bypass" msgstr "" +#: editor/editor_audio_buses.cpp +#, fuzzy +msgid "Bus options" +msgstr "Opcje debugowania" + #: editor/editor_audio_buses.cpp editor/plugins/tile_map_editor_plugin.cpp #: editor/scene_tree_dock.cpp msgid "Duplicate" @@ -1115,6 +926,11 @@ msgstr "Duplikuj" #: editor/editor_audio_buses.cpp #, fuzzy +msgid "Reset Volume" +msgstr "Wyzeruj przybliżenie" + +#: editor/editor_audio_buses.cpp +#, fuzzy msgid "Delete Effect" msgstr "UsuÅ„ zaznaczone" @@ -1139,6 +955,11 @@ msgstr "Duplikuj animacje" #: editor/editor_audio_buses.cpp #, fuzzy +msgid "Reset Bus Volume" +msgstr "Wyzeruj przybliżenie" + +#: editor/editor_audio_buses.cpp +#, fuzzy msgid "Move Audio Bus" msgstr "Otwórz ukÅ‚ad magistrali audio" @@ -1174,7 +995,8 @@ msgstr "Dodaj magistralÄ™" msgid "Create a new Bus Layout." msgstr "Utwórz nowy zasób" -#: editor/editor_audio_buses.cpp editor/script_create_dialog.cpp +#: editor/editor_audio_buses.cpp editor/property_editor.cpp +#: editor/script_create_dialog.cpp msgid "Load" msgstr "Wczytaj" @@ -1269,7 +1091,7 @@ msgid "Rearrange Autoloads" msgstr "Przestaw Autoloady" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp scene/gui/file_dialog.cpp +#: scene/gui/file_dialog.cpp msgid "Path:" msgstr "Åšcieżka:" @@ -1277,9 +1099,7 @@ msgstr "Åšcieżka:" msgid "Node Name:" msgstr "Nazwa wÄ™zÅ‚a:" -#: editor/editor_autoload_settings.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp editor/project_manager.cpp +#: editor/editor_autoload_settings.cpp editor/project_manager.cpp msgid "Name" msgstr "Nazwa" @@ -1313,18 +1133,19 @@ msgid "Choose a Directory" msgstr "Wybierz katalog" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Create Folder" msgstr "Utwórz katalog" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: editor/editor_plugin_settings.cpp editor/plugins/theme_editor_plugin.cpp -#: editor/project_export.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp +#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp +#: scene/gui/file_dialog.cpp msgid "Name:" msgstr "Nazwa:" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Could not create folder." msgstr "Nie można utworzyć katalogu." @@ -1344,30 +1165,6 @@ msgstr "Pakowanie" msgid "Template file not found:\n" msgstr "Nie znaleziono pliku szablonu:\n" -#: editor/editor_export.cpp -msgid "Added:" -msgstr "Dodane:" - -#: editor/editor_export.cpp -msgid "Removed:" -msgstr "UsuniÄ™te:" - -#: editor/editor_export.cpp -msgid "Error saving atlas:" -msgstr "Błąd podczas zapisywania atlasu:" - -#: editor/editor_export.cpp -msgid "Could not save atlas subtexture:" -msgstr "Nie udaÅ‚o siÄ™ zapisać tekstury atlasu:" - -#: editor/editor_export.cpp -msgid "Exporting for %s" -msgstr "Exportowanie do %s" - -#: editor/editor_export.cpp -msgid "Setting Up.." -msgstr "Konfigurowanie .." - #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "Plik istnieje, nadpisać?" @@ -1452,6 +1249,11 @@ msgstr "PrzesuÅ„ Ulubiony w górÄ™" msgid "Move Favorite Down" msgstr "PrzesuÅ„ Ulubiony w dół" +#: editor/editor_file_dialog.cpp +#, fuzzy +msgid "Go to parent folder" +msgstr "Nie można utworzyć katalogu." + #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Directories & Files:" msgstr "Katalogi i pliki:" @@ -1495,6 +1297,10 @@ msgstr "List klas:" msgid "Search Classes" msgstr "Przeszukaj klasy" +#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +msgid "Top" +msgstr "Góra" + #: editor/editor_help.cpp editor/property_editor.cpp msgid "Class:" msgstr "Klasa:" @@ -1511,15 +1317,30 @@ msgstr "Dziedziczone przez:" msgid "Brief Description:" msgstr "Krótki opis:" +#: editor/editor_help.cpp +#, fuzzy +msgid "Members" +msgstr "CzÅ‚onkowie:" + #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "CzÅ‚onkowie:" #: editor/editor_help.cpp +#, fuzzy +msgid "Public Methods" +msgstr "Metody publiczne:" + +#: editor/editor_help.cpp msgid "Public Methods:" msgstr "Metody publiczne:" #: editor/editor_help.cpp +#, fuzzy +msgid "GUI Theme Items" +msgstr "Elementy motywu GUI:" + +#: editor/editor_help.cpp msgid "GUI Theme Items:" msgstr "Elementy motywu GUI:" @@ -1529,6 +1350,11 @@ msgstr "SygnaÅ‚y:" #: editor/editor_help.cpp #, fuzzy +msgid "Enumerations" +msgstr "Animacje" + +#: editor/editor_help.cpp +#, fuzzy msgid "Enumerations:" msgstr "Animacje" @@ -1537,19 +1363,51 @@ msgid "enum " msgstr "" #: editor/editor_help.cpp +#, fuzzy +msgid "Constants" +msgstr "StaÅ‚e:" + +#: editor/editor_help.cpp msgid "Constants:" msgstr "StaÅ‚e:" #: editor/editor_help.cpp #, fuzzy +msgid "Description" +msgstr "Opis:" + +#: editor/editor_help.cpp +#, fuzzy +msgid "Properties" +msgstr "WÅ‚aÅ›ciwoÅ›ci:" + +#: editor/editor_help.cpp +#, fuzzy msgid "Property Description:" msgstr "Krótki opis:" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this property. Please help us by " +"[color=$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp +#, fuzzy +msgid "Methods" +msgstr "Lista metod:" + +#: editor/editor_help.cpp msgid "Method Description:" msgstr "Opis metody:" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this method. Please help us by [color=" +"$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp msgid "Search Text" msgstr "Wyszukaj w tekÅ›cie" @@ -1559,24 +1417,21 @@ msgid "Output:" msgstr " Konsola:" #: editor/editor_log.cpp editor/plugins/animation_tree_editor_plugin.cpp -#: editor/plugins/rich_text_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_editor_debugger.cpp scene/gui/line_edit.cpp -#: scene/gui/text_edit.cpp +#: editor/property_editor.cpp editor/script_editor_debugger.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Clear" msgstr "Wyczyść" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Error saving resource!" msgstr "Błąd podczas zapisu zasobu!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Save Resource As.." msgstr "Zapisz zasób jako..." -#: editor/editor_node.cpp editor/export_template_manager.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "I see.." msgstr "WidzÄ™.." @@ -1593,6 +1448,30 @@ msgid "Error while saving." msgstr "Błąd podczas zapisywania." #: editor/editor_node.cpp +#, fuzzy +msgid "Can't open '%s'." +msgstr "Nie można operować na '..'" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Error while parsing '%s'." +msgstr "Błąd podczas zapisywania." + +#: editor/editor_node.cpp +msgid "Unexpected end of file '%s'." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Missing '%s' or its dependencies." +msgstr "Scena '%s' ma niespeÅ‚nione zależnoÅ›ci:" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Error while loading '%s'." +msgstr "Błąd podczas zapisywania." + +#: editor/editor_node.cpp msgid "Saving Scene" msgstr "Zapisywanie Sceny" @@ -1653,6 +1532,33 @@ msgid "Restored default layout to base settings." msgstr "Przywrócono domyÅ›lny ukÅ‚ad do ustawieÅ„ bazowych." #: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was imported, so it's not editable.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was instanced or inherited.\n" +"Changes to it will not be kept when saving the current scene." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource was imported, so it's not editable. Change its settings in the " +"import panel and then re-import." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This scene was imported, so changes to it will not be kept.\n" +"Instancing it or inheriting will allow making changes to it.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp msgid "Copy Params" msgstr "Kopiuj parametry" @@ -1828,6 +1734,12 @@ msgid "Save changes the following scene(s) before opening Project Manager?" msgstr "" #: editor/editor_node.cpp +msgid "" +"This option is deprecated. Situations where refresh must be forced are now " +"considered a bug. Please report." +msgstr "" + +#: editor/editor_node.cpp msgid "Pick a Main Scene" msgstr "Wybierz głównÄ… scenÄ™" @@ -1858,7 +1770,7 @@ msgstr "" "Aby dokonać na niej zmian, można utworzyć nowÄ… odziedziczonÄ… scenÄ™." #: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp #, fuzzy msgid "Ugh" msgstr "Błąd" @@ -1873,14 +1785,15 @@ msgstr "" "projektu." #: editor/editor_node.cpp -msgid "Error loading scene." -msgstr "Błąd Å‚adowania sceny." - -#: editor/editor_node.cpp msgid "Scene '%s' has broken dependencies:" msgstr "Scena '%s' ma niespeÅ‚nione zależnoÅ›ci:" #: editor/editor_node.cpp +#, fuzzy +msgid "Clear Recent Scenes" +msgstr "Wyczyść KoÅ›ci" + +#: editor/editor_node.cpp msgid "Save Layout" msgstr "Zapisz ukÅ‚ad" @@ -1914,7 +1827,7 @@ msgstr "Tryb bez rozproszeÅ„" msgid "Toggle distraction-free mode." msgstr "Tryb bez rozproszeÅ„" -#: editor/editor_node.cpp editor/io_plugins/editor_scene_import_plugin.cpp +#: editor/editor_node.cpp msgid "Scene" msgstr "Scena" @@ -2153,6 +2066,10 @@ msgstr "" msgid "Issue Tracker" msgstr "" +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +msgid "Community" +msgstr "SpoÅ‚eczność" + #: editor/editor_node.cpp msgid "About" msgstr "O programie" @@ -2161,7 +2078,7 @@ msgstr "O programie" msgid "Play the project." msgstr "Uruchom projekt." -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Play" msgstr "Uruchom" @@ -2177,7 +2094,7 @@ msgstr "Zapauzuj scenÄ™" msgid "Stop the scene." msgstr "Zatrzymaj scene." -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Stop" msgstr "Stop" @@ -2251,6 +2168,16 @@ msgid "Object properties." msgstr "WÅ‚aÅ›ciwoÅ›ci obiektu." #: editor/editor_node.cpp +#, fuzzy +msgid "Changes may be lost!" +msgstr "ZmieÅ„ grupÄ™ obrazków" + +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Import" +msgstr "Importuj" + +#: editor/editor_node.cpp msgid "FileSystem" msgstr "System plików" @@ -2266,14 +2193,6 @@ msgstr "Konsola" msgid "Don't Save" msgstr "" -#: editor/editor_node.cpp editor/editor_reimport_dialog.cpp -msgid "Re-Import" -msgstr "Importuj ponownie" - -#: editor/editor_node.cpp editor/editor_plugin_settings.cpp -msgid "Update" -msgstr "OdÅ›wież" - #: editor/editor_node.cpp msgid "Import Templates From ZIP File" msgstr "Zaimportuj Szablony z pliku ZIP" @@ -2341,11 +2260,29 @@ msgstr "Otwórz w edytorze" msgid "Open the previous Editor" msgstr "Otwórz w edytorze" +#: editor/editor_plugin.cpp +#, fuzzy +msgid "Creating Mesh Previews" +msgstr "Tworzenie Mesh Library" + +#: editor/editor_plugin.cpp +msgid "Thumbnail.." +msgstr "Miniatura.." + #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" msgstr "Zainstalowane wtyczki:" #: editor/editor_plugin_settings.cpp +msgid "Update" +msgstr "OdÅ›wież" + +#: editor/editor_plugin_settings.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Version:" +msgstr "Wersja:" + +#: editor/editor_plugin_settings.cpp msgid "Author:" msgstr "Autor:" @@ -2398,26 +2335,6 @@ msgstr "Ten obiekt" msgid "Frame #:" msgstr "Klatka #:" -#: editor/editor_reimport_dialog.cpp -msgid "Please wait for scan to complete." -msgstr "ProszÄ™ poczekać na zakoÅ„czenie skanowania." - -#: editor/editor_reimport_dialog.cpp -msgid "Current scene must be saved to re-import." -msgstr "Bieżąca scena musi być zapisana aby ponownie zaimportować." - -#: editor/editor_reimport_dialog.cpp -msgid "Save & Re-Import" -msgstr "Zapisz i importuj ponownie" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Importing" -msgstr "Prze-Importowanie" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Import Changed Resources" -msgstr "Zaimportuj ponownie zmienione zasoby" - #: editor/editor_run_native.cpp msgid "Select device from the list" msgstr "" @@ -2535,10 +2452,6 @@ msgid "Importing:" msgstr "Importowanie:" #: editor/export_template_manager.cpp -msgid "Loading Export Templates" -msgstr "Wczytywanie szablonów eksportu" - -#: editor/export_template_manager.cpp #, fuzzy msgid "Current Version:" msgstr "Aktualna scena" @@ -2576,11 +2489,18 @@ msgid "Cannot navigate to '" msgstr "Nie można przejść do '" #: editor/filesystem_dock.cpp -#, fuzzy +msgid "View items as a grid of thumbnails" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "View items as a list" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "" "\n" -"Status: Needs Re-Import" -msgstr "Zapisz i importuj ponownie" +"Status: Import of file failed. Please fix file and reimport manually." +msgstr "" #: editor/filesystem_dock.cpp #, fuzzy @@ -2591,48 +2511,56 @@ msgstr "ŹródÅ‚o:" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Same source and destination files, doing nothing." -msgstr "Pliki źródÅ‚owe i docelowe sÄ… te same, nie podjÄ™to żadnej akcji." +msgid "Cannot move/rename resources root." +msgstr "Nie można wczytać/przetworzyć źródÅ‚owego fontu." #: editor/filesystem_dock.cpp -msgid "Target file exists, can't overwrite. Delete first." -msgstr "" +#, fuzzy +msgid "Cannot move a folder into itself.\n" +msgstr "Nie można zaimportować pliku wewnÄ…trz siebie samego:" #: 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." +#, fuzzy +msgid "Error moving:\n" +msgstr "Błąd importowania:" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Can't move directories to within themselves." -msgstr "Nie możesz przenieść danego katalogu do jego wnÄ™trza." +msgid "Unable to update dependencies:\n" +msgstr "Scena '%s' ma niespeÅ‚nione zależnoÅ›ci:" + +#: editor/filesystem_dock.cpp +msgid "No name provided" +msgstr "" #: editor/filesystem_dock.cpp -msgid "Can't rename deps for:\n" +msgid "Provided name contains invalid characters" msgstr "" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Error moving file:\n" -msgstr "Błąd wczytywania obrazu:" +msgid "No name provided." +msgstr "ZmieÅ„ nazwÄ™ lub PrzenieÅ›..." #: editor/filesystem_dock.cpp #, fuzzy -msgid "Error moving dir:\n" -msgstr "Błąd importowania:" +msgid "Name contains invalid characters." +msgstr "Dopuszczalne znaki:" #: editor/filesystem_dock.cpp -msgid "Can't operate on '..'" -msgstr "Nie można operować na '..'" +#, fuzzy +msgid "A file or folder with this name already exists." +msgstr "Nazwa grupy już istnieje!" #: editor/filesystem_dock.cpp -msgid "Pick New Name and Location For:" -msgstr "Wybierz nowÄ… nazwÄ™ i lokacjÄ™ dla:" +#, fuzzy +msgid "Renaming file:" +msgstr "ZmieÅ„ nawÄ™ zmiennej" #: editor/filesystem_dock.cpp -msgid "No files selected!" -msgstr "Nie wybrano pliku!" +#, fuzzy +msgid "Renaming folder:" +msgstr "ZmieÅ„ nazwÄ™ wÄ™zÅ‚a" #: editor/filesystem_dock.cpp msgid "Expand all" @@ -2643,40 +2571,38 @@ msgid "Collapse all" msgstr "ZwiÅ„ foldery" #: editor/filesystem_dock.cpp -msgid "Show In File Manager" -msgstr "Pokaż w menadżerze plików" - -#: editor/filesystem_dock.cpp -msgid "Instance" -msgstr "Instancja" +msgid "Copy Path" +msgstr "Skopiuj ÅšcieżkÄ™" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "Edytuj ZależnoÅ›ci..." +#, fuzzy +msgid "Rename.." +msgstr "ZmieÅ„ nazwÄ™" #: editor/filesystem_dock.cpp -msgid "View Owners.." -msgstr "Pokaż wÅ‚aÅ›cicieli.." +msgid "Move To.." +msgstr "PrzenieÅ› Do..." #: editor/filesystem_dock.cpp -msgid "Copy Path" -msgstr "Skopiuj ÅšcieżkÄ™" +#, fuzzy +msgid "New Folder.." +msgstr "Utwórz katalog" #: editor/filesystem_dock.cpp -msgid "Rename or Move.." -msgstr "ZmieÅ„ nazwÄ™ lub PrzenieÅ›..." +msgid "Show In File Manager" +msgstr "Pokaż w menadżerze plików" #: editor/filesystem_dock.cpp -msgid "Move To.." -msgstr "PrzenieÅ› Do..." +msgid "Instance" +msgstr "Instancja" #: editor/filesystem_dock.cpp -msgid "Info" -msgstr "Informacje" +msgid "Edit Dependencies.." +msgstr "Edytuj ZależnoÅ›ci..." #: editor/filesystem_dock.cpp -msgid "Re-Import.." -msgstr "Importuj ponownie.." +msgid "View Owners.." +msgstr "Pokaż wÅ‚aÅ›cicieli.." #: editor/filesystem_dock.cpp msgid "Previous Directory" @@ -2708,6 +2634,11 @@ msgstr "" msgid "Move" msgstr "PrzenieÅ›" +#: editor/filesystem_dock.cpp editor/plugins/animation_tree_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Rename" +msgstr "ZmieÅ„ nazwÄ™" + #: editor/groups_editor.cpp msgid "Add to Group" msgstr "Dodaj do Grupy" @@ -2722,6 +2653,11 @@ msgid "Import as Single Scene" msgstr "Importowanie Sceny.." #: editor/import/resource_importer_scene.cpp +#, fuzzy +msgid "Import with Separate Animations" +msgstr "Zaimportuj animacje.." + +#: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials" msgstr "" @@ -2734,6 +2670,18 @@ msgid "Import with Separate Objects+Materials" msgstr "" #: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Materials+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Materials+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp #, fuzzy msgid "Import as Multiple Scenes" msgstr "Zaimportuj Scene 3D" @@ -2743,40 +2691,33 @@ msgid "Import as Multiple Scenes+Materials" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Import Scene" msgstr "Importuj ScenÄ™" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Importing Scene.." msgstr "Importowanie Sceny.." #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Running Custom Script.." msgstr "Uruchamiam skrypt..." #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Couldn't load post-import script:" msgstr "Nie udaÅ‚o siÄ™ wczytać skryptu po imporcie:" #: editor/import/resource_importer_scene.cpp -#: 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Ä™):" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Error running post-import script:" msgstr "Błąd podczas uruchamiania skryptu po imporcie:" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Saving.." msgstr "Zapisywanie.." @@ -2806,589 +2747,56 @@ msgstr "Ustawienie predefiniowane.." msgid "Reimport" msgstr "Importuj ponownie" -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "No bit masks to import!" -msgstr "Brak mask bitowych do zaimportowania!" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path is empty." -msgstr "Docelowa Å›cieżka jest pusta." - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: 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." - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must exist." -msgstr "Docelowa Å›cieżka musi istnieć." - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Save path is empty!" -msgstr "Åšcieżka zapisu jest pusta!" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Import BitMasks" -msgstr "Importuj BitMasks" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s):" -msgstr "ŹródÅ‚o tekstury:" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Target Path:" -msgstr "Åšcieżka docelowa:" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Accept" -msgstr "Akceptuj" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Bit Mask" -msgstr "BitMask" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No source font file!" -msgstr "Brak pliku źródÅ‚owego fontu!" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No target font resource!" -msgstr "Brak docelowego zasobu fontu!" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#, fuzzy -msgid "" -"Invalid file extension.\n" -"Please use .font." -msgstr "" -"Błędne rozszerzenie pliku.\n" -"ProszÄ™ użyć .fnt." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Can't load/process source font." -msgstr "Nie można wczytać/przetworzyć źródÅ‚owego fontu." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Couldn't save font." -msgstr "Nie udaÅ‚o siÄ™ zapisać fontu." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font:" -msgstr "ŹródÅ‚o fontu:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font Size:" -msgstr "Wielkość oryginalna fontu:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Dest Resource:" -msgstr "Zasób docelowy:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "The quick brown fox jumps over the lazy dog." -msgstr "ŻżŹźĆćŃńĄąÅłĘęÓó." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Test:" -msgstr "Test:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Options:" -msgstr "Opcje:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Font Import" -msgstr "Import fontu" - -#: 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 "Ten plik jest już plikiem fontu Godot, proszÄ™ podać plik typu BMFont." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Failed opening as BMFont file." -msgstr "Nie powiodÅ‚o siÄ™, otwarcie pliku jako BMFont." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error initializing FreeType." -msgstr "Błąd przy inicjalizacji FreeType." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Unknown font format." -msgstr "Nieznany format fontu." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error loading font." -msgstr "Błąd Å‚adowania fonta." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Invalid font size." -msgstr "Niepoprawny rozmiar fonta." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Invalid font custom source." -msgstr "Nie rozpoznano typu fontu." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/plugins/theme_editor_plugin.cpp -msgid "Font" -msgstr "Font" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "No meshes to import!" -msgstr "Brak siatek do zaimportowania!" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Single Mesh Import" -msgstr "Importuj Mesh" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Source Mesh(es):" -msgstr "ŹródÅ‚o Mesh:" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Mesh" -msgstr "Siatka" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Surface %d" -msgstr "Powierzchnia %d" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "No samples to import!" -msgstr "Brak sampli do importu!" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Import Audio Samples" -msgstr "Importuj pliki dźwiÄ™kowe" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Source Sample(s):" -msgstr "ŹródÅ‚o dźwiÄ™ku:" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Audio Sample" -msgstr "DźwiÄ™k" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "New Clip" -msgstr "Nowy klip" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Animation Options" -msgstr "Opcje animacji" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Flags" -msgstr "Flagi" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Bake FPS:" -msgstr "Wypal FPS:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Optimizer" -msgstr "Optymalizator" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Linear Error" -msgstr "Maksymalny błąd liniowy" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angular Error" -msgstr "Maksymalny błąd kÄ…towy" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angle" -msgstr "Maksymalny KÄ…t" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Clips" -msgstr "Klipy" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Start(s)" -msgstr "Start" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "End(s)" -msgstr "Koniec" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Loop" -msgstr "PÄ™tla" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Filters" -msgstr "Filtry" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source path is empty." -msgstr "Åšcieżka źródÅ‚owa jest pusta." - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't load post-import script." -msgstr "Nie udaÅ‚o siÄ™ wczytać skryptu po imporcie." - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Invalid/broken script for post-import." -msgstr "Niepoprawny/uszkodzony skrypt post-importu." - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Error importing scene." -msgstr "Błąd podczas wczytywania sceny." - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import 3D Scene" -msgstr "Zaimportuj Scene 3D" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source Scene:" -msgstr "Scena źródÅ‚owa:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Same as Target Scene" -msgstr "Taki sam jak scena docelowa" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Shared" -msgstr "Współdzielone" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Target Texture Folder:" -msgstr "Docelowy folder tekstur:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Post-Process Script:" -msgstr "Skrypt do wywoÅ‚ania po imporcie:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Custom Root Node Type:" -msgstr "Niestandardowy typ wÄ™zÅ‚a głównego:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Auto" -msgstr "Automatyczny" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#, fuzzy -msgid "Root Node Name:" -msgstr "Nazwa wÄ™zÅ‚a:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "The Following Files are Missing:" -msgstr "Brakuje nastÄ™pujÄ…cych plików:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Anyway" -msgstr "Zaimportuj Pomimo" - -#: editor/io_plugins/editor_scene_import_plugin.cpp scene/gui/dialogs.cpp -msgid "Cancel" -msgstr "Anuluj" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import & Open" -msgstr "Importuj i Otwórz" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Edited scene has not been saved, open imported scene anyway?" +#: editor/multi_node_edit.cpp +msgid "MultiNode Set" msgstr "" -"Edytowana sceny nie zostaÅ‚a zapisana. Otworzyć importowanÄ… scenÄ™ mimo tego?" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Image:" -msgstr "Zaimportuj Obraz:" - -#: 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:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't localize path: %s (already local)" -msgstr "Nie można zlokalizować Å›cieżki: %s (już jest lokalna)" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "3D Scene Animation" -msgstr "Scena animacji 3D" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Uncompressed" -msgstr "Nieskompresowany" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossless (PNG)" -msgstr "Bezstratna Kompresja (PNG)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossy (WebP)" -msgstr "Kompresja Stratna (WebP)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress (VRAM)" -msgstr "Skompresuj (VRAM)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Format" -msgstr "Format Tekstury" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Compression Quality (WebP):" -msgstr "Jakość Kompresji Textury (WebP):" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Options" -msgstr "Opcje Tekstury" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Please specify some files!" -msgstr "ProszÄ™ podać kilka plików !" - -#: 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\"." - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Error importing:" -msgstr "Błąd importowania:" - -#: 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." - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Max Texture Size:" -msgstr "Maksymalny rozmiar tekstury:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for Atlas (2D)" -msgstr "Zaimportuj Tekstury z \"Atlas'u\" (2D)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cell Size:" -msgstr "Rozmiar komórki:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Large Texture" -msgstr "Duża Tekstura" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Textures (2D)" -msgstr "Zaimportuj Duże Tekstury (2D)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture" -msgstr "ŹródÅ‚owa Tekstura" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Base Atlas Texture" -msgstr "Bazowa tekstura \"Atlas'u\"" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s)" -msgstr "Tekstura(y) źródÅ‚owe" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 2D" -msgstr "Importuj tekstury dla 2D" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 3D" -msgstr "Importuj tekstury dla 3D" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures" -msgstr "Zaimportuj Tekstury" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "2D Texture" -msgstr "Tekstura 2D" +#: editor/node_dock.cpp +msgid "Groups" +msgstr "Grupy" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "3D Texture" -msgstr "Tekstura 3D" +#: editor/node_dock.cpp +msgid "Select a Node to edit Signals and Groups." +msgstr "Wybierz wÄ™zeÅ‚ do edycji sygnałów i grup." -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Atlas Texture" -msgstr "Tekstura \"Atlas'u\"" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create Poly" +msgstr "Utwórz Polygon" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "" -"NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files to " -"the project." +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly" msgstr "" -"UWAGA: Importowanie tekstur 2D nie jest wymagane. Po prostu skopiuj pliki " -"png/jpg do folderu projektu." - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Crop empty space." -msgstr "Przytnij pusty obszar." - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture" -msgstr "Tekstura" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Texture" -msgstr "Importuj dużą teksturÄ™" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Load Source Image" -msgstr "Wczytaj obrazek źródÅ‚owy" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Slicing" -msgstr "Przycinanie" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Inserting" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#, fuzzy +msgid "Insert Point" msgstr "Wstawianie" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Saving" -msgstr "Zapisywanie" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save large texture:" -msgstr "Nie udaÅ‚o siÄ™ zapisać dużej tekstury:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Build Atlas For:" -msgstr "Zbuduj Atlas dla:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Loading Image:" -msgstr "Åadowanie obrazu:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't load image:" -msgstr "Nie można zaÅ‚adować obrazu:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Converting Images" -msgstr "Konwersja obrazków" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cropping Images" -msgstr "Przycinanie obrazków" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Blitting Images" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly (Remove Point)" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save atlas image:" -msgstr "Nie można zapisać obrazu atlasu:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -#, fuzzy -msgid "Couldn't save converted texture:" -msgstr "Nie można zapisać zkonwertowanej tekstury:" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid source!" -msgstr "Wadliwe źródÅ‚o!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid translation source!" -msgstr "NieprawidÅ‚owe źródÅ‚o tÅ‚umaczenia!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Column" -msgstr "Kolumna" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/script_create_dialog.cpp -msgid "Language" -msgstr "JÄ™zyk" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No items to import!" -msgstr "Brak elementów do importu!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No target path!" -msgstr "Brak Å›cieżki docelowej!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translations" -msgstr "Importuj tÅ‚umaczenia" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Couldn't import!" -msgstr "Nie można zaimportować!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translation" -msgstr "Importuj tÅ‚umaczenie" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Source CSV:" -msgstr "ŹródÅ‚owy CSV:" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Ignore First Row" -msgstr "Ignoruj pierwszy wiersz" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Compress" -msgstr "Skompresuj" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -#, fuzzy -msgid "Add to Project (project.godot)" -msgstr "Dodaj do projektu (engine.cfg)" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Languages:" -msgstr "Zaimportuj JÄ™zyk:" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Translation" -msgstr "TÅ‚umaczenie" - -#: editor/multi_node_edit.cpp -msgid "MultiNode Set" +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Remove Poly And Point" msgstr "" -#: editor/node_dock.cpp -msgid "Groups" -msgstr "Grupy" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create a new polygon from scratch." +msgstr "Utwórz nowy wielokÄ…t." -#: editor/node_dock.cpp -msgid "Select a Node to edit Signals and Groups." -msgstr "Wybierz wÄ™zeÅ‚ do edycji sygnałów i grup." +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "" +"Edit existing polygon:\n" +"LMB: Move Point.\n" +"Ctrl+LMB: Split Segment.\n" +"RMB: Erase Point." +msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Toggle Autoplay" @@ -3544,7 +2952,6 @@ msgstr "Nazwa animacji:" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp #: editor/script_create_dialog.cpp msgid "Error!" @@ -3655,10 +3062,6 @@ msgid "Delete Input" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Rename" -msgstr "ZmieÅ„ nazwÄ™" - -#: editor/plugins/animation_tree_editor_plugin.cpp msgid "Animation tree is valid." msgstr "Drzewo animacji jest poprawne." @@ -3714,64 +3117,192 @@ msgstr "Edytuj filtry wÄ™złów" msgid "Filters.." msgstr "Filtry.." -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing %d Triangles:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Free" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Contents:" +msgstr "StaÅ‚e:" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "View Files" +msgstr "Plik" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve hostname:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Triangle #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Light Baker Setup:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connection error, please try again." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing Geometry" -msgstr "Parsowanie Geometrii" +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Can't connect." +msgstr "Połącz.." -#: editor/plugins/baked_light_baker.cpp -msgid "Fixing Lights" +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Can't connect to host:" +msgstr "Podłącz do wÄ™zÅ‚a:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response from host:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Making BVH" -msgstr "Tworzenie BVH" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response." +msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Light Octree" +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Request failed, return code:" +msgstr "Nieznany format pliku:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Req. Failed." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Octree Texture" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, too many redirects" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Transfer to Lightmaps:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Redirect Loop." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Allocating Texture #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Baking Triangle #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Bad download hash, assuming file has been tampered with." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Post-Processing Texture #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Expected:" msgstr "" -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Bake!" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Got:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed sha256 hash check" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Asset Download Error:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Fetching:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Resolving.." +msgstr "Zapisywanie.." + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Connecting.." +msgstr "Połącz.." + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Requesting.." +msgstr "Testowanie" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Error making request" +msgstr "Błąd podczas zapisu zasobu!" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Idle" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Retry" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Download Error" +msgstr "Pobierz" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download for this asset is already in progress!" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "first" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "prev" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "next" msgstr "" -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Reset the lightmap octree baking process (start over)." +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "last" msgstr "" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "All" +msgstr "Wszystko" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Plugins" +msgstr "Wtyczki" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Sort:" +msgstr "Sortuj:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Reverse" +msgstr "Odwróć" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Category:" +msgstr "Kategoria:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Site:" +msgstr "ŹródÅ‚o:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Support.." +msgstr "Wsparcie.." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Official" +msgstr "Oficjalny" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Testing" +msgstr "Testowanie" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Assets ZIP File" +msgstr "Plik ZIP assetów" + #: editor/plugins/camera_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp msgid "Preview" msgstr "PodglÄ…d" @@ -3814,12 +3345,17 @@ msgid "Edit CanvasItem" msgstr "Edytuj CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Change Anchors" +msgid "Anchors only" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Change Anchors and Margins" msgstr "ZmieÅ„ zakotwiczenie" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom (%):" -msgstr "PowiÄ™kszenie (%):" +msgid "Change Anchors" +msgstr "ZmieÅ„ zakotwiczenie" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Paste Pose" @@ -3874,60 +3410,77 @@ msgid "Pan Mode" msgstr "Tryb przesuwania" #: 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ć)." +#, fuzzy +msgid "Toggles snapping" +msgstr "Przełącz puÅ‚apkÄ™" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Unlock the selected object (can be moved)." -msgstr "Odblokuj wybrany obiekt (można go przesuwać)." +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "Użyj przyciÄ…gania" #: 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." +#, fuzzy +msgid "Snapping options" +msgstr "Opcje animacji" #: 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." +#, fuzzy +msgid "Snap to grid" +msgstr "Tryb przyciÄ…gania:" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp -#: editor/project_settings_editor.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Edit" -msgstr "Edycja" +msgid "Use Rotation Snap" +msgstr "Użyj kroków obrotu" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" -msgstr "Użyj przyciÄ…gania" +#, fuzzy +msgid "Configure Snap..." +msgstr "Konfiguruj krokowanie.." #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" -msgstr "Pokaż siatkÄ™" +msgid "Snap Relative" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Rotation Snap" -msgstr "Użyj kroków obrotu" +msgid "Use Pixel Snap" +msgstr "Użyj krokowania na poziomie pikseli" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap Relative" +msgid "Smart snapping" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "Konfiguruj krokowanie.." +msgid "Snap to parent" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Pixel Snap" -msgstr "Użyj krokowania na poziomie pikseli" +msgid "Snap to node anchor" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to node sides" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to other nodes" +msgstr "" + +#: 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ć)." + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Unlock the selected object (can be moved)." +msgstr "Odblokuj wybrany obiekt (można go przesuwać)." #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Skeleton.." -msgstr "Szkielet.." +msgid "Makes sure the object's children are not selectable." +msgstr "Zablokuj selekcjÄ™ wÄ™złów podrzÄ™dnych." + +#: 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." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Make Bones" @@ -3956,12 +3509,19 @@ msgid "View" msgstr "Widok" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Reset" -msgstr "Wyzeruj przybliżenie" +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "Pokaż siatkÄ™" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Set.." -msgstr "Ustaw przybliżenie..." +#, fuzzy +msgid "Show helpers" +msgstr "Utwórz KoÅ›ci" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show rulers" +msgstr "Utwórz KoÅ›ci" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -3972,8 +3532,9 @@ msgid "Frame Selection" msgstr "PowiÄ™ksz do zaznaczenia" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Anchor" -msgstr "" +#, fuzzy +msgid "Layout" +msgstr "Zapisz ukÅ‚ad" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Keys" @@ -3996,12 +3557,21 @@ msgid "Clear Pose" msgstr "Wyczyść PozÄ™" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Set a Value" -msgstr "Ustaw Wartość" +msgid "Drag pivot from mouse position" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap (Pixels):" -msgstr "PrzyciÄ…ganie (piksele):" +#, fuzzy +msgid "Set pivot at mouse position" +msgstr "Ustaw pozycje punktu krzywej" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Multiply grid step by 2" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Divide grid step by 2" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy @@ -4012,24 +3582,29 @@ msgstr "Dodaj wszystko" msgid "Adding %s..." msgstr "Dodawanie %s..." -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Create Node" msgstr "Utwórz wÄ™zeÅ‚" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Error instancing scene from %s" msgstr "Błąd instancjacji sceny z %s" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "OK :(" msgstr "OK :(" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp #, fuzzy msgid "No parent to instance a child at." msgstr "Brak elementu nadrzÄ™dnego do stworzenia instancji." -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "This operation requires a single selected node." msgstr "Ta operacja wymaga pojedynczego wybranego wÄ™zÅ‚a." @@ -4046,45 +3621,6 @@ msgstr "" "PrzeciÄ…gnij i upuść + Shift: dodaj wÄ™zeÅ‚ równorzÄ™dny\n" "PrzeciÄ…gnij i upuść + Alt: ZmieÅ„ typ wÄ™zÅ‚a" -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Create Poly" -msgstr "Utwórz Polygon" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly" -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly (Remove Point)" -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Create a new polygon from scratch." -msgstr "Utwórz nowy wielokÄ…t." - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -msgid "" -"Edit existing polygon:\n" -"LMB: Move Point.\n" -"Ctrl+LMB: Split Segment.\n" -"RMB: Erase Point." -msgstr "" - #: editor/plugins/collision_polygon_editor_plugin.cpp msgid "Create Poly3D" msgstr "" @@ -4094,14 +3630,6 @@ msgid "Set Handle" msgstr "" #: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Creating Mesh Library" -msgstr "Tworzenie Mesh Library" - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Thumbnail.." -msgstr "Miniatura.." - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Remove item %d?" msgstr "UsuÅ„ element %d?" @@ -4124,6 +3652,27 @@ msgid "Update from Scene" msgstr "Aktualizuj ze sceny" #: editor/plugins/curve_editor_plugin.cpp +msgid "Flat0" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Flat1" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +#, fuzzy +msgid "Ease in" +msgstr "UsuÅ„ zaznaczenie" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Ease out" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Smoothstep" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp #, fuzzy msgid "Modify Curve Point" msgstr "Zamknij krzywÄ…" @@ -4208,22 +3757,18 @@ msgid "Create Occluder Polygon" msgstr "Stwórz Occluder Polygon" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Edit existing polygon:" msgstr "Edytuj istniejÄ…cy polygon:" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "LMB: Move Point." msgstr "LMB: PrzesuÅ„ Punkt." #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Ctrl+LMB: Split Segment." msgstr "Ctrl + LPM: PodziaÅ‚u segmentu." #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "RMB: Erase Point." msgstr "RMB: Wymaż Punkt." @@ -4328,6 +3873,10 @@ msgid "Create Outline" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh" +msgstr "Siatka" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Body" msgstr "" @@ -4455,12 +4004,75 @@ msgstr "Losowa skala:" msgid "Populate" msgstr "" -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Create Navigation Polygon" +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Bake!" +msgstr "" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Bake the navigation mesh.\n" +msgstr "" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Clear the navigation mesh." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Setting up Configuration..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Calculating grid size..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating heightfield..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Marking walkable triangles..." +msgstr "Zachowywanie lokalnych zmian.." + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Constructing compact heightfield..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Eroding walkable area..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Partioning..." +msgstr "Ostrzeżenie" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating contours..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating polymesh..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Converting to native navigation mesh..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Navigation Mesh Generator Setup:" +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Parsing Geometry..." +msgstr "Parsowanie Geometrii" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Done!" msgstr "" #: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Remove Poly And Point" +msgid "Create Navigation Polygon" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4644,16 +4256,19 @@ msgid "Curve Point #" msgstr "Punkt Krzywej #" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Point Pos" +#, fuzzy +msgid "Set Curve Point Position" msgstr "Ustaw pozycje punktu krzywej" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve In Pos" -msgstr "" +#, fuzzy +msgid "Set Curve In Position" +msgstr "Ustaw pozycje punktu krzywej" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Out Pos" -msgstr "" +#, fuzzy +msgid "Set Curve Out Position" +msgstr "Ustaw pozycje punktu krzywej" #: editor/plugins/path_editor_plugin.cpp msgid "Split Path" @@ -4714,6 +4329,14 @@ msgid "Scale Polygon" msgstr "Skaluj WielokÄ…t" #: editor/plugins/polygon_2d_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit" +msgstr "Edycja" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon->UV" msgstr "WielokÄ…t->UV" @@ -4768,63 +4391,10 @@ msgstr "Wczytaj Zasób" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "Wklej" -#: editor/plugins/rich_text_editor_plugin.cpp -msgid "Parse BBCode" -msgstr "Parsuj BBCode" - -#: editor/plugins/sample_editor_plugin.cpp -msgid "Length:" -msgstr "DÅ‚ugość:" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Open Sample File(s)" -msgstr "Otwórz plik(i) sampli" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "ERROR: Couldn't load sample!" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Add Sample" -msgstr "Dodaj sampel" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Rename Sample" -msgstr "ZmieÅ„ nazwÄ™ sampla" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Delete Sample" -msgstr "UsuÅ„ sampel" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "16 Bits" -msgstr "16 Bits" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "8 Bits" -msgstr "8 Bits" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Stereo" -msgstr "Stereo" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Mono" -msgstr "Mono" - -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/script_editor_debugger.cpp -msgid "Format" -msgstr "Format" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Pitch" -msgstr "Wysokość" - #: editor/plugins/script_editor_plugin.cpp #, fuzzy msgid "Clear Recent Files" @@ -4917,6 +4487,10 @@ msgstr "Zamknij pliki pomocy" msgid "Close All" msgstr "Zamknij" +#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp +msgid "Run" +msgstr "Uruchom" + #: editor/plugins/script_editor_plugin.cpp #, fuzzy msgid "Toggle Scripts Panel" @@ -4963,18 +4537,6 @@ msgid "Debug with external editor" msgstr "Otwórz w edytorze" #: editor/plugins/script_editor_plugin.cpp -msgid "Window" -msgstr "Okno" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Left" -msgstr "PrzesuÅ„ w lewo" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Right" -msgstr "PrzesuÅ„ w prawo" - -#: editor/plugins/script_editor_plugin.cpp #, fuzzy msgid "Open Godot online documentation" msgstr "Poszukaj w dokumentacji referencyjnej." @@ -5065,7 +4627,7 @@ msgstr "Wytnij" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Copy" msgstr "Kopiuj" @@ -5331,10 +4893,6 @@ msgid "View Plane Transform." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Scaling to %s%%." -msgstr "Skalowanie do %s%%." - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." msgstr "Obracanie o %s stopni." @@ -5351,10 +4909,6 @@ msgid "Top View." msgstr "Widok z góry." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Top" -msgstr "Góra" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "Widok z tyÅ‚u." @@ -5599,6 +5153,10 @@ msgid "Transform" msgstr "PrzeksztaÅ‚canie" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Configure Snap.." +msgstr "Konfiguruj krokowanie.." + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Local Coords" msgstr "Koordynaty lokalne" @@ -5744,6 +5302,10 @@ msgid "Speed (FPS):" msgstr "PrÄ™dkość (FPS):" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Loop" +msgstr "PÄ™tla" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animation Frames" msgstr "Klatki animacji" @@ -5756,12 +5318,14 @@ msgid "Insert Empty (After)" msgstr "Dodaj pusty (później)" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Up" -msgstr "Góra" +#, fuzzy +msgid "Move (Before)" +msgstr "UsuÅ„ wÄ™zeÅ‚(y)" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Down" -msgstr "Dół" +#, fuzzy +msgid "Move (After)" +msgstr "PrzesuÅ„ w lewo" #: editor/plugins/style_box_editor_plugin.cpp msgid "StyleBox Preview:" @@ -5927,6 +5491,10 @@ msgid "Style" msgstr "Styl" #: editor/plugins/theme_editor_plugin.cpp +msgid "Font" +msgstr "Font" + +#: editor/plugins/theme_editor_plugin.cpp msgid "Color" msgstr "Kolor" @@ -5978,8 +5546,9 @@ msgid "Mirror Y" msgstr "Odbij Y" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Bucket" -msgstr "Wiadro" +#, fuzzy +msgid "Paint Tile" +msgstr "Maluj TileMap" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Pick Tile" @@ -6045,6 +5614,11 @@ msgid "Delete preset '%s'?" msgstr "Usunąć zaznaczone pliki?" #: editor/project_export.cpp +#, fuzzy +msgid "Export templates for this platform are missing/corrupted: " +msgstr "Brakuje eksportu szablonów dla tej platformy:" + +#: editor/project_export.cpp msgid "Presets" msgstr "Profile eksportu" @@ -6127,33 +5701,62 @@ msgstr "Brakuje eksportu szablonów dla tej platformy:" #: editor/project_export.cpp #, fuzzy +msgid "Export templates for this platform are missing/corrupted:" +msgstr "Brakuje eksportu szablonów dla tej platformy:" + +#: editor/project_export.cpp +#, fuzzy msgid "Export With Debug" msgstr "Eksportuj TileSet" #: editor/project_manager.cpp -msgid "Invalid project path, the path must exist!" -msgstr "Niepoprawna Å›cieżka projektu, Å›cieżka musi istnieć!" +#, fuzzy +msgid "The path does not exists." +msgstr "Plik nie istnieje." #: editor/project_manager.cpp #, fuzzy -msgid "Invalid project path, project.godot must not exist." -msgstr "Niepoprawna Å›cieżka projektu, engine.cfg nie może istnieć." +msgid "Please choose a 'project.godot' file." +msgstr "Eksportuj poza folderem projektu!" #: editor/project_manager.cpp -#, fuzzy -msgid "Invalid project path, project.godot must exist." -msgstr "Niepoprawna Å›cieżka projektu, engine.cfg musi istnieć." +msgid "" +"Your project will be created in a non empty folder (you might want to create " +"a new folder)." +msgstr "" + +#: editor/project_manager.cpp +msgid "Please choose a folder that does not contain a 'project.godot' file." +msgstr "" #: editor/project_manager.cpp msgid "Imported Project" msgstr "Zaimportowano projekt" #: editor/project_manager.cpp +msgid " " +msgstr "" + +#: editor/project_manager.cpp +msgid "It would be a good idea to name your project." +msgstr "" + +#: editor/project_manager.cpp msgid "Invalid project path (changed anything?)." msgstr "Niepoprawna Å›cieżka projektu (zmienić cokolwiek?)." #: editor/project_manager.cpp #, fuzzy +msgid "Couldn't get project.godot in project path." +msgstr "Nie można byÅ‚o utworzyć engine.cfg w Å›cieżce projektu." + +#: editor/project_manager.cpp +#, fuzzy +msgid "Couldn't edit project.godot in project path." +msgstr "Nie można byÅ‚o utworzyć engine.cfg w Å›cieżce projektu." + +#: editor/project_manager.cpp +#, fuzzy msgid "Couldn't create project.godot in project path." msgstr "Nie można byÅ‚o utworzyć engine.cfg w Å›cieżce projektu." @@ -6162,38 +5765,49 @@ msgid "The following files failed extraction from package:" msgstr "Nie powiodÅ‚o się wypakowanie z pakietu nastÄ™pujÄ…cych plików:" #: editor/project_manager.cpp +#, fuzzy +msgid "Rename Project" +msgstr "Projekt bez nazwy" + +#: editor/project_manager.cpp +#, fuzzy +msgid "Couldn't get project.godot in the project path." +msgstr "Nie można byÅ‚o utworzyć engine.cfg w Å›cieżce projektu." + +#: editor/project_manager.cpp +msgid "New Game Project" +msgstr "Nowy projekt gry" + +#: editor/project_manager.cpp msgid "Import Existing Project" msgstr "Importuj istniejÄ…cy projekt" #: editor/project_manager.cpp -msgid "Project Path (Must Exist):" -msgstr "Åšcieżka projektu (musi istnieć):" +msgid "Create New Project" +msgstr "Utwórz nowy projekt" + +#: editor/project_manager.cpp +msgid "Install Project:" +msgstr "Zainstaluj projekt:" #: editor/project_manager.cpp msgid "Project Name:" msgstr "Nazwa projektu:" #: editor/project_manager.cpp -msgid "Create New Project" -msgstr "Utwórz nowy projekt" +#, fuzzy +msgid "Create folder" +msgstr "Utwórz katalog" #: editor/project_manager.cpp msgid "Project Path:" msgstr "Åšcieżka do projektu:" #: editor/project_manager.cpp -msgid "Install Project:" -msgstr "Zainstaluj projekt:" - -#: editor/project_manager.cpp msgid "Browse" msgstr "Szukaj" #: editor/project_manager.cpp -msgid "New Game Project" -msgstr "Nowy projekt gry" - -#: editor/project_manager.cpp msgid "That's a BINGO!" msgstr "To BINGO!" @@ -6202,6 +5816,11 @@ msgid "Unnamed Project" msgstr "Projekt bez nazwy" #: editor/project_manager.cpp +#, fuzzy +msgid "Can't open project" +msgstr "Połącz.." + +#: 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?" @@ -6242,10 +5861,6 @@ msgid "Project List" msgstr "Lista projektów" #: editor/project_manager.cpp -msgid "Run" -msgstr "Uruchom" - -#: editor/project_manager.cpp msgid "Scan" msgstr "Skanuj" @@ -6304,17 +5919,14 @@ msgid "Add Input Action Event" msgstr "Dodaj zdarzenie akcji wejÅ›cia" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Meta+" msgstr "Meta+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Shift+" msgstr "Shift+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Alt+" msgstr "Alt+" @@ -6376,7 +5988,7 @@ msgstr "ZmieÅ„" msgid "Joypad Axis Index:" msgstr "OÅ› joysticka" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Axis" msgstr "OÅ›" @@ -6398,31 +6010,31 @@ msgstr "Wyczyść zdarzenie akcji wejÅ›cia" msgid "Add Event" msgstr "Dodaj pusty" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Device" msgstr "UrzÄ…dzenie" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Button" msgstr "Przycisk" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Left Button." msgstr "Lewy przycisk." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Right Button." msgstr "Prawy przycisk." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Middle Button." msgstr "Åšrodkowy przycisk." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Up." msgstr "Kółko myszy w górÄ™." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Down." msgstr "Kółko myszy w dół." @@ -6431,7 +6043,7 @@ msgid "Add Global Property" msgstr "" #: editor/project_settings_editor.cpp -msgid "Select an setting item first!" +msgid "Select a setting item first!" msgstr "" #: editor/project_settings_editor.cpp @@ -6450,6 +6062,16 @@ msgid "Delete Item" msgstr "UsuÅ„" #: editor/project_settings_editor.cpp +#, fuzzy +msgid "Can't contain '/' or ':'" +msgstr "Podłącz do wÄ™zÅ‚a:" + +#: editor/project_settings_editor.cpp +#, fuzzy +msgid "Already existing" +msgstr "Akcja %s już istnieje!" + +#: editor/project_settings_editor.cpp msgid "Error saving settings." msgstr "Błąd zapisu ustawieÅ„." @@ -6602,10 +6224,20 @@ msgstr "Nowy skrypt" #: editor/property_editor.cpp #, fuzzy +msgid "Make Unique" +msgstr "Utwórz KoÅ›ci" + +#: editor/property_editor.cpp +#, fuzzy msgid "Show in File System" msgstr "System plików" #: editor/property_editor.cpp +#, fuzzy +msgid "Convert To %s" +msgstr "Konwertuje na.." + +#: editor/property_editor.cpp msgid "Error loading file: Not a resource!" msgstr "Błąd wczytania pliku: Brak zasobu!" @@ -6646,6 +6278,11 @@ msgstr "Zaznacz Punkty" #: editor/property_selector.cpp #, fuzzy +msgid "Select Virtual Method" +msgstr "Tryb zaznaczenia" + +#: editor/property_selector.cpp +#, fuzzy msgid "Select Method" msgstr "Tryb zaznaczenia" @@ -6674,27 +6311,6 @@ msgstr "Zachowaj globalnÄ… transformacjÄ™" msgid "Reparent" msgstr "ZmieÅ„ nadrzÄ™dny" -#: editor/resources_dock.cpp -msgid "Create New Resource" -msgstr "Utwórz nowy zasób" - -#: editor/resources_dock.cpp -msgid "Open Resource" -msgstr "Otwórz zasób" - -#: editor/resources_dock.cpp -msgid "Save Resource" -msgstr "Zapisz zasób" - -#: editor/resources_dock.cpp -msgid "Resource Tools" -msgstr "NarzÄ™dzia zasobów" - -#: editor/resources_dock.cpp -#, fuzzy -msgid "Make Local" -msgstr "UczyÅ„ lokalnym" - #: editor/run_settings_dialog.cpp msgid "Run Mode:" msgstr "Tryb uruchamiania:" @@ -6827,14 +6443,6 @@ msgid "Sub-Resources:" msgstr "Zasoby:" #: editor/scene_tree_dock.cpp -msgid "Edit Groups" -msgstr "Edytuj grupy" - -#: editor/scene_tree_dock.cpp -msgid "Edit Connections" -msgstr "Edytuj Połączenia" - -#: editor/scene_tree_dock.cpp msgid "Clear Inheritance" msgstr "Wyczyść dziedziczenie" @@ -7028,6 +6636,15 @@ msgid "Invalid base path" msgstr "Niepoprawna Å›cieżka bazowa" #: editor/script_create_dialog.cpp +msgid "Directory of the same name exists" +msgstr "" + +#: editor/script_create_dialog.cpp +#, fuzzy +msgid "File exists, will be reused" +msgstr "Plik istnieje, nadpisać?" + +#: editor/script_create_dialog.cpp msgid "Invalid extension" msgstr "Niepoprawne rozszerzenie" @@ -7073,6 +6690,10 @@ msgid "Load existing script file" msgstr "NastÄ™pny skrypt" #: editor/script_create_dialog.cpp +msgid "Language" +msgstr "JÄ™zyk" + +#: editor/script_create_dialog.cpp #, fuzzy msgid "Inherits" msgstr "Dziedziczy:" @@ -7118,6 +6739,10 @@ msgid "Function:" msgstr "Funkcja:" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Errors" msgstr "Błędy" @@ -7198,6 +6823,10 @@ msgid "Type" msgstr "Typ" #: editor/script_editor_debugger.cpp +msgid "Format" +msgstr "Format" + +#: editor/script_editor_debugger.cpp msgid "Usage" msgstr "Użycie" @@ -7274,12 +6903,30 @@ msgstr "" msgid "Change Probe Extents" msgstr "ZmieÅ„ rozmiar Box Shape" +#: modules/gdnative/gd_native_library_editor.cpp +#, fuzzy +msgid "Library" +msgstr "MeshLibrary..." + +#: modules/gdnative/gd_native_library_editor.cpp +#, fuzzy +msgid "Status" +msgstr "Status:" + +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Libraries: " +msgstr "" + +#: modules/gdnative/register_types.cpp +msgid "GDNative" +msgstr "" + #: 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Å‚ych TYPE_*." -#: modules/gdscript/gd_functions.cpp +#: modules/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "" @@ -7333,10 +6980,6 @@ msgid "GridMap Duplicate Selection" msgstr "Duplikuj zaznaczone" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Paint" -msgstr "" - -#: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy msgid "Snap View" msgstr "Widok z góry" @@ -7440,13 +7083,8 @@ msgstr "Ustawienia przyciÄ…gania" msgid "Pick Distance:" msgstr "Instancja:" -#: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy -msgid "Tiles" -msgstr "Plik" - -#: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Areas" +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "Builds" msgstr "" #: modules/visual_script/visual_script.cpp @@ -7654,11 +7292,19 @@ msgid "Return" msgstr "Zwraca:" #: modules/visual_script/visual_script_editor.cpp +msgid "Call" +msgstr "WywoÅ‚anie" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Get" msgstr "Ustaw" #: modules/visual_script/visual_script_editor.cpp +msgid "Script already has function '%s'" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Change Input Value" msgstr "ZmieÅ„ Wartość DomyÅ›lnÄ…" @@ -8073,6 +7719,12 @@ msgstr "" "Zasób SpriteFrames musi być ustawiony jako wartość wÅ‚aÅ›ciwoÅ›ci 'Frames' żeby " "AnimatedSprite3D wyÅ›wietlaÅ‚ klatki." +#: scene/3d/vehicle_body.cpp +msgid "" +"VehicleWheel serves to provide a wheel system to a VehicleBody. Please use " +"it as a child of a VehicleBody." +msgstr "" + #: scene/gui/color_picker.cpp #, fuzzy msgid "Raw Mode" @@ -8083,6 +7735,10 @@ msgid "Add current color as a preset" msgstr "" #: scene/gui/dialogs.cpp +msgid "Cancel" +msgstr "Anuluj" + +#: scene/gui/dialogs.cpp msgid "Alert!" msgstr "Alarm!" @@ -8090,10 +7746,6 @@ msgstr "Alarm!" msgid "Please Confirm..." msgstr "ProszÄ™ potwierdzić..." -#: scene/gui/input_action.cpp -msgid "Ctrl+" -msgstr "Ctrl+" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -8133,6 +7785,591 @@ msgstr "" "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 +msgid "Error initializing FreeType." +msgstr "Błąd przy inicjalizacji FreeType." + +#: scene/resources/dynamic_font.cpp +msgid "Unknown font format." +msgstr "Nieznany format fontu." + +#: scene/resources/dynamic_font.cpp +msgid "Error loading font." +msgstr "Błąd Å‚adowania fonta." + +#: scene/resources/dynamic_font.cpp +msgid "Invalid font size." +msgstr "Niepoprawny rozmiar fonta." + +#~ msgid "Method List For '%s':" +#~ msgstr "Lista metod '%s':" + +#~ msgid "Arguments:" +#~ msgstr "Argumenty:" + +#~ msgid "Return:" +#~ msgstr "Zwraca:" + +#~ msgid "Added:" +#~ msgstr "Dodane:" + +#~ msgid "Removed:" +#~ msgstr "UsuniÄ™te:" + +#~ msgid "Error saving atlas:" +#~ msgstr "Błąd podczas zapisywania atlasu:" + +#~ msgid "Could not save atlas subtexture:" +#~ msgstr "Nie udaÅ‚o siÄ™ zapisać tekstury atlasu:" + +#~ msgid "Exporting for %s" +#~ msgstr "Exportowanie do %s" + +#~ msgid "Setting Up.." +#~ msgstr "Konfigurowanie .." + +#~ msgid "Error loading scene." +#~ msgstr "Błąd Å‚adowania sceny." + +#~ msgid "Re-Import" +#~ msgstr "Importuj ponownie" + +#~ msgid "Please wait for scan to complete." +#~ msgstr "ProszÄ™ poczekać na zakoÅ„czenie skanowania." + +#~ msgid "Current scene must be saved to re-import." +#~ msgstr "Bieżąca scena musi być zapisana aby ponownie zaimportować." + +#~ msgid "Save & Re-Import" +#~ msgstr "Zapisz i importuj ponownie" + +#~ msgid "Re-Importing" +#~ msgstr "Prze-Importowanie" + +#~ msgid "Re-Import Changed Resources" +#~ msgstr "Zaimportuj ponownie zmienione zasoby" + +#~ msgid "Loading Export Templates" +#~ msgstr "Wczytywanie szablonów eksportu" + +#, fuzzy +#~ msgid "" +#~ "\n" +#~ "Status: Needs Re-Import" +#~ msgstr "Zapisz i importuj ponownie" + +#, fuzzy +#~ msgid "Same source and destination files, doing nothing." +#~ msgstr "Pliki źródÅ‚owe i docelowe sÄ… te same, nie podjÄ™to żadnej akcji." + +#~ 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." + +#, fuzzy +#~ msgid "Can't move directories to within themselves." +#~ msgstr "Nie możesz przenieść danego katalogu do jego wnÄ™trza." + +#, fuzzy +#~ msgid "Error moving file:\n" +#~ msgstr "Błąd wczytywania obrazu:" + +#~ msgid "Pick New Name and Location For:" +#~ msgstr "Wybierz nowÄ… nazwÄ™ i lokacjÄ™ dla:" + +#~ msgid "No files selected!" +#~ msgstr "Nie wybrano pliku!" + +#~ msgid "Info" +#~ msgstr "Informacje" + +#~ msgid "Re-Import.." +#~ msgstr "Importuj ponownie.." + +#~ msgid "No bit masks to import!" +#~ msgstr "Brak mask bitowych do zaimportowania!" + +#~ msgid "Target path is empty." +#~ msgstr "Docelowa Å›cieżka jest pusta." + +#~ msgid "Target path must be a complete resource path." +#~ msgstr "Åšcieżka docelowa musi być bezwzglÄ™dna." + +#~ msgid "Target path must exist." +#~ msgstr "Docelowa Å›cieżka musi istnieć." + +#~ msgid "Save path is empty!" +#~ msgstr "Åšcieżka zapisu jest pusta!" + +#~ msgid "Import BitMasks" +#~ msgstr "Importuj BitMasks" + +#~ msgid "Source Texture(s):" +#~ msgstr "ŹródÅ‚o tekstury:" + +#~ msgid "Target Path:" +#~ msgstr "Åšcieżka docelowa:" + +#~ msgid "Accept" +#~ msgstr "Akceptuj" + +#~ msgid "Bit Mask" +#~ msgstr "BitMask" + +#~ msgid "No source font file!" +#~ msgstr "Brak pliku źródÅ‚owego fontu!" + +#~ msgid "No target font resource!" +#~ msgstr "Brak docelowego zasobu fontu!" + +#, fuzzy +#~ msgid "" +#~ "Invalid file extension.\n" +#~ "Please use .font." +#~ msgstr "" +#~ "Błędne rozszerzenie pliku.\n" +#~ "ProszÄ™ użyć .fnt." + +#~ msgid "Couldn't save font." +#~ msgstr "Nie udaÅ‚o siÄ™ zapisać fontu." + +#~ msgid "Source Font:" +#~ msgstr "ŹródÅ‚o fontu:" + +#~ msgid "Source Font Size:" +#~ msgstr "Wielkość oryginalna fontu:" + +#~ msgid "Dest Resource:" +#~ msgstr "Zasób docelowy:" + +#~ msgid "The quick brown fox jumps over the lazy dog." +#~ msgstr "ŻżŹźĆćŃńĄąÅłĘęÓó." + +#~ msgid "Test:" +#~ msgstr "Test:" + +#~ msgid "Options:" +#~ msgstr "Opcje:" + +#~ msgid "Font Import" +#~ msgstr "Import fontu" + +#~ msgid "" +#~ "This file is already a Godot font file, please supply a BMFont type file " +#~ "instead." +#~ msgstr "" +#~ "Ten plik jest już plikiem fontu Godot, proszÄ™ podać plik typu BMFont." + +#~ msgid "Failed opening as BMFont file." +#~ msgstr "Nie powiodÅ‚o siÄ™, otwarcie pliku jako BMFont." + +#~ msgid "Invalid font custom source." +#~ msgstr "Nie rozpoznano typu fontu." + +#~ msgid "No meshes to import!" +#~ msgstr "Brak siatek do zaimportowania!" + +#~ msgid "Single Mesh Import" +#~ msgstr "Importuj Mesh" + +#~ msgid "Source Mesh(es):" +#~ msgstr "ŹródÅ‚o Mesh:" + +#~ msgid "Surface %d" +#~ msgstr "Powierzchnia %d" + +#~ msgid "No samples to import!" +#~ msgstr "Brak sampli do importu!" + +#~ msgid "Import Audio Samples" +#~ msgstr "Importuj pliki dźwiÄ™kowe" + +#~ msgid "Source Sample(s):" +#~ msgstr "ŹródÅ‚o dźwiÄ™ku:" + +#~ msgid "Audio Sample" +#~ msgstr "DźwiÄ™k" + +#~ msgid "New Clip" +#~ msgstr "Nowy klip" + +#~ msgid "Flags" +#~ msgstr "Flagi" + +#~ msgid "Bake FPS:" +#~ msgstr "Wypal FPS:" + +#~ msgid "Optimizer" +#~ msgstr "Optymalizator" + +#~ msgid "Max Linear Error" +#~ msgstr "Maksymalny błąd liniowy" + +#~ msgid "Max Angular Error" +#~ msgstr "Maksymalny błąd kÄ…towy" + +#~ msgid "Max Angle" +#~ msgstr "Maksymalny KÄ…t" + +#~ msgid "Clips" +#~ msgstr "Klipy" + +#~ msgid "Start(s)" +#~ msgstr "Start" + +#~ msgid "End(s)" +#~ msgstr "Koniec" + +#~ msgid "Filters" +#~ msgstr "Filtry" + +#~ msgid "Source path is empty." +#~ msgstr "Åšcieżka źródÅ‚owa jest pusta." + +#~ msgid "Couldn't load post-import script." +#~ msgstr "Nie udaÅ‚o siÄ™ wczytać skryptu po imporcie." + +#~ msgid "Invalid/broken script for post-import." +#~ msgstr "Niepoprawny/uszkodzony skrypt post-importu." + +#~ msgid "Error importing scene." +#~ msgstr "Błąd podczas wczytywania sceny." + +#~ msgid "Import 3D Scene" +#~ msgstr "Zaimportuj Scene 3D" + +#~ msgid "Source Scene:" +#~ msgstr "Scena źródÅ‚owa:" + +#~ msgid "Same as Target Scene" +#~ msgstr "Taki sam jak scena docelowa" + +#~ msgid "Shared" +#~ msgstr "Współdzielone" + +#~ msgid "Target Texture Folder:" +#~ msgstr "Docelowy folder tekstur:" + +#~ msgid "Post-Process Script:" +#~ msgstr "Skrypt do wywoÅ‚ania po imporcie:" + +#~ msgid "Custom Root Node Type:" +#~ msgstr "Niestandardowy typ wÄ™zÅ‚a głównego:" + +#~ msgid "Auto" +#~ msgstr "Automatyczny" + +#, fuzzy +#~ msgid "Root Node Name:" +#~ msgstr "Nazwa wÄ™zÅ‚a:" + +#~ msgid "The Following Files are Missing:" +#~ msgstr "Brakuje nastÄ™pujÄ…cych plików:" + +#~ msgid "Import Anyway" +#~ msgstr "Zaimportuj Pomimo" + +#~ msgid "Import & Open" +#~ msgstr "Importuj i Otwórz" + +#~ msgid "Edited scene has not been saved, open imported scene anyway?" +#~ msgstr "" +#~ "Edytowana sceny nie zostaÅ‚a zapisana. Otworzyć importowanÄ… scenÄ™ mimo " +#~ "tego?" + +#~ msgid "Import Image:" +#~ msgstr "Zaimportuj Obraz:" + +#~ msgid "Couldn't localize path: %s (already local)" +#~ msgstr "Nie można zlokalizować Å›cieżki: %s (już jest lokalna)" + +#~ msgid "3D Scene Animation" +#~ msgstr "Scena animacji 3D" + +#~ msgid "Uncompressed" +#~ msgstr "Nieskompresowany" + +#~ msgid "Compress Lossless (PNG)" +#~ msgstr "Bezstratna Kompresja (PNG)" + +#~ msgid "Compress Lossy (WebP)" +#~ msgstr "Kompresja Stratna (WebP)" + +#~ msgid "Compress (VRAM)" +#~ msgstr "Skompresuj (VRAM)" + +#~ msgid "Texture Format" +#~ msgstr "Format Tekstury" + +#~ msgid "Texture Compression Quality (WebP):" +#~ msgstr "Jakość Kompresji Textury (WebP):" + +#~ msgid "Texture Options" +#~ msgstr "Opcje Tekstury" + +#~ msgid "Please specify some files!" +#~ msgstr "ProszÄ™ podać kilka plików !" + +#~ msgid "At least one file needed for Atlas." +#~ msgstr "Co najmniej jeden plik potrzebny do \"Atlas'u\"." + +#~ msgid "Error importing:" +#~ msgstr "Błąd importowania:" + +#~ msgid "Only one file is required for large texture." +#~ msgstr "Tylko jeden plik jest wymagany dla dużych tekstur." + +#~ msgid "Max Texture Size:" +#~ msgstr "Maksymalny rozmiar tekstury:" + +#~ msgid "Import Textures for Atlas (2D)" +#~ msgstr "Zaimportuj Tekstury z \"Atlas'u\" (2D)" + +#~ msgid "Cell Size:" +#~ msgstr "Rozmiar komórki:" + +#~ msgid "Large Texture" +#~ msgstr "Duża Tekstura" + +#~ msgid "Import Large Textures (2D)" +#~ msgstr "Zaimportuj Duże Tekstury (2D)" + +#~ msgid "Source Texture" +#~ msgstr "ŹródÅ‚owa Tekstura" + +#~ msgid "Base Atlas Texture" +#~ msgstr "Bazowa tekstura \"Atlas'u\"" + +#~ msgid "Source Texture(s)" +#~ msgstr "Tekstura(y) źródÅ‚owe" + +#~ msgid "Import Textures for 2D" +#~ msgstr "Importuj tekstury dla 2D" + +#~ msgid "Import Textures for 3D" +#~ msgstr "Importuj tekstury dla 3D" + +#~ msgid "Import Textures" +#~ msgstr "Zaimportuj Tekstury" + +#~ msgid "2D Texture" +#~ msgstr "Tekstura 2D" + +#~ msgid "3D Texture" +#~ msgstr "Tekstura 3D" + +#~ msgid "Atlas Texture" +#~ msgstr "Tekstura \"Atlas'u\"" + +#~ 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." + +#~ msgid "Crop empty space." +#~ msgstr "Przytnij pusty obszar." + +#~ msgid "Texture" +#~ msgstr "Tekstura" + +#~ msgid "Import Large Texture" +#~ msgstr "Importuj dużą teksturÄ™" + +#~ msgid "Load Source Image" +#~ msgstr "Wczytaj obrazek źródÅ‚owy" + +#~ msgid "Slicing" +#~ msgstr "Przycinanie" + +#~ msgid "Saving" +#~ msgstr "Zapisywanie" + +#~ msgid "Couldn't save large texture:" +#~ msgstr "Nie udaÅ‚o siÄ™ zapisać dużej tekstury:" + +#~ msgid "Build Atlas For:" +#~ msgstr "Zbuduj Atlas dla:" + +#~ msgid "Loading Image:" +#~ msgstr "Åadowanie obrazu:" + +#~ msgid "Couldn't load image:" +#~ msgstr "Nie można zaÅ‚adować obrazu:" + +#~ msgid "Converting Images" +#~ msgstr "Konwersja obrazków" + +#~ msgid "Cropping Images" +#~ msgstr "Przycinanie obrazków" + +#~ msgid "Couldn't save atlas image:" +#~ msgstr "Nie można zapisać obrazu atlasu:" + +#, fuzzy +#~ msgid "Couldn't save converted texture:" +#~ msgstr "Nie można zapisać zkonwertowanej tekstury:" + +#~ msgid "Invalid source!" +#~ msgstr "Wadliwe źródÅ‚o!" + +#~ msgid "Invalid translation source!" +#~ msgstr "NieprawidÅ‚owe źródÅ‚o tÅ‚umaczenia!" + +#~ msgid "Column" +#~ msgstr "Kolumna" + +#~ msgid "No items to import!" +#~ msgstr "Brak elementów do importu!" + +#~ msgid "No target path!" +#~ msgstr "Brak Å›cieżki docelowej!" + +#~ msgid "Import Translations" +#~ msgstr "Importuj tÅ‚umaczenia" + +#~ msgid "Couldn't import!" +#~ msgstr "Nie można zaimportować!" + +#~ msgid "Import Translation" +#~ msgstr "Importuj tÅ‚umaczenie" + +#~ msgid "Source CSV:" +#~ msgstr "ŹródÅ‚owy CSV:" + +#~ msgid "Ignore First Row" +#~ msgstr "Ignoruj pierwszy wiersz" + +#~ msgid "Compress" +#~ msgstr "Skompresuj" + +#, fuzzy +#~ msgid "Add to Project (project.godot)" +#~ msgstr "Dodaj do projektu (engine.cfg)" + +#~ msgid "Import Languages:" +#~ msgstr "Zaimportuj JÄ™zyk:" + +#~ msgid "Translation" +#~ msgstr "TÅ‚umaczenie" + +#~ msgid "Making BVH" +#~ msgstr "Tworzenie BVH" + +#~ msgid "Zoom (%):" +#~ msgstr "PowiÄ™kszenie (%):" + +#~ msgid "Skeleton.." +#~ msgstr "Szkielet.." + +#~ msgid "Zoom Reset" +#~ msgstr "Wyzeruj przybliżenie" + +#~ msgid "Zoom Set.." +#~ msgstr "Ustaw przybliżenie..." + +#~ msgid "Set a Value" +#~ msgstr "Ustaw Wartość" + +#~ msgid "Snap (Pixels):" +#~ msgstr "PrzyciÄ…ganie (piksele):" + +#~ msgid "Parse BBCode" +#~ msgstr "Parsuj BBCode" + +#~ msgid "Length:" +#~ msgstr "DÅ‚ugość:" + +#~ msgid "Open Sample File(s)" +#~ msgstr "Otwórz plik(i) sampli" + +#~ msgid "Add Sample" +#~ msgstr "Dodaj sampel" + +#~ msgid "Rename Sample" +#~ msgstr "ZmieÅ„ nazwÄ™ sampla" + +#~ msgid "Delete Sample" +#~ msgstr "UsuÅ„ sampel" + +#~ msgid "16 Bits" +#~ msgstr "16 Bits" + +#~ msgid "8 Bits" +#~ msgstr "8 Bits" + +#~ msgid "Stereo" +#~ msgstr "Stereo" + +#~ msgid "Mono" +#~ msgstr "Mono" + +#~ msgid "Pitch" +#~ msgstr "Wysokość" + +#~ msgid "Window" +#~ msgstr "Okno" + +#~ msgid "Move Right" +#~ msgstr "PrzesuÅ„ w prawo" + +#~ msgid "Scaling to %s%%." +#~ msgstr "Skalowanie do %s%%." + +#~ msgid "Up" +#~ msgstr "Góra" + +#~ msgid "Down" +#~ msgstr "Dół" + +#~ msgid "Bucket" +#~ msgstr "Wiadro" + +#~ msgid "Invalid project path, the path must exist!" +#~ msgstr "Niepoprawna Å›cieżka projektu, Å›cieżka musi istnieć!" + +#, fuzzy +#~ msgid "Invalid project path, project.godot must not exist." +#~ msgstr "Niepoprawna Å›cieżka projektu, engine.cfg nie może istnieć." + +#, fuzzy +#~ msgid "Invalid project path, project.godot must exist." +#~ msgstr "Niepoprawna Å›cieżka projektu, engine.cfg musi istnieć." + +#~ msgid "Project Path (Must Exist):" +#~ msgstr "Åšcieżka projektu (musi istnieć):" + +#~ msgid "Create New Resource" +#~ msgstr "Utwórz nowy zasób" + +#~ msgid "Open Resource" +#~ msgstr "Otwórz zasób" + +#~ msgid "Save Resource" +#~ msgstr "Zapisz zasób" + +#~ msgid "Resource Tools" +#~ msgstr "NarzÄ™dzia zasobów" + +#, fuzzy +#~ msgid "Make Local" +#~ msgstr "UczyÅ„ lokalnym" + +#~ msgid "Edit Groups" +#~ msgstr "Edytuj grupy" + +#~ msgid "Edit Connections" +#~ msgstr "Edytuj Połączenia" + +#, fuzzy +#~ msgid "Tiles" +#~ msgstr "Plik" + +#~ msgid "Ctrl+" +#~ msgstr "Ctrl+" + #~ msgid "Close scene? (Unsaved changes will be lost)" #~ msgstr "Zamknąć scenÄ™? (Niezapisane zmiany zostanÄ… utracone)" @@ -8264,9 +8501,6 @@ msgstr "" #~ msgid "Install Export Templates" #~ msgstr "Zainstaluj Szablony Eksportu" -#~ msgid "Please export outside the project folder!" -#~ msgstr "Eksportuj poza folderem projektu!" - #~ msgid "Error exporting project!" #~ msgstr "Błąd przy eksporcie projektu!" @@ -8304,18 +8538,12 @@ msgstr "" #~ msgid "Include" #~ msgstr "Zawiera" -#~ msgid "Change Image Group" -#~ msgstr "ZmieÅ„ grupÄ™ obrazków" - #~ msgid "Group name can't be empty!" #~ msgstr "Nazwa grupy nie może być pusta!" #~ msgid "Invalid character in group name!" #~ msgstr "NieprawidÅ‚owy znak w nazwie grupy!" -#~ msgid "Group name already exists!" -#~ msgstr "Nazwa grupy już istnieje!" - #~ msgid "Add Image Group" #~ msgstr "Dodaj grupÄ™ obrazków" diff --git a/editor/translations/pr.po b/editor/translations/pr.po index 418072c117..53881a76de 100644 --- a/editor/translations/pr.po +++ b/editor/translations/pr.po @@ -191,10 +191,9 @@ msgid "Create %d NEW tracks and insert keys?" msgstr "" #: editor/animation_editor.cpp editor/create_dialog.cpp -#: editor/editor_audio_buses.cpp +#: editor/editor_audio_buses.cpp editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp #: editor/plugins/mesh_instance_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp editor/project_manager.cpp #: editor/script_create_dialog.cpp msgid "Create" @@ -356,261 +355,6 @@ msgstr "" msgid "Change Array Value" msgstr "" -#: editor/asset_library_editor_plugin.cpp -msgid "Free" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp -msgid "Version:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Contents:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "View Files" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_help.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp -msgid "Description:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -#: editor/project_manager.cpp -msgid "Install" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp -#: editor/connections_dialog.cpp editor/export_template_manager.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -#: editor/project_settings_editor.cpp editor/property_editor.cpp -#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Close" -msgstr "Close" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve hostname:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Connection error, please try again." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't connect." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't connect to host:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response from host:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Request failed, return code:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Req. Failed." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Request failed, too many redirects" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Redirect Loop." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Bad download hash, assuming file has been tampered with." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Expected:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Got:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed sha256 hash check" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Asset Download Error:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -msgid "Success!" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Fetching:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Resolving.." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Error making request" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Idle" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Retry" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Download Error" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Download for this asset is already in progress!" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "first" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "prev" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "next" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "last" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "All" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/property_selector.cpp editor/quick_open.cpp -#: editor/settings_config_dialog.cpp -msgid "Search:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Search" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/project_manager.cpp -msgid "Import" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Plugins" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Sort:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Reverse" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Category:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Site:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Official" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -msgid "Community" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Testing" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Assets ZIP File" -msgstr "" - -#: editor/call_dialog.cpp -msgid "Method List For '%s':" -msgstr "" - -#: editor/call_dialog.cpp modules/visual_script/visual_script_editor.cpp -msgid "Call" -msgstr "Call" - -#: editor/call_dialog.cpp -msgid "Method List:" -msgstr "" - -#: editor/call_dialog.cpp -msgid "Arguments:" -msgstr "" - -#: editor/call_dialog.cpp -msgid "Return:" -msgstr "" - #: editor/code_editor.cpp msgid "Go to Line" msgstr "" @@ -647,6 +391,14 @@ msgstr "" msgid "Selection Only" msgstr "" +#: editor/code_editor.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp +msgid "Search" +msgstr "" + #: editor/code_editor.cpp editor/editor_help.cpp msgid "Find" msgstr "" @@ -679,11 +431,11 @@ msgstr "" msgid "Skip" msgstr "" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom In" msgstr "" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom Out" msgstr "" @@ -750,6 +502,20 @@ msgstr "" msgid "Oneshot" msgstr "" +#: editor/connections_dialog.cpp editor/dependency_editor.cpp +#: editor/export_template_manager.cpp +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Close" +msgstr "Close" + #: editor/connections_dialog.cpp msgid "Connect" msgstr "" @@ -775,7 +541,7 @@ msgstr "" msgid "Disconnect" msgstr "" -#: editor/connections_dialog.cpp editor/node_dock.cpp +#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" msgstr "" @@ -792,12 +558,25 @@ msgstr "" msgid "Recent:" msgstr "" +#: editor/create_dialog.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp +#: editor/quick_open.cpp editor/settings_config_dialog.cpp +msgid "Search:" +msgstr "" + #: editor/create_dialog.cpp editor/editor_help.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp #: editor/quick_open.cpp msgid "Matches:" msgstr "" +#: editor/create_dialog.cpp editor/editor_help.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp +#: editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "" + #: editor/dependency_editor.cpp msgid "Search Replacement For:" msgstr "" @@ -853,6 +632,10 @@ msgid "Owners Of:" msgstr "" #: editor/dependency_editor.cpp +msgid "Remove selected files from the project? (no undo)" +msgstr "" + +#: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" @@ -860,7 +643,7 @@ msgid "" msgstr "" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (no undo)" +msgid "Cannot remove:\n" msgstr "" #: editor/dependency_editor.cpp @@ -927,10 +710,6 @@ msgid "Godot Engine contributors" msgstr "" #: editor/editor_about.cpp -msgid "Authors" -msgstr "" - -#: editor/editor_about.cpp msgid "Project Founders" msgstr "" @@ -947,6 +726,38 @@ msgid "Developers" msgstr "" #: editor/editor_about.cpp +msgid "Authors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Platinum Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Mini Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Silver Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Bronze Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Donors" +msgstr "" + +#: editor/editor_about.cpp msgid "License" msgstr "" @@ -987,6 +798,16 @@ msgid "Package Installed Successfully!" msgstr "" #: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Success!" +msgstr "" + +#: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp +msgid "Install" +msgstr "" + +#: editor/editor_asset_installer.cpp msgid "Package Installer" msgstr "" @@ -1037,10 +858,6 @@ msgid "Audio Bus, Drag and Drop to rearrange." msgstr "" #: editor/editor_audio_buses.cpp -msgid "Bus options" -msgstr "" - -#: editor/editor_audio_buses.cpp msgid "Solo" msgstr "" @@ -1052,12 +869,20 @@ msgstr "" msgid "Bypass" msgstr "" +#: editor/editor_audio_buses.cpp +msgid "Bus options" +msgstr "" + #: editor/editor_audio_buses.cpp editor/plugins/tile_map_editor_plugin.cpp #: editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "" #: editor/editor_audio_buses.cpp +msgid "Reset Volume" +msgstr "" + +#: editor/editor_audio_buses.cpp #, fuzzy msgid "Delete Effect" msgstr "Yar, Blow th' Selected Down!" @@ -1079,6 +904,10 @@ msgid "Duplicate Audio Bus" msgstr "" #: editor/editor_audio_buses.cpp +msgid "Reset Bus Volume" +msgstr "" + +#: editor/editor_audio_buses.cpp msgid "Move Audio Bus" msgstr "" @@ -1110,7 +939,8 @@ msgstr "" msgid "Create a new Bus Layout." msgstr "" -#: editor/editor_audio_buses.cpp editor/script_create_dialog.cpp +#: editor/editor_audio_buses.cpp editor/property_editor.cpp +#: editor/script_create_dialog.cpp msgid "Load" msgstr "" @@ -1200,7 +1030,7 @@ msgid "Rearrange Autoloads" msgstr "" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp scene/gui/file_dialog.cpp +#: scene/gui/file_dialog.cpp msgid "Path:" msgstr "" @@ -1208,9 +1038,7 @@ msgstr "" msgid "Node Name:" msgstr "" -#: editor/editor_autoload_settings.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp editor/project_manager.cpp +#: editor/editor_autoload_settings.cpp editor/project_manager.cpp msgid "Name" msgstr "" @@ -1243,18 +1071,19 @@ msgid "Choose a Directory" msgstr "" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Create Folder" msgstr "" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: editor/editor_plugin_settings.cpp editor/plugins/theme_editor_plugin.cpp -#: editor/project_export.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp +#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp +#: scene/gui/file_dialog.cpp msgid "Name:" msgstr "" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Could not create folder." msgstr "" @@ -1274,30 +1103,6 @@ msgstr "" msgid "Template file not found:\n" msgstr "" -#: editor/editor_export.cpp -msgid "Added:" -msgstr "" - -#: editor/editor_export.cpp -msgid "Removed:" -msgstr "" - -#: editor/editor_export.cpp -msgid "Error saving atlas:" -msgstr "" - -#: editor/editor_export.cpp -msgid "Could not save atlas subtexture:" -msgstr "" - -#: editor/editor_export.cpp -msgid "Exporting for %s" -msgstr "" - -#: editor/editor_export.cpp -msgid "Setting Up.." -msgstr "" - #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "" @@ -1382,6 +1187,10 @@ msgstr "" msgid "Move Favorite Down" msgstr "" +#: editor/editor_file_dialog.cpp +msgid "Go to parent folder" +msgstr "" + #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Directories & Files:" msgstr "" @@ -1424,6 +1233,10 @@ msgstr "" msgid "Search Classes" msgstr "" +#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +msgid "Top" +msgstr "" + #: editor/editor_help.cpp editor/property_editor.cpp msgid "Class:" msgstr "" @@ -1440,15 +1253,28 @@ msgstr "" msgid "Brief Description:" msgstr "" +#: editor/editor_help.cpp +#, fuzzy +msgid "Members" +msgstr "th' Members:" + #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "th' Members:" #: editor/editor_help.cpp +msgid "Public Methods" +msgstr "" + +#: editor/editor_help.cpp msgid "Public Methods:" msgstr "" #: editor/editor_help.cpp +msgid "GUI Theme Items" +msgstr "" + +#: editor/editor_help.cpp msgid "GUI Theme Items:" msgstr "" @@ -1458,6 +1284,11 @@ msgstr "Yer signals:" #: editor/editor_help.cpp #, fuzzy +msgid "Enumerations" +msgstr "Yer functions:" + +#: editor/editor_help.cpp +#, fuzzy msgid "Enumerations:" msgstr "Yer functions:" @@ -1466,18 +1297,46 @@ msgid "enum " msgstr "" #: editor/editor_help.cpp +msgid "Constants" +msgstr "" + +#: editor/editor_help.cpp msgid "Constants:" msgstr "" #: editor/editor_help.cpp +msgid "Description" +msgstr "" + +#: editor/editor_help.cpp +msgid "Properties" +msgstr "" + +#: editor/editor_help.cpp msgid "Property Description:" msgstr "" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this property. Please help us by " +"[color=$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp +msgid "Methods" +msgstr "" + +#: editor/editor_help.cpp msgid "Method Description:" msgstr "" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this method. Please help us by [color=" +"$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp msgid "Search Text" msgstr "" @@ -1486,24 +1345,21 @@ msgid "Output:" msgstr "" #: editor/editor_log.cpp editor/plugins/animation_tree_editor_plugin.cpp -#: editor/plugins/rich_text_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_editor_debugger.cpp scene/gui/line_edit.cpp -#: scene/gui/text_edit.cpp +#: editor/property_editor.cpp editor/script_editor_debugger.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Clear" msgstr "" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Error saving resource!" msgstr "" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Save Resource As.." msgstr "" -#: editor/editor_node.cpp editor/export_template_manager.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "I see.." msgstr "" @@ -1520,6 +1376,28 @@ msgid "Error while saving." msgstr "" #: editor/editor_node.cpp +msgid "Can't open '%s'." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Error while parsing '%s'." +msgstr "Blimey! I can't make th' signature object!" + +#: editor/editor_node.cpp +msgid "Unexpected end of file '%s'." +msgstr "" + +#: editor/editor_node.cpp +msgid "Missing '%s' or its dependencies." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Error while loading '%s'." +msgstr "Blimey! I can't make th' signature object!" + +#: editor/editor_node.cpp msgid "Saving Scene" msgstr "" @@ -1577,6 +1455,33 @@ msgid "Restored default layout to base settings." msgstr "" #: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was imported, so it's not editable.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was instanced or inherited.\n" +"Changes to it will not be kept when saving the current scene." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource was imported, so it's not editable. Change its settings in the " +"import panel and then re-import." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This scene was imported, so changes to it will not be kept.\n" +"Instancing it or inheriting will allow making changes to it.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp msgid "Copy Params" msgstr "" @@ -1738,6 +1643,12 @@ msgid "Save changes the following scene(s) before opening Project Manager?" msgstr "" #: editor/editor_node.cpp +msgid "" +"This option is deprecated. Situations where refresh must be forced are now " +"considered a bug. Please report." +msgstr "" + +#: editor/editor_node.cpp msgid "Pick a Main Scene" msgstr "" @@ -1764,7 +1675,7 @@ msgid "" msgstr "" #: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Ugh" msgstr "" @@ -1775,11 +1686,11 @@ msgid "" msgstr "" #: editor/editor_node.cpp -msgid "Error loading scene." +msgid "Scene '%s' has broken dependencies:" msgstr "" #: editor/editor_node.cpp -msgid "Scene '%s' has broken dependencies:" +msgid "Clear Recent Scenes" msgstr "" #: editor/editor_node.cpp @@ -1815,7 +1726,7 @@ msgstr "" msgid "Toggle distraction-free mode." msgstr "" -#: editor/editor_node.cpp editor/io_plugins/editor_scene_import_plugin.cpp +#: editor/editor_node.cpp msgid "Scene" msgstr "" @@ -2035,6 +1946,10 @@ msgstr "" msgid "Issue Tracker" msgstr "" +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +msgid "Community" +msgstr "" + #: editor/editor_node.cpp msgid "About" msgstr "" @@ -2043,7 +1958,7 @@ msgstr "" msgid "Play the project." msgstr "" -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Play" msgstr "" @@ -2059,7 +1974,7 @@ msgstr "" msgid "Stop the scene." msgstr "" -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Stop" msgstr "" @@ -2132,6 +2047,15 @@ msgid "Object properties." msgstr "" #: editor/editor_node.cpp +msgid "Changes may be lost!" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Import" +msgstr "" + +#: editor/editor_node.cpp msgid "FileSystem" msgstr "" @@ -2147,14 +2071,6 @@ msgstr "" msgid "Don't Save" msgstr "" -#: editor/editor_node.cpp editor/editor_reimport_dialog.cpp -msgid "Re-Import" -msgstr "" - -#: editor/editor_node.cpp editor/editor_plugin_settings.cpp -msgid "Update" -msgstr "" - #: editor/editor_node.cpp msgid "Import Templates From ZIP File" msgstr "" @@ -2215,11 +2131,28 @@ msgstr "" msgid "Open the previous Editor" msgstr "" +#: editor/editor_plugin.cpp +msgid "Creating Mesh Previews" +msgstr "" + +#: editor/editor_plugin.cpp +msgid "Thumbnail.." +msgstr "" + #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" msgstr "" #: editor/editor_plugin_settings.cpp +msgid "Update" +msgstr "" + +#: editor/editor_plugin_settings.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Version:" +msgstr "" + +#: editor/editor_plugin_settings.cpp msgid "Author:" msgstr "" @@ -2271,26 +2204,6 @@ msgstr "" msgid "Frame #:" msgstr "" -#: editor/editor_reimport_dialog.cpp -msgid "Please wait for scan to complete." -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Current scene must be saved to re-import." -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Save & Re-Import" -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Importing" -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Import Changed Resources" -msgstr "" - #: editor/editor_run_native.cpp msgid "Select device from the list" msgstr "" @@ -2401,10 +2314,6 @@ msgid "Importing:" msgstr "" #: editor/export_template_manager.cpp -msgid "Loading Export Templates" -msgstr "" - -#: editor/export_template_manager.cpp msgid "Current Version:" msgstr "" @@ -2438,9 +2347,17 @@ msgid "Cannot navigate to '" msgstr "" #: editor/filesystem_dock.cpp +msgid "View items as a grid of thumbnails" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "View items as a list" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "" "\n" -"Status: Needs Re-Import" +"Status: Import of file failed. Please fix file and reimport manually." msgstr "" #: editor/filesystem_dock.cpp @@ -2450,87 +2367,88 @@ msgid "" msgstr "" #: editor/filesystem_dock.cpp -msgid "Same source and destination files, doing nothing." +msgid "Cannot move/rename resources root." msgstr "" #: editor/filesystem_dock.cpp -msgid "Target file exists, can't overwrite. Delete first." +msgid "Cannot move a folder into itself.\n" msgstr "" #: editor/filesystem_dock.cpp -msgid "Same source and destination paths, doing nothing." +msgid "Error moving:\n" msgstr "" #: editor/filesystem_dock.cpp -msgid "Can't move directories to within themselves." +msgid "Unable to update dependencies:\n" msgstr "" #: editor/filesystem_dock.cpp -msgid "Can't rename deps for:\n" +msgid "No name provided" msgstr "" #: editor/filesystem_dock.cpp -msgid "Error moving file:\n" +msgid "Provided name contains invalid characters" msgstr "" #: editor/filesystem_dock.cpp -msgid "Error moving dir:\n" +msgid "No name provided." msgstr "" #: editor/filesystem_dock.cpp -msgid "Can't operate on '..'" +msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp -msgid "Pick New Name and Location For:" +msgid "A file or folder with this name already exists." msgstr "" #: editor/filesystem_dock.cpp -msgid "No files selected!" -msgstr "" +#, fuzzy +msgid "Renaming file:" +msgstr "Rename Variable" #: editor/filesystem_dock.cpp -msgid "Expand all" +msgid "Renaming folder:" msgstr "" #: editor/filesystem_dock.cpp -msgid "Collapse all" +msgid "Expand all" msgstr "" #: editor/filesystem_dock.cpp -msgid "Show In File Manager" +msgid "Collapse all" msgstr "" #: editor/filesystem_dock.cpp -msgid "Instance" +msgid "Copy Path" msgstr "" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." +msgid "Rename.." msgstr "" #: editor/filesystem_dock.cpp -msgid "View Owners.." +msgid "Move To.." msgstr "" #: editor/filesystem_dock.cpp -msgid "Copy Path" +msgid "New Folder.." msgstr "" #: editor/filesystem_dock.cpp -msgid "Rename or Move.." +msgid "Show In File Manager" msgstr "" #: editor/filesystem_dock.cpp -msgid "Move To.." +msgid "Instance" msgstr "" #: editor/filesystem_dock.cpp -msgid "Info" +msgid "Edit Dependencies.." msgstr "" #: editor/filesystem_dock.cpp -msgid "Re-Import.." +msgid "View Owners.." msgstr "" #: editor/filesystem_dock.cpp @@ -2563,6 +2481,11 @@ msgstr "" msgid "Move" msgstr "" +#: editor/filesystem_dock.cpp editor/plugins/animation_tree_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Rename" +msgstr "" + #: editor/groups_editor.cpp msgid "Add to Group" msgstr "" @@ -2576,6 +2499,10 @@ msgid "Import as Single Scene" msgstr "" #: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials" msgstr "" @@ -2588,6 +2515,18 @@ msgid "Import with Separate Objects+Materials" msgstr "" #: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Materials+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Materials+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes" msgstr "" @@ -2596,38 +2535,31 @@ msgid "Import as Multiple Scenes+Materials" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Import Scene" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Importing Scene.." msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Running Custom Script.." msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Couldn't load post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Invalid/broken script for post-import (check console):" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Error running post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Saving.." msgstr "" @@ -2655,579 +2587,54 @@ msgstr "" msgid "Reimport" msgstr "" -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "No bit masks to import!" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path is empty." -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must be a complete resource path." -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must exist." -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Save path is empty!" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Import BitMasks" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s):" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Target Path:" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Accept" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Bit Mask" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No source font file!" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No target font resource!" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "" -"Invalid file extension.\n" -"Please use .font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Can't load/process source font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Couldn't save font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font Size:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Dest Resource:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "The quick brown fox jumps over the lazy dog." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Test:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Options:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Font Import" -msgstr "" - -#: 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 "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Failed opening as BMFont file." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error initializing FreeType." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Unknown font format." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error loading font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Invalid font size." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Invalid font custom source." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/plugins/theme_editor_plugin.cpp -msgid "Font" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "No meshes to import!" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Single Mesh Import" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Source Mesh(es):" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Mesh" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Surface %d" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "No samples to import!" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Import Audio Samples" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Source Sample(s):" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Audio Sample" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "New Clip" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Animation Options" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Flags" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Bake FPS:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Optimizer" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Linear Error" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angular Error" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angle" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Clips" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Start(s)" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "End(s)" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Loop" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Filters" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source path is empty." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't load post-import script." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Invalid/broken script for post-import." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Error importing scene." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import 3D Scene" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source Scene:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Same as Target Scene" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Shared" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Target Texture Folder:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Post-Process Script:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Custom Root Node Type:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Auto" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Root Node Name:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "The Following Files are Missing:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Anyway" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp scene/gui/dialogs.cpp -msgid "Cancel" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import & Open" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Edited scene has not been saved, open imported scene anyway?" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Image:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Can't import a file over itself:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't localize path: %s (already local)" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "3D Scene Animation" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Uncompressed" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossless (PNG)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossy (WebP)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress (VRAM)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Format" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Compression Quality (WebP):" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Options" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Please specify some files!" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "At least one file needed for Atlas." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Error importing:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Only one file is required for large texture." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Max Texture Size:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for Atlas (2D)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cell Size:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Large Texture" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Textures (2D)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture" +#: editor/multi_node_edit.cpp +msgid "MultiNode Set" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Base Atlas Texture" +#: editor/node_dock.cpp +msgid "Groups" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s)" +#: editor/node_dock.cpp +msgid "Select a Node to edit Signals and Groups." msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 2D" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create Poly" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 3D" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures" +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Insert Point" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "2D Texture" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly (Remove Point)" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "3D Texture" +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Remove Poly And Point" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Atlas Texture" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create a new polygon from scratch." msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp +#: editor/plugins/abstract_polygon_2d_editor.cpp msgid "" -"NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files to " -"the project." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Crop empty space." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Texture" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Load Source Image" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Slicing" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Inserting" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Saving" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save large texture:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Build Atlas For:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Loading Image:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't load image:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Converting Images" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cropping Images" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Blitting Images" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save atlas image:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save converted texture:" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid source!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid translation source!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Column" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/script_create_dialog.cpp -msgid "Language" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No items to import!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No target path!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translations" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Couldn't import!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translation" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Source CSV:" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Ignore First Row" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Compress" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Add to Project (project.godot)" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Languages:" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Translation" -msgstr "" - -#: editor/multi_node_edit.cpp -msgid "MultiNode Set" -msgstr "" - -#: editor/node_dock.cpp -msgid "Groups" -msgstr "" - -#: editor/node_dock.cpp -msgid "Select a Node to edit Signals and Groups." +"Edit existing polygon:\n" +"LMB: Move Point.\n" +"Ctrl+LMB: Split Segment.\n" +"RMB: Erase Point." msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp @@ -3383,7 +2790,6 @@ msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp #: editor/script_create_dialog.cpp msgid "Error!" @@ -3494,10 +2900,6 @@ msgid "Delete Input" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Rename" -msgstr "" - -#: editor/plugins/animation_tree_editor_plugin.cpp msgid "Animation tree is valid." msgstr "" @@ -3553,64 +2955,181 @@ msgstr "" msgid "Filters.." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing %d Triangles:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Free" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Triangle #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Contents:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Light Baker Setup:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "View Files" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing Geometry" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve hostname:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Fixing Lights" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Making BVH" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connection error, please try again." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Light Octree" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't connect." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Octree Texture" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't connect to host:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Transfer to Lightmaps:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response from host:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Allocating Texture #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Baking Triangle #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, return code:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Post-Processing Texture #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Req. Failed." msgstr "" -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Bake!" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, too many redirects" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Redirect Loop." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Bad download hash, assuming file has been tampered with." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Expected:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Got:" msgstr "" -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Reset the lightmap octree baking process (start over)." +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed sha256 hash check" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Asset Download Error:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Fetching:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Resolving.." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connecting.." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Requesting.." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Error making request" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Idle" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Retry" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download Error" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download for this asset is already in progress!" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "first" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "prev" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "next" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "last" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "All" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Plugins" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Sort:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Reverse" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Category:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Site:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Support.." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Official" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Testing" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Assets ZIP File" msgstr "" #: editor/plugins/camera_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp msgid "Preview" msgstr "" @@ -3653,11 +3172,15 @@ msgid "Edit CanvasItem" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Change Anchors" +msgid "Anchors only" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Change Anchors and Margins" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom (%):" +msgid "Change Anchors" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3708,59 +3231,73 @@ msgid "Pan Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Lock the selected object in place (can't be moved)." +#, fuzzy +msgid "Toggles snapping" +msgstr "Toggle ye Breakpoint" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Unlock the selected object (can be moved)." +msgid "Snapping options" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Makes sure the object's children are not selectable." +msgid "Snap to grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Restores the object's children's ability to be selected." +msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp -#: editor/project_settings_editor.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Edit" -msgstr "Edit" +msgid "Configure Snap..." +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +msgid "Snap Relative" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +msgid "Use Pixel Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Rotation Snap" +msgid "Smart snapping" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap Relative" +msgid "Snap to parent" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." +msgid "Snap to node anchor" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Pixel Snap" +msgid "Snap to node sides" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to other nodes" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Lock the selected object in place (can't be moved)." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Skeleton.." +msgid "Unlock the selected object (can be moved)." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Makes sure the object's children are not selectable." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Restores the object's children's ability to be selected." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3789,11 +3326,16 @@ msgid "View" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Reset" +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show helpers" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Set.." +msgid "Show rulers" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3805,7 +3347,7 @@ msgid "Frame Selection" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Anchor" +msgid "Layout" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3829,11 +3371,20 @@ msgid "Clear Pose" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Set a Value" +msgid "Drag pivot from mouse position" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Set pivot at mouse position" +msgstr "Discharge ye' Signal" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Multiply grid step by 2" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap (Pixels):" +msgid "Divide grid step by 2" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3844,23 +3395,28 @@ msgstr "" msgid "Adding %s..." msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Create Node" msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Error instancing scene from %s" msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "OK :(" msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "No parent to instance a child at." msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "This operation requires a single selected node." msgstr "" @@ -3874,45 +3430,6 @@ msgid "" "Drag & drop + Alt : Change node type" msgstr "" -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Create Poly" -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly" -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly (Remove Point)" -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Create a new polygon from scratch." -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -msgid "" -"Edit existing polygon:\n" -"LMB: Move Point.\n" -"Ctrl+LMB: Split Segment.\n" -"RMB: Erase Point." -msgstr "" - #: editor/plugins/collision_polygon_editor_plugin.cpp msgid "Create Poly3D" msgstr "" @@ -3922,14 +3439,6 @@ msgid "Set Handle" msgstr "" #: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Creating Mesh Library" -msgstr "" - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Thumbnail.." -msgstr "" - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Remove item %d?" msgstr "" @@ -3952,6 +3461,26 @@ msgid "Update from Scene" msgstr "" #: editor/plugins/curve_editor_plugin.cpp +msgid "Flat0" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Flat1" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Ease in" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Ease out" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Smoothstep" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp msgid "Modify Curve Point" msgstr "" @@ -4030,22 +3559,18 @@ msgid "Create Occluder Polygon" msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Edit existing polygon:" msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "LMB: Move Point." msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Ctrl+LMB: Split Segment." msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "RMB: Erase Point." msgstr "" @@ -4146,6 +3671,10 @@ msgid "Create Outline" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Body" msgstr "" @@ -4273,12 +3802,72 @@ msgstr "" msgid "Populate" msgstr "" -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Create Navigation Polygon" +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Bake!" +msgstr "" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Bake the navigation mesh.\n" +msgstr "" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Clear the navigation mesh." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Setting up Configuration..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Calculating grid size..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating heightfield..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Marking walkable triangles..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Constructing compact heightfield..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Eroding walkable area..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Partioning..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating contours..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating polymesh..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Converting to native navigation mesh..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Navigation Mesh Generator Setup:" +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Parsing Geometry..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Done!" msgstr "" #: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Remove Poly And Point" +msgid "Create Navigation Polygon" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4452,16 +4041,19 @@ msgid "Curve Point #" msgstr "" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Point Pos" -msgstr "" +#, fuzzy +msgid "Set Curve Point Position" +msgstr "Discharge ye' Signal" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve In Pos" -msgstr "" +#, fuzzy +msgid "Set Curve In Position" +msgstr "Discharge ye' Signal" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Out Pos" -msgstr "" +#, fuzzy +msgid "Set Curve Out Position" +msgstr "Discharge ye' Signal" #: editor/plugins/path_editor_plugin.cpp msgid "Split Path" @@ -4521,6 +4113,14 @@ msgid "Scale Polygon" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit" +msgstr "Edit" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon->UV" msgstr "" @@ -4575,63 +4175,10 @@ msgstr "" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "" -#: editor/plugins/rich_text_editor_plugin.cpp -msgid "Parse BBCode" -msgstr "" - -#: editor/plugins/sample_editor_plugin.cpp -msgid "Length:" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Open Sample File(s)" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "ERROR: Couldn't load sample!" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Add Sample" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Rename Sample" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Delete Sample" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "16 Bits" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "8 Bits" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Stereo" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Mono" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/script_editor_debugger.cpp -msgid "Format" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Pitch" -msgstr "" - #: editor/plugins/script_editor_plugin.cpp msgid "Clear Recent Files" msgstr "" @@ -4722,6 +4269,10 @@ msgstr "" msgid "Close All" msgstr "" +#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp +msgid "Run" +msgstr "" + #: editor/plugins/script_editor_plugin.cpp msgid "Toggle Scripts Panel" msgstr "" @@ -4763,18 +4314,6 @@ msgid "Debug with external editor" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Window" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Left" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Right" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp msgid "Open Godot online documentation" msgstr "" @@ -4857,7 +4396,7 @@ msgstr "" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Copy" msgstr "" @@ -5121,10 +4660,6 @@ msgid "View Plane Transform." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Scaling to %s%%." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." msgstr "" @@ -5141,10 +4676,6 @@ msgid "Top View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Top" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "" @@ -5374,6 +4905,10 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Configure Snap.." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Local Coords" msgstr "" @@ -5519,6 +5054,10 @@ msgid "Speed (FPS):" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Loop" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animation Frames" msgstr "" @@ -5531,11 +5070,12 @@ msgid "Insert Empty (After)" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Up" -msgstr "" +#, fuzzy +msgid "Move (Before)" +msgstr "Forge yer Node!" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Down" +msgid "Move (After)" msgstr "" #: editor/plugins/style_box_editor_plugin.cpp @@ -5699,6 +5239,10 @@ msgid "Style" msgstr "" #: editor/plugins/theme_editor_plugin.cpp +msgid "Font" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp msgid "Color" msgstr "" @@ -5747,7 +5291,7 @@ msgid "Mirror Y" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Bucket" +msgid "Paint Tile" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp @@ -5811,6 +5355,10 @@ msgid "Delete preset '%s'?" msgstr "" #: editor/project_export.cpp +msgid "Export templates for this platform are missing/corrupted: " +msgstr "" + +#: editor/project_export.cpp msgid "Presets" msgstr "" @@ -5881,19 +5429,29 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +msgid "Export templates for this platform are missing/corrupted:" +msgstr "" + +#: editor/project_export.cpp msgid "Export With Debug" msgstr "" #: editor/project_manager.cpp -msgid "Invalid project path, the path must exist!" +msgid "The path does not exists." msgstr "" #: editor/project_manager.cpp -msgid "Invalid project path, project.godot must not exist." +msgid "Please choose a 'project.godot' file." +msgstr "" + +#: editor/project_manager.cpp +msgid "" +"Your project will be created in a non empty folder (you might want to create " +"a new folder)." msgstr "" #: editor/project_manager.cpp -msgid "Invalid project path, project.godot must exist." +msgid "Please choose a folder that does not contain a 'project.godot' file." msgstr "" #: editor/project_manager.cpp @@ -5901,10 +5459,26 @@ msgid "Imported Project" msgstr "" #: editor/project_manager.cpp +msgid " " +msgstr "" + +#: editor/project_manager.cpp +msgid "It would be a good idea to name your project." +msgstr "" + +#: editor/project_manager.cpp msgid "Invalid project path (changed anything?)." msgstr "" #: editor/project_manager.cpp +msgid "Couldn't get project.godot in project path." +msgstr "" + +#: editor/project_manager.cpp +msgid "Couldn't edit project.godot in project path." +msgstr "" + +#: editor/project_manager.cpp msgid "Couldn't create project.godot in project path." msgstr "" @@ -5913,15 +5487,20 @@ msgid "The following files failed extraction from package:" msgstr "" #: editor/project_manager.cpp -msgid "Import Existing Project" +#, fuzzy +msgid "Rename Project" +msgstr "Rename Function" + +#: editor/project_manager.cpp +msgid "Couldn't get project.godot in the project path." msgstr "" #: editor/project_manager.cpp -msgid "Project Path (Must Exist):" +msgid "New Game Project" msgstr "" #: editor/project_manager.cpp -msgid "Project Name:" +msgid "Import Existing Project" msgstr "" #: editor/project_manager.cpp @@ -5929,19 +5508,23 @@ msgid "Create New Project" msgstr "" #: editor/project_manager.cpp -msgid "Project Path:" +msgid "Install Project:" msgstr "" #: editor/project_manager.cpp -msgid "Install Project:" +msgid "Project Name:" msgstr "" #: editor/project_manager.cpp -msgid "Browse" +msgid "Create folder" msgstr "" #: editor/project_manager.cpp -msgid "New Game Project" +msgid "Project Path:" +msgstr "" + +#: editor/project_manager.cpp +msgid "Browse" msgstr "" #: editor/project_manager.cpp @@ -5953,6 +5536,10 @@ msgid "Unnamed Project" msgstr "" #: editor/project_manager.cpp +msgid "Can't open project" +msgstr "" + +#: editor/project_manager.cpp msgid "Are you sure to open more than one project?" msgstr "" @@ -5988,10 +5575,6 @@ msgid "Project List" msgstr "" #: editor/project_manager.cpp -msgid "Run" -msgstr "" - -#: editor/project_manager.cpp msgid "Scan" msgstr "" @@ -6049,17 +5632,14 @@ msgid "Add Input Action Event" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Meta+" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Shift+" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Alt+" msgstr "" @@ -6120,7 +5700,7 @@ msgstr "Change" msgid "Joypad Axis Index:" msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Axis" msgstr "" @@ -6140,31 +5720,31 @@ msgstr "" msgid "Add Event" msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Device" msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Button" msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Left Button." msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Right Button." msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Middle Button." msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Up." msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Down." msgstr "" @@ -6174,7 +5754,7 @@ msgid "Add Global Property" msgstr "Add yer Getter Property" #: editor/project_settings_editor.cpp -msgid "Select an setting item first!" +msgid "Select a setting item first!" msgstr "" #: editor/project_settings_editor.cpp @@ -6191,6 +5771,14 @@ msgid "Delete Item" msgstr "Yar, Blow th' Selected Down!" #: editor/project_settings_editor.cpp +msgid "Can't contain '/' or ':'" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Already existing" +msgstr "" + +#: editor/project_settings_editor.cpp msgid "Error saving settings." msgstr "" @@ -6340,10 +5928,18 @@ msgid "New Script" msgstr "" #: editor/property_editor.cpp +msgid "Make Unique" +msgstr "" + +#: editor/property_editor.cpp msgid "Show in File System" msgstr "" #: editor/property_editor.cpp +msgid "Convert To %s" +msgstr "" + +#: editor/property_editor.cpp msgid "Error loading file: Not a resource!" msgstr "" @@ -6381,6 +5977,10 @@ msgid "Select Property" msgstr "" #: editor/property_selector.cpp +msgid "Select Virtual Method" +msgstr "" + +#: editor/property_selector.cpp msgid "Select Method" msgstr "" @@ -6408,26 +6008,6 @@ msgstr "" msgid "Reparent" msgstr "" -#: editor/resources_dock.cpp -msgid "Create New Resource" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Open Resource" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Save Resource" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Resource Tools" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Make Local" -msgstr "" - #: editor/run_settings_dialog.cpp msgid "Run Mode:" msgstr "" @@ -6554,14 +6134,6 @@ msgid "Sub-Resources:" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Edit Groups" -msgstr "" - -#: editor/scene_tree_dock.cpp -msgid "Edit Connections" -msgstr "" - -#: editor/scene_tree_dock.cpp msgid "Clear Inheritance" msgstr "" @@ -6745,6 +6317,14 @@ msgid "Invalid base path" msgstr "" #: editor/script_create_dialog.cpp +msgid "Directory of the same name exists" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "File exists, will be reused" +msgstr "" + +#: editor/script_create_dialog.cpp msgid "Invalid extension" msgstr "" @@ -6787,6 +6367,10 @@ msgid "Load existing script file" msgstr "" #: editor/script_create_dialog.cpp +msgid "Language" +msgstr "" + +#: editor/script_create_dialog.cpp msgid "Inherits" msgstr "" @@ -6828,6 +6412,10 @@ msgid "Function:" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Errors" msgstr "" @@ -6908,6 +6496,10 @@ msgid "Type" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Format" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Usage" msgstr "" @@ -6983,6 +6575,22 @@ msgstr "" msgid "Change Probe Extents" msgstr "" +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Library" +msgstr "" + +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Status" +msgstr "" + +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Libraries: " +msgstr "" + +#: modules/gdnative/register_types.cpp +msgid "GDNative" +msgstr "" + #: modules/gdscript/gd_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Invalid type argument to convert(), use TYPE_* constants." @@ -6990,7 +6598,7 @@ msgstr "" "Shiver me timbers! ye type argument t' convert() be wrong! use yer TYPE_* " "constants!" -#: modules/gdscript/gd_functions.cpp +#: modules/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "Nah enough bytes fer decodin' bytes, or ye got th' wrong ship." @@ -7044,10 +6652,6 @@ msgid "GridMap Duplicate Selection" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Paint" -msgstr "" - -#: modules/gridmap/grid_map_editor_plugin.cpp msgid "Snap View" msgstr "" @@ -7139,12 +6743,8 @@ msgstr "" msgid "Pick Distance:" msgstr "" -#: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Tiles" -msgstr "" - -#: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Areas" +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "Builds" msgstr "" #: modules/visual_script/visual_script.cpp @@ -7354,10 +6954,18 @@ msgid "Return" msgstr "Return" #: modules/visual_script/visual_script_editor.cpp +msgid "Call" +msgstr "Call" + +#: modules/visual_script/visual_script_editor.cpp msgid "Get" msgstr "Get" #: modules/visual_script/visual_script_editor.cpp +msgid "Script already has function '%s'" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Input Value" msgstr "" @@ -7716,6 +7324,12 @@ msgid "" "order for AnimatedSprite3D to display frames." msgstr "" +#: scene/3d/vehicle_body.cpp +msgid "" +"VehicleWheel serves to provide a wheel system to a VehicleBody. Please use " +"it as a child of a VehicleBody." +msgstr "" + #: scene/gui/color_picker.cpp msgid "Raw Mode" msgstr "" @@ -7725,15 +7339,15 @@ msgid "Add current color as a preset" msgstr "" #: scene/gui/dialogs.cpp -msgid "Alert!" +msgid "Cancel" msgstr "" #: scene/gui/dialogs.cpp -msgid "Please Confirm..." +msgid "Alert!" msgstr "" -#: scene/gui/input_action.cpp -msgid "Ctrl+" +#: scene/gui/dialogs.cpp +msgid "Please Confirm..." msgstr "" #: scene/gui/popup.cpp @@ -7764,6 +7378,22 @@ msgid "" "texture to some node for display." msgstr "" +#: scene/resources/dynamic_font.cpp +msgid "Error initializing FreeType." +msgstr "" + +#: scene/resources/dynamic_font.cpp +msgid "Unknown font format." +msgstr "" + +#: scene/resources/dynamic_font.cpp +msgid "Error loading font." +msgstr "" + +#: scene/resources/dynamic_font.cpp +msgid "Invalid font size." +msgstr "" + #~ msgid "just pressed" #~ msgstr "just smashed" diff --git a/editor/translations/pt_BR.po b/editor/translations/pt_BR.po index 7d0ff7cb95..5ad3ae0989 100644 --- a/editor/translations/pt_BR.po +++ b/editor/translations/pt_BR.po @@ -9,14 +9,15 @@ # Joaquim Ferreira <joaquimferreira1996@bol.com.br>, 2016. # jonathan railarem <railarem@gmail.com>, 2017. # Mailson Silva Marins <mailsons335@gmail.com>, 2016. +# manokara <marknokalt@live.com>, 2017. # Michael Alexsander Silva Dias <michael.a.s.dias@gmail.com>, 2017. # msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: 2016-05-30\n" -"PO-Revision-Date: 2017-08-15 19:47+0000\n" -"Last-Translator: Michael Alexsander Silva Dias <michael.a.s.dias@gmail.com>\n" +"PO-Revision-Date: 2017-10-21 09:44+0000\n" +"Last-Translator: manokara <marknokalt@live.com>\n" "Language-Team: Portuguese (Brazil) <https://hosted.weblate.org/projects/" "godot-engine/godot/pt_BR/>\n" "Language: pt_BR\n" @@ -24,7 +25,7 @@ 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.17-dev\n" +"X-Generator: Weblate 2.17\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -201,10 +202,9 @@ msgid "Create %d NEW tracks and insert keys?" msgstr "Criar %d NOVAS trilhas e inserir chaves?" #: editor/animation_editor.cpp editor/create_dialog.cpp -#: editor/editor_audio_buses.cpp +#: editor/editor_audio_buses.cpp editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp #: editor/plugins/mesh_instance_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp editor/project_manager.cpp #: editor/script_create_dialog.cpp msgid "Create" @@ -366,266 +366,6 @@ msgstr "Alterar Tipo de Valor do Vetor" msgid "Change Array Value" msgstr "Alterar Valor do Vetor" -#: editor/asset_library_editor_plugin.cpp -msgid "Free" -msgstr "Livrar" - -#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp -msgid "Version:" -msgstr "Versão:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Contents:" -msgstr "Conteúdo:" - -#: editor/asset_library_editor_plugin.cpp -msgid "View Files" -msgstr "Ver Arquivos" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_help.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp -msgid "Description:" -msgstr "Descrição:" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -#: editor/project_manager.cpp -msgid "Install" -msgstr "Instalar" - -#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp -#: editor/connections_dialog.cpp editor/export_template_manager.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -#: editor/project_settings_editor.cpp editor/property_editor.cpp -#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Close" -msgstr "Fechar" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve hostname:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Connection error, please try again." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't connect." -msgstr "Não é possÃvel conectar..." - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Can't connect to host:" -msgstr "Conectar ao Nó:" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response from host:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response." -msgstr "Sem resposta." - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Request failed, return code:" -msgstr "Formato de arquivo requisitado desconhecido:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Req. Failed." -msgstr "Sol. Falhou." - -#: editor/asset_library_editor_plugin.cpp -msgid "Request failed, too many redirects" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Redirect Loop." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed:" -msgstr "Falhou:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Bad download hash, assuming file has been tampered with." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Expected:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Got:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed sha256 hash check" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Asset Download Error:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -msgid "Success!" -msgstr "Sucesso!" - -#: editor/asset_library_editor_plugin.cpp -msgid "Fetching:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Resolving.." -msgstr "Salvando..." - -#: editor/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "Conectando..." - -#: editor/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "Solicitando..." - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Error making request" -msgstr "Erro ao salvar Recurso!" - -#: editor/asset_library_editor_plugin.cpp -msgid "Idle" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Retry" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Download Error" -msgstr "Abaixo" - -#: editor/asset_library_editor_plugin.cpp -msgid "Download for this asset is already in progress!" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "first" -msgstr "primeiro" - -#: editor/asset_library_editor_plugin.cpp -msgid "prev" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "next" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "last" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "All" -msgstr "Todos" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/property_selector.cpp editor/quick_open.cpp -#: editor/settings_config_dialog.cpp -msgid "Search:" -msgstr "Pesquisar:" - -#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Search" -msgstr "Pesquisar" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/project_manager.cpp -msgid "Import" -msgstr "Importar" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Plugins" -msgstr "Plugins" - -#: editor/asset_library_editor_plugin.cpp -msgid "Sort:" -msgstr "Ordenar:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Reverse" -msgstr "Reverso" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Category:" -msgstr "Categoria:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Site:" -msgstr "Site:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "Suportado..." - -#: editor/asset_library_editor_plugin.cpp -msgid "Official" -msgstr "Oficial" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -msgid "Community" -msgstr "Comunidade" - -#: editor/asset_library_editor_plugin.cpp -msgid "Testing" -msgstr "Em teste" - -#: editor/asset_library_editor_plugin.cpp -msgid "Assets ZIP File" -msgstr "Arquivo ZIP de Assets" - -#: editor/call_dialog.cpp -msgid "Method List For '%s':" -msgstr "Lista de Métodos para \"%s\":" - -#: editor/call_dialog.cpp modules/visual_script/visual_script_editor.cpp -msgid "Call" -msgstr "Chamar" - -#: editor/call_dialog.cpp -msgid "Method List:" -msgstr "Lista de Métodos:" - -#: editor/call_dialog.cpp -msgid "Arguments:" -msgstr "Argumentos:" - -#: editor/call_dialog.cpp -msgid "Return:" -msgstr "Retornar:" - #: editor/code_editor.cpp msgid "Go to Line" msgstr "Ir para Linha" @@ -639,7 +379,6 @@ msgid "No Matches" msgstr "Sem Correspondências" #: editor/code_editor.cpp -#, fuzzy msgid "Replaced %d occurrence(s)." msgstr "%d ocorrência(s) substituÃda(s)." @@ -663,6 +402,14 @@ msgstr "Palavras Inteiras" msgid "Selection Only" msgstr "Apenas na Seleção" +#: editor/code_editor.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp +msgid "Search" +msgstr "Pesquisar" + #: editor/code_editor.cpp editor/editor_help.cpp msgid "Find" msgstr "Localizar" @@ -695,17 +442,17 @@ msgstr "Perguntar ao Substituir" msgid "Skip" msgstr "Pular" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom In" msgstr "Ampliar Mais" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom Out" msgstr "Ampliar Menos" #: editor/code_editor.cpp msgid "Reset Zoom" -msgstr "" +msgstr "Redefinir Ampliação" #: editor/code_editor.cpp editor/script_editor_debugger.cpp msgid "Line:" @@ -724,6 +471,8 @@ msgid "" "Target method not found! Specify a valid method or attach a script to target " "Node." msgstr "" +"Método destino não encontrado! EspecÃfique um método válido ou anexe um " +"script ao Nó destino." #: editor/connections_dialog.cpp msgid "Connect To Node:" @@ -766,6 +515,20 @@ msgstr "Postergado" msgid "Oneshot" msgstr "Uma vez" +#: editor/connections_dialog.cpp editor/dependency_editor.cpp +#: editor/export_template_manager.cpp +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Close" +msgstr "Fechar" + #: editor/connections_dialog.cpp msgid "Connect" msgstr "Conectar" @@ -791,7 +554,7 @@ msgstr "Conectar..." msgid "Disconnect" msgstr "Disconectar" -#: editor/connections_dialog.cpp editor/node_dock.cpp +#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" msgstr "Sinais" @@ -808,12 +571,25 @@ msgstr "Favoritos:" msgid "Recent:" msgstr "Recente:" +#: editor/create_dialog.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp +#: editor/quick_open.cpp editor/settings_config_dialog.cpp +msgid "Search:" +msgstr "Pesquisar:" + #: editor/create_dialog.cpp editor/editor_help.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp #: editor/quick_open.cpp msgid "Matches:" msgstr "Combinações:" +#: editor/create_dialog.cpp editor/editor_help.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp +#: editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "Descrição:" + #: editor/dependency_editor.cpp msgid "Search Replacement For:" msgstr "Buscar Substituição Para:" @@ -873,6 +649,10 @@ msgid "Owners Of:" msgstr "Donos De:" #: editor/dependency_editor.cpp +msgid "Remove selected files from the project? (no undo)" +msgstr "Remover os arquivos selecionados do projeto? (impossÃvel desfazer)" + +#: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" @@ -883,8 +663,9 @@ msgstr "" "Removê-los mesmo assim? (irreversÃvel)" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (no undo)" -msgstr "Remover os arquivos selecionados do projeto? (impossÃvel desfazer)" +#, fuzzy +msgid "Cannot remove:\n" +msgstr "Não foi possÃvel resolver." #: editor/dependency_editor.cpp msgid "Error loading:" @@ -950,19 +731,12 @@ msgid "Godot Engine contributors" msgstr "Contribuidores da Godot Engine" #: editor/editor_about.cpp -#, fuzzy -msgid "Authors" -msgstr "Autor:" - -#: editor/editor_about.cpp -#, fuzzy msgid "Project Founders" -msgstr "Gerenciador de Projetos" +msgstr "Fundadores do Projeto" #: editor/editor_about.cpp -#, fuzzy msgid "Lead Developer" -msgstr "Desenvolvedores" +msgstr "Desenvolvedor-chefe" #: editor/editor_about.cpp editor/project_manager.cpp msgid "Project Manager" @@ -973,117 +747,163 @@ msgid "Developers" msgstr "Desenvolvedores" #: editor/editor_about.cpp -msgid "License" +msgid "Authors" +msgstr "Autores" + +#: editor/editor_about.cpp +msgid "Platinum Sponsors" msgstr "" #: editor/editor_about.cpp -msgid "Thirdparty License" +msgid "Gold Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Mini Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Donors" msgstr "" #: editor/editor_about.cpp +msgid "Silver Donors" +msgstr "" + +#: editor/editor_about.cpp +#, fuzzy +msgid "Bronze Donors" +msgstr "Clonar Abaixo" + +#: editor/editor_about.cpp +msgid "Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "License" +msgstr "LIcença" + +#: editor/editor_about.cpp +msgid "Thirdparty License" +msgstr "Licença de Terceiros" + +#: editor/editor_about.cpp msgid "" "Godot Engine relies on a number of thirdparty free and open source " "libraries, all compatible with the terms of its MIT license. The following " "is an exhaustive list of all such thirdparty components with their " "respective copyright statements and license terms." msgstr "" +"A Godot Engine conta com várias bibliotecas de código aberto e gratuitas de " +"terceiros, todas compatÃveis com os termos de sua licença MIT. O seguinte é " +"uma lista exaustiva de todos esses componentes de terceiros com suas " +"respectivas declarações de direitos autorais e termos de licença." #: editor/editor_about.cpp -#, fuzzy msgid "All Components" -msgstr "Conteúdo:" +msgstr "Todos os Componentes" #: editor/editor_about.cpp -#, fuzzy msgid "Components" -msgstr "Conteúdo:" +msgstr "Componentes" #: editor/editor_about.cpp msgid "Licenses" -msgstr "" +msgstr "Licenças" #: editor/editor_asset_installer.cpp editor/project_manager.cpp msgid "Error opening package file, not in zip format." -msgstr "" +msgstr "Erro ao abrir arquivo de pacote, não está em formato zip." #: editor/editor_asset_installer.cpp -#, fuzzy msgid "Uncompressing Assets" -msgstr "Não comprimido" +msgstr "Descompactando Assets" #: editor/editor_asset_installer.cpp editor/project_manager.cpp msgid "Package Installed Successfully!" msgstr "Pacote Instalado com Sucesso!" #: editor/editor_asset_installer.cpp -#, fuzzy +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Success!" +msgstr "Sucesso!" + +#: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp +msgid "Install" +msgstr "Instalar" + +#: editor/editor_asset_installer.cpp msgid "Package Installer" -msgstr "Pacote Instalado com Sucesso!" +msgstr "Instalador de Pacotes" #: editor/editor_audio_buses.cpp msgid "Speakers" -msgstr "" +msgstr "Caixas de Som" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Add Effect" -msgstr "Adicionar Vazio" +msgstr "Ad. Efeito" #: editor/editor_audio_buses.cpp #, fuzzy msgid "Rename Audio Bus" -msgstr "Renomear Autoload" +msgstr "Renomear Pista de Ãudio" #: editor/editor_audio_buses.cpp #, fuzzy msgid "Toggle Audio Bus Solo" -msgstr "Alternar Inicio automático" +msgstr "Alternar Solo da Pista de Ãudio" #: editor/editor_audio_buses.cpp +#, fuzzy msgid "Toggle Audio Bus Mute" -msgstr "" +msgstr "Alternar Silenciamento da Pista de Ãudio" #: editor/editor_audio_buses.cpp +#, fuzzy msgid "Toggle Audio Bus Bypass Effects" -msgstr "" +msgstr "Alternar Efeitos de Desvio da Pista de Ãudio." #: editor/editor_audio_buses.cpp +#, fuzzy msgid "Select Audio Bus Send" -msgstr "" +msgstr "Selecionar pista de áudio para envio" #: editor/editor_audio_buses.cpp +#, fuzzy msgid "Add Audio Bus Effect" -msgstr "" +msgstr "Adicionar efeito à Pista de à udio" #: editor/editor_audio_buses.cpp +#, fuzzy msgid "Move Bus Effect" -msgstr "" +msgstr "Mover efeito da pista" #: editor/editor_audio_buses.cpp #, fuzzy msgid "Delete Bus Effect" -msgstr "Excluir Selecionados" +msgstr "Excluir efeito da pista" #: editor/editor_audio_buses.cpp msgid "Audio Bus, Drag and Drop to rearrange." -msgstr "" - -#: editor/editor_audio_buses.cpp -#, fuzzy -msgid "Bus options" -msgstr "Opções de depuração" +msgstr "Pista de Ãudio, arraste e solte para reorganizar." #: editor/editor_audio_buses.cpp msgid "Solo" -msgstr "" +msgstr "Solo" #: editor/editor_audio_buses.cpp msgid "Mute" -msgstr "" +msgstr "Silenciar" #: editor/editor_audio_buses.cpp msgid "Bypass" -msgstr "" +msgstr "Ignorar" + +#: editor/editor_audio_buses.cpp +msgid "Bus options" +msgstr "Opções da pista" #: editor/editor_audio_buses.cpp editor/plugins/tile_map_editor_plugin.cpp #: editor/scene_tree_dock.cpp @@ -1092,74 +912,84 @@ msgstr "Duplicar" #: editor/editor_audio_buses.cpp #, fuzzy +msgid "Reset Volume" +msgstr "Redefinir Ampliação" + +#: editor/editor_audio_buses.cpp msgid "Delete Effect" -msgstr "Excluir Selecionados" +msgstr "Excluir Efeito" #: editor/editor_audio_buses.cpp #, fuzzy msgid "Add Audio Bus" -msgstr "Adicionar Todos" +msgstr "Adicionar pista de áudio" #: editor/editor_audio_buses.cpp msgid "Master bus can't be deleted!" -msgstr "" +msgstr "Pista mestre não pode ser deletada!" #: editor/editor_audio_buses.cpp #, fuzzy msgid "Delete Audio Bus" -msgstr "Excluir Layout" +msgstr "Excluir pista de áudio" #: editor/editor_audio_buses.cpp #, fuzzy msgid "Duplicate Audio Bus" -msgstr "Duplicar Animação" +msgstr "Duplicar pista de áudio" + +#: editor/editor_audio_buses.cpp +#, fuzzy +msgid "Reset Bus Volume" +msgstr "Redefinir Ampliação" #: editor/editor_audio_buses.cpp #, fuzzy msgid "Move Audio Bus" -msgstr "Ação de Mover" +msgstr "Mover pista de áudio" #: editor/editor_audio_buses.cpp +#, fuzzy msgid "Save Audio Bus Layout As.." -msgstr "" +msgstr "Salvar layout das pista de áudio como..." #: editor/editor_audio_buses.cpp msgid "Location for New Layout.." -msgstr "" +msgstr "Localização para o Novo Layout.." #: editor/editor_audio_buses.cpp +#, fuzzy msgid "Open Audio Bus Layout" -msgstr "" +msgstr "Abrir Layout de Pista de Ãudio" #: editor/editor_audio_buses.cpp msgid "There is no 'res://default_bus_layout.tres' file." -msgstr "" +msgstr "Não há nenhum arquivo 'res://default_bus_layout.tres'." #: editor/editor_audio_buses.cpp #, fuzzy msgid "Invalid file, not an audio bus layout." -msgstr "" -"Extensão de arquivo inválida.\n" -"Por favor use .font." +msgstr "Arquivo inválido, não é um layout de pista de áudio." #: editor/editor_audio_buses.cpp #, fuzzy msgid "Add Bus" -msgstr "Adicionar Todos" +msgstr "Adicionar Pista" #: editor/editor_audio_buses.cpp #, fuzzy msgid "Create a new Bus Layout." -msgstr "Criar Novo Recurso" +msgstr "Criar um novo Layout de Pista." -#: editor/editor_audio_buses.cpp editor/script_create_dialog.cpp +#: editor/editor_audio_buses.cpp editor/property_editor.cpp +#: editor/script_create_dialog.cpp msgid "Load" msgstr "Carregar" #: editor/editor_audio_buses.cpp #, fuzzy msgid "Load an existing Bus Layout." -msgstr "Carrega um recurso existente do disco e o edita." +msgstr "Carregar um Layout de Pista existente." #: editor/editor_audio_buses.cpp #: editor/plugins/animation_player_editor_plugin.cpp @@ -1167,17 +997,18 @@ msgid "Save As" msgstr "Salvar Como" #: editor/editor_audio_buses.cpp +#, fuzzy msgid "Save this Bus Layout to a file." -msgstr "" +msgstr "Salvar este Layout de Bus em um arquivo." #: editor/editor_audio_buses.cpp editor/import_dock.cpp -#, fuzzy msgid "Load Default" -msgstr "Padrão" +msgstr "Carregar Padrão" #: editor/editor_audio_buses.cpp +#, fuzzy msgid "Load the default Bus Layout." -msgstr "" +msgstr "Carregar o Layout de Bus padrão." #: editor/editor_autoload_settings.cpp msgid "Invalid name." @@ -1247,7 +1078,7 @@ msgid "Rearrange Autoloads" msgstr "Reordenar Autoloads" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp scene/gui/file_dialog.cpp +#: scene/gui/file_dialog.cpp msgid "Path:" msgstr "Caminho:" @@ -1255,9 +1086,7 @@ msgstr "Caminho:" msgid "Node Name:" msgstr "Nome do Nó:" -#: editor/editor_autoload_settings.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp editor/project_manager.cpp +#: editor/editor_autoload_settings.cpp editor/project_manager.cpp msgid "Name" msgstr "Nome" @@ -1282,27 +1111,27 @@ msgid "Updating scene.." msgstr "Atualizando Cena..." #: editor/editor_dir_dialog.cpp -#, fuzzy msgid "Please select a base directory first" -msgstr "Por favor salve a cena primeiro." +msgstr "Por favor selecione um diretório base primeiro" #: editor/editor_dir_dialog.cpp msgid "Choose a Directory" msgstr "Escolha um Diretório" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Create Folder" msgstr "Criar Pasta" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: editor/editor_plugin_settings.cpp editor/plugins/theme_editor_plugin.cpp -#: editor/project_export.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp +#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp +#: scene/gui/file_dialog.cpp msgid "Name:" msgstr "Nome:" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Could not create folder." msgstr "Não foi possÃvel criar a pasta." @@ -1322,30 +1151,6 @@ msgstr "Empacotando" msgid "Template file not found:\n" msgstr "Arquivo de modelo não encontrado:\n" -#: editor/editor_export.cpp -msgid "Added:" -msgstr "Adicionado:" - -#: editor/editor_export.cpp -msgid "Removed:" -msgstr "Removido:" - -#: editor/editor_export.cpp -msgid "Error saving atlas:" -msgstr "Erro ao salvar atlas:" - -#: editor/editor_export.cpp -msgid "Could not save atlas subtexture:" -msgstr "Não foi possÃvel salvar Subtextura do Atlas:" - -#: editor/editor_export.cpp -msgid "Exporting for %s" -msgstr "Exportando para %s" - -#: editor/editor_export.cpp -msgid "Setting Up.." -msgstr "Ajustando..." - #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "O arquivo existe. Sobrescrever?" @@ -1430,6 +1235,11 @@ msgstr "Mover Favorito Acima" msgid "Move Favorite Down" msgstr "Mover Favorito Abaixo" +#: editor/editor_file_dialog.cpp +#, fuzzy +msgid "Go to parent folder" +msgstr "Não foi possÃvel criar a pasta." + #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Directories & Files:" msgstr "Diretórios & Arquivos:" @@ -1456,9 +1266,8 @@ msgid "ScanSources" msgstr "BuscarFontes" #: editor/editor_file_system.cpp -#, fuzzy msgid "(Re)Importing Assets" -msgstr "Re-Importando" +msgstr "(Re)Importando Assets" #: editor/editor_help.cpp editor/editor_node.cpp #: editor/plugins/script_editor_plugin.cpp @@ -1473,6 +1282,10 @@ msgstr "Lista de Classes:" msgid "Search Classes" msgstr "Pesquisar Classes" +#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +msgid "Top" +msgstr "Cima" + #: editor/editor_help.cpp editor/property_editor.cpp msgid "Class:" msgstr "Classe:" @@ -1489,15 +1302,30 @@ msgstr "Herdado por:" msgid "Brief Description:" msgstr "Descrição breve:" +#: editor/editor_help.cpp +#, fuzzy +msgid "Members" +msgstr "Membros:" + #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "Membros:" #: editor/editor_help.cpp +#, fuzzy +msgid "Public Methods" +msgstr "Métodos Públicos:" + +#: editor/editor_help.cpp msgid "Public Methods:" msgstr "Métodos Públicos:" #: editor/editor_help.cpp +#, fuzzy +msgid "GUI Theme Items" +msgstr "Itens do Tema de GUI:" + +#: editor/editor_help.cpp msgid "GUI Theme Items:" msgstr "Itens do Tema de GUI:" @@ -1507,53 +1335,85 @@ msgstr "Sinais:" #: editor/editor_help.cpp #, fuzzy +msgid "Enumerations" +msgstr "Enumerações:" + +#: editor/editor_help.cpp msgid "Enumerations:" -msgstr "Animações" +msgstr "Enumerações:" #: editor/editor_help.cpp msgid "enum " -msgstr "" +msgstr "enum " + +#: editor/editor_help.cpp +#, fuzzy +msgid "Constants" +msgstr "Constantes:" #: editor/editor_help.cpp msgid "Constants:" msgstr "Constantes:" #: editor/editor_help.cpp +#, fuzzy +msgid "Description" +msgstr "Descrição:" + +#: editor/editor_help.cpp +#, fuzzy +msgid "Properties" +msgstr "Propriedades:" + +#: editor/editor_help.cpp msgid "Property Description:" msgstr "Descrição da Propriedade:" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this property. Please help us by " +"[color=$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp +#, fuzzy +msgid "Methods" +msgstr "Lista de Métodos:" + +#: editor/editor_help.cpp msgid "Method Description:" msgstr "Descrição do Método:" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this method. Please help us by [color=" +"$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp msgid "Search Text" msgstr "Pesquisar Texto" #: editor/editor_log.cpp -#, fuzzy msgid "Output:" -msgstr " SaÃda:" +msgstr "SaÃda:" #: editor/editor_log.cpp editor/plugins/animation_tree_editor_plugin.cpp -#: editor/plugins/rich_text_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_editor_debugger.cpp scene/gui/line_edit.cpp -#: scene/gui/text_edit.cpp +#: editor/property_editor.cpp editor/script_editor_debugger.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Clear" msgstr "Limpar" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Error saving resource!" msgstr "Erro ao salvar Recurso!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Save Resource As.." msgstr "Salvar Recuso como..." -#: editor/editor_node.cpp editor/export_template_manager.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "I see.." msgstr "Entendo..." @@ -1570,6 +1430,30 @@ msgid "Error while saving." msgstr "Erro ao salvar." #: editor/editor_node.cpp +#, fuzzy +msgid "Can't open '%s'." +msgstr "Não é possÃvel operar em \"..\"" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Error while parsing '%s'." +msgstr "Erro ao salvar." + +#: editor/editor_node.cpp +msgid "Unexpected end of file '%s'." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Missing '%s' or its dependencies." +msgstr "A cena \"%s\" tem dependências quebradas:" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Error while loading '%s'." +msgstr "Erro ao salvar." + +#: editor/editor_node.cpp msgid "Saving Scene" msgstr "Salvando Cena" @@ -1630,6 +1514,33 @@ msgid "Restored default layout to base settings." msgstr "Layout padrão restaurado à s configurações base." #: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was imported, so it's not editable.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was instanced or inherited.\n" +"Changes to it will not be kept when saving the current scene." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource was imported, so it's not editable. Change its settings in the " +"import panel and then re-import." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This scene was imported, so changes to it will not be kept.\n" +"Instancing it or inheriting will allow making changes to it.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp msgid "Copy Params" msgstr "Copiar Parâmetros" @@ -1662,15 +1573,14 @@ msgid "There is no defined scene to run." msgstr "Não há cena definida para rodar." #: editor/editor_node.cpp -#, fuzzy msgid "" "No main scene has ever been defined, select one?\n" "You can change it later in \"Project Settings\" under the 'application' " "category." msgstr "" "A cena principal não foi definida, selecionar uma?\n" -"Você pode alterá-la mais tarde nas \"Configurações do Projeto\" na categoria " -"\"application\"." +"Você pode alterá-la mais tarde nas \"Configurações do Projeto\" na " +"categoria 'Application'." #: editor/editor_node.cpp msgid "" @@ -1714,16 +1624,15 @@ msgstr "Abri Cena Ãgil..." #: editor/editor_node.cpp msgid "Quick Open Script.." -msgstr "Abrir Script Ãgil..." +msgstr "Abrir Rápidamente Script.." #: editor/editor_node.cpp -#, fuzzy msgid "Save & Close" -msgstr "Salvar um Arquivo" +msgstr "Salvar e Fechar" #: editor/editor_node.cpp msgid "Save changes to '%s' before closing?" -msgstr "" +msgstr "Salvar mudanças em '%s' antes de fechar?" #: editor/editor_node.cpp msgid "Save Scene As.." @@ -1754,9 +1663,8 @@ msgid "Export Tile Set" msgstr "Exportar Tile Set" #: editor/editor_node.cpp -#, fuzzy msgid "This operation can't be done without a selected node." -msgstr "Essa operação não pode ser realizada sem uma cena." +msgstr "Esta operação não pode ser feita sem um nó selecionado." #: editor/editor_node.cpp msgid "Current scene not saved. Open anyway?" @@ -1787,22 +1695,30 @@ msgid "Exit the editor?" msgstr "Sair do editor?" #: editor/editor_node.cpp -#, fuzzy msgid "Open Project Manager?" -msgstr "Gerenciador de Projetos" +msgstr "Abrir Gerenciador de Projetos?" #: editor/editor_node.cpp -#, fuzzy msgid "Save & Quit" -msgstr "Salvar um Arquivo" +msgstr "Salvar e Sair" #: editor/editor_node.cpp +#, fuzzy msgid "Save changes to the following scene(s) before quitting?" -msgstr "" +msgstr "Salvar mudanças na(s) seguinte(s) cena(s) antes de sair?" #: editor/editor_node.cpp +#, fuzzy msgid "Save changes the following scene(s) before opening Project Manager?" msgstr "" +"Salvar mudanças na(s) seguinte(s) cena(s) antes de abrir o Gerenciador de " +"Projetos?" + +#: editor/editor_node.cpp +msgid "" +"This option is deprecated. Situations where refresh must be forced are now " +"considered a bug. Please report." +msgstr "" #: editor/editor_node.cpp msgid "Pick a Main Scene" @@ -1810,19 +1726,20 @@ msgstr "Escolha uma Cena Principal" #: editor/editor_node.cpp msgid "Unable to enable addon plugin at: '" -msgstr "" +msgstr "Não foi possÃvel ativar o plugin em: '" #: editor/editor_node.cpp msgid "' parsing of config failed." -msgstr "" +msgstr "' falha no processamento de configurações." #: editor/editor_node.cpp msgid "Unable to find script field for addon plugin at: 'res://addons/" msgstr "" +"Não foi possÃvel encontrar o campo de script para o plugin em: 'res://addons/" #: editor/editor_node.cpp msgid "Unable to load addon script from path: '" -msgstr "" +msgstr "Não foi possÃvel carregar o script de extensão no caminho: '" #: editor/editor_node.cpp msgid "" @@ -1833,7 +1750,7 @@ msgstr "" "Para fazer alterações, uma nova cena herdada pode ser criada." #: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Ugh" msgstr "Ugh" @@ -1846,14 +1763,15 @@ msgstr "" "\"Importar\" para abrir a cena e então salve-a dentro do projeto." #: editor/editor_node.cpp -msgid "Error loading scene." -msgstr "Erro ao carregar cena." - -#: editor/editor_node.cpp msgid "Scene '%s' has broken dependencies:" msgstr "A cena \"%s\" tem dependências quebradas:" #: editor/editor_node.cpp +#, fuzzy +msgid "Clear Recent Scenes" +msgstr "Limpar Ossos" + +#: editor/editor_node.cpp msgid "Save Layout" msgstr "Salvar Layout" @@ -1883,11 +1801,10 @@ msgid "Distraction Free Mode" msgstr "Modo Sem Distrações" #: editor/editor_node.cpp -#, fuzzy msgid "Toggle distraction-free mode." -msgstr "Modo Sem Distrações" +msgstr "Alternar modo sem-distrações." -#: editor/editor_node.cpp editor/io_plugins/editor_scene_import_plugin.cpp +#: editor/editor_node.cpp msgid "Scene" msgstr "Cena" @@ -2098,9 +2015,8 @@ msgid "Editor Layout" msgstr "Layout do Editor" #: editor/editor_node.cpp -#, fuzzy msgid "Toggle Fullscreen" -msgstr "Modo Tela-Cheia" +msgstr "Alternar Tela-Cheia" #: editor/editor_node.cpp editor/project_export.cpp msgid "Manage Export Templates" @@ -2119,12 +2035,18 @@ msgid "Online Docs" msgstr "Docs Online" #: editor/editor_node.cpp +#, fuzzy msgid "Q&A" -msgstr "" +msgstr "Q&A" #: editor/editor_node.cpp +#, fuzzy msgid "Issue Tracker" -msgstr "" +msgstr "Rastreador de problemas" + +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +msgid "Community" +msgstr "Comunidade" #: editor/editor_node.cpp msgid "About" @@ -2134,7 +2056,7 @@ msgstr "Sobre" msgid "Play the project." msgstr "Roda o projeto." -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Play" msgstr "Tocar" @@ -2150,7 +2072,7 @@ msgstr "Pausa a cena" msgid "Stop the scene." msgstr "Para a cena." -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Stop" msgstr "Parar" @@ -2184,7 +2106,7 @@ msgstr "Atualizar nas Mudanças" #: editor/editor_node.cpp msgid "Disable Update Spinner" -msgstr "" +msgstr "Desabilitar Spinner de Atualização" #: editor/editor_node.cpp msgid "Inspector" @@ -2223,6 +2145,16 @@ msgid "Object properties." msgstr "Propriedades do objeto." #: editor/editor_node.cpp +#, fuzzy +msgid "Changes may be lost!" +msgstr "Alterar Grupo de Imagens" + +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Import" +msgstr "Importar" + +#: editor/editor_node.cpp msgid "FileSystem" msgstr "Arquivos" @@ -2236,15 +2168,7 @@ msgstr "SaÃda" #: editor/editor_node.cpp msgid "Don't Save" -msgstr "" - -#: editor/editor_node.cpp editor/editor_reimport_dialog.cpp -msgid "Re-Import" -msgstr "Reimportar" - -#: editor/editor_node.cpp editor/editor_plugin_settings.cpp -msgid "Update" -msgstr "Atualizar" +msgstr "Não Salvar" #: editor/editor_node.cpp msgid "Import Templates From ZIP File" @@ -2271,9 +2195,8 @@ msgid "Open & Run a Script" msgstr "Abrir e Rodar um Script" #: editor/editor_node.cpp -#, fuzzy msgid "New Inherited" -msgstr "Nova Cena Herdada..." +msgstr "Novo Herdado" #: editor/editor_node.cpp msgid "Load Errors" @@ -2296,9 +2219,8 @@ msgid "Open Script Editor" msgstr "Abrir Editor de Scripts" #: editor/editor_node.cpp -#, fuzzy msgid "Open Asset Library" -msgstr "Exportar Biblioteca" +msgstr "Abrir Biblioteca de Assets" #: editor/editor_node.cpp msgid "Open the next Editor" @@ -2308,11 +2230,29 @@ msgstr "Abrir o próximo Editor" msgid "Open the previous Editor" msgstr "Abrir o Editor anterior" +#: editor/editor_plugin.cpp +#, fuzzy +msgid "Creating Mesh Previews" +msgstr "Criando MeshLibrary" + +#: editor/editor_plugin.cpp +msgid "Thumbnail.." +msgstr "Miniatura..." + #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" msgstr "Plugins Instalados:" #: editor/editor_plugin_settings.cpp +msgid "Update" +msgstr "Atualizar" + +#: editor/editor_plugin_settings.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Version:" +msgstr "Versão:" + +#: editor/editor_plugin_settings.cpp msgid "Author:" msgstr "Autor:" @@ -2364,35 +2304,18 @@ msgstr "Mesmo" msgid "Frame #:" msgstr "Frame nº:" -#: editor/editor_reimport_dialog.cpp -msgid "Please wait for scan to complete." -msgstr "Por favor aguarde a verificação completar." - -#: editor/editor_reimport_dialog.cpp -msgid "Current scene must be saved to re-import." -msgstr "Cena Atual só deve ser salva para re-importação." - -#: editor/editor_reimport_dialog.cpp -msgid "Save & Re-Import" -msgstr "Salvar e Re-Importar" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Importing" -msgstr "Re-Importando" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Import Changed Resources" -msgstr "Re-Importar Recursos Alterados" - #: editor/editor_run_native.cpp msgid "Select device from the list" -msgstr "" +msgstr "Selecione um dispositivo da lista" #: editor/editor_run_native.cpp msgid "" "No runnable export preset found for this platform.\n" "Please add a runnable preset in the export menu." msgstr "" +"Não foi encontrado uma definição de exportação executável para esta " +"plataforma.\n" +"Por favor, adicione uma definição executável no menu de exportação." #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." @@ -2448,9 +2371,8 @@ msgid "(Installed)" msgstr "(Instalado)" #: editor/export_template_manager.cpp -#, fuzzy msgid "Download" -msgstr "Abaixo" +msgstr "Download" #: editor/export_template_manager.cpp msgid "(Missing)" @@ -2461,26 +2383,32 @@ msgid "(Current)" msgstr "(Atual)" #: editor/export_template_manager.cpp +#, fuzzy msgid "Remove template version '%s'?" -msgstr "" +msgstr "Remover versão '%s' do modelo?" #: editor/export_template_manager.cpp msgid "Can't open export templates zip." msgstr "Não se pôde abrir zip dos modelos de exportação." #: editor/export_template_manager.cpp +#, fuzzy msgid "Invalid version.txt format inside templates." -msgstr "" +msgstr "Formato do version.txt dentro de templates é inválido." #: editor/export_template_manager.cpp +#, fuzzy msgid "" "Invalid version.txt format inside templates. Revision is not a valid " "identifier." msgstr "" +"Formato do version.txt dentro de templates é inválido. A revisão não é um " +"identificador válido." #: editor/export_template_manager.cpp +#, fuzzy msgid "No version.txt found inside templates." -msgstr "" +msgstr "Não foi encontrado um version.txt dentro de templates." #: editor/export_template_manager.cpp msgid "Error creating path for templates:\n" @@ -2495,10 +2423,6 @@ msgid "Importing:" msgstr "Importando:" #: editor/export_template_manager.cpp -msgid "Loading Export Templates" -msgstr "Carregando Modelos de Exportação" - -#: editor/export_template_manager.cpp msgid "Current Version:" msgstr "Versão Atual:" @@ -2533,60 +2457,79 @@ msgid "Cannot navigate to '" msgstr "Não é possÃvel navegar para '" #: editor/filesystem_dock.cpp -#, fuzzy +msgid "View items as a grid of thumbnails" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "View items as a list" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "" "\n" -"Status: Needs Re-Import" -msgstr "Salvar e Re-Importar" +"Status: Import of file failed. Please fix file and reimport manually." +msgstr "" #: editor/filesystem_dock.cpp -#, fuzzy msgid "" "\n" "Source: " -msgstr "Origem:" +msgstr "" +"\n" +"Origem: " #: editor/filesystem_dock.cpp -msgid "Same source and destination files, doing nothing." -msgstr "Mesmos arquivos de destino e origem, nada a fazer." +#, fuzzy +msgid "Cannot move/rename resources root." +msgstr "Não se pôde carregar/processar fonte de origem." #: editor/filesystem_dock.cpp -msgid "Target file exists, can't overwrite. Delete first." -msgstr "" +#, fuzzy +msgid "Cannot move a folder into itself.\n" +msgstr "Não é possÃvel importar arquivo sobre si mesmo:" + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Error moving:\n" +msgstr "Erro ao mover diretório:\n" #: editor/filesystem_dock.cpp -msgid "Same source and destination paths, doing nothing." -msgstr "Mesmo caminhos de destino e origem, nada a fazer." +#, fuzzy +msgid "Unable to update dependencies:\n" +msgstr "A cena \"%s\" tem dependências quebradas:" #: 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." +msgid "No name provided" +msgstr "" #: editor/filesystem_dock.cpp -msgid "Can't rename deps for:\n" +msgid "Provided name contains invalid characters" msgstr "" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Error moving file:\n" -msgstr "Erro ao carregar imagem:" +msgid "No name provided." +msgstr "Renomear ou Mover..." #: editor/filesystem_dock.cpp #, fuzzy -msgid "Error moving dir:\n" -msgstr "Erro ao importar:" +msgid "Name contains invalid characters." +msgstr "Caracteres válidos:" #: editor/filesystem_dock.cpp -msgid "Can't operate on '..'" -msgstr "Não é possÃvel operar em \"..\"" +#, fuzzy +msgid "A file or folder with this name already exists." +msgstr "O nome do grupo já existe!" #: editor/filesystem_dock.cpp -msgid "Pick New Name and Location For:" -msgstr "Escolha Novo Nome e Localização Para:" +#, fuzzy +msgid "Renaming file:" +msgstr "Renomear Variável" #: editor/filesystem_dock.cpp -msgid "No files selected!" -msgstr "Nenhum arquivo selecionado!" +#, fuzzy +msgid "Renaming folder:" +msgstr "Renomear Nó" #: editor/filesystem_dock.cpp msgid "Expand all" @@ -2597,40 +2540,38 @@ msgid "Collapse all" msgstr "Recolher tudo" #: editor/filesystem_dock.cpp -msgid "Show In File Manager" -msgstr "Mostrar no Gerenciador de Arquivos" - -#: editor/filesystem_dock.cpp -msgid "Instance" -msgstr "Instanciar" +msgid "Copy Path" +msgstr "Copiar Caminho" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "Editar Dependências.." +#, fuzzy +msgid "Rename.." +msgstr "Renomear" #: editor/filesystem_dock.cpp -msgid "View Owners.." -msgstr "Visualizar Proprietários..." +msgid "Move To.." +msgstr "Mover Para..." #: editor/filesystem_dock.cpp -msgid "Copy Path" -msgstr "Copiar Caminho" +#, fuzzy +msgid "New Folder.." +msgstr "Criar Pasta" #: editor/filesystem_dock.cpp -msgid "Rename or Move.." -msgstr "Renomear ou Mover..." +msgid "Show In File Manager" +msgstr "Mostrar no Gerenciador de Arquivos" #: editor/filesystem_dock.cpp -msgid "Move To.." -msgstr "Mover Para..." +msgid "Instance" +msgstr "Instanciar" #: editor/filesystem_dock.cpp -msgid "Info" -msgstr "Informação" +msgid "Edit Dependencies.." +msgstr "Editar Dependências.." #: editor/filesystem_dock.cpp -msgid "Re-Import.." -msgstr "Re-importar..." +msgid "View Owners.." +msgstr "Visualizar Proprietários..." #: editor/filesystem_dock.cpp msgid "Previous Directory" @@ -2657,11 +2598,18 @@ msgid "" "Scanning Files,\n" "Please Wait.." msgstr "" +"Analisando arquivos,\n" +"Por favor aguarde..." #: editor/filesystem_dock.cpp msgid "Move" msgstr "Mover" +#: editor/filesystem_dock.cpp editor/plugins/animation_tree_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Rename" +msgstr "Renomear" + #: editor/groups_editor.cpp msgid "Add to Group" msgstr "Adicionar ao Grupo" @@ -2671,74 +2619,85 @@ msgid "Remove from Group" msgstr "Remover do Grupo" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Import as Single Scene" -msgstr "Importando Cena..." +msgstr "Importar como Cena Única" + +#: editor/import/resource_importer_scene.cpp +#, fuzzy +msgid "Import with Separate Animations" +msgstr "Importar com Materiais Separados" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials" -msgstr "" +msgstr "Importar com Materiais Separados" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects" -msgstr "" +msgstr "Importar com Objetos Separados" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects+Materials" -msgstr "" +msgstr "Importar com Objetos+Materiais serparados" + +#: editor/import/resource_importer_scene.cpp +#, fuzzy +msgid "Import with Separate Objects+Animations" +msgstr "Importar com Objetos+Materiais serparados" #: editor/import/resource_importer_scene.cpp #, fuzzy +msgid "Import with Separate Materials+Animations" +msgstr "Importar com Materiais Separados" + +#: editor/import/resource_importer_scene.cpp +#, fuzzy +msgid "Import with Separate Objects+Materials+Animations" +msgstr "Importar com Objetos+Materiais serparados" + +#: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes" -msgstr "Importar Cena 3D" +msgstr "Importar como Múltiplas Cenas" #: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes+Materials" -msgstr "" +msgstr "Impotr como Múltiplas Cenas+Materiais" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Import Scene" msgstr "Importar Cena" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Importing Scene.." msgstr "Importando Cena..." #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Running Custom Script.." msgstr "Rodando Script Personalizado..." #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Couldn't load post-import script:" msgstr "Não se pôde carregar script pós-importação:" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Invalid/broken script for post-import (check console):" msgstr "Script pós-importação inválido/quebrado (verifique o console):" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Error running post-import script:" msgstr "Erro ao rodar script pós-importação:" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Saving.." msgstr "Salvando..." #: editor/import_dock.cpp msgid "Set as Default for '%s'" -msgstr "" +msgstr "Definir como padrão para '%'" #: editor/import_dock.cpp msgid "Clear Default for '%s'" -msgstr "" +msgstr "Limpar padrão para '%'" #: editor/import_dock.cpp msgid " Files" @@ -2753,581 +2712,9 @@ msgid "Preset.." msgstr "Predefinição..." #: editor/import_dock.cpp -#, fuzzy msgid "Reimport" msgstr "Reimportar" -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "No bit masks to import!" -msgstr "Sem máscaras de bits para importar!" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path is empty." -msgstr "Caminho destino está vazio." - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must be a complete resource path." -msgstr "Caminho destino deve ser um caminho completo a um recurso." - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must exist." -msgstr "Caminho destino deve existir." - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Save path is empty!" -msgstr "Caminho de salvamento vazio!" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Import BitMasks" -msgstr "Importar Máscara de Bits" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s):" -msgstr "Textura(s) de Origem:" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Target Path:" -msgstr "Caminho Destino:" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Accept" -msgstr "Aceitar" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Bit Mask" -msgstr "Máscara de Bits" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No source font file!" -msgstr "Falta arquivo de fonte origem!" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No target font resource!" -msgstr "Falta recurso de fonte destino!" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "" -"Invalid file extension.\n" -"Please use .font." -msgstr "" -"Extensão de arquivo inválida.\n" -"Por favor use .font." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Can't load/process source font." -msgstr "Não se pôde carregar/processar fonte de origem." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Couldn't save font." -msgstr "Não se pôde salvar fonte." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font:" -msgstr "Fonte Origem:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font Size:" -msgstr "Tamanho da Fonte de Origem:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Dest Resource:" -msgstr "Recurso Destino:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "The quick brown fox jumps over the lazy dog." -msgstr "" -"À noite, vovô Kowalsky vê o Ãmã cair no pé do pinguim queixoso e vovó põe " -"açúcar no chá de tâmaras do jabuti feliz." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Test:" -msgstr "Teste:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Options:" -msgstr "Opções:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Font Import" -msgstr "Importar Fonte" - -#: 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 arquivo já é um arquivo de fonte Godot, por favor forneça um arquivo " -"BMFont." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Failed opening as BMFont file." -msgstr "Falha ao abrir como arquivo BMFont." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error initializing FreeType." -msgstr "Erro ao inicializar FreeType." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Unknown font format." -msgstr "Formato de fonte desconhecido." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error loading font." -msgstr "Erro ao carregar fonte." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Invalid font size." -msgstr "Tamanho de fonte inválido." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Invalid font custom source." -msgstr "Origem personalizada da fonte inválida." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/plugins/theme_editor_plugin.cpp -msgid "Font" -msgstr "Fonte" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "No meshes to import!" -msgstr "Sem meshes para importar!" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Single Mesh Import" -msgstr "Importar Única Mesh" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Source Mesh(es):" -msgstr "Origem de Mesh(es):" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Mesh" -msgstr "Mesh" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Surface %d" -msgstr "SuperfÃcie %d" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "No samples to import!" -msgstr "Sem amostras para importar!" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Import Audio Samples" -msgstr "Importar Amostras de Ãudio" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Source Sample(s):" -msgstr "Amostra(s) de Origem:" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Audio Sample" -msgstr "Amostra de Ãudio" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "New Clip" -msgstr "Novo Clipe" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Animation Options" -msgstr "Opções da Animação" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Flags" -msgstr "Flags" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Bake FPS:" -msgstr "Precalcular FPS:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Optimizer" -msgstr "Otimizador" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Linear Error" -msgstr "Erro Linear Máximo" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angular Error" -msgstr "Erro Angular Máximo" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angle" -msgstr "Ângulo Máximo" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Clips" -msgstr "Clipes" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Start(s)" -msgstr "InÃcio(s)" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "End(s)" -msgstr "Fim(ns)" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Loop" -msgstr "Repetir" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Filters" -msgstr "Filtros" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source path is empty." -msgstr "Caminho de origem está vazio." - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't load post-import script." -msgstr "Não se pôde carregar script pós-importação." - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Invalid/broken script for post-import." -msgstr "Script pós-importação inválido/quebrado." - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Error importing scene." -msgstr "Erro ao importar cena." - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import 3D Scene" -msgstr "Importar Cena 3D" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source Scene:" -msgstr "Cena de Origem:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Same as Target Scene" -msgstr "Mesma da Cena Destino" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Shared" -msgstr "Compartilhado" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Target Texture Folder:" -msgstr "Pasta Destino para Textura:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Post-Process Script:" -msgstr "Script de Pós-Processamento:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Custom Root Node Type:" -msgstr "Tipo Personalizado de Nó Raiz:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Auto" -msgstr "Auto" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Root Node Name:" -msgstr "Nome do Nó RaÃz:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "The Following Files are Missing:" -msgstr "Os Seguintes Arquivos estão Faltando:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Anyway" -msgstr "Importar Mesmo Assim" - -#: editor/io_plugins/editor_scene_import_plugin.cpp scene/gui/dialogs.cpp -msgid "Cancel" -msgstr "Cancelar" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import & Open" -msgstr "Importar e Abrir" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Edited scene has not been saved, open imported scene anyway?" -msgstr "A cena editada não foi salva, abrir cena importada ainda assim?" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Image:" -msgstr "Importar Imagem:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Can't import a file over itself:" -msgstr "Não é possÃvel importar arquivo sobre si mesmo:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't localize path: %s (already local)" -msgstr "Caminho não pôde ser localizado: %s (já é local)" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "3D Scene Animation" -msgstr "Animação Cena 3D" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Uncompressed" -msgstr "Não comprimido" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossless (PNG)" -msgstr "Comprimido Sem Perdas (PNG)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossy (WebP)" -msgstr "Comprido Com Perdas (WebP)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress (VRAM)" -msgstr "Comprimido (VRAM)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Format" -msgstr "Formato da Textura" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Compression Quality (WebP):" -msgstr "Qualidade da Compressão da Textura (WebP):" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Options" -msgstr "Opções da Textura" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Please specify some files!" -msgstr "Por favor especifique alguns arquivos!" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "At least one file needed for Atlas." -msgstr "Pelo menos um arquivo é preciso para o Atlas." - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Error importing:" -msgstr "Erro ao importar:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Only one file is required for large texture." -msgstr "Apenas um arquivo é requerido para textura grande." - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Max Texture Size:" -msgstr "Tamanho Máximo de Textura:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for Atlas (2D)" -msgstr "Importar Texturas para Atlas (2D)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cell Size:" -msgstr "Tamanho da Célula:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Large Texture" -msgstr "Textura Grande" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Textures (2D)" -msgstr "Importar Texturas Grandes (2D)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture" -msgstr "Textura Origem" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Base Atlas Texture" -msgstr "Textura Base do Atlas" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s)" -msgstr "Textura(s) Origem(ns)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 2D" -msgstr "Importar Texturas para 2D" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 3D" -msgstr "Importar Texturas para 3D" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures" -msgstr "Importar Textura" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "2D Texture" -msgstr "Textura 2D" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "3D Texture" -msgstr "Textura 3D" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Atlas Texture" -msgstr "Textura Atlas" - -#: 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 não é obrigatório. Apenas copie arquivos png/jpg " -"para o projeto." - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Crop empty space." -msgstr "Aparar espaço vazio." - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture" -msgstr "Textura" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Texture" -msgstr "Importar Textura Grande" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Load Source Image" -msgstr "Carregar Imagem Origem" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Slicing" -msgstr "Fatiando" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Inserting" -msgstr "Inserindo" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Saving" -msgstr "Salvando" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save large texture:" -msgstr "Não se pôde salvar textura grande:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Build Atlas For:" -msgstr "Montar Atlas Para:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Loading Image:" -msgstr "Carregando Imagem:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't load image:" -msgstr "Não se pôde carregar imagem:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Converting Images" -msgstr "Convertendo Imagens" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cropping Images" -msgstr "Aparando Imagens" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Blitting Images" -msgstr "Fazendo Blitting das Imagens" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save atlas image:" -msgstr "Não se pôde salva imagem de atlas:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save converted texture:" -msgstr "Não se pôde salvar textura convertida:" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid source!" -msgstr "Origem inválida!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid translation source!" -msgstr "Origem de tradução inválida!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Column" -msgstr "Coluna" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/script_create_dialog.cpp -msgid "Language" -msgstr "Idioma" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No items to import!" -msgstr "Nenhum item a importar!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No target path!" -msgstr "Nenhum caminho destino!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translations" -msgstr "Importar Traduções" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Couldn't import!" -msgstr "Não foi possÃvel importar!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translation" -msgstr "Importar Tradução" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Source CSV:" -msgstr "Arquivo CSV Origem:" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Ignore First Row" -msgstr "Ignorar Primeira Linha" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Compress" -msgstr "Comprimir" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Add to Project (project.godot)" -msgstr "Adicionar ao Projeto (project.godot)" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Languages:" -msgstr "Importar Idiomas:" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Translation" -msgstr "Tradução" - #: editor/multi_node_edit.cpp msgid "MultiNode Set" msgstr "Múltiplos Nós definidos" @@ -3340,6 +2727,49 @@ msgstr "Grupos" msgid "Select a Node to edit Signals and Groups." msgstr "Selecione um Nó para editar Sinais e Grupos." +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create Poly" +msgstr "Criar polÃgono" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly" +msgstr "Editar PolÃgono" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +#, fuzzy +msgid "Insert Point" +msgstr "Inserindo" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly (Remove Point)" +msgstr "Editar PolÃgono (Remover Ponto)" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Remove Poly And Point" +msgstr "Remover PolÃgono e Ponto" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create a new polygon from scratch." +msgstr "Criar um novo polÃgono do zero." + +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "" +"Edit existing polygon:\n" +"LMB: Move Point.\n" +"Ctrl+LMB: Split Segment.\n" +"RMB: Erase Point." +msgstr "" +"Editar polÃgono existente:\n" +"LMB: Mover Ponto.\n" +"Ctrl+LMB: Soltar Segmento.\n" +"RMB: Apagar Ponto." + #: editor/plugins/animation_player_editor_plugin.cpp msgid "Toggle Autoplay" msgstr "Alternar Inicio automático" @@ -3496,7 +2926,6 @@ msgstr "Nome da Animação:" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp #: editor/script_create_dialog.cpp msgid "Error!" @@ -3524,9 +2953,8 @@ msgid "New name:" msgstr "Novo nome:" #: editor/plugins/animation_tree_editor_plugin.cpp -#, fuzzy msgid "Edit Filters" -msgstr "Editar Filtros de Nó" +msgstr "Editar Filtros" #: editor/plugins/animation_tree_editor_plugin.cpp #: editor/plugins/multimesh_editor_plugin.cpp @@ -3607,10 +3035,6 @@ msgid "Delete Input" msgstr "Deletar Entrada" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Rename" -msgstr "Renomear" - -#: editor/plugins/animation_tree_editor_plugin.cpp msgid "Animation tree is valid." msgstr "Ãrvore de Animação é válida." @@ -3666,64 +3090,181 @@ msgstr "Editar Filtros de Nó" msgid "Filters.." msgstr "Filtros..." -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing %d Triangles:" -msgstr "Analisando %d Triângulos:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Free" +msgstr "Livrar" -#: editor/plugins/baked_light_baker.cpp -msgid "Triangle #" -msgstr "Triângulo nº" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Contents:" +msgstr "Conteúdo:" -#: editor/plugins/baked_light_baker.cpp -msgid "Light Baker Setup:" -msgstr "Configurar Baker de Luz:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "View Files" +msgstr "Ver Arquivos" -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing Geometry" -msgstr "Analisando Geometria" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve hostname:" +msgstr "Não foi possÃvel resolver o hostname:" -#: editor/plugins/baked_light_baker.cpp -msgid "Fixing Lights" -msgstr "Consertando Luzes" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve." +msgstr "Não foi possÃvel resolver." -#: editor/plugins/baked_light_baker.cpp -msgid "Making BVH" -msgstr "Fazendo BVH" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connection error, please try again." +msgstr "Erro na conexão, por favor tente novamente." -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Light Octree" -msgstr "Criando Luz Octree" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't connect." +msgstr "Não foi possÃvel conectar." -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Octree Texture" -msgstr "Criando Textura Octree" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't connect to host:" +msgstr "Não foi possÃvel conectar ao host:" -#: editor/plugins/baked_light_baker.cpp -msgid "Transfer to Lightmaps:" -msgstr "Transferir para Mapas de Luz:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response from host:" +msgstr "Sem resposta do host:" -#: editor/plugins/baked_light_baker.cpp -msgid "Allocating Texture #" -msgstr "Alocando Textura nº" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response." +msgstr "Sem resposta." -#: editor/plugins/baked_light_baker.cpp -msgid "Baking Triangle #" -msgstr "Precalculando Triângulo nº" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, return code:" +msgstr "Solicitação falhou, código de retorno:" -#: editor/plugins/baked_light_baker.cpp -msgid "Post-Processing Texture #" -msgstr "Pós-Processando Textura nº" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Req. Failed." +msgstr "Sol. Falhou." -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Bake!" -msgstr "Precalcular!" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, too many redirects" +msgstr "Solicitação falhou, redirecionamentos demais" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Redirect Loop." +msgstr "Loop de Redirecionamento." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed:" +msgstr "Falhou:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Bad download hash, assuming file has been tampered with." +msgstr "Hash de download ruim, assumindo que o arquivo foi adulterado." -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Reset the lightmap octree baking process (start over)." -msgstr "Redefinir o processo \"octree baking\" do lightmap (recomeçar)." +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Expected:" +msgstr "Esperado:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Got:" +msgstr "Obtido:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed sha256 hash check" +msgstr "Falha na verificação da hash sha256" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Asset Download Error:" +msgstr "Erro no Download do Asset:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Fetching:" +msgstr "Procurando:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Resolving.." +msgstr "Resolvendo.." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connecting.." +msgstr "Conectando.." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Requesting.." +msgstr "Solicitando.." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Error making request" +msgstr "Erro ao fazer solicitação" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Idle" +msgstr "Ocioso" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Retry" +msgstr "Tentar Novamente" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download Error" +msgstr "Erro no Download" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download for this asset is already in progress!" +msgstr "Download deste asset já está em progresso!" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "first" +msgstr "prim" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "prev" +msgstr "ant" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "next" +msgstr "prox" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "last" +msgstr "ult" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "All" +msgstr "Todos" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Plugins" +msgstr "Plugins" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Sort:" +msgstr "Ordenar:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Reverse" +msgstr "Reverso" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Category:" +msgstr "Categoria:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Site:" +msgstr "Site:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Support.." +msgstr "Suporte.." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Official" +msgstr "Oficial" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Testing" +msgstr "Em teste" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Assets ZIP File" +msgstr "Arquivo ZIP de Assets" #: editor/plugins/camera_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp msgid "Preview" msgstr "Visualização" @@ -3766,12 +3307,18 @@ msgid "Edit CanvasItem" msgstr "Editar CanvaItem" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Change Anchors" +#, fuzzy +msgid "Anchors only" +msgstr "Âncora" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Change Anchors and Margins" msgstr "Alterar Âncoras" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom (%):" -msgstr "Ampliação (%):" +msgid "Change Anchors" +msgstr "Alterar Âncoras" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Paste Pose" @@ -3800,9 +3347,8 @@ msgid "Alt+RMB: Depth list selection" msgstr "Alt+RMB: Lista de seleção de profundidade" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move Mode" -msgstr "Modo Mover (W)" +msgstr "Modo Mover" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy @@ -3827,60 +3373,78 @@ msgid "Pan Mode" msgstr "Modo Panorâmico" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Lock the selected object in place (can't be moved)." -msgstr "Travar o objeto selecionado no local (não pode ser movido)." +#, fuzzy +msgid "Toggles snapping" +msgstr "Alternar Ponto de interrupção" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Unlock the selected object (can be moved)." -msgstr "Destravar o objeto selecionado (pode ser movido)." +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "Usar Snap" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Makes sure the object's children are not selectable." -msgstr "Garante que os filhos do objeto não sejam selecionáveis." +#, fuzzy +msgid "Snapping options" +msgstr "Opções da Animação" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Restores the object's children's ability to be selected." -msgstr "Restaura a habilidade dos filhos do objeto de serem selecionados." +#, fuzzy +msgid "Snap to grid" +msgstr "Modo Snap:" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp -#: editor/project_settings_editor.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Edit" -msgstr "Editar" +msgid "Use Rotation Snap" +msgstr "Usar Snap de Rotação" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" -msgstr "Usar Snap" +#, fuzzy +msgid "Configure Snap..." +msgstr "Configurar Snap..." #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" -msgstr "Mostrar Grade" +msgid "Snap Relative" +msgstr "Snap Relativo" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Rotation Snap" -msgstr "Usar Snap de Rotação" +msgid "Use Pixel Snap" +msgstr "Usar Snap de Pixel" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap Relative" -msgstr "Snap Relativo" +msgid "Smart snapping" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "Configurar Snap..." +#, fuzzy +msgid "Snap to parent" +msgstr "Expandir para Pai" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Pixel Snap" -msgstr "Usar Snap de Pixel" +msgid "Snap to node anchor" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Skeleton.." -msgstr "Esqueleto..." +msgid "Snap to node sides" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to other nodes" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Lock the selected object in place (can't be moved)." +msgstr "Travar o objeto selecionado no local (não pode ser movido)." + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Unlock the selected object (can be moved)." +msgstr "Destravar o objeto selecionado (pode ser movido)." + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Makes sure the object's children are not selectable." +msgstr "Garante que os filhos do objeto não sejam selecionáveis." + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Restores the object's children's ability to be selected." +msgstr "Restaura a habilidade dos filhos do objeto de serem selecionados." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Make Bones" @@ -3891,9 +3455,8 @@ msgid "Clear Bones" msgstr "Limpar Ossos" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Bones" -msgstr "Fazer Ossos" +msgstr "Mostrar Ossos" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Make IK Chain" @@ -3909,12 +3472,19 @@ msgid "View" msgstr "Visualizar" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Reset" -msgstr "Restaurar Ampliação" +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "Mostrar Grade" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Set.." -msgstr "Definir Ampliação..." +#, fuzzy +msgid "Show helpers" +msgstr "Mostrar Ossos" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show rulers" +msgstr "Mostrar Ossos" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -3925,8 +3495,9 @@ msgid "Frame Selection" msgstr "Seleção de Quadros" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Anchor" -msgstr "Âncora" +#, fuzzy +msgid "Layout" +msgstr "Salvar Layout" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Keys" @@ -3949,91 +3520,66 @@ msgid "Clear Pose" msgstr "Limpar Pose" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Set a Value" -msgstr "Defina um Valor" +msgid "Drag pivot from mouse position" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Set pivot at mouse position" +msgstr "Definir Pos da SaÃda da Curva" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap (Pixels):" -msgstr "Snap (Pixels):" +msgid "Multiply grid step by 2" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Divide grid step by 2" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Add %s" -msgstr "Adicionar Todos" +msgstr "Adicionar %s" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Adding %s..." -msgstr "" +msgstr "Adicionando %s..." -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Create Node" msgstr "Criar Nó" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Error instancing scene from %s" msgstr "Erro ao instanciar cena de %s" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "OK :(" msgstr "OK :(" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "No parent to instance a child at." -msgstr "Sem nó pai onde instanciar um filho." +msgstr "Sem pai onde instanciar um filho." -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "This operation requires a single selected node." msgstr "Essa operação requer um único nó selecionado." #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Change default type" -msgstr "Alterar Valor Padrão" +msgstr "Alterar tipo padrão" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Drag & drop + Shift : Add node as sibling\n" "Drag & drop + Alt : Change node type" msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Create Poly" -msgstr "Criar polÃgono" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly" -msgstr "Editar PolÃgono" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly (Remove Point)" -msgstr "Editar PolÃgono (Remover Ponto)" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Create a new polygon from scratch." -msgstr "Criar um novo polÃgono do zero." - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -msgid "" -"Edit existing polygon:\n" -"LMB: Move Point.\n" -"Ctrl+LMB: Split Segment.\n" -"RMB: Erase Point." -msgstr "" +"Arrastar e soltar + Shift : Adicionar nó como irmão\n" +"Arrastar e soltar + Alt : Mudar tipo de nó" #: editor/plugins/collision_polygon_editor_plugin.cpp msgid "Create Poly3D" @@ -4044,14 +3590,6 @@ msgid "Set Handle" msgstr "Definir Manipulador" #: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Creating Mesh Library" -msgstr "Criando MeshLibrary" - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Thumbnail.." -msgstr "Miniatura..." - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Remove item %d?" msgstr "Remover item %d?" @@ -4074,14 +3612,36 @@ msgid "Update from Scene" msgstr "Atualizar a partir de Cena" #: editor/plugins/curve_editor_plugin.cpp +msgid "Flat0" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Flat1" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +#, fuzzy +msgid "Ease in" +msgstr "Ease In" + +#: editor/plugins/curve_editor_plugin.cpp +#, fuzzy +msgid "Ease out" +msgstr "Ease Out" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Smoothstep" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp #, fuzzy msgid "Modify Curve Point" -msgstr "Modificar Curve Map" +msgstr "Modificar Ponto da Curva" #: editor/plugins/curve_editor_plugin.cpp #, fuzzy msgid "Modify Curve Tangent" -msgstr "Modificar Curve Map" +msgstr "Modificar Tangente da Curva" #: editor/plugins/curve_editor_plugin.cpp #, fuzzy @@ -4089,24 +3649,20 @@ msgid "Load Curve Preset" msgstr "Carregar Recurso" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Add point" -msgstr "Adicionar Entrada" +msgstr "Adicionar ponto" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Remove point" -msgstr "Remover Ponto do Caminho" +msgstr "Remover ponto" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Left linear" -msgstr "Linear" +msgstr "Linear esquerda" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Right linear" -msgstr "Visão Direita" +msgstr "Linear direita" #: editor/plugins/curve_editor_plugin.cpp #, fuzzy @@ -4119,12 +3675,13 @@ msgid "Remove Curve Point" msgstr "Remover Ponto do Caminho" #: editor/plugins/curve_editor_plugin.cpp +#, fuzzy msgid "Toggle Curve Linear Tangent" -msgstr "" +msgstr "Alternar Curva Linear Tangente" #: editor/plugins/curve_editor_plugin.cpp msgid "Hold Shift to edit tangents individually" -msgstr "" +msgstr "Segure Shift para editar tangentes individualmente" #: editor/plugins/gradient_editor_plugin.cpp msgid "Add/Remove Color Ramp Point" @@ -4152,45 +3709,40 @@ msgid "" "No OccluderPolygon2D resource on this node.\n" "Create and assign one?" msgstr "" +"Nenhum recurso OccluderPolygon2D neste nó.\n" +"Criar e atribuir um?" #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "Create Occluder Polygon" msgstr "Criar PolÃgono de Oclusão" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Edit existing polygon:" msgstr "Editar polÃgono existente:" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "LMB: Move Point." msgstr "LMB: Mover Ponto." #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Ctrl+LMB: Split Segment." msgstr "Ctrl+LMB: Dividir Segmento." #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "RMB: Erase Point." msgstr "RMB: Apagar Ponto." #: editor/plugins/line_2d_editor_plugin.cpp -#, fuzzy msgid "Remove Point from Line2D" -msgstr "Remover Ponto da Curva" +msgstr "Remover Ponto de Line2D" #: editor/plugins/line_2d_editor_plugin.cpp -#, fuzzy msgid "Add Point to Line2D" -msgstr "Adicionar Ponto à Curva" +msgstr "Adicionar Ponto ao Line2D" #: editor/plugins/line_2d_editor_plugin.cpp -#, fuzzy msgid "Move Point in Line2D" -msgstr "Mover Ponto na Curva" +msgstr "Mover Ponto em Line2D" #: editor/plugins/line_2d_editor_plugin.cpp #: editor/plugins/path_2d_editor_plugin.cpp @@ -4223,9 +3775,8 @@ msgid "Add Point (in empty space)" msgstr "Adicionar Ponto (em espaço vazio)" #: editor/plugins/line_2d_editor_plugin.cpp -#, fuzzy msgid "Split Segment (in line)" -msgstr "Dividir Segmentos (na curva)" +msgstr "Dividir Segmento (em linha)" #: editor/plugins/line_2d_editor_plugin.cpp #: editor/plugins/path_2d_editor_plugin.cpp @@ -4278,6 +3829,10 @@ msgid "Create Outline" msgstr "Criar Contorno" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh" +msgstr "Mesh" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Body" msgstr "Criar Corpo Trimesh Estático" @@ -4406,27 +3961,97 @@ msgstr "Escala aleatória:" msgid "Populate" msgstr "Popular" +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Bake!" +msgstr "Precalcular!" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +#, fuzzy +msgid "Bake the navigation mesh.\n" +msgstr "Criar Mesh de Navegação" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +#, fuzzy +msgid "Clear the navigation mesh." +msgstr "Criar Mesh de Navegação" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Setting up Configuration..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Calculating grid size..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Creating heightfield..." +msgstr "Criando Luz Octree" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Marking walkable triangles..." +msgstr "Strings TraduzÃveis..." + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Constructing compact heightfield..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Eroding walkable area..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Partioning..." +msgstr "Aviso" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Creating contours..." +msgstr "Criando Textura Octree" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Creating polymesh..." +msgstr "Criar Mesh de Contorno..." + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Converting to native navigation mesh..." +msgstr "Criar Mesh de Navegação" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Navigation Mesh Generator Setup:" +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Parsing Geometry..." +msgstr "Analisando Geometria" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Done!" +msgstr "" + #: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Create Navigation Polygon" msgstr "Criar PolÃgono de Navegação" -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Remove Poly And Point" -msgstr "Remover PolÃgono e Ponto" - #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Clear Emission Mask" msgstr "Limpar Máscara de Emissão" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "Generating AABB" -msgstr "Gerar AABB" +msgstr "Gerando AABB" #: editor/plugins/particles_2d_editor_plugin.cpp +#, fuzzy msgid "Can only set point into a ParticlesMaterial process material" msgstr "" +"Só é permitido colocar um ponto em um material processador ParticlesMaterial." #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Error loading image:" @@ -4442,7 +4067,7 @@ msgstr "Definir Máscara de Emissão" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generate Visibility Rect" -msgstr "" +msgstr "Gerar Retângulo de Visibilidade" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Load Emission Mask" @@ -4450,9 +4075,8 @@ msgstr "Carregar Máscara de Emissão" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "Particles" -msgstr "Vértice" +msgstr "PartÃculas" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generated Point Count:" @@ -4460,24 +4084,20 @@ msgstr "Gerar Contagem de Pontos:" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "Generation Time (sec):" -msgstr "Tempo Médio (seg)" +msgstr "Gerando Tempo (seg):" #: editor/plugins/particles_2d_editor_plugin.cpp -#, fuzzy msgid "Emission Mask" -msgstr "Definir Máscara de Emissão" +msgstr "Máscara de Emissão" #: editor/plugins/particles_2d_editor_plugin.cpp -#, fuzzy msgid "Capture from Pixel" -msgstr "Criar a partir de Cena" +msgstr "Capturar a partir do Pixel" #: editor/plugins/particles_2d_editor_plugin.cpp -#, fuzzy msgid "Emission Colors" -msgstr "Posições de Emissão:" +msgstr "Cores de Emissão" #: editor/plugins/particles_editor_plugin.cpp msgid "Node does not contain geometry." @@ -4488,8 +4108,9 @@ msgid "Node does not contain geometry (faces)." msgstr "O nó não contém geometria (faces)." #: editor/plugins/particles_editor_plugin.cpp +#, fuzzy msgid "A processor material of type 'ParticlesMaterial' is required." -msgstr "" +msgstr "Um material processador do tipo 'ParticlesMaterial' é necessário." #: editor/plugins/particles_editor_plugin.cpp msgid "Faces contain no area!" @@ -4504,14 +4125,12 @@ msgid "Generate AABB" msgstr "Gerar AABB" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "Create Emission Points From Mesh" -msgstr "Criar Emissor a partir de Mesh" +msgstr "Criar Pontos de Emissão a Partir do Mesh" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "Create Emission Points From Node" -msgstr "Criar Emissor a partir de Nó" +msgstr "Criar Pontos de Emissão a Partir do Nó" #: editor/plugins/particles_editor_plugin.cpp msgid "Clear Emitter" @@ -4522,32 +4141,28 @@ msgid "Create Emitter" msgstr "Criar Emissor" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "Emission Points:" -msgstr "Posições de Emissão:" +msgstr "Pontos de Emissão:" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "Surface Points" -msgstr "SuperfÃcie %d" +msgstr "Pontos de SuperfÃcie" #: editor/plugins/particles_editor_plugin.cpp msgid "Surface Points+Normal (Directed)" -msgstr "" +msgstr "Pontos de SuperfÃcie+Normal (Direcionadas)" #: editor/plugins/particles_editor_plugin.cpp msgid "Volume" msgstr "Volume" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "Emission Source: " -msgstr "Preenchimento de Emissão:" +msgstr "Origem da Emissão: " #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "Generate Visibility AABB" -msgstr "Gerar AABB" +msgstr "Gerar AABB de Visibilidade" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Remove Point from Curve" @@ -4599,15 +4214,18 @@ msgid "Curve Point #" msgstr "Ponto da Curva nº" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Point Pos" +#, fuzzy +msgid "Set Curve Point Position" msgstr "Definir Pos do Ponto da Curva" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve In Pos" +#, fuzzy +msgid "Set Curve In Position" msgstr "Definir Pos da Entrada da Curva" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Out Pos" +#, fuzzy +msgid "Set Curve Out Position" msgstr "Definir Pos da SaÃda da Curva" #: editor/plugins/path_editor_plugin.cpp @@ -4669,6 +4287,14 @@ msgid "Scale Polygon" msgstr "Escalonar PolÃgono" #: editor/plugins/polygon_2d_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit" +msgstr "Editar" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon->UV" msgstr "PolÃgono->UV" @@ -4723,63 +4349,10 @@ msgstr "Carregar Recurso" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "Colar" -#: editor/plugins/rich_text_editor_plugin.cpp -msgid "Parse BBCode" -msgstr "Analisar BBCode" - -#: editor/plugins/sample_editor_plugin.cpp -msgid "Length:" -msgstr "Duração:" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Open Sample File(s)" -msgstr "Abrir Arquivo(s) de Amostra" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "ERROR: Couldn't load sample!" -msgstr "ERRO: Não é possÃvel carregar a amostra!" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Add Sample" -msgstr "Adicionar Amostra" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Rename Sample" -msgstr "Renomear Amostra" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Delete Sample" -msgstr "Excluir Amostra" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "16 Bits" -msgstr "16 bits" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "8 Bits" -msgstr "8 Bits" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Stereo" -msgstr "Estéreo" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Mono" -msgstr "Mono" - -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/script_editor_debugger.cpp -msgid "Format" -msgstr "Formato" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Pitch" -msgstr "Pitch" - #: editor/plugins/script_editor_plugin.cpp #, fuzzy msgid "Clear Recent Files" @@ -4790,6 +4363,8 @@ msgid "" "Close and save changes?\n" "\"" msgstr "" +"Fechar e salvar mudanças?\n" +"\"" #: editor/plugins/script_editor_plugin.cpp msgid "Error while saving theme" @@ -4817,7 +4392,7 @@ msgstr "Salvar Tema Como..." #: editor/plugins/script_editor_plugin.cpp msgid " Class Reference" -msgstr "" +msgstr " Referência de Classes" #: editor/plugins/script_editor_plugin.cpp msgid "Next script" @@ -4872,6 +4447,10 @@ msgstr "Fechar Docs" msgid "Close All" msgstr "Fechar" +#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp +msgid "Run" +msgstr "Rodar" + #: editor/plugins/script_editor_plugin.cpp #, fuzzy msgid "Toggle Scripts Panel" @@ -4915,18 +4494,6 @@ msgid "Debug with external editor" msgstr "Abrir o próximo Editor" #: editor/plugins/script_editor_plugin.cpp -msgid "Window" -msgstr "Janela" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Left" -msgstr "Mover para Esquerda" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Right" -msgstr "Mover para Direita" - -#: editor/plugins/script_editor_plugin.cpp #, fuzzy msgid "Open Godot online documentation" msgstr "Pesquise a documentação de referência." @@ -4984,8 +4551,9 @@ msgstr "" "carregada" #: editor/plugins/script_text_editor.cpp +#, fuzzy msgid "Only resources from filesystem can be dropped." -msgstr "" +msgstr "Apenas recursos de Arquivos podem ser soltos." #: editor/plugins/script_text_editor.cpp #, fuzzy @@ -4999,15 +4567,15 @@ msgstr "Convertendo Imagens" #: editor/plugins/script_text_editor.cpp msgid "Uppercase" -msgstr "" +msgstr "Maiúscula" #: editor/plugins/script_text_editor.cpp msgid "Lowercase" -msgstr "" +msgstr "Minúscula" #: editor/plugins/script_text_editor.cpp msgid "Capitalize" -msgstr "" +msgstr "Capitalizar" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp @@ -5017,7 +4585,7 @@ msgstr "Recortar" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Copy" msgstr "Copiar" @@ -5066,11 +4634,11 @@ msgstr "Apagar Espaços em Branco" #: editor/plugins/script_text_editor.cpp msgid "Convert Indent To Spaces" -msgstr "" +msgstr "Converter Indentação Para Espaços" #: editor/plugins/script_text_editor.cpp msgid "Convert Indent To Tabs" -msgstr "" +msgstr "Converter Indentação Para Tabs" #: editor/plugins/script_text_editor.cpp msgid "Auto Indent" @@ -5128,7 +4696,7 @@ msgstr "Ajuda Contextual" #: editor/plugins/shader_editor_plugin.cpp msgid "Shader" -msgstr "" +msgstr "Shader" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Scalar Constant" @@ -5283,10 +4851,6 @@ msgid "View Plane Transform." msgstr "Visualizar Transformação do Plano." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Scaling to %s%%." -msgstr "Escalonando para %s%%." - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." msgstr "Rotacionando %s degraus." @@ -5303,10 +4867,6 @@ msgid "Top View." msgstr "Visão Superior." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Top" -msgstr "Cima" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "Visão Traseira." @@ -5348,7 +4908,7 @@ msgstr "Chave de Animação Inserida." #: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" -msgstr "" +msgstr "Objetos Desenhados" #: editor/plugins/spatial_editor_plugin.cpp #, fuzzy @@ -5367,7 +4927,7 @@ msgstr "Atualizar nas Mudanças" #: editor/plugins/spatial_editor_plugin.cpp msgid "Draw Calls" -msgstr "" +msgstr "Chamadas de Desenho" #: editor/plugins/spatial_editor_plugin.cpp #, fuzzy @@ -5407,7 +4967,7 @@ msgstr "Gizmos" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Information" -msgstr "" +msgstr "VIsualizar Informação" #: editor/plugins/spatial_editor_plugin.cpp msgid "Audio Listener" @@ -5419,12 +4979,14 @@ msgid "Doppler Enable" msgstr "Habilitar" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy msgid "Freelook Left" -msgstr "" +msgstr "Olhar Livre à Esquerda" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy msgid "Freelook Right" -msgstr "" +msgstr "Olhar Livre à Direita" #: editor/plugins/spatial_editor_plugin.cpp #, fuzzy @@ -5437,8 +4999,9 @@ msgid "Freelook Backwards" msgstr "Para trás" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy msgid "Freelook Up" -msgstr "" +msgstr "Olhar Livre Acima" #: editor/plugins/spatial_editor_plugin.cpp #, fuzzy @@ -5446,8 +5009,9 @@ msgid "Freelook Down" msgstr "Roda para Baixo." #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy msgid "Freelook Speed Modifier" -msgstr "" +msgstr "Modificador de velocidade do Olhar Livre" #: editor/plugins/spatial_editor_plugin.cpp #, fuzzy @@ -5553,6 +5117,10 @@ msgid "Transform" msgstr "Transformação" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Configure Snap.." +msgstr "Configurar Snap..." + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Local Coords" msgstr "Coordenadas Locais" @@ -5698,6 +5266,10 @@ msgid "Speed (FPS):" msgstr "Velocidade (FPS):" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Loop" +msgstr "Repetir" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animation Frames" msgstr "Quadros da Animação" @@ -5710,12 +5282,14 @@ msgid "Insert Empty (After)" msgstr "Inserir Vazio (Depois)" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Up" -msgstr "Acima" +#, fuzzy +msgid "Move (Before)" +msgstr "Remover Nó(s)" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Down" -msgstr "Abaixo" +#, fuzzy +msgid "Move (After)" +msgstr "Mover para Esquerda" #: editor/plugins/style_box_editor_plugin.cpp msgid "StyleBox Preview:" @@ -5880,6 +5454,10 @@ msgid "Style" msgstr "Estilo" #: editor/plugins/theme_editor_plugin.cpp +msgid "Font" +msgstr "Fonte" + +#: editor/plugins/theme_editor_plugin.cpp msgid "Color" msgstr "Cor" @@ -5898,8 +5476,9 @@ msgid "Line Draw" msgstr "Linear" #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy msgid "Rectangle Paint" -msgstr "" +msgstr "Pintura Retângular" #: editor/plugins/tile_map_editor_plugin.cpp #, fuzzy @@ -5931,8 +5510,9 @@ msgid "Mirror Y" msgstr "Espelhar Y" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Bucket" -msgstr "Balde" +#, fuzzy +msgid "Paint Tile" +msgstr "Pintar TileMap" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Pick Tile" @@ -5999,6 +5579,11 @@ msgstr "Excluir os arquivos selecionados?" #: editor/project_export.cpp #, fuzzy +msgid "Export templates for this platform are missing/corrupted: " +msgstr "Modelos de exportação para esta plataforma não foram encontrados:" + +#: editor/project_export.cpp +#, fuzzy msgid "Presets" msgstr "Predefinição..." @@ -6067,7 +5652,7 @@ msgstr "Textura" #: editor/project_export.cpp msgid "Custom (comma-separated):" -msgstr "" +msgstr "Personalizado (separado por vÃrgula):" #: editor/project_export.cpp #, fuzzy @@ -6080,7 +5665,12 @@ msgstr "Exportar PCK/Zip" #: editor/project_export.cpp msgid "Export templates for this platform are missing:" -msgstr "" +msgstr "Modelos de exportação para esta plataforma não foram encontrados:" + +#: editor/project_export.cpp +#, fuzzy +msgid "Export templates for this platform are missing/corrupted:" +msgstr "Modelos de exportação para esta plataforma não foram encontrados:" #: editor/project_export.cpp #, fuzzy @@ -6088,29 +5678,53 @@ msgid "Export With Debug" msgstr "Exportar Tile Set" #: editor/project_manager.cpp -msgid "Invalid project path, the path must exist!" -msgstr "Caminho de projeto inválido, o caminho deve existir!" +#, fuzzy +msgid "The path does not exists." +msgstr "O arquivo não existe." #: editor/project_manager.cpp #, fuzzy -msgid "Invalid project path, project.godot must not exist." -msgstr "Caminho de projeto inválido, engine.cfg não deve existir." +msgid "Please choose a 'project.godot' file." +msgstr "Por favor export para fora da pasta do projeto!" #: editor/project_manager.cpp -#, fuzzy -msgid "Invalid project path, project.godot must exist." -msgstr "Caminho de projeto inválido, engine.cfg deve existir." +msgid "" +"Your project will be created in a non empty folder (you might want to create " +"a new folder)." +msgstr "" + +#: editor/project_manager.cpp +msgid "Please choose a folder that does not contain a 'project.godot' file." +msgstr "" #: editor/project_manager.cpp msgid "Imported Project" msgstr "Projeto Importado" #: editor/project_manager.cpp +msgid " " +msgstr "" + +#: editor/project_manager.cpp +msgid "It would be a good idea to name your project." +msgstr "" + +#: editor/project_manager.cpp msgid "Invalid project path (changed anything?)." msgstr "Caminho de projeto inválido (mudou alguma coisa?)." #: editor/project_manager.cpp #, fuzzy +msgid "Couldn't get project.godot in project path." +msgstr "Não se pôde criar engine.cfg no caminho do projeto." + +#: editor/project_manager.cpp +#, fuzzy +msgid "Couldn't edit project.godot in project path." +msgstr "Não se pôde criar engine.cfg no caminho do projeto." + +#: editor/project_manager.cpp +#, fuzzy msgid "Couldn't create project.godot in project path." msgstr "Não se pôde criar engine.cfg no caminho do projeto." @@ -6119,38 +5733,49 @@ msgid "The following files failed extraction from package:" msgstr "Os arquivos a seguir falharam ao serem extraÃdos do pacote:" #: editor/project_manager.cpp +#, fuzzy +msgid "Rename Project" +msgstr "Projeto Sem Nome" + +#: editor/project_manager.cpp +#, fuzzy +msgid "Couldn't get project.godot in the project path." +msgstr "Não se pôde criar engine.cfg no caminho do projeto." + +#: editor/project_manager.cpp +msgid "New Game Project" +msgstr "Novo Projeto de Jogo" + +#: editor/project_manager.cpp msgid "Import Existing Project" msgstr "Importar Projeto Existente" #: editor/project_manager.cpp -msgid "Project Path (Must Exist):" -msgstr "Caminho do Projeto (Deve Existir):" +msgid "Create New Project" +msgstr "Criar Novo Projeto" + +#: editor/project_manager.cpp +msgid "Install Project:" +msgstr "Instalar Projeto:" #: editor/project_manager.cpp msgid "Project Name:" msgstr "Nome do Projeto:" #: editor/project_manager.cpp -msgid "Create New Project" -msgstr "Criar Novo Projeto" +#, fuzzy +msgid "Create folder" +msgstr "Criar Pasta" #: editor/project_manager.cpp msgid "Project Path:" msgstr "Caminho do Projeto:" #: editor/project_manager.cpp -msgid "Install Project:" -msgstr "Instalar Projeto:" - -#: editor/project_manager.cpp msgid "Browse" msgstr "Navegar" #: editor/project_manager.cpp -msgid "New Game Project" -msgstr "Novo Projeto de Jogo" - -#: editor/project_manager.cpp msgid "That's a BINGO!" msgstr "É um BINGO!" @@ -6160,6 +5785,11 @@ msgstr "Projeto Sem Nome" #: editor/project_manager.cpp #, fuzzy +msgid "Can't open project" +msgstr "Não é possÃvel conectar..." + +#: editor/project_manager.cpp +#, fuzzy msgid "Are you sure to open more than one project?" msgstr "Tem certeza de que quer abrir mais de um projeto?" @@ -6179,6 +5809,8 @@ msgid "" "Can't run project: Assets need to be imported.\n" "Please edit the project to trigger the initial import." msgstr "" +"Não foi possÃvel executar o projeto: Os recursos precisam ser importados.\n" +"Por favor, edite o projeto para iniciar a importação inicial." #: editor/project_manager.cpp #, fuzzy @@ -6194,16 +5826,14 @@ msgid "" "You are about the scan %s folders for existing Godot projects. Do you " "confirm?" msgstr "" +"Você está para analisar %s pastas por projetos existentes da Godot. Você " +"confirma?" #: editor/project_manager.cpp msgid "Project List" msgstr "Lista de Projetos" #: editor/project_manager.cpp -msgid "Run" -msgstr "Rodar" - -#: editor/project_manager.cpp msgid "Scan" msgstr "Escanear" @@ -6263,17 +5893,14 @@ msgid "Add Input Action Event" msgstr "Adicionar Evento Ação de Entrada" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Meta+" msgstr "Meta+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Shift+" msgstr "Shift+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Alt+" msgstr "Alt+" @@ -6335,7 +5962,7 @@ msgstr "Alterar" msgid "Joypad Axis Index:" msgstr "Eixo do Joystick:" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Axis" msgstr "Eixo" @@ -6357,31 +5984,31 @@ msgstr "Apagar Evento Ação de Entrada" msgid "Add Event" msgstr "Adicionar Vazio" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Device" msgstr "Dispositivo" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Button" msgstr "Botão" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Left Button." msgstr "Botão Esquerdo." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Right Button." msgstr "Botão Direito." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Middle Button." msgstr "Botão do Meio." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Up." msgstr "Roda para Cima." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Down." msgstr "Roda para Baixo." @@ -6391,8 +6018,9 @@ msgid "Add Global Property" msgstr "Adicionar Getter de Propriedade" #: editor/project_settings_editor.cpp -msgid "Select an setting item first!" -msgstr "" +#, fuzzy +msgid "Select a setting item first!" +msgstr "Selecione um item de configuração primeiro!" #: editor/project_settings_editor.cpp #, fuzzy @@ -6410,6 +6038,16 @@ msgid "Delete Item" msgstr "Deletar Entrada" #: editor/project_settings_editor.cpp +#, fuzzy +msgid "Can't contain '/' or ':'" +msgstr "Não foi possÃvel conectar ao host:" + +#: editor/project_settings_editor.cpp +#, fuzzy +msgid "Already existing" +msgstr "Alternar Persistência" + +#: editor/project_settings_editor.cpp msgid "Error saving settings." msgstr "Erro ao salvar as configurações." @@ -6418,8 +6056,9 @@ msgid "Settings saved OK." msgstr "Configurações Salvas." #: editor/project_settings_editor.cpp +#, fuzzy msgid "Override for Feature" -msgstr "" +msgstr "Sobrescrever para Feature" #: editor/project_settings_editor.cpp msgid "Add Translation" @@ -6464,7 +6103,7 @@ msgstr "Propriedade:" #: editor/project_settings_editor.cpp msgid "Override For.." -msgstr "" +msgstr "Sobrescrever Para..." #: editor/project_settings_editor.cpp msgid "Input Map" @@ -6563,10 +6202,20 @@ msgstr "Próximo Script" #: editor/property_editor.cpp #, fuzzy +msgid "Make Unique" +msgstr "Fazer Ossos" + +#: editor/property_editor.cpp +#, fuzzy msgid "Show in File System" msgstr "Arquivos" #: editor/property_editor.cpp +#, fuzzy +msgid "Convert To %s" +msgstr "Converter Para..." + +#: editor/property_editor.cpp msgid "Error loading file: Not a resource!" msgstr "Erro ao carregar arquivo: Não é um recurso!" @@ -6607,6 +6256,11 @@ msgstr "Selecionar Pontos" #: editor/property_selector.cpp #, fuzzy +msgid "Select Virtual Method" +msgstr "Modo de Seleção (Q)" + +#: editor/property_selector.cpp +#, fuzzy msgid "Select Method" msgstr "Modo de Seleção (Q)" @@ -6624,7 +6278,7 @@ msgstr "Reparentar Nó" #: editor/reparent_dialog.cpp msgid "Reparent Location (Select new Parent):" -msgstr "Local para Reparentar (Selecione Novo Pai):" +msgstr "Local para Reparentar (Selecione novo Pai):" #: editor/reparent_dialog.cpp msgid "Keep Global Transform" @@ -6634,26 +6288,6 @@ msgstr "Manter Transformação Global" msgid "Reparent" msgstr "Reparentar" -#: editor/resources_dock.cpp -msgid "Create New Resource" -msgstr "Criar Novo Recurso" - -#: editor/resources_dock.cpp -msgid "Open Resource" -msgstr "Abrir Recurso" - -#: editor/resources_dock.cpp -msgid "Save Resource" -msgstr "Salvar Recurso" - -#: editor/resources_dock.cpp -msgid "Resource Tools" -msgstr "Ferramentas de Recurso" - -#: editor/resources_dock.cpp -msgid "Make Local" -msgstr "Tornar Local" - #: editor/run_settings_dialog.cpp msgid "Run Mode:" msgstr "Modo de InÃcio:" @@ -6726,7 +6360,7 @@ msgstr "Excluir Nó(s)?" #: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." -msgstr "" +msgstr "Não é possÃvel trabalhar com o nó raiz." #: editor/scene_tree_dock.cpp msgid "This operation can't be done on instanced scenes." @@ -6786,14 +6420,6 @@ msgid "Sub-Resources:" msgstr "Recursos:" #: editor/scene_tree_dock.cpp -msgid "Edit Groups" -msgstr "Editar Grupos" - -#: editor/scene_tree_dock.cpp -msgid "Edit Connections" -msgstr "Editar Conexões" - -#: editor/scene_tree_dock.cpp msgid "Clear Inheritance" msgstr "Limpar Herança" @@ -6889,46 +6515,56 @@ msgstr "Alternar CanvasItem VisÃvel" #: editor/scene_tree_editor.cpp msgid "Node configuration warning:" -msgstr "" +msgstr "Aviso de configuração de nó:" #: editor/scene_tree_editor.cpp +#, fuzzy msgid "" "Node has connection(s) and group(s)\n" "Click to show signals dock." msgstr "" +"O nó tem conexões e grupos\n" +"Clique para mostrar o painel de sinais." #: editor/scene_tree_editor.cpp msgid "" "Node has connections.\n" "Click to show signals dock." msgstr "" +"O nó tem conexões.\n" +"Clique para mostrar o painel de sinais." #: editor/scene_tree_editor.cpp msgid "" "Node is in group(s).\n" "Click to show groups dock." msgstr "" +"O nó tem grupos.\n" +"Clique para mostrar o painel de grupos." #: editor/scene_tree_editor.cpp msgid "Instance:" msgstr "Instância:" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "Open script" -msgstr "Próximo Script" +msgstr "Abrir script" #: editor/scene_tree_editor.cpp msgid "" "Node is locked.\n" "Click to unlock" msgstr "" +"O nó está travado.\n" +"Clique para destravar" #: editor/scene_tree_editor.cpp msgid "" "Children are not selectable.\n" "Click to make selectable" msgstr "" +"Os filhos não são selecionáveis.\n" +"Clique para fazê-los selecionáveis" #: editor/scene_tree_editor.cpp #, fuzzy @@ -6949,7 +6585,7 @@ msgstr "Ãrvore de Cena (Nós):" #: editor/scene_tree_editor.cpp msgid "Node Configuration Warning!" -msgstr "" +msgstr "Aviso de Configuração de Nó!" #: editor/scene_tree_editor.cpp msgid "Select a Node" @@ -6987,12 +6623,21 @@ msgid "Invalid base path" msgstr "Caminho base inválido" #: editor/script_create_dialog.cpp +msgid "Directory of the same name exists" +msgstr "" + +#: editor/script_create_dialog.cpp +#, fuzzy +msgid "File exists, will be reused" +msgstr "O arquivo existe. Sobrescrever?" + +#: editor/script_create_dialog.cpp msgid "Invalid extension" msgstr "Extensão inválida" #: editor/script_create_dialog.cpp msgid "Wrong extension chosen" -msgstr "" +msgstr "Extensão errada escolhida" #: editor/script_create_dialog.cpp #, fuzzy @@ -7015,11 +6660,11 @@ msgstr "Script" #: editor/script_create_dialog.cpp msgid "Allowed: a-z, A-Z, 0-9 and _" -msgstr "" +msgstr "Permitidos: a-z, A-Z, 0-9 e _" #: editor/script_create_dialog.cpp msgid "Built-in script (into scene file)" -msgstr "" +msgstr "Script embutido (no arquivo da cena)" #: editor/script_create_dialog.cpp #, fuzzy @@ -7032,6 +6677,10 @@ msgid "Load existing script file" msgstr "Próximo Script" #: editor/script_create_dialog.cpp +msgid "Language" +msgstr "Idioma" + +#: editor/script_create_dialog.cpp #, fuzzy msgid "Inherits" msgstr "Herda de:" @@ -7077,6 +6726,10 @@ msgid "Function:" msgstr "Função:" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Errors" msgstr "Erros" @@ -7157,6 +6810,10 @@ msgid "Type" msgstr "Tipo" #: editor/script_editor_debugger.cpp +msgid "Format" +msgstr "Formato" + +#: editor/script_editor_debugger.cpp msgid "Usage" msgstr "Uso" @@ -7190,7 +6847,7 @@ msgstr "Mudar Raio da Luz" #: editor/spatial_editor_gizmos.cpp msgid "Change AudioStreamPlayer3D Emission Angle" -msgstr "" +msgstr "Mudar o Ângulo de Emissão do AudioStreamPlayer3D" #: editor/spatial_editor_gizmos.cpp msgid "Change Camera FOV" @@ -7226,19 +6883,37 @@ msgstr "Alterar a Extensão do Notificador" #: editor/spatial_editor_gizmos.cpp msgid "Change Particles AABB" -msgstr "" +msgstr "Mudar o AABB das PartÃculas" #: editor/spatial_editor_gizmos.cpp #, fuzzy msgid "Change Probe Extents" msgstr "Alterar a Extensão do Notificador" +#: modules/gdnative/gd_native_library_editor.cpp +#, fuzzy +msgid "Library" +msgstr "MeshLibrary..." + +#: modules/gdnative/gd_native_library_editor.cpp +#, fuzzy +msgid "Status" +msgstr "Status:" + +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Libraries: " +msgstr "" + +#: modules/gdnative/register_types.cpp +msgid "GDNative" +msgstr "" + #: 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/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h #: 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." @@ -7279,7 +6954,7 @@ msgstr "Dicionário de instância inválido (subclasses inválidas)" #: modules/gdscript/gd_functions.cpp msgid "Object can't provide a length." -msgstr "" +msgstr "Objeto não pôde fornecer um comprimento." #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy @@ -7292,21 +6967,19 @@ msgid "GridMap Duplicate Selection" msgstr "Duplicar Seleção" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Paint" -msgstr "" - -#: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy msgid "Snap View" msgstr "Visão Superior" #: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy msgid "Prev Level (%sDown Wheel)" -msgstr "" +msgstr "NÃvel anterior (" #: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy msgid "Next Level (%sUp Wheel)" -msgstr "" +msgstr "NÃvel seguinte (" #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy @@ -7314,24 +6987,26 @@ msgid "Clip Disabled" msgstr "Desabilitado" #: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy msgid "Clip Above" -msgstr "" +msgstr "Cortar Acima" #: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy msgid "Clip Below" -msgstr "" +msgstr "Cortar Abaixo" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Edit X Axis" -msgstr "" +msgstr "Editar Eixo X" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Edit Y Axis" -msgstr "" +msgstr "Eduitar Eixo Y" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Edit Z Axis" -msgstr "" +msgstr "Editar Eixo Z" #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy @@ -7349,20 +7024,23 @@ msgid "Cursor Rotate Z" msgstr "Ctrl: Rotaciona" #: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy msgid "Cursor Back Rotate X" -msgstr "" +msgstr "Rotacionar Cursor em X" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Back Rotate Y" -msgstr "" +msgstr "Rotacionar Cursor em Y" #: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy msgid "Cursor Back Rotate Z" -msgstr "" +msgstr "Rotacionar Cursor em Z" #: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy msgid "Cursor Clear Rotation" -msgstr "" +msgstr "Limpar Rotação do Cursor" #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy @@ -7399,32 +7077,36 @@ msgstr "Configurações do Snap" msgid "Pick Distance:" msgstr "Instância:" -#: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy -msgid "Tiles" -msgstr " Arquivos" - -#: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Areas" +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "Builds" msgstr "" #: modules/visual_script/visual_script.cpp +#, fuzzy msgid "" "A node yielded without working memory, please read the docs on how to yield " "properly!" msgstr "" +"Um nó yieldado sem memória corrente, por favor leia a documentação sobre " +"como usar o yield corretamente!" #: modules/visual_script/visual_script.cpp +#, fuzzy msgid "" "Node yielded, but did not return a function state in the first working " "memory." msgstr "" +"Nó yieldado, mas não retornou um estado de função na primeira memória " +"corrente." #: 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 "" +"Um alor de retorno deve ser atribuÃdo ao primeiro elemento da memória " +"corrente do nó! Conserte seu node, por favor." #: modules/visual_script/visual_script.cpp msgid "Node returned an invalid sequence output: " @@ -7432,11 +7114,11 @@ msgstr "O nó retornou uma saÃda de sequência inválida: " #: modules/visual_script/visual_script.cpp msgid "Found sequence bit but not the node in the stack, report bug!" -msgstr "" +msgstr "Sequência encontrada mas o nó não está na pilha, reporte um bug!" #: modules/visual_script/visual_script.cpp msgid "Stack overflow with stack depth: " -msgstr "" +msgstr "Sobrecarga da pilha com profundidade: " #: modules/visual_script/visual_script_editor.cpp #, fuzzy @@ -7612,11 +7294,19 @@ msgid "Return" msgstr "Retornar" #: modules/visual_script/visual_script_editor.cpp +msgid "Call" +msgstr "Chamar" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Get" msgstr "Obter" #: modules/visual_script/visual_script_editor.cpp +msgid "Script already has function '%s'" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Change Input Value" msgstr "Alterar Nome de Entrada" @@ -7724,7 +7414,7 @@ msgstr "Nome da propriedade de Ãndice inválido." #: modules/visual_script/visual_script_func_nodes.cpp msgid "Base object is not a Node!" -msgstr "" +msgstr "Objeto base não é um Node!" #: modules/visual_script/visual_script_func_nodes.cpp #, fuzzy @@ -7732,8 +7422,9 @@ msgid "Path does not lead Node!" msgstr "O caminho não é local" #: modules/visual_script/visual_script_func_nodes.cpp +#, fuzzy msgid "Invalid index property name '%s' in node %s." -msgstr "" +msgstr "Nome de propriedade '%s' inválido no nó %s." #: modules/visual_script/visual_script_nodes.cpp #, fuzzy @@ -7746,21 +7437,26 @@ msgstr ": Argumentos inválidos: " #: modules/visual_script/visual_script_nodes.cpp msgid "VariableGet not found in script: " -msgstr "" +msgstr "VariableGet não encontrada no script: " #: modules/visual_script/visual_script_nodes.cpp msgid "VariableSet not found in script: " -msgstr "" +msgstr "VariableSet não encontrada no script: " #: modules/visual_script/visual_script_nodes.cpp +#, fuzzy msgid "Custom node has no _step() method, can't process graph." msgstr "" +"Nó customizado não tem um método _step(), não foi possÃvel processar o " +"gráfico." #: 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 da _step() inválido, deve ser um inteiro (seq out), ou " +"string (erro)." #: platform/javascript/export/export.cpp msgid "Run in Browser" @@ -7880,6 +7576,8 @@ msgid "" "A material to process the particles is not assigned, so no behavior is " "imprinted." msgstr "" +"Um material para processar partÃculas não foi atribuÃdo, então nenhum " +"comportamento será aplicado." #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." @@ -7892,6 +7590,9 @@ msgid "" "by the physics engine when running.\n" "Change the size in children collision shapes instead." msgstr "" +"Mudanças de tamanho no RigidBody2D (nos modos Character ou Rigid) serão " +"sobrescritas pelo motor de fÃsica ao executar.\n" +"Ao invés disso, mude o tamanho nas formas de colisão filhas." #: scene/2d/remote_transform_2d.cpp msgid "Path property must point to a valid Node2D node to work." @@ -7925,31 +7626,35 @@ msgstr "" #: scene/3d/arvr_nodes.cpp msgid "ARVRCamera must have an ARVROrigin node as its parent" -msgstr "" +msgstr "ARVRCamera deve ter um nó ARVROrigin como seu pai" #: scene/3d/arvr_nodes.cpp msgid "ARVRController must have an ARVROrigin node as its parent" -msgstr "" +msgstr "ARVRController deve ter um nó ARVROrigin como seu pai" #: scene/3d/arvr_nodes.cpp msgid "" "The controller id must not be 0 or this controller will not be bound to an " "actual controller" msgstr "" +"A id do controlador não deve ser 0 ou este controlador não será atribúido a " +"um controlador real" #: scene/3d/arvr_nodes.cpp msgid "ARVRAnchor must have an ARVROrigin node as its parent" -msgstr "" +msgstr "ARVRAnchor deve ter um nó ARVROrigin como seu pai" #: scene/3d/arvr_nodes.cpp msgid "" "The anchor id must not be 0 or this anchor will not be bound to an actual " "anchor" msgstr "" +"A id da âncore não deve ser 0 ou essa âncora não será atribuÃda a uma âncore " +"geral" #: scene/3d/arvr_nodes.cpp msgid "ARVROrigin requires an ARVRCamera child node" -msgstr "" +msgstr "ARVROrigin necessita um nó ARVRCamera como filho" #: scene/3d/collision_polygon.cpp msgid "" @@ -7998,9 +7703,10 @@ msgstr "" "apenas fornece dados de navegação." #: scene/3d/particles.cpp +#, fuzzy msgid "" "Nothing is visible because meshes have not been assigned to draw passes." -msgstr "" +msgstr "Nada está visÃvel porque as malhas não foram atribuÃdas a draw passes." #: scene/3d/physics_body.cpp msgid "" @@ -8008,6 +7714,9 @@ msgid "" "the physics engine when running.\n" "Change the size in children collision shapes instead." msgstr "" +"Mudanças de tamanho no RigidBody (nos modos Character e Rigid) serão " +"sobrescitas pelo motor de fÃsica ao executar.\n" +"Ao invés disso, mude o tamanho nas formas de colisão filhas." #: scene/3d/remote_transform.cpp #, fuzzy @@ -8029,6 +7738,12 @@ msgstr "" "Um recurso do tipo SpriteFrames deve ser criado ou definido na propriedade " "\"Frames\" para que o nó AnimatedSprite mostre quadros." +#: scene/3d/vehicle_body.cpp +msgid "" +"VehicleWheel serves to provide a wheel system to a VehicleBody. Please use " +"it as a child of a VehicleBody." +msgstr "" + #: scene/gui/color_picker.cpp #, fuzzy msgid "Raw Mode" @@ -8039,6 +7754,10 @@ msgid "Add current color as a preset" msgstr "Adicionar cor atual como uma predefinição" #: scene/gui/dialogs.cpp +msgid "Cancel" +msgstr "Cancelar" + +#: scene/gui/dialogs.cpp msgid "Alert!" msgstr "Alerta!" @@ -8046,10 +7765,6 @@ msgstr "Alerta!" msgid "Please Confirm..." msgstr "Confirme Por Favor..." -#: scene/gui/input_action.cpp -msgid "Ctrl+" -msgstr "Ctrl+" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -8061,17 +7776,24 @@ msgstr "" "ocultarão ao rodar a cena." #: scene/gui/scroll_container.cpp +#, fuzzy msgid "" "ScrollContainer is intended to work with a single child control.\n" "Use a container as child (VBox,HBox,etc), or a Control and set the custom " "minimum size manually." msgstr "" +"Um ScrollContainer foi feito para trabalhar com um componente filho único.\n" +"Use um container como filho (VBox, HBox, etc) ou um Control e defina o " +"tamanho mÃnimo manualmente." #: scene/main/scene_tree.cpp +#, fuzzy msgid "" "Default Environment as specified in Project Setings (Rendering -> Viewport -" "> Default Environment) could not be loaded." msgstr "" +"O Ambiente Padrão como especificado nas Configurações de Projeto " +"(Renderização - Viewport -> Ambiente Padrão) não pode ser carregado." #: scene/main/viewport.cpp msgid "" @@ -8085,6 +7807,636 @@ msgstr "" "para que ele possa ter um tamanho. Caso contrário, defina-o como destino de " "render e atribua sua textura interna a algum nó para exibir." +#: scene/resources/dynamic_font.cpp +msgid "Error initializing FreeType." +msgstr "Erro ao inicializar FreeType." + +#: scene/resources/dynamic_font.cpp +msgid "Unknown font format." +msgstr "Formato de fonte desconhecido." + +#: scene/resources/dynamic_font.cpp +msgid "Error loading font." +msgstr "Erro ao carregar fonte." + +#: scene/resources/dynamic_font.cpp +msgid "Invalid font size." +msgstr "Tamanho de fonte inválido." + +#~ msgid "Method List For '%s':" +#~ msgstr "Lista de Métodos para \"%s\":" + +#~ msgid "Arguments:" +#~ msgstr "Argumentos:" + +#~ msgid "Return:" +#~ msgstr "Retornar:" + +#~ msgid "Added:" +#~ msgstr "Adicionado:" + +#~ msgid "Removed:" +#~ msgstr "Removido:" + +#~ msgid "Error saving atlas:" +#~ msgstr "Erro ao salvar atlas:" + +#~ msgid "Could not save atlas subtexture:" +#~ msgstr "Não foi possÃvel salvar Subtextura do Atlas:" + +#~ msgid "Exporting for %s" +#~ msgstr "Exportando para %s" + +#~ msgid "Setting Up.." +#~ msgstr "Ajustando..." + +#~ msgid "Error loading scene." +#~ msgstr "Erro ao carregar cena." + +#~ msgid "Re-Import" +#~ msgstr "Reimportar" + +#~ msgid "Please wait for scan to complete." +#~ msgstr "Por favor aguarde a verificação completar." + +#~ msgid "Current scene must be saved to re-import." +#~ msgstr "Cena Atual só deve ser salva para re-importação." + +#~ msgid "Save & Re-Import" +#~ msgstr "Salvar e Re-Importar" + +#~ msgid "Re-Importing" +#~ msgstr "Re-Importando" + +#~ msgid "Re-Import Changed Resources" +#~ msgstr "Re-Importar Recursos Alterados" + +#~ msgid "Loading Export Templates" +#~ msgstr "Carregando Modelos de Exportação" + +#~ msgid "" +#~ "\n" +#~ "Status: Needs Re-Import" +#~ msgstr "" +#~ "\n" +#~ "Status: Necessita Re-Importação" + +#~ msgid "Same source and destination files, doing nothing." +#~ msgstr "Mesmos arquivos de destino e origem, nada a fazer." + +#~ msgid "Target file exists, can't overwrite. Delete first." +#~ msgstr "" +#~ "Arquivo alvo existe, não é possÃvel sobrescrever. Delete-o primeiro." + +#~ msgid "Same source and destination paths, doing nothing." +#~ msgstr "Mesmo caminhos de destino e origem, nada a fazer." + +#~ msgid "Can't move directories to within themselves." +#~ msgstr "Não é possÃvel mover diretórios para dentro de si mesmos." + +#~ msgid "Can't rename deps for:\n" +#~ msgstr "Não foi possÃvel renomear dependências para:\n" + +#~ msgid "Error moving file:\n" +#~ msgstr "Erro ao mover arquivo:\n" + +#~ msgid "Pick New Name and Location For:" +#~ msgstr "Escolha Novo Nome e Localização Para:" + +#~ msgid "No files selected!" +#~ msgstr "Nenhum arquivo selecionado!" + +#~ msgid "Info" +#~ msgstr "Informação" + +#~ msgid "Re-Import.." +#~ msgstr "Re-importar..." + +#~ msgid "No bit masks to import!" +#~ msgstr "Sem máscaras de bits para importar!" + +#~ msgid "Target path is empty." +#~ msgstr "Caminho destino está vazio." + +#~ msgid "Target path must be a complete resource path." +#~ msgstr "Caminho destino deve ser um caminho completo a um recurso." + +#~ msgid "Target path must exist." +#~ msgstr "Caminho destino deve existir." + +#~ msgid "Save path is empty!" +#~ msgstr "Caminho de salvamento vazio!" + +#~ msgid "Import BitMasks" +#~ msgstr "Importar Máscara de Bits" + +#~ msgid "Source Texture(s):" +#~ msgstr "Textura(s) de Origem:" + +#~ msgid "Target Path:" +#~ msgstr "Caminho Destino:" + +#~ msgid "Accept" +#~ msgstr "Aceitar" + +#~ msgid "Bit Mask" +#~ msgstr "Máscara de Bits" + +#~ msgid "No source font file!" +#~ msgstr "Falta arquivo de fonte origem!" + +#~ msgid "No target font resource!" +#~ msgstr "Falta recurso de fonte destino!" + +#~ msgid "" +#~ "Invalid file extension.\n" +#~ "Please use .font." +#~ msgstr "" +#~ "Extensão de arquivo inválida.\n" +#~ "Por favor use .font." + +#~ msgid "Couldn't save font." +#~ msgstr "Não se pôde salvar fonte." + +#~ msgid "Source Font:" +#~ msgstr "Fonte Origem:" + +#~ msgid "Source Font Size:" +#~ msgstr "Tamanho da Fonte de Origem:" + +#~ msgid "Dest Resource:" +#~ msgstr "Recurso Destino:" + +#~ msgid "The quick brown fox jumps over the lazy dog." +#~ msgstr "" +#~ "À noite, vovô Kowalsky vê o Ãmã cair no pé do pinguim queixoso e vovó põe " +#~ "açúcar no chá de tâmaras do jabuti feliz." + +#~ msgid "Test:" +#~ msgstr "Teste:" + +#~ msgid "Options:" +#~ msgstr "Opções:" + +#~ msgid "Font Import" +#~ msgstr "Importar Fonte" + +#~ msgid "" +#~ "This file is already a Godot font file, please supply a BMFont type file " +#~ "instead." +#~ msgstr "" +#~ "Este arquivo já é um arquivo de fonte Godot, por favor forneça um arquivo " +#~ "BMFont." + +#~ msgid "Failed opening as BMFont file." +#~ msgstr "Falha ao abrir como arquivo BMFont." + +#~ msgid "Invalid font custom source." +#~ msgstr "Origem personalizada da fonte inválida." + +#~ msgid "No meshes to import!" +#~ msgstr "Sem meshes para importar!" + +#~ msgid "Single Mesh Import" +#~ msgstr "Importar Única Mesh" + +#~ msgid "Source Mesh(es):" +#~ msgstr "Origem de Mesh(es):" + +#~ msgid "Surface %d" +#~ msgstr "SuperfÃcie %d" + +#~ msgid "No samples to import!" +#~ msgstr "Sem amostras para importar!" + +#~ msgid "Import Audio Samples" +#~ msgstr "Importar Amostras de Ãudio" + +#~ msgid "Source Sample(s):" +#~ msgstr "Amostra(s) de Origem:" + +#~ msgid "Audio Sample" +#~ msgstr "Amostra de Ãudio" + +#~ msgid "New Clip" +#~ msgstr "Novo Clipe" + +#~ msgid "Flags" +#~ msgstr "Flags" + +#~ msgid "Bake FPS:" +#~ msgstr "Precalcular FPS:" + +#~ msgid "Optimizer" +#~ msgstr "Otimizador" + +#~ msgid "Max Linear Error" +#~ msgstr "Erro Linear Máximo" + +#~ msgid "Max Angular Error" +#~ msgstr "Erro Angular Máximo" + +#~ msgid "Max Angle" +#~ msgstr "Ângulo Máximo" + +#~ msgid "Clips" +#~ msgstr "Clipes" + +#~ msgid "Start(s)" +#~ msgstr "InÃcio(s)" + +#~ msgid "End(s)" +#~ msgstr "Fim(ns)" + +#~ msgid "Filters" +#~ msgstr "Filtros" + +#~ msgid "Source path is empty." +#~ msgstr "Caminho de origem está vazio." + +#~ msgid "Couldn't load post-import script." +#~ msgstr "Não se pôde carregar script pós-importação." + +#~ msgid "Invalid/broken script for post-import." +#~ msgstr "Script pós-importação inválido/quebrado." + +#~ msgid "Error importing scene." +#~ msgstr "Erro ao importar cena." + +#~ msgid "Import 3D Scene" +#~ msgstr "Importar Cena 3D" + +#~ msgid "Source Scene:" +#~ msgstr "Cena de Origem:" + +#~ msgid "Same as Target Scene" +#~ msgstr "Mesma da Cena Destino" + +#~ msgid "Shared" +#~ msgstr "Compartilhado" + +#~ msgid "Target Texture Folder:" +#~ msgstr "Pasta Destino para Textura:" + +#~ msgid "Post-Process Script:" +#~ msgstr "Script de Pós-Processamento:" + +#~ msgid "Custom Root Node Type:" +#~ msgstr "Tipo Personalizado de Nó Raiz:" + +#~ msgid "Auto" +#~ msgstr "Auto" + +#~ msgid "Root Node Name:" +#~ msgstr "Nome do Nó RaÃz:" + +#~ msgid "The Following Files are Missing:" +#~ msgstr "Os Seguintes Arquivos estão Faltando:" + +#~ msgid "Import Anyway" +#~ msgstr "Importar Mesmo Assim" + +#~ msgid "Import & Open" +#~ msgstr "Importar e Abrir" + +#~ msgid "Edited scene has not been saved, open imported scene anyway?" +#~ msgstr "A cena editada não foi salva, abrir cena importada ainda assim?" + +#~ msgid "Import Image:" +#~ msgstr "Importar Imagem:" + +#~ msgid "Couldn't localize path: %s (already local)" +#~ msgstr "Caminho não pôde ser localizado: %s (já é local)" + +#~ msgid "3D Scene Animation" +#~ msgstr "Animação Cena 3D" + +#~ msgid "Uncompressed" +#~ msgstr "Não comprimido" + +#~ msgid "Compress Lossless (PNG)" +#~ msgstr "Comprimido Sem Perdas (PNG)" + +#~ msgid "Compress Lossy (WebP)" +#~ msgstr "Comprido Com Perdas (WebP)" + +#~ msgid "Compress (VRAM)" +#~ msgstr "Comprimido (VRAM)" + +#~ msgid "Texture Format" +#~ msgstr "Formato da Textura" + +#~ msgid "Texture Compression Quality (WebP):" +#~ msgstr "Qualidade da Compressão da Textura (WebP):" + +#~ msgid "Texture Options" +#~ msgstr "Opções da Textura" + +#~ msgid "Please specify some files!" +#~ msgstr "Por favor especifique alguns arquivos!" + +#~ msgid "At least one file needed for Atlas." +#~ msgstr "Pelo menos um arquivo é preciso para o Atlas." + +#~ msgid "Error importing:" +#~ msgstr "Erro ao importar:" + +#~ msgid "Only one file is required for large texture." +#~ msgstr "Apenas um arquivo é requerido para textura grande." + +#~ msgid "Max Texture Size:" +#~ msgstr "Tamanho Máximo de Textura:" + +#~ msgid "Import Textures for Atlas (2D)" +#~ msgstr "Importar Texturas para Atlas (2D)" + +#~ msgid "Cell Size:" +#~ msgstr "Tamanho da Célula:" + +#~ msgid "Large Texture" +#~ msgstr "Textura Grande" + +#~ msgid "Import Large Textures (2D)" +#~ msgstr "Importar Texturas Grandes (2D)" + +#~ msgid "Source Texture" +#~ msgstr "Textura Origem" + +#~ msgid "Base Atlas Texture" +#~ msgstr "Textura Base do Atlas" + +#~ msgid "Source Texture(s)" +#~ msgstr "Textura(s) Origem(ns)" + +#~ msgid "Import Textures for 2D" +#~ msgstr "Importar Texturas para 2D" + +#~ msgid "Import Textures for 3D" +#~ msgstr "Importar Texturas para 3D" + +#~ msgid "Import Textures" +#~ msgstr "Importar Textura" + +#~ msgid "2D Texture" +#~ msgstr "Textura 2D" + +#~ msgid "3D Texture" +#~ msgstr "Textura 3D" + +#~ msgid "Atlas Texture" +#~ msgstr "Textura Atlas" + +#~ msgid "" +#~ "NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files " +#~ "to the project." +#~ msgstr "" +#~ "AVISO: Importar texturas 2D não é obrigatório. Apenas copie arquivos png/" +#~ "jpg para o projeto." + +#~ msgid "Crop empty space." +#~ msgstr "Aparar espaço vazio." + +#~ msgid "Texture" +#~ msgstr "Textura" + +#~ msgid "Import Large Texture" +#~ msgstr "Importar Textura Grande" + +#~ msgid "Load Source Image" +#~ msgstr "Carregar Imagem Origem" + +#~ msgid "Slicing" +#~ msgstr "Fatiando" + +#~ msgid "Saving" +#~ msgstr "Salvando" + +#~ msgid "Couldn't save large texture:" +#~ msgstr "Não se pôde salvar textura grande:" + +#~ msgid "Build Atlas For:" +#~ msgstr "Montar Atlas Para:" + +#~ msgid "Loading Image:" +#~ msgstr "Carregando Imagem:" + +#~ msgid "Couldn't load image:" +#~ msgstr "Não se pôde carregar imagem:" + +#~ msgid "Converting Images" +#~ msgstr "Convertendo Imagens" + +#~ msgid "Cropping Images" +#~ msgstr "Aparando Imagens" + +#~ msgid "Blitting Images" +#~ msgstr "Fazendo Blitting das Imagens" + +#~ msgid "Couldn't save atlas image:" +#~ msgstr "Não se pôde salva imagem de atlas:" + +#~ msgid "Couldn't save converted texture:" +#~ msgstr "Não se pôde salvar textura convertida:" + +#~ msgid "Invalid source!" +#~ msgstr "Origem inválida!" + +#~ msgid "Invalid translation source!" +#~ msgstr "Origem de tradução inválida!" + +#~ msgid "Column" +#~ msgstr "Coluna" + +#~ msgid "No items to import!" +#~ msgstr "Nenhum item a importar!" + +#~ msgid "No target path!" +#~ msgstr "Nenhum caminho destino!" + +#~ msgid "Import Translations" +#~ msgstr "Importar Traduções" + +#~ msgid "Couldn't import!" +#~ msgstr "Não foi possÃvel importar!" + +#~ msgid "Import Translation" +#~ msgstr "Importar Tradução" + +#~ msgid "Source CSV:" +#~ msgstr "Arquivo CSV Origem:" + +#~ msgid "Ignore First Row" +#~ msgstr "Ignorar Primeira Linha" + +#~ msgid "Compress" +#~ msgstr "Comprimir" + +#~ msgid "Add to Project (project.godot)" +#~ msgstr "Adicionar ao Projeto (project.godot)" + +#~ msgid "Import Languages:" +#~ msgstr "Importar Idiomas:" + +#~ msgid "Translation" +#~ msgstr "Tradução" + +#~ msgid "Parsing %d Triangles:" +#~ msgstr "Analisando %d Triângulos:" + +#~ msgid "Triangle #" +#~ msgstr "Triângulo nº" + +#~ msgid "Light Baker Setup:" +#~ msgstr "Configurar Baker de Luz:" + +#~ msgid "Fixing Lights" +#~ msgstr "Consertando Luzes" + +#~ msgid "Making BVH" +#~ msgstr "Fazendo BVH" + +#~ msgid "Transfer to Lightmaps:" +#~ msgstr "Transferir para Mapas de Luz:" + +#~ msgid "Allocating Texture #" +#~ msgstr "Alocando Textura nº" + +#~ msgid "Baking Triangle #" +#~ msgstr "Precalculando Triângulo nº" + +#~ msgid "Post-Processing Texture #" +#~ msgstr "Pós-Processando Textura nº" + +#~ msgid "Reset the lightmap octree baking process (start over)." +#~ msgstr "Redefinir o processo \"octree baking\" do lightmap (recomeçar)." + +#~ msgid "Zoom (%):" +#~ msgstr "Ampliação (%):" + +#~ msgid "Skeleton.." +#~ msgstr "Esqueleto..." + +#~ msgid "Zoom Reset" +#~ msgstr "Restaurar Ampliação" + +#~ msgid "Zoom Set.." +#~ msgstr "Definir Ampliação..." + +#~ msgid "Set a Value" +#~ msgstr "Defina um Valor" + +#~ msgid "Snap (Pixels):" +#~ msgstr "Snap (Pixels):" + +#~ msgid "Parse BBCode" +#~ msgstr "Analisar BBCode" + +#~ msgid "Length:" +#~ msgstr "Duração:" + +#~ msgid "Open Sample File(s)" +#~ msgstr "Abrir Arquivo(s) de Amostra" + +#~ msgid "ERROR: Couldn't load sample!" +#~ msgstr "ERRO: Não é possÃvel carregar a amostra!" + +#~ msgid "Add Sample" +#~ msgstr "Adicionar Amostra" + +#~ msgid "Rename Sample" +#~ msgstr "Renomear Amostra" + +#~ msgid "Delete Sample" +#~ msgstr "Excluir Amostra" + +#~ msgid "16 Bits" +#~ msgstr "16 bits" + +#~ msgid "8 Bits" +#~ msgstr "8 Bits" + +#~ msgid "Stereo" +#~ msgstr "Estéreo" + +#~ msgid "Mono" +#~ msgstr "Mono" + +#~ msgid "Pitch" +#~ msgstr "Pitch" + +#~ msgid "Window" +#~ msgstr "Janela" + +#~ msgid "Move Right" +#~ msgstr "Mover para Direita" + +#~ msgid "Scaling to %s%%." +#~ msgstr "Escalonando para %s%%." + +#~ msgid "Up" +#~ msgstr "Acima" + +#~ msgid "Down" +#~ msgstr "Abaixo" + +#~ msgid "Bucket" +#~ msgstr "Balde" + +#~ msgid "Invalid project path, the path must exist!" +#~ msgstr "Caminho de projeto inválido, o caminho deve existir!" + +#, fuzzy +#~ msgid "Invalid project path, project.godot must not exist." +#~ msgstr "Caminho de projeto inválido, engine.cfg não deve existir." + +#, fuzzy +#~ msgid "Invalid project path, project.godot must exist." +#~ msgstr "Caminho de projeto inválido, engine.cfg deve existir." + +#~ msgid "Project Path (Must Exist):" +#~ msgstr "Caminho do Projeto (Deve Existir):" + +#~ msgid "Create New Resource" +#~ msgstr "Criar Novo Recurso" + +#~ msgid "Open Resource" +#~ msgstr "Abrir Recurso" + +#~ msgid "Save Resource" +#~ msgstr "Salvar Recurso" + +#~ msgid "Resource Tools" +#~ msgstr "Ferramentas de Recurso" + +#~ msgid "Make Local" +#~ msgstr "Tornar Local" + +#~ msgid "Edit Groups" +#~ msgstr "Editar Grupos" + +#~ msgid "Edit Connections" +#~ msgstr "Editar Conexões" + +#~ msgid "GridMap Paint" +#~ msgstr "Pintura GridMap" + +#, fuzzy +#~ msgid "Tiles" +#~ msgstr " Arquivos" + +#~ msgid "Areas" +#~ msgstr "Ãreas" + +#~ msgid "Ctrl+" +#~ msgstr "Ctrl+" + +#~ msgid "Down Wheel)" +#~ msgstr "Rodar para Baixo)" + +#, fuzzy +#~ msgid "Up Wheel)" +#~ msgstr "Rodar para Cima" + #~ msgid "Close scene? (Unsaved changes will be lost)" #~ msgstr "Fechar cena? (Mudanças não salvas serão perdidas)" @@ -8098,9 +8450,6 @@ msgstr "" #~ msgid "Close Goto Prev. Scene" #~ msgstr "Ir a Cena Fechada Anterior" -#~ msgid "Expand to Parent" -#~ msgstr "Expandir para Pai" - #~ msgid "Del" #~ msgstr "Del" @@ -8224,18 +8573,12 @@ msgstr "" #~ msgid "Save Translatable Strings" #~ msgstr "Salvar Strings TraduzÃveis" -#~ msgid "Translatable Strings.." -#~ msgstr "Strings TraduzÃveis..." - #~ msgid "Install Export Templates" #~ msgstr "Instalar Models de Exportação" #~ msgid "Edit Script Options" #~ msgstr "Editar Opções de Script" -#~ msgid "Please export outside the project folder!" -#~ msgstr "Por favor export para fora da pasta do projeto!" - #~ msgid "Error exporting project!" #~ msgstr "Erro ao exportar o projeto!" @@ -8276,18 +8619,12 @@ msgstr "" #~ msgid "Include" #~ msgstr "Incluir" -#~ msgid "Change Image Group" -#~ msgstr "Alterar Grupo de Imagens" - #~ msgid "Group name can't be empty!" #~ msgstr "O nome do grupo não pode estar vazio!" #~ msgid "Invalid character in group name!" #~ msgstr "Caractere inválido no nome do grupo!" -#~ msgid "Group name already exists!" -#~ msgstr "O nome do grupo já existe!" - #~ msgid "Add Image Group" #~ msgstr "Adicionar Grupo de Imagens" @@ -8435,9 +8772,6 @@ msgstr "" #~ msgid "Lighting" #~ msgstr "Iluminação" -#~ msgid "Toggle Persisting" -#~ msgstr "Alternar Persistência" - #~ msgid "Global" #~ msgstr "Global" diff --git a/editor/translations/pt_PT.po b/editor/translations/pt_PT.po index 527bff68fd..ec701bebb4 100644 --- a/editor/translations/pt_PT.po +++ b/editor/translations/pt_PT.po @@ -3,31 +3,33 @@ # This file is distributed under the same license as the Godot source code. # # António Sarmento <antonio.luis.sarmento@gmail.com>, 2016. +# João Graça <jgraca95@gmail.com>, 2017. # 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" +"PO-Revision-Date: 2017-09-28 16:47+0000\n" +"Last-Translator: João Graça <jgraca95@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" +"X-Generator: Weblate 2.17-dev\n" #: editor/animation_editor.cpp msgid "Disabled" -msgstr "" +msgstr "desativado" #: editor/animation_editor.cpp msgid "All Selection" msgstr "" #: editor/animation_editor.cpp +#, fuzzy msgid "Move Add Key" -msgstr "" +msgstr "Mover Chave Adcionada" #: editor/animation_editor.cpp msgid "Anim Change Transition" @@ -191,10 +193,9 @@ msgid "Create %d NEW tracks and insert keys?" msgstr "" #: editor/animation_editor.cpp editor/create_dialog.cpp -#: editor/editor_audio_buses.cpp +#: editor/editor_audio_buses.cpp editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp #: editor/plugins/mesh_instance_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp editor/project_manager.cpp #: editor/script_create_dialog.cpp msgid "Create" @@ -356,261 +357,6 @@ msgstr "" msgid "Change Array Value" msgstr "" -#: editor/asset_library_editor_plugin.cpp -msgid "Free" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp -msgid "Version:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Contents:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "View Files" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_help.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp -msgid "Description:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -#: editor/project_manager.cpp -msgid "Install" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp -#: editor/connections_dialog.cpp editor/export_template_manager.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -#: editor/project_settings_editor.cpp editor/property_editor.cpp -#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Close" -msgstr "Fechar" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve hostname:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Connection error, please try again." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't connect." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't connect to host:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response from host:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Request failed, return code:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Req. Failed." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Request failed, too many redirects" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Redirect Loop." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Bad download hash, assuming file has been tampered with." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Expected:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Got:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed sha256 hash check" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Asset Download Error:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -msgid "Success!" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Fetching:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Resolving.." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Error making request" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Idle" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Retry" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Download Error" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Download for this asset is already in progress!" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "first" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "prev" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "next" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "last" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "All" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/property_selector.cpp editor/quick_open.cpp -#: editor/settings_config_dialog.cpp -msgid "Search:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Search" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/project_manager.cpp -msgid "Import" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Plugins" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Sort:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Reverse" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Category:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Site:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Official" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -msgid "Community" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Testing" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Assets ZIP File" -msgstr "" - -#: editor/call_dialog.cpp -msgid "Method List For '%s':" -msgstr "" - -#: editor/call_dialog.cpp modules/visual_script/visual_script_editor.cpp -msgid "Call" -msgstr "" - -#: editor/call_dialog.cpp -msgid "Method List:" -msgstr "" - -#: editor/call_dialog.cpp -msgid "Arguments:" -msgstr "" - -#: editor/call_dialog.cpp -msgid "Return:" -msgstr "" - #: editor/code_editor.cpp msgid "Go to Line" msgstr "" @@ -647,6 +393,14 @@ msgstr "" msgid "Selection Only" msgstr "" +#: editor/code_editor.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp +msgid "Search" +msgstr "" + #: editor/code_editor.cpp editor/editor_help.cpp msgid "Find" msgstr "" @@ -679,11 +433,11 @@ msgstr "" msgid "Skip" msgstr "" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom In" msgstr "" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom Out" msgstr "" @@ -750,6 +504,20 @@ msgstr "" msgid "Oneshot" msgstr "" +#: editor/connections_dialog.cpp editor/dependency_editor.cpp +#: editor/export_template_manager.cpp +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Close" +msgstr "Fechar" + #: editor/connections_dialog.cpp msgid "Connect" msgstr "" @@ -775,7 +543,7 @@ msgstr "" msgid "Disconnect" msgstr "" -#: editor/connections_dialog.cpp editor/node_dock.cpp +#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" msgstr "" @@ -792,12 +560,25 @@ msgstr "" msgid "Recent:" msgstr "" +#: editor/create_dialog.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp +#: editor/quick_open.cpp editor/settings_config_dialog.cpp +msgid "Search:" +msgstr "" + #: editor/create_dialog.cpp editor/editor_help.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp #: editor/quick_open.cpp msgid "Matches:" msgstr "" +#: editor/create_dialog.cpp editor/editor_help.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp +#: editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "" + #: editor/dependency_editor.cpp msgid "Search Replacement For:" msgstr "" @@ -853,6 +634,10 @@ msgid "Owners Of:" msgstr "" #: editor/dependency_editor.cpp +msgid "Remove selected files from the project? (no undo)" +msgstr "" + +#: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" @@ -860,7 +645,7 @@ msgid "" msgstr "" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (no undo)" +msgid "Cannot remove:\n" msgstr "" #: editor/dependency_editor.cpp @@ -927,10 +712,6 @@ msgid "Godot Engine contributors" msgstr "" #: editor/editor_about.cpp -msgid "Authors" -msgstr "" - -#: editor/editor_about.cpp msgid "Project Founders" msgstr "" @@ -947,6 +728,38 @@ msgid "Developers" msgstr "" #: editor/editor_about.cpp +msgid "Authors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Platinum Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Mini Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Silver Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Bronze Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Donors" +msgstr "" + +#: editor/editor_about.cpp msgid "License" msgstr "" @@ -987,6 +800,16 @@ msgid "Package Installed Successfully!" msgstr "" #: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Success!" +msgstr "" + +#: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp +msgid "Install" +msgstr "" + +#: editor/editor_asset_installer.cpp msgid "Package Installer" msgstr "" @@ -1037,10 +860,6 @@ msgid "Audio Bus, Drag and Drop to rearrange." msgstr "" #: editor/editor_audio_buses.cpp -msgid "Bus options" -msgstr "" - -#: editor/editor_audio_buses.cpp msgid "Solo" msgstr "" @@ -1052,12 +871,20 @@ msgstr "" msgid "Bypass" msgstr "" +#: editor/editor_audio_buses.cpp +msgid "Bus options" +msgstr "" + #: editor/editor_audio_buses.cpp editor/plugins/tile_map_editor_plugin.cpp #: editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "" #: editor/editor_audio_buses.cpp +msgid "Reset Volume" +msgstr "" + +#: editor/editor_audio_buses.cpp #, fuzzy msgid "Delete Effect" msgstr "Apagar Seleccionados" @@ -1079,6 +906,10 @@ msgid "Duplicate Audio Bus" msgstr "" #: editor/editor_audio_buses.cpp +msgid "Reset Bus Volume" +msgstr "" + +#: editor/editor_audio_buses.cpp msgid "Move Audio Bus" msgstr "" @@ -1110,7 +941,8 @@ msgstr "" msgid "Create a new Bus Layout." msgstr "" -#: editor/editor_audio_buses.cpp editor/script_create_dialog.cpp +#: editor/editor_audio_buses.cpp editor/property_editor.cpp +#: editor/script_create_dialog.cpp msgid "Load" msgstr "" @@ -1200,7 +1032,7 @@ msgid "Rearrange Autoloads" msgstr "" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp scene/gui/file_dialog.cpp +#: scene/gui/file_dialog.cpp msgid "Path:" msgstr "" @@ -1208,9 +1040,7 @@ msgstr "" msgid "Node Name:" msgstr "" -#: editor/editor_autoload_settings.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp editor/project_manager.cpp +#: editor/editor_autoload_settings.cpp editor/project_manager.cpp msgid "Name" msgstr "" @@ -1243,18 +1073,19 @@ msgid "Choose a Directory" msgstr "" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Create Folder" msgstr "" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: editor/editor_plugin_settings.cpp editor/plugins/theme_editor_plugin.cpp -#: editor/project_export.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp +#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp +#: scene/gui/file_dialog.cpp msgid "Name:" msgstr "" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Could not create folder." msgstr "" @@ -1274,30 +1105,6 @@ msgstr "" msgid "Template file not found:\n" msgstr "" -#: editor/editor_export.cpp -msgid "Added:" -msgstr "" - -#: editor/editor_export.cpp -msgid "Removed:" -msgstr "" - -#: editor/editor_export.cpp -msgid "Error saving atlas:" -msgstr "" - -#: editor/editor_export.cpp -msgid "Could not save atlas subtexture:" -msgstr "" - -#: editor/editor_export.cpp -msgid "Exporting for %s" -msgstr "" - -#: editor/editor_export.cpp -msgid "Setting Up.." -msgstr "" - #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "" @@ -1382,6 +1189,10 @@ msgstr "" msgid "Move Favorite Down" msgstr "" +#: editor/editor_file_dialog.cpp +msgid "Go to parent folder" +msgstr "" + #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Directories & Files:" msgstr "" @@ -1424,6 +1235,10 @@ msgstr "" msgid "Search Classes" msgstr "" +#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +msgid "Top" +msgstr "" + #: editor/editor_help.cpp editor/property_editor.cpp msgid "Class:" msgstr "" @@ -1440,15 +1255,28 @@ msgstr "" msgid "Brief Description:" msgstr "" +#: editor/editor_help.cpp +#, fuzzy +msgid "Members" +msgstr "Membros:" + #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "Membros:" #: editor/editor_help.cpp +msgid "Public Methods" +msgstr "" + +#: editor/editor_help.cpp msgid "Public Methods:" msgstr "" #: editor/editor_help.cpp +msgid "GUI Theme Items" +msgstr "" + +#: editor/editor_help.cpp msgid "GUI Theme Items:" msgstr "" @@ -1458,6 +1286,11 @@ msgstr "Sinais:" #: editor/editor_help.cpp #, fuzzy +msgid "Enumerations" +msgstr "Funções:" + +#: editor/editor_help.cpp +#, fuzzy msgid "Enumerations:" msgstr "Funções:" @@ -1466,18 +1299,46 @@ msgid "enum " msgstr "" #: editor/editor_help.cpp +msgid "Constants" +msgstr "" + +#: editor/editor_help.cpp msgid "Constants:" msgstr "" #: editor/editor_help.cpp +msgid "Description" +msgstr "" + +#: editor/editor_help.cpp +msgid "Properties" +msgstr "" + +#: editor/editor_help.cpp msgid "Property Description:" msgstr "" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this property. Please help us by " +"[color=$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp +msgid "Methods" +msgstr "" + +#: editor/editor_help.cpp msgid "Method Description:" msgstr "" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this method. Please help us by [color=" +"$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp msgid "Search Text" msgstr "" @@ -1486,24 +1347,21 @@ msgid "Output:" msgstr "" #: editor/editor_log.cpp editor/plugins/animation_tree_editor_plugin.cpp -#: editor/plugins/rich_text_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_editor_debugger.cpp scene/gui/line_edit.cpp -#: scene/gui/text_edit.cpp +#: editor/property_editor.cpp editor/script_editor_debugger.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Clear" msgstr "" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Error saving resource!" msgstr "" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Save Resource As.." msgstr "" -#: editor/editor_node.cpp editor/export_template_manager.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "I see.." msgstr "" @@ -1520,6 +1378,26 @@ msgid "Error while saving." msgstr "" #: editor/editor_node.cpp +msgid "Can't open '%s'." +msgstr "" + +#: editor/editor_node.cpp +msgid "Error while parsing '%s'." +msgstr "" + +#: editor/editor_node.cpp +msgid "Unexpected end of file '%s'." +msgstr "" + +#: editor/editor_node.cpp +msgid "Missing '%s' or its dependencies." +msgstr "" + +#: editor/editor_node.cpp +msgid "Error while loading '%s'." +msgstr "" + +#: editor/editor_node.cpp msgid "Saving Scene" msgstr "" @@ -1577,6 +1455,33 @@ msgid "Restored default layout to base settings." msgstr "" #: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was imported, so it's not editable.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was instanced or inherited.\n" +"Changes to it will not be kept when saving the current scene." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource was imported, so it's not editable. Change its settings in the " +"import panel and then re-import." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This scene was imported, so changes to it will not be kept.\n" +"Instancing it or inheriting will allow making changes to it.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp msgid "Copy Params" msgstr "" @@ -1738,6 +1643,12 @@ msgid "Save changes the following scene(s) before opening Project Manager?" msgstr "" #: editor/editor_node.cpp +msgid "" +"This option is deprecated. Situations where refresh must be forced are now " +"considered a bug. Please report." +msgstr "" + +#: editor/editor_node.cpp msgid "Pick a Main Scene" msgstr "" @@ -1764,7 +1675,7 @@ msgid "" msgstr "" #: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Ugh" msgstr "" @@ -1775,11 +1686,11 @@ msgid "" msgstr "" #: editor/editor_node.cpp -msgid "Error loading scene." +msgid "Scene '%s' has broken dependencies:" msgstr "" #: editor/editor_node.cpp -msgid "Scene '%s' has broken dependencies:" +msgid "Clear Recent Scenes" msgstr "" #: editor/editor_node.cpp @@ -1815,7 +1726,7 @@ msgstr "" msgid "Toggle distraction-free mode." msgstr "" -#: editor/editor_node.cpp editor/io_plugins/editor_scene_import_plugin.cpp +#: editor/editor_node.cpp msgid "Scene" msgstr "" @@ -2035,6 +1946,10 @@ msgstr "" msgid "Issue Tracker" msgstr "" +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +msgid "Community" +msgstr "" + #: editor/editor_node.cpp msgid "About" msgstr "" @@ -2043,7 +1958,7 @@ msgstr "" msgid "Play the project." msgstr "" -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Play" msgstr "" @@ -2059,7 +1974,7 @@ msgstr "" msgid "Stop the scene." msgstr "" -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Stop" msgstr "" @@ -2132,6 +2047,15 @@ msgid "Object properties." msgstr "" #: editor/editor_node.cpp +msgid "Changes may be lost!" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Import" +msgstr "" + +#: editor/editor_node.cpp msgid "FileSystem" msgstr "" @@ -2147,14 +2071,6 @@ msgstr "" msgid "Don't Save" msgstr "" -#: editor/editor_node.cpp editor/editor_reimport_dialog.cpp -msgid "Re-Import" -msgstr "" - -#: editor/editor_node.cpp editor/editor_plugin_settings.cpp -msgid "Update" -msgstr "" - #: editor/editor_node.cpp msgid "Import Templates From ZIP File" msgstr "" @@ -2215,11 +2131,28 @@ msgstr "" msgid "Open the previous Editor" msgstr "" +#: editor/editor_plugin.cpp +msgid "Creating Mesh Previews" +msgstr "" + +#: editor/editor_plugin.cpp +msgid "Thumbnail.." +msgstr "" + #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" msgstr "" #: editor/editor_plugin_settings.cpp +msgid "Update" +msgstr "" + +#: editor/editor_plugin_settings.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Version:" +msgstr "" + +#: editor/editor_plugin_settings.cpp msgid "Author:" msgstr "" @@ -2271,26 +2204,6 @@ msgstr "" msgid "Frame #:" msgstr "" -#: editor/editor_reimport_dialog.cpp -msgid "Please wait for scan to complete." -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Current scene must be saved to re-import." -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Save & Re-Import" -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Importing" -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Import Changed Resources" -msgstr "" - #: editor/editor_run_native.cpp msgid "Select device from the list" msgstr "" @@ -2400,10 +2313,6 @@ msgid "Importing:" msgstr "" #: editor/export_template_manager.cpp -msgid "Loading Export Templates" -msgstr "" - -#: editor/export_template_manager.cpp msgid "Current Version:" msgstr "" @@ -2437,9 +2346,17 @@ msgid "Cannot navigate to '" msgstr "" #: editor/filesystem_dock.cpp +msgid "View items as a grid of thumbnails" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "View items as a list" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "" "\n" -"Status: Needs Re-Import" +"Status: Import of file failed. Please fix file and reimport manually." msgstr "" #: editor/filesystem_dock.cpp @@ -2449,87 +2366,88 @@ msgid "" msgstr "" #: editor/filesystem_dock.cpp -msgid "Same source and destination files, doing nothing." +msgid "Cannot move/rename resources root." msgstr "" #: editor/filesystem_dock.cpp -msgid "Target file exists, can't overwrite. Delete first." +msgid "Cannot move a folder into itself.\n" msgstr "" #: editor/filesystem_dock.cpp -msgid "Same source and destination paths, doing nothing." +msgid "Error moving:\n" msgstr "" #: editor/filesystem_dock.cpp -msgid "Can't move directories to within themselves." +msgid "Unable to update dependencies:\n" msgstr "" #: editor/filesystem_dock.cpp -msgid "Can't rename deps for:\n" +msgid "No name provided" msgstr "" #: editor/filesystem_dock.cpp -msgid "Error moving file:\n" +msgid "Provided name contains invalid characters" msgstr "" #: editor/filesystem_dock.cpp -msgid "Error moving dir:\n" +msgid "No name provided." msgstr "" #: editor/filesystem_dock.cpp -msgid "Can't operate on '..'" +msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp -msgid "Pick New Name and Location For:" +msgid "A file or folder with this name already exists." msgstr "" #: editor/filesystem_dock.cpp -msgid "No files selected!" -msgstr "" +#, fuzzy +msgid "Renaming file:" +msgstr "Alterar nome da Variável" #: editor/filesystem_dock.cpp -msgid "Expand all" +msgid "Renaming folder:" msgstr "" #: editor/filesystem_dock.cpp -msgid "Collapse all" +msgid "Expand all" msgstr "" #: editor/filesystem_dock.cpp -msgid "Show In File Manager" +msgid "Collapse all" msgstr "" #: editor/filesystem_dock.cpp -msgid "Instance" +msgid "Copy Path" msgstr "" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." +msgid "Rename.." msgstr "" #: editor/filesystem_dock.cpp -msgid "View Owners.." +msgid "Move To.." msgstr "" #: editor/filesystem_dock.cpp -msgid "Copy Path" +msgid "New Folder.." msgstr "" #: editor/filesystem_dock.cpp -msgid "Rename or Move.." +msgid "Show In File Manager" msgstr "" #: editor/filesystem_dock.cpp -msgid "Move To.." +msgid "Instance" msgstr "" #: editor/filesystem_dock.cpp -msgid "Info" +msgid "Edit Dependencies.." msgstr "" #: editor/filesystem_dock.cpp -msgid "Re-Import.." +msgid "View Owners.." msgstr "" #: editor/filesystem_dock.cpp @@ -2562,6 +2480,11 @@ msgstr "" msgid "Move" msgstr "" +#: editor/filesystem_dock.cpp editor/plugins/animation_tree_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Rename" +msgstr "" + #: editor/groups_editor.cpp msgid "Add to Group" msgstr "" @@ -2575,6 +2498,10 @@ msgid "Import as Single Scene" msgstr "" #: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials" msgstr "" @@ -2587,6 +2514,18 @@ msgid "Import with Separate Objects+Materials" msgstr "" #: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Materials+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Materials+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes" msgstr "" @@ -2595,38 +2534,31 @@ msgid "Import as Multiple Scenes+Materials" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Import Scene" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Importing Scene.." msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Running Custom Script.." msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Couldn't load post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Invalid/broken script for post-import (check console):" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Error running post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Saving.." msgstr "" @@ -2654,579 +2586,54 @@ msgstr "" msgid "Reimport" msgstr "" -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "No bit masks to import!" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path is empty." -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must be a complete resource path." -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must exist." -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Save path is empty!" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Import BitMasks" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s):" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Target Path:" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Accept" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Bit Mask" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No source font file!" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No target font resource!" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "" -"Invalid file extension.\n" -"Please use .font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Can't load/process source font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Couldn't save font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font Size:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Dest Resource:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "The quick brown fox jumps over the lazy dog." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Test:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Options:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Font Import" -msgstr "" - -#: 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 "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Failed opening as BMFont file." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error initializing FreeType." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Unknown font format." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error loading font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Invalid font size." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Invalid font custom source." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/plugins/theme_editor_plugin.cpp -msgid "Font" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "No meshes to import!" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Single Mesh Import" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Source Mesh(es):" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Mesh" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Surface %d" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "No samples to import!" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Import Audio Samples" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Source Sample(s):" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Audio Sample" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "New Clip" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Animation Options" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Flags" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Bake FPS:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Optimizer" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Linear Error" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angular Error" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angle" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Clips" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Start(s)" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "End(s)" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Loop" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Filters" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source path is empty." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't load post-import script." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Invalid/broken script for post-import." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Error importing scene." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import 3D Scene" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source Scene:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Same as Target Scene" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Shared" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Target Texture Folder:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Post-Process Script:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Custom Root Node Type:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Auto" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Root Node Name:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "The Following Files are Missing:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Anyway" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp scene/gui/dialogs.cpp -msgid "Cancel" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import & Open" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Edited scene has not been saved, open imported scene anyway?" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Image:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Can't import a file over itself:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't localize path: %s (already local)" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "3D Scene Animation" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Uncompressed" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossless (PNG)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossy (WebP)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress (VRAM)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Format" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Compression Quality (WebP):" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Options" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Please specify some files!" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "At least one file needed for Atlas." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Error importing:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Only one file is required for large texture." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Max Texture Size:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for Atlas (2D)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cell Size:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Large Texture" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Textures (2D)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture" +#: editor/multi_node_edit.cpp +msgid "MultiNode Set" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Base Atlas Texture" +#: editor/node_dock.cpp +msgid "Groups" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s)" +#: editor/node_dock.cpp +msgid "Select a Node to edit Signals and Groups." msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 2D" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create Poly" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 3D" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures" +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Insert Point" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "2D Texture" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly (Remove Point)" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "3D Texture" +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Remove Poly And Point" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Atlas Texture" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create a new polygon from scratch." msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp +#: editor/plugins/abstract_polygon_2d_editor.cpp msgid "" -"NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files to " -"the project." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Crop empty space." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Texture" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Load Source Image" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Slicing" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Inserting" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Saving" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save large texture:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Build Atlas For:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Loading Image:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't load image:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Converting Images" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cropping Images" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Blitting Images" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save atlas image:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save converted texture:" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid source!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid translation source!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Column" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/script_create_dialog.cpp -msgid "Language" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No items to import!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No target path!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translations" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Couldn't import!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translation" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Source CSV:" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Ignore First Row" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Compress" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Add to Project (project.godot)" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Languages:" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Translation" -msgstr "" - -#: editor/multi_node_edit.cpp -msgid "MultiNode Set" -msgstr "" - -#: editor/node_dock.cpp -msgid "Groups" -msgstr "" - -#: editor/node_dock.cpp -msgid "Select a Node to edit Signals and Groups." +"Edit existing polygon:\n" +"LMB: Move Point.\n" +"Ctrl+LMB: Split Segment.\n" +"RMB: Erase Point." msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp @@ -3382,7 +2789,6 @@ msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp #: editor/script_create_dialog.cpp msgid "Error!" @@ -3493,10 +2899,6 @@ msgid "Delete Input" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Rename" -msgstr "" - -#: editor/plugins/animation_tree_editor_plugin.cpp msgid "Animation tree is valid." msgstr "" @@ -3552,64 +2954,181 @@ msgstr "" msgid "Filters.." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing %d Triangles:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Free" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Triangle #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Contents:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Light Baker Setup:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "View Files" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing Geometry" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve hostname:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Fixing Lights" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Making BVH" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connection error, please try again." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Light Octree" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't connect." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Octree Texture" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't connect to host:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Transfer to Lightmaps:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response from host:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Allocating Texture #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Baking Triangle #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, return code:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Post-Processing Texture #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Req. Failed." msgstr "" -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Bake!" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, too many redirects" msgstr "" -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Reset the lightmap octree baking process (start over)." +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Redirect Loop." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Bad download hash, assuming file has been tampered with." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Expected:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Got:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed sha256 hash check" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Asset Download Error:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Fetching:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Resolving.." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connecting.." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Requesting.." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Error making request" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Idle" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Retry" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download Error" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download for this asset is already in progress!" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "first" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "prev" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "next" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "last" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "All" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Plugins" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Sort:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Reverse" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Category:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Site:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Support.." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Official" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Testing" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Assets ZIP File" msgstr "" #: editor/plugins/camera_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp msgid "Preview" msgstr "" @@ -3652,11 +3171,15 @@ msgid "Edit CanvasItem" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Change Anchors" +msgid "Anchors only" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom (%):" +msgid "Change Anchors and Margins" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Change Anchors" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3707,59 +3230,73 @@ msgid "Pan Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Lock the selected object in place (can't be moved)." +#, fuzzy +msgid "Toggles snapping" +msgstr "Accionar Breakpoint" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Unlock the selected object (can be moved)." +msgid "Snapping options" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Makes sure the object's children are not selectable." +msgid "Snap to grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Restores the object's children's ability to be selected." +msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp -#: editor/project_settings_editor.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Edit" -msgstr "Editar" +msgid "Configure Snap..." +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +msgid "Snap Relative" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +msgid "Use Pixel Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Rotation Snap" +msgid "Smart snapping" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap Relative" +msgid "Snap to parent" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." +msgid "Snap to node anchor" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Pixel Snap" +msgid "Snap to node sides" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to other nodes" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Lock the selected object in place (can't be moved)." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Unlock the selected object (can be moved)." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Skeleton.." +msgid "Makes sure the object's children are not selectable." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Restores the object's children's ability to be selected." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3788,11 +3325,16 @@ msgid "View" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Reset" +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show helpers" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Set.." +msgid "Show rulers" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3804,7 +3346,7 @@ msgid "Frame Selection" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Anchor" +msgid "Layout" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3828,11 +3370,20 @@ msgid "Clear Pose" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Set a Value" +msgid "Drag pivot from mouse position" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap (Pixels):" +#, fuzzy +msgid "Set pivot at mouse position" +msgstr "Remover Sinal" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Multiply grid step by 2" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Divide grid step by 2" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3843,23 +3394,28 @@ msgstr "" msgid "Adding %s..." msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Create Node" msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Error instancing scene from %s" msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "OK :(" msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "No parent to instance a child at." msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "This operation requires a single selected node." msgstr "" @@ -3873,45 +3429,6 @@ msgid "" "Drag & drop + Alt : Change node type" msgstr "" -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Create Poly" -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly" -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly (Remove Point)" -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Create a new polygon from scratch." -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -msgid "" -"Edit existing polygon:\n" -"LMB: Move Point.\n" -"Ctrl+LMB: Split Segment.\n" -"RMB: Erase Point." -msgstr "" - #: editor/plugins/collision_polygon_editor_plugin.cpp msgid "Create Poly3D" msgstr "" @@ -3921,14 +3438,6 @@ msgid "Set Handle" msgstr "" #: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Creating Mesh Library" -msgstr "" - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Thumbnail.." -msgstr "" - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Remove item %d?" msgstr "" @@ -3951,6 +3460,26 @@ msgid "Update from Scene" msgstr "" #: editor/plugins/curve_editor_plugin.cpp +msgid "Flat0" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Flat1" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Ease in" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Ease out" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Smoothstep" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp msgid "Modify Curve Point" msgstr "" @@ -4029,22 +3558,18 @@ msgid "Create Occluder Polygon" msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Edit existing polygon:" msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "LMB: Move Point." msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Ctrl+LMB: Split Segment." msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "RMB: Erase Point." msgstr "" @@ -4145,6 +3670,10 @@ msgid "Create Outline" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Body" msgstr "" @@ -4272,12 +3801,72 @@ msgstr "" msgid "Populate" msgstr "" -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Create Navigation Polygon" +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Bake!" +msgstr "" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Bake the navigation mesh.\n" +msgstr "" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Clear the navigation mesh." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Setting up Configuration..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Calculating grid size..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating heightfield..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Marking walkable triangles..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Constructing compact heightfield..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Eroding walkable area..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Partioning..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating contours..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating polymesh..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Converting to native navigation mesh..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Navigation Mesh Generator Setup:" +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Parsing Geometry..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Done!" msgstr "" #: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Remove Poly And Point" +msgid "Create Navigation Polygon" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4451,16 +4040,19 @@ msgid "Curve Point #" msgstr "" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Point Pos" -msgstr "" +#, fuzzy +msgid "Set Curve Point Position" +msgstr "Remover Sinal" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve In Pos" -msgstr "" +#, fuzzy +msgid "Set Curve In Position" +msgstr "Remover Sinal" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Out Pos" -msgstr "" +#, fuzzy +msgid "Set Curve Out Position" +msgstr "Remover Sinal" #: editor/plugins/path_editor_plugin.cpp msgid "Split Path" @@ -4520,6 +4112,14 @@ msgid "Scale Polygon" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit" +msgstr "Editar" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon->UV" msgstr "" @@ -4574,63 +4174,10 @@ msgstr "" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "" -#: editor/plugins/rich_text_editor_plugin.cpp -msgid "Parse BBCode" -msgstr "" - -#: editor/plugins/sample_editor_plugin.cpp -msgid "Length:" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Open Sample File(s)" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "ERROR: Couldn't load sample!" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Add Sample" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Rename Sample" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Delete Sample" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "16 Bits" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "8 Bits" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Stereo" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Mono" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/script_editor_debugger.cpp -msgid "Format" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Pitch" -msgstr "" - #: editor/plugins/script_editor_plugin.cpp msgid "Clear Recent Files" msgstr "" @@ -4722,6 +4269,10 @@ msgstr "" msgid "Close All" msgstr "Fechar" +#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp +msgid "Run" +msgstr "" + #: editor/plugins/script_editor_plugin.cpp msgid "Toggle Scripts Panel" msgstr "" @@ -4763,18 +4314,6 @@ msgid "Debug with external editor" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Window" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Left" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Right" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp msgid "Open Godot online documentation" msgstr "" @@ -4857,7 +4396,7 @@ msgstr "" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Copy" msgstr "" @@ -5121,10 +4660,6 @@ msgid "View Plane Transform." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Scaling to %s%%." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." msgstr "" @@ -5141,10 +4676,6 @@ msgid "Top View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Top" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "" @@ -5374,6 +4905,10 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Configure Snap.." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Local Coords" msgstr "" @@ -5519,6 +5054,10 @@ msgid "Speed (FPS):" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Loop" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animation Frames" msgstr "" @@ -5531,11 +5070,11 @@ msgid "Insert Empty (After)" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Up" +msgid "Move (Before)" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Down" +msgid "Move (After)" msgstr "" #: editor/plugins/style_box_editor_plugin.cpp @@ -5699,6 +5238,10 @@ msgid "Style" msgstr "" #: editor/plugins/theme_editor_plugin.cpp +msgid "Font" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp msgid "Color" msgstr "" @@ -5747,7 +5290,7 @@ msgid "Mirror Y" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Bucket" +msgid "Paint Tile" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp @@ -5811,6 +5354,10 @@ msgid "Delete preset '%s'?" msgstr "" #: editor/project_export.cpp +msgid "Export templates for this platform are missing/corrupted: " +msgstr "" + +#: editor/project_export.cpp msgid "Presets" msgstr "" @@ -5881,19 +5428,29 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +msgid "Export templates for this platform are missing/corrupted:" +msgstr "" + +#: editor/project_export.cpp msgid "Export With Debug" msgstr "" #: editor/project_manager.cpp -msgid "Invalid project path, the path must exist!" +msgid "The path does not exists." msgstr "" #: editor/project_manager.cpp -msgid "Invalid project path, project.godot must not exist." +msgid "Please choose a 'project.godot' file." +msgstr "" + +#: editor/project_manager.cpp +msgid "" +"Your project will be created in a non empty folder (you might want to create " +"a new folder)." msgstr "" #: editor/project_manager.cpp -msgid "Invalid project path, project.godot must exist." +msgid "Please choose a folder that does not contain a 'project.godot' file." msgstr "" #: editor/project_manager.cpp @@ -5901,10 +5458,26 @@ msgid "Imported Project" msgstr "" #: editor/project_manager.cpp +msgid " " +msgstr "" + +#: editor/project_manager.cpp +msgid "It would be a good idea to name your project." +msgstr "" + +#: editor/project_manager.cpp msgid "Invalid project path (changed anything?)." msgstr "" #: editor/project_manager.cpp +msgid "Couldn't get project.godot in project path." +msgstr "" + +#: editor/project_manager.cpp +msgid "Couldn't edit project.godot in project path." +msgstr "" + +#: editor/project_manager.cpp msgid "Couldn't create project.godot in project path." msgstr "" @@ -5913,15 +5486,20 @@ msgid "The following files failed extraction from package:" msgstr "" #: editor/project_manager.cpp -msgid "Import Existing Project" +#, fuzzy +msgid "Rename Project" +msgstr "Alterar nome da Função" + +#: editor/project_manager.cpp +msgid "Couldn't get project.godot in the project path." msgstr "" #: editor/project_manager.cpp -msgid "Project Path (Must Exist):" +msgid "New Game Project" msgstr "" #: editor/project_manager.cpp -msgid "Project Name:" +msgid "Import Existing Project" msgstr "" #: editor/project_manager.cpp @@ -5929,19 +5507,23 @@ msgid "Create New Project" msgstr "" #: editor/project_manager.cpp -msgid "Project Path:" +msgid "Install Project:" msgstr "" #: editor/project_manager.cpp -msgid "Install Project:" +msgid "Project Name:" msgstr "" #: editor/project_manager.cpp -msgid "Browse" +msgid "Create folder" msgstr "" #: editor/project_manager.cpp -msgid "New Game Project" +msgid "Project Path:" +msgstr "" + +#: editor/project_manager.cpp +msgid "Browse" msgstr "" #: editor/project_manager.cpp @@ -5953,6 +5535,10 @@ msgid "Unnamed Project" msgstr "" #: editor/project_manager.cpp +msgid "Can't open project" +msgstr "" + +#: editor/project_manager.cpp msgid "Are you sure to open more than one project?" msgstr "" @@ -5988,10 +5574,6 @@ msgid "Project List" msgstr "" #: editor/project_manager.cpp -msgid "Run" -msgstr "" - -#: editor/project_manager.cpp msgid "Scan" msgstr "" @@ -6049,17 +5631,14 @@ msgid "Add Input Action Event" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Meta+" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Shift+" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Alt+" msgstr "" @@ -6120,7 +5699,7 @@ msgstr "Alterar" msgid "Joypad Axis Index:" msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Axis" msgstr "" @@ -6140,31 +5719,31 @@ msgstr "" msgid "Add Event" msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Device" msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Button" msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Left Button." msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Right Button." msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Middle Button." msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Up." msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Down." msgstr "" @@ -6174,7 +5753,7 @@ msgid "Add Global Property" msgstr "Adicionar propriedade Getter" #: editor/project_settings_editor.cpp -msgid "Select an setting item first!" +msgid "Select a setting item first!" msgstr "" #: editor/project_settings_editor.cpp @@ -6191,6 +5770,14 @@ msgid "Delete Item" msgstr "Apagar Seleccionados" #: editor/project_settings_editor.cpp +msgid "Can't contain '/' or ':'" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Already existing" +msgstr "" + +#: editor/project_settings_editor.cpp msgid "Error saving settings." msgstr "" @@ -6340,10 +5927,18 @@ msgid "New Script" msgstr "" #: editor/property_editor.cpp +msgid "Make Unique" +msgstr "" + +#: editor/property_editor.cpp msgid "Show in File System" msgstr "" #: editor/property_editor.cpp +msgid "Convert To %s" +msgstr "" + +#: editor/property_editor.cpp msgid "Error loading file: Not a resource!" msgstr "" @@ -6381,6 +5976,10 @@ msgid "Select Property" msgstr "Adicionar propriedade Setter" #: editor/property_selector.cpp +msgid "Select Virtual Method" +msgstr "" + +#: editor/property_selector.cpp msgid "Select Method" msgstr "" @@ -6408,26 +6007,6 @@ msgstr "" msgid "Reparent" msgstr "" -#: editor/resources_dock.cpp -msgid "Create New Resource" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Open Resource" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Save Resource" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Resource Tools" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Make Local" -msgstr "" - #: editor/run_settings_dialog.cpp msgid "Run Mode:" msgstr "" @@ -6554,14 +6133,6 @@ msgid "Sub-Resources:" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Edit Groups" -msgstr "" - -#: editor/scene_tree_dock.cpp -msgid "Edit Connections" -msgstr "" - -#: editor/scene_tree_dock.cpp msgid "Clear Inheritance" msgstr "" @@ -6742,6 +6313,14 @@ msgid "Invalid base path" msgstr "" #: editor/script_create_dialog.cpp +msgid "Directory of the same name exists" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "File exists, will be reused" +msgstr "" + +#: editor/script_create_dialog.cpp msgid "Invalid extension" msgstr "" @@ -6784,6 +6363,10 @@ msgid "Load existing script file" msgstr "" #: editor/script_create_dialog.cpp +msgid "Language" +msgstr "" + +#: editor/script_create_dialog.cpp msgid "Inherits" msgstr "" @@ -6825,6 +6408,10 @@ msgid "Function:" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Errors" msgstr "" @@ -6905,6 +6492,10 @@ msgid "Type" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Format" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Usage" msgstr "" @@ -6980,12 +6571,28 @@ msgstr "" msgid "Change Probe Extents" msgstr "" +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Library" +msgstr "" + +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Status" +msgstr "" + +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Libraries: " +msgstr "" + +#: modules/gdnative/register_types.cpp +msgid "GDNative" +msgstr "" + #: 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/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "" @@ -7039,10 +6646,6 @@ msgid "GridMap Duplicate Selection" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Paint" -msgstr "" - -#: modules/gridmap/grid_map_editor_plugin.cpp msgid "Snap View" msgstr "" @@ -7134,12 +6737,8 @@ msgstr "" msgid "Pick Distance:" msgstr "" -#: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Tiles" -msgstr "" - -#: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Areas" +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "Builds" msgstr "" #: modules/visual_script/visual_script.cpp @@ -7342,10 +6941,18 @@ msgid "Return" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Call" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Get" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Script already has function '%s'" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Input Value" msgstr "" @@ -7702,6 +7309,12 @@ msgid "" "order for AnimatedSprite3D to display frames." msgstr "" +#: scene/3d/vehicle_body.cpp +msgid "" +"VehicleWheel serves to provide a wheel system to a VehicleBody. Please use " +"it as a child of a VehicleBody." +msgstr "" + #: scene/gui/color_picker.cpp msgid "Raw Mode" msgstr "" @@ -7711,15 +7324,15 @@ msgid "Add current color as a preset" msgstr "" #: scene/gui/dialogs.cpp -msgid "Alert!" +msgid "Cancel" msgstr "" #: scene/gui/dialogs.cpp -msgid "Please Confirm..." +msgid "Alert!" msgstr "" -#: scene/gui/input_action.cpp -msgid "Ctrl+" +#: scene/gui/dialogs.cpp +msgid "Please Confirm..." msgstr "" #: scene/gui/popup.cpp @@ -7750,6 +7363,22 @@ msgid "" "texture to some node for display." msgstr "" +#: scene/resources/dynamic_font.cpp +msgid "Error initializing FreeType." +msgstr "" + +#: scene/resources/dynamic_font.cpp +msgid "Unknown font format." +msgstr "" + +#: scene/resources/dynamic_font.cpp +msgid "Error loading font." +msgstr "" + +#: scene/resources/dynamic_font.cpp +msgid "Invalid font size." +msgstr "" + #, fuzzy #~ msgid "Invalid unique name." #~ msgstr "Nome de Ãndice propriedade inválido." diff --git a/editor/translations/ru.po b/editor/translations/ru.po index 92755d427b..898098d02f 100644 --- a/editor/translations/ru.po +++ b/editor/translations/ru.po @@ -2,17 +2,19 @@ # Copyright (C) 2016-2017 Juan Linietsky, Ariel Manzur and the Godot community # This file is distributed under the same license as the Godot source code. # +# B10nicMachine <shumik1337@gmail.com>, 2017. # DimOkGamer <dimokgamer@gmail.com>, 2016-2017. # ijet <my-ijet@mail.ru>, 2017. # Maxim Kim <habamax@gmail.com>, 2016. # Maxim toby3d Lebedev <mail@toby3d.ru>, 2016. +# pitchblack <pitchblack@mail.ru>, 2017. # msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2017-07-25 09:47+0000\n" -"Last-Translator: ijet <my-ijet@mail.ru>\n" +"PO-Revision-Date: 2017-09-05 19:02+0000\n" +"Last-Translator: B10nicMachine <shumik1337@gmail.com>\n" "Language-Team: Russian <https://hosted.weblate.org/projects/godot-engine/" "godot/ru/>\n" "Language: ru\n" @@ -21,7 +23,7 @@ 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.16-dev\n" +"X-Generator: Weblate 2.17-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -197,10 +199,9 @@ msgid "Create %d NEW tracks and insert keys?" msgstr "Создать %d новые дорожки и вÑтавить ключи?" #: editor/animation_editor.cpp editor/create_dialog.cpp -#: editor/editor_audio_buses.cpp +#: editor/editor_audio_buses.cpp editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp #: editor/plugins/mesh_instance_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp editor/project_manager.cpp #: editor/script_create_dialog.cpp msgid "Create" @@ -362,261 +363,6 @@ msgstr "Изменение типа Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¼Ð°ÑÑива" msgid "Change Array Value" msgstr "Изменить значение маÑÑива" -#: editor/asset_library_editor_plugin.cpp -msgid "Free" -msgstr "ОÑвободить" - -#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp -msgid "Version:" -msgstr "ВерÑиÑ:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Contents:" -msgstr "Содержание:" - -#: editor/asset_library_editor_plugin.cpp -msgid "View Files" -msgstr "ПроÑмотр Файлов" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_help.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp -msgid "Description:" -msgstr "ОпиÑание:" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -#: editor/project_manager.cpp -msgid "Install" -msgstr "УÑтановить" - -#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp -#: editor/connections_dialog.cpp editor/export_template_manager.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -#: editor/project_settings_editor.cpp editor/property_editor.cpp -#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Close" -msgstr "Закрыть" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve hostname:" -msgstr "Ðевозможно определить Ð¸Ð¼Ñ Ñ…Ð¾Ñта:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve." -msgstr "Ðе удаетÑÑ Ñ€Ð°Ð·Ñ€ÐµÑˆÐ¸Ñ‚ÑŒ." - -#: editor/asset_library_editor_plugin.cpp -msgid "Connection error, please try again." -msgstr "Ошибка подключениÑ, попробуйте еще раз." - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't connect." -msgstr "Ðе удаетÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡Ð¸Ñ‚ÑŒÑÑ." - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't connect to host:" -msgstr "Ðе удаетÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡Ð¸Ñ‚ÑŒÑÑ Ðº хоÑту:" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response from host:" -msgstr "Ðет ответа от хоÑта:" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response." -msgstr "Ðет ответа." - -#: editor/asset_library_editor_plugin.cpp -msgid "Request failed, return code:" -msgstr "Ð—Ð°Ð¿Ñ€Ð¾Ñ Ð½Ðµ удалÑÑ, код:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Req. Failed." -msgstr "Ð—Ð°Ð¿Ñ€Ð¾Ñ Ð½Ðµ прошел." - -#: editor/asset_library_editor_plugin.cpp -msgid "Request failed, too many redirects" -msgstr "Ð—Ð°Ð¿Ñ€Ð¾Ñ Ð½Ðµ прошел, Ñлишком много перенаправлений" - -#: editor/asset_library_editor_plugin.cpp -msgid "Redirect Loop." -msgstr "ЦикличеÑкое перенаправление." - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed:" -msgstr "Ðе удалоÑÑŒ:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Bad download hash, assuming file has been tampered with." -msgstr "ÐеÑовпадение Ñ…Ñша загрузки, возможно файл был изменен." - -#: editor/asset_library_editor_plugin.cpp -msgid "Expected:" -msgstr "ОжидаетÑÑ:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Got:" -msgstr "Получил:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed sha256 hash check" -msgstr "Ðе удалоÑÑŒ проверить sha256 Ñ…Ñш" - -#: editor/asset_library_editor_plugin.cpp -msgid "Asset Download Error:" -msgstr "Ошибка Загрузки Шаблона:" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -msgid "Success!" -msgstr "УÑпех!" - -#: editor/asset_library_editor_plugin.cpp -msgid "Fetching:" -msgstr "Извлечение:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Resolving.." -msgstr "ИнициализациÑ..." - -#: editor/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "Подключение.." - -#: editor/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "Запрашиваю.." - -#: editor/asset_library_editor_plugin.cpp -msgid "Error making request" -msgstr "Ошибка во Ð²Ñ€ÐµÐ¼Ñ Ð·Ð°Ð¿Ñ€Ð¾Ñа" - -#: editor/asset_library_editor_plugin.cpp -msgid "Idle" -msgstr "ПроÑтой" - -#: editor/asset_library_editor_plugin.cpp -msgid "Retry" -msgstr "Повторить" - -#: editor/asset_library_editor_plugin.cpp -msgid "Download Error" -msgstr "Ошибка Загрузки" - -#: editor/asset_library_editor_plugin.cpp -msgid "Download for this asset is already in progress!" -msgstr "Загрузка Ñтого шаблона уже идет!" - -#: editor/asset_library_editor_plugin.cpp -msgid "first" -msgstr "первый" - -#: editor/asset_library_editor_plugin.cpp -msgid "prev" -msgstr "предыдущий" - -#: editor/asset_library_editor_plugin.cpp -msgid "next" -msgstr "далее" - -#: editor/asset_library_editor_plugin.cpp -msgid "last" -msgstr "поÑледний" - -#: editor/asset_library_editor_plugin.cpp -msgid "All" -msgstr "Ð’Ñе" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/property_selector.cpp editor/quick_open.cpp -#: editor/settings_config_dialog.cpp -msgid "Search:" -msgstr "ПоиÑк:" - -#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Search" -msgstr "ПоиÑк" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/project_manager.cpp -msgid "Import" -msgstr "Импорт" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Plugins" -msgstr "Плагины" - -#: editor/asset_library_editor_plugin.cpp -msgid "Sort:" -msgstr "Сортировать:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Reverse" -msgstr "Обратно" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Category:" -msgstr "КатегориÑ:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Site:" -msgstr "Сайт:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "Поддержка.." - -#: editor/asset_library_editor_plugin.cpp -msgid "Official" -msgstr "Официальные" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -msgid "Community" -msgstr "ОбщеÑтвенные" - -#: editor/asset_library_editor_plugin.cpp -msgid "Testing" -msgstr "ТеÑтируемые" - -#: editor/asset_library_editor_plugin.cpp -msgid "Assets ZIP File" -msgstr "ZIP файл аÑÑетов" - -#: editor/call_dialog.cpp -msgid "Method List For '%s':" -msgstr "СпиÑок методов Ð´Ð»Ñ '%s':" - -#: editor/call_dialog.cpp modules/visual_script/visual_script_editor.cpp -msgid "Call" -msgstr "Вызов" - -#: editor/call_dialog.cpp -msgid "Method List:" -msgstr "СпиÑок методов:" - -#: editor/call_dialog.cpp -msgid "Arguments:" -msgstr "Ðргументы:" - -#: editor/call_dialog.cpp -msgid "Return:" -msgstr "Возвращение:" - #: editor/code_editor.cpp msgid "Go to Line" msgstr "Перейти к Ñтроке" @@ -653,6 +399,14 @@ msgstr "Целые Ñлова" msgid "Selection Only" msgstr "Только выделÑть" +#: editor/code_editor.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp +msgid "Search" +msgstr "ПоиÑк" + #: editor/code_editor.cpp editor/editor_help.cpp msgid "Find" msgstr "Ðайти" @@ -685,11 +439,11 @@ msgstr "Подтверждение замены" msgid "Skip" msgstr "ПропуÑтить" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom In" msgstr "Приблизить" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom Out" msgstr "Отдалить" @@ -758,6 +512,20 @@ msgstr "Отложенное" msgid "Oneshot" msgstr "Один раз" +#: editor/connections_dialog.cpp editor/dependency_editor.cpp +#: editor/export_template_manager.cpp +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Close" +msgstr "Закрыть" + #: editor/connections_dialog.cpp msgid "Connect" msgstr "ПриÑоединить" @@ -783,7 +551,7 @@ msgstr "ПриÑоединить.." msgid "Disconnect" msgstr "ОтÑоединить" -#: editor/connections_dialog.cpp editor/node_dock.cpp +#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" msgstr "Сигналы" @@ -800,12 +568,25 @@ msgstr "Избранное:" msgid "Recent:" msgstr "Ðедавнее:" +#: editor/create_dialog.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp +#: editor/quick_open.cpp editor/settings_config_dialog.cpp +msgid "Search:" +msgstr "ПоиÑк:" + #: editor/create_dialog.cpp editor/editor_help.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp #: editor/quick_open.cpp msgid "Matches:" msgstr "СовпадениÑ:" +#: editor/create_dialog.cpp editor/editor_help.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp +#: editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "ОпиÑание:" + #: editor/dependency_editor.cpp msgid "Search Replacement For:" msgstr "ПоиÑк замены длÑ:" @@ -865,6 +646,10 @@ msgid "Owners Of:" msgstr "Владельцы:" #: editor/dependency_editor.cpp +msgid "Remove selected files from the project? (no undo)" +msgstr "Удалить выбранный файл из проекта? (ÐÐµÐ»ÑŒÐ·Ñ Ð¾Ñ‚Ð¼ÐµÐ½Ð¸Ñ‚ÑŒ!)" + +#: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" @@ -874,8 +659,9 @@ msgstr "" "Ð’ÑÑ‘ равно удалить его? (ÐÐµÐ»ÑŒÐ·Ñ Ð¾Ñ‚Ð¼ÐµÐ½Ð¸Ñ‚ÑŒ!)" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (no undo)" -msgstr "Удалить выбранный файл из проекта? (ÐÐµÐ»ÑŒÐ·Ñ Ð¾Ñ‚Ð¼ÐµÐ½Ð¸Ñ‚ÑŒ!)" +#, fuzzy +msgid "Cannot remove:\n" +msgstr "Ðе удаетÑÑ Ñ€Ð°Ð·Ñ€ÐµÑˆÐ¸Ñ‚ÑŒ." #: editor/dependency_editor.cpp msgid "Error loading:" @@ -941,19 +727,12 @@ msgid "Godot Engine contributors" msgstr "Ðвторы Движка Godot" #: editor/editor_about.cpp -#, fuzzy -msgid "Authors" -msgstr "Ðвтор:" - -#: editor/editor_about.cpp -#, fuzzy msgid "Project Founders" -msgstr "Менеджер проектов" +msgstr "ОÑнователи Проекта" #: editor/editor_about.cpp -#, fuzzy msgid "Lead Developer" -msgstr "Разработчики" +msgstr "Ведущий Разработчик" #: editor/editor_about.cpp editor/project_manager.cpp msgid "Project Manager" @@ -964,118 +743,155 @@ msgid "Developers" msgstr "Разработчики" #: editor/editor_about.cpp -msgid "License" +msgid "Authors" +msgstr "Ðвторы" + +#: editor/editor_about.cpp +msgid "Platinum Sponsors" msgstr "" #: editor/editor_about.cpp -msgid "Thirdparty License" +msgid "Gold Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Mini Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Silver Donors" +msgstr "" + +#: editor/editor_about.cpp +#, fuzzy +msgid "Bronze Donors" +msgstr "Копировать вниз" + +#: editor/editor_about.cpp +msgid "Donors" msgstr "" #: editor/editor_about.cpp +msgid "License" +msgstr "ЛицензиÑ" + +#: editor/editor_about.cpp +msgid "Thirdparty License" +msgstr "Сторонние Лицензии" + +#: editor/editor_about.cpp msgid "" "Godot Engine relies on a number of thirdparty free and open source " "libraries, all compatible with the terms of its MIT license. The following " "is an exhaustive list of all such thirdparty components with their " "respective copyright statements and license terms." msgstr "" +"Движок godot опираетÑÑ Ð½Ð° Ñ€Ñд Ñторонних беÑплатных и открытых библиотек, " +"ÑовмеÑтимых Ñ ÑƒÑловиÑми лицензии MIT. Ðиже приводитÑÑ Ð¸Ñчерпывающий ÑпиÑок " +"вÑех Ñторонних компонентов вмеÑте Ñ Ð¸Ñ… авторÑкими правами и уÑловиÑми " +"лицензионного ÑоглашениÑ." #: editor/editor_about.cpp -#, fuzzy msgid "All Components" -msgstr "Содержание:" +msgstr "Ð’Ñе компоненты" #: editor/editor_about.cpp -#, fuzzy msgid "Components" -msgstr "Содержание:" +msgstr "Компоненты" #: editor/editor_about.cpp msgid "Licenses" -msgstr "" +msgstr "Лицензии" #: editor/editor_asset_installer.cpp editor/project_manager.cpp msgid "Error opening package file, not in zip format." -msgstr "" +msgstr "Ошибка при открытии файла, не в формате zip." #: editor/editor_asset_installer.cpp -#, fuzzy msgid "Uncompressing Assets" -msgstr "ÐеÑжатый" +msgstr "РаÑпаковка аÑÑетов" #: editor/editor_asset_installer.cpp editor/project_manager.cpp msgid "Package Installed Successfully!" msgstr "Пакет уÑпешно уÑтановлен!" #: editor/editor_asset_installer.cpp -#, fuzzy +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Success!" +msgstr "УÑпех!" + +#: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp +msgid "Install" +msgstr "УÑтановить" + +#: editor/editor_asset_installer.cpp msgid "Package Installer" -msgstr "Пакет уÑпешно уÑтановлен!" +msgstr "УÑтановщик пакетов" #: editor/editor_audio_buses.cpp msgid "Speakers" -msgstr "" +msgstr "Колонки" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Add Effect" -msgstr "Добавить Ñобытие" +msgstr "Добавить Ñффект" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Rename Audio Bus" -msgstr "Открыть раÑкладку звуковой шины" +msgstr "Переименовать аудио шину" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Toggle Audio Bus Solo" -msgstr "Открыть раÑкладку звуковой шины" +msgstr "Переключить аудио шину - Ñоло" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Toggle Audio Bus Mute" -msgstr "Открыть раÑкладку звуковой шины" +msgstr "Переключить аудио шину - тишина" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Bypass Effects" -msgstr "" +msgstr "Переключить аудио шину - bypass Ñффект" #: editor/editor_audio_buses.cpp msgid "Select Audio Bus Send" -msgstr "" +msgstr "Выбор передача аудио шины" #: editor/editor_audio_buses.cpp msgid "Add Audio Bus Effect" -msgstr "" +msgstr "Добавить аудио Ñффект" #: editor/editor_audio_buses.cpp msgid "Move Bus Effect" -msgstr "" +msgstr "Передвинуть Ñффект" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Delete Bus Effect" -msgstr "Удалить выделенное" +msgstr "Удалить Ñффект шины" #: editor/editor_audio_buses.cpp msgid "Audio Bus, Drag and Drop to rearrange." -msgstr "" - -#: editor/editor_audio_buses.cpp -#, fuzzy -msgid "Bus options" -msgstr "Опции вложенной Ñцены" +msgstr "Ðудио шина, перетащите Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ³Ñ€ÑƒÐ¿Ð¿Ð¸Ñ€Ð¾Ð²ÐºÐ¸." #: editor/editor_audio_buses.cpp msgid "Solo" -msgstr "" +msgstr "Соло" #: editor/editor_audio_buses.cpp msgid "Mute" -msgstr "" +msgstr "Заглушить" #: editor/editor_audio_buses.cpp msgid "Bypass" -msgstr "" +msgstr "Bypass" + +#: editor/editor_audio_buses.cpp +msgid "Bus options" +msgstr "Параметры шины" #: editor/editor_audio_buses.cpp editor/plugins/tile_map_editor_plugin.cpp #: editor/scene_tree_dock.cpp @@ -1084,32 +900,37 @@ msgstr "Дублировать" #: editor/editor_audio_buses.cpp #, fuzzy +msgid "Reset Volume" +msgstr "СброÑить приближение" + +#: editor/editor_audio_buses.cpp msgid "Delete Effect" -msgstr "Удалить выделенное" +msgstr "Удалить Ñффект" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Add Audio Bus" -msgstr "Добавить" +msgstr "Добавить аудио шину" #: editor/editor_audio_buses.cpp msgid "Master bus can't be deleted!" -msgstr "" +msgstr "МаÑтер шина не может быть удалена!" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Delete Audio Bus" -msgstr "Удалить макет" +msgstr "Удалить аудио шину" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Duplicate Audio Bus" -msgstr "Дублировать анимацию" +msgstr "Дублировать аудио шину" #: editor/editor_audio_buses.cpp #, fuzzy +msgid "Reset Bus Volume" +msgstr "СброÑить приближение" + +#: editor/editor_audio_buses.cpp msgid "Move Audio Bus" -msgstr "ПеремеÑтить дейÑтвие" +msgstr "ПеремеÑтить аудио шину" #: editor/editor_audio_buses.cpp msgid "Save Audio Bus Layout As.." @@ -1125,32 +946,28 @@ msgstr "Открыть раÑкладку звуковой шины" #: editor/editor_audio_buses.cpp msgid "There is no 'res://default_bus_layout.tres' file." -msgstr "" +msgstr "ОтÑутÑтвует файл «res://default_bus_layout.tres»." #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Invalid file, not an audio bus layout." -msgstr "" -"ÐедопуÑтимое раÑширение файла.\n" -"ПожалуйÑта, иÑпользуйте .font." +msgstr "ÐедопуÑтимый файл, не раÑкладка аудио шины." #: editor/editor_audio_buses.cpp msgid "Add Bus" msgstr "Добавить" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Create a new Bus Layout." -msgstr "Создать новый реÑурÑ" +msgstr "Создать новую раÑкладку шины." -#: editor/editor_audio_buses.cpp editor/script_create_dialog.cpp +#: editor/editor_audio_buses.cpp editor/property_editor.cpp +#: editor/script_create_dialog.cpp msgid "Load" msgstr "Загрузить" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Load an existing Bus Layout." -msgstr "Загрузить ÑущеÑтвующий реÑÑƒÑ€Ñ Ñ Ð´Ð¸Ñка и редактировать его." +msgstr "Загрузить ÑущеÑтвующую раÑкладку шины." #: editor/editor_audio_buses.cpp #: editor/plugins/animation_player_editor_plugin.cpp @@ -1158,18 +975,16 @@ msgid "Save As" msgstr "Сохранить как" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Save this Bus Layout to a file." -msgstr "Сохранить раÑкладку звуковой шины как.." +msgstr "Сохранить текущую раÑкладку звуковой шины в файл." #: editor/editor_audio_buses.cpp editor/import_dock.cpp -#, fuzzy msgid "Load Default" -msgstr "По-умолчанию" +msgstr "Загрузить по умолчанию" #: editor/editor_audio_buses.cpp msgid "Load the default Bus Layout." -msgstr "" +msgstr "Загрузить Ñтандартную раÑкладку шины." #: editor/editor_autoload_settings.cpp msgid "Invalid name." @@ -1242,7 +1057,7 @@ msgid "Rearrange Autoloads" msgstr "ПереÑтановка автозагрузок" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp scene/gui/file_dialog.cpp +#: scene/gui/file_dialog.cpp msgid "Path:" msgstr "Путь:" @@ -1250,9 +1065,7 @@ msgstr "Путь:" msgid "Node Name:" msgstr "Ð˜Ð¼Ñ Ð£Ð·Ð»Ð°:" -#: editor/editor_autoload_settings.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp editor/project_manager.cpp +#: editor/editor_autoload_settings.cpp editor/project_manager.cpp msgid "Name" msgstr "ИмÑ" @@ -1277,27 +1090,27 @@ msgid "Updating scene.." msgstr "Обновление Ñцены.." #: editor/editor_dir_dialog.cpp -#, fuzzy msgid "Please select a base directory first" -msgstr "ПожалуйÑта Ñначала Ñохраните Ñцену." +msgstr "ПожалуйÑта, выберите базовый каталог" #: editor/editor_dir_dialog.cpp msgid "Choose a Directory" msgstr "Выбрать каталог" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Create Folder" msgstr "Создать папку" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: editor/editor_plugin_settings.cpp editor/plugins/theme_editor_plugin.cpp -#: editor/project_export.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp +#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp +#: scene/gui/file_dialog.cpp msgid "Name:" msgstr "ИмÑ:" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Could not create folder." msgstr "Ðевозможно Ñоздать папку." @@ -1317,30 +1130,6 @@ msgstr "Упаковывание" msgid "Template file not found:\n" msgstr "Файл шаблона не найден:\n" -#: editor/editor_export.cpp -msgid "Added:" -msgstr "Добавлено:" - -#: editor/editor_export.cpp -msgid "Removed:" -msgstr "Удалено:" - -#: editor/editor_export.cpp -msgid "Error saving atlas:" -msgstr "Ошибка ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð°Ñ‚Ð»Ð°Ñа:" - -#: editor/editor_export.cpp -msgid "Could not save atlas subtexture:" -msgstr "Ðевозможно Ñохранить текÑтуру атлаÑа:" - -#: editor/editor_export.cpp -msgid "Exporting for %s" -msgstr "ÐкÑпортирование Ð´Ð»Ñ %s" - -#: editor/editor_export.cpp -msgid "Setting Up.." -msgstr "ÐаÑтройка.." - #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "Файл ÑущеÑтвует, перезапиÑать?" @@ -1425,6 +1214,11 @@ msgstr "ПеремеÑтить избранное вверх" msgid "Move Favorite Down" msgstr "ПеремеÑтить избранное вниз" +#: editor/editor_file_dialog.cpp +#, fuzzy +msgid "Go to parent folder" +msgstr "Ðевозможно Ñоздать папку." + #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Directories & Files:" msgstr "Каталоги и файлы:" @@ -1467,6 +1261,10 @@ msgstr "СпиÑок клаÑÑов:" msgid "Search Classes" msgstr "ПоиÑк клаÑÑов" +#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +msgid "Top" +msgstr "Верх" + #: editor/editor_help.cpp editor/property_editor.cpp msgid "Class:" msgstr "КлаÑÑ:" @@ -1483,15 +1281,30 @@ msgstr "УнаÑледован:" msgid "Brief Description:" msgstr "Краткое опиÑание:" +#: editor/editor_help.cpp +#, fuzzy +msgid "Members" +msgstr "УчаÑтники:" + #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "УчаÑтники:" #: editor/editor_help.cpp +#, fuzzy +msgid "Public Methods" +msgstr "СпиÑок методов:" + +#: editor/editor_help.cpp msgid "Public Methods:" msgstr "СпиÑок методов:" #: editor/editor_help.cpp +#, fuzzy +msgid "GUI Theme Items" +msgstr "Тема Ñлементов GUI:" + +#: editor/editor_help.cpp msgid "GUI Theme Items:" msgstr "Тема Ñлементов GUI:" @@ -1501,53 +1314,85 @@ msgstr "Сигналы:" #: editor/editor_help.cpp #, fuzzy +msgid "Enumerations" +msgstr "ПеречиÑлениÑ:" + +#: editor/editor_help.cpp msgid "Enumerations:" -msgstr "Ðнимации" +msgstr "ПеречиÑлениÑ:" #: editor/editor_help.cpp msgid "enum " -msgstr "" +msgstr "перечиÑление " + +#: editor/editor_help.cpp +#, fuzzy +msgid "Constants" +msgstr "КонÑтанты:" #: editor/editor_help.cpp msgid "Constants:" msgstr "КонÑтанты:" #: editor/editor_help.cpp +#, fuzzy +msgid "Description" +msgstr "ОпиÑание:" + +#: editor/editor_help.cpp +#, fuzzy +msgid "Properties" +msgstr "СвойÑтва:" + +#: editor/editor_help.cpp msgid "Property Description:" msgstr "ОпиÑание ÑвойÑтва:" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this property. Please help us by " +"[color=$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp +#, fuzzy +msgid "Methods" +msgstr "СпиÑок методов:" + +#: editor/editor_help.cpp msgid "Method Description:" msgstr "ОпиÑание методов:" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this method. Please help us by [color=" +"$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp msgid "Search Text" msgstr "ИÑкать текÑÑ‚" #: editor/editor_log.cpp -#, fuzzy msgid "Output:" -msgstr " Вывод:" +msgstr "Вывод:" #: editor/editor_log.cpp editor/plugins/animation_tree_editor_plugin.cpp -#: editor/plugins/rich_text_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_editor_debugger.cpp scene/gui/line_edit.cpp -#: scene/gui/text_edit.cpp +#: editor/property_editor.cpp editor/script_editor_debugger.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Clear" msgstr "ОчиÑтить" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Error saving resource!" msgstr "Ошибка при Ñохранении реÑурÑа!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Save Resource As.." msgstr "Сохранить реÑÑƒÑ€Ñ ÐºÐ°Ðº.." -#: editor/editor_node.cpp editor/export_template_manager.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "I see.." msgstr "ЯÑно.." @@ -1564,6 +1409,30 @@ msgid "Error while saving." msgstr "Ошибка при Ñохранении." #: editor/editor_node.cpp +#, fuzzy +msgid "Can't open '%s'." +msgstr "Ðевозможно работать Ñ '..'" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Error while parsing '%s'." +msgstr "Ошибка при Ñохранении." + +#: editor/editor_node.cpp +msgid "Unexpected end of file '%s'." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Missing '%s' or its dependencies." +msgstr "Сцена '%s' имеет иÑпорченные завиÑимоÑти:" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Error while loading '%s'." +msgstr "Ошибка при Ñохранении." + +#: editor/editor_node.cpp msgid "Saving Scene" msgstr "Сохранение Ñцены" @@ -1576,9 +1445,8 @@ msgid "Creating Thumbnail" msgstr "Создание ÑÑкизов" #: editor/editor_node.cpp -#, fuzzy msgid "This operation can't be done without a tree root." -msgstr "Ðта Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð½Ðµ может быть выполнена без Ñцены." +msgstr "Ðта Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð½Ðµ может быть выполнена без ÐºÐ¾Ñ€Ð½Ñ Ð´ÐµÑ€ÐµÐ²Ð°." #: editor/editor_node.cpp msgid "" @@ -1624,6 +1492,33 @@ msgid "Restored default layout to base settings." msgstr "Вернуть макет по-умолчанию к Ñтандартному." #: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was imported, so it's not editable.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was instanced or inherited.\n" +"Changes to it will not be kept when saving the current scene." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource was imported, so it's not editable. Change its settings in the " +"import panel and then re-import." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This scene was imported, so changes to it will not be kept.\n" +"Instancing it or inheriting will allow making changes to it.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp msgid "Copy Params" msgstr "Копировать параметры" @@ -1710,13 +1605,12 @@ msgid "Quick Open Script.." msgstr "БыÑтро открыть Ñкрипт.." #: editor/editor_node.cpp -#, fuzzy msgid "Save & Close" -msgstr "Сохранить файл" +msgstr "Сохранить и закрыть" #: editor/editor_node.cpp msgid "Save changes to '%s' before closing?" -msgstr "" +msgstr "Сохранить Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² «%s» перед закрытием?" #: editor/editor_node.cpp msgid "Save Scene As.." @@ -1747,9 +1641,8 @@ msgid "Export Tile Set" msgstr "ÐкÑпортировать набор тайлов" #: editor/editor_node.cpp -#, fuzzy msgid "This operation can't be done without a selected node." -msgstr "Ðта Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð½Ðµ может быть выполнена без Ñцены." +msgstr "Ðта Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð½Ðµ может быть выполнена без выбранного узла." #: editor/editor_node.cpp msgid "Current scene not saved. Open anyway?" @@ -1780,22 +1673,27 @@ msgid "Exit the editor?" msgstr "Выйти из редактора?" #: editor/editor_node.cpp -#, fuzzy msgid "Open Project Manager?" -msgstr "Менеджер проектов" +msgstr "Открыть менеджер проектов?" #: editor/editor_node.cpp -#, fuzzy msgid "Save & Quit" -msgstr "Сохранить файл" +msgstr "Сохранить и выйти" #: editor/editor_node.cpp msgid "Save changes to the following scene(s) before quitting?" -msgstr "" +msgstr "Сохранить Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² Ñледующей Ñцене(Ñ‹) перед выходом?" #: editor/editor_node.cpp msgid "Save changes the following scene(s) before opening Project Manager?" msgstr "" +"Сохранить Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² Ñледующей Ñцене(Ñ‹) перед открытием менеджера проектов?" + +#: editor/editor_node.cpp +msgid "" +"This option is deprecated. Situations where refresh must be forced are now " +"considered a bug. Please report." +msgstr "" #: editor/editor_node.cpp msgid "Pick a Main Scene" @@ -1803,19 +1701,19 @@ msgstr "Выберите главную Ñцену" #: editor/editor_node.cpp msgid "Unable to enable addon plugin at: '" -msgstr "" +msgstr "Ðе удаетÑÑ Ð²ÐºÐ»ÑŽÑ‡Ð¸Ñ‚ÑŒ плагин: '" #: editor/editor_node.cpp msgid "' parsing of config failed." -msgstr "" +msgstr "' анализ конфигурации не удалÑÑ." #: editor/editor_node.cpp msgid "Unable to find script field for addon plugin at: 'res://addons/" -msgstr "" +msgstr "Ðе удаетÑÑ Ð½Ð°Ð¹Ñ‚Ð¸ поле script Ð´Ð»Ñ Ð¿Ð»Ð°Ð³Ð¸Ð½Ð°: ' res://addons/" #: editor/editor_node.cpp msgid "Unable to load addon script from path: '" -msgstr "" +msgstr "Ðе удалоÑÑŒ загрузить Ñкрипт из иÑточника: '" #: editor/editor_node.cpp msgid "" @@ -1827,7 +1725,7 @@ msgstr "" "Чтобы её изменить нужно Ñоздать новую унаÑледованную Ñцену." #: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Ugh" msgstr "ЯÑно" @@ -1841,14 +1739,15 @@ msgstr "" "проекта." #: editor/editor_node.cpp -msgid "Error loading scene." -msgstr "Ошибка загрузки Ñцены." - -#: editor/editor_node.cpp msgid "Scene '%s' has broken dependencies:" msgstr "Сцена '%s' имеет иÑпорченные завиÑимоÑти:" #: editor/editor_node.cpp +#, fuzzy +msgid "Clear Recent Scenes" +msgstr "ОчиÑтить Ðедавние Файлы" + +#: editor/editor_node.cpp msgid "Save Layout" msgstr "Сохранить макет" @@ -1863,7 +1762,7 @@ msgstr "По-умолчанию" #: editor/editor_node.cpp msgid "Switch Scene Tab" -msgstr "Смена вкладки Ñо Ñценой" +msgstr "Переключить вкладку Ñцены" #: editor/editor_node.cpp msgid "%d more file(s)" @@ -1878,11 +1777,10 @@ msgid "Distraction Free Mode" msgstr "Свободный режим" #: editor/editor_node.cpp -#, fuzzy msgid "Toggle distraction-free mode." -msgstr "Свободный режим" +msgstr "Переключить режим без отвлечениÑ." -#: editor/editor_node.cpp editor/io_plugins/editor_scene_import_plugin.cpp +#: editor/editor_node.cpp msgid "Scene" msgstr "Сцена" @@ -2120,6 +2018,10 @@ msgstr "ВопроÑÑ‹ и ответы" msgid "Issue Tracker" msgstr "СиÑтема отÑÐ»ÐµÐ¶Ð¸Ð²Ð°Ð½Ð¸Ñ Ð¾ÑˆÐ¸Ð±Ð¾Ðº" +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +msgid "Community" +msgstr "ОбщеÑтвенные" + #: editor/editor_node.cpp msgid "About" msgstr "О движке" @@ -2128,7 +2030,7 @@ msgstr "О движке" msgid "Play the project." msgstr "ЗапуÑтить проект." -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Play" msgstr "ВоÑпроизвеÑти" @@ -2144,7 +2046,7 @@ msgstr "ПриоÑтановить Ñцену" msgid "Stop the scene." msgstr "ОÑтановить Ñцену." -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Stop" msgstr "ОÑтановить" @@ -2217,6 +2119,16 @@ msgid "Object properties." msgstr "СвойÑтва объекта." #: editor/editor_node.cpp +#, fuzzy +msgid "Changes may be lost!" +msgstr "Измените изображение группы" + +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Import" +msgstr "Импорт" + +#: editor/editor_node.cpp msgid "FileSystem" msgstr "Ð¤Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑтема" @@ -2230,15 +2142,7 @@ msgstr "Вывод" #: editor/editor_node.cpp msgid "Don't Save" -msgstr "" - -#: editor/editor_node.cpp editor/editor_reimport_dialog.cpp -msgid "Re-Import" -msgstr "Переимпортировать" - -#: editor/editor_node.cpp editor/editor_plugin_settings.cpp -msgid "Update" -msgstr "Обновление" +msgstr "Ðе ÑохранÑть" #: editor/editor_node.cpp msgid "Import Templates From ZIP File" @@ -2265,9 +2169,8 @@ msgid "Open & Run a Script" msgstr "Открыть и запуÑтить Ñкрипт" #: editor/editor_node.cpp -#, fuzzy msgid "New Inherited" -msgstr "ÐÐ¾Ð²Ð°Ñ ÑƒÐ½Ð°ÑÐ»ÐµÐ´Ð¾Ð²Ð°Ð½Ð½Ð°Ñ Ð¡Ñ†ÐµÐ½Ð°.." +msgstr "ÐÐ¾Ð²Ð°Ñ ÑƒÐ½Ð°ÑÐ»ÐµÐ´Ð¾Ð²Ð°Ð½Ð½Ð°Ñ Ð¡Ñ†ÐµÐ½Ð°" #: editor/editor_node.cpp msgid "Load Errors" @@ -2301,11 +2204,29 @@ msgstr "Открыть Ñледующий редактор" msgid "Open the previous Editor" msgstr "Открыть предыдущий редактор" +#: editor/editor_plugin.cpp +#, fuzzy +msgid "Creating Mesh Previews" +msgstr "Создание библиотеки полиÑеток" + +#: editor/editor_plugin.cpp +msgid "Thumbnail.." +msgstr "Миниатюра.." + #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" msgstr "УÑтановленные плагины:" #: editor/editor_plugin_settings.cpp +msgid "Update" +msgstr "Обновление" + +#: editor/editor_plugin_settings.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Version:" +msgstr "ВерÑиÑ:" + +#: editor/editor_plugin_settings.cpp msgid "Author:" msgstr "Ðвтор:" @@ -2357,35 +2278,17 @@ msgstr "СущноÑть" msgid "Frame #:" msgstr "Кадр #:" -#: editor/editor_reimport_dialog.cpp -msgid "Please wait for scan to complete." -msgstr "ПожалуйÑта дождитеÑÑŒ Ð¾ÐºÐ¾Ð½Ñ‡Ð°Ð½Ð¸Ñ ÑканированиÑ." - -#: editor/editor_reimport_dialog.cpp -msgid "Current scene must be saved to re-import." -msgstr "Ð¢ÐµÐºÑƒÑ‰Ð°Ñ Ñцена должна быть Ñохранена Ð´Ð»Ñ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾Ð³Ð¾ импорта." - -#: editor/editor_reimport_dialog.cpp -msgid "Save & Re-Import" -msgstr "Сохранить и переимпортировать" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Importing" -msgstr "Переимпортировать" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Import Changed Resources" -msgstr "Переимпортировать изменённые реÑурÑÑ‹" - #: editor/editor_run_native.cpp msgid "Select device from the list" -msgstr "" +msgstr "Выберите уÑтройÑтво из ÑпиÑка" #: editor/editor_run_native.cpp msgid "" "No runnable export preset found for this platform.\n" "Please add a runnable preset in the export menu." msgstr "" +"Ðе найден рабочий ÑкÑпортер Ð´Ð»Ñ Ñтой платформы.\n" +"ПожалуйÑта, добавьте его в меню ÑкÑпорта." #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." @@ -2488,10 +2391,6 @@ msgid "Importing:" msgstr "ИмпортируетÑÑ:" #: editor/export_template_manager.cpp -msgid "Loading Export Templates" -msgstr "Загрузка шаблонов ÑкÑпорта" - -#: editor/export_template_manager.cpp msgid "Current Version:" msgstr "Ð¢ÐµÐºÑƒÑ‰Ð°Ñ Ð²ÐµÑ€ÑиÑ:" @@ -2526,60 +2425,79 @@ msgid "Cannot navigate to '" msgstr "Ðе удалоÑÑŒ перейти к '" #: editor/filesystem_dock.cpp -#, fuzzy +msgid "View items as a grid of thumbnails" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "View items as a list" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "" "\n" -"Status: Needs Re-Import" -msgstr "Сохранить и переимпортировать" +"Status: Import of file failed. Please fix file and reimport manually." +msgstr "" #: editor/filesystem_dock.cpp -#, fuzzy msgid "" "\n" "Source: " -msgstr "ИÑточник:" +msgstr "" +"\n" +"ИÑточник: " + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Cannot move/rename resources root." +msgstr "Ðе удалоÑÑŒ загрузить/иÑполнить иÑходный шрифт." #: editor/filesystem_dock.cpp -msgid "Same source and destination files, doing nothing." -msgstr "Файл Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¸ иÑходный файлы Ñовпадают, нечего делать." +#, fuzzy +msgid "Cannot move a folder into itself.\n" +msgstr "Ðевозможно импортировать файл поверх негоже:" #: editor/filesystem_dock.cpp -msgid "Target file exists, can't overwrite. Delete first." -msgstr "" +#, fuzzy +msgid "Error moving:\n" +msgstr "Ошибка Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð°:\n" #: editor/filesystem_dock.cpp -msgid "Same source and destination paths, doing nothing." -msgstr "Путь Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¸ иÑходный пути Ñовпадают, нечего делать." +#, fuzzy +msgid "Unable to update dependencies:\n" +msgstr "Сцена '%s' имеет иÑпорченные завиÑимоÑти:" #: editor/filesystem_dock.cpp -msgid "Can't move directories to within themselves." -msgstr "Ðевозможно перемеÑтить каталоги внутрь ÑебÑ." +msgid "No name provided" +msgstr "" #: editor/filesystem_dock.cpp -msgid "Can't rename deps for:\n" +msgid "Provided name contains invalid characters" msgstr "" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Error moving file:\n" -msgstr "Ошибка при загрузке изображениÑ:" +msgid "No name provided." +msgstr "Переименовать или ПеремеÑтить.." #: editor/filesystem_dock.cpp #, fuzzy -msgid "Error moving dir:\n" -msgstr "Ошибка импортированиÑ:" +msgid "Name contains invalid characters." +msgstr "ДопуÑтимые Ñимволы:" #: editor/filesystem_dock.cpp -msgid "Can't operate on '..'" -msgstr "Ðевозможно работать Ñ '..'" +#, fuzzy +msgid "A file or folder with this name already exists." +msgstr "Ðазвание группы уже ÑущеÑтвует!" #: editor/filesystem_dock.cpp -msgid "Pick New Name and Location For:" -msgstr "Выберете новое Ð¸Ð¼Ñ Ð¸ раÑположение длÑ:" +#, fuzzy +msgid "Renaming file:" +msgstr "Переименовать переменную" #: editor/filesystem_dock.cpp -msgid "No files selected!" -msgstr "Файлы не выбраны!" +#, fuzzy +msgid "Renaming folder:" +msgstr "Переименовать узел" #: editor/filesystem_dock.cpp msgid "Expand all" @@ -2590,40 +2508,38 @@ msgid "Collapse all" msgstr "Свернуть вÑе" #: editor/filesystem_dock.cpp -msgid "Show In File Manager" -msgstr "ПроÑмотреть в проводнике" - -#: editor/filesystem_dock.cpp -msgid "Instance" -msgstr "Добавить ÑкземплÑÑ€" +msgid "Copy Path" +msgstr "Копировать путь" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "Редактировать завиÑимоÑти.." +#, fuzzy +msgid "Rename.." +msgstr "Переименовать" #: editor/filesystem_dock.cpp -msgid "View Owners.." -msgstr "ПроÑмотреть владельцев.." +msgid "Move To.." +msgstr "ПеремеÑтить в.." #: editor/filesystem_dock.cpp -msgid "Copy Path" -msgstr "Копировать путь" +#, fuzzy +msgid "New Folder.." +msgstr "Создать папку" #: editor/filesystem_dock.cpp -msgid "Rename or Move.." -msgstr "Переименовать или ПеремеÑтить.." +msgid "Show In File Manager" +msgstr "ПроÑмотреть в проводнике" #: editor/filesystem_dock.cpp -msgid "Move To.." -msgstr "ПеремеÑтить в.." +msgid "Instance" +msgstr "Добавить ÑкземплÑÑ€" #: editor/filesystem_dock.cpp -msgid "Info" -msgstr "ИнформациÑ" +msgid "Edit Dependencies.." +msgstr "Редактировать завиÑимоÑти.." #: editor/filesystem_dock.cpp -msgid "Re-Import.." -msgstr "Переимпортировать.." +msgid "View Owners.." +msgstr "ПроÑмотреть владельцев.." #: editor/filesystem_dock.cpp msgid "Previous Directory" @@ -2650,11 +2566,18 @@ msgid "" "Scanning Files,\n" "Please Wait.." msgstr "" +"Сканирование файлов,\n" +"пожалуйÑта, подождите..." #: editor/filesystem_dock.cpp msgid "Move" msgstr "ПеремеÑтить" +#: editor/filesystem_dock.cpp editor/plugins/animation_tree_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Rename" +msgstr "Переименовать" + #: editor/groups_editor.cpp msgid "Add to Group" msgstr "Добавить в группу" @@ -2664,74 +2587,85 @@ msgid "Remove from Group" msgstr "Удалить из группы" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Import as Single Scene" -msgstr "Импортирование Ñцены.." +msgstr "Импорт в виде единой Ñцены" + +#: editor/import/resource_importer_scene.cpp +#, fuzzy +msgid "Import with Separate Animations" +msgstr "Импортировать Ñ Ð¾Ñ‚Ð´ÐµÐ»ÐµÐ½Ð½Ñ‹Ð¼Ð¸ материалами" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials" -msgstr "" +msgstr "Импортировать Ñ Ð¾Ñ‚Ð´ÐµÐ»ÐµÐ½Ð½Ñ‹Ð¼Ð¸ материалами" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects" -msgstr "" +msgstr "Импортировать Ñ Ñ€Ð°Ð·Ð´ÐµÐ»ÐµÐ½Ð½Ñ‹Ð¼Ð¸ объектами" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects+Materials" -msgstr "" +msgstr "Импортировать Ñ Ñ€Ð°Ð·Ð´ÐµÐ»ÐµÐ½Ð½Ñ‹Ð¼Ð¸ объектами и материалами" #: editor/import/resource_importer_scene.cpp #, fuzzy +msgid "Import with Separate Objects+Animations" +msgstr "Импортировать Ñ Ñ€Ð°Ð·Ð´ÐµÐ»ÐµÐ½Ð½Ñ‹Ð¼Ð¸ объектами и материалами" + +#: editor/import/resource_importer_scene.cpp +#, fuzzy +msgid "Import with Separate Materials+Animations" +msgstr "Импортировать Ñ Ð¾Ñ‚Ð´ÐµÐ»ÐµÐ½Ð½Ñ‹Ð¼Ð¸ материалами" + +#: editor/import/resource_importer_scene.cpp +#, fuzzy +msgid "Import with Separate Objects+Materials+Animations" +msgstr "Импортировать Ñ Ñ€Ð°Ð·Ð´ÐµÐ»ÐµÐ½Ð½Ñ‹Ð¼Ð¸ объектами и материалами" + +#: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes" -msgstr "Импорт 3D Ñцены" +msgstr "Импорт в виде неÑкольких Ñцен" #: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes+Materials" -msgstr "" +msgstr "Импортировать как неÑколько Ñцен и материалов" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Import Scene" msgstr "Импортировать Ñцену" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Importing Scene.." msgstr "Импортирование Ñцены.." #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Running Custom Script.." msgstr "ЗапуÑк пользовательÑкого Ñкрипта.." #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Couldn't load post-import script:" msgstr "Ðе могу загрузить Ñкрипт Ð´Ð»Ñ Ð¿Ð¾ÑÑ‚-импорта:" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Invalid/broken script for post-import (check console):" msgstr "Повреждённый/Ñломанный Ñкрипт Ð´Ð»Ñ Ð¿Ð¾ÑÑ‚-импорта (проверьте конÑоль):" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Error running post-import script:" msgstr "Ошибка запуÑка поÑÑ‚-импорт Ñкрипта:" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Saving.." msgstr "Сохранение.." #: editor/import_dock.cpp msgid "Set as Default for '%s'" -msgstr "" +msgstr "УÑтановить по умолчанию Ð´Ð»Ñ '%s'" #: editor/import_dock.cpp msgid "Clear Default for '%s'" -msgstr "" +msgstr "ОчиÑтить по умолчанию Ð´Ð»Ñ '%s'" #: editor/import_dock.cpp msgid " Files" @@ -2749,579 +2683,6 @@ msgstr "ПредуÑтановка.." msgid "Reimport" msgstr "Переимпортировать" -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "No bit masks to import!" -msgstr "Ðет битовой маÑки Ð´Ð»Ñ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð°!" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path is empty." -msgstr "Конечный путь пуÑÑ‚." - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must be a complete resource path." -msgstr "Конечный путь должен быть полным путём к реÑурÑу." - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must exist." -msgstr "Конечный путь должен ÑущеÑтвовать." - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Save path is empty!" -msgstr "Путь ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð¿ÑƒÑÑ‚!" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Import BitMasks" -msgstr "Импорт битовой маÑки" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s):" -msgstr "ИÑходные текÑтура(Ñ‹):" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Target Path:" -msgstr "Целевой путь:" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Accept" -msgstr "ПринÑть" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Bit Mask" -msgstr "Ð‘Ð¸Ñ‚Ð¾Ð²Ð°Ñ Ð¼Ð°Ñка" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No source font file!" -msgstr "Ðет иÑходного файл шрифта!" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No target font resource!" -msgstr "Ðет целевого реÑурÑа шрифта!" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "" -"Invalid file extension.\n" -"Please use .font." -msgstr "" -"ÐедопуÑтимое раÑширение файла.\n" -"ПожалуйÑта, иÑпользуйте .font." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Can't load/process source font." -msgstr "Ðе удалоÑÑŒ загрузить/иÑполнить иÑходный шрифт." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Couldn't save font." -msgstr "Ðевозможно Ñохранить шрифт." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font:" -msgstr "ИÑходный шрифт:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font Size:" -msgstr "ИÑходный размер шрифта:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Dest Resource:" -msgstr "РеÑÑƒÑ€Ñ Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "The quick brown fox jumps over the lazy dog." -msgstr "" -"Съешь ещё Ñтих мÑгких французÑких булок да выпей чаю. \n" -"The quick brown fox jumps over the lazy dog.\n" -"0123456789`!@#$%^&*()_+-=\\/." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Test:" -msgstr "Проверка:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Options:" -msgstr "Опции:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Font Import" -msgstr "Импортирование шрифта" - -#: 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 "" -"Ðто итак файл шрифта Godot, пожалуйÑта иÑпользуйте BitMapFont вмеÑто него." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Failed opening as BMFont file." -msgstr "Ошибка Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ BitMapFont файла." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error initializing FreeType." -msgstr "Ошибка инициализации FreeType." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Unknown font format." -msgstr "ÐеизвеÑтный формат шрифта." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error loading font." -msgstr "Ошибка загрузки шрифта." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Invalid font size." -msgstr "ÐедопуÑтимый размер шрифта." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Invalid font custom source." -msgstr "Ðеверный пользовательÑкий иÑточник Ð´Ð»Ñ ÑˆÑ€Ð¸Ñ„Ñ‚Ð°." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/plugins/theme_editor_plugin.cpp -msgid "Font" -msgstr "Шрифт" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "No meshes to import!" -msgstr "Ðет полиÑетки Ð´Ð»Ñ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ!" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Single Mesh Import" -msgstr "Импорт одиночной полиÑетки" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Source Mesh(es):" -msgstr "ИÑÑ…Ð¾Ð´Ð½Ð°Ñ Ð¿Ð¾Ð»Ð¸Ñетка(и):" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Mesh" -msgstr "ПолиÑетка" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Surface %d" -msgstr "ПоверхноÑтей %d" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "No samples to import!" -msgstr "Ðет ÑÑмплов Ð´Ð»Ñ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð°!" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Import Audio Samples" -msgstr "Импорт аудио ÑÑмплов" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Source Sample(s):" -msgstr "ИÑходный ÑÑмпл(Ñ‹):" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Audio Sample" -msgstr "Ðудио ÑÑмпл" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "New Clip" -msgstr "ÐÐ¾Ð²Ð°Ñ Ð´Ð¾Ñ€Ð¾Ð¶ÐºÐ°" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Animation Options" -msgstr "Параметры анимации" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Flags" -msgstr "Флаги" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Bake FPS:" -msgstr "FPS:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Optimizer" -msgstr "Оптимизатор" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Linear Error" -msgstr "МакÑ. Ð»Ð¸Ð½ÐµÐ¹Ð½Ð°Ñ Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ð¾Ñть" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angular Error" -msgstr "МакÑ. ÑƒÐ³Ð»Ð¾Ð²Ð°Ñ Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ð¾Ñть" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angle" -msgstr "МакÑ. угол" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Clips" -msgstr "Дорожки" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Start(s)" -msgstr "Ðач(Ñ.)" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "End(s)" -msgstr "Кон(Ñ.)" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Loop" -msgstr "Зациклить" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Filters" -msgstr "Фильтры" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source path is empty." -msgstr "Путь к иÑточнику пуÑÑ‚." - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't load post-import script." -msgstr "Ðе могу загрузить Ñкрипт поÑÑ‚-процеÑÑа." - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Invalid/broken script for post-import." -msgstr "Ðекорректный/поврежденный Ñценарий Ð´Ð»Ñ Ð¿Ð¾ÑÑ‚-импорта." - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Error importing scene." -msgstr "Ошибка Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñцены." - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import 3D Scene" -msgstr "Импорт 3D Ñцены" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source Scene:" -msgstr "ИÑÑ…Ð¾Ð´Ð½Ð°Ñ Ñцена:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Same as Target Scene" -msgstr "Та же, что и у целевой Ñцены" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Shared" -msgstr "Общий" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Target Texture Folder:" -msgstr "Ð¦ÐµÐ»ÐµÐ²Ð°Ñ Ð¿Ð°Ð¿ÐºÐ° текÑтуры:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Post-Process Script:" -msgstr "Скрипт поÑÑ‚-процеÑÑа:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Custom Root Node Type:" -msgstr "ПользовательÑкий тип корневого узла:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Auto" -msgstr "Ðвто" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Root Node Name:" -msgstr "Ð˜Ð¼Ñ ÐºÐ¾Ñ€Ð½ÐµÐ²Ð¾Ð³Ð¾ узла:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "The Following Files are Missing:" -msgstr "ОтÑутÑтвуют Ñледующие файлы:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Anyway" -msgstr "Импортировать в любом Ñлучае" - -#: editor/io_plugins/editor_scene_import_plugin.cpp scene/gui/dialogs.cpp -msgid "Cancel" -msgstr "Отмена" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import & Open" -msgstr "Импортировать и Открыть" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Edited scene has not been saved, open imported scene anyway?" -msgstr "" -"Ð ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€ÑƒÐµÐ¼Ð°Ñ Ñцена не была Ñохранена, открыть импортированную Ñцену в любом " -"Ñлучае?" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Image:" -msgstr "Импорт изображениÑ:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Can't import a file over itself:" -msgstr "Ðевозможно импортировать файл поверх негоже:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't localize path: %s (already local)" -msgstr "Ðевозможно локализовать путь: %s (уже локальный)" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "3D Scene Animation" -msgstr "ÐÐ½Ð¸Ð¼Ð°Ñ†Ð¸Ñ 3D Ñцены" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Uncompressed" -msgstr "ÐеÑжатый" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossless (PNG)" -msgstr "Сжатие без потери качеÑтва (PNG)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossy (WebP)" -msgstr "Сжатие Ñ Ð¿Ð¾Ñ‚ÐµÑ€Ñми (WebP)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress (VRAM)" -msgstr "Сжатие (VRAM)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Format" -msgstr "Формат текÑтуры" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Compression Quality (WebP):" -msgstr "КачеÑтво ÑÐ¶Ð°Ñ‚Ð¸Ñ Ñ‚ÐµÐºÑтур (WebP):" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Options" -msgstr "Параметры текÑтуры" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Please specify some files!" -msgstr "ПожалуйÑта, укажите некоторые файлы!" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "At least one file needed for Atlas." -msgstr "Ð”Ð»Ñ Ð°Ñ‚Ð»Ð°Ñа нужен Ñ…Ð¾Ñ‚Ñ Ð±Ñ‹ 1 файл." - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Error importing:" -msgstr "Ошибка импортированиÑ:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Only one file is required for large texture." -msgstr "Только один файл необходим Ð´Ð»Ñ Ð±Ð¾Ð»ÑŒÑˆÐ¾Ð¹ текÑтуры." - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Max Texture Size:" -msgstr "МакÑимальный размер текÑтуры:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for Atlas (2D)" -msgstr "Импортировать текÑтуры Ð´Ð»Ñ Ð°Ñ‚Ð»Ð°Ñа (2D)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cell Size:" -msgstr "Размер Ñчейки:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Large Texture" -msgstr "Ð‘Ð¾Ð»ÑŒÑˆÐ°Ñ Ñ‚ÐµÐºÑтура" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Textures (2D)" -msgstr "Импорт больших текÑтур (2D)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture" -msgstr "ИÑÑ…Ð¾Ð´Ð½Ð°Ñ Ñ‚ÐµÐºÑтура" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Base Atlas Texture" -msgstr "Ð‘Ð°Ð·Ð¾Ð²Ð°Ñ Ñ‚ÐµÐºÑтура атлаÑа" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s)" -msgstr "ИÑÑ…Ð¾Ð´Ð½Ð°Ñ Ñ‚ÐµÐºÑтура(Ñ‹)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 2D" -msgstr "Импорт текÑтур Ð´Ð»Ñ 2D" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 3D" -msgstr "Импорт текÑтур Ð´Ð»Ñ 3D" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures" -msgstr "Импорт текÑтур" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "2D Texture" -msgstr "2D текÑтура" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "3D Texture" -msgstr "3D текÑтура" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Atlas Texture" -msgstr "ТекÑтура атлаÑа" - -#: 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 "" -"Ð’ÐИМÐÐИЕ: Импортирование 2D текÑтур не обÑзательно. ПроÑто Ñкопируйте png/" -"jpg файлы в папку проекта." - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Crop empty space." -msgstr "Обрезать пуÑтое проÑтранÑтво." - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture" -msgstr "ТекÑтура" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Texture" -msgstr "Импорт большой текÑтуры" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Load Source Image" -msgstr "Загрузка иÑходного изображениÑ" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Slicing" -msgstr "Ðарезка" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Inserting" -msgstr "Ð’Ñтавка" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Saving" -msgstr "Сохранение" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save large texture:" -msgstr "Ðевозможно Ñохранить большую текÑтуру:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Build Atlas For:" -msgstr "ПоÑтроение атлаÑа длÑ:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Loading Image:" -msgstr "Загрузка изображениÑ:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't load image:" -msgstr "Ðевозможно загрузить изображение:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Converting Images" -msgstr "Преобразование изображений" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cropping Images" -msgstr "Обрезка изображений" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Blitting Images" -msgstr "Блитирование Изображений" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save atlas image:" -msgstr "Ðевозможно Ñохранить изображение атлаÑа:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save converted texture:" -msgstr "Ðевозможно Ñохранить конвертированную текÑтуру:" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid source!" -msgstr "Ðеверный иÑточник!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid translation source!" -msgstr "Ðеверный иÑточник перевода!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Column" -msgstr "Колонка" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/script_create_dialog.cpp -msgid "Language" -msgstr "Язык" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No items to import!" -msgstr "Ðет Ñлементов Ð´Ð»Ñ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð°!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No target path!" -msgstr "Ðет конечного пути!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translations" -msgstr "Импорт переводов" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Couldn't import!" -msgstr "Ðе удалоÑÑŒ импортировать!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translation" -msgstr "Импортирование перевода" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Source CSV:" -msgstr "ИÑходный CSV:" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Ignore First Row" -msgstr "Игнорировать первую Ñтроку" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Compress" -msgstr "Сжимать" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Add to Project (project.godot)" -msgstr "Добавить к проекту (project.godot)" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Languages:" -msgstr "Импортировать Ñзыки:" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Translation" -msgstr "Перевод" - #: editor/multi_node_edit.cpp msgid "MultiNode Set" msgstr "Мульти-узловый набор" @@ -3334,6 +2695,49 @@ msgstr "Группы" msgid "Select a Node to edit Signals and Groups." msgstr "Выберите узел Ð´Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñигналов и групп." +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create Poly" +msgstr "Создан полигон" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly" +msgstr "Изменён полигон" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +#, fuzzy +msgid "Insert Point" +msgstr "Ð’Ñтавка" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly (Remove Point)" +msgstr "Удалена точка полигона" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Remove Poly And Point" +msgstr "Удалить полигон и точку" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create a new polygon from scratch." +msgstr "Создать новый полигон Ñ Ð½ÑƒÐ»Ñ." + +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "" +"Edit existing polygon:\n" +"LMB: Move Point.\n" +"Ctrl+LMB: Split Segment.\n" +"RMB: Erase Point." +msgstr "" +"Редактирование полигона:\n" +"ЛКМ: перемеÑтить точку.\n" +"Ctrl+ЛКМ: разделить Ñегмент.\n" +"ПКМ: удалить точку." + #: editor/plugins/animation_player_editor_plugin.cpp msgid "Toggle Autoplay" msgstr "Переключено автовоÑпроизведение" @@ -3490,7 +2894,6 @@ msgstr "Ðазвание анимации:" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp #: editor/script_create_dialog.cpp msgid "Error!" @@ -3518,9 +2921,8 @@ msgid "New name:" msgstr "Ðовое имÑ:" #: editor/plugins/animation_tree_editor_plugin.cpp -#, fuzzy msgid "Edit Filters" -msgstr "Редактировать фильтры узла" +msgstr "Редактировать фильтры" #: editor/plugins/animation_tree_editor_plugin.cpp #: editor/plugins/multimesh_editor_plugin.cpp @@ -3601,10 +3003,6 @@ msgid "Delete Input" msgstr "Удалить вход" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Rename" -msgstr "Переименовать" - -#: editor/plugins/animation_tree_editor_plugin.cpp msgid "Animation tree is valid." msgstr "Дерево анимации дейÑтвительно." @@ -3660,64 +3058,181 @@ msgstr "Редактировать фильтры узла" msgid "Filters.." msgstr "Фильтры.." -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing %d Triangles:" -msgstr "ПарÑинг %d треугольников:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Free" +msgstr "ОÑвободить" -#: editor/plugins/baked_light_baker.cpp -msgid "Triangle #" -msgstr "Треугольник #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Contents:" +msgstr "Содержание:" -#: editor/plugins/baked_light_baker.cpp -msgid "Light Baker Setup:" -msgstr "Параметры Ð·Ð°Ð¿ÐµÐºÐ°Ð½Ð¸Ñ Ñвета:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "View Files" +msgstr "ПроÑмотр Файлов" -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing Geometry" -msgstr "ПарÑинг геометрии" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve hostname:" +msgstr "Ðевозможно определить Ð¸Ð¼Ñ Ñ…Ð¾Ñта:" -#: editor/plugins/baked_light_baker.cpp -msgid "Fixing Lights" -msgstr "ИÑправление Ñвета" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve." +msgstr "Ðе удаетÑÑ Ñ€Ð°Ð·Ñ€ÐµÑˆÐ¸Ñ‚ÑŒ." -#: editor/plugins/baked_light_baker.cpp -msgid "Making BVH" -msgstr "Создание BVH" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connection error, please try again." +msgstr "Ошибка подключениÑ, попробуйте еще раз." -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Light Octree" -msgstr "Создание октодерева Ñвета" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't connect." +msgstr "Ðе удаетÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡Ð¸Ñ‚ÑŒÑÑ." -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Octree Texture" -msgstr "Создание текÑтуры октодерева" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't connect to host:" +msgstr "Ðе удаетÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡Ð¸Ñ‚ÑŒÑÑ Ðº хоÑту:" -#: editor/plugins/baked_light_baker.cpp -msgid "Transfer to Lightmaps:" -msgstr "Передача в карты оÑвещениÑ:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response from host:" +msgstr "Ðет ответа от хоÑта:" -#: editor/plugins/baked_light_baker.cpp -msgid "Allocating Texture #" -msgstr "Выделение текÑтуры #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response." +msgstr "Ðет ответа." -#: editor/plugins/baked_light_baker.cpp -msgid "Baking Triangle #" -msgstr "Запекание треугольников #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, return code:" +msgstr "Ð—Ð°Ð¿Ñ€Ð¾Ñ Ð½Ðµ удалÑÑ, код:" -#: editor/plugins/baked_light_baker.cpp -msgid "Post-Processing Texture #" -msgstr "ПоÑÑ‚-обработка текÑтуры #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Req. Failed." +msgstr "Ð—Ð°Ð¿Ñ€Ð¾Ñ Ð½Ðµ прошел." -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Bake!" -msgstr "Запечь!" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, too many redirects" +msgstr "Ð—Ð°Ð¿Ñ€Ð¾Ñ Ð½Ðµ прошел, Ñлишком много перенаправлений" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Redirect Loop." +msgstr "ЦикличеÑкое перенаправление." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed:" +msgstr "Ðе удалоÑÑŒ:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Bad download hash, assuming file has been tampered with." +msgstr "ÐеÑовпадение Ñ…Ñша загрузки, возможно файл был изменен." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Expected:" +msgstr "ОжидаетÑÑ:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Got:" +msgstr "Получил:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed sha256 hash check" +msgstr "Ðе удалоÑÑŒ проверить sha256 Ñ…Ñш" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Asset Download Error:" +msgstr "Ошибка Загрузки Шаблона:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Fetching:" +msgstr "Извлечение:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Resolving.." +msgstr "ИнициализациÑ..." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connecting.." +msgstr "Подключение.." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Requesting.." +msgstr "Запрашиваю.." -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Reset the lightmap octree baking process (start over)." -msgstr "Ð¡Ð±Ñ€Ð¾Ñ Ð·Ð°Ð¿ÐµÐºÐ°Ð½Ð¸Ñ Ñвета (начать Ñначала)." +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Error making request" +msgstr "Ошибка во Ð²Ñ€ÐµÐ¼Ñ Ð·Ð°Ð¿Ñ€Ð¾Ñа" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Idle" +msgstr "ПроÑтой" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Retry" +msgstr "Повторить" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download Error" +msgstr "Ошибка Загрузки" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download for this asset is already in progress!" +msgstr "Загрузка Ñтого шаблона уже идет!" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "first" +msgstr "первый" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "prev" +msgstr "предыдущий" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "next" +msgstr "далее" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "last" +msgstr "поÑледний" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "All" +msgstr "Ð’Ñе" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Plugins" +msgstr "Плагины" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Sort:" +msgstr "Сортировать:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Reverse" +msgstr "Обратно" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Category:" +msgstr "КатегориÑ:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Site:" +msgstr "Сайт:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Support.." +msgstr "Поддержка.." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Official" +msgstr "Официальные" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Testing" +msgstr "ТеÑтируемые" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Assets ZIP File" +msgstr "ZIP файл аÑÑетов" #: editor/plugins/camera_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp msgid "Preview" msgstr "ПредпроÑмотр" @@ -3760,12 +3275,18 @@ msgid "Edit CanvasItem" msgstr "Редактировать CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Change Anchors" +#, fuzzy +msgid "Anchors only" +msgstr "ПривÑзка" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Change Anchors and Margins" msgstr "Изменить привÑзку" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom (%):" -msgstr "МаÑштаб (%):" +msgid "Change Anchors" +msgstr "Изменить привÑзку" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Paste Pose" @@ -3808,7 +3329,7 @@ msgid "" "(same as Alt+RMB in select mode)." msgstr "" "Показывает ÑпиÑок вÑех объектов нажатой позиции,\n" -"так же как и Alt+ПКМ в режиме выделениÑ." +"(так же как и Alt+ПКМ в режиме выделениÑ)." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Click to change object's rotation pivot." @@ -3819,60 +3340,78 @@ msgid "Pan Mode" msgstr "Режим оÑмотра" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Lock the selected object in place (can't be moved)." -msgstr "ЗафикÑировать выбранный объект." +#, fuzzy +msgid "Toggles snapping" +msgstr "Точка оÑтановки" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Unlock the selected object (can be moved)." -msgstr "Разблокировать выбранный объект." +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "ИÑпользовать привÑзку" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Makes sure the object's children are not selectable." -msgstr "Делает потомков объекта невыбираемыми." +#, fuzzy +msgid "Snapping options" +msgstr "Параметры анимации" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Restores the object's children's ability to be selected." -msgstr "ВоÑÑтанавливает возможноÑть выбора потомков объекта." +#, fuzzy +msgid "Snap to grid" +msgstr "Режим привÑзки:" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp -#: editor/project_settings_editor.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Edit" -msgstr "Редактировать" +msgid "Use Rotation Snap" +msgstr "ИÑпользовать привÑзку вращениÑ" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" -msgstr "ИÑпользовать привÑзку" +#, fuzzy +msgid "Configure Snap..." +msgstr "ÐаÑтроить привÑзку.." #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" -msgstr "Показать Ñетку" +msgid "Snap Relative" +msgstr "ОтноÑÐ¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ð¿Ñ€Ð¸Ð²Ñзка" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Rotation Snap" -msgstr "ИÑпользовать привÑзку вращениÑ" +msgid "Use Pixel Snap" +msgstr "ИÑпользовать попикÑельную привÑзку" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap Relative" -msgstr "ОтноÑÐ¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ð¿Ñ€Ð¸Ð²Ñзка" +msgid "Smart snapping" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "ÐаÑтроить привÑзку.." +#, fuzzy +msgid "Snap to parent" +msgstr "РаÑÑ‚Ñнуть до размера родителей" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Pixel Snap" -msgstr "ИÑпользовать попикÑельную привÑзку" +msgid "Snap to node anchor" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to node sides" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to other nodes" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Lock the selected object in place (can't be moved)." +msgstr "ЗафикÑировать выбранный объект." + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Unlock the selected object (can be moved)." +msgstr "Разблокировать выбранный объект." + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Makes sure the object's children are not selectable." +msgstr "Делает потомков объекта невыбираемыми." #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Skeleton.." -msgstr "Скелет.." +msgid "Restores the object's children's ability to be selected." +msgstr "ВоÑÑтанавливает возможноÑть выбора потомков объекта." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Make Bones" @@ -3900,12 +3439,19 @@ msgid "View" msgstr "Обзор" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Reset" -msgstr "СброÑить маÑштаб" +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "Показать Ñетку" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Set.." -msgstr "УÑтановить маÑштаб.." +#, fuzzy +msgid "Show helpers" +msgstr "Показать коÑти" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show rulers" +msgstr "Показать коÑти" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -3916,8 +3462,9 @@ msgid "Frame Selection" msgstr "Кадрировать выбранное" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Anchor" -msgstr "ПривÑзка" +#, fuzzy +msgid "Layout" +msgstr "Сохранить макет" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Keys" @@ -3940,12 +3487,21 @@ msgid "Clear Pose" msgstr "ОчиÑтить позу" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Set a Value" -msgstr "УÑтановить значение" +msgid "Drag pivot from mouse position" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Set pivot at mouse position" +msgstr "УÑтановить позицию выхода кривой" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Multiply grid step by 2" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap (Pixels):" -msgstr "ПривÑзка (пикÑели):" +msgid "Divide grid step by 2" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Add %s" @@ -3955,23 +3511,28 @@ msgstr "Добавить %s" msgid "Adding %s..." msgstr "Добавление %s..." -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Create Node" msgstr "Создать узел" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Error instancing scene from %s" msgstr "Ошибка Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñцены из %s" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "OK :(" msgstr "Ок :(" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "No parent to instance a child at." msgstr "Ðе выбран родитель Ð´Ð»Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ñ‚Ð¾Ð¼ÐºÐ°." -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "This operation requires a single selected node." msgstr "Ðта Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚ одного выбранного узла." @@ -3987,45 +3548,6 @@ msgstr "" "Drag & drop + Shift : Добавить узел к выделению\n" "Drag & drop + Alt : Изменить тип узла" -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Create Poly" -msgstr "Создан полигон" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly" -msgstr "Изменён полигон" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly (Remove Point)" -msgstr "Удалена точка полигона" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Create a new polygon from scratch." -msgstr "Создать новый полигон Ñ Ð½ÑƒÐ»Ñ." - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -msgid "" -"Edit existing polygon:\n" -"LMB: Move Point.\n" -"Ctrl+LMB: Split Segment.\n" -"RMB: Erase Point." -msgstr "" - #: editor/plugins/collision_polygon_editor_plugin.cpp msgid "Create Poly3D" msgstr "Создан Poly3D" @@ -4035,14 +3557,6 @@ msgid "Set Handle" msgstr "УÑтановить обработчик" #: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Creating Mesh Library" -msgstr "Создание библиотеки полиÑеток" - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Thumbnail.." -msgstr "Миниатюра.." - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Remove item %d?" msgstr "Удалить Ñлемент %d?" @@ -4065,19 +3579,38 @@ msgid "Update from Scene" msgstr "Обновить из Ñцены" #: editor/plugins/curve_editor_plugin.cpp +msgid "Flat0" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Flat1" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp #, fuzzy -msgid "Modify Curve Point" -msgstr "Изменить кривую" +msgid "Ease in" +msgstr "Переход Ð’" #: editor/plugins/curve_editor_plugin.cpp #, fuzzy +msgid "Ease out" +msgstr "Переход ИЗ" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Smoothstep" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Modify Curve Point" +msgstr "Изменить точку кривой" + +#: editor/plugins/curve_editor_plugin.cpp msgid "Modify Curve Tangent" -msgstr "Изменена карта кривой" +msgstr "Изменить каÑательную кривой" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Load Curve Preset" -msgstr "Загрузить заготовку" +msgstr "Загрузить заготовку кривой" #: editor/plugins/curve_editor_plugin.cpp msgid "Add point" @@ -4088,31 +3621,28 @@ msgid "Remove point" msgstr "Удалить точку" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Left linear" -msgstr "Линейный" +msgstr "Левый линейный" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Right linear" -msgstr "Вид Ñправа" +msgstr "Правый линейный" #: editor/plugins/curve_editor_plugin.cpp msgid "Load preset" msgstr "Загрузить заготовку" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Remove Curve Point" -msgstr "Удалить точку пути" +msgstr "Удалить точку кривой" #: editor/plugins/curve_editor_plugin.cpp msgid "Toggle Curve Linear Tangent" -msgstr "" +msgstr "Переключить кривую линейный тангенÑ" #: editor/plugins/curve_editor_plugin.cpp msgid "Hold Shift to edit tangents individually" -msgstr "" +msgstr "Удерживайте Shift, чтобы изменить каÑательные индивидуально" #: editor/plugins/gradient_editor_plugin.cpp msgid "Add/Remove Color Ramp Point" @@ -4140,28 +3670,26 @@ msgid "" "No OccluderPolygon2D resource on this node.\n" "Create and assign one?" msgstr "" +"Ðет OccluderPolygon2D реÑурÑа у Ñтого узла.\n" +"Создать и назначить?" #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "Create Occluder Polygon" msgstr "Создан затенÑющий полигон" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Edit existing polygon:" msgstr "Редактировать ÑущеÑтвующий полигон:" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "LMB: Move Point." msgstr "ЛКМ: Передвинуть точку." #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Ctrl+LMB: Split Segment." msgstr "Ctrl+ЛКМ: Разделить Ñегмент." #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "RMB: Erase Point." msgstr "ПКМ: Удалить точку." @@ -4262,6 +3790,10 @@ msgid "Create Outline" msgstr "Создать контур" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh" +msgstr "ПолиÑетка" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Body" msgstr "Создать вогнутое Ñтатичное тело" @@ -4389,14 +3921,83 @@ msgstr "Случайный размер:" msgid "Populate" msgstr "Заполнить" +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Bake!" +msgstr "Запечь!" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +#, fuzzy +msgid "Bake the navigation mesh.\n" +msgstr "Создать полиÑетку навигации" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +#, fuzzy +msgid "Clear the navigation mesh." +msgstr "Создать полиÑетку навигации" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Setting up Configuration..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Calculating grid size..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Creating heightfield..." +msgstr "Создание октодерева Ñвета" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Marking walkable triangles..." +msgstr "Переводимые Ñтроки.." + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Constructing compact heightfield..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Eroding walkable area..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Partioning..." +msgstr "Предупреждение" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Creating contours..." +msgstr "Создание текÑтуры октодерева" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Creating polymesh..." +msgstr "Создать полиÑетку обводки.." + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Converting to native navigation mesh..." +msgstr "Создать полиÑетку навигации" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Navigation Mesh Generator Setup:" +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Parsing Geometry..." +msgstr "ПарÑинг геометрии" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Done!" +msgstr "" + #: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Create Navigation Polygon" msgstr "Создать Navigation Polygon" -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Remove Poly And Point" -msgstr "Удалить полигон и точку" - #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Clear Emission Mask" msgstr "МаÑка выброÑа очищена" @@ -4432,9 +4033,8 @@ msgstr "МаÑка выброÑа загружена" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "Particles" -msgstr "Вершины" +msgstr "ЧаÑтицы" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generated Point Count:" @@ -4526,14 +4126,12 @@ msgid "Remove Point from Curve" msgstr "Удалена точка Ñ ÐºÑ€Ð¸Ð²Ð¾Ð¹" #: editor/plugins/path_2d_editor_plugin.cpp -#, fuzzy msgid "Remove Out-Control from Curve" -msgstr "Передвинут выходной луч у кривой" +msgstr "Удалить выходной контроль из кривой" #: editor/plugins/path_2d_editor_plugin.cpp -#, fuzzy msgid "Remove In-Control from Curve" -msgstr "Удалена точка Ñ ÐºÑ€Ð¸Ð²Ð¾Ð¹" +msgstr "Удалить входной контроль из кривой" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp @@ -4571,15 +4169,18 @@ msgid "Curve Point #" msgstr "Точка Кривой #" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Point Pos" +#, fuzzy +msgid "Set Curve Point Position" msgstr "УÑтановить позицию точки кривой" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve In Pos" +#, fuzzy +msgid "Set Curve In Position" msgstr "УÑтановить позицию входа кривой" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Out Pos" +#, fuzzy +msgid "Set Curve Out Position" msgstr "УÑтановить позицию выхода кривой" #: editor/plugins/path_editor_plugin.cpp @@ -4591,14 +4192,12 @@ msgid "Remove Path Point" msgstr "Удалить точку пути" #: editor/plugins/path_editor_plugin.cpp -#, fuzzy msgid "Remove Out-Control Point" -msgstr "Передвинут выходной луч у кривой" +msgstr "Удалить выходную контрольную точку" #: editor/plugins/path_editor_plugin.cpp -#, fuzzy msgid "Remove In-Control Point" -msgstr "Передвинут входной луч у кривой" +msgstr "Удалить входную контрольную точку" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Create UV Map" @@ -4641,6 +4240,14 @@ msgid "Scale Polygon" msgstr "МаÑштабировать полигон" #: editor/plugins/polygon_2d_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit" +msgstr "Редактировать" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon->UV" msgstr "Полигон -> UV" @@ -4695,72 +4302,21 @@ msgstr "Загрузить реÑурÑ" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "Ð’Ñтавить" -#: editor/plugins/rich_text_editor_plugin.cpp -msgid "Parse BBCode" -msgstr "ПарÑить BB Код" - -#: editor/plugins/sample_editor_plugin.cpp -msgid "Length:" -msgstr "Длинна:" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Open Sample File(s)" -msgstr "Открыть ÑÑмпл(Ñ‹)" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "ERROR: Couldn't load sample!" -msgstr "ОШИБКÐ: Ðе удалоÑÑŒ загрузить ÑÑмпл!" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Add Sample" -msgstr "Добавить ÑÑмпл" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Rename Sample" -msgstr "Переименовать ÑÑмпл" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Delete Sample" -msgstr "Удалить ÑÑмпл" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "16 Bits" -msgstr "16 Бит" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "8 Bits" -msgstr "8 Бит" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Stereo" -msgstr "Стерео" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Mono" -msgstr "Моно" - -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/script_editor_debugger.cpp -msgid "Format" -msgstr "Формат" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Pitch" -msgstr "Ð’Ñ‹Ñота" - #: editor/plugins/script_editor_plugin.cpp msgid "Clear Recent Files" -msgstr "ОчиÑтить недавние файлы" +msgstr "ОчиÑтить Ðедавние Файлы" #: editor/plugins/script_editor_plugin.cpp msgid "" "Close and save changes?\n" "\"" msgstr "" +"Закрыть и Ñохранить изменениÑ?\n" +"\"" #: editor/plugins/script_editor_plugin.cpp msgid "Error while saving theme" @@ -4788,7 +4344,7 @@ msgstr "Сохранить тему как.." #: editor/plugins/script_editor_plugin.cpp msgid " Class Reference" -msgstr "" +msgstr " СÑылка на КлаÑÑ" #: editor/plugins/script_editor_plugin.cpp msgid "Next script" @@ -4842,10 +4398,13 @@ msgstr "Закрыть документацию" msgid "Close All" msgstr "Закрыть вÑÑ‘" +#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp +msgid "Run" +msgstr "ЗапуÑтить" + #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Toggle Scripts Panel" -msgstr "Добавить в избранное" +msgstr "Переключить панель Ñкриптов" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -4880,21 +4439,8 @@ msgid "Keep Debugger Open" msgstr "ОÑтавить отладчик открытым" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Debug with external editor" -msgstr "Открыть Ñледующий редактор" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Window" -msgstr "Окно" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Left" -msgstr "Двигать влево" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Right" -msgstr "Двигать вправо" +msgstr "Отладка Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ внешнего редактора" #: editor/plugins/script_editor_plugin.cpp msgid "Open Godot online documentation" @@ -4953,7 +4499,7 @@ msgstr "" #: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." -msgstr "" +msgstr "Можно перетащить только реÑÑƒÑ€Ñ Ð¸Ð· файловой ÑиÑтемы." #: editor/plugins/script_text_editor.cpp msgid "Pick Color" @@ -4983,7 +4529,7 @@ msgstr "Вырезать" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Copy" msgstr "Копировать" @@ -5002,9 +4548,8 @@ msgid "Move Down" msgstr "ПеремеÑтить вниз" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Delete Line" -msgstr "Удалить точку" +msgstr "Удалить Ñтроку" #: editor/plugins/script_text_editor.cpp msgid "Indent Left" @@ -5247,10 +4792,6 @@ msgid "View Plane Transform." msgstr "Вид Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð»Ð¾ÑкоÑти." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Scaling to %s%%." -msgstr "МаÑштабирование до %s%%." - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." msgstr "Поворот на %s градуÑов." @@ -5267,10 +4808,6 @@ msgid "Top View." msgstr "Вид Ñверху." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Top" -msgstr "Верх" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "Вид Ñзади." @@ -5371,9 +4908,8 @@ msgid "Audio Listener" msgstr "ПроÑлушиватель звука" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Doppler Enable" -msgstr "Включить" +msgstr "ДоплеровÑкий режим" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Left" @@ -5404,26 +4940,26 @@ msgid "Freelook Speed Modifier" msgstr "Обзор модификатор ÑкороÑти" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "preview" -msgstr "ПредпроÑмотр" +msgstr "предпроÑмотр" #: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" msgstr "XForm диалоговое окно" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Select Mode (Q)\n" -msgstr "Режим выделениÑ" +msgstr "Режим Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ (Q)\n" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "" "Drag: Rotate\n" "Alt+Drag: Move\n" "Alt+RMB: Depth list selection" -msgstr "Alt+ПКМ: СпиÑок выбора глубины" +msgstr "" +"ТÑнуть: Вращение\n" +"Alt+ТÑнуть: Перемещение\n" +"Ðльт+ПКМ: Выбор по ÑпиÑку" #: editor/plugins/spatial_editor_plugin.cpp msgid "Move Mode (W)" @@ -5502,6 +5038,10 @@ msgid "Transform" msgstr "Преобразование" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Configure Snap.." +msgstr "ÐаÑтроить привÑзку.." + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Local Coords" msgstr "Локальные координаты" @@ -5647,6 +5187,10 @@ msgid "Speed (FPS):" msgstr "СкороÑть (FPS):" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Loop" +msgstr "Зациклить" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animation Frames" msgstr "Кадры анимации" @@ -5659,21 +5203,22 @@ msgid "Insert Empty (After)" msgstr "Ð’Ñтавить пуÑтоту (ПоÑле)" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Up" -msgstr "Вверх" +#, fuzzy +msgid "Move (Before)" +msgstr "ПеремеÑтить узел(Ñ‹)" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Down" -msgstr "Вниз" +#, fuzzy +msgid "Move (After)" +msgstr "Двигать влево" #: editor/plugins/style_box_editor_plugin.cpp msgid "StyleBox Preview:" msgstr "StyleBox предпроÑмотр:" #: editor/plugins/texture_region_editor_plugin.cpp -#, fuzzy msgid "Set Region Rect" -msgstr "УÑтановить прÑмоугольник региона" +msgstr "Задать регион" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Snap Mode:" @@ -5733,14 +5278,12 @@ msgid "Remove Item" msgstr "Удалить Ñлемент" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All Items" -msgstr "Удалить Ñлемент клаÑÑа" +msgstr "Удалить вÑе Ñлементы" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All" -msgstr "Удалить" +msgstr "Удалить вÑе" #: editor/plugins/theme_editor_plugin.cpp msgid "Theme" @@ -5828,11 +5371,14 @@ msgid "Style" msgstr "Стиль" #: editor/plugins/theme_editor_plugin.cpp +msgid "Font" +msgstr "Шрифт" + +#: editor/plugins/theme_editor_plugin.cpp msgid "Color" msgstr "Цвет" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Erase Selection" msgstr "ОчиÑтить выделенное" @@ -5841,16 +5387,14 @@ msgid "Paint TileMap" msgstr "РиÑовать карту тайлов" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Line Draw" -msgstr "Линейный" +msgstr "РиÑовать линиÑми" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Rectangle Paint" -msgstr "" +msgstr "ПрÑÐ¼Ð¾ÑƒÐ³Ð¾Ð»ÑŒÐ½Ð°Ñ Ð¿Ð¾ÐºÑ€Ð°Ñка" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Bucket Fill" msgstr "Заливка" @@ -5879,8 +5423,9 @@ msgid "Mirror Y" msgstr "Зеркально по Y" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Bucket" -msgstr "Заливка" +#, fuzzy +msgid "Paint Tile" +msgstr "РиÑовать карту тайлов" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Pick Tile" @@ -5943,6 +5488,11 @@ msgid "Delete preset '%s'?" msgstr "Удалить '%s'?" #: editor/project_export.cpp +#, fuzzy +msgid "Export templates for this platform are missing/corrupted: " +msgstr "Шаблоны ÑкÑпорта Ð´Ð»Ñ Ñтой платформы отÑутÑтвуют:" + +#: editor/project_export.cpp msgid "Presets" msgstr "ПредуÑтановки" @@ -5995,18 +5545,16 @@ msgid "Make Patch" msgstr "Создать латку" #: editor/project_export.cpp -#, fuzzy msgid "Features" -msgstr "ТекÑтура" +msgstr "СвойÑтва" #: editor/project_export.cpp msgid "Custom (comma-separated):" -msgstr "" +msgstr "ПользовательÑкий (через запÑтую):" #: editor/project_export.cpp -#, fuzzy msgid "Feature List:" -msgstr "СпиÑок методов:" +msgstr "СпиÑок ÑвойÑтв:" #: editor/project_export.cpp msgid "Export PCK/Zip" @@ -6017,30 +5565,61 @@ msgid "Export templates for this platform are missing:" msgstr "Шаблоны ÑкÑпорта Ð´Ð»Ñ Ñтой платформы отÑутÑтвуют:" #: editor/project_export.cpp +#, fuzzy +msgid "Export templates for this platform are missing/corrupted:" +msgstr "Шаблоны ÑкÑпорта Ð´Ð»Ñ Ñтой платформы отÑутÑтвуют:" + +#: editor/project_export.cpp msgid "Export With Debug" msgstr "ÐкÑпорт в режиме отладки" #: editor/project_manager.cpp -msgid "Invalid project path, the path must exist!" -msgstr "Ðеверный путь к проекту, путь должен ÑущеÑтвовать!" +#, fuzzy +msgid "The path does not exists." +msgstr "Файл не ÑущеÑтвует." + +#: editor/project_manager.cpp +#, fuzzy +msgid "Please choose a 'project.godot' file." +msgstr "ПожалуйÑта ÑкÑпортируйте вне папки проекта!" #: editor/project_manager.cpp -msgid "Invalid project path, project.godot must not exist." -msgstr "ÐедопуÑтимый путь, project.godot не должен приÑутÑтвовать." +msgid "" +"Your project will be created in a non empty folder (you might want to create " +"a new folder)." +msgstr "" #: editor/project_manager.cpp -msgid "Invalid project path, project.godot must exist." -msgstr "ÐедопуÑтимый путь, project.godot должен приÑутÑтвовать." +msgid "Please choose a folder that does not contain a 'project.godot' file." +msgstr "" #: editor/project_manager.cpp msgid "Imported Project" msgstr "Импортированный проект" #: editor/project_manager.cpp +msgid " " +msgstr "" + +#: editor/project_manager.cpp +msgid "It would be a good idea to name your project." +msgstr "" + +#: editor/project_manager.cpp msgid "Invalid project path (changed anything?)." msgstr "Ðеверный путь к проекту (Что-то изменили?)." #: editor/project_manager.cpp +#, fuzzy +msgid "Couldn't get project.godot in project path." +msgstr "Ðе удалоÑÑŒ Ñоздать project.godot в папке проекта." + +#: editor/project_manager.cpp +#, fuzzy +msgid "Couldn't edit project.godot in project path." +msgstr "Ðе удалоÑÑŒ Ñоздать project.godot в папке проекта." + +#: editor/project_manager.cpp msgid "Couldn't create project.godot in project path." msgstr "Ðе удалоÑÑŒ Ñоздать project.godot в папке проекта." @@ -6049,38 +5628,49 @@ msgid "The following files failed extraction from package:" msgstr "Следующие файлы не удалоÑÑŒ Ð¸Ð·Ð²Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ Ð¸Ð· пакета:" #: editor/project_manager.cpp +#, fuzzy +msgid "Rename Project" +msgstr "БезымÑнный проект" + +#: editor/project_manager.cpp +#, fuzzy +msgid "Couldn't get project.godot in the project path." +msgstr "Ðе удалоÑÑŒ Ñоздать project.godot в папке проекта." + +#: editor/project_manager.cpp +msgid "New Game Project" +msgstr "Ðовый игровой проект" + +#: editor/project_manager.cpp msgid "Import Existing Project" msgstr "Импортировать ÑущеÑтвующий проект" #: editor/project_manager.cpp -msgid "Project Path (Must Exist):" -msgstr "Путь к проекту (должен ÑущеÑтвовать):" +msgid "Create New Project" +msgstr "Создать новый проект" + +#: editor/project_manager.cpp +msgid "Install Project:" +msgstr "УÑтановить проект:" #: editor/project_manager.cpp msgid "Project Name:" msgstr "Ðазвание проекта:" #: editor/project_manager.cpp -msgid "Create New Project" -msgstr "Создать новый проект" +#, fuzzy +msgid "Create folder" +msgstr "Создать папку" #: editor/project_manager.cpp msgid "Project Path:" msgstr "Путь к проекту:" #: editor/project_manager.cpp -msgid "Install Project:" -msgstr "УÑтановить проект:" - -#: editor/project_manager.cpp msgid "Browse" msgstr "Обзор" #: editor/project_manager.cpp -msgid "New Game Project" -msgstr "Ðовый игровой проект" - -#: editor/project_manager.cpp msgid "That's a BINGO!" msgstr "Бинго!" @@ -6089,25 +5679,31 @@ msgid "Unnamed Project" msgstr "БезымÑнный проект" #: editor/project_manager.cpp +#, fuzzy +msgid "Can't open project" +msgstr "Ðе удаетÑÑ Ð·Ð°Ð¿ÑƒÑтить проект" + +#: editor/project_manager.cpp msgid "Are you sure to open more than one project?" msgstr "Ð’Ñ‹ уверены, что хотите открыть более одного проекта?" #: editor/project_manager.cpp -#, fuzzy msgid "" "Can't run project: no main scene defined.\n" "Please edit the project and set the main scene in \"Project Settings\" under " "the \"Application\" category." msgstr "" -"Ðе назначена Ð³Ð»Ð°Ð²Ð½Ð°Ñ Ñцена. Хотите выбрать?\n" -"Позже вы можете указать её в параметре \"main_scene\" раÑположенном\n" -"в \"ÐаÑтройки проекта - ОÑновное - application\"." +"Ðе могу запуÑтить проект: не назначена Ð³Ð»Ð°Ð²Ð½Ð°Ñ Ñцена.\n" +"ПожалуйÑта, отредактируйте проект и уÑтановите главную Ñцену в «ÐаÑтройки " +"проекта» в категории «Приложение»." #: editor/project_manager.cpp msgid "" "Can't run project: Assets need to be imported.\n" "Please edit the project to trigger the initial import." msgstr "" +"Ðе могу запуÑтить проект: аÑÑеты должны быть импортированы.\n" +"ПожалуйÑта, отредактируйте проект, Ñто инициирует начальный импорт." #: editor/project_manager.cpp msgid "Are you sure to run more than one project?" @@ -6130,10 +5726,6 @@ msgid "Project List" msgstr "СпиÑок проектов" #: editor/project_manager.cpp -msgid "Run" -msgstr "ЗапуÑтить" - -#: editor/project_manager.cpp msgid "Scan" msgstr "Сканировать" @@ -6154,9 +5746,8 @@ msgid "Exit" msgstr "Выход" #: editor/project_manager.cpp -#, fuzzy msgid "Can't run project" -msgstr "Ðе удаетÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡Ð¸Ñ‚ÑŒÑÑ." +msgstr "Ðе удаетÑÑ Ð·Ð°Ð¿ÑƒÑтить проект" #: editor/project_settings_editor.cpp msgid "Key " @@ -6191,17 +5782,14 @@ msgid "Add Input Action Event" msgstr "Добавить дейÑтвие" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Meta+" msgstr "Meta+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Shift+" msgstr "Shift+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Alt+" msgstr "Alt+" @@ -6262,7 +5850,7 @@ msgstr "Изменить" msgid "Joypad Axis Index:" msgstr "Ð˜Ð½Ð´ÐµÐºÑ Ð¾Ñи джойÑтика:" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Axis" msgstr "ОÑÑŒ" @@ -6282,57 +5870,64 @@ msgstr "Удалить дейÑтвие" msgid "Add Event" msgstr "Добавить Ñобытие" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Device" msgstr "УÑтройÑтво" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Button" msgstr "Кнопка" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Left Button." msgstr "Ð›ÐµÐ²Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ°." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Right Button." msgstr "ÐŸÑ€Ð°Ð²Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ°." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Middle Button." msgstr "СреднÑÑ ÐºÐ½Ð¾Ð¿ÐºÐ°." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Up." msgstr "КолёÑико вверх." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Down." msgstr "КолёÑико вниз." #: editor/project_settings_editor.cpp -#, fuzzy msgid "Add Global Property" -msgstr "Добавить получающее ÑвойÑтво" +msgstr "Добавить глобальное ÑвойÑтво" #: editor/project_settings_editor.cpp -msgid "Select an setting item first!" -msgstr "" +#, fuzzy +msgid "Select a setting item first!" +msgstr "Сначала выберите Ñлемент наÑтроек!" #: editor/project_settings_editor.cpp -#, fuzzy msgid "No property '" -msgstr "Параметр:" +msgstr "Ðет ÑвойÑтва '" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Setting '" -msgstr "ÐаÑтройки" +msgstr "ÐаÑтройки '" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Delete Item" -msgstr "Удалить вход" +msgstr "Удалить Ñлемент" + +#: editor/project_settings_editor.cpp +#, fuzzy +msgid "Can't contain '/' or ':'" +msgstr "Ðе удаетÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡Ð¸Ñ‚ÑŒÑÑ Ðº хоÑту:" + +#: editor/project_settings_editor.cpp +#, fuzzy +msgid "Already existing" +msgstr "Параметр изменён" #: editor/project_settings_editor.cpp msgid "Error saving settings." @@ -6344,7 +5939,7 @@ msgstr "ÐаÑтройки Ñохранены нормально." #: editor/project_settings_editor.cpp msgid "Override for Feature" -msgstr "" +msgstr "Переопределение СвойÑтва" #: editor/project_settings_editor.cpp msgid "Add Translation" @@ -6388,7 +5983,7 @@ msgstr "Параметр:" #: editor/project_settings_editor.cpp msgid "Override For.." -msgstr "" +msgstr "Переопределить длÑ..." #: editor/project_settings_editor.cpp msgid "Input Map" @@ -6475,7 +6070,6 @@ msgid "Assign" msgstr "Ðазначить" #: editor/property_editor.cpp -#, fuzzy msgid "Select Node" msgstr "Выбрать узел" @@ -6484,17 +6078,26 @@ msgid "New Script" msgstr "Ðовый Ñкрипт" #: editor/property_editor.cpp +#, fuzzy +msgid "Make Unique" +msgstr "Создать коÑти" + +#: editor/property_editor.cpp msgid "Show in File System" msgstr "Показать в файловой ÑиÑтеме" #: editor/property_editor.cpp +#, fuzzy +msgid "Convert To %s" +msgstr "Конвертировать в.." + +#: editor/property_editor.cpp msgid "Error loading file: Not a resource!" msgstr "Ошибка загрузки файла: Ðто не реÑурÑ!" #: editor/property_editor.cpp -#, fuzzy msgid "Selected node is not a Viewport!" -msgstr "Выберите Узел(узлы) Ð´Ð»Ñ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð°" +msgstr "Выбранный узел не Viewport!" #: editor/property_editor.cpp msgid "Pick a Node" @@ -6525,6 +6128,11 @@ msgid "Select Property" msgstr "Выбрать ÑвойÑтво" #: editor/property_selector.cpp +#, fuzzy +msgid "Select Virtual Method" +msgstr "Выбрать метод" + +#: editor/property_selector.cpp msgid "Select Method" msgstr "Выбрать метод" @@ -6554,26 +6162,6 @@ msgstr "Сохранить глобальные преобразованиÑ" msgid "Reparent" msgstr "Переподчинить" -#: editor/resources_dock.cpp -msgid "Create New Resource" -msgstr "Создать новый реÑурÑ" - -#: editor/resources_dock.cpp -msgid "Open Resource" -msgstr "Открыть реÑурÑ" - -#: editor/resources_dock.cpp -msgid "Save Resource" -msgstr "Сохранить реÑурÑ" - -#: editor/resources_dock.cpp -msgid "Resource Tools" -msgstr "ИнÑтрументы реÑурÑов" - -#: editor/resources_dock.cpp -msgid "Make Local" -msgstr "Сделать локальным" - #: editor/run_settings_dialog.cpp msgid "Run Mode:" msgstr "Режим запуÑка:" @@ -6704,14 +6292,6 @@ msgid "Sub-Resources:" msgstr "Вложенные РеÑурÑÑ‹:" #: editor/scene_tree_dock.cpp -msgid "Edit Groups" -msgstr "Редактировать группы" - -#: editor/scene_tree_dock.cpp -msgid "Edit Connections" -msgstr "Редактировать ÑвÑзи" - -#: editor/scene_tree_dock.cpp msgid "Clear Inheritance" msgstr "ОчиÑтить наÑледование" @@ -6772,9 +6352,8 @@ msgstr "" "не ÑущеÑтвует." #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Filter nodes" -msgstr "Фильтры" +msgstr "Ð¤Ð¸Ð»ÑŒÑ‚Ñ€Ð°Ñ†Ð¸Ñ ÑƒÐ·Ð»Ð¾Ð²" #: editor/scene_tree_dock.cpp msgid "Attach a new or existing script for the selected node." @@ -6869,18 +6448,16 @@ msgid "Scene Tree (Nodes):" msgstr "Дерево Ñцены (Узлы):" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "Node Configuration Warning!" -msgstr "Конфигурации узла, предупреждение:" +msgstr "Предупреждение о конфигурации узла!" #: editor/scene_tree_editor.cpp msgid "Select a Node" msgstr "Выбрать узел" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Error loading template '%s'" -msgstr "Ошибка при загрузке изображениÑ:" +msgstr "Ошибка при загрузке шаблона '%s'" #: editor/script_create_dialog.cpp msgid "Error - Could not create script in filesystem." @@ -6907,6 +6484,15 @@ msgid "Invalid base path" msgstr "ÐедопуÑтимый базовый путь" #: editor/script_create_dialog.cpp +msgid "Directory of the same name exists" +msgstr "" + +#: editor/script_create_dialog.cpp +#, fuzzy +msgid "File exists, will be reused" +msgstr "Файл ÑущеÑтвует, перезапиÑать?" + +#: editor/script_create_dialog.cpp msgid "Invalid extension" msgstr "ÐедопуÑтимое раÑширение" @@ -6947,6 +6533,10 @@ msgid "Load existing script file" msgstr "Загрузить ÑущеÑтвующий Ñкрипт" #: editor/script_create_dialog.cpp +msgid "Language" +msgstr "Язык" + +#: editor/script_create_dialog.cpp msgid "Inherits" msgstr "ÐаÑледует" @@ -6987,6 +6577,10 @@ msgid "Function:" msgstr "ФункциÑ:" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Errors" msgstr "Ошибки" @@ -7067,6 +6661,10 @@ msgid "Type" msgstr "Тип" #: editor/script_editor_debugger.cpp +msgid "Format" +msgstr "Формат" + +#: editor/script_editor_debugger.cpp msgid "Usage" msgstr "ИÑпользует" @@ -7100,7 +6698,7 @@ msgstr "Изменён Ñ€Ð°Ð´Ð¸ÑƒÑ Ñвета" #: editor/spatial_editor_gizmos.cpp msgid "Change AudioStreamPlayer3D Emission Angle" -msgstr "" +msgstr "Изменить угол AudioStreamPlayer3D" #: editor/spatial_editor_gizmos.cpp msgid "Change Camera FOV" @@ -7142,12 +6740,30 @@ msgstr "Изменить AABB чаÑтиц" msgid "Change Probe Extents" msgstr "Изменены Probe Extents" +#: modules/gdnative/gd_native_library_editor.cpp +#, fuzzy +msgid "Library" +msgstr "Библиотека полиÑеток.." + +#: modules/gdnative/gd_native_library_editor.cpp +#, fuzzy +msgid "Status" +msgstr "СтатуÑ:" + +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Libraries: " +msgstr "" + +#: modules/gdnative/register_types.cpp +msgid "GDNative" +msgstr "" + #: 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/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "Ðе хватает байтов Ð´Ð»Ñ Ð´ÐµÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð±Ð°Ð¹Ñ‚Ð¾Ð², или неверный формат." @@ -7187,133 +6803,112 @@ msgstr "ÐедопуÑтимый ÑкземплÑÑ€ ÑÐ»Ð¾Ð²Ð°Ñ€Ñ (неверн #: modules/gdscript/gd_functions.cpp msgid "Object can't provide a length." -msgstr "" +msgstr "Объект не может предоÑтавить длину." #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Delete Selection" -msgstr "Удалить выделенное" +msgstr "Удалить выделенную Ñетку" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Duplicate Selection" -msgstr "Дублировать выделенное" +msgstr "Дублировать выделенную Ñетку" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Paint" -msgstr "" - -#: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Snap View" -msgstr "Вид Ñверху" +msgstr "ПривÑзать вид" #: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy msgid "Prev Level (%sDown Wheel)" -msgstr "" +msgstr "Пред уровень (" #: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy msgid "Next Level (%sUp Wheel)" -msgstr "" +msgstr "Следующий уровень (" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Clip Disabled" -msgstr "Отключено" +msgstr "Отключить обрезку" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Clip Above" -msgstr "" +msgstr "Отрезать Ñверху" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Clip Below" -msgstr "" +msgstr "Отрезать Ñнизу" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Edit X Axis" -msgstr "" +msgstr "Редактирование оÑи X" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Edit Y Axis" -msgstr "" +msgstr "Редактирование оÑи Y" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Edit Z Axis" -msgstr "" +msgstr "Редактирование оÑи Z" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Cursor Rotate X" -msgstr "Ctrl: Поворот" +msgstr "КурÑор поворот по X" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Cursor Rotate Y" -msgstr "Ctrl: Поворот" +msgstr "КурÑор поворот по Y" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Cursor Rotate Z" -msgstr "Ctrl: Поворот" +msgstr "КурÑор поворот по Z" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Back Rotate X" -msgstr "" +msgstr "Обратное вращение курÑора по X" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Back Rotate Y" -msgstr "" +msgstr "Обратное вращение курÑора по Y" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Back Rotate Z" -msgstr "" +msgstr "Обратное вращение курÑора по Z" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Clear Rotation" -msgstr "" +msgstr "КурÑор очиÑтить поворот" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Create Area" -msgstr "Создать новый" +msgstr "Создать облаÑть" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Create Exterior Connector" -msgstr "Создать новый проект" +msgstr "Создать внешний коннектор" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Erase Area" -msgstr "Стирать карту тайлов" +msgstr "Стереть облаÑть" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Selection -> Duplicate" -msgstr "Только выделÑть" +msgstr "Выбор -> Дублировать" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Selection -> Clear" -msgstr "Только выделÑть" +msgstr "Выбор -> ОчиÑтить" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Settings" -msgstr "Параметры привÑзки" +msgstr "GridMap Параметры" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Pick Distance:" -msgstr "ÐкземплÑÑ€:" +msgstr "РаÑÑтоÑние выбора:" -#: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy -msgid "Tiles" -msgstr " Файлы" - -#: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Areas" +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "Builds" msgstr "" #: modules/visual_script/visual_script.cpp @@ -7353,29 +6948,24 @@ msgid "Stack overflow with stack depth: " msgstr "Переполнение Ñтека Ñ Ð³Ð»ÑƒÐ±Ð¸Ð½Ð¾Ð¹ Ñтека: " #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Signal Arguments" -msgstr "Редактирование аргументов Ñигнала:" +msgstr "Изменить аргументы Ñигнала" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Argument Type" -msgstr "Изменение типа Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¼Ð°ÑÑива" +msgstr "Изменить тип аргумента" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Argument name" -msgstr "Изменено входное имÑ" +msgstr "Изменить Ð¸Ð¼Ñ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð°" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Set Variable Default Value" -msgstr "Изменено Ñтандартное значение" +msgstr "УÑтановить значение по умолчанию Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð¾Ð¹" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Set Variable Type" -msgstr "Редактировать переменную:" +msgstr "УÑтановить тип переменной" #: modules/visual_script/visual_script_editor.cpp msgid "Functions:" @@ -7426,14 +7016,12 @@ msgid "Add Node" msgstr "Добавить узел" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Remove VisualScript Nodes" -msgstr "Удалить недопуÑтимые ключи" +msgstr "Удалить узлы VisualScript" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Duplicate VisualScript Nodes" -msgstr "Граф(Ñ‹) дублированы" +msgstr "Дублировать узлы VisualScript" #: modules/visual_script/visual_script_editor.cpp msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature." @@ -7480,24 +7068,20 @@ msgid "Add Setter Property" msgstr "Добавить уÑтанавливающее ÑвойÑтво" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Base Type" -msgstr "Изменить тип" +msgstr "Изменить базовый тип" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Move Node(s)" -msgstr "Удалить узел(узлы)" +msgstr "ПеремеÑтить узел(Ñ‹)" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Remove VisualScript Node" -msgstr "Удалён граф шейдера" +msgstr "Удалить узел VisualScript" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Connect Nodes" -msgstr "ПриÑоединить к узлу:" +msgstr "ПриÑоединить узлы" #: modules/visual_script/visual_script_editor.cpp msgid "Condition" @@ -7524,46 +7108,48 @@ msgid "Return" msgstr "Возвращение" #: modules/visual_script/visual_script_editor.cpp +msgid "Call" +msgstr "Вызов" + +#: modules/visual_script/visual_script_editor.cpp msgid "Get" msgstr "Получить" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy +msgid "Script already has function '%s'" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Input Value" -msgstr "Изменено входное имÑ" +msgstr "Изменить входное значение" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Can't copy the function node." -msgstr "Ðевозможно работать Ñ '..'" +msgstr "Ðе удаетÑÑ Ñкопировать узел функцию." #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Clipboard is empty!" -msgstr "Ðет реÑурÑа в буфере обмена!" +msgstr "Буфер обмена пуÑÑ‚!" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Paste VisualScript Nodes" -msgstr "Ð’Ñтавить узлы" +msgstr "Ð’Ñтавить узлы VisualScript" #: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "Удалить функцию" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Edit Variable" -msgstr "Редактировать переменную:" +msgstr "Редактировать переменную" #: modules/visual_script/visual_script_editor.cpp msgid "Remove Variable" msgstr "Удалить переменную" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Edit Signal" -msgstr "Редактирование Ñигнала:" +msgstr "Редактировать Ñигнал" #: modules/visual_script/visual_script_editor.cpp msgid "Remove Signal" @@ -7805,6 +7391,9 @@ msgid "" "by the physics engine when running.\n" "Change the size in children collision shapes instead." msgstr "" +"Ð˜Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° RigidBody2D (в режиме character или rigid) будут " +"переопределены движком при запуÑке.\n" +"Измените размер дочерней формы коллизии." #: scene/2d/remote_transform_2d.cpp msgid "Path property must point to a valid Node2D node to work." @@ -7838,31 +7427,35 @@ msgstr "" #: scene/3d/arvr_nodes.cpp msgid "ARVRCamera must have an ARVROrigin node as its parent" -msgstr "" +msgstr "ARVRCamera должна иметь узел ARVROrigin в качеÑтве предка" #: scene/3d/arvr_nodes.cpp msgid "ARVRController must have an ARVROrigin node as its parent" -msgstr "" +msgstr "ARVRController должен иметь узел ARVROrigin в качеÑтве предка" #: scene/3d/arvr_nodes.cpp msgid "" "The controller id must not be 0 or this controller will not be bound to an " "actual controller" msgstr "" +"Идентификатор контроллера не должен быть равен 0 или Ñтот контроллер не " +"будет привÑзан к фактичеÑкому контроллеру" #: scene/3d/arvr_nodes.cpp msgid "ARVRAnchor must have an ARVROrigin node as its parent" -msgstr "" +msgstr "ARVRAnchor должен иметь узел ARVROrigin в качеÑтве предка" #: scene/3d/arvr_nodes.cpp msgid "" "The anchor id must not be 0 or this anchor will not be bound to an actual " "anchor" msgstr "" +"Идентификатор ÑÐºÐ¾Ñ€Ñ Ð½Ðµ должен быть равен 0 или Ñтот Ñкорь не будет привÑзан " +"к фактичеÑкому Ñкорю" #: scene/3d/arvr_nodes.cpp msgid "ARVROrigin requires an ARVRCamera child node" -msgstr "" +msgstr "ARVROrigin требует дочерний узел ARVRCamera" #: scene/3d/collision_polygon.cpp msgid "" @@ -7871,7 +7464,7 @@ msgid "" "StaticBody, RigidBody, KinematicBody, etc. to give them a shape." msgstr "" "CollisionPolygon Ñлужит только Ð´Ð»Ñ Ð¾Ð±ÐµÑÐ¿ÐµÑ‡ÐµÐ½Ð¸Ñ Ñтолкновений фигурам типа " -"CollisionObject. ПожалуйÑта иÑпользовать его только в качеÑтве дочернего Ð´Ð»Ñ " +"CollisionObject. ПожалуйÑта, иÑпользуйте его только в качеÑтве дочернего Ð´Ð»Ñ " "Area, StaticBody, RigidBody, KinematicBody и др. чтобы придать им форму." #: scene/3d/collision_polygon.cpp @@ -7920,6 +7513,9 @@ msgid "" "the physics engine when running.\n" "Change the size in children collision shapes instead." msgstr "" +"Ð˜Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° RigidBody (в режиме character или rigid) будут " +"переопределены движком при запуÑке.\n" +"Измените размер дочерней формы коллизии." #: scene/3d/remote_transform.cpp msgid "Path property must point to a valid Spatial node to work." @@ -7940,16 +7536,25 @@ msgstr "" "Чтобы AnimatedSprite3D отображал кадры, пожалуйÑта уÑтановите или Ñоздайте " "реÑÑƒÑ€Ñ SpriteFrames в параметре 'Frames'." +#: scene/3d/vehicle_body.cpp +msgid "" +"VehicleWheel serves to provide a wheel system to a VehicleBody. Please use " +"it as a child of a VehicleBody." +msgstr "" + #: scene/gui/color_picker.cpp -#, fuzzy msgid "Raw Mode" -msgstr "Режим оÑмотра" +msgstr "RAW режим" #: scene/gui/color_picker.cpp msgid "Add current color as a preset" msgstr "Добавить текущий цвет как преÑет" #: scene/gui/dialogs.cpp +msgid "Cancel" +msgstr "Отмена" + +#: scene/gui/dialogs.cpp msgid "Alert!" msgstr "Внимание!" @@ -7957,10 +7562,6 @@ msgstr "Внимание!" msgid "Please Confirm..." msgstr "Подтверждение..." -#: scene/gui/input_action.cpp -msgid "Ctrl+" -msgstr "Ctrl+" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -8003,6 +7604,633 @@ msgstr "" "Ñделайте его целью рендеринга и передайте его внутренние текÑтуры какому-то " "другому узлу Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ." +#: scene/resources/dynamic_font.cpp +msgid "Error initializing FreeType." +msgstr "Ошибка инициализации FreeType." + +#: scene/resources/dynamic_font.cpp +msgid "Unknown font format." +msgstr "ÐеизвеÑтный формат шрифта." + +#: scene/resources/dynamic_font.cpp +msgid "Error loading font." +msgstr "Ошибка загрузки шрифта." + +#: scene/resources/dynamic_font.cpp +msgid "Invalid font size." +msgstr "ÐедопуÑтимый размер шрифта." + +#~ msgid "Method List For '%s':" +#~ msgstr "СпиÑок методов Ð´Ð»Ñ '%s':" + +#~ msgid "Arguments:" +#~ msgstr "Ðргументы:" + +#~ msgid "Return:" +#~ msgstr "Возвращение:" + +#~ msgid "Added:" +#~ msgstr "Добавлено:" + +#~ msgid "Removed:" +#~ msgstr "Удалено:" + +#~ msgid "Error saving atlas:" +#~ msgstr "Ошибка ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð°Ñ‚Ð»Ð°Ñа:" + +#~ msgid "Could not save atlas subtexture:" +#~ msgstr "Ðевозможно Ñохранить текÑтуру атлаÑа:" + +#~ msgid "Exporting for %s" +#~ msgstr "ÐкÑпортирование Ð´Ð»Ñ %s" + +#~ msgid "Setting Up.." +#~ msgstr "ÐаÑтройка.." + +#~ msgid "Error loading scene." +#~ msgstr "Ошибка загрузки Ñцены." + +#~ msgid "Re-Import" +#~ msgstr "Переимпортировать" + +#~ msgid "Please wait for scan to complete." +#~ msgstr "ПожалуйÑта дождитеÑÑŒ Ð¾ÐºÐ¾Ð½Ñ‡Ð°Ð½Ð¸Ñ ÑканированиÑ." + +#~ msgid "Current scene must be saved to re-import." +#~ msgstr "Ð¢ÐµÐºÑƒÑ‰Ð°Ñ Ñцена должна быть Ñохранена Ð´Ð»Ñ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾Ð³Ð¾ импорта." + +#~ msgid "Save & Re-Import" +#~ msgstr "Сохранить и переимпортировать" + +#~ msgid "Re-Importing" +#~ msgstr "Переимпортировать" + +#~ msgid "Re-Import Changed Resources" +#~ msgstr "Переимпортировать изменённые реÑурÑÑ‹" + +#~ msgid "Loading Export Templates" +#~ msgstr "Загрузка шаблонов ÑкÑпорта" + +#~ msgid "" +#~ "\n" +#~ "Status: Needs Re-Import" +#~ msgstr "" +#~ "\n" +#~ "СтатуÑ: требуетÑÑ Ñ€Ðµ-импорт" + +#~ msgid "Same source and destination files, doing nothing." +#~ msgstr "Файл Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¸ иÑходный файлы Ñовпадают, нечего делать." + +#~ msgid "Target file exists, can't overwrite. Delete first." +#~ msgstr "Конечный файл ÑущеÑтвует, Ð½ÐµÐ»ÑŒÐ·Ñ Ð¿ÐµÑ€ÐµÐ·Ð°Ð¿Ð¸Ñать. Сначала удалите." + +#~ msgid "Same source and destination paths, doing nothing." +#~ msgstr "Путь Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¸ иÑходный пути Ñовпадают, нечего делать." + +#~ msgid "Can't move directories to within themselves." +#~ msgstr "Ðевозможно перемеÑтить каталоги внутрь ÑебÑ." + +#~ msgid "Can't rename deps for:\n" +#~ msgstr "Ðе могу переименовать завиÑимоÑти длÑ:\n" + +#~ msgid "Error moving file:\n" +#~ msgstr "Ошибка Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð°:\n" + +#~ msgid "Pick New Name and Location For:" +#~ msgstr "Выберете новое Ð¸Ð¼Ñ Ð¸ раÑположение длÑ:" + +#~ msgid "No files selected!" +#~ msgstr "Файлы не выбраны!" + +#~ msgid "Info" +#~ msgstr "ИнформациÑ" + +#~ msgid "Re-Import.." +#~ msgstr "Переимпортировать.." + +#~ msgid "No bit masks to import!" +#~ msgstr "Ðет битовой маÑки Ð´Ð»Ñ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð°!" + +#~ msgid "Target path is empty." +#~ msgstr "Конечный путь пуÑÑ‚." + +#~ msgid "Target path must be a complete resource path." +#~ msgstr "Конечный путь должен быть полным путём к реÑурÑу." + +#~ msgid "Target path must exist." +#~ msgstr "Конечный путь должен ÑущеÑтвовать." + +#~ msgid "Save path is empty!" +#~ msgstr "Путь ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð¿ÑƒÑÑ‚!" + +#~ msgid "Import BitMasks" +#~ msgstr "Импорт битовой маÑки" + +#~ msgid "Source Texture(s):" +#~ msgstr "ИÑходные текÑтура(Ñ‹):" + +#~ msgid "Target Path:" +#~ msgstr "Целевой путь:" + +#~ msgid "Accept" +#~ msgstr "ПринÑть" + +#~ msgid "Bit Mask" +#~ msgstr "Ð‘Ð¸Ñ‚Ð¾Ð²Ð°Ñ Ð¼Ð°Ñка" + +#~ msgid "No source font file!" +#~ msgstr "Ðет иÑходного файл шрифта!" + +#~ msgid "No target font resource!" +#~ msgstr "Ðет целевого реÑурÑа шрифта!" + +#~ msgid "" +#~ "Invalid file extension.\n" +#~ "Please use .font." +#~ msgstr "" +#~ "ÐедопуÑтимое раÑширение файла.\n" +#~ "ПожалуйÑта, иÑпользуйте .font." + +#~ msgid "Couldn't save font." +#~ msgstr "Ðевозможно Ñохранить шрифт." + +#~ msgid "Source Font:" +#~ msgstr "ИÑходный шрифт:" + +#~ msgid "Source Font Size:" +#~ msgstr "ИÑходный размер шрифта:" + +#~ msgid "Dest Resource:" +#~ msgstr "РеÑÑƒÑ€Ñ Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ:" + +#~ msgid "The quick brown fox jumps over the lazy dog." +#~ msgstr "" +#~ "Съешь ещё Ñтих мÑгких французÑких булок да выпей чаю. \n" +#~ "The quick brown fox jumps over the lazy dog.\n" +#~ "0123456789`!@#$%^&*()_+-=\\/." + +#~ msgid "Test:" +#~ msgstr "Проверка:" + +#~ msgid "Options:" +#~ msgstr "Опции:" + +#~ msgid "Font Import" +#~ msgstr "Импортирование шрифта" + +#~ msgid "" +#~ "This file is already a Godot font file, please supply a BMFont type file " +#~ "instead." +#~ msgstr "" +#~ "Ðто итак файл шрифта Godot, пожалуйÑта иÑпользуйте BitMapFont вмеÑто него." + +#~ msgid "Failed opening as BMFont file." +#~ msgstr "Ошибка Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ BitMapFont файла." + +#~ msgid "Invalid font custom source." +#~ msgstr "Ðеверный пользовательÑкий иÑточник Ð´Ð»Ñ ÑˆÑ€Ð¸Ñ„Ñ‚Ð°." + +#~ msgid "No meshes to import!" +#~ msgstr "Ðет полиÑетки Ð´Ð»Ñ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ!" + +#~ msgid "Single Mesh Import" +#~ msgstr "Импорт одиночной полиÑетки" + +#~ msgid "Source Mesh(es):" +#~ msgstr "ИÑÑ…Ð¾Ð´Ð½Ð°Ñ Ð¿Ð¾Ð»Ð¸Ñетка(и):" + +#~ msgid "Surface %d" +#~ msgstr "ПоверхноÑтей %d" + +#~ msgid "No samples to import!" +#~ msgstr "Ðет ÑÑмплов Ð´Ð»Ñ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð°!" + +#~ msgid "Import Audio Samples" +#~ msgstr "Импорт аудио ÑÑмплов" + +#~ msgid "Source Sample(s):" +#~ msgstr "ИÑходный ÑÑмпл(Ñ‹):" + +#~ msgid "Audio Sample" +#~ msgstr "Ðудио ÑÑмпл" + +#~ msgid "New Clip" +#~ msgstr "ÐÐ¾Ð²Ð°Ñ Ð´Ð¾Ñ€Ð¾Ð¶ÐºÐ°" + +#~ msgid "Flags" +#~ msgstr "Флаги" + +#~ msgid "Bake FPS:" +#~ msgstr "FPS:" + +#~ msgid "Optimizer" +#~ msgstr "Оптимизатор" + +#~ msgid "Max Linear Error" +#~ msgstr "МакÑ. Ð»Ð¸Ð½ÐµÐ¹Ð½Ð°Ñ Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ð¾Ñть" + +#~ msgid "Max Angular Error" +#~ msgstr "МакÑ. ÑƒÐ³Ð»Ð¾Ð²Ð°Ñ Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ð¾Ñть" + +#~ msgid "Max Angle" +#~ msgstr "МакÑ. угол" + +#~ msgid "Clips" +#~ msgstr "Дорожки" + +#~ msgid "Start(s)" +#~ msgstr "Ðач(Ñ.)" + +#~ msgid "End(s)" +#~ msgstr "Кон(Ñ.)" + +#~ msgid "Filters" +#~ msgstr "Фильтры" + +#~ msgid "Source path is empty." +#~ msgstr "Путь к иÑточнику пуÑÑ‚." + +#~ msgid "Couldn't load post-import script." +#~ msgstr "Ðе могу загрузить Ñкрипт поÑÑ‚-процеÑÑа." + +#~ msgid "Invalid/broken script for post-import." +#~ msgstr "Ðекорректный/поврежденный Ñценарий Ð´Ð»Ñ Ð¿Ð¾ÑÑ‚-импорта." + +#~ msgid "Error importing scene." +#~ msgstr "Ошибка Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñцены." + +#~ msgid "Import 3D Scene" +#~ msgstr "Импорт 3D Ñцены" + +#~ msgid "Source Scene:" +#~ msgstr "ИÑÑ…Ð¾Ð´Ð½Ð°Ñ Ñцена:" + +#~ msgid "Same as Target Scene" +#~ msgstr "Та же, что и у целевой Ñцены" + +#~ msgid "Shared" +#~ msgstr "Общий" + +#~ msgid "Target Texture Folder:" +#~ msgstr "Ð¦ÐµÐ»ÐµÐ²Ð°Ñ Ð¿Ð°Ð¿ÐºÐ° текÑтуры:" + +#~ msgid "Post-Process Script:" +#~ msgstr "Скрипт поÑÑ‚-процеÑÑа:" + +#~ msgid "Custom Root Node Type:" +#~ msgstr "ПользовательÑкий тип корневого узла:" + +#~ msgid "Auto" +#~ msgstr "Ðвто" + +#~ msgid "Root Node Name:" +#~ msgstr "Ð˜Ð¼Ñ ÐºÐ¾Ñ€Ð½ÐµÐ²Ð¾Ð³Ð¾ узла:" + +#~ msgid "The Following Files are Missing:" +#~ msgstr "ОтÑутÑтвуют Ñледующие файлы:" + +#~ msgid "Import Anyway" +#~ msgstr "Импортировать в любом Ñлучае" + +#~ msgid "Import & Open" +#~ msgstr "Импортировать и Открыть" + +#~ msgid "Edited scene has not been saved, open imported scene anyway?" +#~ msgstr "" +#~ "Ð ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€ÑƒÐµÐ¼Ð°Ñ Ñцена не была Ñохранена, открыть импортированную Ñцену в " +#~ "любом Ñлучае?" + +#~ msgid "Import Image:" +#~ msgstr "Импорт изображениÑ:" + +#~ msgid "Couldn't localize path: %s (already local)" +#~ msgstr "Ðевозможно локализовать путь: %s (уже локальный)" + +#~ msgid "3D Scene Animation" +#~ msgstr "ÐÐ½Ð¸Ð¼Ð°Ñ†Ð¸Ñ 3D Ñцены" + +#~ msgid "Uncompressed" +#~ msgstr "ÐеÑжатый" + +#~ msgid "Compress Lossless (PNG)" +#~ msgstr "Сжатие без потери качеÑтва (PNG)" + +#~ msgid "Compress Lossy (WebP)" +#~ msgstr "Сжатие Ñ Ð¿Ð¾Ñ‚ÐµÑ€Ñми (WebP)" + +#~ msgid "Compress (VRAM)" +#~ msgstr "Сжатие (VRAM)" + +#~ msgid "Texture Format" +#~ msgstr "Формат текÑтуры" + +#~ msgid "Texture Compression Quality (WebP):" +#~ msgstr "КачеÑтво ÑÐ¶Ð°Ñ‚Ð¸Ñ Ñ‚ÐµÐºÑтур (WebP):" + +#~ msgid "Texture Options" +#~ msgstr "Параметры текÑтуры" + +#~ msgid "Please specify some files!" +#~ msgstr "ПожалуйÑта, укажите некоторые файлы!" + +#~ msgid "At least one file needed for Atlas." +#~ msgstr "Ð”Ð»Ñ Ð°Ñ‚Ð»Ð°Ñа нужен Ñ…Ð¾Ñ‚Ñ Ð±Ñ‹ 1 файл." + +#~ msgid "Error importing:" +#~ msgstr "Ошибка импортированиÑ:" + +#~ msgid "Only one file is required for large texture." +#~ msgstr "Только один файл необходим Ð´Ð»Ñ Ð±Ð¾Ð»ÑŒÑˆÐ¾Ð¹ текÑтуры." + +#~ msgid "Max Texture Size:" +#~ msgstr "МакÑимальный размер текÑтуры:" + +#~ msgid "Import Textures for Atlas (2D)" +#~ msgstr "Импортировать текÑтуры Ð´Ð»Ñ Ð°Ñ‚Ð»Ð°Ñа (2D)" + +#~ msgid "Cell Size:" +#~ msgstr "Размер Ñчейки:" + +#~ msgid "Large Texture" +#~ msgstr "Ð‘Ð¾Ð»ÑŒÑˆÐ°Ñ Ñ‚ÐµÐºÑтура" + +#~ msgid "Import Large Textures (2D)" +#~ msgstr "Импорт больших текÑтур (2D)" + +#~ msgid "Source Texture" +#~ msgstr "ИÑÑ…Ð¾Ð´Ð½Ð°Ñ Ñ‚ÐµÐºÑтура" + +#~ msgid "Base Atlas Texture" +#~ msgstr "Ð‘Ð°Ð·Ð¾Ð²Ð°Ñ Ñ‚ÐµÐºÑтура атлаÑа" + +#~ msgid "Source Texture(s)" +#~ msgstr "ИÑÑ…Ð¾Ð´Ð½Ð°Ñ Ñ‚ÐµÐºÑтура(Ñ‹)" + +#~ msgid "Import Textures for 2D" +#~ msgstr "Импорт текÑтур Ð´Ð»Ñ 2D" + +#~ msgid "Import Textures for 3D" +#~ msgstr "Импорт текÑтур Ð´Ð»Ñ 3D" + +#~ msgid "Import Textures" +#~ msgstr "Импорт текÑтур" + +#~ msgid "2D Texture" +#~ msgstr "2D текÑтура" + +#~ msgid "3D Texture" +#~ msgstr "3D текÑтура" + +#~ msgid "Atlas Texture" +#~ msgstr "ТекÑтура атлаÑа" + +#~ msgid "" +#~ "NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files " +#~ "to the project." +#~ msgstr "" +#~ "Ð’ÐИМÐÐИЕ: Импортирование 2D текÑтур не обÑзательно. ПроÑто Ñкопируйте png/" +#~ "jpg файлы в папку проекта." + +#~ msgid "Crop empty space." +#~ msgstr "Обрезать пуÑтое проÑтранÑтво." + +#~ msgid "Texture" +#~ msgstr "ТекÑтура" + +#~ msgid "Import Large Texture" +#~ msgstr "Импорт большой текÑтуры" + +#~ msgid "Load Source Image" +#~ msgstr "Загрузка иÑходного изображениÑ" + +#~ msgid "Slicing" +#~ msgstr "Ðарезка" + +#~ msgid "Saving" +#~ msgstr "Сохранение" + +#~ msgid "Couldn't save large texture:" +#~ msgstr "Ðевозможно Ñохранить большую текÑтуру:" + +#~ msgid "Build Atlas For:" +#~ msgstr "ПоÑтроение атлаÑа длÑ:" + +#~ msgid "Loading Image:" +#~ msgstr "Загрузка изображениÑ:" + +#~ msgid "Couldn't load image:" +#~ msgstr "Ðевозможно загрузить изображение:" + +#~ msgid "Converting Images" +#~ msgstr "Преобразование изображений" + +#~ msgid "Cropping Images" +#~ msgstr "Обрезка изображений" + +#~ msgid "Blitting Images" +#~ msgstr "Блитирование Изображений" + +#~ msgid "Couldn't save atlas image:" +#~ msgstr "Ðевозможно Ñохранить изображение атлаÑа:" + +#~ msgid "Couldn't save converted texture:" +#~ msgstr "Ðевозможно Ñохранить конвертированную текÑтуру:" + +#~ msgid "Invalid source!" +#~ msgstr "Ðеверный иÑточник!" + +#~ msgid "Invalid translation source!" +#~ msgstr "Ðеверный иÑточник перевода!" + +#~ msgid "Column" +#~ msgstr "Колонка" + +#~ msgid "No items to import!" +#~ msgstr "Ðет Ñлементов Ð´Ð»Ñ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð°!" + +#~ msgid "No target path!" +#~ msgstr "Ðет конечного пути!" + +#~ msgid "Import Translations" +#~ msgstr "Импорт переводов" + +#~ msgid "Couldn't import!" +#~ msgstr "Ðе удалоÑÑŒ импортировать!" + +#~ msgid "Import Translation" +#~ msgstr "Импортирование перевода" + +#~ msgid "Source CSV:" +#~ msgstr "ИÑходный CSV:" + +#~ msgid "Ignore First Row" +#~ msgstr "Игнорировать первую Ñтроку" + +#~ msgid "Compress" +#~ msgstr "Сжимать" + +#~ msgid "Add to Project (project.godot)" +#~ msgstr "Добавить к проекту (project.godot)" + +#~ msgid "Import Languages:" +#~ msgstr "Импортировать Ñзыки:" + +#~ msgid "Translation" +#~ msgstr "Перевод" + +#~ msgid "Parsing %d Triangles:" +#~ msgstr "ПарÑинг %d треугольников:" + +#~ msgid "Triangle #" +#~ msgstr "Треугольник #" + +#~ msgid "Light Baker Setup:" +#~ msgstr "Параметры Ð·Ð°Ð¿ÐµÐºÐ°Ð½Ð¸Ñ Ñвета:" + +#~ msgid "Fixing Lights" +#~ msgstr "ИÑправление Ñвета" + +#~ msgid "Making BVH" +#~ msgstr "Создание BVH" + +#~ msgid "Transfer to Lightmaps:" +#~ msgstr "Передача в карты оÑвещениÑ:" + +#~ msgid "Allocating Texture #" +#~ msgstr "Выделение текÑтуры #" + +#~ msgid "Baking Triangle #" +#~ msgstr "Запекание треугольников #" + +#~ msgid "Post-Processing Texture #" +#~ msgstr "ПоÑÑ‚-обработка текÑтуры #" + +#~ msgid "Reset the lightmap octree baking process (start over)." +#~ msgstr "Ð¡Ð±Ñ€Ð¾Ñ Ð·Ð°Ð¿ÐµÐºÐ°Ð½Ð¸Ñ Ñвета (начать Ñначала)." + +#~ msgid "Zoom (%):" +#~ msgstr "МаÑштаб (%):" + +#~ msgid "Skeleton.." +#~ msgstr "Скелет.." + +#~ msgid "Zoom Reset" +#~ msgstr "СброÑить маÑштаб" + +#~ msgid "Zoom Set.." +#~ msgstr "УÑтановить маÑштаб.." + +#~ msgid "Set a Value" +#~ msgstr "УÑтановить значение" + +#~ msgid "Snap (Pixels):" +#~ msgstr "ПривÑзка (пикÑели):" + +#~ msgid "Parse BBCode" +#~ msgstr "ПарÑить BB Код" + +#~ msgid "Length:" +#~ msgstr "Длинна:" + +#~ msgid "Open Sample File(s)" +#~ msgstr "Открыть ÑÑмпл(Ñ‹)" + +#~ msgid "ERROR: Couldn't load sample!" +#~ msgstr "ОШИБКÐ: Ðе удалоÑÑŒ загрузить ÑÑмпл!" + +#~ msgid "Add Sample" +#~ msgstr "Добавить ÑÑмпл" + +#~ msgid "Rename Sample" +#~ msgstr "Переименовать ÑÑмпл" + +#~ msgid "Delete Sample" +#~ msgstr "Удалить ÑÑмпл" + +#~ msgid "16 Bits" +#~ msgstr "16 Бит" + +#~ msgid "8 Bits" +#~ msgstr "8 Бит" + +#~ msgid "Stereo" +#~ msgstr "Стерео" + +#~ msgid "Mono" +#~ msgstr "Моно" + +#~ msgid "Pitch" +#~ msgstr "Ð’Ñ‹Ñота" + +#~ msgid "Window" +#~ msgstr "Окно" + +#~ msgid "Move Right" +#~ msgstr "Двигать вправо" + +#~ msgid "Scaling to %s%%." +#~ msgstr "МаÑштабирование до %s%%." + +#~ msgid "Up" +#~ msgstr "Вверх" + +#~ msgid "Down" +#~ msgstr "Вниз" + +#~ msgid "Bucket" +#~ msgstr "Заливка" + +#~ msgid "Invalid project path, the path must exist!" +#~ msgstr "Ðеверный путь к проекту, путь должен ÑущеÑтвовать!" + +#~ msgid "Invalid project path, project.godot must not exist." +#~ msgstr "ÐедопуÑтимый путь, project.godot не должен приÑутÑтвовать." + +#~ msgid "Invalid project path, project.godot must exist." +#~ msgstr "ÐедопуÑтимый путь, project.godot должен приÑутÑтвовать." + +#~ msgid "Project Path (Must Exist):" +#~ msgstr "Путь к проекту (должен ÑущеÑтвовать):" + +#~ msgid "Create New Resource" +#~ msgstr "Создать новый реÑурÑ" + +#~ msgid "Open Resource" +#~ msgstr "Открыть реÑурÑ" + +#~ msgid "Save Resource" +#~ msgstr "Сохранить реÑурÑ" + +#~ msgid "Resource Tools" +#~ msgstr "ИнÑтрументы реÑурÑов" + +#~ msgid "Make Local" +#~ msgstr "Сделать локальным" + +#~ msgid "Edit Groups" +#~ msgstr "Редактировать группы" + +#~ msgid "Edit Connections" +#~ msgstr "Редактировать ÑвÑзи" + +#~ msgid "GridMap Paint" +#~ msgstr "РиÑование Ñетки" + +#~ msgid "Tiles" +#~ msgstr "Тайлы" + +#~ msgid "Areas" +#~ msgstr "ОблаÑти" + +#~ msgid "Ctrl+" +#~ msgstr "Ctrl+" + +#~ msgid "Down Wheel)" +#~ msgstr "КолеÑо мыши вниз" + +#~ msgid "Up Wheel)" +#~ msgstr "КолеÑо мыши вверх" + #~ msgid "Close scene? (Unsaved changes will be lost)" #~ msgstr "Закрыть Ñцену? (ÐеÑохранённые Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð±ÑƒÐ´ÑƒÑ‚ потерÑны.)" @@ -8016,9 +8244,6 @@ msgstr "" #~ msgid "Close Goto Prev. Scene" #~ msgstr "Закрыть и перейти к предыдущей Ñцене" -#~ msgid "Expand to Parent" -#~ msgstr "РаÑÑ‚Ñнуть до размера родителей" - #~ msgid "Del" #~ msgstr "Удалить" @@ -8182,18 +8407,12 @@ msgstr "" #~ msgid "Save Translatable Strings" #~ msgstr "Сохранить переводимые Ñтроки" -#~ msgid "Translatable Strings.." -#~ msgstr "Переводимые Ñтроки.." - #~ msgid "Install Export Templates" #~ msgstr "УÑтановить шаблоны ÑкÑпорта" #~ msgid "Edit Script Options" #~ msgstr "Редактировать параметры Ñкрипта" -#~ msgid "Please export outside the project folder!" -#~ msgstr "ПожалуйÑта ÑкÑпортируйте вне папки проекта!" - #~ msgid "Error exporting project!" #~ msgstr "Ошибка ÑкÑÐ¿Ð¾Ñ€Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð°!" @@ -8252,18 +8471,12 @@ msgstr "" #~ msgid "Include" #~ msgstr "Включить" -#~ msgid "Change Image Group" -#~ msgstr "Измените изображение группы" - #~ msgid "Group name can't be empty!" #~ msgstr "Ðазвание группы не может быть пуÑтым!" #~ msgid "Invalid character in group name!" #~ msgstr "ÐедопуÑтимый Ñимвол в названии группы!" -#~ msgid "Group name already exists!" -#~ msgstr "Ðазвание группы уже ÑущеÑтвует!" - #~ msgid "Add Image Group" #~ msgstr "Добавлено изображение группы" @@ -8411,9 +8624,6 @@ msgstr "" #~ msgid "Lighting" #~ msgstr "ОÑвещение" -#~ msgid "Toggle Persisting" -#~ msgstr "Параметр изменён" - #~ msgid "Global" #~ msgstr "Глобальные" diff --git a/editor/translations/sk.po b/editor/translations/sk.po index b7ac0a7864..84709e1a4d 100644 --- a/editor/translations/sk.po +++ b/editor/translations/sk.po @@ -192,10 +192,9 @@ msgid "Create %d NEW tracks and insert keys?" msgstr "" #: editor/animation_editor.cpp editor/create_dialog.cpp -#: editor/editor_audio_buses.cpp +#: editor/editor_audio_buses.cpp editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp #: editor/plugins/mesh_instance_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp editor/project_manager.cpp #: editor/script_create_dialog.cpp msgid "Create" @@ -357,263 +356,6 @@ msgstr "" msgid "Change Array Value" msgstr "" -#: editor/asset_library_editor_plugin.cpp -msgid "Free" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp -msgid "Version:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Contents:" -msgstr "KonÅ¡tanty:" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "View Files" -msgstr "Súbor:" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_help.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp -msgid "Description:" -msgstr "Popis:" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -#: editor/project_manager.cpp -msgid "Install" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp -#: editor/connections_dialog.cpp editor/export_template_manager.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -#: editor/project_settings_editor.cpp editor/property_editor.cpp -#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Close" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve hostname:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Connection error, please try again." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't connect." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't connect to host:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response from host:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Request failed, return code:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Req. Failed." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Request failed, too many redirects" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Redirect Loop." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Bad download hash, assuming file has been tampered with." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Expected:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Got:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed sha256 hash check" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Asset Download Error:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -msgid "Success!" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Fetching:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Resolving.." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Error making request" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Idle" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Retry" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Download Error" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Download for this asset is already in progress!" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "first" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "prev" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "next" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "last" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "All" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/property_selector.cpp editor/quick_open.cpp -#: editor/settings_config_dialog.cpp -msgid "Search:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Search" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/project_manager.cpp -msgid "Import" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Plugins" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Sort:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Reverse" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Category:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Site:" -msgstr "Stránka:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Official" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -msgid "Community" -msgstr "Komunita" - -#: editor/asset_library_editor_plugin.cpp -msgid "Testing" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Assets ZIP File" -msgstr "" - -#: editor/call_dialog.cpp -msgid "Method List For '%s':" -msgstr "" - -#: editor/call_dialog.cpp modules/visual_script/visual_script_editor.cpp -msgid "Call" -msgstr "" - -#: editor/call_dialog.cpp -msgid "Method List:" -msgstr "" - -#: editor/call_dialog.cpp -msgid "Arguments:" -msgstr "" - -#: editor/call_dialog.cpp -msgid "Return:" -msgstr "" - #: editor/code_editor.cpp msgid "Go to Line" msgstr "" @@ -650,6 +392,14 @@ msgstr "" msgid "Selection Only" msgstr "" +#: editor/code_editor.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp +msgid "Search" +msgstr "" + #: editor/code_editor.cpp editor/editor_help.cpp msgid "Find" msgstr "" @@ -682,11 +432,11 @@ msgstr "" msgid "Skip" msgstr "" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom In" msgstr "" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom Out" msgstr "" @@ -753,6 +503,20 @@ msgstr "" msgid "Oneshot" msgstr "" +#: editor/connections_dialog.cpp editor/dependency_editor.cpp +#: editor/export_template_manager.cpp +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Close" +msgstr "" + #: editor/connections_dialog.cpp msgid "Connect" msgstr "" @@ -778,7 +542,7 @@ msgstr "" msgid "Disconnect" msgstr "" -#: editor/connections_dialog.cpp editor/node_dock.cpp +#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" msgstr "" @@ -795,12 +559,25 @@ msgstr "" msgid "Recent:" msgstr "" +#: editor/create_dialog.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp +#: editor/quick_open.cpp editor/settings_config_dialog.cpp +msgid "Search:" +msgstr "" + #: editor/create_dialog.cpp editor/editor_help.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp #: editor/quick_open.cpp msgid "Matches:" msgstr "" +#: editor/create_dialog.cpp editor/editor_help.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp +#: editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "Popis:" + #: editor/dependency_editor.cpp msgid "Search Replacement For:" msgstr "" @@ -856,6 +633,10 @@ msgid "Owners Of:" msgstr "" #: editor/dependency_editor.cpp +msgid "Remove selected files from the project? (no undo)" +msgstr "" + +#: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" @@ -863,7 +644,7 @@ msgid "" msgstr "" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (no undo)" +msgid "Cannot remove:\n" msgstr "" #: editor/dependency_editor.cpp @@ -930,10 +711,6 @@ msgid "Godot Engine contributors" msgstr "" #: editor/editor_about.cpp -msgid "Authors" -msgstr "" - -#: editor/editor_about.cpp msgid "Project Founders" msgstr "" @@ -950,6 +727,38 @@ msgid "Developers" msgstr "" #: editor/editor_about.cpp +msgid "Authors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Platinum Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Mini Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Silver Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Bronze Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Donors" +msgstr "" + +#: editor/editor_about.cpp msgid "License" msgstr "" @@ -992,6 +801,16 @@ msgid "Package Installed Successfully!" msgstr "" #: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Success!" +msgstr "" + +#: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp +msgid "Install" +msgstr "" + +#: editor/editor_asset_installer.cpp msgid "Package Installer" msgstr "" @@ -1041,10 +860,6 @@ msgid "Audio Bus, Drag and Drop to rearrange." msgstr "" #: editor/editor_audio_buses.cpp -msgid "Bus options" -msgstr "" - -#: editor/editor_audio_buses.cpp msgid "Solo" msgstr "" @@ -1056,12 +871,20 @@ msgstr "" msgid "Bypass" msgstr "" +#: editor/editor_audio_buses.cpp +msgid "Bus options" +msgstr "" + #: editor/editor_audio_buses.cpp editor/plugins/tile_map_editor_plugin.cpp #: editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "" #: editor/editor_audio_buses.cpp +msgid "Reset Volume" +msgstr "" + +#: editor/editor_audio_buses.cpp msgid "Delete Effect" msgstr "" @@ -1082,6 +905,10 @@ msgid "Duplicate Audio Bus" msgstr "" #: editor/editor_audio_buses.cpp +msgid "Reset Bus Volume" +msgstr "" + +#: editor/editor_audio_buses.cpp msgid "Move Audio Bus" msgstr "" @@ -1113,7 +940,8 @@ msgstr "" msgid "Create a new Bus Layout." msgstr "" -#: editor/editor_audio_buses.cpp editor/script_create_dialog.cpp +#: editor/editor_audio_buses.cpp editor/property_editor.cpp +#: editor/script_create_dialog.cpp msgid "Load" msgstr "" @@ -1204,7 +1032,7 @@ msgid "Rearrange Autoloads" msgstr "" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp scene/gui/file_dialog.cpp +#: scene/gui/file_dialog.cpp msgid "Path:" msgstr "Cesta:" @@ -1212,9 +1040,7 @@ msgstr "Cesta:" msgid "Node Name:" msgstr "" -#: editor/editor_autoload_settings.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp editor/project_manager.cpp +#: editor/editor_autoload_settings.cpp editor/project_manager.cpp msgid "Name" msgstr "" @@ -1247,18 +1073,19 @@ msgid "Choose a Directory" msgstr "" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Create Folder" msgstr "VytvoriÅ¥ adresár" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: editor/editor_plugin_settings.cpp editor/plugins/theme_editor_plugin.cpp -#: editor/project_export.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp +#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp +#: scene/gui/file_dialog.cpp msgid "Name:" msgstr "Meno:" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Could not create folder." msgstr "" @@ -1278,30 +1105,6 @@ msgstr "" msgid "Template file not found:\n" msgstr "" -#: editor/editor_export.cpp -msgid "Added:" -msgstr "" - -#: editor/editor_export.cpp -msgid "Removed:" -msgstr "" - -#: editor/editor_export.cpp -msgid "Error saving atlas:" -msgstr "" - -#: editor/editor_export.cpp -msgid "Could not save atlas subtexture:" -msgstr "" - -#: editor/editor_export.cpp -msgid "Exporting for %s" -msgstr "" - -#: editor/editor_export.cpp -msgid "Setting Up.." -msgstr "" - #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "" @@ -1386,6 +1189,10 @@ msgstr "" msgid "Move Favorite Down" msgstr "" +#: editor/editor_file_dialog.cpp +msgid "Go to parent folder" +msgstr "" + #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Directories & Files:" msgstr "PrieÄinky a Súbory:" @@ -1428,6 +1235,10 @@ msgstr "Zoznam tried:" msgid "Search Classes" msgstr "" +#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +msgid "Top" +msgstr "" + #: editor/editor_help.cpp editor/property_editor.cpp msgid "Class:" msgstr "Trieda:" @@ -1444,15 +1255,27 @@ msgstr "" msgid "Brief Description:" msgstr "" +#: editor/editor_help.cpp +msgid "Members" +msgstr "" + #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "" #: editor/editor_help.cpp +msgid "Public Methods" +msgstr "" + +#: editor/editor_help.cpp msgid "Public Methods:" msgstr "" #: editor/editor_help.cpp +msgid "GUI Theme Items" +msgstr "" + +#: editor/editor_help.cpp msgid "GUI Theme Items:" msgstr "" @@ -1462,6 +1285,11 @@ msgstr "Signály:" #: editor/editor_help.cpp #, fuzzy +msgid "Enumerations" +msgstr "Popis:" + +#: editor/editor_help.cpp +#, fuzzy msgid "Enumerations:" msgstr "Popis:" @@ -1470,19 +1298,49 @@ msgid "enum " msgstr "" #: editor/editor_help.cpp +#, fuzzy +msgid "Constants" +msgstr "KonÅ¡tanty:" + +#: editor/editor_help.cpp msgid "Constants:" msgstr "KonÅ¡tanty:" #: editor/editor_help.cpp #, fuzzy +msgid "Description" +msgstr "Popis:" + +#: editor/editor_help.cpp +msgid "Properties" +msgstr "" + +#: editor/editor_help.cpp +#, fuzzy msgid "Property Description:" msgstr "Popis:" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this property. Please help us by " +"[color=$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp +msgid "Methods" +msgstr "" + +#: editor/editor_help.cpp msgid "Method Description:" msgstr "" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this method. Please help us by [color=" +"$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp msgid "Search Text" msgstr "" @@ -1491,24 +1349,21 @@ msgid "Output:" msgstr "" #: editor/editor_log.cpp editor/plugins/animation_tree_editor_plugin.cpp -#: editor/plugins/rich_text_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_editor_debugger.cpp scene/gui/line_edit.cpp -#: scene/gui/text_edit.cpp +#: editor/property_editor.cpp editor/script_editor_debugger.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Clear" msgstr "" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Error saving resource!" msgstr "" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Save Resource As.." msgstr "" -#: editor/editor_node.cpp editor/export_template_manager.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "I see.." msgstr "" @@ -1525,6 +1380,26 @@ msgid "Error while saving." msgstr "" #: editor/editor_node.cpp +msgid "Can't open '%s'." +msgstr "" + +#: editor/editor_node.cpp +msgid "Error while parsing '%s'." +msgstr "" + +#: editor/editor_node.cpp +msgid "Unexpected end of file '%s'." +msgstr "" + +#: editor/editor_node.cpp +msgid "Missing '%s' or its dependencies." +msgstr "" + +#: editor/editor_node.cpp +msgid "Error while loading '%s'." +msgstr "" + +#: editor/editor_node.cpp msgid "Saving Scene" msgstr "" @@ -1582,6 +1457,33 @@ msgid "Restored default layout to base settings." msgstr "" #: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was imported, so it's not editable.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was instanced or inherited.\n" +"Changes to it will not be kept when saving the current scene." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource was imported, so it's not editable. Change its settings in the " +"import panel and then re-import." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This scene was imported, so changes to it will not be kept.\n" +"Instancing it or inheriting will allow making changes to it.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp msgid "Copy Params" msgstr "" @@ -1745,6 +1647,12 @@ msgid "Save changes the following scene(s) before opening Project Manager?" msgstr "" #: editor/editor_node.cpp +msgid "" +"This option is deprecated. Situations where refresh must be forced are now " +"considered a bug. Please report." +msgstr "" + +#: editor/editor_node.cpp msgid "Pick a Main Scene" msgstr "" @@ -1771,7 +1679,7 @@ msgid "" msgstr "" #: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Ugh" msgstr "" @@ -1782,11 +1690,11 @@ msgid "" msgstr "" #: editor/editor_node.cpp -msgid "Error loading scene." +msgid "Scene '%s' has broken dependencies:" msgstr "" #: editor/editor_node.cpp -msgid "Scene '%s' has broken dependencies:" +msgid "Clear Recent Scenes" msgstr "" #: editor/editor_node.cpp @@ -1822,7 +1730,7 @@ msgstr "" msgid "Toggle distraction-free mode." msgstr "" -#: editor/editor_node.cpp editor/io_plugins/editor_scene_import_plugin.cpp +#: editor/editor_node.cpp msgid "Scene" msgstr "" @@ -2042,6 +1950,10 @@ msgstr "" msgid "Issue Tracker" msgstr "" +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +msgid "Community" +msgstr "Komunita" + #: editor/editor_node.cpp msgid "About" msgstr "" @@ -2050,7 +1962,7 @@ msgstr "" msgid "Play the project." msgstr "" -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Play" msgstr "" @@ -2066,7 +1978,7 @@ msgstr "" msgid "Stop the scene." msgstr "" -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Stop" msgstr "" @@ -2139,6 +2051,15 @@ msgid "Object properties." msgstr "" #: editor/editor_node.cpp +msgid "Changes may be lost!" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Import" +msgstr "" + +#: editor/editor_node.cpp msgid "FileSystem" msgstr "" @@ -2154,14 +2075,6 @@ msgstr "" msgid "Don't Save" msgstr "" -#: editor/editor_node.cpp editor/editor_reimport_dialog.cpp -msgid "Re-Import" -msgstr "" - -#: editor/editor_node.cpp editor/editor_plugin_settings.cpp -msgid "Update" -msgstr "" - #: editor/editor_node.cpp msgid "Import Templates From ZIP File" msgstr "" @@ -2225,11 +2138,28 @@ msgstr "" msgid "Open the previous Editor" msgstr "" +#: editor/editor_plugin.cpp +msgid "Creating Mesh Previews" +msgstr "" + +#: editor/editor_plugin.cpp +msgid "Thumbnail.." +msgstr "" + #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" msgstr "" #: editor/editor_plugin_settings.cpp +msgid "Update" +msgstr "" + +#: editor/editor_plugin_settings.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Version:" +msgstr "" + +#: editor/editor_plugin_settings.cpp msgid "Author:" msgstr "" @@ -2281,26 +2211,6 @@ msgstr "" msgid "Frame #:" msgstr "" -#: editor/editor_reimport_dialog.cpp -msgid "Please wait for scan to complete." -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Current scene must be saved to re-import." -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Save & Re-Import" -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Importing" -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Import Changed Resources" -msgstr "" - #: editor/editor_run_native.cpp msgid "Select device from the list" msgstr "" @@ -2410,10 +2320,6 @@ msgid "Importing:" msgstr "" #: editor/export_template_manager.cpp -msgid "Loading Export Templates" -msgstr "" - -#: editor/export_template_manager.cpp msgid "Current Version:" msgstr "" @@ -2447,9 +2353,17 @@ msgid "Cannot navigate to '" msgstr "" #: editor/filesystem_dock.cpp +msgid "View items as a grid of thumbnails" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "View items as a list" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "" "\n" -"Status: Needs Re-Import" +"Status: Import of file failed. Please fix file and reimport manually." msgstr "" #: editor/filesystem_dock.cpp @@ -2459,87 +2373,88 @@ msgid "" msgstr "" #: editor/filesystem_dock.cpp -msgid "Same source and destination files, doing nothing." +msgid "Cannot move/rename resources root." msgstr "" #: editor/filesystem_dock.cpp -msgid "Target file exists, can't overwrite. Delete first." +msgid "Cannot move a folder into itself.\n" msgstr "" #: editor/filesystem_dock.cpp -msgid "Same source and destination paths, doing nothing." +msgid "Error moving:\n" msgstr "" #: editor/filesystem_dock.cpp -msgid "Can't move directories to within themselves." +msgid "Unable to update dependencies:\n" msgstr "" #: editor/filesystem_dock.cpp -msgid "Can't rename deps for:\n" +msgid "No name provided" msgstr "" #: editor/filesystem_dock.cpp -msgid "Error moving file:\n" +msgid "Provided name contains invalid characters" msgstr "" #: editor/filesystem_dock.cpp -msgid "Error moving dir:\n" +msgid "No name provided." msgstr "" #: editor/filesystem_dock.cpp -msgid "Can't operate on '..'" +msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp -msgid "Pick New Name and Location For:" +msgid "A file or folder with this name already exists." msgstr "" #: editor/filesystem_dock.cpp -msgid "No files selected!" +msgid "Renaming file:" msgstr "" #: editor/filesystem_dock.cpp -msgid "Expand all" +msgid "Renaming folder:" msgstr "" #: editor/filesystem_dock.cpp -msgid "Collapse all" +msgid "Expand all" msgstr "" #: editor/filesystem_dock.cpp -msgid "Show In File Manager" +msgid "Collapse all" msgstr "" #: editor/filesystem_dock.cpp -msgid "Instance" +msgid "Copy Path" msgstr "" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." +msgid "Rename.." msgstr "" #: editor/filesystem_dock.cpp -msgid "View Owners.." +msgid "Move To.." msgstr "" #: editor/filesystem_dock.cpp -msgid "Copy Path" -msgstr "" +#, fuzzy +msgid "New Folder.." +msgstr "VytvoriÅ¥ adresár" #: editor/filesystem_dock.cpp -msgid "Rename or Move.." +msgid "Show In File Manager" msgstr "" #: editor/filesystem_dock.cpp -msgid "Move To.." +msgid "Instance" msgstr "" #: editor/filesystem_dock.cpp -msgid "Info" +msgid "Edit Dependencies.." msgstr "" #: editor/filesystem_dock.cpp -msgid "Re-Import.." +msgid "View Owners.." msgstr "" #: editor/filesystem_dock.cpp @@ -2572,6 +2487,11 @@ msgstr "" msgid "Move" msgstr "" +#: editor/filesystem_dock.cpp editor/plugins/animation_tree_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Rename" +msgstr "" + #: editor/groups_editor.cpp msgid "Add to Group" msgstr "" @@ -2585,6 +2505,10 @@ msgid "Import as Single Scene" msgstr "" #: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials" msgstr "" @@ -2597,6 +2521,18 @@ msgid "Import with Separate Objects+Materials" msgstr "" #: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Materials+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Materials+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes" msgstr "" @@ -2605,38 +2541,31 @@ msgid "Import as Multiple Scenes+Materials" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Import Scene" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Importing Scene.." msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Running Custom Script.." msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Couldn't load post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Invalid/broken script for post-import (check console):" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Error running post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Saving.." msgstr "" @@ -2665,579 +2594,54 @@ msgstr "" msgid "Reimport" msgstr "" -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "No bit masks to import!" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path is empty." -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must be a complete resource path." -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must exist." -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Save path is empty!" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Import BitMasks" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s):" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Target Path:" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Accept" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Bit Mask" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No source font file!" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No target font resource!" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "" -"Invalid file extension.\n" -"Please use .font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Can't load/process source font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Couldn't save font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font Size:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Dest Resource:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "The quick brown fox jumps over the lazy dog." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Test:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Options:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Font Import" -msgstr "" - -#: 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 "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Failed opening as BMFont file." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error initializing FreeType." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Unknown font format." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error loading font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Invalid font size." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Invalid font custom source." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/plugins/theme_editor_plugin.cpp -msgid "Font" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "No meshes to import!" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Single Mesh Import" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Source Mesh(es):" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Mesh" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Surface %d" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "No samples to import!" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Import Audio Samples" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Source Sample(s):" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Audio Sample" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "New Clip" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Animation Options" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Flags" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Bake FPS:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Optimizer" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Linear Error" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angular Error" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angle" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Clips" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Start(s)" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "End(s)" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Loop" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Filters" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source path is empty." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't load post-import script." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Invalid/broken script for post-import." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Error importing scene." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import 3D Scene" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source Scene:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Same as Target Scene" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Shared" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Target Texture Folder:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Post-Process Script:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Custom Root Node Type:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Auto" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Root Node Name:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "The Following Files are Missing:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Anyway" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp scene/gui/dialogs.cpp -msgid "Cancel" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import & Open" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Edited scene has not been saved, open imported scene anyway?" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Image:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Can't import a file over itself:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't localize path: %s (already local)" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "3D Scene Animation" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Uncompressed" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossless (PNG)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossy (WebP)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress (VRAM)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Format" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Compression Quality (WebP):" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Options" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Please specify some files!" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "At least one file needed for Atlas." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Error importing:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Only one file is required for large texture." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Max Texture Size:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for Atlas (2D)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cell Size:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Large Texture" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Textures (2D)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture" +#: editor/multi_node_edit.cpp +msgid "MultiNode Set" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Base Atlas Texture" +#: editor/node_dock.cpp +msgid "Groups" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s)" +#: editor/node_dock.cpp +msgid "Select a Node to edit Signals and Groups." msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 2D" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create Poly" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 3D" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures" +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Insert Point" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "2D Texture" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly (Remove Point)" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "3D Texture" +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Remove Poly And Point" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Atlas Texture" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create a new polygon from scratch." msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp +#: editor/plugins/abstract_polygon_2d_editor.cpp msgid "" -"NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files to " -"the project." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Crop empty space." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Texture" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Load Source Image" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Slicing" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Inserting" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Saving" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save large texture:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Build Atlas For:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Loading Image:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't load image:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Converting Images" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cropping Images" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Blitting Images" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save atlas image:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save converted texture:" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid source!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid translation source!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Column" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/script_create_dialog.cpp -msgid "Language" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No items to import!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No target path!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translations" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Couldn't import!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translation" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Source CSV:" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Ignore First Row" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Compress" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Add to Project (project.godot)" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Languages:" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Translation" -msgstr "" - -#: editor/multi_node_edit.cpp -msgid "MultiNode Set" -msgstr "" - -#: editor/node_dock.cpp -msgid "Groups" -msgstr "" - -#: editor/node_dock.cpp -msgid "Select a Node to edit Signals and Groups." +"Edit existing polygon:\n" +"LMB: Move Point.\n" +"Ctrl+LMB: Split Segment.\n" +"RMB: Erase Point." msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp @@ -3393,7 +2797,6 @@ msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp #: editor/script_create_dialog.cpp msgid "Error!" @@ -3504,10 +2907,6 @@ msgid "Delete Input" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Rename" -msgstr "" - -#: editor/plugins/animation_tree_editor_plugin.cpp msgid "Animation tree is valid." msgstr "" @@ -3563,64 +2962,183 @@ msgstr "" msgid "Filters.." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing %d Triangles:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Free" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Triangle #" +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Contents:" +msgstr "KonÅ¡tanty:" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "View Files" +msgstr "Súbor:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve hostname:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Light Baker Setup:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing Geometry" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connection error, please try again." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Fixing Lights" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't connect." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Making BVH" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't connect to host:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Light Octree" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response from host:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Octree Texture" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Transfer to Lightmaps:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, return code:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Allocating Texture #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Req. Failed." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Baking Triangle #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, too many redirects" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Post-Processing Texture #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Redirect Loop." msgstr "" -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Bake!" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed:" msgstr "" -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Reset the lightmap octree baking process (start over)." +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Bad download hash, assuming file has been tampered with." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Expected:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Got:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed sha256 hash check" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Asset Download Error:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Fetching:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Resolving.." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connecting.." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Requesting.." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Error making request" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Idle" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Retry" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download Error" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download for this asset is already in progress!" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "first" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "prev" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "next" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "last" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "All" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Plugins" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Sort:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Reverse" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Category:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Site:" +msgstr "Stránka:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Support.." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Official" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Testing" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Assets ZIP File" msgstr "" #: editor/plugins/camera_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp msgid "Preview" msgstr "" @@ -3663,11 +3181,15 @@ msgid "Edit CanvasItem" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Change Anchors" +msgid "Anchors only" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom (%):" +msgid "Change Anchors and Margins" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Change Anchors" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3718,59 +3240,72 @@ msgid "Pan Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Lock the selected object in place (can't be moved)." +msgid "Toggles snapping" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Unlock the selected object (can be moved)." +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Makes sure the object's children are not selectable." +msgid "Snapping options" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Restores the object's children's ability to be selected." +msgid "Snap to grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp -#: editor/project_settings_editor.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Edit" +msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +msgid "Configure Snap..." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +msgid "Snap Relative" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Rotation Snap" +msgid "Use Pixel Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap Relative" +msgid "Smart snapping" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." +msgid "Snap to parent" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Pixel Snap" +msgid "Snap to node anchor" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to node sides" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to other nodes" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Skeleton.." +msgid "Lock the selected object in place (can't be moved)." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Unlock the selected object (can be moved)." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Makes sure the object's children are not selectable." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Restores the object's children's ability to be selected." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3799,11 +3334,16 @@ msgid "View" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Reset" +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show helpers" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Set.." +msgid "Show rulers" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3815,7 +3355,7 @@ msgid "Frame Selection" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Anchor" +msgid "Layout" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3839,11 +3379,20 @@ msgid "Clear Pose" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Set a Value" +msgid "Drag pivot from mouse position" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Set pivot at mouse position" +msgstr "VÅ¡etky vybrané" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Multiply grid step by 2" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap (Pixels):" +msgid "Divide grid step by 2" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3854,23 +3403,28 @@ msgstr "" msgid "Adding %s..." msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Create Node" msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Error instancing scene from %s" msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "OK :(" msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "No parent to instance a child at." msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "This operation requires a single selected node." msgstr "" @@ -3884,45 +3438,6 @@ msgid "" "Drag & drop + Alt : Change node type" msgstr "" -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Create Poly" -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly" -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly (Remove Point)" -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Create a new polygon from scratch." -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -msgid "" -"Edit existing polygon:\n" -"LMB: Move Point.\n" -"Ctrl+LMB: Split Segment.\n" -"RMB: Erase Point." -msgstr "" - #: editor/plugins/collision_polygon_editor_plugin.cpp msgid "Create Poly3D" msgstr "" @@ -3932,14 +3447,6 @@ msgid "Set Handle" msgstr "" #: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Creating Mesh Library" -msgstr "" - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Thumbnail.." -msgstr "" - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Remove item %d?" msgstr "" @@ -3962,6 +3469,27 @@ msgid "Update from Scene" msgstr "" #: editor/plugins/curve_editor_plugin.cpp +msgid "Flat0" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Flat1" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +#, fuzzy +msgid "Ease in" +msgstr "VÅ¡etky vybrané" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Ease out" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Smoothstep" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp msgid "Modify Curve Point" msgstr "" @@ -4040,22 +3568,18 @@ msgid "Create Occluder Polygon" msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Edit existing polygon:" msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "LMB: Move Point." msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Ctrl+LMB: Split Segment." msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "RMB: Erase Point." msgstr "" @@ -4156,6 +3680,10 @@ msgid "Create Outline" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Body" msgstr "" @@ -4283,12 +3811,72 @@ msgstr "" msgid "Populate" msgstr "" -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Create Navigation Polygon" +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Bake!" +msgstr "" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Bake the navigation mesh.\n" +msgstr "" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Clear the navigation mesh." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Setting up Configuration..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Calculating grid size..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating heightfield..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Marking walkable triangles..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Constructing compact heightfield..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Eroding walkable area..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Partioning..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating contours..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating polymesh..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Converting to native navigation mesh..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Navigation Mesh Generator Setup:" +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Parsing Geometry..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Done!" msgstr "" #: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Remove Poly And Point" +msgid "Create Navigation Polygon" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4462,16 +4050,19 @@ msgid "Curve Point #" msgstr "" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Point Pos" -msgstr "" +#, fuzzy +msgid "Set Curve Point Position" +msgstr "VÅ¡etky vybrané" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve In Pos" -msgstr "" +#, fuzzy +msgid "Set Curve In Position" +msgstr "VÅ¡etky vybrané" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Out Pos" -msgstr "" +#, fuzzy +msgid "Set Curve Out Position" +msgstr "VÅ¡etky vybrané" #: editor/plugins/path_editor_plugin.cpp msgid "Split Path" @@ -4531,6 +4122,14 @@ msgid "Scale Polygon" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon->UV" msgstr "" @@ -4585,63 +4184,10 @@ msgstr "" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "VložiÅ¥" -#: editor/plugins/rich_text_editor_plugin.cpp -msgid "Parse BBCode" -msgstr "" - -#: editor/plugins/sample_editor_plugin.cpp -msgid "Length:" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Open Sample File(s)" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "ERROR: Couldn't load sample!" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Add Sample" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Rename Sample" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Delete Sample" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "16 Bits" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "8 Bits" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Stereo" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Mono" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/script_editor_debugger.cpp -msgid "Format" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Pitch" -msgstr "" - #: editor/plugins/script_editor_plugin.cpp msgid "Clear Recent Files" msgstr "" @@ -4733,6 +4279,10 @@ msgstr "" msgid "Close All" msgstr "" +#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp +msgid "Run" +msgstr "" + #: editor/plugins/script_editor_plugin.cpp msgid "Toggle Scripts Panel" msgstr "" @@ -4774,18 +4324,6 @@ msgid "Debug with external editor" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Window" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Left" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Right" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp msgid "Open Godot online documentation" msgstr "" @@ -4868,7 +4406,7 @@ msgstr "" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Copy" msgstr "KopÃrovaÅ¥" @@ -5131,10 +4669,6 @@ msgid "View Plane Transform." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Scaling to %s%%." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." msgstr "" @@ -5151,10 +4685,6 @@ msgid "Top View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Top" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "" @@ -5385,6 +4915,10 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Configure Snap.." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Local Coords" msgstr "" @@ -5530,6 +5064,10 @@ msgid "Speed (FPS):" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Loop" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animation Frames" msgstr "" @@ -5542,11 +5080,12 @@ msgid "Insert Empty (After)" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Up" -msgstr "" +#, fuzzy +msgid "Move (Before)" +msgstr "VložiÅ¥" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Down" +msgid "Move (After)" msgstr "" #: editor/plugins/style_box_editor_plugin.cpp @@ -5711,6 +5250,10 @@ msgid "Style" msgstr "" #: editor/plugins/theme_editor_plugin.cpp +msgid "Font" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp msgid "Color" msgstr "" @@ -5760,7 +5303,7 @@ msgid "Mirror Y" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Bucket" +msgid "Paint Tile" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp @@ -5824,6 +5367,10 @@ msgid "Delete preset '%s'?" msgstr "" #: editor/project_export.cpp +msgid "Export templates for this platform are missing/corrupted: " +msgstr "" + +#: editor/project_export.cpp msgid "Presets" msgstr "" @@ -5894,19 +5441,29 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +msgid "Export templates for this platform are missing/corrupted:" +msgstr "" + +#: editor/project_export.cpp msgid "Export With Debug" msgstr "" #: editor/project_manager.cpp -msgid "Invalid project path, the path must exist!" +msgid "The path does not exists." +msgstr "" + +#: editor/project_manager.cpp +msgid "Please choose a 'project.godot' file." msgstr "" #: editor/project_manager.cpp -msgid "Invalid project path, project.godot must not exist." +msgid "" +"Your project will be created in a non empty folder (you might want to create " +"a new folder)." msgstr "" #: editor/project_manager.cpp -msgid "Invalid project path, project.godot must exist." +msgid "Please choose a folder that does not contain a 'project.godot' file." msgstr "" #: editor/project_manager.cpp @@ -5914,10 +5471,26 @@ msgid "Imported Project" msgstr "" #: editor/project_manager.cpp +msgid " " +msgstr "" + +#: editor/project_manager.cpp +msgid "It would be a good idea to name your project." +msgstr "" + +#: editor/project_manager.cpp msgid "Invalid project path (changed anything?)." msgstr "" #: editor/project_manager.cpp +msgid "Couldn't get project.godot in project path." +msgstr "" + +#: editor/project_manager.cpp +msgid "Couldn't edit project.godot in project path." +msgstr "" + +#: editor/project_manager.cpp msgid "Couldn't create project.godot in project path." msgstr "" @@ -5926,15 +5499,20 @@ msgid "The following files failed extraction from package:" msgstr "" #: editor/project_manager.cpp -msgid "Import Existing Project" +#, fuzzy +msgid "Rename Project" +msgstr "VÅ¡etky vybrané" + +#: editor/project_manager.cpp +msgid "Couldn't get project.godot in the project path." msgstr "" #: editor/project_manager.cpp -msgid "Project Path (Must Exist):" +msgid "New Game Project" msgstr "" #: editor/project_manager.cpp -msgid "Project Name:" +msgid "Import Existing Project" msgstr "" #: editor/project_manager.cpp @@ -5942,19 +5520,24 @@ msgid "Create New Project" msgstr "" #: editor/project_manager.cpp -msgid "Project Path:" +msgid "Install Project:" msgstr "" #: editor/project_manager.cpp -msgid "Install Project:" +msgid "Project Name:" msgstr "" #: editor/project_manager.cpp -msgid "Browse" +#, fuzzy +msgid "Create folder" +msgstr "VytvoriÅ¥ adresár" + +#: editor/project_manager.cpp +msgid "Project Path:" msgstr "" #: editor/project_manager.cpp -msgid "New Game Project" +msgid "Browse" msgstr "" #: editor/project_manager.cpp @@ -5966,6 +5549,10 @@ msgid "Unnamed Project" msgstr "" #: editor/project_manager.cpp +msgid "Can't open project" +msgstr "" + +#: editor/project_manager.cpp msgid "Are you sure to open more than one project?" msgstr "" @@ -6001,10 +5588,6 @@ msgid "Project List" msgstr "" #: editor/project_manager.cpp -msgid "Run" -msgstr "" - -#: editor/project_manager.cpp msgid "Scan" msgstr "" @@ -6062,17 +5645,14 @@ msgid "Add Input Action Event" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Meta+" msgstr "Meta+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Shift+" msgstr "Shift+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Alt+" msgstr "Alt+" @@ -6133,7 +5713,7 @@ msgstr "" msgid "Joypad Axis Index:" msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Axis" msgstr "Os" @@ -6153,31 +5733,31 @@ msgstr "" msgid "Add Event" msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Device" msgstr "Zariadenie" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Button" msgstr "TlaÄidlo" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Left Button." msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Right Button." msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Middle Button." msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Up." msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Down." msgstr "" @@ -6186,7 +5766,7 @@ msgid "Add Global Property" msgstr "" #: editor/project_settings_editor.cpp -msgid "Select an setting item first!" +msgid "Select a setting item first!" msgstr "" #: editor/project_settings_editor.cpp @@ -6202,6 +5782,14 @@ msgid "Delete Item" msgstr "" #: editor/project_settings_editor.cpp +msgid "Can't contain '/' or ':'" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Already existing" +msgstr "" + +#: editor/project_settings_editor.cpp msgid "Error saving settings." msgstr "" @@ -6351,10 +5939,18 @@ msgid "New Script" msgstr "Popis:" #: editor/property_editor.cpp +msgid "Make Unique" +msgstr "" + +#: editor/property_editor.cpp msgid "Show in File System" msgstr "" #: editor/property_editor.cpp +msgid "Convert To %s" +msgstr "" + +#: editor/property_editor.cpp msgid "Error loading file: Not a resource!" msgstr "" @@ -6392,6 +5988,10 @@ msgid "Select Property" msgstr "" #: editor/property_selector.cpp +msgid "Select Virtual Method" +msgstr "" + +#: editor/property_selector.cpp msgid "Select Method" msgstr "" @@ -6419,26 +6019,6 @@ msgstr "" msgid "Reparent" msgstr "" -#: editor/resources_dock.cpp -msgid "Create New Resource" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Open Resource" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Save Resource" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Resource Tools" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Make Local" -msgstr "" - #: editor/run_settings_dialog.cpp msgid "Run Mode:" msgstr "" @@ -6565,14 +6145,6 @@ msgid "Sub-Resources:" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Edit Groups" -msgstr "" - -#: editor/scene_tree_dock.cpp -msgid "Edit Connections" -msgstr "" - -#: editor/scene_tree_dock.cpp msgid "Clear Inheritance" msgstr "" @@ -6757,6 +6329,14 @@ msgid "Invalid base path" msgstr "" #: editor/script_create_dialog.cpp +msgid "Directory of the same name exists" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "File exists, will be reused" +msgstr "" + +#: editor/script_create_dialog.cpp msgid "Invalid extension" msgstr "" @@ -6799,6 +6379,10 @@ msgid "Load existing script file" msgstr "Popis:" #: editor/script_create_dialog.cpp +msgid "Language" +msgstr "" + +#: editor/script_create_dialog.cpp msgid "Inherits" msgstr "" @@ -6842,6 +6426,10 @@ msgid "Function:" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Errors" msgstr "" @@ -6922,6 +6510,10 @@ msgid "Type" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Format" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Usage" msgstr "" @@ -6997,12 +6589,28 @@ msgstr "" msgid "Change Probe Extents" msgstr "" +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Library" +msgstr "" + +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Status" +msgstr "" + +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Libraries: " +msgstr "" + +#: modules/gdnative/register_types.cpp +msgid "GDNative" +msgstr "" + #: 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/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h #: 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." @@ -7053,10 +6661,6 @@ msgid "GridMap Duplicate Selection" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Paint" -msgstr "" - -#: modules/gridmap/grid_map_editor_plugin.cpp msgid "Snap View" msgstr "" @@ -7149,13 +6753,8 @@ msgstr "" msgid "Pick Distance:" msgstr "" -#: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy -msgid "Tiles" -msgstr "Súbor:" - -#: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Areas" +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "Builds" msgstr "" #: modules/visual_script/visual_script.cpp @@ -7348,10 +6947,18 @@ msgid "Return" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Call" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Get" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Script already has function '%s'" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Input Value" msgstr "" @@ -7718,6 +7325,12 @@ msgid "" "order for AnimatedSprite3D to display frames." msgstr "" +#: scene/3d/vehicle_body.cpp +msgid "" +"VehicleWheel serves to provide a wheel system to a VehicleBody. Please use " +"it as a child of a VehicleBody." +msgstr "" + #: scene/gui/color_picker.cpp msgid "Raw Mode" msgstr "" @@ -7727,6 +7340,10 @@ msgid "Add current color as a preset" msgstr "" #: scene/gui/dialogs.cpp +msgid "Cancel" +msgstr "" + +#: scene/gui/dialogs.cpp msgid "Alert!" msgstr "" @@ -7734,10 +7351,6 @@ msgstr "" msgid "Please Confirm..." msgstr "" -#: scene/gui/input_action.cpp -msgid "Ctrl+" -msgstr "Ctrl+" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -7766,6 +7379,29 @@ msgid "" "texture to some node for display." msgstr "" +#: scene/resources/dynamic_font.cpp +msgid "Error initializing FreeType." +msgstr "" + +#: scene/resources/dynamic_font.cpp +msgid "Unknown font format." +msgstr "" + +#: scene/resources/dynamic_font.cpp +msgid "Error loading font." +msgstr "" + +#: scene/resources/dynamic_font.cpp +msgid "Invalid font size." +msgstr "" + +#, fuzzy +#~ msgid "Tiles" +#~ msgstr "Súbor:" + +#~ msgid "Ctrl+" +#~ msgstr "Ctrl+" + #, fuzzy #~ msgid "Create Android keystore" #~ msgstr "VytvoriÅ¥ adresár" diff --git a/editor/translations/sl.po b/editor/translations/sl.po index daa7533a8c..3878214ba0 100644 --- a/editor/translations/sl.po +++ b/editor/translations/sl.po @@ -192,10 +192,9 @@ msgid "Create %d NEW tracks and insert keys?" msgstr "" #: editor/animation_editor.cpp editor/create_dialog.cpp -#: editor/editor_audio_buses.cpp +#: editor/editor_audio_buses.cpp editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp #: editor/plugins/mesh_instance_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp editor/project_manager.cpp #: editor/script_create_dialog.cpp msgid "Create" @@ -357,261 +356,6 @@ msgstr "" msgid "Change Array Value" msgstr "" -#: editor/asset_library_editor_plugin.cpp -msgid "Free" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp -msgid "Version:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Contents:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "View Files" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_help.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp -msgid "Description:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -#: editor/project_manager.cpp -msgid "Install" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp -#: editor/connections_dialog.cpp editor/export_template_manager.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -#: editor/project_settings_editor.cpp editor/property_editor.cpp -#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Close" -msgstr "Zapri" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve hostname:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Connection error, please try again." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't connect." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't connect to host:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response from host:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Request failed, return code:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Req. Failed." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Request failed, too many redirects" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Redirect Loop." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Bad download hash, assuming file has been tampered with." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Expected:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Got:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed sha256 hash check" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Asset Download Error:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -msgid "Success!" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Fetching:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Resolving.." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Error making request" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Idle" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Retry" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Download Error" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Download for this asset is already in progress!" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "first" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "prev" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "next" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "last" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "All" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/property_selector.cpp editor/quick_open.cpp -#: editor/settings_config_dialog.cpp -msgid "Search:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Search" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/project_manager.cpp -msgid "Import" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Plugins" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Sort:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Reverse" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Category:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Site:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Official" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -msgid "Community" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Testing" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Assets ZIP File" -msgstr "" - -#: editor/call_dialog.cpp -msgid "Method List For '%s':" -msgstr "" - -#: editor/call_dialog.cpp modules/visual_script/visual_script_editor.cpp -msgid "Call" -msgstr "" - -#: editor/call_dialog.cpp -msgid "Method List:" -msgstr "" - -#: editor/call_dialog.cpp -msgid "Arguments:" -msgstr "" - -#: editor/call_dialog.cpp -msgid "Return:" -msgstr "" - #: editor/code_editor.cpp msgid "Go to Line" msgstr "" @@ -648,6 +392,14 @@ msgstr "" msgid "Selection Only" msgstr "" +#: editor/code_editor.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp +msgid "Search" +msgstr "" + #: editor/code_editor.cpp editor/editor_help.cpp msgid "Find" msgstr "" @@ -680,11 +432,11 @@ msgstr "" msgid "Skip" msgstr "" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom In" msgstr "" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom Out" msgstr "" @@ -751,6 +503,20 @@ msgstr "" msgid "Oneshot" msgstr "" +#: editor/connections_dialog.cpp editor/dependency_editor.cpp +#: editor/export_template_manager.cpp +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Close" +msgstr "Zapri" + #: editor/connections_dialog.cpp msgid "Connect" msgstr "" @@ -776,7 +542,7 @@ msgstr "" msgid "Disconnect" msgstr "" -#: editor/connections_dialog.cpp editor/node_dock.cpp +#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" msgstr "" @@ -793,12 +559,25 @@ msgstr "" msgid "Recent:" msgstr "" +#: editor/create_dialog.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp +#: editor/quick_open.cpp editor/settings_config_dialog.cpp +msgid "Search:" +msgstr "" + #: editor/create_dialog.cpp editor/editor_help.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp #: editor/quick_open.cpp msgid "Matches:" msgstr "" +#: editor/create_dialog.cpp editor/editor_help.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp +#: editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "" + #: editor/dependency_editor.cpp msgid "Search Replacement For:" msgstr "" @@ -854,6 +633,10 @@ msgid "Owners Of:" msgstr "" #: editor/dependency_editor.cpp +msgid "Remove selected files from the project? (no undo)" +msgstr "" + +#: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" @@ -861,7 +644,7 @@ msgid "" msgstr "" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (no undo)" +msgid "Cannot remove:\n" msgstr "" #: editor/dependency_editor.cpp @@ -928,10 +711,6 @@ msgid "Godot Engine contributors" msgstr "" #: editor/editor_about.cpp -msgid "Authors" -msgstr "" - -#: editor/editor_about.cpp msgid "Project Founders" msgstr "" @@ -948,6 +727,38 @@ msgid "Developers" msgstr "" #: editor/editor_about.cpp +msgid "Authors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Platinum Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Mini Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Silver Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Bronze Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Donors" +msgstr "" + +#: editor/editor_about.cpp msgid "License" msgstr "" @@ -988,6 +799,16 @@ msgid "Package Installed Successfully!" msgstr "" #: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Success!" +msgstr "" + +#: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp +msgid "Install" +msgstr "" + +#: editor/editor_asset_installer.cpp msgid "Package Installer" msgstr "" @@ -1038,10 +859,6 @@ msgid "Audio Bus, Drag and Drop to rearrange." msgstr "" #: editor/editor_audio_buses.cpp -msgid "Bus options" -msgstr "" - -#: editor/editor_audio_buses.cpp msgid "Solo" msgstr "" @@ -1053,12 +870,20 @@ msgstr "" msgid "Bypass" msgstr "" +#: editor/editor_audio_buses.cpp +msgid "Bus options" +msgstr "" + #: editor/editor_audio_buses.cpp editor/plugins/tile_map_editor_plugin.cpp #: editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "" #: editor/editor_audio_buses.cpp +msgid "Reset Volume" +msgstr "" + +#: editor/editor_audio_buses.cpp #, fuzzy msgid "Delete Effect" msgstr "IzbriÅ¡i Izbrano" @@ -1080,6 +905,10 @@ msgid "Duplicate Audio Bus" msgstr "" #: editor/editor_audio_buses.cpp +msgid "Reset Bus Volume" +msgstr "" + +#: editor/editor_audio_buses.cpp msgid "Move Audio Bus" msgstr "" @@ -1111,7 +940,8 @@ msgstr "" msgid "Create a new Bus Layout." msgstr "" -#: editor/editor_audio_buses.cpp editor/script_create_dialog.cpp +#: editor/editor_audio_buses.cpp editor/property_editor.cpp +#: editor/script_create_dialog.cpp msgid "Load" msgstr "" @@ -1201,7 +1031,7 @@ msgid "Rearrange Autoloads" msgstr "" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp scene/gui/file_dialog.cpp +#: scene/gui/file_dialog.cpp msgid "Path:" msgstr "" @@ -1209,9 +1039,7 @@ msgstr "" msgid "Node Name:" msgstr "" -#: editor/editor_autoload_settings.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp editor/project_manager.cpp +#: editor/editor_autoload_settings.cpp editor/project_manager.cpp msgid "Name" msgstr "" @@ -1244,18 +1072,19 @@ msgid "Choose a Directory" msgstr "" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Create Folder" msgstr "" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: editor/editor_plugin_settings.cpp editor/plugins/theme_editor_plugin.cpp -#: editor/project_export.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp +#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp +#: scene/gui/file_dialog.cpp msgid "Name:" msgstr "" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Could not create folder." msgstr "" @@ -1275,30 +1104,6 @@ msgstr "" msgid "Template file not found:\n" msgstr "" -#: editor/editor_export.cpp -msgid "Added:" -msgstr "" - -#: editor/editor_export.cpp -msgid "Removed:" -msgstr "" - -#: editor/editor_export.cpp -msgid "Error saving atlas:" -msgstr "" - -#: editor/editor_export.cpp -msgid "Could not save atlas subtexture:" -msgstr "" - -#: editor/editor_export.cpp -msgid "Exporting for %s" -msgstr "" - -#: editor/editor_export.cpp -msgid "Setting Up.." -msgstr "" - #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "" @@ -1383,6 +1188,10 @@ msgstr "" msgid "Move Favorite Down" msgstr "" +#: editor/editor_file_dialog.cpp +msgid "Go to parent folder" +msgstr "" + #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Directories & Files:" msgstr "" @@ -1425,6 +1234,10 @@ msgstr "" msgid "Search Classes" msgstr "" +#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +msgid "Top" +msgstr "" + #: editor/editor_help.cpp editor/property_editor.cpp msgid "Class:" msgstr "" @@ -1441,15 +1254,28 @@ msgstr "" msgid "Brief Description:" msgstr "" +#: editor/editor_help.cpp +#, fuzzy +msgid "Members" +msgstr "ÄŒlani:" + #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "ÄŒlani:" #: editor/editor_help.cpp +msgid "Public Methods" +msgstr "" + +#: editor/editor_help.cpp msgid "Public Methods:" msgstr "" #: editor/editor_help.cpp +msgid "GUI Theme Items" +msgstr "" + +#: editor/editor_help.cpp msgid "GUI Theme Items:" msgstr "" @@ -1459,6 +1285,11 @@ msgstr "Signali:" #: editor/editor_help.cpp #, fuzzy +msgid "Enumerations" +msgstr "Funkcije:" + +#: editor/editor_help.cpp +#, fuzzy msgid "Enumerations:" msgstr "Funkcije:" @@ -1467,18 +1298,46 @@ msgid "enum " msgstr "" #: editor/editor_help.cpp +msgid "Constants" +msgstr "" + +#: editor/editor_help.cpp msgid "Constants:" msgstr "" #: editor/editor_help.cpp +msgid "Description" +msgstr "" + +#: editor/editor_help.cpp +msgid "Properties" +msgstr "" + +#: editor/editor_help.cpp msgid "Property Description:" msgstr "" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this property. Please help us by " +"[color=$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp +msgid "Methods" +msgstr "" + +#: editor/editor_help.cpp msgid "Method Description:" msgstr "" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this method. Please help us by [color=" +"$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp msgid "Search Text" msgstr "" @@ -1487,24 +1346,21 @@ msgid "Output:" msgstr "" #: editor/editor_log.cpp editor/plugins/animation_tree_editor_plugin.cpp -#: editor/plugins/rich_text_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_editor_debugger.cpp scene/gui/line_edit.cpp -#: scene/gui/text_edit.cpp +#: editor/property_editor.cpp editor/script_editor_debugger.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Clear" msgstr "" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Error saving resource!" msgstr "" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Save Resource As.." msgstr "" -#: editor/editor_node.cpp editor/export_template_manager.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "I see.." msgstr "" @@ -1521,6 +1377,26 @@ msgid "Error while saving." msgstr "" #: editor/editor_node.cpp +msgid "Can't open '%s'." +msgstr "" + +#: editor/editor_node.cpp +msgid "Error while parsing '%s'." +msgstr "" + +#: editor/editor_node.cpp +msgid "Unexpected end of file '%s'." +msgstr "" + +#: editor/editor_node.cpp +msgid "Missing '%s' or its dependencies." +msgstr "" + +#: editor/editor_node.cpp +msgid "Error while loading '%s'." +msgstr "" + +#: editor/editor_node.cpp msgid "Saving Scene" msgstr "" @@ -1578,6 +1454,33 @@ msgid "Restored default layout to base settings." msgstr "" #: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was imported, so it's not editable.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was instanced or inherited.\n" +"Changes to it will not be kept when saving the current scene." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource was imported, so it's not editable. Change its settings in the " +"import panel and then re-import." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This scene was imported, so changes to it will not be kept.\n" +"Instancing it or inheriting will allow making changes to it.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp msgid "Copy Params" msgstr "" @@ -1739,6 +1642,12 @@ msgid "Save changes the following scene(s) before opening Project Manager?" msgstr "" #: editor/editor_node.cpp +msgid "" +"This option is deprecated. Situations where refresh must be forced are now " +"considered a bug. Please report." +msgstr "" + +#: editor/editor_node.cpp msgid "Pick a Main Scene" msgstr "" @@ -1765,7 +1674,7 @@ msgid "" msgstr "" #: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Ugh" msgstr "" @@ -1776,11 +1685,11 @@ msgid "" msgstr "" #: editor/editor_node.cpp -msgid "Error loading scene." +msgid "Scene '%s' has broken dependencies:" msgstr "" #: editor/editor_node.cpp -msgid "Scene '%s' has broken dependencies:" +msgid "Clear Recent Scenes" msgstr "" #: editor/editor_node.cpp @@ -1816,7 +1725,7 @@ msgstr "" msgid "Toggle distraction-free mode." msgstr "" -#: editor/editor_node.cpp editor/io_plugins/editor_scene_import_plugin.cpp +#: editor/editor_node.cpp msgid "Scene" msgstr "" @@ -2036,6 +1945,10 @@ msgstr "" msgid "Issue Tracker" msgstr "" +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +msgid "Community" +msgstr "" + #: editor/editor_node.cpp msgid "About" msgstr "" @@ -2044,7 +1957,7 @@ msgstr "" msgid "Play the project." msgstr "" -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Play" msgstr "" @@ -2060,7 +1973,7 @@ msgstr "" msgid "Stop the scene." msgstr "" -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Stop" msgstr "" @@ -2133,6 +2046,15 @@ msgid "Object properties." msgstr "" #: editor/editor_node.cpp +msgid "Changes may be lost!" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Import" +msgstr "" + +#: editor/editor_node.cpp msgid "FileSystem" msgstr "" @@ -2148,14 +2070,6 @@ msgstr "" msgid "Don't Save" msgstr "" -#: editor/editor_node.cpp editor/editor_reimport_dialog.cpp -msgid "Re-Import" -msgstr "" - -#: editor/editor_node.cpp editor/editor_plugin_settings.cpp -msgid "Update" -msgstr "" - #: editor/editor_node.cpp msgid "Import Templates From ZIP File" msgstr "" @@ -2216,11 +2130,28 @@ msgstr "" msgid "Open the previous Editor" msgstr "" +#: editor/editor_plugin.cpp +msgid "Creating Mesh Previews" +msgstr "" + +#: editor/editor_plugin.cpp +msgid "Thumbnail.." +msgstr "" + #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" msgstr "" #: editor/editor_plugin_settings.cpp +msgid "Update" +msgstr "" + +#: editor/editor_plugin_settings.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Version:" +msgstr "" + +#: editor/editor_plugin_settings.cpp msgid "Author:" msgstr "" @@ -2272,26 +2203,6 @@ msgstr "" msgid "Frame #:" msgstr "" -#: editor/editor_reimport_dialog.cpp -msgid "Please wait for scan to complete." -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Current scene must be saved to re-import." -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Save & Re-Import" -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Importing" -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Import Changed Resources" -msgstr "" - #: editor/editor_run_native.cpp msgid "Select device from the list" msgstr "" @@ -2401,10 +2312,6 @@ msgid "Importing:" msgstr "" #: editor/export_template_manager.cpp -msgid "Loading Export Templates" -msgstr "" - -#: editor/export_template_manager.cpp msgid "Current Version:" msgstr "" @@ -2438,9 +2345,17 @@ msgid "Cannot navigate to '" msgstr "" #: editor/filesystem_dock.cpp +msgid "View items as a grid of thumbnails" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "View items as a list" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "" "\n" -"Status: Needs Re-Import" +"Status: Import of file failed. Please fix file and reimport manually." msgstr "" #: editor/filesystem_dock.cpp @@ -2450,87 +2365,88 @@ msgid "" msgstr "" #: editor/filesystem_dock.cpp -msgid "Same source and destination files, doing nothing." +msgid "Cannot move/rename resources root." msgstr "" #: editor/filesystem_dock.cpp -msgid "Target file exists, can't overwrite. Delete first." +msgid "Cannot move a folder into itself.\n" msgstr "" #: editor/filesystem_dock.cpp -msgid "Same source and destination paths, doing nothing." +msgid "Error moving:\n" msgstr "" #: editor/filesystem_dock.cpp -msgid "Can't move directories to within themselves." +msgid "Unable to update dependencies:\n" msgstr "" #: editor/filesystem_dock.cpp -msgid "Can't rename deps for:\n" +msgid "No name provided" msgstr "" #: editor/filesystem_dock.cpp -msgid "Error moving file:\n" +msgid "Provided name contains invalid characters" msgstr "" #: editor/filesystem_dock.cpp -msgid "Error moving dir:\n" +msgid "No name provided." msgstr "" #: editor/filesystem_dock.cpp -msgid "Can't operate on '..'" +msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp -msgid "Pick New Name and Location For:" +msgid "A file or folder with this name already exists." msgstr "" #: editor/filesystem_dock.cpp -msgid "No files selected!" -msgstr "" +#, fuzzy +msgid "Renaming file:" +msgstr "Preimenuj Spremenljivko" #: editor/filesystem_dock.cpp -msgid "Expand all" +msgid "Renaming folder:" msgstr "" #: editor/filesystem_dock.cpp -msgid "Collapse all" +msgid "Expand all" msgstr "" #: editor/filesystem_dock.cpp -msgid "Show In File Manager" +msgid "Collapse all" msgstr "" #: editor/filesystem_dock.cpp -msgid "Instance" +msgid "Copy Path" msgstr "" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." +msgid "Rename.." msgstr "" #: editor/filesystem_dock.cpp -msgid "View Owners.." +msgid "Move To.." msgstr "" #: editor/filesystem_dock.cpp -msgid "Copy Path" +msgid "New Folder.." msgstr "" #: editor/filesystem_dock.cpp -msgid "Rename or Move.." +msgid "Show In File Manager" msgstr "" #: editor/filesystem_dock.cpp -msgid "Move To.." +msgid "Instance" msgstr "" #: editor/filesystem_dock.cpp -msgid "Info" +msgid "Edit Dependencies.." msgstr "" #: editor/filesystem_dock.cpp -msgid "Re-Import.." +msgid "View Owners.." msgstr "" #: editor/filesystem_dock.cpp @@ -2563,6 +2479,11 @@ msgstr "" msgid "Move" msgstr "" +#: editor/filesystem_dock.cpp editor/plugins/animation_tree_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Rename" +msgstr "" + #: editor/groups_editor.cpp msgid "Add to Group" msgstr "" @@ -2576,6 +2497,10 @@ msgid "Import as Single Scene" msgstr "" #: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials" msgstr "" @@ -2588,6 +2513,18 @@ msgid "Import with Separate Objects+Materials" msgstr "" #: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Materials+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Materials+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes" msgstr "" @@ -2596,38 +2533,31 @@ msgid "Import as Multiple Scenes+Materials" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Import Scene" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Importing Scene.." msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Running Custom Script.." msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Couldn't load post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Invalid/broken script for post-import (check console):" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Error running post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Saving.." msgstr "" @@ -2655,579 +2585,54 @@ msgstr "" msgid "Reimport" msgstr "" -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "No bit masks to import!" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path is empty." -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must be a complete resource path." -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must exist." -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Save path is empty!" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Import BitMasks" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s):" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Target Path:" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Accept" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Bit Mask" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No source font file!" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No target font resource!" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "" -"Invalid file extension.\n" -"Please use .font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Can't load/process source font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Couldn't save font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font Size:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Dest Resource:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "The quick brown fox jumps over the lazy dog." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Test:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Options:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Font Import" -msgstr "" - -#: 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 "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Failed opening as BMFont file." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error initializing FreeType." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Unknown font format." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error loading font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Invalid font size." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Invalid font custom source." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/plugins/theme_editor_plugin.cpp -msgid "Font" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "No meshes to import!" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Single Mesh Import" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Source Mesh(es):" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Mesh" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Surface %d" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "No samples to import!" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Import Audio Samples" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Source Sample(s):" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Audio Sample" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "New Clip" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Animation Options" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Flags" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Bake FPS:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Optimizer" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Linear Error" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angular Error" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angle" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Clips" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Start(s)" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "End(s)" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Loop" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Filters" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source path is empty." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't load post-import script." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Invalid/broken script for post-import." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Error importing scene." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import 3D Scene" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source Scene:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Same as Target Scene" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Shared" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Target Texture Folder:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Post-Process Script:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Custom Root Node Type:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Auto" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Root Node Name:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "The Following Files are Missing:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Anyway" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp scene/gui/dialogs.cpp -msgid "Cancel" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import & Open" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Edited scene has not been saved, open imported scene anyway?" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Image:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Can't import a file over itself:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't localize path: %s (already local)" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "3D Scene Animation" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Uncompressed" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossless (PNG)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossy (WebP)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress (VRAM)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Format" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Compression Quality (WebP):" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Options" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Please specify some files!" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "At least one file needed for Atlas." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Error importing:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Only one file is required for large texture." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Max Texture Size:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for Atlas (2D)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cell Size:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Large Texture" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Textures (2D)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture" +#: editor/multi_node_edit.cpp +msgid "MultiNode Set" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Base Atlas Texture" +#: editor/node_dock.cpp +msgid "Groups" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s)" +#: editor/node_dock.cpp +msgid "Select a Node to edit Signals and Groups." msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 2D" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create Poly" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 3D" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures" +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Insert Point" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "2D Texture" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly (Remove Point)" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "3D Texture" +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Remove Poly And Point" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Atlas Texture" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create a new polygon from scratch." msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp +#: editor/plugins/abstract_polygon_2d_editor.cpp msgid "" -"NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files to " -"the project." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Crop empty space." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Texture" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Load Source Image" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Slicing" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Inserting" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Saving" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save large texture:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Build Atlas For:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Loading Image:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't load image:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Converting Images" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cropping Images" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Blitting Images" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save atlas image:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save converted texture:" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid source!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid translation source!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Column" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/script_create_dialog.cpp -msgid "Language" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No items to import!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No target path!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translations" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Couldn't import!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translation" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Source CSV:" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Ignore First Row" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Compress" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Add to Project (project.godot)" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Languages:" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Translation" -msgstr "" - -#: editor/multi_node_edit.cpp -msgid "MultiNode Set" -msgstr "" - -#: editor/node_dock.cpp -msgid "Groups" -msgstr "" - -#: editor/node_dock.cpp -msgid "Select a Node to edit Signals and Groups." +"Edit existing polygon:\n" +"LMB: Move Point.\n" +"Ctrl+LMB: Split Segment.\n" +"RMB: Erase Point." msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp @@ -3383,7 +2788,6 @@ msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp #: editor/script_create_dialog.cpp msgid "Error!" @@ -3494,10 +2898,6 @@ msgid "Delete Input" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Rename" -msgstr "" - -#: editor/plugins/animation_tree_editor_plugin.cpp msgid "Animation tree is valid." msgstr "" @@ -3553,64 +2953,181 @@ msgstr "" msgid "Filters.." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing %d Triangles:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Free" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Triangle #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Contents:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Light Baker Setup:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "View Files" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing Geometry" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve hostname:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Fixing Lights" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Making BVH" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connection error, please try again." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Light Octree" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't connect." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Octree Texture" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't connect to host:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Transfer to Lightmaps:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response from host:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Allocating Texture #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Baking Triangle #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, return code:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Post-Processing Texture #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Req. Failed." msgstr "" -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Bake!" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, too many redirects" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Redirect Loop." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Bad download hash, assuming file has been tampered with." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Expected:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Got:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed sha256 hash check" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Asset Download Error:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Fetching:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Resolving.." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connecting.." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Requesting.." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Error making request" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Idle" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Retry" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download Error" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download for this asset is already in progress!" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "first" msgstr "" -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Reset the lightmap octree baking process (start over)." +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "prev" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "next" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "last" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "All" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Plugins" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Sort:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Reverse" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Category:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Site:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Support.." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Official" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Testing" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Assets ZIP File" msgstr "" #: editor/plugins/camera_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp msgid "Preview" msgstr "" @@ -3653,11 +3170,15 @@ msgid "Edit CanvasItem" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Change Anchors" +msgid "Anchors only" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom (%):" +msgid "Change Anchors and Margins" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Change Anchors" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3708,59 +3229,73 @@ msgid "Pan Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Lock the selected object in place (can't be moved)." +#, fuzzy +msgid "Toggles snapping" +msgstr "Preklopi na Zaustavitev" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Unlock the selected object (can be moved)." +msgid "Snapping options" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Makes sure the object's children are not selectable." +msgid "Snap to grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Restores the object's children's ability to be selected." +msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp -#: editor/project_settings_editor.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Edit" -msgstr "Uredi" +msgid "Configure Snap..." +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +msgid "Snap Relative" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +msgid "Use Pixel Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Rotation Snap" +msgid "Smart snapping" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap Relative" +msgid "Snap to parent" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." +msgid "Snap to node anchor" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Pixel Snap" +msgid "Snap to node sides" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to other nodes" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Lock the selected object in place (can't be moved)." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Skeleton.." +msgid "Unlock the selected object (can be moved)." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Makes sure the object's children are not selectable." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Restores the object's children's ability to be selected." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3789,11 +3324,16 @@ msgid "View" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Reset" +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show helpers" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Set.." +msgid "Show rulers" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3805,7 +3345,7 @@ msgid "Frame Selection" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Anchor" +msgid "Layout" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3829,11 +3369,20 @@ msgid "Clear Pose" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Set a Value" +msgid "Drag pivot from mouse position" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap (Pixels):" +#, fuzzy +msgid "Set pivot at mouse position" +msgstr "Odstrani Signal" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Multiply grid step by 2" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Divide grid step by 2" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3844,23 +3393,28 @@ msgstr "" msgid "Adding %s..." msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Create Node" msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Error instancing scene from %s" msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "OK :(" msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "No parent to instance a child at." msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "This operation requires a single selected node." msgstr "" @@ -3874,45 +3428,6 @@ msgid "" "Drag & drop + Alt : Change node type" msgstr "" -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Create Poly" -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly" -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly (Remove Point)" -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Create a new polygon from scratch." -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -msgid "" -"Edit existing polygon:\n" -"LMB: Move Point.\n" -"Ctrl+LMB: Split Segment.\n" -"RMB: Erase Point." -msgstr "" - #: editor/plugins/collision_polygon_editor_plugin.cpp msgid "Create Poly3D" msgstr "" @@ -3922,14 +3437,6 @@ msgid "Set Handle" msgstr "" #: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Creating Mesh Library" -msgstr "" - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Thumbnail.." -msgstr "" - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Remove item %d?" msgstr "" @@ -3952,6 +3459,26 @@ msgid "Update from Scene" msgstr "" #: editor/plugins/curve_editor_plugin.cpp +msgid "Flat0" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Flat1" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Ease in" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Ease out" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Smoothstep" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp msgid "Modify Curve Point" msgstr "" @@ -4030,22 +3557,18 @@ msgid "Create Occluder Polygon" msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Edit existing polygon:" msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "LMB: Move Point." msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Ctrl+LMB: Split Segment." msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "RMB: Erase Point." msgstr "" @@ -4146,6 +3669,10 @@ msgid "Create Outline" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Body" msgstr "" @@ -4273,12 +3800,72 @@ msgstr "" msgid "Populate" msgstr "" -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Create Navigation Polygon" +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Bake!" +msgstr "" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Bake the navigation mesh.\n" +msgstr "" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Clear the navigation mesh." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Setting up Configuration..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Calculating grid size..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating heightfield..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Marking walkable triangles..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Constructing compact heightfield..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Eroding walkable area..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Partioning..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating contours..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating polymesh..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Converting to native navigation mesh..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Navigation Mesh Generator Setup:" +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Parsing Geometry..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Done!" msgstr "" #: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Remove Poly And Point" +msgid "Create Navigation Polygon" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4452,16 +4039,19 @@ msgid "Curve Point #" msgstr "" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Point Pos" -msgstr "" +#, fuzzy +msgid "Set Curve Point Position" +msgstr "Odstrani Signal" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve In Pos" -msgstr "" +#, fuzzy +msgid "Set Curve In Position" +msgstr "Odstrani Signal" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Out Pos" -msgstr "" +#, fuzzy +msgid "Set Curve Out Position" +msgstr "Odstrani Signal" #: editor/plugins/path_editor_plugin.cpp msgid "Split Path" @@ -4521,6 +4111,14 @@ msgid "Scale Polygon" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit" +msgstr "Uredi" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon->UV" msgstr "" @@ -4575,63 +4173,10 @@ msgstr "" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "" -#: editor/plugins/rich_text_editor_plugin.cpp -msgid "Parse BBCode" -msgstr "" - -#: editor/plugins/sample_editor_plugin.cpp -msgid "Length:" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Open Sample File(s)" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "ERROR: Couldn't load sample!" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Add Sample" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Rename Sample" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Delete Sample" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "16 Bits" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "8 Bits" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Stereo" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Mono" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/script_editor_debugger.cpp -msgid "Format" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Pitch" -msgstr "" - #: editor/plugins/script_editor_plugin.cpp msgid "Clear Recent Files" msgstr "" @@ -4723,6 +4268,10 @@ msgstr "" msgid "Close All" msgstr "Zapri" +#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp +msgid "Run" +msgstr "" + #: editor/plugins/script_editor_plugin.cpp msgid "Toggle Scripts Panel" msgstr "" @@ -4764,18 +4313,6 @@ msgid "Debug with external editor" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Window" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Left" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Right" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp msgid "Open Godot online documentation" msgstr "" @@ -4858,7 +4395,7 @@ msgstr "" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Copy" msgstr "" @@ -5122,10 +4659,6 @@ msgid "View Plane Transform." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Scaling to %s%%." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." msgstr "" @@ -5142,10 +4675,6 @@ msgid "Top View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Top" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "" @@ -5375,6 +4904,10 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Configure Snap.." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Local Coords" msgstr "" @@ -5520,6 +5053,10 @@ msgid "Speed (FPS):" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Loop" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animation Frames" msgstr "" @@ -5532,11 +5069,11 @@ msgid "Insert Empty (After)" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Up" +msgid "Move (Before)" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Down" +msgid "Move (After)" msgstr "" #: editor/plugins/style_box_editor_plugin.cpp @@ -5700,6 +5237,10 @@ msgid "Style" msgstr "" #: editor/plugins/theme_editor_plugin.cpp +msgid "Font" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp msgid "Color" msgstr "" @@ -5748,7 +5289,7 @@ msgid "Mirror Y" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Bucket" +msgid "Paint Tile" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp @@ -5812,6 +5353,10 @@ msgid "Delete preset '%s'?" msgstr "" #: editor/project_export.cpp +msgid "Export templates for this platform are missing/corrupted: " +msgstr "" + +#: editor/project_export.cpp msgid "Presets" msgstr "" @@ -5882,19 +5427,29 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +msgid "Export templates for this platform are missing/corrupted:" +msgstr "" + +#: editor/project_export.cpp msgid "Export With Debug" msgstr "" #: editor/project_manager.cpp -msgid "Invalid project path, the path must exist!" +msgid "The path does not exists." msgstr "" #: editor/project_manager.cpp -msgid "Invalid project path, project.godot must not exist." +msgid "Please choose a 'project.godot' file." +msgstr "" + +#: editor/project_manager.cpp +msgid "" +"Your project will be created in a non empty folder (you might want to create " +"a new folder)." msgstr "" #: editor/project_manager.cpp -msgid "Invalid project path, project.godot must exist." +msgid "Please choose a folder that does not contain a 'project.godot' file." msgstr "" #: editor/project_manager.cpp @@ -5902,10 +5457,26 @@ msgid "Imported Project" msgstr "" #: editor/project_manager.cpp +msgid " " +msgstr "" + +#: editor/project_manager.cpp +msgid "It would be a good idea to name your project." +msgstr "" + +#: editor/project_manager.cpp msgid "Invalid project path (changed anything?)." msgstr "" #: editor/project_manager.cpp +msgid "Couldn't get project.godot in project path." +msgstr "" + +#: editor/project_manager.cpp +msgid "Couldn't edit project.godot in project path." +msgstr "" + +#: editor/project_manager.cpp msgid "Couldn't create project.godot in project path." msgstr "" @@ -5914,15 +5485,20 @@ msgid "The following files failed extraction from package:" msgstr "" #: editor/project_manager.cpp -msgid "Import Existing Project" +#, fuzzy +msgid "Rename Project" +msgstr "Preimenuj Funkcijo" + +#: editor/project_manager.cpp +msgid "Couldn't get project.godot in the project path." msgstr "" #: editor/project_manager.cpp -msgid "Project Path (Must Exist):" +msgid "New Game Project" msgstr "" #: editor/project_manager.cpp -msgid "Project Name:" +msgid "Import Existing Project" msgstr "" #: editor/project_manager.cpp @@ -5930,19 +5506,23 @@ msgid "Create New Project" msgstr "" #: editor/project_manager.cpp -msgid "Project Path:" +msgid "Install Project:" msgstr "" #: editor/project_manager.cpp -msgid "Install Project:" +msgid "Project Name:" msgstr "" #: editor/project_manager.cpp -msgid "Browse" +msgid "Create folder" msgstr "" #: editor/project_manager.cpp -msgid "New Game Project" +msgid "Project Path:" +msgstr "" + +#: editor/project_manager.cpp +msgid "Browse" msgstr "" #: editor/project_manager.cpp @@ -5954,6 +5534,10 @@ msgid "Unnamed Project" msgstr "" #: editor/project_manager.cpp +msgid "Can't open project" +msgstr "" + +#: editor/project_manager.cpp msgid "Are you sure to open more than one project?" msgstr "" @@ -5989,10 +5573,6 @@ msgid "Project List" msgstr "" #: editor/project_manager.cpp -msgid "Run" -msgstr "" - -#: editor/project_manager.cpp msgid "Scan" msgstr "" @@ -6050,17 +5630,14 @@ msgid "Add Input Action Event" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Meta+" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Shift+" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Alt+" msgstr "" @@ -6121,7 +5698,7 @@ msgstr "Spremeni" msgid "Joypad Axis Index:" msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Axis" msgstr "" @@ -6141,31 +5718,31 @@ msgstr "" msgid "Add Event" msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Device" msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Button" msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Left Button." msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Right Button." msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Middle Button." msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Up." msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Down." msgstr "" @@ -6175,7 +5752,7 @@ msgid "Add Global Property" msgstr "Dodaj Getter Lastnost" #: editor/project_settings_editor.cpp -msgid "Select an setting item first!" +msgid "Select a setting item first!" msgstr "" #: editor/project_settings_editor.cpp @@ -6192,6 +5769,14 @@ msgid "Delete Item" msgstr "IzbriÅ¡i Izbrano" #: editor/project_settings_editor.cpp +msgid "Can't contain '/' or ':'" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Already existing" +msgstr "" + +#: editor/project_settings_editor.cpp msgid "Error saving settings." msgstr "" @@ -6341,10 +5926,18 @@ msgid "New Script" msgstr "" #: editor/property_editor.cpp +msgid "Make Unique" +msgstr "" + +#: editor/property_editor.cpp msgid "Show in File System" msgstr "" #: editor/property_editor.cpp +msgid "Convert To %s" +msgstr "" + +#: editor/property_editor.cpp msgid "Error loading file: Not a resource!" msgstr "" @@ -6382,6 +5975,10 @@ msgid "Select Property" msgstr "Dodaj Setter Lastnost" #: editor/property_selector.cpp +msgid "Select Virtual Method" +msgstr "" + +#: editor/property_selector.cpp msgid "Select Method" msgstr "" @@ -6409,26 +6006,6 @@ msgstr "" msgid "Reparent" msgstr "" -#: editor/resources_dock.cpp -msgid "Create New Resource" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Open Resource" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Save Resource" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Resource Tools" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Make Local" -msgstr "" - #: editor/run_settings_dialog.cpp msgid "Run Mode:" msgstr "" @@ -6555,14 +6132,6 @@ msgid "Sub-Resources:" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Edit Groups" -msgstr "" - -#: editor/scene_tree_dock.cpp -msgid "Edit Connections" -msgstr "" - -#: editor/scene_tree_dock.cpp msgid "Clear Inheritance" msgstr "" @@ -6743,6 +6312,14 @@ msgid "Invalid base path" msgstr "" #: editor/script_create_dialog.cpp +msgid "Directory of the same name exists" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "File exists, will be reused" +msgstr "" + +#: editor/script_create_dialog.cpp msgid "Invalid extension" msgstr "" @@ -6785,6 +6362,10 @@ msgid "Load existing script file" msgstr "" #: editor/script_create_dialog.cpp +msgid "Language" +msgstr "" + +#: editor/script_create_dialog.cpp msgid "Inherits" msgstr "" @@ -6826,6 +6407,10 @@ msgid "Function:" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Errors" msgstr "" @@ -6906,6 +6491,10 @@ msgid "Type" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Format" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Usage" msgstr "" @@ -6981,12 +6570,28 @@ msgstr "" msgid "Change Probe Extents" msgstr "" +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Library" +msgstr "" + +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Status" +msgstr "" + +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Libraries: " +msgstr "" + +#: modules/gdnative/register_types.cpp +msgid "GDNative" +msgstr "" + #: 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/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h #: 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." @@ -7038,10 +6643,6 @@ msgid "GridMap Duplicate Selection" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Paint" -msgstr "" - -#: modules/gridmap/grid_map_editor_plugin.cpp msgid "Snap View" msgstr "" @@ -7133,12 +6734,8 @@ msgstr "" msgid "Pick Distance:" msgstr "" -#: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Tiles" -msgstr "" - -#: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Areas" +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "Builds" msgstr "" #: modules/visual_script/visual_script.cpp @@ -7340,10 +6937,18 @@ msgid "Return" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Call" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Get" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Script already has function '%s'" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Input Value" msgstr "" @@ -7714,6 +7319,12 @@ msgid "" "order for AnimatedSprite3D to display frames." msgstr "" +#: scene/3d/vehicle_body.cpp +msgid "" +"VehicleWheel serves to provide a wheel system to a VehicleBody. Please use " +"it as a child of a VehicleBody." +msgstr "" + #: scene/gui/color_picker.cpp msgid "Raw Mode" msgstr "" @@ -7723,15 +7334,15 @@ msgid "Add current color as a preset" msgstr "" #: scene/gui/dialogs.cpp -msgid "Alert!" +msgid "Cancel" msgstr "" #: scene/gui/dialogs.cpp -msgid "Please Confirm..." +msgid "Alert!" msgstr "" -#: scene/gui/input_action.cpp -msgid "Ctrl+" +#: scene/gui/dialogs.cpp +msgid "Please Confirm..." msgstr "" #: scene/gui/popup.cpp @@ -7762,6 +7373,22 @@ msgid "" "texture to some node for display." msgstr "" +#: scene/resources/dynamic_font.cpp +msgid "Error initializing FreeType." +msgstr "" + +#: scene/resources/dynamic_font.cpp +msgid "Unknown font format." +msgstr "" + +#: scene/resources/dynamic_font.cpp +msgid "Error loading font." +msgstr "" + +#: scene/resources/dynamic_font.cpp +msgid "Invalid font size." +msgstr "" + #, fuzzy #~ msgid "Invalid unique name." #~ msgstr "Neveljaven indeks lastnosti imena." diff --git a/editor/translations/th.po b/editor/translations/th.po index e89bbf043a..33d871e421 100644 --- a/editor/translations/th.po +++ b/editor/translations/th.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2017-07-15 12:39+0000\n" +"PO-Revision-Date: 2017-10-03 16:49+0000\n" "Last-Translator: Poommetee Ketson <poommetee@protonmail.com>\n" "Language-Team: Thai <https://hosted.weblate.org/projects/godot-engine/godot/" "th/>\n" @@ -16,7 +16,7 @@ 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.16-dev\n" +"X-Generator: Weblate 2.17-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -113,15 +113,15 @@ msgstr "ลบที่เลืà¸à¸" #: editor/animation_editor.cpp msgid "Continuous" -msgstr "ผันà¹à¸›à¸£" +msgstr "ต่à¸à¹€à¸™à¸·à¹ˆà¸à¸‡" #: editor/animation_editor.cpp msgid "Discrete" -msgstr "ค้าง" +msgstr "ไม่ต่à¸à¹€à¸™à¸·à¹ˆà¸à¸‡" #: editor/animation_editor.cpp msgid "Trigger" -msgstr "ไม่ค้าง" +msgstr "ทริà¸à¹€à¸à¸à¸£à¹Œ" #: editor/animation_editor.cpp msgid "Anim Add Key" @@ -193,10 +193,9 @@ msgid "Create %d NEW tracks and insert keys?" msgstr "เพิ่ม %d à¹à¸—ร็à¸à¹ƒà¸«à¸¡à¹ˆà¹à¸¥à¸°à¹€à¸žà¸´à¹ˆà¸¡à¸„ีย์?" #: editor/animation_editor.cpp editor/create_dialog.cpp -#: editor/editor_audio_buses.cpp +#: editor/editor_audio_buses.cpp editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp #: editor/plugins/mesh_instance_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp editor/project_manager.cpp #: editor/script_create_dialog.cpp msgid "Create" @@ -358,261 +357,6 @@ msgstr "เปลี่ยนประเภทตัวà¹à¸›à¸£à¹ƒà¸™à¸à¸²à¸£ msgid "Change Array Value" msgstr "เปลี่ยนค่าในà¸à¸²à¸£à¹Œà¹€à¸£à¸¢à¹Œ" -#: editor/asset_library_editor_plugin.cpp -msgid "Free" -msgstr "ฟรี" - -#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp -msgid "Version:" -msgstr "รุ่น:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Contents:" -msgstr "ประà¸à¸à¸šà¸”้วย:" - -#: editor/asset_library_editor_plugin.cpp -msgid "View Files" -msgstr "ดูไฟล์" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_help.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp -msgid "Description:" -msgstr "รายละเà¸à¸µà¸¢à¸”:" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -#: editor/project_manager.cpp -msgid "Install" -msgstr "ติดตั้ง" - -#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp -#: editor/connections_dialog.cpp editor/export_template_manager.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -#: editor/project_settings_editor.cpp editor/property_editor.cpp -#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Close" -msgstr "ปิด" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve hostname:" -msgstr "ไม่พบตำà¹à¸«à¸™à¹ˆà¸‡à¸™à¸µà¹‰:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve." -msgstr "ค้นหาไม่สำเร็จ" - -#: editor/asset_library_editor_plugin.cpp -msgid "Connection error, please try again." -msgstr "เชื่à¸à¸¡à¸•่à¸à¹„ม่ได้ à¸à¸£à¸¸à¸“าลà¸à¸‡à¹ƒà¸«à¸¡à¹ˆ" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't connect." -msgstr "เชื่à¸à¸¡à¸•่à¸à¹„ม่ได้" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't connect to host:" -msgstr "ไม่สามารถเชื่à¸à¸¡à¸•่à¸à¸à¸±à¸šà¹‚ฮสต์:" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response from host:" -msgstr "ไม่มีà¸à¸²à¸£à¸•à¸à¸šà¸à¸¥à¸±à¸šà¸ˆà¸²à¸à¹‚ฮสต์:" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response." -msgstr "ไม่มีà¸à¸²à¸£à¸•à¸à¸šà¸à¸¥à¸±à¸š" - -#: editor/asset_library_editor_plugin.cpp -msgid "Request failed, return code:" -msgstr "à¸à¸²à¸£à¸£à¹‰à¸à¸‡à¸‚à¸à¸œà¸´à¸”พลาด รหัส:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Req. Failed." -msgstr "ร้à¸à¸‡à¸‚à¸à¸œà¸´à¸”พลาด" - -#: editor/asset_library_editor_plugin.cpp -msgid "Request failed, too many redirects" -msgstr "à¸à¸²à¸£à¸£à¹‰à¸à¸‡à¸‚à¸à¸œà¸´à¸”พลาด เปลี่ยนทางมาà¸à¹€à¸à¸´à¸™à¹„ป" - -#: editor/asset_library_editor_plugin.cpp -msgid "Redirect Loop." -msgstr "เปลี่ยนทางมาà¸à¹€à¸à¸´à¸™à¹„ป" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed:" -msgstr "ผิดพลาด:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Bad download hash, assuming file has been tampered with." -msgstr "à¹à¸®à¸Šà¸œà¸´à¸”พลาด ไฟล์ดาวน์โหลดà¸à¸²à¸ˆà¹€à¸ªà¸µà¸¢à¸«à¸²à¸¢" - -#: editor/asset_library_editor_plugin.cpp -msgid "Expected:" -msgstr "ที่ควรจะเป็น:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Got:" -msgstr "ที่ได้รับ:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed sha256 hash check" -msgstr "ผิดพลาดในà¸à¸²à¸£à¸•รวจสà¸à¸šà¹à¸®à¸Š SHA256" - -#: editor/asset_library_editor_plugin.cpp -msgid "Asset Download Error:" -msgstr "à¸à¸²à¸£à¸”าวน์โหลดผิดพลาด:" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -msgid "Success!" -msgstr "สำเร็จ!" - -#: editor/asset_library_editor_plugin.cpp -msgid "Fetching:" -msgstr "à¸à¸³à¸¥à¸±à¸‡à¸£à¸±à¸šà¸‚้à¸à¸¡à¸¹à¸¥:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Resolving.." -msgstr "à¸à¸³à¸¥à¸±à¸‡à¸„้นหา.." - -#: editor/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "à¸à¸³à¸¥à¸±à¸‡à¹€à¸Šà¸·à¹ˆà¸à¸¡à¸•่à¸.." - -#: editor/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "à¸à¸³à¸¥à¸±à¸‡à¸£à¹‰à¸à¸‡à¸‚à¸.." - -#: editor/asset_library_editor_plugin.cpp -msgid "Error making request" -msgstr "à¸à¸²à¸£à¸£à¹‰à¸à¸‡à¸‚à¸à¸œà¸´à¸”พลาด" - -#: editor/asset_library_editor_plugin.cpp -msgid "Idle" -msgstr "พร้à¸à¸¡à¹ƒà¸Šà¹‰à¸‡à¸²à¸™" - -#: editor/asset_library_editor_plugin.cpp -msgid "Retry" -msgstr "ลà¸à¸‡à¹ƒà¸«à¸¡à¹ˆ" - -#: editor/asset_library_editor_plugin.cpp -msgid "Download Error" -msgstr "ดาวน์โหลดผิดพลาด" - -#: editor/asset_library_editor_plugin.cpp -msgid "Download for this asset is already in progress!" -msgstr "à¸à¸³à¸¥à¸±à¸‡à¸”าวน์โหลดไฟล์นี้à¸à¸¢à¸¹à¹ˆà¹à¸¥à¹‰à¸§!" - -#: editor/asset_library_editor_plugin.cpp -msgid "first" -msgstr "à¹à¸£à¸à¸ªà¸¸à¸”" - -#: editor/asset_library_editor_plugin.cpp -msgid "prev" -msgstr "à¸à¹ˆà¸à¸™à¸«à¸™à¹‰à¸²" - -#: editor/asset_library_editor_plugin.cpp -msgid "next" -msgstr "ถัดไป" - -#: editor/asset_library_editor_plugin.cpp -msgid "last" -msgstr "ท้ายสุด" - -#: editor/asset_library_editor_plugin.cpp -msgid "All" -msgstr "ทั้งหมด" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/property_selector.cpp editor/quick_open.cpp -#: editor/settings_config_dialog.cpp -msgid "Search:" -msgstr "ค้นหา:" - -#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Search" -msgstr "ค้นหา" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/project_manager.cpp -msgid "Import" -msgstr "นำเข้า" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Plugins" -msgstr "ปลั๊à¸à¸à¸´à¸™" - -#: editor/asset_library_editor_plugin.cpp -msgid "Sort:" -msgstr "เรียงตาม:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Reverse" -msgstr "ย้à¸à¸™à¸à¸¥à¸±à¸š" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Category:" -msgstr "หมวดหมู่:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Site:" -msgstr "ไซต์:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "à¸à¸²à¸£à¸ªà¸™à¸±à¸šà¸ªà¸™à¸¸à¸™.." - -#: editor/asset_library_editor_plugin.cpp -msgid "Official" -msgstr "ผู้พัฒนา" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -msgid "Community" -msgstr "ชุมชน" - -#: editor/asset_library_editor_plugin.cpp -msgid "Testing" -msgstr "ทดสà¸à¸š" - -#: editor/asset_library_editor_plugin.cpp -msgid "Assets ZIP File" -msgstr "ไฟล์ ZIP" - -#: editor/call_dialog.cpp -msgid "Method List For '%s':" -msgstr "รายชื่à¸à¹€à¸¡à¸—็à¸à¸”ขà¸à¸‡ '%s':" - -#: editor/call_dialog.cpp modules/visual_script/visual_script_editor.cpp -msgid "Call" -msgstr "เรียà¸" - -#: editor/call_dialog.cpp -msgid "Method List:" -msgstr "รายชื่à¸à¹€à¸¡à¸—็à¸à¸”:" - -#: editor/call_dialog.cpp -msgid "Arguments:" -msgstr "ตัวà¹à¸›à¸£:" - -#: editor/call_dialog.cpp -msgid "Return:" -msgstr "คืนค่า:" - #: editor/code_editor.cpp msgid "Go to Line" msgstr "ไปยังบรรทัด" @@ -649,6 +393,14 @@ msgstr "ทั้งคำ" msgid "Selection Only" msgstr "เฉพาะที่à¸à¸³à¸¥à¸±à¸‡à¹€à¸¥à¸·à¸à¸" +#: editor/code_editor.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp +msgid "Search" +msgstr "ค้นหา" + #: editor/code_editor.cpp editor/editor_help.cpp msgid "Find" msgstr "ค้นหา" @@ -681,11 +433,11 @@ msgstr "เตืà¸à¸™à¸à¹ˆà¸à¸™à¹à¸—นที่" msgid "Skip" msgstr "ข้าม" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom In" msgstr "ขยาย" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom Out" msgstr "ย่à¸" @@ -752,6 +504,20 @@ msgstr "เรียà¸à¸ ายหลัง" msgid "Oneshot" msgstr "ครั้งเดียว" +#: editor/connections_dialog.cpp editor/dependency_editor.cpp +#: editor/export_template_manager.cpp +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Close" +msgstr "ปิด" + #: editor/connections_dialog.cpp msgid "Connect" msgstr "เชื่à¸à¸¡" @@ -777,7 +543,7 @@ msgstr "เชื่à¸à¸¡à¹‚ยง.." msgid "Disconnect" msgstr "ลบà¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸à¸¡à¹‚ยง" -#: editor/connections_dialog.cpp editor/node_dock.cpp +#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" msgstr "สัà¸à¸à¸²à¸“" @@ -794,12 +560,25 @@ msgstr "ที่ชื่นชà¸à¸š:" msgid "Recent:" msgstr "ล่าสุด:" +#: editor/create_dialog.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp +#: editor/quick_open.cpp editor/settings_config_dialog.cpp +msgid "Search:" +msgstr "ค้นหา:" + #: editor/create_dialog.cpp editor/editor_help.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp #: editor/quick_open.cpp msgid "Matches:" msgstr "พบ:" +#: editor/create_dialog.cpp editor/editor_help.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp +#: editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "รายละเà¸à¸µà¸¢à¸”:" + #: editor/dependency_editor.cpp msgid "Search Replacement For:" msgstr "หาตัวà¹à¸—นขà¸à¸‡:" @@ -859,6 +638,10 @@ msgid "Owners Of:" msgstr "เจ้าขà¸à¸‡à¸‚à¸à¸‡:" #: editor/dependency_editor.cpp +msgid "Remove selected files from the project? (no undo)" +msgstr "ลบไฟล์ที่เลืà¸à¸à¸à¸à¸à¸ˆà¸²à¸à¹‚ปรเจà¸à¸•์? (ย้à¸à¸™à¸à¸¥à¸±à¸šà¹„ม่ได้)" + +#: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" @@ -868,8 +651,9 @@ msgstr "" "ยืนยันจะลบหรืà¸à¹„ม่? (ย้à¸à¸™à¸à¸¥à¸±à¸šà¹„ม่ได้)" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (no undo)" -msgstr "ลบไฟล์ที่เลืà¸à¸à¸à¸à¸à¸ˆà¸²à¸à¹‚ปรเจà¸à¸•์? (ย้à¸à¸™à¸à¸¥à¸±à¸šà¹„ม่ได้)" +#, fuzzy +msgid "Cannot remove:\n" +msgstr "ค้นหาไม่สำเร็จ" #: editor/dependency_editor.cpp msgid "Error loading:" @@ -935,19 +719,12 @@ msgid "Godot Engine contributors" msgstr "ผู้ช่วยพัฒนา Godot Engine" #: editor/editor_about.cpp -#, fuzzy -msgid "Authors" -msgstr "โดย:" - -#: editor/editor_about.cpp -#, fuzzy msgid "Project Founders" -msgstr "ตัวจัดà¸à¸²à¸£à¹‚ปรเจà¸à¸•์" +msgstr "ผู้บุà¸à¹€à¸šà¸´à¸à¹‚ครงà¸à¸²à¸£" #: editor/editor_about.cpp -#, fuzzy msgid "Lead Developer" -msgstr "ผู้พัฒนา" +msgstr "ผู้พัฒนาหลัà¸" #: editor/editor_about.cpp editor/project_manager.cpp msgid "Project Manager" @@ -958,118 +735,154 @@ msgid "Developers" msgstr "ผู้พัฒนา" #: editor/editor_about.cpp -msgid "License" +msgid "Authors" +msgstr "ทีมงาน" + +#: editor/editor_about.cpp +msgid "Platinum Sponsors" msgstr "" #: editor/editor_about.cpp -msgid "Thirdparty License" +msgid "Gold Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Mini Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Donors" msgstr "" #: editor/editor_about.cpp +msgid "Silver Donors" +msgstr "" + +#: editor/editor_about.cpp +#, fuzzy +msgid "Bronze Donors" +msgstr "คัดลà¸à¸à¸šà¸£à¸£à¸—ัดลงมา" + +#: editor/editor_about.cpp +msgid "Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "License" +msgstr "สัà¸à¸à¸²à¸à¸™à¸¸à¸à¸²à¸•" + +#: editor/editor_about.cpp +msgid "Thirdparty License" +msgstr "สัà¸à¸à¸²à¸à¸™à¸¸à¸à¸²à¸•ไลบรารี" + +#: editor/editor_about.cpp msgid "" "Godot Engine relies on a number of thirdparty free and open source " "libraries, all compatible with the terms of its MIT license. The following " "is an exhaustive list of all such thirdparty components with their " "respective copyright statements and license terms." msgstr "" +"Godot Engine à¸à¸²à¸¨à¸±à¸¢à¹„ลบรารีต่าง ๆ ที่นำมาใช้ได้à¸à¸¢à¹ˆà¸²à¸‡à¹€à¸ªà¸£à¸µà¹à¸¥à¸°à¹€à¸›à¸´à¸”เผยโค้ดเป็นจำนวนมาภ" +"ซึ่งเข้าà¸à¸±à¸™à¹„ด้à¸à¸±à¸šà¸ªà¸±à¸à¸à¸²à¸à¸™à¸¸à¸à¸²à¸• MIT ต่à¸à¹„ปนี้เป็นรายชื่à¸à¸‚à¸à¸‡à¹„ลบรารีทั้งหมด รวมถึงข้à¸à¸„วามลิขสิทธิ์ " +"à¹à¸¥à¸°à¸‚้à¸à¸à¸³à¸«à¸™à¸”à¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¸‚à¸à¸‡à¹à¸•่ละไลบรารี" #: editor/editor_about.cpp -#, fuzzy msgid "All Components" -msgstr "ประà¸à¸à¸šà¸”้วย:" +msgstr "ทั้งหมด" #: editor/editor_about.cpp -#, fuzzy msgid "Components" -msgstr "ประà¸à¸à¸šà¸”้วย:" +msgstr "ไลบรารี" #: editor/editor_about.cpp msgid "Licenses" -msgstr "" +msgstr "สัà¸à¸à¸²à¸à¸™à¸¸à¸à¸²à¸•" #: editor/editor_asset_installer.cpp editor/project_manager.cpp msgid "Error opening package file, not in zip format." -msgstr "" +msgstr "ผิดพลาดขณะเปิดไฟล์à¹à¸žà¸„เà¸à¸ˆ, ไม่ใช่รูปà¹à¸šà¸š zip" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "Uncompressing Assets" -msgstr "ไม่บีบà¸à¸±à¸”" +msgstr "à¸à¸³à¸¥à¸±à¸‡à¸„ลายบีบà¸à¸±à¸”" #: editor/editor_asset_installer.cpp editor/project_manager.cpp msgid "Package Installed Successfully!" msgstr "ติดตั้งà¹à¸žà¸„เà¸à¸ˆà¹€à¸ªà¸£à¹‡à¸ˆà¸ªà¸¡à¸šà¸¹à¸£à¸“์!" #: editor/editor_asset_installer.cpp -#, fuzzy +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Success!" +msgstr "สำเร็จ!" + +#: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp +msgid "Install" +msgstr "ติดตั้ง" + +#: editor/editor_asset_installer.cpp msgid "Package Installer" -msgstr "ติดตั้งà¹à¸žà¸„เà¸à¸ˆà¹€à¸ªà¸£à¹‡à¸ˆà¸ªà¸¡à¸šà¸¹à¸£à¸“์!" +msgstr "ตัวติดตั้งà¹à¸žà¸„เà¸à¸ˆ" #: editor/editor_audio_buses.cpp msgid "Speakers" -msgstr "" +msgstr "ลำโพง" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Add Effect" -msgstr "เพิ่ม" +msgstr "เพิ่มเà¸à¸Ÿà¹€à¸Ÿà¸à¸•์" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Rename Audio Bus" -msgstr "เปิดเลย์เà¸à¸²à¸•์ขà¸à¸‡ Audio Bus" +msgstr "เปลี่ยนชื่ภAudio Bus" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Toggle Audio Bus Solo" -msgstr "เปิดเลย์เà¸à¸²à¸•์ขà¸à¸‡ Audio Bus" +msgstr "สลับ Solo ขà¸à¸‡ Audio Bus" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Toggle Audio Bus Mute" -msgstr "เปิดเลย์เà¸à¸²à¸•์ขà¸à¸‡ Audio Bus" +msgstr "สลับ Mute ขà¸à¸‡ Audio Bus" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Bypass Effects" -msgstr "" +msgstr "สลับ Bypass ขà¸à¸‡ Audio Bus" #: editor/editor_audio_buses.cpp msgid "Select Audio Bus Send" -msgstr "" +msgstr "เลืà¸à¸ Audio Bus ที่ส่งต่à¸" #: editor/editor_audio_buses.cpp msgid "Add Audio Bus Effect" -msgstr "" +msgstr "เพิ่มเà¸à¸Ÿà¹€à¸Ÿà¸à¸•์เสียง" #: editor/editor_audio_buses.cpp msgid "Move Bus Effect" -msgstr "" +msgstr "ย้ายเà¸à¸Ÿà¹€à¸Ÿà¸à¸•์เสียง" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Delete Bus Effect" -msgstr "ลบสิ่งที่เลืà¸à¸" +msgstr "ลบเà¸à¸Ÿà¹€à¸Ÿà¸à¸•์เสียง" #: editor/editor_audio_buses.cpp msgid "Audio Bus, Drag and Drop to rearrange." -msgstr "" - -#: editor/editor_audio_buses.cpp -#, fuzzy -msgid "Bus options" -msgstr "ตัวเลืà¸à¸à¸‰à¸²à¸à¸¢à¹ˆà¸à¸¢" +msgstr "Audio Bus, ลาà¸à¹à¸¥à¸°à¸§à¸²à¸‡à¹€à¸žà¸·à¹ˆà¸à¸¢à¹‰à¸²à¸¢à¸•ำà¹à¸«à¸™à¹ˆà¸‡" #: editor/editor_audio_buses.cpp msgid "Solo" -msgstr "" +msgstr "โซโล" #: editor/editor_audio_buses.cpp msgid "Mute" -msgstr "" +msgstr "ปิดเสียง" #: editor/editor_audio_buses.cpp msgid "Bypass" -msgstr "" +msgstr "ข้าม" + +#: editor/editor_audio_buses.cpp +msgid "Bus options" +msgstr "ตัวเลืà¸à¸ Bus" #: editor/editor_audio_buses.cpp editor/plugins/tile_map_editor_plugin.cpp #: editor/scene_tree_dock.cpp @@ -1078,32 +891,37 @@ msgstr "ทำซ้ำ" #: editor/editor_audio_buses.cpp #, fuzzy +msgid "Reset Volume" +msgstr "รีเซ็ตซูม" + +#: editor/editor_audio_buses.cpp msgid "Delete Effect" -msgstr "ลบสิ่งที่เลืà¸à¸" +msgstr "ลบเà¸à¸Ÿà¹€à¸Ÿà¸à¸•์" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Add Audio Bus" -msgstr "เพิ่ม Bus" +msgstr "เพิ่ม Audio Bus" #: editor/editor_audio_buses.cpp msgid "Master bus can't be deleted!" -msgstr "" +msgstr "ลบ Bus หลัà¸à¹„ม่ได้!" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Delete Audio Bus" -msgstr "ลบเลย์เà¸à¸²à¸•์" +msgstr "ลบ Audio Bus" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Duplicate Audio Bus" -msgstr "ทำซ้ำà¹à¸à¸™à¸´à¹€à¸¡à¸Šà¸±à¸™" +msgstr "ทำซ้ำ Audio Bus" #: editor/editor_audio_buses.cpp #, fuzzy +msgid "Reset Bus Volume" +msgstr "รีเซ็ตซูม" + +#: editor/editor_audio_buses.cpp msgid "Move Audio Bus" -msgstr "เปิดเลย์เà¸à¸²à¸•์ขà¸à¸‡ Audio Bus" +msgstr "ย้าย Audio Bus" #: editor/editor_audio_buses.cpp msgid "Save Audio Bus Layout As.." @@ -1119,32 +937,28 @@ msgstr "เปิดเลย์เà¸à¸²à¸•์ขà¸à¸‡ Audio Bus" #: editor/editor_audio_buses.cpp msgid "There is no 'res://default_bus_layout.tres' file." -msgstr "" +msgstr "ไม่พบไฟล์ 'res://default_bus_layout.tres'" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Invalid file, not an audio bus layout." -msgstr "" -"นามสà¸à¸¸à¸¥à¹„ม่ถูà¸à¸•้à¸à¸‡\n" -"à¸à¸£à¸¸à¸“าใช้ .font" +msgstr "ไฟล์ไม่ถูà¸à¸•้à¸à¸‡, ไม่ใช่เลย์เà¸à¸²à¸•์ขà¸à¸‡ Audio Bus" #: editor/editor_audio_buses.cpp msgid "Add Bus" msgstr "เพิ่ม Bus" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Create a new Bus Layout." -msgstr "สร้างรีซà¸à¸£à¹Œà¸ªà¹ƒà¸«à¸¡à¹ˆ" +msgstr "สร้างเลย์เà¸à¸²à¸•์ Bus ใหม่" -#: editor/editor_audio_buses.cpp editor/script_create_dialog.cpp +#: editor/editor_audio_buses.cpp editor/property_editor.cpp +#: editor/script_create_dialog.cpp msgid "Load" msgstr "โหลด" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Load an existing Bus Layout." -msgstr "โหลดรีซà¸à¸£à¹Œà¸ªà¸—ี่มีà¸à¸¢à¸¹à¹ˆà¹à¸¥à¹‰à¸§à¹ƒà¸™à¸”ิสà¸à¹Œà¹à¸¥à¸°à¸—ำà¸à¸²à¸£à¸›à¸£à¸±à¸šà¹à¸•่ง" +msgstr "โหลดเลย์เà¸à¸²à¸•์ Bus จาà¸à¸”ิสà¸à¹Œ" #: editor/editor_audio_buses.cpp #: editor/plugins/animation_player_editor_plugin.cpp @@ -1152,18 +966,16 @@ msgid "Save As" msgstr "บันทึà¸à¹€à¸›à¹‡à¸™" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Save this Bus Layout to a file." -msgstr "บันทึà¸à¹€à¸¥à¸¢à¹Œà¹€à¸à¸²à¸•์ขà¸à¸‡ Audio Bus เป็น.." +msgstr "บันทึà¸à¹€à¸¥à¸¢à¹Œà¹€à¸à¸²à¸•์ขà¸à¸‡ Bus นี้เป็นไฟล์" #: editor/editor_audio_buses.cpp editor/import_dock.cpp -#, fuzzy msgid "Load Default" -msgstr "ค่าเริ่มต้น" +msgstr "โหลดค่าเริ่มต้น" #: editor/editor_audio_buses.cpp msgid "Load the default Bus Layout." -msgstr "" +msgstr "โหลดค่าเริ่มต้นเลย์เà¸à¸²à¸•์ Bus" #: editor/editor_autoload_settings.cpp msgid "Invalid name." @@ -1230,7 +1042,7 @@ msgid "Rearrange Autoloads" msgstr "จัดลำดับà¸à¸à¹‚ต้โหลด" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp scene/gui/file_dialog.cpp +#: scene/gui/file_dialog.cpp msgid "Path:" msgstr "ตำà¹à¸«à¸™à¹ˆà¸‡:" @@ -1238,9 +1050,7 @@ msgstr "ตำà¹à¸«à¸™à¹ˆà¸‡:" msgid "Node Name:" msgstr "ชื่à¸à¹‚หนด:" -#: editor/editor_autoload_settings.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp editor/project_manager.cpp +#: editor/editor_autoload_settings.cpp editor/project_manager.cpp msgid "Name" msgstr "ชื่à¸" @@ -1265,27 +1075,27 @@ msgid "Updating scene.." msgstr "à¸à¸±à¸žà¹€à¸”ทฉาà¸.." #: editor/editor_dir_dialog.cpp -#, fuzzy msgid "Please select a base directory first" -msgstr "à¸à¸£à¸¸à¸“าบันทึà¸à¸‰à¸²à¸à¸à¹ˆà¸à¸™" +msgstr "à¸à¸£à¸¸à¸“าเลืà¸à¸à¹‚ฟลเดà¸à¸£à¹Œà¹€à¸£à¸´à¹ˆà¸¡à¸•้นà¸à¹ˆà¸à¸™" #: editor/editor_dir_dialog.cpp msgid "Choose a Directory" msgstr "เลืà¸à¸à¹‚ฟลเดà¸à¸£à¹Œ" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Create Folder" msgstr "สร้างโฟลเดà¸à¸£à¹Œ" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: editor/editor_plugin_settings.cpp editor/plugins/theme_editor_plugin.cpp -#: editor/project_export.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp +#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp +#: scene/gui/file_dialog.cpp msgid "Name:" msgstr "ชื่à¸:" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Could not create folder." msgstr "ไม่สามารถสร้างโฟลเดà¸à¸£à¹Œ" @@ -1305,30 +1115,6 @@ msgstr "à¸à¸³à¸¥à¸±à¸‡à¸£à¸§à¸šà¸£à¸§à¸¡" msgid "Template file not found:\n" msgstr "ไม่พบà¹à¸¡à¹ˆà¹à¸šà¸š:\n" -#: editor/editor_export.cpp -msgid "Added:" -msgstr "เพิ่ม:" - -#: editor/editor_export.cpp -msgid "Removed:" -msgstr "ลบ:" - -#: editor/editor_export.cpp -msgid "Error saving atlas:" -msgstr "ผิดพลาดขณะบันทึภatlas:" - -#: editor/editor_export.cpp -msgid "Could not save atlas subtexture:" -msgstr "บันทึภtexture ย่à¸à¸¢à¸‚à¸à¸‡ atlas ไม่ได้:" - -#: editor/editor_export.cpp -msgid "Exporting for %s" -msgstr "ส่งà¸à¸à¸à¸ªà¸³à¸«à¸£à¸±à¸š %s" - -#: editor/editor_export.cpp -msgid "Setting Up.." -msgstr "à¸à¸³à¸¥à¸±à¸‡à¸•ั้งค่า.." - #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "มีไฟล์นี้à¸à¸¢à¸¹à¹ˆà¹à¸¥à¹‰à¸§ จะเขียนทับหรืà¸à¹„ม่?" @@ -1414,6 +1200,11 @@ msgstr "เลื่à¸à¸™à¹‚ฟลเดà¸à¸£à¹Œà¸—ี่ชà¸à¸šà¸‚ึ้น msgid "Move Favorite Down" msgstr "เลื่à¸à¸™à¹‚ฟลเดà¸à¸£à¹Œà¸—ี่ชà¸à¸šà¸¥à¸‡" +#: editor/editor_file_dialog.cpp +#, fuzzy +msgid "Go to parent folder" +msgstr "ไม่สามารถสร้างโฟลเดà¸à¸£à¹Œ" + #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Directories & Files:" msgstr "ไฟล์à¹à¸¥à¸°à¹‚ฟลเดà¸à¸£à¹Œ:" @@ -1456,6 +1247,10 @@ msgstr "รายชื่à¸à¸„ลาส:" msgid "Search Classes" msgstr "ค้นหาคลาส" +#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +msgid "Top" +msgstr "บน" + #: editor/editor_help.cpp editor/property_editor.cpp msgid "Class:" msgstr "คลาส:" @@ -1472,18 +1267,32 @@ msgstr "สืบทà¸à¸”โดย:" msgid "Brief Description:" msgstr "รายละเà¸à¸µà¸¢à¸”:" +#: editor/editor_help.cpp +#, fuzzy +msgid "Members" +msgstr "ตัวà¹à¸›à¸£:" + #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "ตัวà¹à¸›à¸£:" #: editor/editor_help.cpp +#, fuzzy +msgid "Public Methods" +msgstr "เมท็à¸à¸”:" + +#: editor/editor_help.cpp msgid "Public Methods:" msgstr "เมท็à¸à¸”:" #: editor/editor_help.cpp #, fuzzy +msgid "GUI Theme Items" +msgstr "ตัวà¹à¸›à¸£à¸˜à¸µà¸¡:" + +#: editor/editor_help.cpp msgid "GUI Theme Items:" -msgstr "ธีมหน้าต่าง:" +msgstr "ตัวà¹à¸›à¸£à¸˜à¸µà¸¡:" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Signals:" @@ -1491,53 +1300,85 @@ msgstr "สัà¸à¸à¸²à¸“:" #: editor/editor_help.cpp #, fuzzy +msgid "Enumerations" +msgstr "ค่าคงที่:" + +#: editor/editor_help.cpp msgid "Enumerations:" -msgstr "à¹à¸à¸™à¸´à¹€à¸¡à¸Šà¸±à¸™" +msgstr "ค่าคงที่:" #: editor/editor_help.cpp msgid "enum " -msgstr "" +msgstr "ค่าคงที่ " + +#: editor/editor_help.cpp +#, fuzzy +msgid "Constants" +msgstr "ค่าคงที่:" #: editor/editor_help.cpp msgid "Constants:" msgstr "ค่าคงที่:" #: editor/editor_help.cpp +#, fuzzy +msgid "Description" +msgstr "รายละเà¸à¸µà¸¢à¸”:" + +#: editor/editor_help.cpp +#, fuzzy +msgid "Properties" +msgstr "คุณสมบัติ:" + +#: editor/editor_help.cpp msgid "Property Description:" msgstr "รายละเà¸à¸µà¸¢à¸”ตัวà¹à¸›à¸£:" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this property. Please help us by " +"[color=$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp +#, fuzzy +msgid "Methods" +msgstr "รายชื่à¸à¹€à¸¡à¸—็à¸à¸”:" + +#: editor/editor_help.cpp msgid "Method Description:" msgstr "รายละเà¸à¸µà¸¢à¸”เมท็à¸à¸”:" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this method. Please help us by [color=" +"$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp msgid "Search Text" msgstr "ค้นหาคำ" #: editor/editor_log.cpp -#, fuzzy msgid "Output:" -msgstr " ข้à¸à¸„วาม:" +msgstr "ข้à¸à¸„วาม:" #: editor/editor_log.cpp editor/plugins/animation_tree_editor_plugin.cpp -#: editor/plugins/rich_text_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_editor_debugger.cpp scene/gui/line_edit.cpp -#: scene/gui/text_edit.cpp +#: editor/property_editor.cpp editor/script_editor_debugger.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Clear" msgstr "ลบ" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Error saving resource!" msgstr "บันทึà¸à¸£à¸µà¸‹à¸à¸£à¹Œà¸ªà¸œà¸´à¸”พลาด!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Save Resource As.." msgstr "บันทึà¸à¸£à¸µà¸‹à¸à¸£à¹Œà¸ªà¹€à¸›à¹‡à¸™.." -#: editor/editor_node.cpp editor/export_template_manager.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "I see.." msgstr "ตà¸à¸¥à¸‡.." @@ -1554,6 +1395,30 @@ msgid "Error while saving." msgstr "ผิดพลาดขณะบันทึà¸" #: editor/editor_node.cpp +#, fuzzy +msgid "Can't open '%s'." +msgstr "ทำงานใน '..' ไม่ได้" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Error while parsing '%s'." +msgstr "ผิดพลาดขณะบันทึà¸" + +#: editor/editor_node.cpp +msgid "Unexpected end of file '%s'." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Missing '%s' or its dependencies." +msgstr "ฉาภ'%s' มีà¸à¸²à¸£à¸à¹‰à¸²à¸‡à¸à¸´à¸‡à¸ªà¸¹à¸à¸«à¸²à¸¢:" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Error while loading '%s'." +msgstr "ผิดพลาดขณะบันทึà¸" + +#: editor/editor_node.cpp msgid "Saving Scene" msgstr "บันทึà¸à¸‰à¸²à¸" @@ -1566,7 +1431,6 @@ msgid "Creating Thumbnail" msgstr "à¸à¸³à¸¥à¸±à¸‡à¸ªà¸£à¹‰à¸²à¸‡à¸£à¸¹à¸›à¸•ัวà¸à¸¢à¹ˆà¸²à¸‡" #: editor/editor_node.cpp -#, fuzzy msgid "This operation can't be done without a tree root." msgstr "ทำไม่ได้ถ้าไม่มีฉาà¸" @@ -1612,6 +1476,33 @@ msgid "Restored default layout to base settings." msgstr "คืนเลย์เà¸à¸²à¸•์เป็นค่าเริ่มต้น" #: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was imported, so it's not editable.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was instanced or inherited.\n" +"Changes to it will not be kept when saving the current scene." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource was imported, so it's not editable. Change its settings in the " +"import panel and then re-import." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This scene was imported, so changes to it will not be kept.\n" +"Instancing it or inheriting will allow making changes to it.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp msgid "Copy Params" msgstr "คัดลà¸à¸à¸•ัวà¹à¸›à¸£" @@ -1642,10 +1533,9 @@ msgstr "เปิดในคู่มืà¸" #: editor/editor_node.cpp msgid "There is no defined scene to run." -msgstr "ไม่ได้à¸à¸³à¸«à¸™à¸”ฉาà¸à¹€à¸£à¸´à¹ˆà¸¡à¸•้น" +msgstr "ยังไม่ได้เลืà¸à¸à¸‰à¸²à¸à¸—ี่จะเล่น" #: editor/editor_node.cpp -#, fuzzy msgid "" "No main scene has ever been defined, select one?\n" "You can change it later in \"Project Settings\" under the 'application' " @@ -1697,13 +1587,12 @@ msgid "Quick Open Script.." msgstr "เปิดไฟล์สคริปต์ด่วน.." #: editor/editor_node.cpp -#, fuzzy msgid "Save & Close" -msgstr "บันทึà¸à¹„ฟล์" +msgstr "บันทึà¸à¹à¸¥à¸°à¸›à¸´à¸”" #: editor/editor_node.cpp msgid "Save changes to '%s' before closing?" -msgstr "" +msgstr "บันทึภ'%s' à¸à¹ˆà¸à¸™à¸›à¸´à¸”โปรà¹à¸à¸£à¸¡à¸«à¸£à¸·à¸à¹„ม่?" #: editor/editor_node.cpp msgid "Save Scene As.." @@ -1734,9 +1623,8 @@ msgid "Export Tile Set" msgstr "ส่งà¸à¸à¸ Tile Set" #: editor/editor_node.cpp -#, fuzzy msgid "This operation can't be done without a selected node." -msgstr "ทำไม่ได้ถ้าไม่มีฉาà¸" +msgstr "ทำไม่ได้ถ้าไม่ได้เลืà¸à¸à¹‚หนด" #: editor/editor_node.cpp msgid "Current scene not saved. Open anyway?" @@ -1767,21 +1655,25 @@ msgid "Exit the editor?" msgstr "à¸à¸à¸à¹‚ปรà¹à¸à¸£à¸¡?" #: editor/editor_node.cpp -#, fuzzy msgid "Open Project Manager?" -msgstr "ตัวจัดà¸à¸²à¸£à¹‚ปรเจà¸à¸•์" +msgstr "เปิดตัวจัดà¸à¸²à¸£à¹‚ปรเจà¸à¸•์?" #: editor/editor_node.cpp -#, fuzzy msgid "Save & Quit" -msgstr "บันทึà¸à¹„ฟล์" +msgstr "บันทึà¸à¹à¸¥à¸°à¸›à¸´à¸”" #: editor/editor_node.cpp msgid "Save changes to the following scene(s) before quitting?" -msgstr "" +msgstr "บันทึà¸à¸‰à¸²à¸à¸•่à¸à¹„ปนี้à¸à¹ˆà¸à¸™à¸›à¸´à¸”โปรà¹à¸à¸£à¸¡à¸«à¸£à¸·à¸à¹„ม่?" #: editor/editor_node.cpp msgid "Save changes the following scene(s) before opening Project Manager?" +msgstr "บันทึà¸à¸‰à¸²à¸à¸•่à¸à¹„ปนี้à¸à¹ˆà¸à¸™à¸à¸¥à¸±à¸šà¸ªà¸¹à¹ˆà¸•ัวจัดà¸à¸²à¸£à¹‚ปรเจà¸à¸•์หรืà¸à¹„ม่?" + +#: editor/editor_node.cpp +msgid "" +"This option is deprecated. Situations where refresh must be forced are now " +"considered a bug. Please report." msgstr "" #: editor/editor_node.cpp @@ -1790,19 +1682,19 @@ msgstr "เลืà¸à¸à¸‰à¸²à¸à¹€à¸£à¸´à¹ˆà¸¡à¸•้น" #: editor/editor_node.cpp msgid "Unable to enable addon plugin at: '" -msgstr "" +msgstr "ไม่สามารถเปิดใช้งานปลั๊à¸à¸à¸´à¸™: '" #: editor/editor_node.cpp msgid "' parsing of config failed." -msgstr "" +msgstr "' ผิดพลาดขณะà¸à¹ˆà¸²à¸™à¹„ฟล์" #: editor/editor_node.cpp msgid "Unable to find script field for addon plugin at: 'res://addons/" -msgstr "" +msgstr "ไม่พบชื่à¸à¸ªà¸„ริปต์ใน: 'res://addons/" #: editor/editor_node.cpp msgid "Unable to load addon script from path: '" -msgstr "" +msgstr "ไม่สามารถโหลดสคริปต์จาà¸: '" #: editor/editor_node.cpp msgid "" @@ -1813,7 +1705,7 @@ msgstr "" "สามารถสืบทà¸à¸”ไปยังฉาà¸à¹ƒà¸«à¸¡à¹ˆà¹€à¸žà¸·à¹ˆà¸à¸—ำà¸à¸²à¸£à¹à¸à¹‰à¹„ข" #: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Ugh" msgstr "เà¸à¸à¸°" @@ -1826,14 +1718,15 @@ msgstr "" "à¹à¸¥à¹‰à¸§à¸šà¸±à¸™à¸—ึà¸à¸¥à¸‡à¹ƒà¸™à¹‚ฟลเดà¸à¸£à¹Œà¹‚ปรเจà¸à¸•์" #: editor/editor_node.cpp -msgid "Error loading scene." -msgstr "ผิดพลาดขณะโหลดฉาà¸" - -#: editor/editor_node.cpp msgid "Scene '%s' has broken dependencies:" msgstr "ฉาภ'%s' มีà¸à¸²à¸£à¸à¹‰à¸²à¸‡à¸à¸´à¸‡à¸ªà¸¹à¸à¸«à¸²à¸¢:" #: editor/editor_node.cpp +#, fuzzy +msgid "Clear Recent Scenes" +msgstr "ล้างรายà¸à¸²à¸£à¹„ฟล์ล่าสุด" + +#: editor/editor_node.cpp msgid "Save Layout" msgstr "บันทึà¸à¹€à¸¥à¸¢à¹Œà¹€à¸à¸²à¸•์" @@ -1863,11 +1756,10 @@ msgid "Distraction Free Mode" msgstr "โหมดไร้สิ่งรบà¸à¸§à¸™" #: editor/editor_node.cpp -#, fuzzy msgid "Toggle distraction-free mode." msgstr "โหมดไร้สิ่งรบà¸à¸§à¸™" -#: editor/editor_node.cpp editor/io_plugins/editor_scene_import_plugin.cpp +#: editor/editor_node.cpp msgid "Scene" msgstr "ฉาà¸" @@ -2093,6 +1985,10 @@ msgstr "ถาม/ตà¸à¸š" msgid "Issue Tracker" msgstr "ระบบติดตามบัค" +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +msgid "Community" +msgstr "ชุมชน" + #: editor/editor_node.cpp msgid "About" msgstr "เà¸à¸µà¹ˆà¸¢à¸§à¸à¸±à¸š" @@ -2101,7 +1997,7 @@ msgstr "เà¸à¸µà¹ˆà¸¢à¸§à¸à¸±à¸š" msgid "Play the project." msgstr "เล่นโปรเจà¸à¸•์" -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Play" msgstr "เล่น" @@ -2117,7 +2013,7 @@ msgstr "หยุดชั่วคราว" msgid "Stop the scene." msgstr "หยุด" -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Stop" msgstr "หยุด" @@ -2190,6 +2086,16 @@ msgid "Object properties." msgstr "คุณสมบัติวัตถุ" #: editor/editor_node.cpp +#, fuzzy +msgid "Changes may be lost!" +msgstr "à¹à¸à¹‰à¹„ขค่าคงที่เวà¸à¹€à¸•à¸à¸£à¹Œ" + +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Import" +msgstr "นำเข้า" + +#: editor/editor_node.cpp msgid "FileSystem" msgstr "ระบบไฟล์" @@ -2203,15 +2109,7 @@ msgstr "ข้à¸à¸„วาม" #: editor/editor_node.cpp msgid "Don't Save" -msgstr "" - -#: editor/editor_node.cpp editor/editor_reimport_dialog.cpp -msgid "Re-Import" -msgstr "นำเข้าà¸à¸µà¸à¸„รั้ง" - -#: editor/editor_node.cpp editor/editor_plugin_settings.cpp -msgid "Update" -msgstr "à¸à¸±à¸žà¹€à¸”ท" +msgstr "ไม่บันทึà¸" #: editor/editor_node.cpp msgid "Import Templates From ZIP File" @@ -2274,11 +2172,29 @@ msgstr "เปิดตัวà¹à¸à¹‰à¹„ขถัดไป" msgid "Open the previous Editor" msgstr "เปิดตัวà¹à¸à¹‰à¹„ขà¸à¹ˆà¸à¸™à¸«à¸™à¹‰à¸²" +#: editor/editor_plugin.cpp +#, fuzzy +msgid "Creating Mesh Previews" +msgstr "à¸à¸³à¸¥à¸±à¸‡à¸ªà¸£à¹‰à¸²à¸‡ Mesh Library" + +#: editor/editor_plugin.cpp +msgid "Thumbnail.." +msgstr "รูปตัวà¸à¸¢à¹ˆà¸²à¸‡.." + #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" msgstr "ปลั๊à¸à¸à¸´à¸™à¸—ี่ติดตั้งà¹à¸¥à¹‰à¸§:" #: editor/editor_plugin_settings.cpp +msgid "Update" +msgstr "à¸à¸±à¸žà¹€à¸”ท" + +#: editor/editor_plugin_settings.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Version:" +msgstr "รุ่น:" + +#: editor/editor_plugin_settings.cpp msgid "Author:" msgstr "โดย:" @@ -2330,35 +2246,17 @@ msgstr "" msgid "Frame #:" msgstr "เฟรมที่:" -#: editor/editor_reimport_dialog.cpp -msgid "Please wait for scan to complete." -msgstr "à¸à¸£à¸¸à¸“ารà¸à¹ƒà¸«à¹‰à¸à¸²à¸£à¸ªà¹à¸à¸™à¹€à¸ªà¸£à¹‡à¸ˆ" - -#: editor/editor_reimport_dialog.cpp -msgid "Current scene must be saved to re-import." -msgstr "ฉาà¸à¸›à¸±à¸ˆà¸ˆà¸¸à¸šà¸±à¸™à¸•้à¸à¸‡à¸šà¸±à¸™à¸—ึà¸à¸à¹ˆà¸à¸™à¸™à¸³à¹€à¸‚้าà¸à¸µà¸à¸„รั้ง" - -#: editor/editor_reimport_dialog.cpp -msgid "Save & Re-Import" -msgstr "บันทึà¸à¹à¸¥à¸°à¸™à¸³à¹€à¸‚้าà¸à¸µà¸à¸„รั้ง" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Importing" -msgstr "นำเข้าà¸à¸µà¸à¸„รั้ง" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Import Changed Resources" -msgstr "นำเข้ารีซà¸à¸£à¹Œà¸ªà¸—ี่à¹à¸à¹‰à¹„ขà¸à¸µà¸à¸„รั้ง" - #: editor/editor_run_native.cpp msgid "Select device from the list" -msgstr "" +msgstr "เลืà¸à¸à¸à¸¸à¸›à¸à¸£à¸“์จาà¸à¸£à¸²à¸¢à¸Šà¸·à¹ˆà¸" #: editor/editor_run_native.cpp msgid "" "No runnable export preset found for this platform.\n" "Please add a runnable preset in the export menu." msgstr "" +"ไม่มีà¹à¸¡à¹ˆà¹à¸šà¸šà¸ªà¹ˆà¸‡à¸à¸à¸à¸—ี่สามารถรันเà¸à¸¡à¹„ด้ขà¸à¸‡à¹à¸žà¸¥à¸•ฟà¸à¸£à¹Œà¸¡à¸™à¸µà¹‰\n" +"à¸à¸£à¸¸à¸“าเพิ่มà¹à¸¡à¹ˆà¹à¸šà¸šà¸ªà¹ˆà¸‡à¸à¸à¸à¹ƒà¸™à¹€à¸¡à¸™à¸¹à¸ªà¹ˆà¸‡à¸à¸à¸" #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." @@ -2460,10 +2358,6 @@ msgid "Importing:" msgstr "นำเข้า:" #: editor/export_template_manager.cpp -msgid "Loading Export Templates" -msgstr "à¸à¸³à¸¥à¸±à¸‡à¹‚หลดà¹à¸¡à¹ˆà¹à¸šà¸šà¸ªà¹ˆà¸‡à¸à¸à¸" - -#: editor/export_template_manager.cpp msgid "Current Version:" msgstr "รุ่นปัจจุบัน:" @@ -2496,60 +2390,80 @@ msgid "Cannot navigate to '" msgstr "ไม่สามารถไปยัง '" #: editor/filesystem_dock.cpp -#, fuzzy +msgid "View items as a grid of thumbnails" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "View items as a list" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "" "\n" -"Status: Needs Re-Import" -msgstr "บันทึà¸à¹à¸¥à¸°à¸™à¸³à¹€à¸‚้าà¸à¸µà¸à¸„รั้ง" +"Status: Import of file failed. Please fix file and reimport manually." +msgstr "" #: editor/filesystem_dock.cpp #, fuzzy msgid "" "\n" "Source: " -msgstr "ต้นฉบับ:" +msgstr "" +"\n" +"ต้นฉบับ: " #: editor/filesystem_dock.cpp -msgid "Same source and destination files, doing nothing." -msgstr "ไฟล์ต้นทางà¹à¸¥à¸°à¸›à¸¥à¸²à¸¢à¸—างเหมืà¸à¸™à¸à¸±à¸™ ไม่ทำà¸à¸°à¹„ร" +#, fuzzy +msgid "Cannot move/rename resources root." +msgstr "ไม่สามารถโหลด/ประมวลผลฟà¸à¸™à¸•์ต้นฉบับ" #: editor/filesystem_dock.cpp -msgid "Target file exists, can't overwrite. Delete first." -msgstr "" +#, fuzzy +msgid "Cannot move a folder into itself.\n" +msgstr "นำเข้าไฟล์ทับตัวเà¸à¸‡à¹„ม่ได้:" + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Error moving:\n" +msgstr "ผิดพลาดขณะย้ายโฟลเดà¸à¸£à¹Œ:\n" #: editor/filesystem_dock.cpp -msgid "Same source and destination paths, doing nothing." -msgstr "ไฟล์ต้นทางà¹à¸¥à¸°à¸›à¸¥à¸²à¸¢à¸—างà¸à¸¢à¸¹à¹ˆà¸—ี่เดียวà¸à¸±à¸™ ไม่ทำà¸à¸°à¹„ร" +#, fuzzy +msgid "Unable to update dependencies:\n" +msgstr "ฉาภ'%s' มีà¸à¸²à¸£à¸à¹‰à¸²à¸‡à¸à¸´à¸‡à¸ªà¸¹à¸à¸«à¸²à¸¢:" #: editor/filesystem_dock.cpp -msgid "Can't move directories to within themselves." -msgstr "ย้ายโฟลเดà¸à¸£à¹Œà¹€à¸‚้ามาในตัวเà¸à¸‡à¹„ม่ได้" +msgid "No name provided" +msgstr "" #: editor/filesystem_dock.cpp -msgid "Can't rename deps for:\n" +msgid "Provided name contains invalid characters" msgstr "" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Error moving file:\n" -msgstr "ผิดพลาดขณะโหลดรูป:" +msgid "No name provided." +msgstr "เปลี่ยนชื่à¸à¸«à¸£à¸·à¸à¸¢à¹‰à¸²à¸¢.." #: editor/filesystem_dock.cpp #, fuzzy -msgid "Error moving dir:\n" -msgstr "ผิดพลาดขณะนำเข้า:" +msgid "Name contains invalid characters." +msgstr "ตัวà¸à¸±à¸à¸©à¸£à¸—ี่ใช้ได้:" #: editor/filesystem_dock.cpp -msgid "Can't operate on '..'" -msgstr "ทำงานใน '..' ไม่ได้" +#, fuzzy +msgid "A file or folder with this name already exists." +msgstr "มีชื่à¸à¸à¸¥à¸¸à¹ˆà¸¡à¸™à¸µà¹‰à¸à¸¢à¸¹à¹ˆà¹à¸¥à¹‰à¸§!" #: editor/filesystem_dock.cpp -msgid "Pick New Name and Location For:" -msgstr "เลืà¸à¸à¸Šà¸·à¹ˆà¸à¹à¸¥à¸°à¸•ำà¹à¸«à¸™à¹ˆà¸‡à¸—ี่à¸à¸¢à¸¹à¹ˆà¹ƒà¸«à¸¡à¹ˆà¹ƒà¸«à¹‰à¸à¸±à¸š:" +#, fuzzy +msgid "Renaming file:" +msgstr "เปลี่ยนชื่à¸à¸•ัวà¹à¸›à¸£" #: editor/filesystem_dock.cpp -msgid "No files selected!" -msgstr "ไม่ได้เลืà¸à¸à¹„ฟล์ไว้!" +#, fuzzy +msgid "Renaming folder:" +msgstr "เปลี่ยนชื่à¸à¹‚หนด" #: editor/filesystem_dock.cpp msgid "Expand all" @@ -2560,40 +2474,38 @@ msgid "Collapse all" msgstr "ยุบโฟลเดà¸à¸£à¹Œ" #: editor/filesystem_dock.cpp -msgid "Show In File Manager" -msgstr "à¹à¸ªà¸”งในตัวจัดà¸à¸²à¸£à¹„ฟล์" - -#: editor/filesystem_dock.cpp -msgid "Instance" -msgstr "à¸à¸´à¸™à¸ªà¹à¸•นซ์" +msgid "Copy Path" +msgstr "คัดลà¸à¸à¸•ำà¹à¸«à¸™à¹ˆà¸‡" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "à¹à¸à¹‰à¹„ขà¸à¸²à¸£à¸à¹‰à¸²à¸‡à¸à¸´à¸‡.." +#, fuzzy +msgid "Rename.." +msgstr "เปลี่ยนชื่à¸" #: editor/filesystem_dock.cpp -msgid "View Owners.." -msgstr "ดูเจ้าขà¸à¸‡.." +msgid "Move To.." +msgstr "ย้ายไป.." #: editor/filesystem_dock.cpp -msgid "Copy Path" -msgstr "คัดลà¸à¸à¸•ำà¹à¸«à¸™à¹ˆà¸‡" +#, fuzzy +msgid "New Folder.." +msgstr "สร้างโฟลเดà¸à¸£à¹Œ" #: editor/filesystem_dock.cpp -msgid "Rename or Move.." -msgstr "เปลี่ยนชื่à¸à¸«à¸£à¸·à¸à¸¢à¹‰à¸²à¸¢.." +msgid "Show In File Manager" +msgstr "à¹à¸ªà¸”งในตัวจัดà¸à¸²à¸£à¹„ฟล์" #: editor/filesystem_dock.cpp -msgid "Move To.." -msgstr "ย้ายไป.." +msgid "Instance" +msgstr "à¸à¸´à¸™à¸ªà¹à¸•นซ์" #: editor/filesystem_dock.cpp -msgid "Info" -msgstr "ข้à¸à¸¡à¸¹à¸¥" +msgid "Edit Dependencies.." +msgstr "à¹à¸à¹‰à¹„ขà¸à¸²à¸£à¸à¹‰à¸²à¸‡à¸à¸´à¸‡.." #: editor/filesystem_dock.cpp -msgid "Re-Import.." -msgstr "นำเข้าà¸à¸µà¸à¸„รั้ง.." +msgid "View Owners.." +msgstr "ดูเจ้าขà¸à¸‡.." #: editor/filesystem_dock.cpp msgid "Previous Directory" @@ -2620,11 +2532,18 @@ msgid "" "Scanning Files,\n" "Please Wait.." msgstr "" +"à¸à¸³à¸¥à¸±à¸‡à¸ªà¹à¸à¸™à¹„ฟล์,\n" +"à¸à¸£à¸¸à¸“ารà¸.." #: editor/filesystem_dock.cpp msgid "Move" msgstr "ย้าย" +#: editor/filesystem_dock.cpp editor/plugins/animation_tree_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Rename" +msgstr "เปลี่ยนชื่à¸" + #: editor/groups_editor.cpp msgid "Add to Group" msgstr "เพิ่มไปยังà¸à¸¥à¸¸à¹ˆà¸¡" @@ -2634,74 +2553,85 @@ msgid "Remove from Group" msgstr "ลบà¸à¸à¸à¸ˆà¸²à¸à¸à¸¥à¸¸à¹ˆà¸¡" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Import as Single Scene" -msgstr "à¸à¸³à¸¥à¸±à¸‡à¸™à¸³à¹€à¸‚้าฉาà¸.." +msgstr "นำเข้าเป็นฉาà¸à¹€à¸”ียว" + +#: editor/import/resource_importer_scene.cpp +#, fuzzy +msgid "Import with Separate Animations" +msgstr "นำเข้าโดยà¹à¸¢à¸à¸§à¸±à¸ªà¸”ุ" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials" -msgstr "" +msgstr "นำเข้าโดยà¹à¸¢à¸à¸§à¸±à¸ªà¸”ุ" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects" -msgstr "" +msgstr "นำเข้าโดยà¹à¸¢à¸à¸§à¸±à¸•ถุ" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects+Materials" -msgstr "" +msgstr "นำเข้าโดยà¹à¸¢à¸à¸—ั้งวัตถุà¹à¸¥à¸°à¸§à¸±à¸ªà¸”ุ" + +#: editor/import/resource_importer_scene.cpp +#, fuzzy +msgid "Import with Separate Objects+Animations" +msgstr "นำเข้าโดยà¹à¸¢à¸à¸—ั้งวัตถุà¹à¸¥à¸°à¸§à¸±à¸ªà¸”ุ" + +#: editor/import/resource_importer_scene.cpp +#, fuzzy +msgid "Import with Separate Materials+Animations" +msgstr "นำเข้าโดยà¹à¸¢à¸à¸§à¸±à¸ªà¸”ุ" #: editor/import/resource_importer_scene.cpp #, fuzzy +msgid "Import with Separate Objects+Materials+Animations" +msgstr "นำเข้าโดยà¹à¸¢à¸à¸—ั้งวัตถุà¹à¸¥à¸°à¸§à¸±à¸ªà¸”ุ" + +#: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes" -msgstr "นำเข้าฉาภ3D" +msgstr "นำเข้าเป็นหลายฉาà¸" #: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes+Materials" -msgstr "" +msgstr "นำเข้าเป็นหลายฉาà¸à¹à¸¥à¸°à¸§à¸±à¸ªà¸”ุ" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Import Scene" msgstr "นำเข้าฉาà¸" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Importing Scene.." msgstr "à¸à¸³à¸¥à¸±à¸‡à¸™à¸³à¹€à¸‚้าฉาà¸.." #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Running Custom Script.." msgstr "à¸à¸³à¸¥à¸±à¸‡à¸£à¸±à¸™à¸ªà¸„ริปต์.." #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Couldn't load post-import script:" msgstr "โหลดสคริปต์หลังนำเข้าไม่ได้:" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Invalid/broken script for post-import (check console):" msgstr "สคริปต์หลังนำเข้าผิดพลาด (ตรวจสà¸à¸šà¸„à¸à¸™à¹‚ซล):" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Error running post-import script:" msgstr "ผิดพลาดขณะรันสคริปต์หลังนำเข้า:" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Saving.." msgstr "à¸à¸³à¸¥à¸±à¸‡à¸šà¸±à¸™à¸—ึà¸.." #: editor/import_dock.cpp msgid "Set as Default for '%s'" -msgstr "" +msgstr "à¸à¸³à¸«à¸™à¸”เป็นค่าเริ่มต้นขà¸à¸‡ '%s'" #: editor/import_dock.cpp msgid "Clear Default for '%s'" -msgstr "" +msgstr "ลบค่าเริ่มต้นขà¸à¸‡ '%s'" #: editor/import_dock.cpp msgid " Files" @@ -2719,572 +2649,6 @@ msgstr "à¹à¸šà¸š.." msgid "Reimport" msgstr "นำเข้าใหม่" -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "No bit masks to import!" -msgstr "ไม่มีบิตà¹à¸¡à¸ªà¸à¹Œà¹ƒà¸«à¹‰à¸™à¸³à¹€à¸‚้า!" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path is empty." -msgstr "ตำà¹à¸«à¸™à¹ˆà¸‡à¸—ี่à¸à¸¢à¸¹à¹ˆà¸§à¹ˆà¸²à¸‡à¹€à¸›à¸¥à¹ˆà¸²" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must be a complete resource path." -msgstr "ต้à¸à¸‡à¹€à¸›à¹‡à¸™à¸•ำà¹à¸«à¸™à¹ˆà¸‡à¸—ี่à¸à¸¢à¸¹à¹ˆà¹à¸šà¸šà¹€à¸•็ม" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must exist." -msgstr "ต้à¸à¸‡à¸¡à¸µà¸•ำà¹à¸«à¸™à¹ˆà¸‡à¸—ี่à¸à¸¢à¸¹à¹ˆ" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Save path is empty!" -msgstr "ตำà¹à¸«à¸™à¹ˆà¸‡à¸šà¸±à¸™à¸—ึà¸à¸§à¹ˆà¸²à¸‡à¹€à¸›à¸¥à¹ˆà¸²!" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Import BitMasks" -msgstr "นำเข้า BitMasks" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s):" -msgstr "Texture ต้นฉบับ:" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Target Path:" -msgstr "ตำà¹à¸«à¸™à¹ˆà¸‡à¸—ี่à¸à¸¢à¸¹à¹ˆ:" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Accept" -msgstr "ยà¸à¸¡à¸£à¸±à¸š" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Bit Mask" -msgstr "บิตà¹à¸¡à¸ªà¸à¹Œ" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No source font file!" -msgstr "ไม่ได้เลืà¸à¸à¹„ฟล์ฟà¸à¸™à¸•์ต้นฉบับ!" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No target font resource!" -msgstr "ไม่ได้เลืà¸à¸à¸§à¹ˆà¸²à¸ˆà¸°à¸™à¸³à¹€à¸‚้ามาเป็นไฟล์ฟà¸à¸™à¸•์ชื่à¸à¸à¸°à¹„ร!" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "" -"Invalid file extension.\n" -"Please use .font." -msgstr "" -"นามสà¸à¸¸à¸¥à¹„ม่ถูà¸à¸•้à¸à¸‡\n" -"à¸à¸£à¸¸à¸“าใช้ .font" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Can't load/process source font." -msgstr "ไม่สามารถโหลด/ประมวลผลฟà¸à¸™à¸•์ต้นฉบับ" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Couldn't save font." -msgstr "บันทึà¸à¸Ÿà¸à¸™à¸•์ไม่ได้" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font:" -msgstr "ฟà¸à¸™à¸•์ต้นฉบับ:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font Size:" -msgstr "ขนาดฟà¸à¸™à¸•์ต้นฉบับ:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Dest Resource:" -msgstr "นำเข้ามาเป็นรีซà¸à¸£à¹Œà¸ª:" - -#: 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." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Test:" -msgstr "ทดสà¸à¸š:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Options:" -msgstr "ตัวเลืà¸à¸:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Font Import" -msgstr "นำเข้าฟà¸à¸™à¸•์" - -#: 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 "ไฟล์นี้เป็นฟà¸à¸™à¸•์ขà¸à¸‡ Godot à¸à¸¢à¸¹à¹ˆà¹à¸¥à¹‰à¸§ à¸à¸£à¸¸à¸“าเลืà¸à¸à¸Ÿà¸à¸™à¸•์ที่มาจาภBMFont" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Failed opening as BMFont file." -msgstr "ผิดพลาดขณะเปิดไฟล์เป็น BMFont" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error initializing FreeType." -msgstr "ผิดพลาดขณะเริ่มต้น FreeType" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Unknown font format." -msgstr "ไม่ทราบประเภทขà¸à¸‡à¸Ÿà¸à¸™à¸•์" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error loading font." -msgstr "ผิดพลาดขณะโหลดฟà¸à¸™à¸•์" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Invalid font size." -msgstr "ขนาดฟà¸à¸™à¸•์ผิดพลาด" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#, fuzzy -msgid "Invalid font custom source." -msgstr "ต้นฉบับฟà¸à¸™à¸•์ที่à¸à¸³à¸«à¸™à¸”เà¸à¸‡à¹„ม่ถูà¸à¸•้à¸à¸‡" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/plugins/theme_editor_plugin.cpp -msgid "Font" -msgstr "ฟà¸à¸™à¸•์" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "No meshes to import!" -msgstr "ไม่มี mesh ให้นำเข้า!" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Single Mesh Import" -msgstr "นำเข้า Mesh เดี่ยว" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Source Mesh(es):" -msgstr "Mesh ต้นฉบับ:" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Mesh" -msgstr "Mesh" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Surface %d" -msgstr "%d พื้นผิว" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "No samples to import!" -msgstr "ไม่มีไฟล์เสียงให้นำเข้า!" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Import Audio Samples" -msgstr "นำเข้าไฟล์เสียง" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Source Sample(s):" -msgstr "ไฟล์เสียงต้นฉบับ:" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Audio Sample" -msgstr "ไฟล์เสียง" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "New Clip" -msgstr "คลิปใหม่" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Animation Options" -msgstr "ตัวเลืà¸à¸à¹à¸à¸™à¸´à¹€à¸¡à¸Šà¸±à¸™" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Flags" -msgstr "ตัวเลืà¸à¸" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Bake FPS:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Optimizer" -msgstr "ตัวเพิ่มประสิทธิภาพ" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Linear Error" -msgstr "ผิดพลาดเชิงเส้นมาà¸à¸—ี่สุด" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angular Error" -msgstr "ผิดพลาดเชิงมุมมาà¸à¸—ี่สุด" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angle" -msgstr "มุมมาà¸à¸ªà¸¸à¸”" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Clips" -msgstr "คลิป" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Start(s)" -msgstr "เริ่ม" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "End(s)" -msgstr "จบ" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Loop" -msgstr "วน" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Filters" -msgstr "ตัวà¸à¸£à¸à¸‡" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source path is empty." -msgstr "ที่à¸à¸¢à¸¹à¹ˆà¹„ฟล์ต้นฉบับว่างเปล่า" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't load post-import script." -msgstr "โหลดสคริปต์หลังนำเข้าไม่ได้" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Invalid/broken script for post-import." -msgstr "สคริปต์หลังนำเข้ามีข้à¸à¸œà¸´à¸”พลาด" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Error importing scene." -msgstr "ผิดพลาดขณะนำเข้าฉาà¸" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import 3D Scene" -msgstr "นำเข้าฉาภ3D" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source Scene:" -msgstr "ฉาà¸à¸•้นฉบับ:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Same as Target Scene" -msgstr "เหมืà¸à¸™à¸à¸±à¸™à¸à¸±à¸šà¸‰à¸²à¸à¸›à¸¥à¸²à¸¢à¸—าง" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Shared" -msgstr "ใช้ร่วมà¸à¸±à¸™" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Target Texture Folder:" -msgstr "โฟลเดà¸à¸£à¹Œ Texture ปลายทาง:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Post-Process Script:" -msgstr "สคริปต์หลังประมวลผล:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Custom Root Node Type:" -msgstr "ประเภทโหนดราà¸à¸à¸³à¸«à¸™à¸”เà¸à¸‡:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Auto" -msgstr "à¸à¸±à¸•โนมัติ" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Root Node Name:" -msgstr "ชื่à¸à¹‚หนดราà¸:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "The Following Files are Missing:" -msgstr "ไฟล์ต่à¸à¹„ปนี้หายไป:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Anyway" -msgstr "ยืนยันนำเข้า" - -#: editor/io_plugins/editor_scene_import_plugin.cpp scene/gui/dialogs.cpp -msgid "Cancel" -msgstr "ยà¸à¹€à¸¥à¸´à¸" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import & Open" -msgstr "นำเข้าà¹à¸¥à¸°à¹€à¸›à¸´à¸”" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Edited scene has not been saved, open imported scene anyway?" -msgstr "ฉาà¸à¸›à¸±à¸ˆà¸ˆà¸¸à¸šà¸±à¸™à¸¢à¸±à¸‡à¹„ม่ได้บันทึภยืนยันเปิดไฟล์ฉาà¸à¸—ี่นำเข้า?" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Image:" -msgstr "นำเข้าไฟล์รูป:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Can't import a file over itself:" -msgstr "นำเข้าไฟล์ทับตัวเà¸à¸‡à¹„ม่ได้:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't localize path: %s (already local)" -msgstr "ทำที่à¸à¸¢à¸¹à¹ˆà¹„ฟล์ให้เป็นภายในไม่ได้: %s (เป็นภายในà¸à¸¢à¸¹à¹ˆà¹à¸¥à¹‰à¸§)" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "3D Scene Animation" -msgstr "à¹à¸à¸™à¸´à¹€à¸¡à¸Šà¸±à¸™à¸‰à¸²à¸ 3D" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Uncompressed" -msgstr "ไม่บีบà¸à¸±à¸”" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossless (PNG)" -msgstr "บีบà¸à¸±à¸”à¹à¸šà¸šà¹„ม่เสียคุณภาพ (PNG)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossy (WebP)" -msgstr "บีบà¸à¸±à¸”à¹à¸šà¸šà¹€à¸ªà¸µà¸¢à¸„ุณภาพ (WebP)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress (VRAM)" -msgstr "บีบà¸à¸±à¸” (VRAM)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Format" -msgstr "รูปà¹à¸šà¸š Texture" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Compression Quality (WebP):" -msgstr "คุณภาพà¸à¸²à¸£à¸šà¸µà¸šà¸à¸±à¸” Texture (WebP):" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Options" -msgstr "ตัวเลืà¸à¸ Texture" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Please specify some files!" -msgstr "à¸à¸£à¸¸à¸“าเลืà¸à¸à¸ªà¸±à¸à¹„ฟล์!" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "At least one file needed for Atlas." -msgstr "Atlas ต้à¸à¸‡à¸à¸²à¸£à¹„ฟล์à¸à¸¢à¹ˆà¸²à¸‡à¸™à¹‰à¸à¸¢ 1 ไฟล์" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Error importing:" -msgstr "ผิดพลาดขณะนำเข้า:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Only one file is required for large texture." -msgstr "Texture ขนาดใหà¸à¹ˆà¸•้à¸à¸‡à¸à¸²à¸£à¹à¸„่ไฟล์เดียว" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Max Texture Size:" -msgstr "ขนาด Texture ที่ใหà¸à¹ˆà¸—ี่สุด:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for Atlas (2D)" -msgstr "นำเข้า Texture สำหรับ Atlas (2D)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cell Size:" -msgstr "ขนาดเซลล์:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Large Texture" -msgstr "Texture ขนาดใหà¸à¹ˆ" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Textures (2D)" -msgstr "นำเข้า Texture ขนาดใหà¸à¹ˆ (2D)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture" -msgstr "Texture ต้นฉบับ" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Base Atlas Texture" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s)" -msgstr "Texture ต้นฉบับ" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 2D" -msgstr "นำเข้า Texture สำหรับ 2D" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 3D" -msgstr "นำเข้า Texture สำหรับ 3D" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures" -msgstr "นำเข้า Texture" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "2D Texture" -msgstr "Texture 2D" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "3D Texture" -msgstr "Texture 3D" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Atlas Texture" -msgstr "" - -#: 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 "โปรดทราบ: ไม่จำเป็นต้à¸à¸‡à¸™à¸³à¹€à¸‚้า Texture 2D à¹à¸„่คัดลà¸à¸à¹„ฟล์ png/jpg เข้าสู่โปรเจà¸à¸•์" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Crop empty space." -msgstr "ครà¸à¸šà¸•ัดพื้นที่ว่าง" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture" -msgstr "Texture" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Texture" -msgstr "นำเข้า Texture ขนาดใหà¸à¹ˆ" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Load Source Image" -msgstr "โหลดรูปต้นฉบับ" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Slicing" -msgstr "ตัด" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Inserting" -msgstr "à¹à¸—รà¸" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Saving" -msgstr "บันทึà¸" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save large texture:" -msgstr "บันทึภTexture ขนาดใหà¸à¹ˆà¹„ม่ได้:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Build Atlas For:" -msgstr "สร้าง Atlas สำหรับ:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Loading Image:" -msgstr "โหลดรูป:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't load image:" -msgstr "โหลดรูปไม่ได้:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Converting Images" -msgstr "à¸à¸³à¸¥à¸±à¸‡à¹à¸›à¸¥à¸‡à¸£à¸¹à¸›" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cropping Images" -msgstr "ครà¸à¸šà¸•ัดรูป" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Blitting Images" -msgstr "คัดลà¸à¸à¸£à¸¹à¸›" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save atlas image:" -msgstr "บันทึภAtlas ไม่ได้:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save converted texture:" -msgstr "บันทึภTexture ที่à¹à¸›à¸¥à¸‡à¹à¸¥à¹‰à¸§à¹„ม่ได้:" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid source!" -msgstr "ต้นฉบับไม่ถูà¸à¸•้à¸à¸‡!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid translation source!" -msgstr "ต้นฉบับà¸à¸²à¸£à¹à¸›à¸¥à¹„ม่ถูà¸à¸•้à¸à¸‡!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Column" -msgstr "คà¸à¸¥à¸±à¸¡à¸™à¹Œ" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/script_create_dialog.cpp -msgid "Language" -msgstr "ภาษา" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No items to import!" -msgstr "ไม่มีà¸à¸°à¹„รให้นำเข้า!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No target path!" -msgstr "ไม่มีที่à¸à¸¢à¸¹à¹ˆà¸›à¸¥à¸²à¸¢à¸—าง!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translations" -msgstr "นำเข้าà¸à¸²à¸£à¹à¸›à¸¥" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Couldn't import!" -msgstr "นำเข้าไม่ได้!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translation" -msgstr "นำเข้าà¸à¸²à¸£à¹à¸›à¸¥" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Source CSV:" -msgstr "CSV ต้นฉบับ:" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Ignore First Row" -msgstr "ไม่สนใจà¹à¸–วà¹à¸£à¸" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Compress" -msgstr "บีบà¸à¸±à¸”" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Add to Project (project.godot)" -msgstr "เพิ่มเข้าโปรเจà¸à¸•์ (project.godot)" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Languages:" -msgstr "นำเข้าภาษา:" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Translation" -msgstr "à¸à¸²à¸£à¹à¸›à¸¥" - #: editor/multi_node_edit.cpp msgid "MultiNode Set" msgstr "à¸à¸³à¸«à¸™à¸” MultiNode" @@ -3297,6 +2661,49 @@ msgstr "à¸à¸¥à¸¸à¹ˆà¸¡" msgid "Select a Node to edit Signals and Groups." msgstr "เลืà¸à¸à¹‚หนดเพื่à¸à¹à¸à¹‰à¹„ขสัà¸à¸à¸²à¸“à¹à¸¥à¸°à¸à¸¥à¸¸à¹ˆà¸¡" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create Poly" +msgstr "สร้างรูปหลายเหลี่ยม" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly" +msgstr "à¹à¸à¹‰à¹„ขรูปหลายเหลี่ยม" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +#, fuzzy +msgid "Insert Point" +msgstr "à¹à¸—รà¸" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly (Remove Point)" +msgstr "à¹à¸à¹‰à¹„ขรูปหลายเหลี่ยม (ลบจุด)" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Remove Poly And Point" +msgstr "ลบรูปหลายเหลี่ยมà¹à¸¥à¸°à¸ˆà¸¸à¸”" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create a new polygon from scratch." +msgstr "สร้างรูปหลายเหลี่ยมจาà¸à¸„วามว่างเปล่า" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "" +"Edit existing polygon:\n" +"LMB: Move Point.\n" +"Ctrl+LMB: Split Segment.\n" +"RMB: Erase Point." +msgstr "" +"à¹à¸à¹‰à¹„ขรูปหลายเหลี่ยม:\n" +"เมาส์ซ้าย: ย้ายจุด\n" +"Ctrl+เมาส์ซ้าย: à¹à¸¢à¸à¸ªà¹ˆà¸§à¸™\n" +"เมาส์ขวา: ลบจุด" + #: editor/plugins/animation_player_editor_plugin.cpp msgid "Toggle Autoplay" msgstr "เปิดปิดà¸à¸²à¸£à¹€à¸¥à¹ˆà¸™à¸à¸±à¸•โนมัติ" @@ -3450,7 +2857,6 @@ msgstr "ชื่à¸à¹à¸à¸™à¸´à¹€à¸¡à¸Šà¸±à¸™:" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp #: editor/script_create_dialog.cpp msgid "Error!" @@ -3478,9 +2884,8 @@ msgid "New name:" msgstr "ชื่à¸à¹ƒà¸«à¸¡à¹ˆ:" #: editor/plugins/animation_tree_editor_plugin.cpp -#, fuzzy msgid "Edit Filters" -msgstr "à¹à¸à¹‰à¹„ขตัวà¸à¸£à¸à¸‡à¹‚หนด" +msgstr "à¹à¸à¹‰à¹„ขตัวà¸à¸£à¸à¸‡" #: editor/plugins/animation_tree_editor_plugin.cpp #: editor/plugins/multimesh_editor_plugin.cpp @@ -3562,10 +2967,6 @@ msgid "Delete Input" msgstr "ลบà¸à¸´à¸™à¸žà¸¸à¸•" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Rename" -msgstr "เปลี่ยนชื่à¸" - -#: editor/plugins/animation_tree_editor_plugin.cpp msgid "Animation tree is valid." msgstr "ผังà¹à¸à¸™à¸´à¹€à¸¡à¸Šà¸±à¸™à¸–ูà¸à¸•้à¸à¸‡" @@ -3621,64 +3022,181 @@ msgstr "à¹à¸à¹‰à¹„ขตัวà¸à¸£à¸à¸‡à¹‚หนด" msgid "Filters.." msgstr "ตัวà¸à¸£à¸à¸‡.." -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing %d Triangles:" -msgstr "วิเคราะห์สามเหลี่ยม %d à¸à¸±à¸™:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Free" +msgstr "ฟรี" -#: editor/plugins/baked_light_baker.cpp -msgid "Triangle #" -msgstr "สามเหลี่ยม #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Contents:" +msgstr "ประà¸à¸à¸šà¸”้วย:" -#: editor/plugins/baked_light_baker.cpp -msgid "Light Baker Setup:" -msgstr "ตั้งค่า Light Baker:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "View Files" +msgstr "ดูไฟล์" -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing Geometry" -msgstr "วิเคราะห์ Geometry" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve hostname:" +msgstr "ไม่พบตำà¹à¸«à¸™à¹ˆà¸‡à¸™à¸µà¹‰:" -#: editor/plugins/baked_light_baker.cpp -msgid "Fixing Lights" -msgstr "ซ่à¸à¸¡à¹à¸‹à¸¡à¹à¸ªà¸‡" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve." +msgstr "ค้นหาไม่สำเร็จ" -#: editor/plugins/baked_light_baker.cpp -msgid "Making BVH" -msgstr "à¸à¸³à¸¥à¸±à¸‡à¸ªà¸£à¹‰à¸²à¸‡ BVH" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connection error, please try again." +msgstr "เชื่à¸à¸¡à¸•่à¸à¹„ม่ได้ à¸à¸£à¸¸à¸“าลà¸à¸‡à¹ƒà¸«à¸¡à¹ˆ" -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Light Octree" -msgstr "à¸à¸³à¸¥à¸±à¸‡à¸ªà¸£à¹‰à¸²à¸‡ Light Octree" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't connect." +msgstr "เชื่à¸à¸¡à¸•่à¸à¹„ม่ได้" -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Octree Texture" -msgstr "สร้าง Texture Octree" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't connect to host:" +msgstr "ไม่สามารถเชื่à¸à¸¡à¸•่à¸à¸à¸±à¸šà¹‚ฮสต์:" -#: editor/plugins/baked_light_baker.cpp -msgid "Transfer to Lightmaps:" -msgstr "ส่งผ่านไปยัง Lightmaps:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response from host:" +msgstr "ไม่มีà¸à¸²à¸£à¸•à¸à¸šà¸à¸¥à¸±à¸šà¸ˆà¸²à¸à¹‚ฮสต์:" -#: editor/plugins/baked_light_baker.cpp -msgid "Allocating Texture #" -msgstr "จัดสรร Texture #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response." +msgstr "ไม่มีà¸à¸²à¸£à¸•à¸à¸šà¸à¸¥à¸±à¸š" -#: editor/plugins/baked_light_baker.cpp -msgid "Baking Triangle #" -msgstr "à¸à¸³à¸¥à¸±à¸‡ Bake สามเหลี่ยม #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, return code:" +msgstr "à¸à¸²à¸£à¸£à¹‰à¸à¸‡à¸‚à¸à¸œà¸´à¸”พลาด รหัส:" -#: editor/plugins/baked_light_baker.cpp -msgid "Post-Processing Texture #" -msgstr "ประมวลผล Texture #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Req. Failed." +msgstr "ร้à¸à¸‡à¸‚à¸à¸œà¸´à¸”พลาด" -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Bake!" -msgstr "" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, too many redirects" +msgstr "à¸à¸²à¸£à¸£à¹‰à¸à¸‡à¸‚à¸à¸œà¸´à¸”พลาด เปลี่ยนทางมาà¸à¹€à¸à¸´à¸™à¹„ป" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Redirect Loop." +msgstr "เปลี่ยนทางมาà¸à¹€à¸à¸´à¸™à¹„ป" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed:" +msgstr "ผิดพลาด:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Bad download hash, assuming file has been tampered with." +msgstr "à¹à¸®à¸Šà¸œà¸´à¸”พลาด ไฟล์ดาวน์โหลดà¸à¸²à¸ˆà¹€à¸ªà¸µà¸¢à¸«à¸²à¸¢" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Expected:" +msgstr "ที่ควรจะเป็น:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Got:" +msgstr "ที่ได้รับ:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed sha256 hash check" +msgstr "ผิดพลาดในà¸à¸²à¸£à¸•รวจสà¸à¸šà¹à¸®à¸Š SHA256" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Asset Download Error:" +msgstr "à¸à¸²à¸£à¸”าวน์โหลดผิดพลาด:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Fetching:" +msgstr "à¸à¸³à¸¥à¸±à¸‡à¸£à¸±à¸šà¸‚้à¸à¸¡à¸¹à¸¥:" -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Reset the lightmap octree baking process (start over)." -msgstr "รีเซ็ตขั้นตà¸à¸™à¸à¸²à¸£ bake lightmap octree (เริ่มใหม่)" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Resolving.." +msgstr "à¸à¸³à¸¥à¸±à¸‡à¸„้นหา.." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connecting.." +msgstr "à¸à¸³à¸¥à¸±à¸‡à¹€à¸Šà¸·à¹ˆà¸à¸¡à¸•่à¸.." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Requesting.." +msgstr "à¸à¸³à¸¥à¸±à¸‡à¸£à¹‰à¸à¸‡à¸‚à¸.." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Error making request" +msgstr "à¸à¸²à¸£à¸£à¹‰à¸à¸‡à¸‚à¸à¸œà¸´à¸”พลาด" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Idle" +msgstr "พร้à¸à¸¡à¹ƒà¸Šà¹‰à¸‡à¸²à¸™" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Retry" +msgstr "ลà¸à¸‡à¹ƒà¸«à¸¡à¹ˆ" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download Error" +msgstr "ดาวน์โหลดผิดพลาด" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download for this asset is already in progress!" +msgstr "à¸à¸³à¸¥à¸±à¸‡à¸”าวน์โหลดไฟล์นี้à¸à¸¢à¸¹à¹ˆà¹à¸¥à¹‰à¸§!" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "first" +msgstr "à¹à¸£à¸à¸ªà¸¸à¸”" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "prev" +msgstr "à¸à¹ˆà¸à¸™à¸«à¸™à¹‰à¸²" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "next" +msgstr "ถัดไป" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "last" +msgstr "ท้ายสุด" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "All" +msgstr "ทั้งหมด" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Plugins" +msgstr "ปลั๊à¸à¸à¸´à¸™" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Sort:" +msgstr "เรียงตาม:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Reverse" +msgstr "ย้à¸à¸™à¸à¸¥à¸±à¸š" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Category:" +msgstr "หมวดหมู่:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Site:" +msgstr "ไซต์:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Support.." +msgstr "à¸à¸²à¸£à¸ªà¸™à¸±à¸šà¸ªà¸™à¸¸à¸™.." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Official" +msgstr "ผู้พัฒนา" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Testing" +msgstr "ทดสà¸à¸š" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Assets ZIP File" +msgstr "ไฟล์ ZIP" #: editor/plugins/camera_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp msgid "Preview" msgstr "ตัวà¸à¸¢à¹ˆà¸²à¸‡" @@ -3721,12 +3239,18 @@ msgid "Edit CanvasItem" msgstr "à¹à¸à¹‰à¹„ข CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Change Anchors" +#, fuzzy +msgid "Anchors only" +msgstr "ตรึง" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Change Anchors and Margins" msgstr "à¹à¸à¹‰à¹„ขà¸à¸²à¸£à¸•รึง" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom (%):" -msgstr "ซูม (%):" +msgid "Change Anchors" +msgstr "à¹à¸à¹‰à¹„ขà¸à¸²à¸£à¸•รึง" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Paste Pose" @@ -3778,60 +3302,78 @@ msgid "Pan Mode" msgstr "โหมดมุมมà¸à¸‡" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Lock the selected object in place (can't be moved)." -msgstr "ล็à¸à¸„ไม่ให้วัตถุที่เลืà¸à¸à¸¢à¹‰à¸²à¸¢à¸•ำà¹à¸«à¸™à¹ˆà¸‡" +#, fuzzy +msgid "Toggles snapping" +msgstr "เปิด/ปิด จุดพัà¸à¹‚ปรà¹à¸à¸£à¸¡" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Unlock the selected object (can be moved)." -msgstr "ปลดล็à¸à¸„วัตถุที่เลืà¸à¸" +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "จำà¸à¸±à¸”à¸à¸²à¸£à¹€à¸„ลื่à¸à¸™à¸¢à¹‰à¸²à¸¢" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Makes sure the object's children are not selectable." -msgstr "ทำให้เลืà¸à¸à¹‚หนดลูà¸à¹„ม่ได้" +#, fuzzy +msgid "Snapping options" +msgstr "ตัวเลืà¸à¸à¹à¸à¸™à¸´à¹€à¸¡à¸Šà¸±à¸™" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Restores the object's children's ability to be selected." -msgstr "ทำให้เลืà¸à¸à¹‚หนดลูà¸à¹„ด้เหมืà¸à¸™à¹€à¸”ิม" +#, fuzzy +msgid "Snap to grid" +msgstr "โหมดà¸à¸²à¸£à¸ˆà¸³à¸à¸±à¸”:" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp -#: editor/project_settings_editor.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Edit" -msgstr "à¹à¸à¹‰à¹„ข" +msgid "Use Rotation Snap" +msgstr "จำà¸à¸±à¸”à¸à¸²à¸£à¸«à¸¡à¸¸à¸™" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" -msgstr "จำà¸à¸±à¸”à¸à¸²à¸£à¹€à¸„ลื่à¸à¸™à¸¢à¹‰à¸²à¸¢" +#, fuzzy +msgid "Configure Snap..." +msgstr "ตั้งค่าà¸à¸²à¸£à¸ˆà¸³à¸à¸±à¸”.." #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" -msgstr "à¹à¸ªà¸”งเส้นตาราง" +msgid "Snap Relative" +msgstr "จำà¸à¸±à¸”โดยใช้ตำà¹à¸«à¸™à¹ˆà¸‡à¸›à¸±à¸ˆà¸ˆà¸¸à¸šà¸±à¸™" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Rotation Snap" -msgstr "จำà¸à¸±à¸”à¸à¸²à¸£à¸«à¸¡à¸¸à¸™" +msgid "Use Pixel Snap" +msgstr "จำà¸à¸±à¸”ให้ย้ายเป็นพิà¸à¹€à¸‹à¸¥" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap Relative" -msgstr "จำà¸à¸±à¸”โดยใช้ตำà¹à¸«à¸™à¹ˆà¸‡à¸›à¸±à¸ˆà¸ˆà¸¸à¸šà¸±à¸™" +msgid "Smart snapping" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "ตั้งค่าà¸à¸²à¸£à¸ˆà¸³à¸à¸±à¸”.." +#, fuzzy +msgid "Snap to parent" +msgstr "ขยายให้เต็มโหนดà¹à¸¡à¹ˆ" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Pixel Snap" -msgstr "จำà¸à¸±à¸”ให้ย้ายเป็นพิà¸à¹€à¸‹à¸¥" +msgid "Snap to node anchor" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to node sides" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to other nodes" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Lock the selected object in place (can't be moved)." +msgstr "ล็à¸à¸„ไม่ให้วัตถุที่เลืà¸à¸à¸¢à¹‰à¸²à¸¢à¸•ำà¹à¸«à¸™à¹ˆà¸‡" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Unlock the selected object (can be moved)." +msgstr "ปลดล็à¸à¸„วัตถุที่เลืà¸à¸" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Makes sure the object's children are not selectable." +msgstr "ทำให้เลืà¸à¸à¹‚หนดลูà¸à¹„ม่ได้" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Skeleton.." -msgstr "โครงà¸à¸£à¸°à¸”ูà¸.." +msgid "Restores the object's children's ability to be selected." +msgstr "ทำให้เลืà¸à¸à¹‚หนดลูà¸à¹„ด้เหมืà¸à¸™à¹€à¸”ิม" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Make Bones" @@ -3859,12 +3401,19 @@ msgid "View" msgstr "มุมมà¸à¸‡" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Reset" -msgstr "รีเซ็ตà¸à¸²à¸£à¸‹à¸¹à¸¡" +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "à¹à¸ªà¸”งเส้นตาราง" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show helpers" +msgstr "à¹à¸ªà¸”งà¸à¸£à¸°à¸”ูà¸" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Set.." -msgstr "ตั้งค่าà¸à¸²à¸£à¸‹à¸¹à¸¡.." +#, fuzzy +msgid "Show rulers" +msgstr "à¹à¸ªà¸”งà¸à¸£à¸°à¸”ูà¸" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -3875,8 +3424,9 @@ msgid "Frame Selection" msgstr "ให้สิ่งที่เลืà¸à¸à¹€à¸•็มจà¸" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Anchor" -msgstr "ตรึง" +#, fuzzy +msgid "Layout" +msgstr "บันทึà¸à¹€à¸¥à¸¢à¹Œà¹€à¸à¸²à¸•์" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Keys" @@ -3899,12 +3449,21 @@ msgid "Clear Pose" msgstr "ลบท่าทาง" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Set a Value" -msgstr "เซ็ตค่า" +msgid "Drag pivot from mouse position" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap (Pixels):" -msgstr "Snap (พิà¸à¹€à¸‹à¸¥):" +#, fuzzy +msgid "Set pivot at mouse position" +msgstr "à¸à¸³à¸«à¸™à¸”เส้นโค้งขาà¸à¸à¸" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Multiply grid step by 2" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Divide grid step by 2" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Add %s" @@ -3914,23 +3473,28 @@ msgstr "เพิ่ม %s" msgid "Adding %s..." msgstr "à¸à¸³à¸¥à¸±à¸‡à¹€à¸žà¸´à¹ˆà¸¡ %s..." -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Create Node" msgstr "สร้างโหนด" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Error instancing scene from %s" msgstr "ผิดพลาดขณะà¸à¸´à¸™à¸ªà¹à¸•นซ์ฉาà¸à¸ˆà¸²à¸ %s" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "OK :(" msgstr "ตà¸à¸¥à¸‡ :(" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "No parent to instance a child at." msgstr "ไม่พบโหนดà¹à¸¡à¹ˆà¸—ี่จะรับà¸à¸´à¸™à¸ªà¹à¸•นซ์โหนดลูà¸" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "This operation requires a single selected node." msgstr "ต้à¸à¸‡à¹€à¸¥à¸·à¸à¸à¹€à¸žà¸µà¸¢à¸‡à¹‚หนดเดียว" @@ -3946,45 +3510,6 @@ msgstr "" "ลาภ& วาง + Shift: เพิ่มเป็นโหนดà¸à¸²à¸•ิ\n" "ลาภ& วาง + Alt: เปลี่ยนประเภทโหนด" -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Create Poly" -msgstr "สร้างรูปหลายเหลี่ยม" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly" -msgstr "à¹à¸à¹‰à¹„ขรูปหลายเหลี่ยม" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly (Remove Point)" -msgstr "à¹à¸à¹‰à¹„ขรูปหลายเหลี่ยม (ลบจุด)" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Create a new polygon from scratch." -msgstr "สร้างรูปหลายเหลี่ยมจาà¸à¸„วามว่างเปล่า" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -msgid "" -"Edit existing polygon:\n" -"LMB: Move Point.\n" -"Ctrl+LMB: Split Segment.\n" -"RMB: Erase Point." -msgstr "" - #: editor/plugins/collision_polygon_editor_plugin.cpp msgid "Create Poly3D" msgstr "à¹à¸à¹‰à¹„ขรูปหลายเหลี่ยม 3D" @@ -3994,14 +3519,6 @@ msgid "Set Handle" msgstr "ปรับขนาดรูปร่าง" #: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Creating Mesh Library" -msgstr "à¸à¸³à¸¥à¸±à¸‡à¸ªà¸£à¹‰à¸²à¸‡ Mesh Library" - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Thumbnail.." -msgstr "รูปตัวà¸à¸¢à¹ˆà¸²à¸‡.." - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Remove item %d?" msgstr "ลบไà¸à¹€à¸—ม %d?" @@ -4024,19 +3541,38 @@ msgid "Update from Scene" msgstr "à¸à¸±à¸žà¹€à¸”ตจาà¸à¸‰à¸²à¸" #: editor/plugins/curve_editor_plugin.cpp +msgid "Flat0" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Flat1" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp #, fuzzy -msgid "Modify Curve Point" -msgstr "à¹à¸à¹‰à¹„ขเส้นโค้ง" +msgid "Ease in" +msgstr "เข้านุ่มนวล" #: editor/plugins/curve_editor_plugin.cpp #, fuzzy +msgid "Ease out" +msgstr "à¸à¸à¸à¸™à¸¸à¹ˆà¸¡à¸™à¸§à¸¥" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Smoothstep" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Modify Curve Point" +msgstr "à¹à¸à¹‰à¹„ขจุดบนเส้นโค้ง" + +#: editor/plugins/curve_editor_plugin.cpp msgid "Modify Curve Tangent" -msgstr "à¹à¸à¹‰à¹„ขเส้นโค้ง" +msgstr "à¹à¸à¹‰à¹„ขเส้นสัมผัสเส้นโค้ง" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Load Curve Preset" -msgstr "โหลดค่าล่วงหน้า" +msgstr "โหลดเส้นโค้งตัวà¸à¸¢à¹ˆà¸²à¸‡" #: editor/plugins/curve_editor_plugin.cpp msgid "Add point" @@ -4047,23 +3583,20 @@ msgid "Remove point" msgstr "ลบจุด" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Left linear" -msgstr "เส้นตรง" +msgstr "เส้นตรงซ้าย" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Right linear" -msgstr "มุมขวา" +msgstr "เส้นตรงขวา" #: editor/plugins/curve_editor_plugin.cpp msgid "Load preset" msgstr "โหลดค่าล่วงหน้า" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Remove Curve Point" -msgstr "ลบจุด" +msgstr "ลบจุดบนเส้นโค้ง" #: editor/plugins/curve_editor_plugin.cpp msgid "Toggle Curve Linear Tangent" @@ -4071,7 +3604,7 @@ msgstr "" #: editor/plugins/curve_editor_plugin.cpp msgid "Hold Shift to edit tangents individually" -msgstr "" +msgstr "à¸à¸” Shift ค้างเพื่à¸à¸›à¸£à¸±à¸šà¹€à¸ªà¹‰à¸™à¸ªà¸±à¸¡à¸œà¸±à¸ªà¹à¸¢à¸à¸à¸±à¸™" #: editor/plugins/gradient_editor_plugin.cpp msgid "Add/Remove Color Ramp Point" @@ -4099,28 +3632,26 @@ msgid "" "No OccluderPolygon2D resource on this node.\n" "Create and assign one?" msgstr "" +"ไม่มี OccluderPolygon2D ในโหนดนี้\n" +"สร้างà¹à¸¥à¸°à¸à¸³à¸«à¸™à¸”?" #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "Create Occluder Polygon" msgstr "สร้างรูปหลายเหลี่ยมà¸à¸±à¹‰à¸™à¹à¸ªà¸‡" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Edit existing polygon:" msgstr "à¹à¸à¹‰à¹„ขรูปหลายเหลี่ยมเดิม:" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "LMB: Move Point." msgstr "คลิà¸à¸‹à¹‰à¸²à¸¢: ย้ายจุด" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Ctrl+LMB: Split Segment." msgstr "Ctrl+คลิà¸à¸‹à¹‰à¸²à¸¢: à¹à¸¢à¸à¸ªà¹ˆà¸§à¸™" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "RMB: Erase Point." msgstr "คลิà¸à¸‚วา: ลบจุด" @@ -4221,6 +3752,10 @@ msgid "Create Outline" msgstr "สร้างเส้นรà¸à¸šà¸£à¸¹à¸›" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh" +msgstr "Mesh" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Body" msgstr "สร้าง Trimesh Static Body" @@ -4348,14 +3883,83 @@ msgstr "สุ่มขนาด:" msgid "Populate" msgstr "" +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Bake!" +msgstr "" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +#, fuzzy +msgid "Bake the navigation mesh.\n" +msgstr "สร้าง Mesh นำทาง" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +#, fuzzy +msgid "Clear the navigation mesh." +msgstr "สร้าง Mesh นำทาง" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Setting up Configuration..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Calculating grid size..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Creating heightfield..." +msgstr "à¸à¸³à¸¥à¸±à¸‡à¸ªà¸£à¹‰à¸²à¸‡ Light Octree" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Marking walkable triangles..." +msgstr "สตริงหลายภาษา.." + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Constructing compact heightfield..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Eroding walkable area..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Partioning..." +msgstr "คำเตืà¸à¸™" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Creating contours..." +msgstr "สร้าง Texture Octree" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Creating polymesh..." +msgstr "สร้างเส้นขà¸à¸š Mesh.." + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Converting to native navigation mesh..." +msgstr "สร้าง Mesh นำทาง" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Navigation Mesh Generator Setup:" +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Parsing Geometry..." +msgstr "วิเคราะห์ Geometry" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Done!" +msgstr "" + #: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Create Navigation Polygon" msgstr "สร้างรูปทรงนำทาง" -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Remove Poly And Point" -msgstr "ลบรูปหลายเหลี่ยมà¹à¸¥à¸°à¸ˆà¸¸à¸”" - #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Clear Emission Mask" msgstr "ลบ Mask à¸à¸²à¸£à¸›à¸¥à¹ˆà¸à¸¢" @@ -4392,9 +3996,8 @@ msgstr "โหลด Mask à¸à¸²à¸£à¸›à¸°à¸—ุ" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "Particles" -msgstr "มุมรูปทรง" +msgstr "à¸à¸™à¸¸à¸ าค" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generated Point Count:" @@ -4531,15 +4134,18 @@ msgid "Curve Point #" msgstr "จุดเส้นโค้ง #" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Point Pos" +#, fuzzy +msgid "Set Curve Point Position" msgstr "à¸à¸³à¸«à¸™à¸”พิà¸à¸±à¸”จุดเส้นโค้ง" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve In Pos" +#, fuzzy +msgid "Set Curve In Position" msgstr "à¸à¸³à¸«à¸™à¸”เส้นโค้งขาเข้า" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Out Pos" +#, fuzzy +msgid "Set Curve Out Position" msgstr "à¸à¸³à¸«à¸™à¸”เส้นโค้งขาà¸à¸à¸" #: editor/plugins/path_editor_plugin.cpp @@ -4599,6 +4205,14 @@ msgid "Scale Polygon" msgstr "ปรับขนาดรูปหลายเหลี่ยม" #: editor/plugins/polygon_2d_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit" +msgstr "à¹à¸à¹‰à¹„ข" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon->UV" msgstr "รูปหลายเหลี่ยม->UV" @@ -4653,63 +4267,10 @@ msgstr "โหลดรีซà¸à¸£à¹Œà¸ª" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "วาง" -#: editor/plugins/rich_text_editor_plugin.cpp -msgid "Parse BBCode" -msgstr "ประมวลผล BBCode" - -#: editor/plugins/sample_editor_plugin.cpp -msgid "Length:" -msgstr "ความยาว:" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Open Sample File(s)" -msgstr "เปิดไฟล์เสียง" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "ERROR: Couldn't load sample!" -msgstr "ผิดพลาด: โหลดไฟล์เสียงไม่ได้!" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Add Sample" -msgstr "เพิ่มไฟล์เสียง" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Rename Sample" -msgstr "เปลี่ยนชื่à¸à¹„ฟล์เสียง" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Delete Sample" -msgstr "ลบไฟล์เสียง" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "16 Bits" -msgstr "16 บิต" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "8 Bits" -msgstr "8 บิต" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Stereo" -msgstr "สเตà¸à¸£à¸´à¹‚à¸" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Mono" -msgstr "โมโน" - -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/script_editor_debugger.cpp -msgid "Format" -msgstr "รูปà¹à¸šà¸š" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Pitch" -msgstr "เสียงสูงต่ำ" - #: editor/plugins/script_editor_plugin.cpp msgid "Clear Recent Files" msgstr "ล้างรายà¸à¸²à¸£à¹„ฟล์ล่าสุด" @@ -4719,6 +4280,8 @@ msgid "" "Close and save changes?\n" "\"" msgstr "" +"ปิดà¹à¸¥à¸°à¸šà¸±à¸™à¸—ึà¸?\n" +"\"" #: editor/plugins/script_editor_plugin.cpp msgid "Error while saving theme" @@ -4746,7 +4309,7 @@ msgstr "บันทึà¸à¸˜à¸µà¸¡à¹€à¸›à¹‡à¸™" #: editor/plugins/script_editor_plugin.cpp msgid " Class Reference" -msgstr "" +msgstr " ตำราà¸à¹‰à¸²à¸‡à¸à¸´à¸‡à¸„ลาส" #: editor/plugins/script_editor_plugin.cpp msgid "Next script" @@ -4800,10 +4363,13 @@ msgstr "ปิดคู่มืà¸" msgid "Close All" msgstr "ปิดทั้งหมด" +#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp +msgid "Run" +msgstr "รัน" + #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Toggle Scripts Panel" -msgstr "เลืà¸à¸/ลบโฟลเดà¸à¸£à¹Œà¸—ี่ชà¸à¸š" +msgstr "เปิด/ปิดà¹à¸œà¸‡à¸ªà¸„ริปต์" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -4838,21 +4404,8 @@ msgid "Keep Debugger Open" msgstr "เปิดตัวดีบัคค้างไว้" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Debug with external editor" -msgstr "เปิดตัวà¹à¸à¹‰à¹„ขถัดไป" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Window" -msgstr "หน้าต่าง" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Left" -msgstr "ย้ายไปซ้าย" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Right" -msgstr "ย้ายไปขวา" +msgstr "ดีบัคด้วยโปรà¹à¸à¸£à¸¡à¸à¸·à¹ˆà¸™" #: editor/plugins/script_editor_plugin.cpp msgid "Open Godot online documentation" @@ -4909,7 +4462,7 @@ msgstr "สคริปต์à¸à¸±à¸‡à¸ˆà¸°à¹à¸à¹‰à¹„ขได้ต่à¸à¹€ #: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." -msgstr "" +msgstr "สามารถวางรีซà¸à¸£à¹Œà¸ªà¸ˆà¸²à¸à¸£à¸°à¸šà¸šà¹„ฟล์ได้เท่านั้น" #: editor/plugins/script_text_editor.cpp msgid "Pick Color" @@ -4939,7 +4492,7 @@ msgstr "ตัด" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Copy" msgstr "คัดลà¸à¸" @@ -4958,9 +4511,8 @@ msgid "Move Down" msgstr "ย้ายลง" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Delete Line" -msgstr "ลบจุด" +msgstr "ลบเส้น" #: editor/plugins/script_text_editor.cpp msgid "Indent Left" @@ -4979,7 +4531,6 @@ msgid "Clone Down" msgstr "คัดลà¸à¸à¸šà¸£à¸£à¸—ัดลงมา" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Complete Symbol" msgstr "เสนà¸à¹à¸™à¸°à¸„ำเต็ม" @@ -4988,12 +4539,10 @@ msgid "Trim Trailing Whitespace" msgstr "ลบตัวà¸à¸±à¸à¸©à¸£à¸—ี่มà¸à¸‡à¹„ม่เห็น" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Convert Indent To Spaces" msgstr "ใช้เว้นวรรคเป็นย่à¸à¸«à¸™à¹‰à¸²" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Convert Indent To Tabs" msgstr "ใช้à¹à¸—็บเป็นย่à¸à¸«à¸™à¹‰à¸²" @@ -5130,16 +4679,18 @@ msgid "Add/Remove to Color Ramp" msgstr "เพิ่ม/ลบในà¸à¸²à¸£à¹„ล่สี" #: editor/plugins/shader_graph_editor_plugin.cpp +#, fuzzy msgid "Add/Remove to Curve Map" -msgstr "" +msgstr "เพิ่ม/ลบในเส้นโค้ง" #: editor/plugins/shader_graph_editor_plugin.cpp +#, fuzzy msgid "Modify Curve Map" -msgstr "" +msgstr "à¹à¸à¹‰à¹„ขเส้นโค้ง" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Input Name" -msgstr "" +msgstr "เปลี่ยนชื่à¸à¸à¸´à¸™à¸žà¸¸à¸•" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Connect Graph Nodes" @@ -5206,10 +4757,6 @@ msgid "View Plane Transform." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Scaling to %s%%." -msgstr "ปรับขนาดเป็น %s%%" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." msgstr "หมุน %s à¸à¸‡à¸¨à¸²" @@ -5226,10 +4773,6 @@ msgid "Top View." msgstr "มุมบน" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Top" -msgstr "บน" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "มุมหลัง" @@ -5310,17 +4853,14 @@ msgid "Display Overdraw" msgstr "à¹à¸ªà¸”งà¸à¸²à¸£à¸§à¸²à¸”ทับซ้à¸à¸™" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Display Unshaded" msgstr "à¹à¸ªà¸”งà¹à¸šà¸šà¹„ร้เงา" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "View Environment" msgstr "à¹à¸ªà¸”งสภาพà¹à¸§à¸”ล้à¸à¸¡" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "View Gizmos" msgstr "à¹à¸ªà¸”งสัà¸à¸¥à¸±à¸à¸©à¸“์" @@ -5333,9 +4873,8 @@ msgid "Audio Listener" msgstr "ตัวรับเสียง" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Doppler Enable" -msgstr "เปิด" +msgstr "เปิดดà¸à¸›à¹€à¸žà¸¥à¸à¸£à¹Œ" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Left" @@ -5366,27 +4905,26 @@ msgid "Freelook Speed Modifier" msgstr "มุมมà¸à¸‡à¸à¸´à¸ªà¸£à¸° ปรับความเร็ว" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "preview" msgstr "ตัวà¸à¸¢à¹ˆà¸²à¸‡" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "XForm Dialog" msgstr "เครื่à¸à¸‡à¸¡à¸·à¸à¹€à¸„ลื่à¸à¸™à¸¢à¹‰à¸²à¸¢" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Select Mode (Q)\n" -msgstr "โหมดเลืà¸à¸" +msgstr "โหมดเลืà¸à¸ (Q)\n" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "" "Drag: Rotate\n" "Alt+Drag: Move\n" "Alt+RMB: Depth list selection" -msgstr "Alt+คลิà¸à¸‚วา: เลืà¸à¸à¸—ี่ซ้à¸à¸™à¸à¸±à¸™" +msgstr "" +"ลาà¸: หมุน\n" +"Alt+ลาà¸: ย้าย\n" +"Alt+คลิà¸à¸‚วา: เลืà¸à¸à¸—ี่ซ้à¸à¸™à¸à¸±à¸™" #: editor/plugins/spatial_editor_plugin.cpp msgid "Move Mode (W)" @@ -5465,12 +5003,16 @@ msgid "Transform" msgstr "เคลื่à¸à¸™à¸¢à¹‰à¸²à¸¢" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Configure Snap.." +msgstr "ตั้งค่าà¸à¸²à¸£à¸ˆà¸³à¸à¸±à¸”.." + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Local Coords" msgstr "พิà¸à¸±à¸”ภายใน" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Dialog.." -msgstr "" +msgstr "เครื่à¸à¸‡à¸¡à¸·à¸à¹€à¸„ลื่à¸à¸™à¸¢à¹‰à¸²à¸¢.." #: editor/plugins/spatial_editor_plugin.cpp msgid "1 Viewport" @@ -5559,7 +5101,7 @@ msgstr "ปรับขนาด (à¸à¸±à¸•ราส่วน):" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Type" -msgstr "" +msgstr "ประเภทà¸à¸²à¸£à¹€à¸„ลื่à¸à¸™à¸¢à¹‰à¸²à¸¢" #: editor/plugins/spatial_editor_plugin.cpp msgid "Pre" @@ -5610,6 +5152,10 @@ msgid "Speed (FPS):" msgstr "ความเร็ว (เฟรมต่à¸à¸§à¸´à¸™à¸²à¸—ี):" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Loop" +msgstr "วน" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animation Frames" msgstr "เฟรมà¹à¸à¸™à¸´à¹€à¸¡à¸Šà¸±à¸™" @@ -5622,12 +5168,14 @@ msgid "Insert Empty (After)" msgstr "เพิ่มà¹à¸šà¸šà¸§à¹ˆà¸²à¸‡à¹€à¸›à¸¥à¹ˆà¸² (หลัง)" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Up" -msgstr "ขึ้น" +#, fuzzy +msgid "Move (Before)" +msgstr "ย้ายโหนด" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Down" -msgstr "ลง" +#, fuzzy +msgid "Move (After)" +msgstr "ย้ายไปซ้าย" #: editor/plugins/style_box_editor_plugin.cpp msgid "StyleBox Preview:" @@ -5655,7 +5203,6 @@ msgid "Grid Snap" msgstr "จำà¸à¸±à¸”ด้วยเส้นตาราง" #: editor/plugins/texture_region_editor_plugin.cpp -#, fuzzy msgid "Auto Slice" msgstr "à¹à¸šà¹ˆà¸‡à¸à¸±à¸•โนมัติ" @@ -5697,14 +5244,12 @@ msgid "Remove Item" msgstr "ลบไà¸à¹€à¸—ม" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All Items" -msgstr "ลบไà¸à¹€à¸—มคลาส" +msgstr "ลบทั้งหมด" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All" -msgstr "ลบ" +msgstr "ลบทั้งหมด" #: editor/plugins/theme_editor_plugin.cpp msgid "Theme" @@ -5792,11 +5337,14 @@ msgid "Style" msgstr "รูปà¹à¸šà¸š" #: editor/plugins/theme_editor_plugin.cpp +msgid "Font" +msgstr "ฟà¸à¸™à¸•์" + +#: editor/plugins/theme_editor_plugin.cpp msgid "Color" msgstr "สี" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Erase Selection" msgstr "ลบที่เลืà¸à¸" @@ -5805,18 +5353,16 @@ msgid "Paint TileMap" msgstr "วาด TileMap" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Line Draw" -msgstr "เส้นตรง" +msgstr "วาดเส้น" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Rectangle Paint" -msgstr "" +msgstr "วาดสี่เหลี่ยม" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Bucket Fill" -msgstr "ถัง" +msgstr "ถมเต็ม" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Erase TileMap" @@ -5843,8 +5389,9 @@ msgid "Mirror Y" msgstr "สะท้à¸à¸™à¸‹à¹‰à¸²à¸¢à¸‚วา" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Bucket" -msgstr "ถัง" +#, fuzzy +msgid "Paint Tile" +msgstr "วาด TileMap" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Pick Tile" @@ -5903,11 +5450,15 @@ msgid "Delete patch '" msgstr "ลบà¹à¸žà¸•ช์ '" #: editor/project_export.cpp -#, fuzzy msgid "Delete preset '%s'?" msgstr "ลบ '%s'?" #: editor/project_export.cpp +#, fuzzy +msgid "Export templates for this platform are missing/corrupted: " +msgstr "ไม่พบà¹à¸¡à¹ˆà¹à¸šà¸šà¸ªà¹ˆà¸‡à¸à¸à¸à¸ªà¸³à¸«à¸£à¸±à¸šà¹à¸žà¸¥à¸•ฟà¸à¸£à¹Œà¸¡à¸™à¸µà¹‰:" + +#: editor/project_export.cpp msgid "Presets" msgstr "à¸à¸²à¸£à¸ªà¹ˆà¸‡à¸à¸à¸" @@ -5958,18 +5509,17 @@ msgid "Make Patch" msgstr "สร้างà¹à¸žà¸•ช์" #: editor/project_export.cpp -#, fuzzy msgid "Features" -msgstr "Texture" +msgstr "ฟีเจà¸à¸£à¹Œ" #: editor/project_export.cpp msgid "Custom (comma-separated):" -msgstr "" +msgstr "à¸à¸³à¸«à¸™à¸”เà¸à¸‡ (คั่นด้วยจุลภาค):" #: editor/project_export.cpp #, fuzzy msgid "Feature List:" -msgstr "รายชื่à¸à¹€à¸¡à¸—็à¸à¸”:" +msgstr "รายชื่à¸à¸Ÿà¸µà¹€à¸ˆà¸à¸£à¹Œ:" #: editor/project_export.cpp msgid "Export PCK/Zip" @@ -5980,71 +5530,112 @@ msgid "Export templates for this platform are missing:" msgstr "ไม่พบà¹à¸¡à¹ˆà¹à¸šà¸šà¸ªà¹ˆà¸‡à¸à¸à¸à¸ªà¸³à¸«à¸£à¸±à¸šà¹à¸žà¸¥à¸•ฟà¸à¸£à¹Œà¸¡à¸™à¸µà¹‰:" #: editor/project_export.cpp +#, fuzzy +msgid "Export templates for this platform are missing/corrupted:" +msgstr "ไม่พบà¹à¸¡à¹ˆà¹à¸šà¸šà¸ªà¹ˆà¸‡à¸à¸à¸à¸ªà¸³à¸«à¸£à¸±à¸šà¹à¸žà¸¥à¸•ฟà¸à¸£à¹Œà¸¡à¸™à¸µà¹‰:" + +#: editor/project_export.cpp msgid "Export With Debug" msgstr "ส่งà¸à¸à¸à¸žà¸£à¹‰à¸à¸¡à¸•ัวดีบัค" #: editor/project_manager.cpp -msgid "Invalid project path, the path must exist!" -msgstr "ที่à¸à¸¢à¸¹à¹ˆà¹‚ปรเจà¸à¸•์ผิดพลาด ต้à¸à¸‡à¸¡à¸µà¸à¸¢à¸¹à¹ˆà¸ˆà¸£à¸´à¸‡!" +#, fuzzy +msgid "The path does not exists." +msgstr "ไม่พบไฟล์" #: editor/project_manager.cpp -msgid "Invalid project path, project.godot must not exist." -msgstr "ที่à¸à¸¢à¸¹à¹ˆà¹‚ปรเจà¸à¸•์ผิดพลาด ต้à¸à¸‡à¹„ม่มี project.godot" +#, fuzzy +msgid "Please choose a 'project.godot' file." +msgstr "à¸à¸£à¸¸à¸“าส่งà¸à¸à¸à¹„ปนà¸à¸à¹‚ฟลเดà¸à¸£à¹Œà¹‚ปรเจà¸à¸•์!" + +#: editor/project_manager.cpp +msgid "" +"Your project will be created in a non empty folder (you might want to create " +"a new folder)." +msgstr "" #: editor/project_manager.cpp -msgid "Invalid project path, project.godot must exist." -msgstr "ที่à¸à¸¢à¸¹à¹ˆà¹‚ปรเจà¸à¸•์ผิดพลาด ต้à¸à¸‡à¸¡à¸µ project.godot" +msgid "Please choose a folder that does not contain a 'project.godot' file." +msgstr "" #: editor/project_manager.cpp msgid "Imported Project" msgstr "นำเข้าโปรเจà¸à¸•์à¹à¸¥à¹‰à¸§" #: editor/project_manager.cpp +msgid " " +msgstr "" + +#: editor/project_manager.cpp +msgid "It would be a good idea to name your project." +msgstr "" + +#: editor/project_manager.cpp msgid "Invalid project path (changed anything?)." msgstr "ตำà¹à¸«à¸™à¹ˆà¸‡à¹‚ปรเจà¸à¸•์ผิดพลาด (ได้à¹à¸à¹‰à¹„ขà¸à¸°à¹„รไปหรืà¸à¹„ม่?)" #: editor/project_manager.cpp -msgid "Couldn't create project.godot in project path." +#, fuzzy +msgid "Couldn't get project.godot in project path." msgstr "สร้างไฟล์ project.godot ไม่ได้" #: editor/project_manager.cpp #, fuzzy +msgid "Couldn't edit project.godot in project path." +msgstr "สร้างไฟล์ project.godot ไม่ได้" + +#: editor/project_manager.cpp +msgid "Couldn't create project.godot in project path." +msgstr "สร้างไฟล์ project.godot ไม่ได้" + +#: editor/project_manager.cpp msgid "The following files failed extraction from package:" msgstr "ผิดพลาดขณะà¹à¸¢à¸à¹„ฟล์ต่à¸à¹„ปนี้จาà¸à¹à¸žà¸„เà¸à¸ˆ:" #: editor/project_manager.cpp +#, fuzzy +msgid "Rename Project" +msgstr "โปรเจà¸à¸•์ไม่มีชื่à¸" + +#: editor/project_manager.cpp +#, fuzzy +msgid "Couldn't get project.godot in the project path." +msgstr "สร้างไฟล์ project.godot ไม่ได้" + +#: editor/project_manager.cpp +msgid "New Game Project" +msgstr "โปรเจà¸à¸•์ใหม่" + +#: editor/project_manager.cpp msgid "Import Existing Project" msgstr "นำเข้าโปรเจà¸à¸•์ที่มีà¸à¸¢à¸¹à¹ˆà¹€à¸”ิม" #: editor/project_manager.cpp -msgid "Project Path (Must Exist):" -msgstr "ที่à¸à¸¢à¸¹à¹ˆà¹‚ปรเจà¸à¸•์ (ต้à¸à¸‡à¸¡à¸µà¸à¸¢à¸¹à¹ˆà¸ˆà¸£à¸´à¸‡):" +msgid "Create New Project" +msgstr "สร้างโปรเจà¸à¸•์ใหม่" + +#: editor/project_manager.cpp +msgid "Install Project:" +msgstr "ติดตั้งโปรเจà¸à¸•์:" #: editor/project_manager.cpp msgid "Project Name:" msgstr "ชื่à¸à¹‚ปรเจà¸à¸•์:" #: editor/project_manager.cpp -msgid "Create New Project" -msgstr "สร้างโปรเจà¸à¸•์ใหม่" +#, fuzzy +msgid "Create folder" +msgstr "สร้างโฟลเดà¸à¸£à¹Œ" #: editor/project_manager.cpp msgid "Project Path:" msgstr "ที่à¸à¸¢à¸¹à¹ˆà¹‚ปรเจà¸à¸•์:" #: editor/project_manager.cpp -msgid "Install Project:" -msgstr "ติดตั้งโปรเจà¸à¸•์:" - -#: editor/project_manager.cpp msgid "Browse" msgstr "เลืà¸à¸" #: editor/project_manager.cpp -msgid "New Game Project" -msgstr "โปรเจà¸à¸•์ใหม่" - -#: editor/project_manager.cpp msgid "That's a BINGO!" msgstr "บิงโà¸!" @@ -6053,11 +5644,15 @@ msgid "Unnamed Project" msgstr "โปรเจà¸à¸•์ไม่มีชื่à¸" #: editor/project_manager.cpp +#, fuzzy +msgid "Can't open project" +msgstr "ไม่สามารถรันโปรเจà¸à¸•์" + +#: editor/project_manager.cpp msgid "Are you sure to open more than one project?" msgstr "ยืนยันà¸à¸²à¸£à¹€à¸›à¸´à¸”โปรเจà¸à¸•์มาà¸à¸à¸§à¹ˆà¸² 1 โปรเจà¸à¸•์?" #: editor/project_manager.cpp -#, fuzzy msgid "" "Can't run project: no main scene defined.\n" "Please edit the project and set the main scene in \"Project Settings\" under " @@ -6071,6 +5666,8 @@ msgid "" "Can't run project: Assets need to be imported.\n" "Please edit the project to trigger the initial import." msgstr "" +"ไม่สามารถรันโปรเจà¸à¸•์: ต้à¸à¸‡à¸™à¸³à¹€à¸‚้าไฟล์\n" +"à¸à¸£à¸¸à¸“าเปิดà¹à¸à¹‰à¹„ขโปรเจà¸à¸•์เพื่à¸à¸™à¸³à¹€à¸‚้าไฟล์" #: editor/project_manager.cpp msgid "Are you sure to run more than one project?" @@ -6091,10 +5688,6 @@ msgid "Project List" msgstr "รายชื่à¸à¹‚ปรเจà¸à¸•์" #: editor/project_manager.cpp -msgid "Run" -msgstr "รัน" - -#: editor/project_manager.cpp msgid "Scan" msgstr "สà¹à¸à¸™" @@ -6115,9 +5708,8 @@ msgid "Exit" msgstr "à¸à¸à¸" #: editor/project_manager.cpp -#, fuzzy msgid "Can't run project" -msgstr "เชื่à¸à¸¡à¸•่à¸à¹„ม่ได้" +msgstr "ไม่สามารถรันโปรเจà¸à¸•์" #: editor/project_settings_editor.cpp msgid "Key " @@ -6152,17 +5744,14 @@ msgid "Add Input Action Event" msgstr "เพิ่มà¸à¸²à¸£à¸à¸£à¸°à¸—ำ" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Meta+" msgstr "Meta+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Shift+" msgstr "Shift+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Alt+" msgstr "Alt+" @@ -6223,7 +5812,7 @@ msgstr "เปลี่ยน" msgid "Joypad Axis Index:" msgstr "คันบังคับจà¸à¸¢:" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Axis" msgstr "à¹à¸à¸™" @@ -6240,61 +5829,67 @@ msgid "Erase Input Action Event" msgstr "ลบà¸à¸²à¸£à¸à¸£à¸°à¸—ำ" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Add Event" -msgstr "เพิ่ม" +msgstr "เพิ่มปุ่มà¸à¸”" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Device" msgstr "à¸à¸¸à¸›à¸à¸£à¸“์" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Button" msgstr "ปุ่ม" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Left Button." msgstr "ปุ่มเมาส์ซ้าย" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Right Button." msgstr "ปุ่มเมาส์ขวา" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Middle Button." msgstr "ปุ่มเมาส์à¸à¸¥à¸²à¸‡" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Up." msgstr "ล้à¸à¹€à¸¡à¸²à¸ªà¹Œà¸‚ึ้น" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Down." msgstr "ล้à¸à¹€à¸¡à¸²à¸ªà¹Œà¸¥à¸‡" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Add Global Property" -msgstr "เพิ่มตัวรับคุณสมบัติ" +msgstr "เพิ่มคุณสมบัติทั่วไป" #: editor/project_settings_editor.cpp -msgid "Select an setting item first!" -msgstr "" +#, fuzzy +msgid "Select a setting item first!" +msgstr "à¸à¸£à¸¸à¸“าเลืà¸à¸à¸•ัวเลืà¸à¸à¸à¹ˆà¸à¸™!" #: editor/project_settings_editor.cpp -#, fuzzy msgid "No property '" -msgstr "คุณสมบัติ:" +msgstr "ไม่พบคุณสมบัติ '" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Setting '" -msgstr "ตัวเลืà¸à¸" +msgstr "ตัวเลืà¸à¸ '" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Delete Item" -msgstr "ลบà¸à¸´à¸™à¸žà¸¸à¸•" +msgstr "ลบไà¸à¹€à¸—ม" + +#: editor/project_settings_editor.cpp +#, fuzzy +msgid "Can't contain '/' or ':'" +msgstr "ไม่สามารถเชื่à¸à¸¡à¸•่à¸à¸à¸±à¸šà¹‚ฮสต์:" + +#: editor/project_settings_editor.cpp +#, fuzzy +msgid "Already existing" +msgstr "มีà¸à¸²à¸£à¸à¸£à¸°à¸—ำ '%s' à¸à¸¢à¸¹à¹ˆà¹à¸¥à¹‰à¸§!" #: editor/project_settings_editor.cpp msgid "Error saving settings." @@ -6306,7 +5901,7 @@ msgstr "บันทึà¸à¹à¸¥à¹‰à¸§" #: editor/project_settings_editor.cpp msgid "Override for Feature" -msgstr "" +msgstr "à¸à¸³à¸«à¸™à¸”ค่าเฉพาะขà¸à¸‡à¸Ÿà¸µà¹€à¸ˆà¸à¸£à¹Œ" #: editor/project_settings_editor.cpp msgid "Add Translation" @@ -6350,7 +5945,7 @@ msgstr "คุณสมบัติ:" #: editor/project_settings_editor.cpp msgid "Override For.." -msgstr "" +msgstr "à¸à¸³à¸«à¸™à¸”เฉพาะ.." #: editor/project_settings_editor.cpp msgid "Input Map" @@ -6437,7 +6032,6 @@ msgid "Assign" msgstr "ระบุ" #: editor/property_editor.cpp -#, fuzzy msgid "Select Node" msgstr "เลืà¸à¸à¹‚หนด" @@ -6446,17 +6040,26 @@ msgid "New Script" msgstr "สคริปต์ใหม่" #: editor/property_editor.cpp +#, fuzzy +msgid "Make Unique" +msgstr "สร้างà¸à¸£à¸°à¸”ูà¸" + +#: editor/property_editor.cpp msgid "Show in File System" msgstr "เปิดในตัวจัดà¸à¸²à¸£à¹„ฟล์" #: editor/property_editor.cpp +#, fuzzy +msgid "Convert To %s" +msgstr "à¹à¸›à¸¥à¸‡à¹€à¸›à¹‡à¸™.." + +#: editor/property_editor.cpp msgid "Error loading file: Not a resource!" msgstr "ผิดพลาดขณะโหลดไฟล์: ไม่ใช่รีซà¸à¸£à¹Œà¸ª!" #: editor/property_editor.cpp -#, fuzzy msgid "Selected node is not a Viewport!" -msgstr "เลืà¸à¸à¹‚หนดเพื่à¸à¸™à¸³à¹€à¸‚้า" +msgstr "โหนดที่เลืà¸à¸à¹„ม่ใช่ Viewport!" #: editor/property_editor.cpp msgid "Pick a Node" @@ -6487,6 +6090,11 @@ msgid "Select Property" msgstr "เลืà¸à¸à¸„ุณสมบัติ" #: editor/property_selector.cpp +#, fuzzy +msgid "Select Virtual Method" +msgstr "เลืà¸à¸à¹€à¸¡à¸—็à¸à¸”" + +#: editor/property_selector.cpp msgid "Select Method" msgstr "เลืà¸à¸à¹€à¸¡à¸—็à¸à¸”" @@ -6514,26 +6122,6 @@ msgstr "" msgid "Reparent" msgstr "เลืà¸à¸à¹‚หนดà¹à¸¡à¹ˆà¹ƒà¸«à¸¡à¹ˆ" -#: editor/resources_dock.cpp -msgid "Create New Resource" -msgstr "สร้างรีซà¸à¸£à¹Œà¸ªà¹ƒà¸«à¸¡à¹ˆ" - -#: editor/resources_dock.cpp -msgid "Open Resource" -msgstr "เปิดรีซà¸à¸£à¹Œà¸ª" - -#: editor/resources_dock.cpp -msgid "Save Resource" -msgstr "บันทึà¸à¸£à¸µà¸‹à¸à¸£à¹Œà¸ª" - -#: editor/resources_dock.cpp -msgid "Resource Tools" -msgstr "เครื่à¸à¸‡à¸¡à¸·à¸à¸£à¸µà¸‹à¸à¸£à¹Œà¸ª" - -#: editor/resources_dock.cpp -msgid "Make Local" -msgstr "" - #: editor/run_settings_dialog.cpp msgid "Run Mode:" msgstr "" @@ -6656,17 +6244,8 @@ msgid "Error duplicating scene to save it." msgstr "ผิดพลาดขณะทำซ้ำฉาà¸à¹€à¸žà¸·à¹ˆà¸à¸šà¸±à¸™à¸—ึà¸" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Sub-Resources:" -msgstr "รีซà¸à¸£à¹Œà¸ª:" - -#: editor/scene_tree_dock.cpp -msgid "Edit Groups" -msgstr "à¹à¸à¹‰à¹„ขà¸à¸¥à¸¸à¹ˆà¸¡" - -#: editor/scene_tree_dock.cpp -msgid "Edit Connections" -msgstr "à¹à¸à¹‰à¹„ขà¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸à¸¡à¹‚ยง" +msgstr "รีซà¸à¸£à¹Œà¸ªà¸¢à¹ˆà¸à¸¢:" #: editor/scene_tree_dock.cpp msgid "Clear Inheritance" @@ -6727,7 +6306,6 @@ msgid "" msgstr "à¸à¸´à¸™à¸ªà¹à¸•นซ์ฉาà¸à¹€à¸›à¹‡à¸™à¹‚หนด สร้างฉาà¸à¸ªà¸·à¸šà¸—à¸à¸”ถ้าไม่มีโหนดราà¸" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Filter nodes" msgstr "ตัวà¸à¸£à¸à¸‡" @@ -6808,7 +6386,6 @@ msgstr "" "คลิà¸à¹€à¸žà¸·à¹ˆà¸à¸—ำให้เลืà¸à¸à¹„ด้" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "Toggle Visibility" msgstr "ซ่à¸à¸™/à¹à¸ªà¸”ง" @@ -6825,23 +6402,20 @@ msgid "Scene Tree (Nodes):" msgstr "ผังฉาภ(โหนด):" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "Node Configuration Warning!" -msgstr "คำเตืà¸à¸™à¸à¸²à¸£à¸•ั้งค่าโหนด:" +msgstr "คำเตืà¸à¸™à¸à¸²à¸£à¸•ั้งค่าโหนด!" #: editor/scene_tree_editor.cpp msgid "Select a Node" msgstr "เลืà¸à¸à¹‚หนด" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Error loading template '%s'" -msgstr "ผิดพลาดขณะโหลดรูป:" +msgstr "ผิดพลาดขณะโหลดà¹à¸¡à¹ˆà¹à¸šà¸š '%s'" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Error - Could not create script in filesystem." -msgstr "สร้างสคริปต์ในระบบไฟล์ไม่ได้" +msgstr "ผิดพลาด - สร้างสคริปต์ไม่ได้" #: editor/script_create_dialog.cpp msgid "Error loading script from %s" @@ -6861,18 +6435,26 @@ msgstr "ตำà¹à¸«à¸™à¹ˆà¸‡à¸—ี่à¸à¸¢à¸¹à¹ˆà¹„ม่ใช่ภายใ #: editor/script_create_dialog.cpp msgid "Invalid base path" +msgstr "ตำà¹à¸«à¸™à¹ˆà¸‡à¹€à¸£à¸´à¹ˆà¸¡à¸•้นไม่ถูà¸à¸•้à¸à¸‡" + +#: editor/script_create_dialog.cpp +msgid "Directory of the same name exists" msgstr "" #: editor/script_create_dialog.cpp +#, fuzzy +msgid "File exists, will be reused" +msgstr "มีไฟล์นี้à¸à¸¢à¸¹à¹ˆà¹à¸¥à¹‰à¸§ จะเขียนทับหรืà¸à¹„ม่?" + +#: editor/script_create_dialog.cpp msgid "Invalid extension" msgstr "นามสà¸à¸¸à¸¥à¹„ม่ถูà¸à¸•้à¸à¸‡" #: editor/script_create_dialog.cpp msgid "Wrong extension chosen" -msgstr "" +msgstr "นามสà¸à¸¸à¸¥à¹„ม่ถูà¸à¸•้à¸à¸‡" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Invalid Path" msgstr "ตำà¹à¸«à¸™à¹ˆà¸‡à¸œà¸´à¸”พลาด" @@ -6898,31 +6480,30 @@ msgid "Built-in script (into scene file)" msgstr "à¸à¸±à¸‡à¸ªà¸„ริปต์ในไฟล์ฉาà¸" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Create new script file" msgstr "สร้างสคริปต์ใหม่" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Load existing script file" -msgstr "โหลดสคริปต์ที่มีà¸à¸¢à¸¹à¹ˆà¹€à¸”ิม" +msgstr "โหลดสคริปต์จาà¸à¸”ิสà¸à¹Œ" + +#: editor/script_create_dialog.cpp +msgid "Language" +msgstr "ภาษา" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Inherits" -msgstr "สืบทà¸à¸”จาà¸:" +msgstr "สืบทà¸à¸”จาà¸" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Class Name" -msgstr "ชื่à¸à¸„ลาส:" +msgstr "ชื่à¸à¸„ลาส" #: editor/script_create_dialog.cpp msgid "Template" msgstr "à¹à¸¡à¹ˆà¹à¸šà¸š" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Built-in Script" msgstr "à¸à¸±à¸‡à¸ªà¸„ริปต์" @@ -6951,6 +6532,10 @@ msgid "Function:" msgstr "ฟังà¸à¹Œà¸Šà¸±à¸™:" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Errors" msgstr "ข้à¸à¸œà¸´à¸”พลาด" @@ -7031,6 +6616,10 @@ msgid "Type" msgstr "ประเภท" #: editor/script_editor_debugger.cpp +msgid "Format" +msgstr "รูปà¹à¸šà¸š" + +#: editor/script_editor_debugger.cpp msgid "Usage" msgstr "ใช้" @@ -7107,12 +6696,30 @@ msgstr "เปลี่ยนà¸à¸£à¸à¸šà¸à¸™à¸¸à¸ าค" msgid "Change Probe Extents" msgstr "à¹à¸à¹‰à¹„ขขนาด Probe" +#: modules/gdnative/gd_native_library_editor.cpp +#, fuzzy +msgid "Library" +msgstr "MeshLibrary.." + +#: modules/gdnative/gd_native_library_editor.cpp +#, fuzzy +msgid "Status" +msgstr "สถานะ:" + +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Libraries: " +msgstr "" + +#: modules/gdnative/register_types.cpp +msgid "GDNative" +msgstr "" + #: 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/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "ไบต์ไม่ครบหรืà¸à¸œà¸´à¸”รูปà¹à¸šà¸š ไม่สามารถà¹à¸›à¸¥à¸‡à¸„่าได้" @@ -7151,7 +6758,7 @@ msgstr "ดิà¸à¸Šà¸±à¸™à¸™à¸²à¸£à¸µà¸—ี่เà¸à¹‡à¸šà¸à¸´à¸™à¸ªà¹à¸•น #: modules/gdscript/gd_functions.cpp msgid "Object can't provide a length." -msgstr "" +msgstr "ไม่สามารถบà¸à¸à¸„วามยาวขà¸à¸‡à¸§à¸±à¸•ถุได้" #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy @@ -7164,21 +6771,19 @@ msgid "GridMap Duplicate Selection" msgstr "ทำซ้ำในà¹à¸—ร็à¸à¹€à¸”ิม" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Paint" -msgstr "" - -#: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy msgid "Snap View" msgstr "มุมบน" #: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy msgid "Prev Level (%sDown Wheel)" -msgstr "" +msgstr "ชั้นà¸à¹ˆà¸à¸™à¸«à¸™à¹‰à¸² (" #: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy msgid "Next Level (%sUp Wheel)" -msgstr "" +msgstr "ชั้นถัดไป (" #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy @@ -7195,30 +6800,27 @@ msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Edit X Axis" -msgstr "" +msgstr "à¹à¸à¹‰à¹„ขà¹à¸à¸™ X" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Edit Y Axis" -msgstr "" +msgstr "à¹à¸à¹‰à¹„ขà¹à¸à¸™ Y" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Edit Z Axis" -msgstr "" +msgstr "à¹à¸à¹‰à¹„ขà¹à¸à¸™ Z" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Cursor Rotate X" -msgstr "Ctrl: หมุน" +msgstr "หมุนตามà¹à¸à¸™ X" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Cursor Rotate Y" -msgstr "Ctrl: หมุน" +msgstr "หมุนตามà¹à¸à¸™ Y" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Cursor Rotate Z" -msgstr "Ctrl: หมุน" +msgstr "หมุนตามà¹à¸à¸™ Z" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Back Rotate X" @@ -7237,51 +6839,38 @@ msgid "Cursor Clear Rotation" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Create Area" -msgstr "สร้างใหม่" +msgstr "สร้างพื้นที่ใหม่" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Create Exterior Connector" -msgstr "สร้างโปรเจà¸à¸•์ใหม่" +msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Erase Area" -msgstr "ลบ TileMap" +msgstr "ลบพื้นที่" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Selection -> Duplicate" -msgstr "เฉพาะที่à¸à¸³à¸¥à¸±à¸‡à¹€à¸¥à¸·à¸à¸" +msgstr "ทำซ้ำที่เลืà¸à¸" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Selection -> Clear" -msgstr "เฉพาะที่à¸à¸³à¸¥à¸±à¸‡à¹€à¸¥à¸·à¸à¸" +msgstr "ลบที่เลืà¸à¸" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Settings" -msgstr "ตั้งค่าà¸à¸²à¸£à¸ˆà¸³à¸à¸±à¸”" +msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Pick Distance:" -msgstr "à¸à¸´à¸™à¸ªà¹à¸•นซ์:" - -#: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy -msgid "Tiles" -msgstr " ไฟล์" +msgstr "" -#: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Areas" +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "Builds" msgstr "" #: modules/visual_script/visual_script.cpp -#, fuzzy msgid "" "A node yielded without working memory, please read the docs on how to yield " "properly!" @@ -7289,14 +6878,12 @@ msgstr "" "โหนดหยุดพัà¸à¹‚ปรà¹à¸à¸£à¸¡à¹‚ดยที่ไม่มีหน่วยความจำทำงาน à¸à¸£à¸¸à¸“าà¸à¹ˆà¸²à¸™à¸„ู่มืà¸à¹€à¸žà¸·à¹ˆà¸à¸«à¸¢à¸¸à¸”พัà¸à¹‚ปรà¹à¸à¸£à¸¡à¹ƒà¸«à¹‰à¸–ูà¸à¸•้à¸à¸‡!" #: modules/visual_script/visual_script.cpp -#, fuzzy msgid "" "Node yielded, but did not return a function state in the first working " "memory." msgstr "โหนดหยุดพัภà¹à¸•่ไม่ได้คืนสถานะฟังà¸à¹Œà¸Šà¸±à¸™à¹ƒà¸™à¸«à¸™à¹ˆà¸§à¸¢à¸„วามจำทำงานà¹à¸£à¸" #: modules/visual_script/visual_script.cpp -#, fuzzy msgid "" "Return value must be assigned to first element of node working memory! Fix " "your node please." @@ -7315,29 +6902,24 @@ msgid "Stack overflow with stack depth: " msgstr "สà¹à¸•คล้น ความสูงสà¹à¸•ค: " #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Signal Arguments" -msgstr "à¹à¸à¹‰à¹„ขตัวà¹à¸›à¸£à¸ªà¸±à¸à¸à¸²à¸“:" +msgstr "à¹à¸à¹‰à¹„ขตัวà¹à¸›à¸£à¸ªà¸±à¸à¸à¸²à¸“" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Argument Type" -msgstr "เปลี่ยนประเภทตัวà¹à¸›à¸£à¹ƒà¸™à¸à¸²à¸£à¹Œà¹€à¸£à¸¢à¹Œ" +msgstr "เปลี่ยนประเภทตัวà¹à¸›à¸£" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Argument name" -msgstr "เปลี่ยนชื่à¸à¹à¸à¸™à¸´à¹€à¸¡à¸Šà¸±à¸™:" +msgstr "เปลี่ยนชื่à¸à¸•ัวà¹à¸›à¸£" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Set Variable Default Value" -msgstr "à¹à¸à¹‰à¹„ขค่าปริยาย" +msgstr "à¹à¸à¹‰à¹„ขค่าปริยายขà¸à¸‡à¸•ัวà¹à¸›à¸£" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Set Variable Type" -msgstr "à¹à¸à¹‰à¹„ขตัวà¹à¸›à¸£:" +msgstr "à¹à¸à¹‰à¹„ขประเภทตัวà¹à¸›à¸£" #: modules/visual_script/visual_script_editor.cpp msgid "Functions:" @@ -7389,12 +6971,10 @@ msgid "Add Node" msgstr "เพิ่มโหนด" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Remove VisualScript Nodes" -msgstr "ลบคีย์ที่ผิดพลาด" +msgstr "ลบโหนด" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Duplicate VisualScript Nodes" msgstr "ทำซ้ำโหนด" @@ -7439,24 +7019,20 @@ msgid "Add Setter Property" msgstr "เพิ่มตัวà¸à¸³à¸«à¸™à¸”คุณสมบัติ" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Base Type" msgstr "เปลี่ยนประเภท" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Move Node(s)" -msgstr "ลบโหนด" +msgstr "ย้ายโหนด" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Remove VisualScript Node" msgstr "ลบโหนด" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Connect Nodes" -msgstr "เชื่à¸à¸¡à¹„ปยังโหนด:" +msgstr "เชื่à¸à¸¡à¹‚หนด" #: modules/visual_script/visual_script_editor.cpp msgid "Condition" @@ -7483,26 +7059,30 @@ msgid "Return" msgstr "คืนค่า" #: modules/visual_script/visual_script_editor.cpp +msgid "Call" +msgstr "เรียà¸" + +#: modules/visual_script/visual_script_editor.cpp msgid "Get" msgstr "รับ" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy +msgid "Script already has function '%s'" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Input Value" -msgstr "à¹à¸à¹‰à¹„ขค่าปริยาย" +msgstr "à¹à¸à¹‰à¹„ขค่าà¸à¸´à¸™à¸žà¸¸à¸•" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Can't copy the function node." -msgstr "ทำงานใน '..' ไม่ได้" +msgstr "คัดลà¸à¸à¹‚หนดฟังà¸à¹Œà¸Šà¸±à¸™à¹„ม่ได้" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Clipboard is empty!" -msgstr "คลิปบà¸à¸£à¹Œà¸”ไม่มีรีซà¸à¸£à¹Œà¸ª!" +msgstr "คลิปบà¸à¸£à¹Œà¸”ว่างเปล่า!" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Paste VisualScript Nodes" msgstr "วางโหนด" @@ -7511,18 +7091,16 @@ msgid "Remove Function" msgstr "ลบฟังà¸à¹Œà¸Šà¸±à¸™" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Edit Variable" -msgstr "à¹à¸à¹‰à¹„ขตัวà¹à¸›à¸£:" +msgstr "à¹à¸à¹‰à¹„ขตัวà¹à¸›à¸£" #: modules/visual_script/visual_script_editor.cpp msgid "Remove Variable" msgstr "ลบตัวà¹à¸›à¸£" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Edit Signal" -msgstr "à¹à¸à¹‰à¹„ขสัà¸à¸à¸²à¸“:" +msgstr "à¹à¸à¹‰à¹„ขสัà¸à¸à¸²à¸“" #: modules/visual_script/visual_script_editor.cpp msgid "Remove Signal" @@ -7537,7 +7115,6 @@ msgid "Editing Signal:" msgstr "à¹à¸à¹‰à¹„ขสัà¸à¸à¸²à¸“:" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Base Type:" msgstr "ชนิด:" @@ -7594,12 +7171,10 @@ msgid "Invalid index property name." msgstr "ไม่พบคุณสมบัติ" #: modules/visual_script/visual_script_func_nodes.cpp -#, fuzzy msgid "Base object is not a Node!" msgstr "วัตถุนี้ไม่ใช่โหนด!" #: modules/visual_script/visual_script_func_nodes.cpp -#, fuzzy msgid "Path does not lead Node!" msgstr "ตำà¹à¸«à¸™à¹ˆà¸‡à¸—ี่ระบุไม่ได้นำไปยังโหนด!" @@ -7736,7 +7311,7 @@ msgstr "ParallaxLayer จะทำงานได้ต้à¸à¸‡à¹€à¸›à¹‡à¸™à¹‚à msgid "" "A material to process the particles is not assigned, so no behavior is " "imprinted." -msgstr "" +msgstr "ไม่ได้à¸à¸³à¸«à¸™à¸”วัสดุให้à¸à¸±à¸šà¸à¸™à¸¸à¸ าค" #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." @@ -7748,6 +7323,8 @@ msgid "" "by the physics engine when running.\n" "Change the size in children collision shapes instead." msgstr "" +"ระบบฟิสิà¸à¸ªà¹Œà¸ˆà¸°à¸ˆà¸±à¸”à¸à¸²à¸£à¸‚นาดขà¸à¸‡ RigidBody2D (ในโหมด character หรืภrigid) เมื่à¸à¸£à¸±à¸™à¹€à¸à¸¡\n" +"à¸à¸£à¸¸à¸“าปรับขนาดขà¸à¸‡ Collision shape à¹à¸—น" #: scene/2d/remote_transform_2d.cpp msgid "Path property must point to a valid Node2D node to work." @@ -7775,31 +7352,31 @@ msgstr "VisibilityEnable2D ควรจะเป็นโหนดลูà¸à¸‚ภ#: scene/3d/arvr_nodes.cpp msgid "ARVRCamera must have an ARVROrigin node as its parent" -msgstr "" +msgstr "ARVRCamera ต้à¸à¸‡à¸¡à¸µ ARVROrigin เป็นโหนดà¹à¸¡à¹ˆ" #: scene/3d/arvr_nodes.cpp msgid "ARVRController must have an ARVROrigin node as its parent" -msgstr "" +msgstr "ARVRController ต้à¸à¸‡à¸¡à¸µ ARVROrigin เป็นโหนดà¹à¸¡à¹ˆ" #: scene/3d/arvr_nodes.cpp msgid "" "The controller id must not be 0 or this controller will not be bound to an " "actual controller" -msgstr "" +msgstr "Controller id ต้à¸à¸‡à¹„ม่เป็น 0 ไม่เช่นนั้นตัวควบคุมนี้จะไม่เชื่à¸à¸¡à¸à¸±à¸šà¸à¸¸à¸›à¸à¸£à¸“์จริง" #: scene/3d/arvr_nodes.cpp msgid "ARVRAnchor must have an ARVROrigin node as its parent" -msgstr "" +msgstr "ARVRAnchor ต้à¸à¸‡à¸¡à¸µ ARVROrigin เป็นโหนดà¹à¸¡à¹ˆ" #: scene/3d/arvr_nodes.cpp msgid "" "The anchor id must not be 0 or this anchor will not be bound to an actual " "anchor" -msgstr "" +msgstr "Anchor id ต้à¸à¸‡à¹„ม่เป็น 0 ไม่เช่นนั้น anchor นี้จะไม่เชื่à¸à¸¡à¸à¸±à¸š anchor จริง" #: scene/3d/arvr_nodes.cpp msgid "ARVROrigin requires an ARVRCamera child node" -msgstr "" +msgstr "ARVROrigin ต้à¸à¸‡à¸¡à¸µ ARVRCamera เป็นโหนดลูà¸" #: scene/3d/collision_polygon.cpp msgid "" @@ -7844,7 +7421,7 @@ msgstr "" #: scene/3d/particles.cpp msgid "" "Nothing is visible because meshes have not been assigned to draw passes." -msgstr "" +msgstr "ไม่มีà¸à¸²à¸£à¹à¸ªà¸”งผลเนื่à¸à¸‡à¸ˆà¸²à¸à¹„ม่ได้à¸à¸³à¸«à¸™à¸” mesh ใน draw pass" #: scene/3d/physics_body.cpp msgid "" @@ -7852,6 +7429,8 @@ msgid "" "the physics engine when running.\n" "Change the size in children collision shapes instead." msgstr "" +"ระบบฟิสิà¸à¸ªà¹Œà¸ˆà¸°à¸ˆà¸±à¸”à¸à¸²à¸£à¸‚นาดขà¸à¸‡ RigidBody (ในโหมด character หรืภrigid) เมื่à¸à¸£à¸±à¸™à¹€à¸à¸¡\n" +"à¸à¸£à¸¸à¸“าปรับขนาดขà¸à¸‡ Collision shape à¹à¸—น" #: scene/3d/remote_transform.cpp msgid "Path property must point to a valid Spatial node to work." @@ -7868,16 +7447,25 @@ msgid "" "order for AnimatedSprite3D to display frames." msgstr "ต้à¸à¸‡à¸¡à¸µ SpriteFrames ใน 'Frames' เพื่à¸à¹ƒà¸«à¹‰ AnimatedSprite3D à¹à¸ªà¸”งผลได้" +#: scene/3d/vehicle_body.cpp +msgid "" +"VehicleWheel serves to provide a wheel system to a VehicleBody. Please use " +"it as a child of a VehicleBody." +msgstr "" + #: scene/gui/color_picker.cpp -#, fuzzy msgid "Raw Mode" -msgstr "โหมดมุมมà¸à¸‡" +msgstr "โหมด Raw" #: scene/gui/color_picker.cpp msgid "Add current color as a preset" msgstr "เพิ่มสีที่เลืà¸à¸à¹ƒà¸™à¸£à¸²à¸¢à¸à¸²à¸£à¹‚ปรด" #: scene/gui/dialogs.cpp +msgid "Cancel" +msgstr "ยà¸à¹€à¸¥à¸´à¸" + +#: scene/gui/dialogs.cpp msgid "Alert!" msgstr "à¹à¸ˆà¹‰à¸‡à¹€à¸•ืà¸à¸™!" @@ -7885,10 +7473,6 @@ msgstr "à¹à¸ˆà¹‰à¸‡à¹€à¸•ืà¸à¸™!" msgid "Please Confirm..." msgstr "à¸à¸£à¸¸à¸“ายืนยัน..." -#: scene/gui/input_action.cpp -msgid "Ctrl+" -msgstr "Ctrl+" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -7927,6 +7511,611 @@ msgstr "" "ให้à¹à¸à¹‰à¹„ขโหนดนี้ให้เป็นโหนดลูà¸à¸‚à¸à¸‡ Control à¹à¸•่ถ้าไม่ ให้ปรับเป็น render target à¹à¸¥à¸°à¸™à¸³à¹„ปใช้เป็น " "texture ขà¸à¸‡à¹‚หนดà¸à¸·à¹ˆà¸™" +#: scene/resources/dynamic_font.cpp +msgid "Error initializing FreeType." +msgstr "ผิดพลาดขณะเริ่มต้น FreeType" + +#: scene/resources/dynamic_font.cpp +msgid "Unknown font format." +msgstr "ไม่ทราบประเภทขà¸à¸‡à¸Ÿà¸à¸™à¸•์" + +#: scene/resources/dynamic_font.cpp +msgid "Error loading font." +msgstr "ผิดพลาดขณะโหลดฟà¸à¸™à¸•์" + +#: scene/resources/dynamic_font.cpp +msgid "Invalid font size." +msgstr "ขนาดฟà¸à¸™à¸•์ผิดพลาด" + +#~ msgid "Method List For '%s':" +#~ msgstr "รายชื่à¸à¹€à¸¡à¸—็à¸à¸”ขà¸à¸‡ '%s':" + +#~ msgid "Arguments:" +#~ msgstr "ตัวà¹à¸›à¸£:" + +#~ msgid "Return:" +#~ msgstr "คืนค่า:" + +#~ msgid "Added:" +#~ msgstr "เพิ่ม:" + +#~ msgid "Removed:" +#~ msgstr "ลบ:" + +#~ msgid "Error saving atlas:" +#~ msgstr "ผิดพลาดขณะบันทึภatlas:" + +#~ msgid "Could not save atlas subtexture:" +#~ msgstr "บันทึภtexture ย่à¸à¸¢à¸‚à¸à¸‡ atlas ไม่ได้:" + +#~ msgid "Exporting for %s" +#~ msgstr "ส่งà¸à¸à¸à¸ªà¸³à¸«à¸£à¸±à¸š %s" + +#~ msgid "Setting Up.." +#~ msgstr "à¸à¸³à¸¥à¸±à¸‡à¸•ั้งค่า.." + +#~ msgid "Error loading scene." +#~ msgstr "ผิดพลาดขณะโหลดฉาà¸" + +#~ msgid "Re-Import" +#~ msgstr "นำเข้าà¸à¸µà¸à¸„รั้ง" + +#~ msgid "Please wait for scan to complete." +#~ msgstr "à¸à¸£à¸¸à¸“ารà¸à¹ƒà¸«à¹‰à¸à¸²à¸£à¸ªà¹à¸à¸™à¹€à¸ªà¸£à¹‡à¸ˆ" + +#~ msgid "Current scene must be saved to re-import." +#~ msgstr "ฉาà¸à¸›à¸±à¸ˆà¸ˆà¸¸à¸šà¸±à¸™à¸•้à¸à¸‡à¸šà¸±à¸™à¸—ึà¸à¸à¹ˆà¸à¸™à¸™à¸³à¹€à¸‚้าà¸à¸µà¸à¸„รั้ง" + +#~ msgid "Save & Re-Import" +#~ msgstr "บันทึà¸à¹à¸¥à¸°à¸™à¸³à¹€à¸‚้าà¸à¸µà¸à¸„รั้ง" + +#~ msgid "Re-Importing" +#~ msgstr "นำเข้าà¸à¸µà¸à¸„รั้ง" + +#~ msgid "Re-Import Changed Resources" +#~ msgstr "นำเข้ารีซà¸à¸£à¹Œà¸ªà¸—ี่à¹à¸à¹‰à¹„ขà¸à¸µà¸à¸„รั้ง" + +#~ msgid "Loading Export Templates" +#~ msgstr "à¸à¸³à¸¥à¸±à¸‡à¹‚หลดà¹à¸¡à¹ˆà¹à¸šà¸šà¸ªà¹ˆà¸‡à¸à¸à¸" + +#~ msgid "" +#~ "\n" +#~ "Status: Needs Re-Import" +#~ msgstr "" +#~ "\n" +#~ "สถานะ: ต้à¸à¸‡à¸™à¸³à¹€à¸‚้าใหม่" + +#~ msgid "Same source and destination files, doing nothing." +#~ msgstr "ไฟล์ต้นทางà¹à¸¥à¸°à¸›à¸¥à¸²à¸¢à¸—างเหมืà¸à¸™à¸à¸±à¸™ ไม่ทำà¸à¸°à¹„ร" + +#~ msgid "Target file exists, can't overwrite. Delete first." +#~ msgstr "ไฟล์ปลายทางมีà¸à¸¢à¸¹à¹ˆ เขียนทับไม่ได้ à¸à¸£à¸¸à¸“าลบà¸à¹ˆà¸à¸™" + +#~ msgid "Same source and destination paths, doing nothing." +#~ msgstr "ไฟล์ต้นทางà¹à¸¥à¸°à¸›à¸¥à¸²à¸¢à¸—างà¸à¸¢à¸¹à¹ˆà¸—ี่เดียวà¸à¸±à¸™ ไม่ทำà¸à¸°à¹„ร" + +#~ msgid "Can't move directories to within themselves." +#~ msgstr "ย้ายโฟลเดà¸à¸£à¹Œà¹€à¸‚้ามาในตัวเà¸à¸‡à¹„ม่ได้" + +#~ msgid "Can't rename deps for:\n" +#~ msgstr "ไม่สามารถà¹à¸à¹‰à¹„ขชื่à¸à¸ªà¸³à¸«à¸£à¸±à¸š:\n" + +#~ msgid "Error moving file:\n" +#~ msgstr "ผิดพลาดขณะย้ายไฟล์:\n" + +#~ msgid "Pick New Name and Location For:" +#~ msgstr "เลืà¸à¸à¸Šà¸·à¹ˆà¸à¹à¸¥à¸°à¸•ำà¹à¸«à¸™à¹ˆà¸‡à¸—ี่à¸à¸¢à¸¹à¹ˆà¹ƒà¸«à¸¡à¹ˆà¹ƒà¸«à¹‰à¸à¸±à¸š:" + +#~ msgid "No files selected!" +#~ msgstr "ไม่ได้เลืà¸à¸à¹„ฟล์ไว้!" + +#~ msgid "Info" +#~ msgstr "ข้à¸à¸¡à¸¹à¸¥" + +#~ msgid "Re-Import.." +#~ msgstr "นำเข้าà¸à¸µà¸à¸„รั้ง.." + +#~ msgid "No bit masks to import!" +#~ msgstr "ไม่มีบิตà¹à¸¡à¸ªà¸à¹Œà¹ƒà¸«à¹‰à¸™à¸³à¹€à¸‚้า!" + +#~ msgid "Target path is empty." +#~ msgstr "ตำà¹à¸«à¸™à¹ˆà¸‡à¸—ี่à¸à¸¢à¸¹à¹ˆà¸§à¹ˆà¸²à¸‡à¹€à¸›à¸¥à¹ˆà¸²" + +#~ msgid "Target path must be a complete resource path." +#~ msgstr "ต้à¸à¸‡à¹€à¸›à¹‡à¸™à¸•ำà¹à¸«à¸™à¹ˆà¸‡à¸—ี่à¸à¸¢à¸¹à¹ˆà¹à¸šà¸šà¹€à¸•็ม" + +#~ msgid "Target path must exist." +#~ msgstr "ต้à¸à¸‡à¸¡à¸µà¸•ำà¹à¸«à¸™à¹ˆà¸‡à¸—ี่à¸à¸¢à¸¹à¹ˆ" + +#~ msgid "Save path is empty!" +#~ msgstr "ตำà¹à¸«à¸™à¹ˆà¸‡à¸šà¸±à¸™à¸—ึà¸à¸§à¹ˆà¸²à¸‡à¹€à¸›à¸¥à¹ˆà¸²!" + +#~ msgid "Import BitMasks" +#~ msgstr "นำเข้า BitMasks" + +#~ msgid "Source Texture(s):" +#~ msgstr "Texture ต้นฉบับ:" + +#~ msgid "Target Path:" +#~ msgstr "ตำà¹à¸«à¸™à¹ˆà¸‡à¸—ี่à¸à¸¢à¸¹à¹ˆ:" + +#~ msgid "Accept" +#~ msgstr "ยà¸à¸¡à¸£à¸±à¸š" + +#~ msgid "Bit Mask" +#~ msgstr "บิตà¹à¸¡à¸ªà¸à¹Œ" + +#~ msgid "No source font file!" +#~ msgstr "ไม่ได้เลืà¸à¸à¹„ฟล์ฟà¸à¸™à¸•์ต้นฉบับ!" + +#~ msgid "No target font resource!" +#~ msgstr "ไม่ได้เลืà¸à¸à¸§à¹ˆà¸²à¸ˆà¸°à¸™à¸³à¹€à¸‚้ามาเป็นไฟล์ฟà¸à¸™à¸•์ชื่à¸à¸à¸°à¹„ร!" + +#~ msgid "" +#~ "Invalid file extension.\n" +#~ "Please use .font." +#~ msgstr "" +#~ "นามสà¸à¸¸à¸¥à¹„ม่ถูà¸à¸•้à¸à¸‡\n" +#~ "à¸à¸£à¸¸à¸“าใช้ .font" + +#~ msgid "Couldn't save font." +#~ msgstr "บันทึà¸à¸Ÿà¸à¸™à¸•์ไม่ได้" + +#~ msgid "Source Font:" +#~ msgstr "ฟà¸à¸™à¸•์ต้นฉบับ:" + +#~ msgid "Source Font Size:" +#~ msgstr "ขนาดฟà¸à¸™à¸•์ต้นฉบับ:" + +#~ msgid "Dest Resource:" +#~ msgstr "นำเข้ามาเป็นรีซà¸à¸£à¹Œà¸ª:" + +#~ msgid "The quick brown fox jumps over the lazy dog." +#~ msgstr "The quick brown fox jumps over the lazy dog." + +#~ msgid "Test:" +#~ msgstr "ทดสà¸à¸š:" + +#~ msgid "Options:" +#~ msgstr "ตัวเลืà¸à¸:" + +#~ msgid "Font Import" +#~ msgstr "นำเข้าฟà¸à¸™à¸•์" + +#~ msgid "" +#~ "This file is already a Godot font file, please supply a BMFont type file " +#~ "instead." +#~ msgstr "ไฟล์นี้เป็นฟà¸à¸™à¸•์ขà¸à¸‡ Godot à¸à¸¢à¸¹à¹ˆà¹à¸¥à¹‰à¸§ à¸à¸£à¸¸à¸“าเลืà¸à¸à¸Ÿà¸à¸™à¸•์ที่มาจาภBMFont" + +#~ msgid "Failed opening as BMFont file." +#~ msgstr "ผิดพลาดขณะเปิดไฟล์เป็น BMFont" + +#, fuzzy +#~ msgid "Invalid font custom source." +#~ msgstr "ต้นฉบับฟà¸à¸™à¸•์ที่à¸à¸³à¸«à¸™à¸”เà¸à¸‡à¹„ม่ถูà¸à¸•้à¸à¸‡" + +#~ msgid "No meshes to import!" +#~ msgstr "ไม่มี mesh ให้นำเข้า!" + +#~ msgid "Single Mesh Import" +#~ msgstr "นำเข้า Mesh เดี่ยว" + +#~ msgid "Source Mesh(es):" +#~ msgstr "Mesh ต้นฉบับ:" + +#~ msgid "Surface %d" +#~ msgstr "%d พื้นผิว" + +#~ msgid "No samples to import!" +#~ msgstr "ไม่มีไฟล์เสียงให้นำเข้า!" + +#~ msgid "Import Audio Samples" +#~ msgstr "นำเข้าไฟล์เสียง" + +#~ msgid "Source Sample(s):" +#~ msgstr "ไฟล์เสียงต้นฉบับ:" + +#~ msgid "Audio Sample" +#~ msgstr "ไฟล์เสียง" + +#~ msgid "New Clip" +#~ msgstr "คลิปใหม่" + +#~ msgid "Flags" +#~ msgstr "ตัวเลืà¸à¸" + +#~ msgid "Optimizer" +#~ msgstr "ตัวเพิ่มประสิทธิภาพ" + +#~ msgid "Max Linear Error" +#~ msgstr "ผิดพลาดเชิงเส้นมาà¸à¸—ี่สุด" + +#~ msgid "Max Angular Error" +#~ msgstr "ผิดพลาดเชิงมุมมาà¸à¸—ี่สุด" + +#~ msgid "Max Angle" +#~ msgstr "มุมมาà¸à¸ªà¸¸à¸”" + +#~ msgid "Clips" +#~ msgstr "คลิป" + +#~ msgid "Start(s)" +#~ msgstr "เริ่ม" + +#~ msgid "End(s)" +#~ msgstr "จบ" + +#~ msgid "Filters" +#~ msgstr "ตัวà¸à¸£à¸à¸‡" + +#~ msgid "Source path is empty." +#~ msgstr "ที่à¸à¸¢à¸¹à¹ˆà¹„ฟล์ต้นฉบับว่างเปล่า" + +#~ msgid "Couldn't load post-import script." +#~ msgstr "โหลดสคริปต์หลังนำเข้าไม่ได้" + +#~ msgid "Invalid/broken script for post-import." +#~ msgstr "สคริปต์หลังนำเข้ามีข้à¸à¸œà¸´à¸”พลาด" + +#~ msgid "Error importing scene." +#~ msgstr "ผิดพลาดขณะนำเข้าฉาà¸" + +#~ msgid "Import 3D Scene" +#~ msgstr "นำเข้าฉาภ3D" + +#~ msgid "Source Scene:" +#~ msgstr "ฉาà¸à¸•้นฉบับ:" + +#~ msgid "Same as Target Scene" +#~ msgstr "เหมืà¸à¸™à¸à¸±à¸™à¸à¸±à¸šà¸‰à¸²à¸à¸›à¸¥à¸²à¸¢à¸—าง" + +#~ msgid "Shared" +#~ msgstr "ใช้ร่วมà¸à¸±à¸™" + +#~ msgid "Target Texture Folder:" +#~ msgstr "โฟลเดà¸à¸£à¹Œ Texture ปลายทาง:" + +#~ msgid "Post-Process Script:" +#~ msgstr "สคริปต์หลังประมวลผล:" + +#~ msgid "Custom Root Node Type:" +#~ msgstr "ประเภทโหนดราà¸à¸à¸³à¸«à¸™à¸”เà¸à¸‡:" + +#~ msgid "Auto" +#~ msgstr "à¸à¸±à¸•โนมัติ" + +#~ msgid "Root Node Name:" +#~ msgstr "ชื่à¸à¹‚หนดราà¸:" + +#~ msgid "The Following Files are Missing:" +#~ msgstr "ไฟล์ต่à¸à¹„ปนี้หายไป:" + +#~ msgid "Import Anyway" +#~ msgstr "ยืนยันนำเข้า" + +#~ msgid "Import & Open" +#~ msgstr "นำเข้าà¹à¸¥à¸°à¹€à¸›à¸´à¸”" + +#~ msgid "Edited scene has not been saved, open imported scene anyway?" +#~ msgstr "ฉาà¸à¸›à¸±à¸ˆà¸ˆà¸¸à¸šà¸±à¸™à¸¢à¸±à¸‡à¹„ม่ได้บันทึภยืนยันเปิดไฟล์ฉาà¸à¸—ี่นำเข้า?" + +#~ msgid "Import Image:" +#~ msgstr "นำเข้าไฟล์รูป:" + +#~ msgid "Couldn't localize path: %s (already local)" +#~ msgstr "ทำที่à¸à¸¢à¸¹à¹ˆà¹„ฟล์ให้เป็นภายในไม่ได้: %s (เป็นภายในà¸à¸¢à¸¹à¹ˆà¹à¸¥à¹‰à¸§)" + +#~ msgid "3D Scene Animation" +#~ msgstr "à¹à¸à¸™à¸´à¹€à¸¡à¸Šà¸±à¸™à¸‰à¸²à¸ 3D" + +#~ msgid "Uncompressed" +#~ msgstr "ไม่บีบà¸à¸±à¸”" + +#~ msgid "Compress Lossless (PNG)" +#~ msgstr "บีบà¸à¸±à¸”à¹à¸šà¸šà¹„ม่เสียคุณภาพ (PNG)" + +#~ msgid "Compress Lossy (WebP)" +#~ msgstr "บีบà¸à¸±à¸”à¹à¸šà¸šà¹€à¸ªà¸µà¸¢à¸„ุณภาพ (WebP)" + +#~ msgid "Compress (VRAM)" +#~ msgstr "บีบà¸à¸±à¸” (VRAM)" + +#~ msgid "Texture Format" +#~ msgstr "รูปà¹à¸šà¸š Texture" + +#~ msgid "Texture Compression Quality (WebP):" +#~ msgstr "คุณภาพà¸à¸²à¸£à¸šà¸µà¸šà¸à¸±à¸” Texture (WebP):" + +#~ msgid "Texture Options" +#~ msgstr "ตัวเลืà¸à¸ Texture" + +#~ msgid "Please specify some files!" +#~ msgstr "à¸à¸£à¸¸à¸“าเลืà¸à¸à¸ªà¸±à¸à¹„ฟล์!" + +#~ msgid "At least one file needed for Atlas." +#~ msgstr "Atlas ต้à¸à¸‡à¸à¸²à¸£à¹„ฟล์à¸à¸¢à¹ˆà¸²à¸‡à¸™à¹‰à¸à¸¢ 1 ไฟล์" + +#~ msgid "Error importing:" +#~ msgstr "ผิดพลาดขณะนำเข้า:" + +#~ msgid "Only one file is required for large texture." +#~ msgstr "Texture ขนาดใหà¸à¹ˆà¸•้à¸à¸‡à¸à¸²à¸£à¹à¸„่ไฟล์เดียว" + +#~ msgid "Max Texture Size:" +#~ msgstr "ขนาด Texture ที่ใหà¸à¹ˆà¸—ี่สุด:" + +#~ msgid "Import Textures for Atlas (2D)" +#~ msgstr "นำเข้า Texture สำหรับ Atlas (2D)" + +#~ msgid "Cell Size:" +#~ msgstr "ขนาดเซลล์:" + +#~ msgid "Large Texture" +#~ msgstr "Texture ขนาดใหà¸à¹ˆ" + +#~ msgid "Import Large Textures (2D)" +#~ msgstr "นำเข้า Texture ขนาดใหà¸à¹ˆ (2D)" + +#~ msgid "Source Texture" +#~ msgstr "Texture ต้นฉบับ" + +#~ msgid "Source Texture(s)" +#~ msgstr "Texture ต้นฉบับ" + +#~ msgid "Import Textures for 2D" +#~ msgstr "นำเข้า Texture สำหรับ 2D" + +#~ msgid "Import Textures for 3D" +#~ msgstr "นำเข้า Texture สำหรับ 3D" + +#~ msgid "Import Textures" +#~ msgstr "นำเข้า Texture" + +#~ msgid "2D Texture" +#~ msgstr "Texture 2D" + +#~ msgid "3D Texture" +#~ msgstr "Texture 3D" + +#~ msgid "" +#~ "NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files " +#~ "to the project." +#~ msgstr "โปรดทราบ: ไม่จำเป็นต้à¸à¸‡à¸™à¸³à¹€à¸‚้า Texture 2D à¹à¸„่คัดลà¸à¸à¹„ฟล์ png/jpg เข้าสู่โปรเจà¸à¸•์" + +#~ msgid "Crop empty space." +#~ msgstr "ครà¸à¸šà¸•ัดพื้นที่ว่าง" + +#~ msgid "Texture" +#~ msgstr "Texture" + +#~ msgid "Import Large Texture" +#~ msgstr "นำเข้า Texture ขนาดใหà¸à¹ˆ" + +#~ msgid "Load Source Image" +#~ msgstr "โหลดรูปต้นฉบับ" + +#~ msgid "Slicing" +#~ msgstr "ตัด" + +#~ msgid "Saving" +#~ msgstr "บันทึà¸" + +#~ msgid "Couldn't save large texture:" +#~ msgstr "บันทึภTexture ขนาดใหà¸à¹ˆà¹„ม่ได้:" + +#~ msgid "Build Atlas For:" +#~ msgstr "สร้าง Atlas สำหรับ:" + +#~ msgid "Loading Image:" +#~ msgstr "โหลดรูป:" + +#~ msgid "Couldn't load image:" +#~ msgstr "โหลดรูปไม่ได้:" + +#~ msgid "Converting Images" +#~ msgstr "à¸à¸³à¸¥à¸±à¸‡à¹à¸›à¸¥à¸‡à¸£à¸¹à¸›" + +#~ msgid "Cropping Images" +#~ msgstr "ครà¸à¸šà¸•ัดรูป" + +#~ msgid "Blitting Images" +#~ msgstr "คัดลà¸à¸à¸£à¸¹à¸›" + +#~ msgid "Couldn't save atlas image:" +#~ msgstr "บันทึภAtlas ไม่ได้:" + +#~ msgid "Couldn't save converted texture:" +#~ msgstr "บันทึภTexture ที่à¹à¸›à¸¥à¸‡à¹à¸¥à¹‰à¸§à¹„ม่ได้:" + +#~ msgid "Invalid source!" +#~ msgstr "ต้นฉบับไม่ถูà¸à¸•้à¸à¸‡!" + +#~ msgid "Invalid translation source!" +#~ msgstr "ต้นฉบับà¸à¸²à¸£à¹à¸›à¸¥à¹„ม่ถูà¸à¸•้à¸à¸‡!" + +#~ msgid "Column" +#~ msgstr "คà¸à¸¥à¸±à¸¡à¸™à¹Œ" + +#~ msgid "No items to import!" +#~ msgstr "ไม่มีà¸à¸°à¹„รให้นำเข้า!" + +#~ msgid "No target path!" +#~ msgstr "ไม่มีที่à¸à¸¢à¸¹à¹ˆà¸›à¸¥à¸²à¸¢à¸—าง!" + +#~ msgid "Import Translations" +#~ msgstr "นำเข้าà¸à¸²à¸£à¹à¸›à¸¥" + +#~ msgid "Couldn't import!" +#~ msgstr "นำเข้าไม่ได้!" + +#~ msgid "Import Translation" +#~ msgstr "นำเข้าà¸à¸²à¸£à¹à¸›à¸¥" + +#~ msgid "Source CSV:" +#~ msgstr "CSV ต้นฉบับ:" + +#~ msgid "Ignore First Row" +#~ msgstr "ไม่สนใจà¹à¸–วà¹à¸£à¸" + +#~ msgid "Compress" +#~ msgstr "บีบà¸à¸±à¸”" + +#~ msgid "Add to Project (project.godot)" +#~ msgstr "เพิ่มเข้าโปรเจà¸à¸•์ (project.godot)" + +#~ msgid "Import Languages:" +#~ msgstr "นำเข้าภาษา:" + +#~ msgid "Translation" +#~ msgstr "à¸à¸²à¸£à¹à¸›à¸¥" + +#~ msgid "Parsing %d Triangles:" +#~ msgstr "วิเคราะห์สามเหลี่ยม %d à¸à¸±à¸™:" + +#~ msgid "Triangle #" +#~ msgstr "สามเหลี่ยม #" + +#~ msgid "Light Baker Setup:" +#~ msgstr "ตั้งค่า Light Baker:" + +#~ msgid "Fixing Lights" +#~ msgstr "ซ่à¸à¸¡à¹à¸‹à¸¡à¹à¸ªà¸‡" + +#~ msgid "Making BVH" +#~ msgstr "à¸à¸³à¸¥à¸±à¸‡à¸ªà¸£à¹‰à¸²à¸‡ BVH" + +#~ msgid "Transfer to Lightmaps:" +#~ msgstr "ส่งผ่านไปยัง Lightmaps:" + +#~ msgid "Allocating Texture #" +#~ msgstr "จัดสรร Texture #" + +#~ msgid "Baking Triangle #" +#~ msgstr "à¸à¸³à¸¥à¸±à¸‡ Bake สามเหลี่ยม #" + +#~ msgid "Post-Processing Texture #" +#~ msgstr "ประมวลผล Texture #" + +#~ msgid "Reset the lightmap octree baking process (start over)." +#~ msgstr "รีเซ็ตขั้นตà¸à¸™à¸à¸²à¸£ bake lightmap octree (เริ่มใหม่)" + +#~ msgid "Zoom (%):" +#~ msgstr "ซูม (%):" + +#~ msgid "Skeleton.." +#~ msgstr "โครงà¸à¸£à¸°à¸”ูà¸.." + +#~ msgid "Zoom Reset" +#~ msgstr "รีเซ็ตà¸à¸²à¸£à¸‹à¸¹à¸¡" + +#~ msgid "Zoom Set.." +#~ msgstr "ตั้งค่าà¸à¸²à¸£à¸‹à¸¹à¸¡.." + +#~ msgid "Set a Value" +#~ msgstr "เซ็ตค่า" + +#~ msgid "Snap (Pixels):" +#~ msgstr "Snap (พิà¸à¹€à¸‹à¸¥):" + +#~ msgid "Parse BBCode" +#~ msgstr "ประมวลผล BBCode" + +#~ msgid "Length:" +#~ msgstr "ความยาว:" + +#~ msgid "Open Sample File(s)" +#~ msgstr "เปิดไฟล์เสียง" + +#~ msgid "ERROR: Couldn't load sample!" +#~ msgstr "ผิดพลาด: โหลดไฟล์เสียงไม่ได้!" + +#~ msgid "Add Sample" +#~ msgstr "เพิ่มไฟล์เสียง" + +#~ msgid "Rename Sample" +#~ msgstr "เปลี่ยนชื่à¸à¹„ฟล์เสียง" + +#~ msgid "Delete Sample" +#~ msgstr "ลบไฟล์เสียง" + +#~ msgid "16 Bits" +#~ msgstr "16 บิต" + +#~ msgid "8 Bits" +#~ msgstr "8 บิต" + +#~ msgid "Stereo" +#~ msgstr "สเตà¸à¸£à¸´à¹‚à¸" + +#~ msgid "Mono" +#~ msgstr "โมโน" + +#~ msgid "Pitch" +#~ msgstr "เสียงสูงต่ำ" + +#~ msgid "Window" +#~ msgstr "หน้าต่าง" + +#~ msgid "Move Right" +#~ msgstr "ย้ายไปขวา" + +#~ msgid "Scaling to %s%%." +#~ msgstr "ปรับขนาดเป็น %s%%" + +#~ msgid "Up" +#~ msgstr "ขึ้น" + +#~ msgid "Down" +#~ msgstr "ลง" + +#~ msgid "Bucket" +#~ msgstr "ถัง" + +#~ msgid "Invalid project path, the path must exist!" +#~ msgstr "ที่à¸à¸¢à¸¹à¹ˆà¹‚ปรเจà¸à¸•์ผิดพลาด ต้à¸à¸‡à¸¡à¸µà¸à¸¢à¸¹à¹ˆà¸ˆà¸£à¸´à¸‡!" + +#~ msgid "Invalid project path, project.godot must not exist." +#~ msgstr "ที่à¸à¸¢à¸¹à¹ˆà¹‚ปรเจà¸à¸•์ผิดพลาด ต้à¸à¸‡à¹„ม่มี project.godot" + +#~ msgid "Invalid project path, project.godot must exist." +#~ msgstr "ที่à¸à¸¢à¸¹à¹ˆà¹‚ปรเจà¸à¸•์ผิดพลาด ต้à¸à¸‡à¸¡à¸µ project.godot" + +#~ msgid "Project Path (Must Exist):" +#~ msgstr "ที่à¸à¸¢à¸¹à¹ˆà¹‚ปรเจà¸à¸•์ (ต้à¸à¸‡à¸¡à¸µà¸à¸¢à¸¹à¹ˆà¸ˆà¸£à¸´à¸‡):" + +#~ msgid "Create New Resource" +#~ msgstr "สร้างรีซà¸à¸£à¹Œà¸ªà¹ƒà¸«à¸¡à¹ˆ" + +#~ msgid "Open Resource" +#~ msgstr "เปิดรีซà¸à¸£à¹Œà¸ª" + +#~ msgid "Save Resource" +#~ msgstr "บันทึà¸à¸£à¸µà¸‹à¸à¸£à¹Œà¸ª" + +#~ msgid "Resource Tools" +#~ msgstr "เครื่à¸à¸‡à¸¡à¸·à¸à¸£à¸µà¸‹à¸à¸£à¹Œà¸ª" + +#~ msgid "Edit Groups" +#~ msgstr "à¹à¸à¹‰à¹„ขà¸à¸¥à¸¸à¹ˆà¸¡" + +#~ msgid "Edit Connections" +#~ msgstr "à¹à¸à¹‰à¹„ขà¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸à¸¡à¹‚ยง" + +#~ msgid "GridMap Paint" +#~ msgstr "วาด GridMap" + +#~ msgid "Areas" +#~ msgstr "พื้นที่" + +#~ msgid "Ctrl+" +#~ msgstr "Ctrl+" + +#~ msgid "Down Wheel)" +#~ msgstr "ล้à¸à¹€à¸¡à¸²à¸ªà¹Œà¸¥à¸‡)" + +#~ msgid "Up Wheel)" +#~ msgstr "ล้à¸à¹€à¸¡à¸²à¸ªà¹Œà¸‚ึ้น)" + #~ msgid "Close scene? (Unsaved changes will be lost)" #~ msgstr "ปิดไฟล์ฉาà¸? (à¸à¸²à¸£à¹à¸à¹‰à¹„ขที่ไม่ได้บันทึà¸à¸ˆà¸°à¸ªà¸¹à¸à¸«à¸²à¸¢)" @@ -7940,9 +8129,6 @@ msgstr "" #~ msgid "Close Goto Prev. Scene" #~ msgstr "ปิดไปยังฉาà¸à¸à¹ˆà¸à¸™à¸«à¸™à¹‰à¸²" -#~ msgid "Expand to Parent" -#~ msgstr "ขยายให้เต็มโหนดà¹à¸¡à¹ˆ" - #~ msgid "Del" #~ msgstr "ลบ" @@ -8092,18 +8278,12 @@ msgstr "" #~ msgid "Save Translatable Strings" #~ msgstr "บันทึà¸à¸ªà¸•ริงหลายภาษา" -#~ msgid "Translatable Strings.." -#~ msgstr "สตริงหลายภาษา.." - #~ msgid "Install Export Templates" #~ msgstr "ติดตั้งà¹à¸¡à¹ˆà¹à¸šà¸šà¸ªà¹ˆà¸‡à¸à¸à¸" #~ msgid "Edit Script Options" #~ msgstr "à¹à¸à¹‰à¹„ขตัวเลืà¸à¸à¸ªà¸„ริปต์" -#~ msgid "Please export outside the project folder!" -#~ msgstr "à¸à¸£à¸¸à¸“าส่งà¸à¸à¸à¹„ปนà¸à¸à¹‚ฟลเดà¸à¸£à¹Œà¹‚ปรเจà¸à¸•์!" - #~ msgid "Error exporting project!" #~ msgstr "ผิดพลาดขณะส่งà¸à¸à¸à¹‚ปรเจà¸à¸•์!" @@ -8159,9 +8339,6 @@ msgstr "" #~ msgid "Invalid character in group name!" #~ msgstr "ใช้à¸à¸±à¸à¸©à¸£à¸šà¸²à¸‡à¸•ัวในชื่à¸à¸à¸¥à¸¸à¹ˆà¸¡à¹„ม่ได้!" -#~ msgid "Group name already exists!" -#~ msgstr "มีชื่à¸à¸à¸¥à¸¸à¹ˆà¸¡à¸™à¸µà¹‰à¸à¸¢à¸¹à¹ˆà¹à¸¥à¹‰à¸§!" - #~ msgid "Atlas Preview" #~ msgstr "ตัวà¸à¸¢à¹ˆà¸²à¸‡ Atlas" diff --git a/editor/translations/tr.po b/editor/translations/tr.po index df749f5c9b..9d68331ae5 100644 --- a/editor/translations/tr.po +++ b/editor/translations/tr.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2017-07-19 09:38+0000\n" +"PO-Revision-Date: 2017-08-29 13:49+0000\n" "Last-Translator: hubbyist <hub@legrud.net>\n" "Language-Team: Turkish <https://hosted.weblate.org/projects/godot-engine/" "godot/tr/>\n" @@ -20,7 +20,7 @@ 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.16-dev\n" +"X-Generator: Weblate 2.17-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -196,10 +196,9 @@ msgid "Create %d NEW tracks and insert keys?" msgstr "%d için yeni izler oluÅŸtur ve açar gir?" #: editor/animation_editor.cpp editor/create_dialog.cpp -#: editor/editor_audio_buses.cpp +#: editor/editor_audio_buses.cpp editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp #: editor/plugins/mesh_instance_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp editor/project_manager.cpp #: editor/script_create_dialog.cpp msgid "Create" @@ -363,266 +362,6 @@ msgstr "Dizinin türünü degistir" msgid "Change Array Value" msgstr "Dizi DeÄŸerini DeÄŸiÅŸtir" -#: editor/asset_library_editor_plugin.cpp -msgid "Free" -msgstr "Özgür" - -#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp -msgid "Version:" -msgstr "Sürüm:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Contents:" -msgstr "İçerikler:" - -#: editor/asset_library_editor_plugin.cpp -msgid "View Files" -msgstr "Dosyaları Görüntüle" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_help.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp -msgid "Description:" -msgstr "Açıklama:" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -#: editor/project_manager.cpp -msgid "Install" -msgstr "Kur" - -#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp -#: editor/connections_dialog.cpp editor/export_template_manager.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -#: editor/project_settings_editor.cpp editor/property_editor.cpp -#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Close" -msgstr "Kapat" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve hostname:" -msgstr "Ana makine adı çözümlenemedi:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve." -msgstr "Çözümlenemedi." - -#: editor/asset_library_editor_plugin.cpp -msgid "Connection error, please try again." -msgstr "BaÄŸlantı hatası, lütfen tekrar deneyiniz." - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't connect." -msgstr "BaÄŸlanamadı." - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't connect to host:" -msgstr "Ana makineye baÄŸlanılamadı:" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response from host:" -msgstr "Ana makineden cevap yok:" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response." -msgstr "Cevap yok." - -#: editor/asset_library_editor_plugin.cpp -msgid "Request failed, return code:" -msgstr "İstem baÅŸarısız, dönen kod:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Req. Failed." -msgstr "İstem BaÅŸarısız." - -#: editor/asset_library_editor_plugin.cpp -msgid "Request failed, too many redirects" -msgstr "İstem BaÅŸarısız, çok fazla yönlendirme" - -#: editor/asset_library_editor_plugin.cpp -msgid "Redirect Loop." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Bad download hash, assuming file has been tampered with." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Expected:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Got:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed sha256 hash check" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Asset Download Error:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -msgid "Success!" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Fetching:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Resolving.." -msgstr "Kaydediliyor..." - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Connecting.." -msgstr "BaÄŸlan..." - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Requesting.." -msgstr "Deneme" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Error making request" -msgstr "Kaynak kaydedilirken sorun!" - -#: editor/asset_library_editor_plugin.cpp -msgid "Idle" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Retry" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Download Error" -msgstr "AÅŸağı" - -#: editor/asset_library_editor_plugin.cpp -msgid "Download for this asset is already in progress!" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "first" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "prev" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "next" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "last" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "All" -msgstr "Hepsi" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/property_selector.cpp editor/quick_open.cpp -#: editor/settings_config_dialog.cpp -msgid "Search:" -msgstr "Ara:" - -#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Search" -msgstr "Ara" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/project_manager.cpp -msgid "Import" -msgstr "İçe Aktar" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Plugins" -msgstr "Eklentiler" - -#: editor/asset_library_editor_plugin.cpp -msgid "Sort:" -msgstr "Sırala:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Reverse" -msgstr "Tersi" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Category:" -msgstr "Katman:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Site:" -msgstr "Yer:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "Destek..." - -#: editor/asset_library_editor_plugin.cpp -msgid "Official" -msgstr "Resmi" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -msgid "Community" -msgstr "Topluluk" - -#: editor/asset_library_editor_plugin.cpp -msgid "Testing" -msgstr "Deneme" - -#: editor/asset_library_editor_plugin.cpp -msgid "Assets ZIP File" -msgstr "Varlıkların ZIP Dizeci" - -#: editor/call_dialog.cpp -msgid "Method List For '%s':" -msgstr "'%s' İçin Yöntem Dizelgesi:" - -#: editor/call_dialog.cpp modules/visual_script/visual_script_editor.cpp -msgid "Call" -msgstr "Çağır" - -#: editor/call_dialog.cpp -msgid "Method List:" -msgstr "Yöntem Dizelgesi:" - -#: editor/call_dialog.cpp -msgid "Arguments:" -msgstr "DeÄŸiÅŸtirgenler:" - -#: editor/call_dialog.cpp -msgid "Return:" -msgstr "Döndür:" - #: editor/code_editor.cpp msgid "Go to Line" msgstr "Dizeye Git" @@ -660,6 +399,14 @@ msgstr "Tüm Sözcükler" msgid "Selection Only" msgstr "Yalnızca Seçim" +#: editor/code_editor.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp +msgid "Search" +msgstr "Ara" + #: editor/code_editor.cpp editor/editor_help.cpp msgid "Find" msgstr "Bul" @@ -692,11 +439,11 @@ msgstr "DeÄŸiÅŸimi Sor" msgid "Skip" msgstr "Geç" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom In" msgstr "YaklaÅŸ" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom Out" msgstr "UzaklaÅŸtır" @@ -765,6 +512,20 @@ msgstr "ErtelenmiÅŸ" msgid "Oneshot" msgstr "Tek sefer" +#: editor/connections_dialog.cpp editor/dependency_editor.cpp +#: editor/export_template_manager.cpp +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Close" +msgstr "Kapat" + #: editor/connections_dialog.cpp msgid "Connect" msgstr "BaÄŸla" @@ -790,7 +551,7 @@ msgstr "BaÄŸlan..." msgid "Disconnect" msgstr "BaÄŸlantıyı kes" -#: editor/connections_dialog.cpp editor/node_dock.cpp +#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" msgstr "İşaretler" @@ -807,12 +568,25 @@ msgstr "BeÄŸeniler:" msgid "Recent:" msgstr "Yakın zamanda:" +#: editor/create_dialog.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp +#: editor/quick_open.cpp editor/settings_config_dialog.cpp +msgid "Search:" +msgstr "Ara:" + #: editor/create_dialog.cpp editor/editor_help.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp #: editor/quick_open.cpp msgid "Matches:" msgstr "EÅŸleÅŸmeler:" +#: editor/create_dialog.cpp editor/editor_help.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp +#: editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "Açıklama:" + #: editor/dependency_editor.cpp msgid "Search Replacement For:" msgstr "Åžunun İçin DeÄŸiÅŸikliÄŸi Ara:" @@ -872,6 +646,10 @@ msgid "Owners Of:" msgstr "Bunun Sahibi:" #: editor/dependency_editor.cpp +msgid "Remove selected files from the project? (no undo)" +msgstr "Seçili dizeçleri tasarıdan kaldır? (Geri alınamaz)" + +#: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" @@ -881,8 +659,9 @@ msgstr "" "Yine de kaldırmak istiyor musunuz? (Geri alınamaz)" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (no undo)" -msgstr "Seçili dizeçleri tasarıdan kaldır? (Geri alınamaz)" +#, fuzzy +msgid "Cannot remove:\n" +msgstr "Çözümlenemedi." #: editor/dependency_editor.cpp msgid "Error loading:" @@ -945,12 +724,7 @@ msgstr "SaÄŸ olun!" #: editor/editor_about.cpp msgid "Godot Engine contributors" -msgstr "" - -#: editor/editor_about.cpp -#, fuzzy -msgid "Authors" -msgstr "Yazar:" +msgstr "Godot Oyun Motoru katkı saÄŸlayanlar" #: editor/editor_about.cpp #, fuzzy @@ -959,7 +733,7 @@ msgstr "Tasarı Yöneticisi" #: editor/editor_about.cpp msgid "Lead Developer" -msgstr "" +msgstr "BaÅŸ GeliÅŸtirici" #: editor/editor_about.cpp editor/project_manager.cpp msgid "Project Manager" @@ -967,17 +741,51 @@ msgstr "Tasarı Yöneticisi" #: editor/editor_about.cpp msgid "Developers" +msgstr "GeliÅŸtiriciler" + +#: editor/editor_about.cpp +#, fuzzy +msgid "Authors" +msgstr "Yazar:" + +#: editor/editor_about.cpp +msgid "Platinum Sponsors" msgstr "" #: editor/editor_about.cpp -msgid "License" +msgid "Gold Sponsors" msgstr "" #: editor/editor_about.cpp -msgid "Thirdparty License" +msgid "Mini Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Silver Donors" +msgstr "" + +#: editor/editor_about.cpp +#, fuzzy +msgid "Bronze Donors" +msgstr "AÅŸağıya EÅŸle" + +#: editor/editor_about.cpp +msgid "Donors" msgstr "" #: editor/editor_about.cpp +msgid "License" +msgstr "Lisans" + +#: editor/editor_about.cpp +msgid "Thirdparty License" +msgstr "Üçüncü Parti Lisans" + +#: editor/editor_about.cpp msgid "" "Godot Engine relies on a number of thirdparty free and open source " "libraries, all compatible with the terms of its MIT license. The following " @@ -997,7 +805,7 @@ msgstr "İçerikler:" #: editor/editor_about.cpp msgid "Licenses" -msgstr "" +msgstr "Lisanslar" #: editor/editor_asset_installer.cpp editor/project_manager.cpp msgid "Error opening package file, not in zip format." @@ -1013,13 +821,23 @@ msgid "Package Installed Successfully!" msgstr "Çıkın BaÅŸarı ile Kuruldu!" #: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Success!" +msgstr "BaÅŸarılı!" + +#: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp +msgid "Install" +msgstr "Kur" + +#: editor/editor_asset_installer.cpp #, fuzzy msgid "Package Installer" msgstr "Çıkın BaÅŸarı ile Kuruldu!" #: editor/editor_audio_buses.cpp msgid "Speakers" -msgstr "" +msgstr "Hoparlörler" #: editor/editor_audio_buses.cpp #, fuzzy @@ -1066,21 +884,21 @@ msgid "Audio Bus, Drag and Drop to rearrange." msgstr "" #: editor/editor_audio_buses.cpp -#, fuzzy -msgid "Bus options" -msgstr "Sorun ayıklama seçenekleri" - -#: editor/editor_audio_buses.cpp msgid "Solo" -msgstr "" +msgstr "Tekil" #: editor/editor_audio_buses.cpp msgid "Mute" -msgstr "" +msgstr "Sessiz" #: editor/editor_audio_buses.cpp msgid "Bypass" -msgstr "" +msgstr "Dolan" + +#: editor/editor_audio_buses.cpp +#, fuzzy +msgid "Bus options" +msgstr "Sorun ayıklama seçenekleri" #: editor/editor_audio_buses.cpp editor/plugins/tile_map_editor_plugin.cpp #: editor/scene_tree_dock.cpp @@ -1089,6 +907,11 @@ msgstr "İkile" #: editor/editor_audio_buses.cpp #, fuzzy +msgid "Reset Volume" +msgstr "YaklaÅŸmayı Sıfırla" + +#: editor/editor_audio_buses.cpp +#, fuzzy msgid "Delete Effect" msgstr "Seçilenleri Sil" @@ -1113,6 +936,11 @@ msgstr "Canlandırmayı İkile" #: editor/editor_audio_buses.cpp #, fuzzy +msgid "Reset Bus Volume" +msgstr "YaklaÅŸmayı Sıfırla" + +#: editor/editor_audio_buses.cpp +#, fuzzy msgid "Move Audio Bus" msgstr "Eylemi Taşı" @@ -1149,7 +977,8 @@ msgstr "Ekle %s" msgid "Create a new Bus Layout." msgstr "Yeni Kaynak OluÅŸtur" -#: editor/editor_audio_buses.cpp editor/script_create_dialog.cpp +#: editor/editor_audio_buses.cpp editor/property_editor.cpp +#: editor/script_create_dialog.cpp msgid "Load" msgstr "Yükle" @@ -1241,7 +1070,7 @@ msgid "Rearrange Autoloads" msgstr "KendindenYüklenme'leri Yeniden Sırala" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp scene/gui/file_dialog.cpp +#: scene/gui/file_dialog.cpp msgid "Path:" msgstr "Dizeç yolu:" @@ -1249,9 +1078,7 @@ msgstr "Dizeç yolu:" msgid "Node Name:" msgstr "Düğüm adı:" -#: editor/editor_autoload_settings.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp editor/project_manager.cpp +#: editor/editor_autoload_settings.cpp editor/project_manager.cpp msgid "Name" msgstr "Ad" @@ -1285,18 +1112,19 @@ msgid "Choose a Directory" msgstr "Dizin Seç" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Create Folder" msgstr "Dizin OluÅŸtur" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: editor/editor_plugin_settings.cpp editor/plugins/theme_editor_plugin.cpp -#: editor/project_export.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp +#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp +#: scene/gui/file_dialog.cpp msgid "Name:" msgstr "Ad:" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Could not create folder." msgstr "Dizin oluÅŸturulamadı." @@ -1314,31 +1142,7 @@ msgstr "Çıkınla" #: editor/editor_export.cpp platform/javascript/export/export.cpp msgid "Template file not found:\n" -msgstr "" - -#: editor/editor_export.cpp -msgid "Added:" -msgstr "Eklenen:" - -#: editor/editor_export.cpp -msgid "Removed:" -msgstr "Silinen:" - -#: editor/editor_export.cpp -msgid "Error saving atlas:" -msgstr "Atlas kaydedilirken sorun oluÅŸtu:" - -#: editor/editor_export.cpp -msgid "Could not save atlas subtexture:" -msgstr "Atlas alt dokusu kaydedilemedi:" - -#: editor/editor_export.cpp -msgid "Exporting for %s" -msgstr "%s için Dışa Aktarım" - -#: editor/editor_export.cpp -msgid "Setting Up.." -msgstr "Kurulum..." +msgstr "Biçem dosyası bulunamadı:\n" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" @@ -1424,6 +1228,11 @@ msgstr "BeÄŸenileni Yukarı Taşı" msgid "Move Favorite Down" msgstr "BeÄŸenileni AÅŸağı Taşı" +#: editor/editor_file_dialog.cpp +#, fuzzy +msgid "Go to parent folder" +msgstr "Dizin oluÅŸturulamadı." + #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Directories & Files:" msgstr "Dizinler & Dizeçler:" @@ -1467,6 +1276,10 @@ msgstr "Bölüt Dizelgesi:" msgid "Search Classes" msgstr "Bölütleri Ara" +#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +msgid "Top" +msgstr "Üst" + #: editor/editor_help.cpp editor/property_editor.cpp msgid "Class:" msgstr "Bölüt:" @@ -1483,15 +1296,30 @@ msgstr "Tarafından kalıt alındı:" msgid "Brief Description:" msgstr "Kısa Açıklama:" +#: editor/editor_help.cpp +#, fuzzy +msgid "Members" +msgstr "Üyeler:" + #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "Üyeler:" #: editor/editor_help.cpp +#, fuzzy +msgid "Public Methods" +msgstr "Açık Yöntemler:" + +#: editor/editor_help.cpp msgid "Public Methods:" msgstr "Açık Yöntemler:" #: editor/editor_help.cpp +#, fuzzy +msgid "GUI Theme Items" +msgstr "Arayüz Kalıbı Öğeleri:" + +#: editor/editor_help.cpp msgid "GUI Theme Items:" msgstr "Arayüz Kalıbı Öğeleri:" @@ -1501,26 +1329,63 @@ msgstr "İşaretler:" #: editor/editor_help.cpp #, fuzzy +msgid "Enumerations" +msgstr "Canlandırmalar" + +#: editor/editor_help.cpp +#, fuzzy msgid "Enumerations:" msgstr "Canlandırmalar" #: editor/editor_help.cpp msgid "enum " -msgstr "" +msgstr "enum… " + +#: editor/editor_help.cpp +#, fuzzy +msgid "Constants" +msgstr "Sabitler:" #: editor/editor_help.cpp msgid "Constants:" msgstr "Sabitler:" #: editor/editor_help.cpp +#, fuzzy +msgid "Description" +msgstr "Açıklama:" + +#: editor/editor_help.cpp +#, fuzzy +msgid "Properties" +msgstr "Özellikleri:" + +#: editor/editor_help.cpp msgid "Property Description:" msgstr "Özellik Açıklaması:" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this property. Please help us by " +"[color=$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp +#, fuzzy +msgid "Methods" +msgstr "Yöntem Dizelgesi:" + +#: editor/editor_help.cpp msgid "Method Description:" msgstr "Yöntem Açıklaması:" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this method. Please help us by [color=" +"$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp msgid "Search Text" msgstr "Yazı Ara" @@ -1530,24 +1395,21 @@ msgid "Output:" msgstr " Çıktı:" #: editor/editor_log.cpp editor/plugins/animation_tree_editor_plugin.cpp -#: editor/plugins/rich_text_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_editor_debugger.cpp scene/gui/line_edit.cpp -#: scene/gui/text_edit.cpp +#: editor/property_editor.cpp editor/script_editor_debugger.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Clear" msgstr "Temizle" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Error saving resource!" msgstr "Kaynak kaydedilirken sorun!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Save Resource As.." msgstr "Kaynağı BaÅŸkaca Kaydet.." -#: editor/editor_node.cpp editor/export_template_manager.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "I see.." msgstr "Anlıyorum.." @@ -1564,6 +1426,30 @@ msgid "Error while saving." msgstr "Kaydedilirken sorun oluÅŸtu." #: editor/editor_node.cpp +#, fuzzy +msgid "Can't open '%s'." +msgstr "'..' üzerinde çalışılamıyor" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Error while parsing '%s'." +msgstr "Kaydedilirken sorun oluÅŸtu." + +#: editor/editor_node.cpp +msgid "Unexpected end of file '%s'." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Missing '%s' or its dependencies." +msgstr "Sahne '%s' bağımlılıkları koptu:" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Error while loading '%s'." +msgstr "Kaydedilirken sorun oluÅŸtu." + +#: editor/editor_node.cpp msgid "Saving Scene" msgstr "Sahne Kaydediliyor" @@ -1622,6 +1508,33 @@ msgid "Restored default layout to base settings." msgstr "Önyüklü tasarım temel ayarlara onarıldı." #: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was imported, so it's not editable.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was instanced or inherited.\n" +"Changes to it will not be kept when saving the current scene." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource was imported, so it's not editable. Change its settings in the " +"import panel and then re-import." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This scene was imported, so changes to it will not be kept.\n" +"Instancing it or inheriting will allow making changes to it.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp msgid "Copy Params" msgstr "DeÄŸiÅŸkenleri Tıpkıla" @@ -1798,6 +1711,12 @@ msgid "Save changes the following scene(s) before opening Project Manager?" msgstr "" #: editor/editor_node.cpp +msgid "" +"This option is deprecated. Situations where refresh must be forced are now " +"considered a bug. Please report." +msgstr "" + +#: editor/editor_node.cpp msgid "Pick a Main Scene" msgstr "Bir Ana Sahne Seç" @@ -1824,7 +1743,7 @@ msgid "" msgstr "" #: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Ugh" msgstr "Öff" @@ -1838,14 +1757,15 @@ msgstr "" "kaydedin." #: editor/editor_node.cpp -msgid "Error loading scene." -msgstr "Sahne yüklenirken sorun oluÅŸtu." - -#: editor/editor_node.cpp msgid "Scene '%s' has broken dependencies:" msgstr "Sahne '%s' bağımlılıkları koptu:" #: editor/editor_node.cpp +#, fuzzy +msgid "Clear Recent Scenes" +msgstr "Kemikleri Temizle" + +#: editor/editor_node.cpp msgid "Save Layout" msgstr "Tasarımı Kaydet" @@ -1879,7 +1799,7 @@ msgstr "Dikkat Dağıtmayan Biçim" msgid "Toggle distraction-free mode." msgstr "Dikkat Dağıtmayan Biçim" -#: editor/editor_node.cpp editor/io_plugins/editor_scene_import_plugin.cpp +#: editor/editor_node.cpp msgid "Scene" msgstr "Sahne" @@ -2122,6 +2042,10 @@ msgstr "" msgid "Issue Tracker" msgstr "" +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +msgid "Community" +msgstr "Topluluk" + #: editor/editor_node.cpp msgid "About" msgstr "İliÅŸkin" @@ -2130,7 +2054,7 @@ msgstr "İliÅŸkin" msgid "Play the project." msgstr "Tasarıyı oynat." -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Play" msgstr "Oynat" @@ -2146,7 +2070,7 @@ msgstr "Sahneyi Duraklat" msgid "Stop the scene." msgstr "Sahneyi durdur." -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Stop" msgstr "Durdur" @@ -2219,6 +2143,16 @@ msgid "Object properties." msgstr "Nesne özellikleri." #: editor/editor_node.cpp +#, fuzzy +msgid "Changes may be lost!" +msgstr "Bediz ÖbeÄŸini DeÄŸiÅŸtir" + +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Import" +msgstr "İçe Aktar" + +#: editor/editor_node.cpp msgid "FileSystem" msgstr "DizeçDüzeni" @@ -2234,14 +2168,6 @@ msgstr "Çıktı" msgid "Don't Save" msgstr "" -#: editor/editor_node.cpp editor/editor_reimport_dialog.cpp -msgid "Re-Import" -msgstr "Yeniden İçe Aktar" - -#: editor/editor_node.cpp editor/editor_plugin_settings.cpp -msgid "Update" -msgstr "Güncelle" - #: editor/editor_node.cpp msgid "Import Templates From ZIP File" msgstr "Kalıpları ZIP Dizecinden İçe Aktar" @@ -2309,11 +2235,29 @@ msgstr "Düzenleyicide Aç" msgid "Open the previous Editor" msgstr "Düzenleyicide Aç" +#: editor/editor_plugin.cpp +#, fuzzy +msgid "Creating Mesh Previews" +msgstr "Örüntü Betikevi OluÅŸtur" + +#: editor/editor_plugin.cpp +msgid "Thumbnail.." +msgstr "Küçük Bediz.." + #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" msgstr "Yüklü Eklentiler:" #: editor/editor_plugin_settings.cpp +msgid "Update" +msgstr "Güncelle" + +#: editor/editor_plugin_settings.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Version:" +msgstr "Sürüm:" + +#: editor/editor_plugin_settings.cpp msgid "Author:" msgstr "Yazar:" @@ -2365,26 +2309,6 @@ msgstr "Kendi" msgid "Frame #:" msgstr "Kare #:" -#: editor/editor_reimport_dialog.cpp -msgid "Please wait for scan to complete." -msgstr "Tarama için bitmesini bekleyin." - -#: editor/editor_reimport_dialog.cpp -msgid "Current scene must be saved to re-import." -msgstr "Yeniden içe aktarmak için ÅŸu anki sahneyi kaydet." - -#: editor/editor_reimport_dialog.cpp -msgid "Save & Re-Import" -msgstr "Kaydet & Yeniden İçe Aktar" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Importing" -msgstr "Yeniden-İçe Aktarım" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Import Changed Resources" -msgstr "DeÄŸiÅŸtirilmiÅŸ Kaynakları Yeniden İçe Aktar" - #: editor/editor_run_native.cpp msgid "Select device from the list" msgstr "" @@ -2501,10 +2425,6 @@ msgid "Importing:" msgstr "İçe Aktarım:" #: editor/export_template_manager.cpp -msgid "Loading Export Templates" -msgstr "Dışa Aktarım Kalıpları Yükleniyor" - -#: editor/export_template_manager.cpp #, fuzzy msgid "Current Version:" msgstr "Åžu anki Sahne" @@ -2545,11 +2465,18 @@ msgid "Cannot navigate to '" msgstr "" #: editor/filesystem_dock.cpp -#, fuzzy +msgid "View items as a grid of thumbnails" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "View items as a list" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "" "\n" -"Status: Needs Re-Import" -msgstr "Kaydet & Yeniden İçe Aktar" +"Status: Import of file failed. Please fix file and reimport manually." +msgstr "" #: editor/filesystem_dock.cpp #, fuzzy @@ -2559,46 +2486,57 @@ msgid "" msgstr "Kaynak:" #: editor/filesystem_dock.cpp -msgid "Same source and destination files, doing nothing." -msgstr "ÖzdeÅŸ kaynak ve varış dizeçleri, hiçbir ÅŸey yapılmıyor." +#, fuzzy +msgid "Cannot move/rename resources root." +msgstr "Kaynak yazı tipi yüklenemiyor / iÅŸlenemiyor." #: editor/filesystem_dock.cpp -msgid "Target file exists, can't overwrite. Delete first." -msgstr "" +#, fuzzy +msgid "Cannot move a folder into itself.\n" +msgstr "Bir dizeç kendisi üzerine içe aktaramıyor:" #: editor/filesystem_dock.cpp -msgid "Same source and destination paths, doing nothing." -msgstr "ÖzdeÅŸ kaynak ve varış yolları, hiçbir ÅŸey yapılmıyor." +#, fuzzy +msgid "Error moving:\n" +msgstr "İçe aktarırken sorun:" #: editor/filesystem_dock.cpp -msgid "Can't move directories to within themselves." -msgstr "Dizinleri kendi içlerine taşıyamazsınız." +#, fuzzy +msgid "Unable to update dependencies:\n" +msgstr "Sahne '%s' bağımlılıkları koptu:" #: editor/filesystem_dock.cpp -msgid "Can't rename deps for:\n" +msgid "No name provided" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Provided name contains invalid characters" msgstr "" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Error moving file:\n" -msgstr "Bediz yüklenirken sorun oluÅŸtu:" +msgid "No name provided." +msgstr "Yeniden Adlandır ya da Taşı.." #: editor/filesystem_dock.cpp #, fuzzy -msgid "Error moving dir:\n" -msgstr "İçe aktarırken sorun:" +msgid "Name contains invalid characters." +msgstr "Geçerli damgalar:" #: editor/filesystem_dock.cpp -msgid "Can't operate on '..'" -msgstr "'..' üzerinde çalışılamıyor" +#, fuzzy +msgid "A file or folder with this name already exists." +msgstr "Öbek adı zaten var!" #: editor/filesystem_dock.cpp -msgid "Pick New Name and Location For:" -msgstr "Åžunun için yeni ad ile konum seçin:" +#, fuzzy +msgid "Renaming file:" +msgstr "DeÄŸiÅŸkeni Yeniden Adlandır" #: editor/filesystem_dock.cpp -msgid "No files selected!" -msgstr "Hiçbir Dizeç Seçilmedi!" +#, fuzzy +msgid "Renaming folder:" +msgstr "Düğümü Yeniden Adlandır" #: editor/filesystem_dock.cpp #, fuzzy @@ -2610,40 +2548,38 @@ msgid "Collapse all" msgstr "" #: editor/filesystem_dock.cpp -msgid "Show In File Manager" -msgstr "Dizeç Yöneticisinde Göster" - -#: editor/filesystem_dock.cpp -msgid "Instance" -msgstr "Örnek" +msgid "Copy Path" +msgstr "Dizeç Yolunu Tıpkıla" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "Bağımlılıkları Düzenle.." +#, fuzzy +msgid "Rename.." +msgstr "Yeniden Adlandır" #: editor/filesystem_dock.cpp -msgid "View Owners.." -msgstr "Sahipleri Görüntüle.." +msgid "Move To.." +msgstr "Åžuraya Taşı.." #: editor/filesystem_dock.cpp -msgid "Copy Path" -msgstr "Dizeç Yolunu Tıpkıla" +#, fuzzy +msgid "New Folder.." +msgstr "Dizin OluÅŸtur" #: editor/filesystem_dock.cpp -msgid "Rename or Move.." -msgstr "Yeniden Adlandır ya da Taşı.." +msgid "Show In File Manager" +msgstr "Dizeç Yöneticisinde Göster" #: editor/filesystem_dock.cpp -msgid "Move To.." -msgstr "Åžuraya Taşı.." +msgid "Instance" +msgstr "Örnek" #: editor/filesystem_dock.cpp -msgid "Info" -msgstr "Bilgi" +msgid "Edit Dependencies.." +msgstr "Bağımlılıkları Düzenle.." #: editor/filesystem_dock.cpp -msgid "Re-Import.." -msgstr "Yeniden İçe Aktar.." +msgid "View Owners.." +msgstr "Sahipleri Görüntüle.." #: editor/filesystem_dock.cpp msgid "Previous Directory" @@ -2675,6 +2611,11 @@ msgstr "" msgid "Move" msgstr "Taşı" +#: editor/filesystem_dock.cpp editor/plugins/animation_tree_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Rename" +msgstr "Yeniden Adlandır" + #: editor/groups_editor.cpp msgid "Add to Group" msgstr "ÖbeÄŸe Ekle" @@ -2689,6 +2630,11 @@ msgid "Import as Single Scene" msgstr "Sahneyi İçe Aktarıyor..." #: editor/import/resource_importer_scene.cpp +#, fuzzy +msgid "Import with Separate Animations" +msgstr "Canlandırmaları İçe Aktar.." + +#: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials" msgstr "" @@ -2701,6 +2647,18 @@ msgid "Import with Separate Objects+Materials" msgstr "" #: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Materials+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Materials+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp #, fuzzy msgid "Import as Multiple Scenes" msgstr "3B Sahneyi İçe Aktar" @@ -2710,40 +2668,33 @@ msgid "Import as Multiple Scenes+Materials" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Import Scene" msgstr "Sahneyi İçe Aktar" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Importing Scene.." msgstr "Sahneyi İçe Aktarıyor..." #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Running Custom Script.." msgstr "Çalışan Özel Betik.." #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Couldn't load post-import script:" msgstr "İçe aktarma sonrası betik dizeci yüklenemedi:" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Invalid/broken script for post-import (check console):" msgstr "" "İçe aktarma iÅŸlemi sonrası için geçersiz/bozuk betik dizeci (konsolu " "denetleyin):" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Error running post-import script:" msgstr "İçe aktarma sonrası betik dizeci çalıştırılırken sorun oluÅŸtu:" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Saving.." msgstr "Kaydediliyor..." @@ -2774,588 +2725,56 @@ msgstr "Ön ayar.." msgid "Reimport" msgstr "Yeniden İçe Aktar" -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "No bit masks to import!" -msgstr "Alınacak hiç bit örteci yok!" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path is empty." -msgstr "Amaçlanan dizeç yolu boÅŸ." - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must be a complete resource path." -msgstr "Amaçlanan yol, tam bir kaynak yolu olmalıdır." - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must exist." -msgstr "Amaçlanan dizeç yolu var olmalı." - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Save path is empty!" -msgstr "Kayıt yolu boÅŸ!" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Import BitMasks" -msgstr "BitMasks İçe Aktar" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s):" -msgstr "Kaynak Doku(lar):" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Target Path:" -msgstr "Amaçlanan Dizeç Yolu :" +#: editor/multi_node_edit.cpp +msgid "MultiNode Set" +msgstr "MultiNode Kur" -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Accept" -msgstr "Kabul" +#: editor/node_dock.cpp +msgid "Groups" +msgstr "Öbekler" -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Bit Mask" -msgstr "Bit Örteci" +#: editor/node_dock.cpp +msgid "Select a Node to edit Signals and Groups." +msgstr "İşaretleri ve Öbekleri düzenlemek için bir Düğüm seçin." -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No source font file!" -msgstr "Kaynak yazı türü dizeci yok!" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create Poly" +msgstr "Çoklu OluÅŸturun" -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No target font resource!" -msgstr "Amaçlanan yazı türü kaynağı yok!" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly" +msgstr "Çokluyu Düzenleyin" -#: editor/io_plugins/editor_font_import_plugin.cpp +#: editor/plugins/abstract_polygon_2d_editor.cpp #, fuzzy -msgid "" -"Invalid file extension.\n" -"Please use .font." -msgstr "" -"Geçersiz dizeç uzantısı.\n" -"Lütfen .fnt uzantısını kullanın." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Can't load/process source font." -msgstr "Kaynak yazı tipi yüklenemiyor / iÅŸlenemiyor." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Couldn't save font." -msgstr "Yazı türü kaydedilemedi." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font:" -msgstr "Yazı Türü Kaynağı:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font Size:" -msgstr "Kaynak Yazı Türü Boyutu:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Dest Resource:" -msgstr "Varış Kaynağı:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "The quick brown fox jumps over the lazy dog." -msgstr "Hızlı kahverengi tilki üşengeç köpeÄŸin üstünden atlar." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Test:" -msgstr "Deneme:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Options:" -msgstr "Seçenekler:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Font Import" -msgstr "Yazı Türü İçe Aktar" - -#: 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 "" -"Bu dizeç zaten bir Godot yazı türü dizecidir , lütfen bunun yerine bir " -"BMFont türü dizeci saÄŸlayın." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Failed opening as BMFont file." -msgstr "BMFont dizeci olarak açma baÅŸarısız oldu." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error initializing FreeType." -msgstr "FreeType baÅŸlatılırken sorun oluÅŸtu." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Unknown font format." -msgstr "Bilinmeyen yazı türü." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error loading font." -msgstr "Yazı türü yüklerken sorun oluÅŸtu." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Invalid font size." -msgstr "Geçersiz yazı türü boyutu." - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Invalid font custom source." -msgstr "Geçersiz yazı türü özel kaynağı." - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/plugins/theme_editor_plugin.cpp -msgid "Font" -msgstr "Yazı Tipi" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "No meshes to import!" -msgstr "İçe aktarılacak örüntü yok!" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Single Mesh Import" -msgstr "Tekil Örüntü İçe Aktar" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Source Mesh(es):" -msgstr "Kaynak Örüntü(leri):" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Mesh" -msgstr "Örüntü" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Surface %d" -msgstr "Yüzey %d" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "No samples to import!" -msgstr "Alınacak örnek yok!" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Import Audio Samples" -msgstr "Ses Örneklerini İçe Aktar" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Source Sample(s):" -msgstr "Kaynak Örnek(leri):" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Audio Sample" -msgstr "Ses ÖrneÄŸi" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "New Clip" -msgstr "Yeni Parça" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Animation Options" -msgstr "Canlandırma Seçenekleri" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Flags" -msgstr "Bayraklar" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Bake FPS:" -msgstr "FPS'i PiÅŸir:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Optimizer" -msgstr "İyileÅŸtirici" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Linear Error" -msgstr "En üst DoÄŸrusal Sorun" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angular Error" -msgstr "En üst Açısal Sorun" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angle" -msgstr "En üst Açı" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Clips" -msgstr "Parçalar" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Start(s)" -msgstr "BaÅŸlangıç(lar)" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "End(s)" -msgstr "Son(lar)" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Loop" -msgstr "Döngü" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Filters" -msgstr "Süzgeçler" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source path is empty." -msgstr "Kaynak yol boÅŸ." - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't load post-import script." -msgstr "İçe aktarma sonrası betik dizeci yüklenemedi." - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Invalid/broken script for post-import." -msgstr "İçe aktarma sonrası için geçersiz/bozuk betik dizeci." - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Error importing scene." -msgstr "İçe aktarırken sorun oluÅŸtu." - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import 3D Scene" -msgstr "3B Sahneyi İçe Aktar" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source Scene:" -msgstr "Kaynak Sahne:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Same as Target Scene" -msgstr "Hedef Sahne ile Aynı" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Shared" -msgstr "Paylaşılan" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Target Texture Folder:" -msgstr "Amaçlanan Doku Dizini:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Post-Process Script:" -msgstr "İşlem Sonrası Betik Dizeci:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Custom Root Node Type:" -msgstr "Özel Kök Düğüm Türü:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Auto" -msgstr "KendiliÄŸinden" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Root Node Name:" -msgstr "Kök Düğüm adı:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "The Following Files are Missing:" -msgstr "AÅŸağıdaki Dizeçler Eksik:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Anyway" -msgstr "Yine de İçe Aktar" - -#: editor/io_plugins/editor_scene_import_plugin.cpp scene/gui/dialogs.cpp -msgid "Cancel" -msgstr "Vazgeç" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import & Open" -msgstr "İçe Aktar & Aç" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Edited scene has not been saved, open imported scene anyway?" -msgstr "Düzenlenen sahne kaydedilmedi, yine de içe aktarılan sahne açılsın mı?" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Image:" -msgstr "Bedizi İçe Aktar:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Can't import a file over itself:" -msgstr "Bir dizeç kendisi üzerine içe aktaramıyor:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't localize path: %s (already local)" -msgstr "Yol yerelleÅŸtirilemedi: %s (zaten yerel)" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "3D Scene Animation" -msgstr "3B Sahne Canlandırması" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Uncompressed" -msgstr "Sıkıştırılmamış" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossless (PNG)" -msgstr "Kayıpsız Sıkıştırma (PNG)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossy (WebP)" -msgstr "Kayıplı Sıkıştırma (WebP)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress (VRAM)" -msgstr "Sıkıştır (VRAM)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Format" -msgstr "Doku Biçemi" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Compression Quality (WebP):" -msgstr "Doku Sıkıştırma NiteliÄŸi (WebP):" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Options" -msgstr "Doku Seçenekleri" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Please specify some files!" -msgstr "Lütfen bazı dizeçleri belirtin!" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "At least one file needed for Atlas." -msgstr "Atlas için en az bir dizeç gerekli." - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Error importing:" -msgstr "İçe aktarırken sorun:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Only one file is required for large texture." -msgstr "Büyük doku için yalnızca bir dizeç gereklidir." - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Max Texture Size:" -msgstr "En üst Doku Boyutu:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for Atlas (2D)" -msgstr "Dokuları Atlas(2B) için içe aktar" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cell Size:" -msgstr "Odacık Boyutu:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Large Texture" -msgstr "GeniÅŸ Doku" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Textures (2D)" -msgstr "Büyük Boyutlu(2D) Dokuları İçe Aktar" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture" -msgstr "Kaynak Doku" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Base Atlas Texture" -msgstr "Temel Atlas Doku" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s)" -msgstr "Kaynak Doku(lar)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 2D" -msgstr "2B için Dokuları İçe Aktar" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 3D" -msgstr "3B için Dokuları İçe Aktar" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures" -msgstr "Dokuları İçe Aktar" +msgid "Insert Point" +msgstr "Girdileme" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "2D Texture" -msgstr "2B Doku" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly (Remove Point)" +msgstr "Çokluyu Düzenleyin (Noktayı Silin)" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "3D Texture" -msgstr "3B Doku" +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Remove Poly And Point" +msgstr "Çokluyu ve Noktayı Kaldır" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Atlas Texture" -msgstr "Atlas Doku" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create a new polygon from scratch." +msgstr "Sıfırdan yeni bir çokgen oluÅŸturun." -#: editor/io_plugins/editor_texture_import_plugin.cpp +#: editor/plugins/abstract_polygon_2d_editor.cpp msgid "" -"NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files to " -"the project." +"Edit existing polygon:\n" +"LMB: Move Point.\n" +"Ctrl+LMB: Split Segment.\n" +"RMB: Erase Point." msgstr "" -"UYARI: 2B dokuların içe aktarılması zorunlu deÄŸildir. Png / jpg dizeçlerini " -"tasarıya tıpkılamanız yeterlidir." - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Crop empty space." -msgstr "BoÅŸ alanı kırp." - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture" -msgstr "Doku" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Texture" -msgstr "Büyük Dokuyu İçe Aktar" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Load Source Image" -msgstr "Kaynak Bedizi Yükle" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Slicing" -msgstr "Dilimleme" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Inserting" -msgstr "Girdileme" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Saving" -msgstr "Kaydediyor" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save large texture:" -msgstr "Büyük doku kaydedilemedi:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Build Atlas For:" -msgstr "Atlası Åžunun için OluÅŸtur:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Loading Image:" -msgstr "Bediz Yükleniyor:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't load image:" -msgstr "Bediz yüklenemedi:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Converting Images" -msgstr "Bedizleri Dönüştürüyor" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cropping Images" -msgstr "Bedizleri Kırpıyor" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Blitting Images" -msgstr "Bedizleri Blitle" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save atlas image:" -msgstr "Atlas bedizi kaydedilemedi:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save converted texture:" -msgstr "Dönüştürülmüş doku kaydedilemedi:" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid source!" -msgstr "Geçersiz kaynak!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid translation source!" -msgstr "Geçersiz çeviri kaynağı!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Column" -msgstr "Dikeç" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/script_create_dialog.cpp -msgid "Language" -msgstr "Dil" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No items to import!" -msgstr "Alınacak öğe yok!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No target path!" -msgstr "Amaçlanan yol yok!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translations" -msgstr "Çevirileri İçe Aktar" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Couldn't import!" -msgstr "Alınamadı!" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translation" -msgstr "Çeviriyi İçe Aktar" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Source CSV:" -msgstr "Kaynak CSV:" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Ignore First Row" -msgstr "İlk Sırayı Yoksay" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Compress" -msgstr "Sıkıştır" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -#, fuzzy -msgid "Add to Project (project.godot)" -msgstr "Tasarıya Ekle (engine.cfg)" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Languages:" -msgstr "Dilleri İçe Aktar:" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Translation" -msgstr "Çeviri" - -#: editor/multi_node_edit.cpp -msgid "MultiNode Set" -msgstr "MultiNode Kur" - -#: editor/node_dock.cpp -msgid "Groups" -msgstr "Öbekler" - -#: editor/node_dock.cpp -msgid "Select a Node to edit Signals and Groups." -msgstr "İşaretleri ve Öbekleri düzenlemek için bir Düğüm seçin." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Toggle Autoplay" @@ -3511,7 +2930,6 @@ msgstr "Canlandırma Adı:" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp #: editor/script_create_dialog.cpp msgid "Error!" @@ -3622,10 +3040,6 @@ msgid "Delete Input" msgstr "GiriÅŸi Sil" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Rename" -msgstr "Yeniden Adlandır" - -#: editor/plugins/animation_tree_editor_plugin.cpp msgid "Animation tree is valid." msgstr "Canlandırma aÄŸacı geçerlidir." @@ -3681,64 +3095,185 @@ msgstr "Düğüm Süzgeçlerini Düzenle" msgid "Filters.." msgstr "Süzgeçler..." -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing %d Triangles:" -msgstr "%d Üçgenlerini Ayrıştırma:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Free" +msgstr "Özgür" -#: editor/plugins/baked_light_baker.cpp -msgid "Triangle #" -msgstr "Üçgen #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Contents:" +msgstr "İçerikler:" -#: editor/plugins/baked_light_baker.cpp -msgid "Light Baker Setup:" -msgstr "Işık PiÅŸirici Kurulumu:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "View Files" +msgstr "Dosyaları Görüntüle" -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing Geometry" -msgstr "Uzambilgisini Ayrıştırıyor" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve hostname:" +msgstr "Ana makine adı çözümlenemedi:" -#: editor/plugins/baked_light_baker.cpp -msgid "Fixing Lights" -msgstr "Işıkları Sabitliyor" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve." +msgstr "Çözümlenemedi." -#: editor/plugins/baked_light_baker.cpp -msgid "Making BVH" -msgstr "BVH Yapıyor" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connection error, please try again." +msgstr "BaÄŸlantı hatası, lütfen tekrar deneyiniz." -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Light Octree" -msgstr "Işık SekaÄŸacı OluÅŸturuyor" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't connect." +msgstr "BaÄŸlanamadı." -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Octree Texture" -msgstr "SekaÄŸaç Dokusu OluÅŸturuyor" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't connect to host:" +msgstr "Ana makineye baÄŸlanılamadı:" -#: editor/plugins/baked_light_baker.cpp -msgid "Transfer to Lightmaps:" -msgstr "Işık Haritalarına Aktar:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response from host:" +msgstr "Ana makineden cevap yok:" -#: editor/plugins/baked_light_baker.cpp -msgid "Allocating Texture #" -msgstr "Doku Paylaşımı #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response." +msgstr "Cevap yok." -#: editor/plugins/baked_light_baker.cpp -msgid "Baking Triangle #" -msgstr "PiÅŸirme Üçgeni #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, return code:" +msgstr "İstem baÅŸarısız, dönen kod:" -#: editor/plugins/baked_light_baker.cpp -msgid "Post-Processing Texture #" -msgstr "İşleme-Sonrası Dokusu #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Req. Failed." +msgstr "İstem BaÅŸarısız." -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Bake!" -msgstr "PiÅŸir!" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, too many redirects" +msgstr "İstem BaÅŸarısız, çok fazla yönlendirme" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Redirect Loop." +msgstr "Yönlendirme Döngüsü." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed:" +msgstr "BaÅŸarısız:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Bad download hash, assuming file has been tampered with." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Expected:" +msgstr "Beklenen:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Got:" +msgstr "Alınan:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed sha256 hash check" +msgstr "BaÅŸarısız sha256 hash sınaması" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Asset Download Error:" +msgstr "Nesne İndirme Hatası:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Fetching:" +msgstr "Alınıyor:" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Resolving.." +msgstr "Kaydediliyor..." + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Connecting.." +msgstr "BaÄŸlan..." + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Requesting.." +msgstr "Deneme" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Error making request" +msgstr "Kaynak kaydedilirken sorun!" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Idle" +msgstr "BoÅŸta" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Retry" +msgstr "Tekrarla" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download Error" +msgstr "İndirme Hatası" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download for this asset is already in progress!" +msgstr "Bu nesne için zaten sürdürülen bir indirme var!" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "first" +msgstr "ilk" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "prev" +msgstr "önceki" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "next" +msgstr "sonraki" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "last" +msgstr "son" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "All" +msgstr "Hepsi" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Plugins" +msgstr "Eklentiler" -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Reset the lightmap octree baking process (start over)." -msgstr "Işık haritası sekaÄŸacı piÅŸirme iÅŸlemini sıfırlayın (baÅŸtan baÅŸlayın)." +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Sort:" +msgstr "Sırala:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Reverse" +msgstr "Tersi" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Category:" +msgstr "Katman:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Site:" +msgstr "Yer:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Support.." +msgstr "Destek..." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Official" +msgstr "Resmi" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Testing" +msgstr "Deneme" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Assets ZIP File" +msgstr "Varlıkların ZIP Dizeci" #: editor/plugins/camera_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp msgid "Preview" msgstr "Önizleme" @@ -3781,12 +3316,18 @@ msgid "Edit CanvasItem" msgstr "CanvasItem Düzenle" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Change Anchors" +#, fuzzy +msgid "Anchors only" +msgstr "Çapa" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Change Anchors and Margins" msgstr "Çapaları DeÄŸiÅŸtir" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom (%):" -msgstr "YaklaÅŸ (%):" +msgid "Change Anchors" +msgstr "Çapaları DeÄŸiÅŸtir" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Paste Pose" @@ -3840,60 +3381,78 @@ msgid "Pan Mode" msgstr "Kaydırma Biçimi" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Lock the selected object in place (can't be moved)." -msgstr "Seçilen nesneyi yerine kilitleyin (taşınamaz)." +#, fuzzy +msgid "Toggles snapping" +msgstr "Kesme Noktası Aç/Kapat" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Unlock the selected object (can be moved)." -msgstr "Seçilen nesnenin kilidini açın (taşınabilir)." +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "Yapışma Kullan" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Makes sure the object's children are not selectable." -msgstr "Nesnenin çocuÄŸunun seçilemez olduÄŸundan kuÅŸkusuz olur." +#, fuzzy +msgid "Snapping options" +msgstr "Canlandırma Seçenekleri" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Restores the object's children's ability to be selected." -msgstr "Nesnenin çocuÄŸunun seçilebilme yeteneÄŸini geri kazandırır." +#, fuzzy +msgid "Snap to grid" +msgstr "Yapışma Biçimi:" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp -#: editor/project_settings_editor.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Edit" -msgstr "Düzenle" +msgid "Use Rotation Snap" +msgstr "Döndürme Yapışması Kullan" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" -msgstr "Yapışma Kullan" +#, fuzzy +msgid "Configure Snap..." +msgstr "Yapışmayı Yapılandır.." #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" -msgstr "Izgarayı Göster" +msgid "Snap Relative" +msgstr "Göreceli Yapış" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Rotation Snap" -msgstr "Döndürme Yapışması Kullan" +msgid "Use Pixel Snap" +msgstr "Nokta Yapışması Kullan" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap Relative" -msgstr "Göreceli Yapış" +msgid "Smart snapping" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "Yapışmayı Yapılandır.." +#, fuzzy +msgid "Snap to parent" +msgstr "Ataya geniÅŸletin" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Pixel Snap" -msgstr "Nokta Yapışması Kullan" +msgid "Snap to node anchor" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to node sides" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to other nodes" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Lock the selected object in place (can't be moved)." +msgstr "Seçilen nesneyi yerine kilitleyin (taşınamaz)." + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Unlock the selected object (can be moved)." +msgstr "Seçilen nesnenin kilidini açın (taşınabilir)." #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Skeleton.." -msgstr "İskelet.." +msgid "Makes sure the object's children are not selectable." +msgstr "Nesnenin çocuÄŸunun seçilemez olduÄŸundan kuÅŸkusuz olur." + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Restores the object's children's ability to be selected." +msgstr "Nesnenin çocuÄŸunun seçilebilme yeteneÄŸini geri kazandırır." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Make Bones" @@ -3921,12 +3480,19 @@ msgid "View" msgstr "Görüş" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Reset" -msgstr "YakınlaÅŸmayı Sıfırla" +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "Izgarayı Göster" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show helpers" +msgstr "Kemikleri Göster" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Set.." -msgstr "YakınlaÅŸmayı Ayarla.." +#, fuzzy +msgid "Show rulers" +msgstr "Kemikleri Göster" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -3937,8 +3503,9 @@ msgid "Frame Selection" msgstr "Kafes Seçimi" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Anchor" -msgstr "Çapa" +#, fuzzy +msgid "Layout" +msgstr "Tasarımı Kaydet" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Keys" @@ -3961,12 +3528,21 @@ msgid "Clear Pose" msgstr "DuruÅŸu Temizle" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Set a Value" -msgstr "Bir DeÄŸer Ata" +msgid "Drag pivot from mouse position" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Set pivot at mouse position" +msgstr "EÄŸri Çıkış Konumunu Ayarla" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Multiply grid step by 2" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap (Pixels):" -msgstr "Yapış (Noktalara):" +msgid "Divide grid step by 2" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Add %s" @@ -3976,23 +3552,28 @@ msgstr "Ekle %s" msgid "Adding %s..." msgstr "Ekliyor %s.." -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Create Node" msgstr "Düğüm OluÅŸtur" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Error instancing scene from %s" msgstr "%s sahne örnekleme sorunu" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "OK :(" msgstr "Tamam :(" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "No parent to instance a child at." msgstr "ÇocuÄŸun örnek alacağı bir ata yok." -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "This operation requires a single selected node." msgstr "Bu iÅŸlem, seçilmiÅŸ tek bir düğüm gerektirir." @@ -4008,45 +3589,6 @@ msgstr "" "Sürükle & bırak + Shift: KardeÅŸ olarak düğüm ekle\n" "Sürükle & bırak + Alt: Düğüm türünü deÄŸiÅŸtir" -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Create Poly" -msgstr "Çoklu OluÅŸturun" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly" -msgstr "Çokluyu Düzenleyin" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly (Remove Point)" -msgstr "Çokluyu Düzenleyin (Noktayı Silin)" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Create a new polygon from scratch." -msgstr "Sıfırdan yeni bir çokgen oluÅŸturun." - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -msgid "" -"Edit existing polygon:\n" -"LMB: Move Point.\n" -"Ctrl+LMB: Split Segment.\n" -"RMB: Erase Point." -msgstr "" - #: editor/plugins/collision_polygon_editor_plugin.cpp msgid "Create Poly3D" msgstr "Çoklu3B OluÅŸtur" @@ -4056,14 +3598,6 @@ msgid "Set Handle" msgstr "Tutamacı Ayarla" #: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Creating Mesh Library" -msgstr "Örüntü Betikevi OluÅŸtur" - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Thumbnail.." -msgstr "Küçük Bediz.." - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Remove item %d?" msgstr "%d öğe kaldırılsın mı?" @@ -4086,6 +3620,28 @@ msgid "Update from Scene" msgstr "Sahneden Güncelle" #: editor/plugins/curve_editor_plugin.cpp +msgid "Flat0" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Flat1" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +#, fuzzy +msgid "Ease in" +msgstr "Açılma" + +#: editor/plugins/curve_editor_plugin.cpp +#, fuzzy +msgid "Ease out" +msgstr "Kararma" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Smoothstep" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp #, fuzzy msgid "Modify Curve Point" msgstr "EÄŸri Haritasını DeÄŸiÅŸtir" @@ -4170,22 +3726,18 @@ msgid "Create Occluder Polygon" msgstr "Engelleyici Çokgeni OluÅŸtur" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Edit existing polygon:" msgstr "Var olan çokgeni düzenleyin:" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "LMB: Move Point." msgstr "LMB: Taşıma Noktası." #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Ctrl+LMB: Split Segment." msgstr "Ctrl + LMB: Parçayı Böl." #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "RMB: Erase Point." msgstr "RMB: Noktayı Sil." @@ -4290,6 +3842,10 @@ msgid "Create Outline" msgstr "Anahat OluÅŸtur" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh" +msgstr "Örüntü" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Body" msgstr "Üçlü Örüntü DuraÄŸan Gövdesi OluÅŸtur" @@ -4417,14 +3973,83 @@ msgstr "Rastgele Ölçek:" msgid "Populate" msgstr "Doldur" +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Bake!" +msgstr "PiÅŸir!" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +#, fuzzy +msgid "Bake the navigation mesh.\n" +msgstr "Yönlendirici Örüntüsü OluÅŸtur" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +#, fuzzy +msgid "Clear the navigation mesh." +msgstr "Yönlendirici Örüntüsü OluÅŸtur" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Setting up Configuration..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Calculating grid size..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Creating heightfield..." +msgstr "Işık SekaÄŸacı OluÅŸturuyor" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Marking walkable triangles..." +msgstr "Çevirilebilir Dizeler.." + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Constructing compact heightfield..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Eroding walkable area..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Partioning..." +msgstr "Uyarı" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Creating contours..." +msgstr "SekaÄŸaç Dokusu OluÅŸturuyor" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Creating polymesh..." +msgstr "Anahat Örüntüsü OluÅŸtur.." + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Converting to native navigation mesh..." +msgstr "Yönlendirici Örüntüsü OluÅŸtur" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Navigation Mesh Generator Setup:" +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Parsing Geometry..." +msgstr "Uzambilgisini Ayrıştırıyor" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Done!" +msgstr "" + #: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Create Navigation Polygon" msgstr "Yönlendirici Çokgeni OluÅŸtur" -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Remove Poly And Point" -msgstr "Çokluyu ve Noktayı Kaldır" - #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Clear Emission Mask" msgstr "Yayma Örtecini Temizle" @@ -4610,15 +4235,18 @@ msgid "Curve Point #" msgstr "EÄŸrisel Nokta #" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Point Pos" +#, fuzzy +msgid "Set Curve Point Position" msgstr "EÄŸri Noktası Konumu Ayarla" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve In Pos" +#, fuzzy +msgid "Set Curve In Position" msgstr "EÄŸriyi Konumda Ayarla" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Out Pos" +#, fuzzy +msgid "Set Curve Out Position" msgstr "EÄŸri Çıkış Konumunu Ayarla" #: editor/plugins/path_editor_plugin.cpp @@ -4680,6 +4308,14 @@ msgid "Scale Polygon" msgstr "Çokgeni Ölçekle" #: editor/plugins/polygon_2d_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit" +msgstr "Düzenle" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon->UV" msgstr "Çokgen->UV" @@ -4734,63 +4370,10 @@ msgstr "Kaynak Yükle" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "Yapıştır" -#: editor/plugins/rich_text_editor_plugin.cpp -msgid "Parse BBCode" -msgstr "BBCode'u Ayrıştır" - -#: editor/plugins/sample_editor_plugin.cpp -msgid "Length:" -msgstr "Uzunluk:" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Open Sample File(s)" -msgstr "Örnek Dizeçleri Aç" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "ERROR: Couldn't load sample!" -msgstr "SORUN: Örnek yüklenemedi!" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Add Sample" -msgstr "Örnek Ekle" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Rename Sample" -msgstr "ÖrneÄŸi Yeniden Addlandır" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Delete Sample" -msgstr "ÖrneÄŸi Sil" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "16 Bits" -msgstr "16 bit" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "8 Bits" -msgstr "8 Bit" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Stereo" -msgstr "Çiftli" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Mono" -msgstr "Tekli" - -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/script_editor_debugger.cpp -msgid "Format" -msgstr "Biçem" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Pitch" -msgstr "Perde" - #: editor/plugins/script_editor_plugin.cpp #, fuzzy msgid "Clear Recent Files" @@ -4882,6 +4465,10 @@ msgstr "Belgeleri Kapat" msgid "Close All" msgstr "Tümünü Kapat" +#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp +msgid "Run" +msgstr "Çalıştır" + #: editor/plugins/script_editor_plugin.cpp #, fuzzy msgid "Toggle Scripts Panel" @@ -4925,18 +4512,6 @@ msgid "Debug with external editor" msgstr "Düzenleyicide Aç" #: editor/plugins/script_editor_plugin.cpp -msgid "Window" -msgstr "Pencere" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Left" -msgstr "Sola Taşı" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Right" -msgstr "SaÄŸa Taşı" - -#: editor/plugins/script_editor_plugin.cpp #, fuzzy msgid "Open Godot online documentation" msgstr "BaÅŸvuru belgelerinde arama yap." @@ -5026,7 +4601,7 @@ msgstr "Kes" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Copy" msgstr "Tıpkıla" @@ -5292,10 +4867,6 @@ msgid "View Plane Transform." msgstr "Düzlem Dönüşümünü Görüntüle." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Scaling to %s%%." -msgstr "Åžuna %s%% Ölçeklendiriliyor." - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." msgstr "%s Düzey Dönüyor." @@ -5312,10 +4883,6 @@ msgid "Top View." msgstr "Üstten Görünüm." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Top" -msgstr "Üst" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "Arkadan Görünüm." @@ -5561,6 +5128,10 @@ msgid "Transform" msgstr "Dönüşüm" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Configure Snap.." +msgstr "Yapışmayı Yapılandır.." + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Local Coords" msgstr "Yerel Konaçlar" @@ -5706,6 +5277,10 @@ msgid "Speed (FPS):" msgstr "Hız (FPS):" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Loop" +msgstr "Döngü" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animation Frames" msgstr "Canlandırma Çerçeveleri" @@ -5718,12 +5293,14 @@ msgid "Insert Empty (After)" msgstr "BoÅŸ Ekle (Sonra)" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Up" -msgstr "Yukarı" +#, fuzzy +msgid "Move (Before)" +msgstr "Düğümleri Kaldır" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Down" -msgstr "AÅŸağı" +#, fuzzy +msgid "Move (After)" +msgstr "Sola Taşı" #: editor/plugins/style_box_editor_plugin.cpp msgid "StyleBox Preview:" @@ -5887,6 +5464,10 @@ msgid "Style" msgstr "Yoldam" #: editor/plugins/theme_editor_plugin.cpp +msgid "Font" +msgstr "Yazı Tipi" + +#: editor/plugins/theme_editor_plugin.cpp msgid "Color" msgstr "Renk" @@ -5938,8 +5519,9 @@ msgid "Mirror Y" msgstr "Y'ye Aynala" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Bucket" -msgstr "Kova" +#, fuzzy +msgid "Paint Tile" +msgstr "TileMap'i Boya" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Pick Tile" @@ -6005,6 +5587,10 @@ msgid "Delete preset '%s'?" msgstr "Seçili dizeçleri sil?" #: editor/project_export.cpp +msgid "Export templates for this platform are missing/corrupted: " +msgstr "" + +#: editor/project_export.cpp #, fuzzy msgid "Presets" msgstr "Ön ayar.." @@ -6090,34 +5676,62 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +msgid "Export templates for this platform are missing/corrupted:" +msgstr "" + +#: editor/project_export.cpp #, fuzzy msgid "Export With Debug" msgstr "Döşenti Dizi Dışa Aktar" #: editor/project_manager.cpp -msgid "Invalid project path, the path must exist!" -msgstr "Geçersiz tasarı yolu, yolun var olması gerekir!" +#, fuzzy +msgid "The path does not exists." +msgstr "Dizeç yok." #: editor/project_manager.cpp #, fuzzy -msgid "Invalid project path, project.godot must not exist." -msgstr "Geçersiz tasarı yolu, engine.cfg var olmaması gerekir." +msgid "Please choose a 'project.godot' file." +msgstr "Lütfen tasarı dizininin dışına aktarın!" #: editor/project_manager.cpp -#, fuzzy -msgid "Invalid project path, project.godot must exist." -msgstr "Geçersiz tasarı yolu, engine.cfg var olması gerekir." +msgid "" +"Your project will be created in a non empty folder (you might want to create " +"a new folder)." +msgstr "" + +#: editor/project_manager.cpp +msgid "Please choose a folder that does not contain a 'project.godot' file." +msgstr "" #: editor/project_manager.cpp msgid "Imported Project" msgstr "İçe Aktarılan Tasarı" #: editor/project_manager.cpp +msgid " " +msgstr "" + +#: editor/project_manager.cpp +msgid "It would be a good idea to name your project." +msgstr "" + +#: editor/project_manager.cpp msgid "Invalid project path (changed anything?)." msgstr "Geçersiz tasarı yolu (bir ÅŸey deÄŸiÅŸti mi?)." #: editor/project_manager.cpp #, fuzzy +msgid "Couldn't get project.godot in project path." +msgstr "engine.cfg tasarı yolunda oluÅŸturulamadı." + +#: editor/project_manager.cpp +#, fuzzy +msgid "Couldn't edit project.godot in project path." +msgstr "engine.cfg tasarı yolunda oluÅŸturulamadı." + +#: editor/project_manager.cpp +#, fuzzy msgid "Couldn't create project.godot in project path." msgstr "engine.cfg tasarı yolunda oluÅŸturulamadı." @@ -6126,38 +5740,49 @@ msgid "The following files failed extraction from package:" msgstr "AÅŸağıdaki dizeçlerin, çıkından ayıklanma iÅŸlemi baÅŸarısız oldu:" #: editor/project_manager.cpp +#, fuzzy +msgid "Rename Project" +msgstr "Adsız Tasarı" + +#: editor/project_manager.cpp +#, fuzzy +msgid "Couldn't get project.godot in the project path." +msgstr "engine.cfg tasarı yolunda oluÅŸturulamadı." + +#: editor/project_manager.cpp +msgid "New Game Project" +msgstr "Yeni Oyun Tasarısı" + +#: editor/project_manager.cpp msgid "Import Existing Project" msgstr "Var olan Tasarıyı İçe Aktar" #: editor/project_manager.cpp -msgid "Project Path (Must Exist):" -msgstr "Tasarı Yolu (Var Olması Gerekir):" +msgid "Create New Project" +msgstr "Yeni Tasarı OluÅŸtur" + +#: editor/project_manager.cpp +msgid "Install Project:" +msgstr "Tasarıyı Kur:" #: editor/project_manager.cpp msgid "Project Name:" msgstr "Tasarı Adı:" #: editor/project_manager.cpp -msgid "Create New Project" -msgstr "Yeni Tasarı OluÅŸtur" +#, fuzzy +msgid "Create folder" +msgstr "Dizin OluÅŸtur" #: editor/project_manager.cpp msgid "Project Path:" msgstr "Tasarı Yolu:" #: editor/project_manager.cpp -msgid "Install Project:" -msgstr "Tasarıyı Kur:" - -#: editor/project_manager.cpp msgid "Browse" msgstr "Gözat" #: editor/project_manager.cpp -msgid "New Game Project" -msgstr "Yeni Oyun Tasarısı" - -#: editor/project_manager.cpp msgid "That's a BINGO!" msgstr "YaÅŸa BE!" @@ -6166,6 +5791,11 @@ msgid "Unnamed Project" msgstr "Adsız Tasarı" #: editor/project_manager.cpp +#, fuzzy +msgid "Can't open project" +msgstr "BaÄŸlanamadı." + +#: editor/project_manager.cpp msgid "Are you sure to open more than one project?" msgstr "Birden fazla tasarı açmakta kararlı mısınız?" @@ -6208,10 +5838,6 @@ msgid "Project List" msgstr "Tasarı Dizelgesi" #: editor/project_manager.cpp -msgid "Run" -msgstr "Çalıştır" - -#: editor/project_manager.cpp msgid "Scan" msgstr "Tara" @@ -6270,17 +5896,14 @@ msgid "Add Input Action Event" msgstr "GiriÅŸ İşlem Olayı Ekle" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Meta+" msgstr "Meta+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Shift+" msgstr "Shift+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Alt+" msgstr "Alt+" @@ -6342,7 +5965,7 @@ msgstr "DeÄŸiÅŸtir" msgid "Joypad Axis Index:" msgstr "OyunçubuÄŸu Ekseni Dizini:" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Axis" msgstr "Eksen" @@ -6364,31 +5987,31 @@ msgstr "GiriÅŸ Eylemi Olayını Sil" msgid "Add Event" msgstr "BoÅŸ Ekle" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Device" msgstr "Aygıt" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Button" msgstr "Düğme" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Left Button." msgstr "Sol Düğme." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Right Button." msgstr "SaÄŸ Düğme." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Middle Button." msgstr "Orta Düğme." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Up." msgstr "Tekerlek Yukarı." -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Down." msgstr "Tekerlek AÅŸağı." @@ -6398,7 +6021,7 @@ msgid "Add Global Property" msgstr "Alıcı Özellik Ekle" #: editor/project_settings_editor.cpp -msgid "Select an setting item first!" +msgid "Select a setting item first!" msgstr "" #: editor/project_settings_editor.cpp @@ -6417,6 +6040,16 @@ msgid "Delete Item" msgstr "GiriÅŸi Sil" #: editor/project_settings_editor.cpp +#, fuzzy +msgid "Can't contain '/' or ':'" +msgstr "Ana makineye baÄŸlanılamadı:" + +#: editor/project_settings_editor.cpp +#, fuzzy +msgid "Already existing" +msgstr "Sürdürmeyi Aç/Kapat" + +#: editor/project_settings_editor.cpp msgid "Error saving settings." msgstr "Ayarları kaydetme sorunu." @@ -6569,10 +6202,20 @@ msgstr "Yeni Betik" #: editor/property_editor.cpp #, fuzzy +msgid "Make Unique" +msgstr "Kemik Yap" + +#: editor/property_editor.cpp +#, fuzzy msgid "Show in File System" msgstr "DizeçDüzeni" #: editor/property_editor.cpp +#, fuzzy +msgid "Convert To %s" +msgstr "Åžuna Dönüştür.." + +#: editor/property_editor.cpp msgid "Error loading file: Not a resource!" msgstr "Dizeç yüklenirken sorun oluÅŸtu: Bir kaynak deÄŸil!" @@ -6611,6 +6254,11 @@ msgid "Select Property" msgstr "Nitelik Seç" #: editor/property_selector.cpp +#, fuzzy +msgid "Select Virtual Method" +msgstr "Yöntem Seç" + +#: editor/property_selector.cpp msgid "Select Method" msgstr "Yöntem Seç" @@ -6638,26 +6286,6 @@ msgstr "Bütünsel Dönüşümü Tut" msgid "Reparent" msgstr "Yeniden Ata Yap" -#: editor/resources_dock.cpp -msgid "Create New Resource" -msgstr "Yeni Kaynak OluÅŸtur" - -#: editor/resources_dock.cpp -msgid "Open Resource" -msgstr "Kaynak Aç" - -#: editor/resources_dock.cpp -msgid "Save Resource" -msgstr "Kaynağı Kaydet" - -#: editor/resources_dock.cpp -msgid "Resource Tools" -msgstr "Kaynak Araçları" - -#: editor/resources_dock.cpp -msgid "Make Local" -msgstr "YerelleÅŸtir" - #: editor/run_settings_dialog.cpp msgid "Run Mode:" msgstr "Çalışma Biçimi:" @@ -6788,14 +6416,6 @@ msgid "Sub-Resources:" msgstr "Kaynaklar:" #: editor/scene_tree_dock.cpp -msgid "Edit Groups" -msgstr "Öbekleri Düzenle" - -#: editor/scene_tree_dock.cpp -msgid "Edit Connections" -msgstr "BaÄŸlantıları Düzenle" - -#: editor/scene_tree_dock.cpp msgid "Clear Inheritance" msgstr "Kalıtı Temizle" @@ -6984,6 +6604,15 @@ msgid "Invalid base path" msgstr "Geçersiz üst yol" #: editor/script_create_dialog.cpp +msgid "Directory of the same name exists" +msgstr "" + +#: editor/script_create_dialog.cpp +#, fuzzy +msgid "File exists, will be reused" +msgstr "Dizeç var. Üzerine Yazılsın mı?" + +#: editor/script_create_dialog.cpp msgid "Invalid extension" msgstr "Geçersiz uzantı" @@ -7029,6 +6658,10 @@ msgid "Load existing script file" msgstr "Var olan betiÄŸi yükle" #: editor/script_create_dialog.cpp +msgid "Language" +msgstr "Dil" + +#: editor/script_create_dialog.cpp #, fuzzy msgid "Inherits" msgstr "Kalıtçılar:" @@ -7073,6 +6706,10 @@ msgid "Function:" msgstr "İşlev:" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Errors" msgstr "Sorunlar" @@ -7153,6 +6790,10 @@ msgid "Type" msgstr "Tür" #: editor/script_editor_debugger.cpp +msgid "Format" +msgstr "Biçem" + +#: editor/script_editor_debugger.cpp msgid "Usage" msgstr "Kullanım" @@ -7228,13 +6869,31 @@ msgstr "" msgid "Change Probe Extents" msgstr "DeÅŸme GeniÅŸlemesini DeÄŸiÅŸtir" +#: modules/gdnative/gd_native_library_editor.cpp +#, fuzzy +msgid "Library" +msgstr "MeshLibrary .." + +#: modules/gdnative/gd_native_library_editor.cpp +#, fuzzy +msgid "Status" +msgstr "Durum:" + +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Libraries: " +msgstr "" + +#: modules/gdnative/register_types.cpp +msgid "GDNative" +msgstr "" + #: modules/gdscript/gd_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "" "convert() için geçersiz türde deÄŸiÅŸtirgen, TYPE_* sabitlerini kullanın." -#: modules/gdscript/gd_functions.cpp +#: modules/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "Geçersiz biçem ya da kod çözmek için yetersiz byte sayısı." @@ -7286,10 +6945,6 @@ msgid "GridMap Duplicate Selection" msgstr "Seçimi İkile" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Paint" -msgstr "" - -#: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy msgid "Snap View" msgstr "Üstten Görünüm" @@ -7393,13 +7048,8 @@ msgstr "Yapışma Ayarları" msgid "Pick Distance:" msgstr "Örnek:" -#: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy -msgid "Tiles" -msgstr "Dizeç" - -#: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Areas" +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "Builds" msgstr "" #: modules/visual_script/visual_script.cpp @@ -7610,10 +7260,18 @@ msgid "Return" msgstr "Döndür" #: modules/visual_script/visual_script_editor.cpp +msgid "Call" +msgstr "Çağır" + +#: modules/visual_script/visual_script_editor.cpp msgid "Get" msgstr "Al" #: modules/visual_script/visual_script_editor.cpp +msgid "Script already has function '%s'" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Change Input Value" msgstr "GiriÅŸ Adını DeÄŸiÅŸtir" @@ -8029,6 +7687,12 @@ msgstr "" "AnimatedSprite3D 'nin çerçeveleri görüntülemek için bir SpriteFrames kaynağı " "oluÅŸturulmalı veya 'Çerçeveler' niteliÄŸinde ayarlanmalıdır." +#: scene/3d/vehicle_body.cpp +msgid "" +"VehicleWheel serves to provide a wheel system to a VehicleBody. Please use " +"it as a child of a VehicleBody." +msgstr "" + #: scene/gui/color_picker.cpp #, fuzzy msgid "Raw Mode" @@ -8039,6 +7703,10 @@ msgid "Add current color as a preset" msgstr "" #: scene/gui/dialogs.cpp +msgid "Cancel" +msgstr "Vazgeç" + +#: scene/gui/dialogs.cpp msgid "Alert!" msgstr "Uyarı!" @@ -8046,10 +7714,6 @@ msgstr "Uyarı!" msgid "Please Confirm..." msgstr "Lütfen DoÄŸrulayın..." -#: scene/gui/input_action.cpp -msgid "Ctrl+" -msgstr "Ctrl+" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -8085,6 +7749,618 @@ msgstr "" "bir boyut elde edin. Ya da, onu bir RenderTarget yapın ve iç dokusunu " "görüntülemesi için bir düğüme atayın." +#: scene/resources/dynamic_font.cpp +msgid "Error initializing FreeType." +msgstr "FreeType baÅŸlatılırken sorun oluÅŸtu." + +#: scene/resources/dynamic_font.cpp +msgid "Unknown font format." +msgstr "Bilinmeyen yazı türü." + +#: scene/resources/dynamic_font.cpp +msgid "Error loading font." +msgstr "Yazı türü yüklerken sorun oluÅŸtu." + +#: scene/resources/dynamic_font.cpp +msgid "Invalid font size." +msgstr "Geçersiz yazı türü boyutu." + +#~ msgid "Method List For '%s':" +#~ msgstr "'%s' İçin Yöntem Dizelgesi:" + +#~ msgid "Arguments:" +#~ msgstr "DeÄŸiÅŸtirgenler:" + +#~ msgid "Return:" +#~ msgstr "Döndür:" + +#~ msgid "Added:" +#~ msgstr "Eklenen:" + +#~ msgid "Removed:" +#~ msgstr "Silinen:" + +#~ msgid "Error saving atlas:" +#~ msgstr "Atlas kaydedilirken sorun oluÅŸtu:" + +#~ msgid "Could not save atlas subtexture:" +#~ msgstr "Atlas alt dokusu kaydedilemedi:" + +#~ msgid "Exporting for %s" +#~ msgstr "%s için Dışa Aktarım" + +#~ msgid "Setting Up.." +#~ msgstr "Kurulum..." + +#~ msgid "Error loading scene." +#~ msgstr "Sahne yüklenirken sorun oluÅŸtu." + +#~ msgid "Re-Import" +#~ msgstr "Yeniden İçe Aktar" + +#~ msgid "Please wait for scan to complete." +#~ msgstr "Tarama için bitmesini bekleyin." + +#~ msgid "Current scene must be saved to re-import." +#~ msgstr "Yeniden içe aktarmak için ÅŸu anki sahneyi kaydet." + +#~ msgid "Save & Re-Import" +#~ msgstr "Kaydet & Yeniden İçe Aktar" + +#~ msgid "Re-Importing" +#~ msgstr "Yeniden-İçe Aktarım" + +#~ msgid "Re-Import Changed Resources" +#~ msgstr "DeÄŸiÅŸtirilmiÅŸ Kaynakları Yeniden İçe Aktar" + +#~ msgid "Loading Export Templates" +#~ msgstr "Dışa Aktarım Kalıpları Yükleniyor" + +#, fuzzy +#~ msgid "" +#~ "\n" +#~ "Status: Needs Re-Import" +#~ msgstr "Kaydet & Yeniden İçe Aktar" + +#~ msgid "Same source and destination files, doing nothing." +#~ msgstr "ÖzdeÅŸ kaynak ve varış dizeçleri, hiçbir ÅŸey yapılmıyor." + +#~ msgid "Same source and destination paths, doing nothing." +#~ msgstr "ÖzdeÅŸ kaynak ve varış yolları, hiçbir ÅŸey yapılmıyor." + +#~ msgid "Can't move directories to within themselves." +#~ msgstr "Dizinleri kendi içlerine taşıyamazsınız." + +#, fuzzy +#~ msgid "Error moving file:\n" +#~ msgstr "Bediz yüklenirken sorun oluÅŸtu:" + +#~ msgid "Pick New Name and Location For:" +#~ msgstr "Åžunun için yeni ad ile konum seçin:" + +#~ msgid "No files selected!" +#~ msgstr "Hiçbir Dizeç Seçilmedi!" + +#~ msgid "Info" +#~ msgstr "Bilgi" + +#~ msgid "Re-Import.." +#~ msgstr "Yeniden İçe Aktar.." + +#~ msgid "No bit masks to import!" +#~ msgstr "Alınacak hiç bit örteci yok!" + +#~ msgid "Target path is empty." +#~ msgstr "Amaçlanan dizeç yolu boÅŸ." + +#~ msgid "Target path must be a complete resource path." +#~ msgstr "Amaçlanan yol, tam bir kaynak yolu olmalıdır." + +#~ msgid "Target path must exist." +#~ msgstr "Amaçlanan dizeç yolu var olmalı." + +#~ msgid "Save path is empty!" +#~ msgstr "Kayıt yolu boÅŸ!" + +#~ msgid "Import BitMasks" +#~ msgstr "BitMasks İçe Aktar" + +#~ msgid "Source Texture(s):" +#~ msgstr "Kaynak Doku(lar):" + +#~ msgid "Target Path:" +#~ msgstr "Amaçlanan Dizeç Yolu :" + +#~ msgid "Accept" +#~ msgstr "Kabul" + +#~ msgid "Bit Mask" +#~ msgstr "Bit Örteci" + +#~ msgid "No source font file!" +#~ msgstr "Kaynak yazı türü dizeci yok!" + +#~ msgid "No target font resource!" +#~ msgstr "Amaçlanan yazı türü kaynağı yok!" + +#, fuzzy +#~ msgid "" +#~ "Invalid file extension.\n" +#~ "Please use .font." +#~ msgstr "" +#~ "Geçersiz dizeç uzantısı.\n" +#~ "Lütfen .fnt uzantısını kullanın." + +#~ msgid "Couldn't save font." +#~ msgstr "Yazı türü kaydedilemedi." + +#~ msgid "Source Font:" +#~ msgstr "Yazı Türü Kaynağı:" + +#~ msgid "Source Font Size:" +#~ msgstr "Kaynak Yazı Türü Boyutu:" + +#~ msgid "Dest Resource:" +#~ msgstr "Varış Kaynağı:" + +#~ msgid "The quick brown fox jumps over the lazy dog." +#~ msgstr "Hızlı kahverengi tilki üşengeç köpeÄŸin üstünden atlar." + +#~ msgid "Test:" +#~ msgstr "Deneme:" + +#~ msgid "Options:" +#~ msgstr "Seçenekler:" + +#~ msgid "Font Import" +#~ msgstr "Yazı Türü İçe Aktar" + +#~ msgid "" +#~ "This file is already a Godot font file, please supply a BMFont type file " +#~ "instead." +#~ msgstr "" +#~ "Bu dizeç zaten bir Godot yazı türü dizecidir , lütfen bunun yerine bir " +#~ "BMFont türü dizeci saÄŸlayın." + +#~ msgid "Failed opening as BMFont file." +#~ msgstr "BMFont dizeci olarak açma baÅŸarısız oldu." + +#~ msgid "Invalid font custom source." +#~ msgstr "Geçersiz yazı türü özel kaynağı." + +#~ msgid "No meshes to import!" +#~ msgstr "İçe aktarılacak örüntü yok!" + +#~ msgid "Single Mesh Import" +#~ msgstr "Tekil Örüntü İçe Aktar" + +#~ msgid "Source Mesh(es):" +#~ msgstr "Kaynak Örüntü(leri):" + +#~ msgid "Surface %d" +#~ msgstr "Yüzey %d" + +#~ msgid "No samples to import!" +#~ msgstr "Alınacak örnek yok!" + +#~ msgid "Import Audio Samples" +#~ msgstr "Ses Örneklerini İçe Aktar" + +#~ msgid "Source Sample(s):" +#~ msgstr "Kaynak Örnek(leri):" + +#~ msgid "Audio Sample" +#~ msgstr "Ses ÖrneÄŸi" + +#~ msgid "New Clip" +#~ msgstr "Yeni Parça" + +#~ msgid "Flags" +#~ msgstr "Bayraklar" + +#~ msgid "Bake FPS:" +#~ msgstr "FPS'i PiÅŸir:" + +#~ msgid "Optimizer" +#~ msgstr "İyileÅŸtirici" + +#~ msgid "Max Linear Error" +#~ msgstr "En üst DoÄŸrusal Sorun" + +#~ msgid "Max Angular Error" +#~ msgstr "En üst Açısal Sorun" + +#~ msgid "Max Angle" +#~ msgstr "En üst Açı" + +#~ msgid "Clips" +#~ msgstr "Parçalar" + +#~ msgid "Start(s)" +#~ msgstr "BaÅŸlangıç(lar)" + +#~ msgid "End(s)" +#~ msgstr "Son(lar)" + +#~ msgid "Filters" +#~ msgstr "Süzgeçler" + +#~ msgid "Source path is empty." +#~ msgstr "Kaynak yol boÅŸ." + +#~ msgid "Couldn't load post-import script." +#~ msgstr "İçe aktarma sonrası betik dizeci yüklenemedi." + +#~ msgid "Invalid/broken script for post-import." +#~ msgstr "İçe aktarma sonrası için geçersiz/bozuk betik dizeci." + +#~ msgid "Error importing scene." +#~ msgstr "İçe aktarırken sorun oluÅŸtu." + +#~ msgid "Import 3D Scene" +#~ msgstr "3B Sahneyi İçe Aktar" + +#~ msgid "Source Scene:" +#~ msgstr "Kaynak Sahne:" + +#~ msgid "Same as Target Scene" +#~ msgstr "Hedef Sahne ile Aynı" + +#~ msgid "Shared" +#~ msgstr "Paylaşılan" + +#~ msgid "Target Texture Folder:" +#~ msgstr "Amaçlanan Doku Dizini:" + +#~ msgid "Post-Process Script:" +#~ msgstr "İşlem Sonrası Betik Dizeci:" + +#~ msgid "Custom Root Node Type:" +#~ msgstr "Özel Kök Düğüm Türü:" + +#~ msgid "Auto" +#~ msgstr "KendiliÄŸinden" + +#~ msgid "Root Node Name:" +#~ msgstr "Kök Düğüm adı:" + +#~ msgid "The Following Files are Missing:" +#~ msgstr "AÅŸağıdaki Dizeçler Eksik:" + +#~ msgid "Import Anyway" +#~ msgstr "Yine de İçe Aktar" + +#~ msgid "Import & Open" +#~ msgstr "İçe Aktar & Aç" + +#~ msgid "Edited scene has not been saved, open imported scene anyway?" +#~ msgstr "" +#~ "Düzenlenen sahne kaydedilmedi, yine de içe aktarılan sahne açılsın mı?" + +#~ msgid "Import Image:" +#~ msgstr "Bedizi İçe Aktar:" + +#~ msgid "Couldn't localize path: %s (already local)" +#~ msgstr "Yol yerelleÅŸtirilemedi: %s (zaten yerel)" + +#~ msgid "3D Scene Animation" +#~ msgstr "3B Sahne Canlandırması" + +#~ msgid "Uncompressed" +#~ msgstr "Sıkıştırılmamış" + +#~ msgid "Compress Lossless (PNG)" +#~ msgstr "Kayıpsız Sıkıştırma (PNG)" + +#~ msgid "Compress Lossy (WebP)" +#~ msgstr "Kayıplı Sıkıştırma (WebP)" + +#~ msgid "Compress (VRAM)" +#~ msgstr "Sıkıştır (VRAM)" + +#~ msgid "Texture Format" +#~ msgstr "Doku Biçemi" + +#~ msgid "Texture Compression Quality (WebP):" +#~ msgstr "Doku Sıkıştırma NiteliÄŸi (WebP):" + +#~ msgid "Texture Options" +#~ msgstr "Doku Seçenekleri" + +#~ msgid "Please specify some files!" +#~ msgstr "Lütfen bazı dizeçleri belirtin!" + +#~ msgid "At least one file needed for Atlas." +#~ msgstr "Atlas için en az bir dizeç gerekli." + +#~ msgid "Error importing:" +#~ msgstr "İçe aktarırken sorun:" + +#~ msgid "Only one file is required for large texture." +#~ msgstr "Büyük doku için yalnızca bir dizeç gereklidir." + +#~ msgid "Max Texture Size:" +#~ msgstr "En üst Doku Boyutu:" + +#~ msgid "Import Textures for Atlas (2D)" +#~ msgstr "Dokuları Atlas(2B) için içe aktar" + +#~ msgid "Cell Size:" +#~ msgstr "Odacık Boyutu:" + +#~ msgid "Large Texture" +#~ msgstr "GeniÅŸ Doku" + +#~ msgid "Import Large Textures (2D)" +#~ msgstr "Büyük Boyutlu(2D) Dokuları İçe Aktar" + +#~ msgid "Source Texture" +#~ msgstr "Kaynak Doku" + +#~ msgid "Base Atlas Texture" +#~ msgstr "Temel Atlas Doku" + +#~ msgid "Source Texture(s)" +#~ msgstr "Kaynak Doku(lar)" + +#~ msgid "Import Textures for 2D" +#~ msgstr "2B için Dokuları İçe Aktar" + +#~ msgid "Import Textures for 3D" +#~ msgstr "3B için Dokuları İçe Aktar" + +#~ msgid "Import Textures" +#~ msgstr "Dokuları İçe Aktar" + +#~ msgid "2D Texture" +#~ msgstr "2B Doku" + +#~ msgid "3D Texture" +#~ msgstr "3B Doku" + +#~ msgid "Atlas Texture" +#~ msgstr "Atlas Doku" + +#~ msgid "" +#~ "NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files " +#~ "to the project." +#~ msgstr "" +#~ "UYARI: 2B dokuların içe aktarılması zorunlu deÄŸildir. Png / jpg " +#~ "dizeçlerini tasarıya tıpkılamanız yeterlidir." + +#~ msgid "Crop empty space." +#~ msgstr "BoÅŸ alanı kırp." + +#~ msgid "Texture" +#~ msgstr "Doku" + +#~ msgid "Import Large Texture" +#~ msgstr "Büyük Dokuyu İçe Aktar" + +#~ msgid "Load Source Image" +#~ msgstr "Kaynak Bedizi Yükle" + +#~ msgid "Slicing" +#~ msgstr "Dilimleme" + +#~ msgid "Saving" +#~ msgstr "Kaydediyor" + +#~ msgid "Couldn't save large texture:" +#~ msgstr "Büyük doku kaydedilemedi:" + +#~ msgid "Build Atlas For:" +#~ msgstr "Atlası Åžunun için OluÅŸtur:" + +#~ msgid "Loading Image:" +#~ msgstr "Bediz Yükleniyor:" + +#~ msgid "Couldn't load image:" +#~ msgstr "Bediz yüklenemedi:" + +#~ msgid "Converting Images" +#~ msgstr "Bedizleri Dönüştürüyor" + +#~ msgid "Cropping Images" +#~ msgstr "Bedizleri Kırpıyor" + +#~ msgid "Blitting Images" +#~ msgstr "Bedizleri Blitle" + +#~ msgid "Couldn't save atlas image:" +#~ msgstr "Atlas bedizi kaydedilemedi:" + +#~ msgid "Couldn't save converted texture:" +#~ msgstr "Dönüştürülmüş doku kaydedilemedi:" + +#~ msgid "Invalid source!" +#~ msgstr "Geçersiz kaynak!" + +#~ msgid "Invalid translation source!" +#~ msgstr "Geçersiz çeviri kaynağı!" + +#~ msgid "Column" +#~ msgstr "Dikeç" + +#~ msgid "No items to import!" +#~ msgstr "Alınacak öğe yok!" + +#~ msgid "No target path!" +#~ msgstr "Amaçlanan yol yok!" + +#~ msgid "Import Translations" +#~ msgstr "Çevirileri İçe Aktar" + +#~ msgid "Couldn't import!" +#~ msgstr "Alınamadı!" + +#~ msgid "Import Translation" +#~ msgstr "Çeviriyi İçe Aktar" + +#~ msgid "Source CSV:" +#~ msgstr "Kaynak CSV:" + +#~ msgid "Ignore First Row" +#~ msgstr "İlk Sırayı Yoksay" + +#~ msgid "Compress" +#~ msgstr "Sıkıştır" + +#, fuzzy +#~ msgid "Add to Project (project.godot)" +#~ msgstr "Tasarıya Ekle (engine.cfg)" + +#~ msgid "Import Languages:" +#~ msgstr "Dilleri İçe Aktar:" + +#~ msgid "Translation" +#~ msgstr "Çeviri" + +#~ msgid "Parsing %d Triangles:" +#~ msgstr "%d Üçgenlerini Ayrıştırma:" + +#~ msgid "Triangle #" +#~ msgstr "Üçgen #" + +#~ msgid "Light Baker Setup:" +#~ msgstr "Işık PiÅŸirici Kurulumu:" + +#~ msgid "Fixing Lights" +#~ msgstr "Işıkları Sabitliyor" + +#~ msgid "Making BVH" +#~ msgstr "BVH Yapıyor" + +#~ msgid "Transfer to Lightmaps:" +#~ msgstr "Işık Haritalarına Aktar:" + +#~ msgid "Allocating Texture #" +#~ msgstr "Doku Paylaşımı #" + +#~ msgid "Baking Triangle #" +#~ msgstr "PiÅŸirme Üçgeni #" + +#~ msgid "Post-Processing Texture #" +#~ msgstr "İşleme-Sonrası Dokusu #" + +#~ msgid "Reset the lightmap octree baking process (start over)." +#~ msgstr "" +#~ "Işık haritası sekaÄŸacı piÅŸirme iÅŸlemini sıfırlayın (baÅŸtan baÅŸlayın)." + +#~ msgid "Zoom (%):" +#~ msgstr "YaklaÅŸ (%):" + +#~ msgid "Skeleton.." +#~ msgstr "İskelet.." + +#~ msgid "Zoom Reset" +#~ msgstr "YakınlaÅŸmayı Sıfırla" + +#~ msgid "Zoom Set.." +#~ msgstr "YakınlaÅŸmayı Ayarla.." + +#~ msgid "Set a Value" +#~ msgstr "Bir DeÄŸer Ata" + +#~ msgid "Snap (Pixels):" +#~ msgstr "Yapış (Noktalara):" + +#~ msgid "Parse BBCode" +#~ msgstr "BBCode'u Ayrıştır" + +#~ msgid "Length:" +#~ msgstr "Uzunluk:" + +#~ msgid "Open Sample File(s)" +#~ msgstr "Örnek Dizeçleri Aç" + +#~ msgid "ERROR: Couldn't load sample!" +#~ msgstr "SORUN: Örnek yüklenemedi!" + +#~ msgid "Add Sample" +#~ msgstr "Örnek Ekle" + +#~ msgid "Rename Sample" +#~ msgstr "ÖrneÄŸi Yeniden Addlandır" + +#~ msgid "Delete Sample" +#~ msgstr "ÖrneÄŸi Sil" + +#~ msgid "16 Bits" +#~ msgstr "16 bit" + +#~ msgid "8 Bits" +#~ msgstr "8 Bit" + +#~ msgid "Stereo" +#~ msgstr "Çiftli" + +#~ msgid "Mono" +#~ msgstr "Tekli" + +#~ msgid "Pitch" +#~ msgstr "Perde" + +#~ msgid "Window" +#~ msgstr "Pencere" + +#~ msgid "Move Right" +#~ msgstr "SaÄŸa Taşı" + +#~ msgid "Scaling to %s%%." +#~ msgstr "Åžuna %s%% Ölçeklendiriliyor." + +#~ msgid "Up" +#~ msgstr "Yukarı" + +#~ msgid "Down" +#~ msgstr "AÅŸağı" + +#~ msgid "Bucket" +#~ msgstr "Kova" + +#~ msgid "Invalid project path, the path must exist!" +#~ msgstr "Geçersiz tasarı yolu, yolun var olması gerekir!" + +#, fuzzy +#~ msgid "Invalid project path, project.godot must not exist." +#~ msgstr "Geçersiz tasarı yolu, engine.cfg var olmaması gerekir." + +#, fuzzy +#~ msgid "Invalid project path, project.godot must exist." +#~ msgstr "Geçersiz tasarı yolu, engine.cfg var olması gerekir." + +#~ msgid "Project Path (Must Exist):" +#~ msgstr "Tasarı Yolu (Var Olması Gerekir):" + +#~ msgid "Create New Resource" +#~ msgstr "Yeni Kaynak OluÅŸtur" + +#~ msgid "Open Resource" +#~ msgstr "Kaynak Aç" + +#~ msgid "Save Resource" +#~ msgstr "Kaynağı Kaydet" + +#~ msgid "Resource Tools" +#~ msgstr "Kaynak Araçları" + +#~ msgid "Make Local" +#~ msgstr "YerelleÅŸtir" + +#~ msgid "Edit Groups" +#~ msgstr "Öbekleri Düzenle" + +#~ msgid "Edit Connections" +#~ msgstr "BaÄŸlantıları Düzenle" + +#, fuzzy +#~ msgid "Tiles" +#~ msgstr "Dizeç" + +#~ msgid "Ctrl+" +#~ msgstr "Ctrl+" + #~ msgid "Close scene? (Unsaved changes will be lost)" #~ msgstr "Sahneyi kapatsın mı? (KaydedilmemiÅŸ deÄŸiÅŸiklikler yok olacak)" @@ -8098,9 +8374,6 @@ msgstr "" #~ msgid "Close Goto Prev. Scene" #~ msgstr "Önc. Sahneye Git sekmesini Kapat" -#~ msgid "Expand to Parent" -#~ msgstr "Ataya geniÅŸletin" - #~ msgid "Del" #~ msgstr "Sil" @@ -8264,18 +8537,12 @@ msgstr "" #~ msgid "Save Translatable Strings" #~ msgstr "Çevirilebilir Metinleri Kaydet" -#~ msgid "Translatable Strings.." -#~ msgstr "Çevirilebilir Dizeler.." - #~ msgid "Install Export Templates" #~ msgstr "Dışa Aktarım Kalıplarını Yükle" #~ msgid "Edit Script Options" #~ msgstr "Betik Seçeneklerini Düzenle" -#~ msgid "Please export outside the project folder!" -#~ msgstr "Lütfen tasarı dizininin dışına aktarın!" - #~ msgid "Error exporting project!" #~ msgstr "Tasarı gönderilirken sorun oluÅŸtu!" @@ -8334,18 +8601,12 @@ msgstr "" #~ msgid "Include" #~ msgstr "Katıştır" -#~ msgid "Change Image Group" -#~ msgstr "Bediz ÖbeÄŸini DeÄŸiÅŸtir" - #~ msgid "Group name can't be empty!" #~ msgstr "Öbek adı boÅŸ olamaz!" #~ msgid "Invalid character in group name!" #~ msgstr "Öbek adında geçersiz damga!" -#~ msgid "Group name already exists!" -#~ msgstr "Öbek adı zaten var!" - #~ msgid "Add Image Group" #~ msgstr "Bediz ÖbeÄŸi Ekle" @@ -8493,9 +8754,6 @@ msgstr "" #~ msgid "Lighting" #~ msgstr "Aydınlatma" -#~ msgid "Toggle Persisting" -#~ msgstr "Sürdürmeyi Aç/Kapat" - #~ msgid "Global" #~ msgstr "Bütünsel" diff --git a/editor/translations/ur_PK.po b/editor/translations/ur_PK.po index 24796e1f32..3623a4394c 100644 --- a/editor/translations/ur_PK.po +++ b/editor/translations/ur_PK.po @@ -192,10 +192,9 @@ msgid "Create %d NEW tracks and insert keys?" msgstr "" #: editor/animation_editor.cpp editor/create_dialog.cpp -#: editor/editor_audio_buses.cpp +#: editor/editor_audio_buses.cpp editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp #: editor/plugins/mesh_instance_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp editor/project_manager.cpp #: editor/script_create_dialog.cpp msgid "Create" @@ -357,261 +356,6 @@ msgstr "" msgid "Change Array Value" msgstr "" -#: editor/asset_library_editor_plugin.cpp -msgid "Free" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp -msgid "Version:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Contents:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "View Files" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_help.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp -msgid "Description:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -#: editor/project_manager.cpp -msgid "Install" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp -#: editor/connections_dialog.cpp editor/export_template_manager.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -#: editor/project_settings_editor.cpp editor/property_editor.cpp -#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Close" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve hostname:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Connection error, please try again." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't connect." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't connect to host:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response from host:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Request failed, return code:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Req. Failed." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Request failed, too many redirects" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Redirect Loop." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Bad download hash, assuming file has been tampered with." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Expected:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Got:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed sha256 hash check" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Asset Download Error:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -msgid "Success!" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Fetching:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Resolving.." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Error making request" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Idle" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Retry" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Download Error" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Download for this asset is already in progress!" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "first" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "prev" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "next" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "last" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "All" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/property_selector.cpp editor/quick_open.cpp -#: editor/settings_config_dialog.cpp -msgid "Search:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Search" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/project_manager.cpp -msgid "Import" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Plugins" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Sort:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Reverse" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Category:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Site:" -msgstr "سائٹ:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr ".سپورٹ" - -#: editor/asset_library_editor_plugin.cpp -msgid "Official" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -msgid "Community" -msgstr "کمیونٹی" - -#: editor/asset_library_editor_plugin.cpp -msgid "Testing" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Assets ZIP File" -msgstr "Ø§Ø«Ø§Ø«Û Ú©ÛŒ زپ ÙØ§Ø¦Ù„" - -#: editor/call_dialog.cpp -msgid "Method List For '%s':" -msgstr "" - -#: editor/call_dialog.cpp modules/visual_script/visual_script_editor.cpp -msgid "Call" -msgstr "" - -#: editor/call_dialog.cpp -msgid "Method List:" -msgstr "" - -#: editor/call_dialog.cpp -msgid "Arguments:" -msgstr "" - -#: editor/call_dialog.cpp -msgid "Return:" -msgstr "" - #: editor/code_editor.cpp msgid "Go to Line" msgstr "" @@ -648,6 +392,14 @@ msgstr "" msgid "Selection Only" msgstr "" +#: editor/code_editor.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp +msgid "Search" +msgstr "" + #: editor/code_editor.cpp editor/editor_help.cpp msgid "Find" msgstr "" @@ -680,11 +432,11 @@ msgstr "" msgid "Skip" msgstr "" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom In" msgstr "" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom Out" msgstr "" @@ -751,6 +503,20 @@ msgstr "" msgid "Oneshot" msgstr "" +#: editor/connections_dialog.cpp editor/dependency_editor.cpp +#: editor/export_template_manager.cpp +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Close" +msgstr "" + #: editor/connections_dialog.cpp msgid "Connect" msgstr "" @@ -776,7 +542,7 @@ msgstr "" msgid "Disconnect" msgstr "" -#: editor/connections_dialog.cpp editor/node_dock.cpp +#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" msgstr "" @@ -793,12 +559,25 @@ msgstr "" msgid "Recent:" msgstr "" +#: editor/create_dialog.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp +#: editor/quick_open.cpp editor/settings_config_dialog.cpp +msgid "Search:" +msgstr "" + #: editor/create_dialog.cpp editor/editor_help.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp #: editor/quick_open.cpp msgid "Matches:" msgstr "" +#: editor/create_dialog.cpp editor/editor_help.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp +#: editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "" + #: editor/dependency_editor.cpp msgid "Search Replacement For:" msgstr "" @@ -854,6 +633,10 @@ msgid "Owners Of:" msgstr "" #: editor/dependency_editor.cpp +msgid "Remove selected files from the project? (no undo)" +msgstr "" + +#: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" @@ -861,7 +644,7 @@ msgid "" msgstr "" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (no undo)" +msgid "Cannot remove:\n" msgstr "" #: editor/dependency_editor.cpp @@ -928,10 +711,6 @@ msgid "Godot Engine contributors" msgstr "" #: editor/editor_about.cpp -msgid "Authors" -msgstr "" - -#: editor/editor_about.cpp msgid "Project Founders" msgstr "" @@ -948,6 +727,38 @@ msgid "Developers" msgstr "" #: editor/editor_about.cpp +msgid "Authors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Platinum Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Mini Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Silver Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Bronze Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Donors" +msgstr "" + +#: editor/editor_about.cpp msgid "License" msgstr "" @@ -988,6 +799,16 @@ msgid "Package Installed Successfully!" msgstr "" #: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Success!" +msgstr "" + +#: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp +msgid "Install" +msgstr "" + +#: editor/editor_asset_installer.cpp msgid "Package Installer" msgstr "" @@ -1037,10 +858,6 @@ msgid "Audio Bus, Drag and Drop to rearrange." msgstr "" #: editor/editor_audio_buses.cpp -msgid "Bus options" -msgstr "" - -#: editor/editor_audio_buses.cpp msgid "Solo" msgstr "" @@ -1052,12 +869,20 @@ msgstr "" msgid "Bypass" msgstr "" +#: editor/editor_audio_buses.cpp +msgid "Bus options" +msgstr "" + #: editor/editor_audio_buses.cpp editor/plugins/tile_map_editor_plugin.cpp #: editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "" #: editor/editor_audio_buses.cpp +msgid "Reset Volume" +msgstr "" + +#: editor/editor_audio_buses.cpp msgid "Delete Effect" msgstr "" @@ -1078,6 +903,10 @@ msgid "Duplicate Audio Bus" msgstr "" #: editor/editor_audio_buses.cpp +msgid "Reset Bus Volume" +msgstr "" + +#: editor/editor_audio_buses.cpp #, fuzzy msgid "Move Audio Bus" msgstr "ایکشن منتقل کریں" @@ -1110,7 +939,8 @@ msgstr "" msgid "Create a new Bus Layout." msgstr "" -#: editor/editor_audio_buses.cpp editor/script_create_dialog.cpp +#: editor/editor_audio_buses.cpp editor/property_editor.cpp +#: editor/script_create_dialog.cpp msgid "Load" msgstr "" @@ -1202,7 +1032,7 @@ msgid "Rearrange Autoloads" msgstr "" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp scene/gui/file_dialog.cpp +#: scene/gui/file_dialog.cpp msgid "Path:" msgstr "" @@ -1210,9 +1040,7 @@ msgstr "" msgid "Node Name:" msgstr "" -#: editor/editor_autoload_settings.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp editor/project_manager.cpp +#: editor/editor_autoload_settings.cpp editor/project_manager.cpp msgid "Name" msgstr "" @@ -1245,18 +1073,19 @@ msgid "Choose a Directory" msgstr "" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Create Folder" msgstr "" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: editor/editor_plugin_settings.cpp editor/plugins/theme_editor_plugin.cpp -#: editor/project_export.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp +#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp +#: scene/gui/file_dialog.cpp msgid "Name:" msgstr "" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Could not create folder." msgstr "" @@ -1276,30 +1105,6 @@ msgstr "" msgid "Template file not found:\n" msgstr "" -#: editor/editor_export.cpp -msgid "Added:" -msgstr "" - -#: editor/editor_export.cpp -msgid "Removed:" -msgstr "" - -#: editor/editor_export.cpp -msgid "Error saving atlas:" -msgstr "" - -#: editor/editor_export.cpp -msgid "Could not save atlas subtexture:" -msgstr "" - -#: editor/editor_export.cpp -msgid "Exporting for %s" -msgstr "" - -#: editor/editor_export.cpp -msgid "Setting Up.." -msgstr "" - #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "" @@ -1386,6 +1191,10 @@ msgstr "Ù¾Ø³Ù†Ø¯ÛŒØ¯Û Ø§ÙˆÙ¾Ø± منتقل کریں" msgid "Move Favorite Down" msgstr "Ù¾Ø³Ù†Ø¯ÛŒØ¯Û Ù†ÛŒÚ†Û’ منتقل کریں" +#: editor/editor_file_dialog.cpp +msgid "Go to parent folder" +msgstr "" + #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Directories & Files:" msgstr "" @@ -1428,6 +1237,10 @@ msgstr "" msgid "Search Classes" msgstr "" +#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +msgid "Top" +msgstr "" + #: editor/editor_help.cpp editor/property_editor.cpp msgid "Class:" msgstr "" @@ -1444,15 +1257,27 @@ msgstr "" msgid "Brief Description:" msgstr "" +#: editor/editor_help.cpp +msgid "Members" +msgstr "" + #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "" #: editor/editor_help.cpp +msgid "Public Methods" +msgstr "" + +#: editor/editor_help.cpp msgid "Public Methods:" msgstr "" #: editor/editor_help.cpp +msgid "GUI Theme Items" +msgstr "" + +#: editor/editor_help.cpp msgid "GUI Theme Items:" msgstr "" @@ -1461,6 +1286,10 @@ msgid "Signals:" msgstr "" #: editor/editor_help.cpp +msgid "Enumerations" +msgstr "" + +#: editor/editor_help.cpp msgid "Enumerations:" msgstr "" @@ -1469,19 +1298,48 @@ msgid "enum " msgstr "" #: editor/editor_help.cpp +msgid "Constants" +msgstr "" + +#: editor/editor_help.cpp msgid "Constants:" msgstr "" #: editor/editor_help.cpp #, fuzzy +msgid "Description" +msgstr "سب سکریپشن بنائیں" + +#: editor/editor_help.cpp +msgid "Properties" +msgstr "" + +#: editor/editor_help.cpp +#, fuzzy msgid "Property Description:" msgstr "سب سکریپشن بنائیں" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this property. Please help us by " +"[color=$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp +msgid "Methods" +msgstr "" + +#: editor/editor_help.cpp msgid "Method Description:" msgstr "" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this method. Please help us by [color=" +"$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp msgid "Search Text" msgstr "" @@ -1490,24 +1348,21 @@ msgid "Output:" msgstr "" #: editor/editor_log.cpp editor/plugins/animation_tree_editor_plugin.cpp -#: editor/plugins/rich_text_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_editor_debugger.cpp scene/gui/line_edit.cpp -#: scene/gui/text_edit.cpp +#: editor/property_editor.cpp editor/script_editor_debugger.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Clear" msgstr "" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Error saving resource!" msgstr "" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Save Resource As.." msgstr "" -#: editor/editor_node.cpp editor/export_template_manager.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "I see.." msgstr "" @@ -1524,6 +1379,26 @@ msgid "Error while saving." msgstr "" #: editor/editor_node.cpp +msgid "Can't open '%s'." +msgstr "" + +#: editor/editor_node.cpp +msgid "Error while parsing '%s'." +msgstr "" + +#: editor/editor_node.cpp +msgid "Unexpected end of file '%s'." +msgstr "" + +#: editor/editor_node.cpp +msgid "Missing '%s' or its dependencies." +msgstr "" + +#: editor/editor_node.cpp +msgid "Error while loading '%s'." +msgstr "" + +#: editor/editor_node.cpp msgid "Saving Scene" msgstr "" @@ -1581,6 +1456,33 @@ msgid "Restored default layout to base settings." msgstr "" #: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was imported, so it's not editable.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was instanced or inherited.\n" +"Changes to it will not be kept when saving the current scene." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource was imported, so it's not editable. Change its settings in the " +"import panel and then re-import." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This scene was imported, so changes to it will not be kept.\n" +"Instancing it or inheriting will allow making changes to it.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp msgid "Copy Params" msgstr "" @@ -1742,6 +1644,12 @@ msgid "Save changes the following scene(s) before opening Project Manager?" msgstr "" #: editor/editor_node.cpp +msgid "" +"This option is deprecated. Situations where refresh must be forced are now " +"considered a bug. Please report." +msgstr "" + +#: editor/editor_node.cpp #, fuzzy msgid "Pick a Main Scene" msgstr "ایک مینو منظر چنیں" @@ -1769,7 +1677,7 @@ msgid "" msgstr "" #: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Ugh" msgstr "" @@ -1780,11 +1688,11 @@ msgid "" msgstr "" #: editor/editor_node.cpp -msgid "Error loading scene." +msgid "Scene '%s' has broken dependencies:" msgstr "" #: editor/editor_node.cpp -msgid "Scene '%s' has broken dependencies:" +msgid "Clear Recent Scenes" msgstr "" #: editor/editor_node.cpp @@ -1820,7 +1728,7 @@ msgstr "" msgid "Toggle distraction-free mode." msgstr "" -#: editor/editor_node.cpp editor/io_plugins/editor_scene_import_plugin.cpp +#: editor/editor_node.cpp msgid "Scene" msgstr "" @@ -2039,6 +1947,10 @@ msgstr "" msgid "Issue Tracker" msgstr "" +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +msgid "Community" +msgstr "کمیونٹی" + #: editor/editor_node.cpp msgid "About" msgstr "" @@ -2047,7 +1959,7 @@ msgstr "" msgid "Play the project." msgstr "" -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Play" msgstr "" @@ -2063,7 +1975,7 @@ msgstr "" msgid "Stop the scene." msgstr "" -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Stop" msgstr "" @@ -2136,6 +2048,15 @@ msgid "Object properties." msgstr "" #: editor/editor_node.cpp +msgid "Changes may be lost!" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Import" +msgstr "" + +#: editor/editor_node.cpp msgid "FileSystem" msgstr "" @@ -2151,14 +2072,6 @@ msgstr "" msgid "Don't Save" msgstr "" -#: editor/editor_node.cpp editor/editor_reimport_dialog.cpp -msgid "Re-Import" -msgstr "" - -#: editor/editor_node.cpp editor/editor_plugin_settings.cpp -msgid "Update" -msgstr "" - #: editor/editor_node.cpp msgid "Import Templates From ZIP File" msgstr "" @@ -2220,11 +2133,28 @@ msgstr "" msgid "Open the previous Editor" msgstr "" +#: editor/editor_plugin.cpp +msgid "Creating Mesh Previews" +msgstr "" + +#: editor/editor_plugin.cpp +msgid "Thumbnail.." +msgstr "" + #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" msgstr "" #: editor/editor_plugin_settings.cpp +msgid "Update" +msgstr "" + +#: editor/editor_plugin_settings.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Version:" +msgstr "" + +#: editor/editor_plugin_settings.cpp msgid "Author:" msgstr "" @@ -2276,26 +2206,6 @@ msgstr "" msgid "Frame #:" msgstr "" -#: editor/editor_reimport_dialog.cpp -msgid "Please wait for scan to complete." -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Current scene must be saved to re-import." -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Save & Re-Import" -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Importing" -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Import Changed Resources" -msgstr "" - #: editor/editor_run_native.cpp msgid "Select device from the list" msgstr "" @@ -2405,10 +2315,6 @@ msgid "Importing:" msgstr "" #: editor/export_template_manager.cpp -msgid "Loading Export Templates" -msgstr "" - -#: editor/export_template_manager.cpp msgid "Current Version:" msgstr "" @@ -2442,9 +2348,17 @@ msgid "Cannot navigate to '" msgstr "" #: editor/filesystem_dock.cpp +msgid "View items as a grid of thumbnails" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "View items as a list" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "" "\n" -"Status: Needs Re-Import" +"Status: Import of file failed. Please fix file and reimport manually." msgstr "" #: editor/filesystem_dock.cpp @@ -2454,87 +2368,87 @@ msgid "" msgstr "" #: editor/filesystem_dock.cpp -msgid "Same source and destination files, doing nothing." +msgid "Cannot move/rename resources root." msgstr "" #: editor/filesystem_dock.cpp -msgid "Target file exists, can't overwrite. Delete first." +msgid "Cannot move a folder into itself.\n" msgstr "" #: editor/filesystem_dock.cpp -msgid "Same source and destination paths, doing nothing." +msgid "Error moving:\n" msgstr "" #: editor/filesystem_dock.cpp -msgid "Can't move directories to within themselves." +msgid "Unable to update dependencies:\n" msgstr "" #: editor/filesystem_dock.cpp -msgid "Can't rename deps for:\n" +msgid "No name provided" msgstr "" #: editor/filesystem_dock.cpp -msgid "Error moving file:\n" +msgid "Provided name contains invalid characters" msgstr "" #: editor/filesystem_dock.cpp -msgid "Error moving dir:\n" +msgid "No name provided." msgstr "" #: editor/filesystem_dock.cpp -msgid "Can't operate on '..'" +msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp -msgid "Pick New Name and Location For:" +msgid "A file or folder with this name already exists." msgstr "" #: editor/filesystem_dock.cpp -msgid "No files selected!" +msgid "Renaming file:" msgstr "" #: editor/filesystem_dock.cpp -msgid "Expand all" +msgid "Renaming folder:" msgstr "" #: editor/filesystem_dock.cpp -msgid "Collapse all" +msgid "Expand all" msgstr "" #: editor/filesystem_dock.cpp -msgid "Show In File Manager" +msgid "Collapse all" msgstr "" #: editor/filesystem_dock.cpp -msgid "Instance" +msgid "Copy Path" msgstr "" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." +msgid "Rename.." msgstr "" #: editor/filesystem_dock.cpp -msgid "View Owners.." +msgid "Move To.." msgstr "" #: editor/filesystem_dock.cpp -msgid "Copy Path" +msgid "New Folder.." msgstr "" #: editor/filesystem_dock.cpp -msgid "Rename or Move.." +msgid "Show In File Manager" msgstr "" #: editor/filesystem_dock.cpp -msgid "Move To.." +msgid "Instance" msgstr "" #: editor/filesystem_dock.cpp -msgid "Info" +msgid "Edit Dependencies.." msgstr "" #: editor/filesystem_dock.cpp -msgid "Re-Import.." +msgid "View Owners.." msgstr "" #: editor/filesystem_dock.cpp @@ -2567,6 +2481,11 @@ msgstr "" msgid "Move" msgstr "" +#: editor/filesystem_dock.cpp editor/plugins/animation_tree_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Rename" +msgstr "" + #: editor/groups_editor.cpp msgid "Add to Group" msgstr "" @@ -2580,6 +2499,10 @@ msgid "Import as Single Scene" msgstr "" #: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials" msgstr "" @@ -2592,6 +2515,18 @@ msgid "Import with Separate Objects+Materials" msgstr "" #: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Materials+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Materials+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes" msgstr "" @@ -2600,38 +2535,31 @@ msgid "Import as Multiple Scenes+Materials" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Import Scene" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Importing Scene.." msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Running Custom Script.." msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Couldn't load post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Invalid/broken script for post-import (check console):" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Error running post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Saving.." msgstr "" @@ -2659,579 +2587,54 @@ msgstr "" msgid "Reimport" msgstr "" -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "No bit masks to import!" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path is empty." -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must be a complete resource path." -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must exist." -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Save path is empty!" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Import BitMasks" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s):" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Target Path:" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Accept" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Bit Mask" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No source font file!" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No target font resource!" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "" -"Invalid file extension.\n" -"Please use .font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Can't load/process source font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Couldn't save font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font Size:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Dest Resource:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "The quick brown fox jumps over the lazy dog." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Test:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Options:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Font Import" -msgstr "" - -#: 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 "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Failed opening as BMFont file." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error initializing FreeType." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Unknown font format." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error loading font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Invalid font size." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Invalid font custom source." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/plugins/theme_editor_plugin.cpp -msgid "Font" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "No meshes to import!" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Single Mesh Import" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Source Mesh(es):" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Mesh" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Surface %d" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "No samples to import!" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Import Audio Samples" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Source Sample(s):" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Audio Sample" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "New Clip" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Animation Options" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Flags" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Bake FPS:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Optimizer" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Linear Error" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angular Error" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angle" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Clips" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Start(s)" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "End(s)" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Loop" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Filters" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source path is empty." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't load post-import script." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Invalid/broken script for post-import." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Error importing scene." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import 3D Scene" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source Scene:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Same as Target Scene" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Shared" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Target Texture Folder:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Post-Process Script:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Custom Root Node Type:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Auto" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Root Node Name:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "The Following Files are Missing:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Anyway" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp scene/gui/dialogs.cpp -msgid "Cancel" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import & Open" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Edited scene has not been saved, open imported scene anyway?" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Image:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Can't import a file over itself:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't localize path: %s (already local)" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "3D Scene Animation" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Uncompressed" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossless (PNG)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossy (WebP)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress (VRAM)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Format" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Compression Quality (WebP):" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Options" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Please specify some files!" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "At least one file needed for Atlas." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Error importing:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Only one file is required for large texture." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Max Texture Size:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for Atlas (2D)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cell Size:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Large Texture" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Textures (2D)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture" +#: editor/multi_node_edit.cpp +msgid "MultiNode Set" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Base Atlas Texture" +#: editor/node_dock.cpp +msgid "Groups" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s)" +#: editor/node_dock.cpp +msgid "Select a Node to edit Signals and Groups." msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 2D" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create Poly" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 3D" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures" +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Insert Point" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "2D Texture" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly (Remove Point)" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "3D Texture" +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Remove Poly And Point" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Atlas Texture" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create a new polygon from scratch." msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp +#: editor/plugins/abstract_polygon_2d_editor.cpp msgid "" -"NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files to " -"the project." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Crop empty space." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Texture" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Load Source Image" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Slicing" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Inserting" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Saving" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save large texture:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Build Atlas For:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Loading Image:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't load image:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Converting Images" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cropping Images" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Blitting Images" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save atlas image:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save converted texture:" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid source!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid translation source!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Column" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/script_create_dialog.cpp -msgid "Language" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No items to import!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No target path!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translations" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Couldn't import!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translation" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Source CSV:" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Ignore First Row" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Compress" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Add to Project (project.godot)" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Languages:" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Translation" -msgstr "" - -#: editor/multi_node_edit.cpp -msgid "MultiNode Set" -msgstr "" - -#: editor/node_dock.cpp -msgid "Groups" -msgstr "" - -#: editor/node_dock.cpp -msgid "Select a Node to edit Signals and Groups." +"Edit existing polygon:\n" +"LMB: Move Point.\n" +"Ctrl+LMB: Split Segment.\n" +"RMB: Erase Point." msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp @@ -3387,7 +2790,6 @@ msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp #: editor/script_create_dialog.cpp msgid "Error!" @@ -3497,10 +2899,6 @@ msgid "Delete Input" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Rename" -msgstr "" - -#: editor/plugins/animation_tree_editor_plugin.cpp msgid "Animation tree is valid." msgstr "" @@ -3556,64 +2954,181 @@ msgstr "" msgid "Filters.." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing %d Triangles:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Free" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Triangle #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Contents:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Light Baker Setup:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "View Files" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing Geometry" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve hostname:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Fixing Lights" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Making BVH" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connection error, please try again." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Light Octree" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't connect." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Octree Texture" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't connect to host:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Transfer to Lightmaps:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response from host:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Allocating Texture #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Baking Triangle #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, return code:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Post-Processing Texture #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Req. Failed." msgstr "" -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Bake!" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, too many redirects" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Redirect Loop." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Bad download hash, assuming file has been tampered with." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Expected:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Got:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed sha256 hash check" msgstr "" -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Reset the lightmap octree baking process (start over)." +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Asset Download Error:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Fetching:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Resolving.." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connecting.." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Requesting.." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Error making request" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Idle" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Retry" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download Error" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download for this asset is already in progress!" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "first" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "prev" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "next" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "last" msgstr "" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "All" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Plugins" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Sort:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Reverse" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Category:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Site:" +msgstr "سائٹ:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Support.." +msgstr ".سپورٹ" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Official" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Testing" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Assets ZIP File" +msgstr "Ø§Ø«Ø§Ø«Û Ú©ÛŒ زپ ÙØ§Ø¦Ù„" + #: editor/plugins/camera_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp msgid "Preview" msgstr "" @@ -3656,11 +3171,15 @@ msgid "Edit CanvasItem" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Change Anchors" +msgid "Anchors only" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom (%):" +msgid "Change Anchors and Margins" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Change Anchors" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3712,59 +3231,72 @@ msgid "Pan Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Lock the selected object in place (can't be moved)." +msgid "Toggles snapping" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Unlock the selected object (can be moved)." +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Makes sure the object's children are not selectable." +msgid "Snapping options" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Restores the object's children's ability to be selected." +msgid "Snap to grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp -#: editor/project_settings_editor.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Edit" +msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +msgid "Configure Snap..." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +msgid "Snap Relative" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Rotation Snap" +msgid "Use Pixel Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap Relative" +msgid "Smart snapping" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." +msgid "Snap to parent" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Pixel Snap" +msgid "Snap to node anchor" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to node sides" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to other nodes" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Lock the selected object in place (can't be moved)." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Unlock the selected object (can be moved)." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Makes sure the object's children are not selectable." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Skeleton.." +msgid "Restores the object's children's ability to be selected." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3793,11 +3325,16 @@ msgid "View" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Reset" +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show helpers" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Set.." +msgid "Show rulers" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3809,7 +3346,7 @@ msgid "Frame Selection" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Anchor" +msgid "Layout" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3833,11 +3370,20 @@ msgid "Clear Pose" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Set a Value" +msgid "Drag pivot from mouse position" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Set pivot at mouse position" +msgstr ".تمام کا انتخاب" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Multiply grid step by 2" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap (Pixels):" +msgid "Divide grid step by 2" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3848,23 +3394,28 @@ msgstr "" msgid "Adding %s..." msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Create Node" msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Error instancing scene from %s" msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "OK :(" msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "No parent to instance a child at." msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "This operation requires a single selected node." msgstr "" @@ -3878,45 +3429,6 @@ msgid "" "Drag & drop + Alt : Change node type" msgstr "" -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Create Poly" -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly" -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly (Remove Point)" -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Create a new polygon from scratch." -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -msgid "" -"Edit existing polygon:\n" -"LMB: Move Point.\n" -"Ctrl+LMB: Split Segment.\n" -"RMB: Erase Point." -msgstr "" - #: editor/plugins/collision_polygon_editor_plugin.cpp msgid "Create Poly3D" msgstr "" @@ -3926,14 +3438,6 @@ msgid "Set Handle" msgstr "" #: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Creating Mesh Library" -msgstr "" - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Thumbnail.." -msgstr "" - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Remove item %d?" msgstr "" @@ -3956,6 +3460,27 @@ msgid "Update from Scene" msgstr "" #: editor/plugins/curve_editor_plugin.cpp +msgid "Flat0" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Flat1" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +#, fuzzy +msgid "Ease in" +msgstr ".تمام کا انتخاب" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Ease out" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Smoothstep" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp msgid "Modify Curve Point" msgstr "" @@ -4033,22 +3558,18 @@ msgid "Create Occluder Polygon" msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Edit existing polygon:" msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "LMB: Move Point." msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Ctrl+LMB: Split Segment." msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "RMB: Erase Point." msgstr "" @@ -4149,6 +3670,10 @@ msgid "Create Outline" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Body" msgstr "" @@ -4276,12 +3801,72 @@ msgstr "" msgid "Populate" msgstr "" -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Create Navigation Polygon" +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Bake!" +msgstr "" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Bake the navigation mesh.\n" +msgstr "" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Clear the navigation mesh." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Setting up Configuration..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Calculating grid size..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating heightfield..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Marking walkable triangles..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Constructing compact heightfield..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Eroding walkable area..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Partioning..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating contours..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating polymesh..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Converting to native navigation mesh..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Navigation Mesh Generator Setup:" +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Parsing Geometry..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Done!" msgstr "" #: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Remove Poly And Point" +msgid "Create Navigation Polygon" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4455,16 +4040,19 @@ msgid "Curve Point #" msgstr "" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Point Pos" -msgstr "" +#, fuzzy +msgid "Set Curve Point Position" +msgstr ".تمام کا انتخاب" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve In Pos" -msgstr "" +#, fuzzy +msgid "Set Curve In Position" +msgstr ".تمام کا انتخاب" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Out Pos" -msgstr "" +#, fuzzy +msgid "Set Curve Out Position" +msgstr ".تمام کا انتخاب" #: editor/plugins/path_editor_plugin.cpp msgid "Split Path" @@ -4524,6 +4112,14 @@ msgid "Scale Polygon" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon->UV" msgstr "" @@ -4578,63 +4174,10 @@ msgstr "" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "" -#: editor/plugins/rich_text_editor_plugin.cpp -msgid "Parse BBCode" -msgstr "" - -#: editor/plugins/sample_editor_plugin.cpp -msgid "Length:" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Open Sample File(s)" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "ERROR: Couldn't load sample!" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Add Sample" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Rename Sample" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Delete Sample" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "16 Bits" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "8 Bits" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Stereo" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Mono" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/script_editor_debugger.cpp -msgid "Format" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Pitch" -msgstr "" - #: editor/plugins/script_editor_plugin.cpp msgid "Clear Recent Files" msgstr "" @@ -4726,6 +4269,10 @@ msgstr "" msgid "Close All" msgstr "" +#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp +msgid "Run" +msgstr "" + #: editor/plugins/script_editor_plugin.cpp msgid "Toggle Scripts Panel" msgstr "" @@ -4767,18 +4314,6 @@ msgid "Debug with external editor" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Window" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Left" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Right" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp msgid "Open Godot online documentation" msgstr "" @@ -4861,7 +4396,7 @@ msgstr "" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Copy" msgstr "" @@ -5124,10 +4659,6 @@ msgid "View Plane Transform." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Scaling to %s%%." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." msgstr "" @@ -5144,10 +4675,6 @@ msgid "Top View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Top" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "" @@ -5378,6 +4905,10 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Configure Snap.." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Local Coords" msgstr "" @@ -5523,6 +5054,10 @@ msgid "Speed (FPS):" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Loop" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animation Frames" msgstr "" @@ -5535,12 +5070,14 @@ msgid "Insert Empty (After)" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Up" -msgstr "" +#, fuzzy +msgid "Move (Before)" +msgstr "ایکشن منتقل کریں" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Down" -msgstr "" +#, fuzzy +msgid "Move (After)" +msgstr "ایکشن منتقل کریں" #: editor/plugins/style_box_editor_plugin.cpp msgid "StyleBox Preview:" @@ -5703,6 +5240,10 @@ msgid "Style" msgstr "" #: editor/plugins/theme_editor_plugin.cpp +msgid "Font" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp msgid "Color" msgstr "" @@ -5752,7 +5293,7 @@ msgid "Mirror Y" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Bucket" +msgid "Paint Tile" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp @@ -5816,6 +5357,10 @@ msgid "Delete preset '%s'?" msgstr "" #: editor/project_export.cpp +msgid "Export templates for this platform are missing/corrupted: " +msgstr "" + +#: editor/project_export.cpp msgid "Presets" msgstr "" @@ -5886,19 +5431,29 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +msgid "Export templates for this platform are missing/corrupted:" +msgstr "" + +#: editor/project_export.cpp msgid "Export With Debug" msgstr "" #: editor/project_manager.cpp -msgid "Invalid project path, the path must exist!" +msgid "The path does not exists." msgstr "" #: editor/project_manager.cpp -msgid "Invalid project path, project.godot must not exist." +msgid "Please choose a 'project.godot' file." +msgstr "" + +#: editor/project_manager.cpp +msgid "" +"Your project will be created in a non empty folder (you might want to create " +"a new folder)." msgstr "" #: editor/project_manager.cpp -msgid "Invalid project path, project.godot must exist." +msgid "Please choose a folder that does not contain a 'project.godot' file." msgstr "" #: editor/project_manager.cpp @@ -5906,10 +5461,26 @@ msgid "Imported Project" msgstr "" #: editor/project_manager.cpp +msgid " " +msgstr "" + +#: editor/project_manager.cpp +msgid "It would be a good idea to name your project." +msgstr "" + +#: editor/project_manager.cpp msgid "Invalid project path (changed anything?)." msgstr "" #: editor/project_manager.cpp +msgid "Couldn't get project.godot in project path." +msgstr "" + +#: editor/project_manager.cpp +msgid "Couldn't edit project.godot in project path." +msgstr "" + +#: editor/project_manager.cpp msgid "Couldn't create project.godot in project path." msgstr "" @@ -5918,15 +5489,20 @@ msgid "The following files failed extraction from package:" msgstr "" #: editor/project_manager.cpp -msgid "Import Existing Project" +#, fuzzy +msgid "Rename Project" +msgstr ".تمام کا انتخاب" + +#: editor/project_manager.cpp +msgid "Couldn't get project.godot in the project path." msgstr "" #: editor/project_manager.cpp -msgid "Project Path (Must Exist):" +msgid "New Game Project" msgstr "" #: editor/project_manager.cpp -msgid "Project Name:" +msgid "Import Existing Project" msgstr "" #: editor/project_manager.cpp @@ -5934,19 +5510,23 @@ msgid "Create New Project" msgstr "" #: editor/project_manager.cpp -msgid "Project Path:" +msgid "Install Project:" msgstr "" #: editor/project_manager.cpp -msgid "Install Project:" +msgid "Project Name:" msgstr "" #: editor/project_manager.cpp -msgid "Browse" +msgid "Create folder" msgstr "" #: editor/project_manager.cpp -msgid "New Game Project" +msgid "Project Path:" +msgstr "" + +#: editor/project_manager.cpp +msgid "Browse" msgstr "" #: editor/project_manager.cpp @@ -5958,6 +5538,10 @@ msgid "Unnamed Project" msgstr "" #: editor/project_manager.cpp +msgid "Can't open project" +msgstr "" + +#: editor/project_manager.cpp msgid "Are you sure to open more than one project?" msgstr "" @@ -5993,10 +5577,6 @@ msgid "Project List" msgstr "" #: editor/project_manager.cpp -msgid "Run" -msgstr "" - -#: editor/project_manager.cpp msgid "Scan" msgstr "" @@ -6054,17 +5634,14 @@ msgid "Add Input Action Event" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Meta+" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Shift+" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Alt+" msgstr "" @@ -6125,7 +5702,7 @@ msgstr "" msgid "Joypad Axis Index:" msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Axis" msgstr "" @@ -6145,31 +5722,31 @@ msgstr "" msgid "Add Event" msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Device" msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Button" msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Left Button." msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Right Button." msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Middle Button." msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Up." msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Down." msgstr "" @@ -6178,7 +5755,7 @@ msgid "Add Global Property" msgstr "" #: editor/project_settings_editor.cpp -msgid "Select an setting item first!" +msgid "Select a setting item first!" msgstr "" #: editor/project_settings_editor.cpp @@ -6194,6 +5771,14 @@ msgid "Delete Item" msgstr "" #: editor/project_settings_editor.cpp +msgid "Can't contain '/' or ':'" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Already existing" +msgstr "" + +#: editor/project_settings_editor.cpp msgid "Error saving settings." msgstr "" @@ -6343,10 +5928,18 @@ msgid "New Script" msgstr "سب سکریپشن بنائیں" #: editor/property_editor.cpp +msgid "Make Unique" +msgstr "" + +#: editor/property_editor.cpp msgid "Show in File System" msgstr "" #: editor/property_editor.cpp +msgid "Convert To %s" +msgstr "" + +#: editor/property_editor.cpp msgid "Error loading file: Not a resource!" msgstr "" @@ -6383,6 +5976,10 @@ msgid "Select Property" msgstr "" #: editor/property_selector.cpp +msgid "Select Virtual Method" +msgstr "" + +#: editor/property_selector.cpp msgid "Select Method" msgstr "" @@ -6410,26 +6007,6 @@ msgstr "" msgid "Reparent" msgstr "" -#: editor/resources_dock.cpp -msgid "Create New Resource" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Open Resource" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Save Resource" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Resource Tools" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Make Local" -msgstr "" - #: editor/run_settings_dialog.cpp msgid "Run Mode:" msgstr "" @@ -6556,14 +6133,6 @@ msgid "Sub-Resources:" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Edit Groups" -msgstr "" - -#: editor/scene_tree_dock.cpp -msgid "Edit Connections" -msgstr "" - -#: editor/scene_tree_dock.cpp msgid "Clear Inheritance" msgstr "" @@ -6747,6 +6316,14 @@ msgid "Invalid base path" msgstr "" #: editor/script_create_dialog.cpp +msgid "Directory of the same name exists" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "File exists, will be reused" +msgstr "" + +#: editor/script_create_dialog.cpp msgid "Invalid extension" msgstr "" @@ -6789,6 +6366,10 @@ msgid "Load existing script file" msgstr "سب سکریپشن بنائیں" #: editor/script_create_dialog.cpp +msgid "Language" +msgstr "" + +#: editor/script_create_dialog.cpp msgid "Inherits" msgstr "" @@ -6831,6 +6412,10 @@ msgid "Function:" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Errors" msgstr "" @@ -6911,6 +6496,10 @@ msgid "Type" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Format" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Usage" msgstr "" @@ -6987,13 +6576,29 @@ msgstr "" msgid "Change Probe Extents" msgstr ".Ù†ÙˆÙ¹ÙØ¦Ø± Ú©Û’ اکسٹنٹ Ú©Ùˆ تبدیل کیجیۓ" +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Library" +msgstr "" + +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Status" +msgstr "" + +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Libraries: " +msgstr "" + +#: modules/gdnative/register_types.cpp +msgid "GDNative" +msgstr "" + #: 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/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "یا تو ڈیکوڈ کرنے Ú©Û’ لئے بائیٹس Ú©Ù… Ûیں یا پھر ناقص ÙØ§Ø±Ù…یٹ Ú¾Û’." @@ -7044,10 +6649,6 @@ msgid "GridMap Duplicate Selection" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Paint" -msgstr "" - -#: modules/gridmap/grid_map_editor_plugin.cpp msgid "Snap View" msgstr "" @@ -7139,12 +6740,8 @@ msgstr "" msgid "Pick Distance:" msgstr "" -#: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Tiles" -msgstr "" - -#: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Areas" +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "Builds" msgstr "" #: modules/visual_script/visual_script.cpp @@ -7336,10 +6933,18 @@ msgid "Return" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Call" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Get" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Script already has function '%s'" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Input Value" msgstr "" @@ -7695,6 +7300,12 @@ msgid "" "order for AnimatedSprite3D to display frames." msgstr "" +#: scene/3d/vehicle_body.cpp +msgid "" +"VehicleWheel serves to provide a wheel system to a VehicleBody. Please use " +"it as a child of a VehicleBody." +msgstr "" + #: scene/gui/color_picker.cpp msgid "Raw Mode" msgstr "" @@ -7704,15 +7315,15 @@ msgid "Add current color as a preset" msgstr "" #: scene/gui/dialogs.cpp -msgid "Alert!" +msgid "Cancel" msgstr "" #: scene/gui/dialogs.cpp -msgid "Please Confirm..." +msgid "Alert!" msgstr "" -#: scene/gui/input_action.cpp -msgid "Ctrl+" +#: scene/gui/dialogs.cpp +msgid "Please Confirm..." msgstr "" #: scene/gui/popup.cpp @@ -7743,5 +7354,21 @@ msgid "" "texture to some node for display." msgstr "" +#: scene/resources/dynamic_font.cpp +msgid "Error initializing FreeType." +msgstr "" + +#: scene/resources/dynamic_font.cpp +msgid "Unknown font format." +msgstr "" + +#: scene/resources/dynamic_font.cpp +msgid "Error loading font." +msgstr "" + +#: scene/resources/dynamic_font.cpp +msgid "Invalid font size." +msgstr "" + #~ msgid "Samples" #~ msgstr "نمونے" diff --git a/editor/translations/zh_CN.po b/editor/translations/zh_CN.po index cf9013091a..9dff317a28 100644 --- a/editor/translations/zh_CN.po +++ b/editor/translations/zh_CN.po @@ -10,6 +10,7 @@ # Geequlim <geequlim@gmail.com>, 2016-2017. # Luo Jun <vipsbpig@gmail.com>, 2016. # oberon-tonya <360119124@qq.com>, 2016. +# sersoong <seraphim945@qq.com>, 2017. # wanfang liu <wanfang.liu@gmail.com>, 2016. # Youmu <konpaku.w@gmail.com>, 2017. # @@ -17,15 +18,16 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2017-07-08 15:27+0800\n" -"Last-Translator: Geequlim <geequlim@gmail.com>\n" -"Language-Team: æ±‰è¯ <geequlim@gmail.com>\n" +"PO-Revision-Date: 2017-09-15 08:55+0000\n" +"Last-Translator: sersoong <seraphim945@qq.com>\n" +"Language-Team: Chinese (Simplified) <https://hosted.weblate.org/projects/" +"godot-engine/godot/zh_Hans/>\n" "Language: zh_CN\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: Gtranslator 2.91.7\n" +"X-Generator: Weblate 2.17-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -201,10 +203,9 @@ msgid "Create %d NEW tracks and insert keys?" msgstr "创建%d个新轨é“å¹¶æ’入关键帧?" #: editor/animation_editor.cpp editor/create_dialog.cpp -#: editor/editor_audio_buses.cpp +#: editor/editor_audio_buses.cpp editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp #: editor/plugins/mesh_instance_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp editor/project_manager.cpp #: editor/script_create_dialog.cpp msgid "Create" @@ -366,261 +367,6 @@ msgstr "修改数组类型" msgid "Change Array Value" msgstr "修改数组值" -#: editor/asset_library_editor_plugin.cpp -msgid "Free" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp -msgid "Version:" -msgstr "版本:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Contents:" -msgstr "内容:" - -#: editor/asset_library_editor_plugin.cpp -msgid "View Files" -msgstr "查看文件" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_help.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp -msgid "Description:" -msgstr "æè¿°:" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -#: editor/project_manager.cpp -msgid "Install" -msgstr "安装" - -#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp -#: editor/connections_dialog.cpp editor/export_template_manager.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -#: editor/project_settings_editor.cpp editor/property_editor.cpp -#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Close" -msgstr "å…³é—" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve hostname:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Connection error, please try again." -msgstr "连接错误,请é‡è¯•。" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't connect." -msgstr "æ— æ³•è¿žæŽ¥ã€‚" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't connect to host:" -msgstr "æ— æ³•è¿žæŽ¥åˆ°æœåС噍:" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response from host:" -msgstr "æœåŠ¡å™¨æ— å“应:" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response." -msgstr "æ— å“应。" - -#: editor/asset_library_editor_plugin.cpp -msgid "Request failed, return code:" -msgstr "请求失败,错误代ç :" - -#: editor/asset_library_editor_plugin.cpp -msgid "Req. Failed." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Request failed, too many redirects" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Redirect Loop." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed:" -msgstr "失败:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Bad download hash, assuming file has been tampered with." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Expected:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Got:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed sha256 hash check" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Asset Download Error:" -msgstr "资æºä¸‹è½½å‡ºé”™:" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -msgid "Success!" -msgstr "完æˆï¼" - -#: editor/asset_library_editor_plugin.cpp -msgid "Fetching:" -msgstr "获å–:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Resolving.." -msgstr "è§£æžä¸.." - -#: editor/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "连接ä¸.." - -#: editor/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "æ£åœ¨è¯·æ±‚.." - -#: editor/asset_library_editor_plugin.cpp -msgid "Error making request" -msgstr "请求错误" - -#: editor/asset_library_editor_plugin.cpp -msgid "Idle" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Retry" -msgstr "é‡è¯•" - -#: editor/asset_library_editor_plugin.cpp -msgid "Download Error" -msgstr "下载错误" - -#: editor/asset_library_editor_plugin.cpp -msgid "Download for this asset is already in progress!" -msgstr "æ¤èµ„æºæ–‡ä»¶æ£åœ¨ä¸‹è½½ä¸ï¼" - -#: editor/asset_library_editor_plugin.cpp -msgid "first" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "prev" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "next" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "last" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "All" -msgstr "全部" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/property_selector.cpp editor/quick_open.cpp -#: editor/settings_config_dialog.cpp -msgid "Search:" -msgstr "æœç´¢:" - -#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Search" -msgstr "æœç´¢" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/project_manager.cpp -msgid "Import" -msgstr "导入" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Plugins" -msgstr "æ’ä»¶" - -#: editor/asset_library_editor_plugin.cpp -msgid "Sort:" -msgstr "排åº:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Reverse" -msgstr "å选" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Category:" -msgstr "分类:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Site:" -msgstr "站点:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "支æŒ.." - -#: editor/asset_library_editor_plugin.cpp -msgid "Official" -msgstr "官方" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -msgid "Community" -msgstr "社区" - -#: editor/asset_library_editor_plugin.cpp -msgid "Testing" -msgstr "测试" - -#: editor/asset_library_editor_plugin.cpp -msgid "Assets ZIP File" -msgstr "ZIP资æºåŒ…" - -#: editor/call_dialog.cpp -msgid "Method List For '%s':" -msgstr "'%s'的方法列表:" - -#: editor/call_dialog.cpp modules/visual_script/visual_script_editor.cpp -msgid "Call" -msgstr "调用到" - -#: editor/call_dialog.cpp -msgid "Method List:" -msgstr "方法列表:" - -#: editor/call_dialog.cpp -msgid "Arguments:" -msgstr "傿•°:" - -#: editor/call_dialog.cpp -msgid "Return:" -msgstr "返回:" - #: editor/code_editor.cpp msgid "Go to Line" msgstr "转到行" @@ -657,6 +403,14 @@ msgstr "å…¨å—匹é…" msgid "Selection Only" msgstr "仅选ä¸" +#: editor/code_editor.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp +msgid "Search" +msgstr "æœç´¢" + #: editor/code_editor.cpp editor/editor_help.cpp msgid "Find" msgstr "查找" @@ -689,11 +443,11 @@ msgstr "æ›´æ¢æ—¶æç¤º" msgid "Skip" msgstr "跳过" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom In" msgstr "放大" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom Out" msgstr "缩å°" @@ -760,6 +514,20 @@ msgstr "å»¶æ—¶" msgid "Oneshot" msgstr "啿¬¡" +#: editor/connections_dialog.cpp editor/dependency_editor.cpp +#: editor/export_template_manager.cpp +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Close" +msgstr "å…³é—" + #: editor/connections_dialog.cpp msgid "Connect" msgstr "连接" @@ -785,7 +553,7 @@ msgstr "连接事件。" msgid "Disconnect" msgstr "åˆ é™¤äº‹ä»¶è¿žæŽ¥" -#: editor/connections_dialog.cpp editor/node_dock.cpp +#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" msgstr "ä¿¡å·" @@ -802,12 +570,25 @@ msgstr "æ”¶è—:" msgid "Recent:" msgstr "最近文件:" +#: editor/create_dialog.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp +#: editor/quick_open.cpp editor/settings_config_dialog.cpp +msgid "Search:" +msgstr "æœç´¢:" + #: editor/create_dialog.cpp editor/editor_help.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp #: editor/quick_open.cpp msgid "Matches:" msgstr "匹é…项:" +#: editor/create_dialog.cpp editor/editor_help.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp +#: editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "æè¿°:" + #: editor/dependency_editor.cpp msgid "Search Replacement For:" msgstr "æœç´¢æ›¿æ¢:" @@ -863,6 +644,10 @@ msgid "Owners Of:" msgstr "拥有者:" #: editor/dependency_editor.cpp +msgid "Remove selected files from the project? (no undo)" +msgstr "确定从项目ä¸åˆ é™¤æ–‡ä»¶ï¼Ÿï¼ˆæ¤æ“ä½œæ— æ³•æ’¤é”€ï¼‰" + +#: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" @@ -870,8 +655,9 @@ msgid "" msgstr "è¦åˆ é™¤çš„æ–‡ä»¶è¢«å…¶ä»–èµ„æºæ‰€ä¾èµ–,ä»ç„¶è¦åˆ 除å—ï¼Ÿï¼ˆæ— æ³•æ’¤é”€ï¼‰" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (no undo)" -msgstr "确定从项目ä¸åˆ é™¤æ–‡ä»¶ï¼Ÿï¼ˆæ¤æ“ä½œæ— æ³•æ’¤é”€ï¼‰" +#, fuzzy +msgid "Cannot remove:\n" +msgstr "æ— æ³•è§£æž." #: editor/dependency_editor.cpp msgid "Error loading:" @@ -937,19 +723,12 @@ msgid "Godot Engine contributors" msgstr "Godot引擎贡献者" #: editor/editor_about.cpp -#, fuzzy -msgid "Authors" -msgstr "作者:" - -#: editor/editor_about.cpp -#, fuzzy msgid "Project Founders" -msgstr "项目管ç†å™¨" +msgstr "项目创始人" #: editor/editor_about.cpp -#, fuzzy msgid "Lead Developer" -msgstr "å¼€å‘者" +msgstr "主è¦å¼€å‘者" #: editor/editor_about.cpp editor/project_manager.cpp msgid "Project Manager" @@ -960,118 +739,153 @@ msgid "Developers" msgstr "å¼€å‘者" #: editor/editor_about.cpp -msgid "License" +msgid "Authors" +msgstr "作者" + +#: editor/editor_about.cpp +msgid "Platinum Sponsors" msgstr "" #: editor/editor_about.cpp -msgid "Thirdparty License" +msgid "Gold Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Mini Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Silver Donors" +msgstr "" + +#: editor/editor_about.cpp +#, fuzzy +msgid "Bronze Donors" +msgstr "æ‹·è´åˆ°ä¸‹ä¸€è¡Œ" + +#: editor/editor_about.cpp +msgid "Donors" msgstr "" #: editor/editor_about.cpp +msgid "License" +msgstr "许å¯è¯" + +#: editor/editor_about.cpp +msgid "Thirdparty License" +msgstr "第三方许å¯è¯" + +#: editor/editor_about.cpp msgid "" "Godot Engine relies on a number of thirdparty free and open source " "libraries, all compatible with the terms of its MIT license. The following " "is an exhaustive list of all such thirdparty components with their " "respective copyright statements and license terms." msgstr "" +"Godot引擎ä¾èµ–第三方开æºä»£ç 库,全部符åˆMIT 许å¯è¯çš„æ¡æ¬¾ã€‚ä¸‹é¢åˆ—出所有第三方组" +"件相关的版æƒå£°æ˜Žå’Œè®¸å¯åè®®æ¡æ¬¾ã€‚" #: editor/editor_about.cpp -#, fuzzy msgid "All Components" -msgstr "内容:" +msgstr "所有组件" #: editor/editor_about.cpp -#, fuzzy msgid "Components" -msgstr "内容:" +msgstr "组件" #: editor/editor_about.cpp msgid "Licenses" -msgstr "" +msgstr "许å¯è¯" #: editor/editor_asset_installer.cpp editor/project_manager.cpp msgid "Error opening package file, not in zip format." -msgstr "" +msgstr "打开压缩包出错,éžzipæ ¼å¼ã€‚" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "Uncompressing Assets" -msgstr "ä¸åŽ‹ç¼©" +msgstr "æ— åŽ‹ç¼©èµ„æº" #: editor/editor_asset_installer.cpp editor/project_manager.cpp msgid "Package Installed Successfully!" msgstr "软件包安装æˆåŠŸï¼" #: editor/editor_asset_installer.cpp -#, fuzzy +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Success!" +msgstr "完æˆï¼" + +#: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp +msgid "Install" +msgstr "安装" + +#: editor/editor_asset_installer.cpp msgid "Package Installer" -msgstr "软件包安装æˆåŠŸï¼" +msgstr "程åºåŒ…安装程åº" #: editor/editor_audio_buses.cpp msgid "Speakers" -msgstr "" +msgstr "扬声器" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Add Effect" -msgstr "æ·»åŠ äº‹ä»¶" +msgstr "æ·»åŠ æ•ˆæžœ" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Rename Audio Bus" -msgstr "打开音频Bus布局" +msgstr "é‡å‘½å音频总线(Audio Bus)" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Toggle Audio Bus Solo" -msgstr "打开音频Bus布局" +msgstr "切æ¢éŸ³é¢‘独å¥" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Toggle Audio Bus Mute" -msgstr "打开音频Bus布局" +msgstr "切æ¢éŸ³é¢‘é™éŸ³" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Bypass Effects" -msgstr "" +msgstr "切æ¢éŸ³é¢‘æ—通效果" #: editor/editor_audio_buses.cpp msgid "Select Audio Bus Send" -msgstr "" +msgstr "选择音频å‘逿€»çº¿" #: editor/editor_audio_buses.cpp msgid "Add Audio Bus Effect" -msgstr "" +msgstr "æ·»åŠ éŸ³é¢‘æ€»çº¿æ•ˆæžœ" #: editor/editor_audio_buses.cpp msgid "Move Bus Effect" -msgstr "" +msgstr "移动总线效果" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Delete Bus Effect" -msgstr "åˆ é™¤é€‰æ‹©çš„èŠ‚ç‚¹" +msgstr "åˆ é™¤éŸ³é¢‘æ€»çº¿æ•ˆæžœ" #: editor/editor_audio_buses.cpp msgid "Audio Bus, Drag and Drop to rearrange." -msgstr "" - -#: editor/editor_audio_buses.cpp -#, fuzzy -msgid "Bus options" -msgstr "å场景选项" +msgstr "éŸ³é¢‘æ€»çº¿ï¼Œæ‹–æ”¾é‡æ–°æŽ’列。" #: editor/editor_audio_buses.cpp msgid "Solo" -msgstr "" +msgstr "独å¥" #: editor/editor_audio_buses.cpp msgid "Mute" -msgstr "" +msgstr "é™éŸ³" #: editor/editor_audio_buses.cpp msgid "Bypass" -msgstr "" +msgstr "æ—通" + +#: editor/editor_audio_buses.cpp +msgid "Bus options" +msgstr "音频总线选项" #: editor/editor_audio_buses.cpp editor/plugins/tile_map_editor_plugin.cpp #: editor/scene_tree_dock.cpp @@ -1080,32 +894,37 @@ msgstr "æ‹·è´" #: editor/editor_audio_buses.cpp #, fuzzy +msgid "Reset Volume" +msgstr "é‡ç½®ç¼©æ”¾" + +#: editor/editor_audio_buses.cpp msgid "Delete Effect" -msgstr "åˆ é™¤é€‰æ‹©çš„èŠ‚ç‚¹" +msgstr "åˆ é™¤æ•ˆæžœ" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Add Audio Bus" -msgstr "æ·»åŠ Bus" +msgstr "æ·»åŠ éŸ³é¢‘æ€»çº¿ï¼ˆAudio Bus)" #: editor/editor_audio_buses.cpp msgid "Master bus can't be deleted!" -msgstr "" +msgstr "ä¸èƒ½åˆ 除主音频总线!" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Delete Audio Bus" -msgstr "åˆ é™¤å¸ƒå±€" +msgstr "åˆ é™¤éŸ³é¢‘æ€»çº¿" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Duplicate Audio Bus" -msgstr "å¤åˆ¶åŠ¨ç”»" +msgstr "å¤åˆ¶éŸ³é¢‘总线" #: editor/editor_audio_buses.cpp #, fuzzy +msgid "Reset Bus Volume" +msgstr "é‡ç½®ç¼©æ”¾" + +#: editor/editor_audio_buses.cpp msgid "Move Audio Bus" -msgstr "移动动作" +msgstr "移动音频总线" #: editor/editor_audio_buses.cpp msgid "Save Audio Bus Layout As.." @@ -1121,32 +940,28 @@ msgstr "打开音频Bus布局" #: editor/editor_audio_buses.cpp msgid "There is no 'res://default_bus_layout.tres' file." -msgstr "" +msgstr "ä¸å˜åœ¨'res://default_bus_layout.tres'文件。" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Invalid file, not an audio bus layout." -msgstr "" -"文件扩展åä¸åˆæ³•\n" -"请使用.font文件。" +msgstr "æ— æ•ˆæ–‡ä»¶,ä¸å˜åœ¨éŸ³é¢‘总线布局。" #: editor/editor_audio_buses.cpp msgid "Add Bus" msgstr "æ·»åŠ Bus" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Create a new Bus Layout." -msgstr "创建资æº" +msgstr "创建一个新的总线布局。" -#: editor/editor_audio_buses.cpp editor/script_create_dialog.cpp +#: editor/editor_audio_buses.cpp editor/property_editor.cpp +#: editor/script_create_dialog.cpp msgid "Load" msgstr "åŠ è½½" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Load an existing Bus Layout." -msgstr "从ç£ç›˜ä¸åŠ è½½èµ„æºå¹¶ç¼–辑。" +msgstr "åŠ è½½çŽ°æœ‰çš„æ€»çº¿å¸ƒå±€ã€‚" #: editor/editor_audio_buses.cpp #: editor/plugins/animation_player_editor_plugin.cpp @@ -1154,18 +969,16 @@ msgid "Save As" msgstr "å¦å˜ä¸º" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Save this Bus Layout to a file." msgstr "将音频Bus布局ä¿å˜ä¸º.." #: editor/editor_audio_buses.cpp editor/import_dock.cpp -#, fuzzy msgid "Load Default" -msgstr "默认" +msgstr "åŠ è½½é»˜è®¤" #: editor/editor_audio_buses.cpp msgid "Load the default Bus Layout." -msgstr "" +msgstr "åŠ è½½é»˜è®¤æ€»çº¿å¸ƒå±€ã€‚" #: editor/editor_autoload_settings.cpp msgid "Invalid name." @@ -1209,7 +1022,7 @@ msgstr "Autoload '%s'å·²å˜åœ¨ï¼" #: editor/editor_autoload_settings.cpp msgid "Rename Autoload" -msgstr "移除Autoload" +msgstr "é‡å‘½åè‡ªåŠ¨åŠ è½½è„šæœ¬" #: editor/editor_autoload_settings.cpp msgid "Toggle AutoLoad Globals" @@ -1232,7 +1045,7 @@ msgid "Rearrange Autoloads" msgstr "釿ޒåºAutoload" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp scene/gui/file_dialog.cpp +#: scene/gui/file_dialog.cpp msgid "Path:" msgstr "路径:" @@ -1240,9 +1053,7 @@ msgstr "路径:" msgid "Node Name:" msgstr "节点åç§°:" -#: editor/editor_autoload_settings.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp editor/project_manager.cpp +#: editor/editor_autoload_settings.cpp editor/project_manager.cpp msgid "Name" msgstr "åç§°" @@ -1267,27 +1078,27 @@ msgid "Updating scene.." msgstr "更新场景ä¸.." #: editor/editor_dir_dialog.cpp -#, fuzzy msgid "Please select a base directory first" -msgstr "请先ä¿å˜åœºæ™¯ã€‚" +msgstr "请先选择一个目录" #: editor/editor_dir_dialog.cpp msgid "Choose a Directory" msgstr "选择目录" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Create Folder" msgstr "新建目录" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: editor/editor_plugin_settings.cpp editor/plugins/theme_editor_plugin.cpp -#: editor/project_export.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp +#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp +#: scene/gui/file_dialog.cpp msgid "Name:" msgstr "åç§°:" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Could not create folder." msgstr "æ— æ³•åˆ›å»ºç›®å½•ã€‚" @@ -1305,31 +1116,7 @@ msgstr "打包ä¸" #: editor/editor_export.cpp platform/javascript/export/export.cpp msgid "Template file not found:\n" -msgstr "找ä¸åˆ°æ¨¡æ¿æ–‡ä»¶:" - -#: editor/editor_export.cpp -msgid "Added:" -msgstr "å·²æ·»åŠ :" - -#: editor/editor_export.cpp -msgid "Removed:" -msgstr "已移除:" - -#: editor/editor_export.cpp -msgid "Error saving atlas:" -msgstr "ä¿å˜è´´å›¾é›†å‡ºé”™:" - -#: editor/editor_export.cpp -msgid "Could not save atlas subtexture:" -msgstr "æ— æ³•ä¿å˜ç²¾çµé›†å贴图:" - -#: editor/editor_export.cpp -msgid "Exporting for %s" -msgstr "æ£åœ¨å¯¼å‡º %s" - -#: editor/editor_export.cpp -msgid "Setting Up.." -msgstr "é…ç½®.." +msgstr "找ä¸åˆ°æ¨¡æ¿æ–‡ä»¶:\n" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" @@ -1415,6 +1202,11 @@ msgstr "å‘上移动收è—" msgid "Move Favorite Down" msgstr "å‘下移动收è—" +#: editor/editor_file_dialog.cpp +#, fuzzy +msgid "Go to parent folder" +msgstr "æ— æ³•åˆ›å»ºç›®å½•ã€‚" + #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Directories & Files:" msgstr "目录|文件:" @@ -1457,6 +1249,10 @@ msgstr "类型列表:" msgid "Search Classes" msgstr "æœç´¢ç±»åž‹" +#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +msgid "Top" +msgstr "顶部" + #: editor/editor_help.cpp editor/property_editor.cpp msgid "Class:" msgstr "ç±»:" @@ -1473,15 +1269,30 @@ msgstr "派生类:" msgid "Brief Description:" msgstr "简介:" +#: editor/editor_help.cpp +#, fuzzy +msgid "Members" +msgstr "æˆå‘˜ï¼š" + #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "æˆå‘˜ï¼š" #: editor/editor_help.cpp +#, fuzzy +msgid "Public Methods" +msgstr "公共方法:" + +#: editor/editor_help.cpp msgid "Public Methods:" msgstr "公共方法:" #: editor/editor_help.cpp +#, fuzzy +msgid "GUI Theme Items" +msgstr "GUI主题:" + +#: editor/editor_help.cpp msgid "GUI Theme Items:" msgstr "GUI主题:" @@ -1491,53 +1302,85 @@ msgstr "事件:" #: editor/editor_help.cpp #, fuzzy +msgid "Enumerations" +msgstr "枚举:" + +#: editor/editor_help.cpp msgid "Enumerations:" -msgstr "动画" +msgstr "枚举:" #: editor/editor_help.cpp msgid "enum " -msgstr "" +msgstr "枚举 " + +#: editor/editor_help.cpp +#, fuzzy +msgid "Constants" +msgstr "常é‡:" #: editor/editor_help.cpp msgid "Constants:" msgstr "常é‡:" #: editor/editor_help.cpp +#, fuzzy +msgid "Description" +msgstr "æè¿°:" + +#: editor/editor_help.cpp +#, fuzzy +msgid "Properties" +msgstr "属性:" + +#: editor/editor_help.cpp msgid "Property Description:" msgstr "属性æè¿°ï¼š" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this property. Please help us by " +"[color=$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp +#, fuzzy +msgid "Methods" +msgstr "方法列表:" + +#: editor/editor_help.cpp msgid "Method Description:" msgstr "方法æè¿°:" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this method. Please help us by [color=" +"$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp msgid "Search Text" msgstr "æœç´¢æ–‡æœ¬" #: editor/editor_log.cpp -#, fuzzy msgid "Output:" -msgstr " 输出:" +msgstr "输出:" #: editor/editor_log.cpp editor/plugins/animation_tree_editor_plugin.cpp -#: editor/plugins/rich_text_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_editor_debugger.cpp scene/gui/line_edit.cpp -#: scene/gui/text_edit.cpp +#: editor/property_editor.cpp editor/script_editor_debugger.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Clear" msgstr "清除" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Error saving resource!" msgstr "ä¿å˜èµ„æºå‡ºé”™ï¼" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Save Resource As.." msgstr "资æºå¦å˜ä¸º.." -#: editor/editor_node.cpp editor/export_template_manager.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "I see.." msgstr "好å§.." @@ -1554,6 +1397,30 @@ msgid "Error while saving." msgstr "ä¿å˜å‡ºé”™ã€‚" #: editor/editor_node.cpp +#, fuzzy +msgid "Can't open '%s'." +msgstr "æ— æ³•å¯¹'..'引用æ“作" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Error while parsing '%s'." +msgstr "ä¿å˜å‡ºé”™ã€‚" + +#: editor/editor_node.cpp +msgid "Unexpected end of file '%s'." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Missing '%s' or its dependencies." +msgstr "场景'%s'çš„ä¾èµ–å·²è¢«ç ´å:" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Error while loading '%s'." +msgstr "ä¿å˜å‡ºé”™ã€‚" + +#: editor/editor_node.cpp msgid "Saving Scene" msgstr "æ£åœ¨ä¿å˜åœºæ™¯" @@ -1566,7 +1433,6 @@ msgid "Creating Thumbnail" msgstr "创建缩略图" #: editor/editor_node.cpp -#, fuzzy msgid "This operation can't be done without a tree root." msgstr "æ¤æ“ä½œå¿…é¡»åœ¨æ‰“å¼€ä¸€ä¸ªåœºæ™¯åŽæ‰èƒ½æ‰§è¡Œã€‚" @@ -1612,6 +1478,33 @@ msgid "Restored default layout to base settings." msgstr "é‡ç½®ä¸ºé»˜è®¤å¸ƒå±€è®¾ç½®ã€‚" #: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was imported, so it's not editable.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was instanced or inherited.\n" +"Changes to it will not be kept when saving the current scene." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource was imported, so it's not editable. Change its settings in the " +"import panel and then re-import." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This scene was imported, so changes to it will not be kept.\n" +"Instancing it or inheriting will allow making changes to it.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp msgid "Copy Params" msgstr "æ‹·è´å‚æ•°" @@ -1633,7 +1526,7 @@ msgstr "使之内置" #: editor/editor_node.cpp msgid "Make Sub-Resources Unique" -msgstr "使å资æºå”¯ä¸€åŒ–" +msgstr "转æ¢ä¸ºç‹¬ç«‹å资æº" #: editor/editor_node.cpp msgid "Open in Help" @@ -1695,13 +1588,12 @@ msgid "Quick Open Script.." msgstr "快速打开脚本.." #: editor/editor_node.cpp -#, fuzzy msgid "Save & Close" -msgstr "ä¿å˜æ–‡ä»¶" +msgstr "ä¿å˜å¹¶å…³é—" #: editor/editor_node.cpp msgid "Save changes to '%s' before closing?" -msgstr "" +msgstr "在关é—å‰ä¿å˜æ›´æ”¹åˆ° %s å—?" #: editor/editor_node.cpp msgid "Save Scene As.." @@ -1725,16 +1617,15 @@ msgstr "æ¤æ“ä½œå¿…é¡»åœ¨æ‰“å¼€ä¸€ä¸ªåœºæ™¯åŽæ‰èƒ½æ‰§è¡Œã€‚" #: editor/editor_node.cpp msgid "Export Mesh Library" -msgstr "导出MeshLibrary" +msgstr "å¯¼å‡ºç½‘æ ¼åº“(Mesh Library)" #: editor/editor_node.cpp msgid "Export Tile Set" -msgstr "å¯¼å‡ºç –å—集" +msgstr "å¯¼å‡ºç –å—集(Tile Set)" #: editor/editor_node.cpp -#, fuzzy msgid "This operation can't be done without a selected node." -msgstr "æ¤æ“ä½œå¿…é¡»åœ¨æ‰“å¼€ä¸€ä¸ªåœºæ™¯åŽæ‰èƒ½æ‰§è¡Œã€‚" +msgstr "æ¤æ“作必须先选择一个nodeæ‰èƒ½æ‰§è¡Œã€‚" #: editor/editor_node.cpp msgid "Current scene not saved. Open anyway?" @@ -1765,21 +1656,25 @@ msgid "Exit the editor?" msgstr "确定è¦é€€å‡ºç¼–辑器å—?" #: editor/editor_node.cpp -#, fuzzy msgid "Open Project Manager?" -msgstr "项目管ç†å™¨" +msgstr "打开项目管ç†å™¨ï¼Ÿ" #: editor/editor_node.cpp -#, fuzzy msgid "Save & Quit" -msgstr "ä¿å˜æ–‡ä»¶" +msgstr "ä¿å˜åŽé€€å‡º" #: editor/editor_node.cpp msgid "Save changes to the following scene(s) before quitting?" -msgstr "" +msgstr "以下场景在退出å‰ä¿å˜æ›´æ”¹å—?" #: editor/editor_node.cpp msgid "Save changes the following scene(s) before opening Project Manager?" +msgstr "在打开项目管ç†å™¨ä¹‹å‰ä¿å˜æ›´æ”¹å—?" + +#: editor/editor_node.cpp +msgid "" +"This option is deprecated. Situations where refresh must be forced are now " +"considered a bug. Please report." msgstr "" #: editor/editor_node.cpp @@ -1788,19 +1683,19 @@ msgstr "选择主场景" #: editor/editor_node.cpp msgid "Unable to enable addon plugin at: '" -msgstr "" +msgstr "æ— æ³•å¯ç”¨æ’ä»¶: '" #: editor/editor_node.cpp msgid "' parsing of config failed." -msgstr "" +msgstr "' è§£æžé…置失败。" #: editor/editor_node.cpp msgid "Unable to find script field for addon plugin at: 'res://addons/" -msgstr "" +msgstr "在æ’ä»¶ç›®å½•ä¸æ²¡æœ‰æ‰¾åˆ°è„šæœ¬: 'res://addons/" #: editor/editor_node.cpp msgid "Unable to load addon script from path: '" -msgstr "" +msgstr "æ— æ³•ä»Žè·¯å¾„åŠ è½½æ’件脚本: '" #: editor/editor_node.cpp msgid "" @@ -1808,12 +1703,12 @@ msgid "" "To make changes to it, a new inherited scene can be created." msgstr "" "自动导入的场景'ï¼…s'æ— æ³•ä¿®æ”¹ã€‚\n" -"è¦è¿›è¡Œæ›´æ”¹ï¼Œå¯ä»¥åˆ›å»ºä¸€ä¸ªæ–°çš„场景继承自它。" +"å¦‚è¦æ›´æ”¹ï¼Œè¯·åˆ›å»ºä¸€ä¸ªæ–°çš„备份场景。" #: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Ugh" -msgstr "é¢" +msgstr "呃" #: editor/editor_node.cpp msgid "" @@ -1823,14 +1718,15 @@ msgstr "" "åŠ è½½åœºæ™¯å‡ºé”™ï¼Œåœºæ™¯å¿…é¡»æ”¾åœ¨é¡¹ç›®ç›®å½•ä¸‹ã€‚è¯·å°è¯•使用'导入'èœå•导入æ¤åœºæ™¯åŽå†è¯•。" #: editor/editor_node.cpp -msgid "Error loading scene." -msgstr "åŠ è½½åœºæ™¯å‡ºé”™ã€‚" - -#: editor/editor_node.cpp msgid "Scene '%s' has broken dependencies:" msgstr "场景'%s'çš„ä¾èµ–å·²è¢«ç ´å:" #: editor/editor_node.cpp +#, fuzzy +msgid "Clear Recent Scenes" +msgstr "清ç†å½“剿–‡ä»¶" + +#: editor/editor_node.cpp msgid "Save Layout" msgstr "ä¿å˜å¸ƒå±€" @@ -1860,11 +1756,10 @@ msgid "Distraction Free Mode" msgstr "æ— å¹²æ‰°æ¨¡å¼" #: editor/editor_node.cpp -#, fuzzy msgid "Toggle distraction-free mode." -msgstr "æ— å¹²æ‰°æ¨¡å¼" +msgstr "åˆ‡æ¢æ— 干扰模å¼ã€‚" -#: editor/editor_node.cpp editor/io_plugins/editor_scene_import_plugin.cpp +#: editor/editor_node.cpp msgid "Scene" msgstr "场景" @@ -2090,7 +1985,11 @@ msgstr "é—®ç”" #: editor/editor_node.cpp msgid "Issue Tracker" -msgstr "" +msgstr "问题跟踪器" + +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +msgid "Community" +msgstr "社区" #: editor/editor_node.cpp msgid "About" @@ -2100,7 +1999,7 @@ msgstr "关于" msgid "Play the project." msgstr "è¿è¡Œæ¤é¡¹ç›®ï¼ˆF5)。" -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Play" msgstr "æ’æ”¾" @@ -2116,7 +2015,7 @@ msgstr "æš‚åœè¿è¡Œåœºæ™¯" msgid "Stop the scene." msgstr "åœæ¢è¿è¡Œåœºæ™¯ã€‚" -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Stop" msgstr "åœæ¢" @@ -2189,6 +2088,16 @@ msgid "Object properties." msgstr "对象属性。" #: editor/editor_node.cpp +#, fuzzy +msgid "Changes may be lost!" +msgstr "修改图片分组" + +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Import" +msgstr "导入" + +#: editor/editor_node.cpp msgid "FileSystem" msgstr "文件系统" @@ -2202,15 +2111,7 @@ msgstr "输出" #: editor/editor_node.cpp msgid "Don't Save" -msgstr "" - -#: editor/editor_node.cpp editor/editor_reimport_dialog.cpp -msgid "Re-Import" -msgstr "釿–°å¯¼å…¥" - -#: editor/editor_node.cpp editor/editor_plugin_settings.cpp -msgid "Update" -msgstr "æ›´æ–°" +msgstr "ä¸ä¿å˜" #: editor/editor_node.cpp msgid "Import Templates From ZIP File" @@ -2237,9 +2138,8 @@ msgid "Open & Run a Script" msgstr "打开并è¿è¡Œè„šæœ¬" #: editor/editor_node.cpp -#, fuzzy msgid "New Inherited" -msgstr "从现有场景ä¸åˆ›å»º.." +msgstr "从现有场景ä¸åˆ›å»º" #: editor/editor_node.cpp msgid "Load Errors" @@ -2273,11 +2173,29 @@ msgstr "打开下一个编辑器" msgid "Open the previous Editor" msgstr "打开上一个编辑器" +#: editor/editor_plugin.cpp +#, fuzzy +msgid "Creating Mesh Previews" +msgstr "创建 Mesh(ç½‘æ ¼) 库" + +#: editor/editor_plugin.cpp +msgid "Thumbnail.." +msgstr "缩略图.." + #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" msgstr "已安装æ’ä»¶:" #: editor/editor_plugin_settings.cpp +msgid "Update" +msgstr "æ›´æ–°" + +#: editor/editor_plugin_settings.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Version:" +msgstr "版本:" + +#: editor/editor_plugin_settings.cpp msgid "Author:" msgstr "作者:" @@ -2311,7 +2229,7 @@ msgstr "渲染速度" #: editor/editor_profiler.cpp msgid "Fixed Frame %" -msgstr "物ç†é€Ÿåº¦" +msgstr "固定帧速率 %" #: editor/editor_profiler.cpp editor/script_editor_debugger.cpp msgid "Time:" @@ -2329,35 +2247,17 @@ msgstr "自身" msgid "Frame #:" msgstr "帧åºå·:" -#: editor/editor_reimport_dialog.cpp -msgid "Please wait for scan to complete." -msgstr "扫æä¸ï¼Œè¯·ç¨åŽ..." - -#: editor/editor_reimport_dialog.cpp -msgid "Current scene must be saved to re-import." -msgstr "需è¦å…ˆä¿å˜å½“å‰åœºæ™¯æ‰èƒ½é‡æ–°å¯¼å…¥ã€‚" - -#: editor/editor_reimport_dialog.cpp -msgid "Save & Re-Import" -msgstr "ä¿å˜å¹¶é‡æ–°å¯¼å…¥" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Importing" -msgstr "釿–°å¯¼å…¥" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Import Changed Resources" -msgstr "釿–°å¯¼å…¥æ”¹å˜çš„资æº" - #: editor/editor_run_native.cpp msgid "Select device from the list" -msgstr "" +msgstr "从列表ä¸é€‰æ‹©è®¾å¤‡" #: editor/editor_run_native.cpp msgid "" "No runnable export preset found for this platform.\n" "Please add a runnable preset in the export menu." msgstr "" +"没有这个平å°çš„导出é…置。\n" +"请在导出èœå•䏿·»åŠ é…置。" #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." @@ -2425,7 +2325,7 @@ msgstr "(当å‰)" #: editor/export_template_manager.cpp msgid "Remove template version '%s'?" -msgstr "移除版本为 '%s' 的模æ¿" +msgstr "移除版本为 '%s' 的模æ¿?" #: editor/export_template_manager.cpp msgid "Can't open export templates zip." @@ -2447,7 +2347,7 @@ msgstr "模æ¿ä¸æ²¡æœ‰æ‰¾åˆ°version.txt文件。" #: editor/export_template_manager.cpp msgid "Error creating path for templates:\n" -msgstr "æ— æ³•å°†æ¨¡æ¿ä¿å˜åˆ°ä»¥ä¸‹æ–‡ä»¶:" +msgstr "æ— æ³•å°†æ¨¡æ¿ä¿å˜åˆ°ä»¥ä¸‹æ–‡ä»¶:\n" #: editor/export_template_manager.cpp msgid "Extracting Export Templates" @@ -2458,10 +2358,6 @@ msgid "Importing:" msgstr "导入:" #: editor/export_template_manager.cpp -msgid "Loading Export Templates" -msgstr "æ£åœ¨åŠ è½½å¯¼å‡ºæ¨¡æ¿" - -#: editor/export_template_manager.cpp msgid "Current Version:" msgstr "当å‰ç‰ˆæœ¬:" @@ -2491,63 +2387,82 @@ msgstr "æ— æ³•ä»¥å¯å†™æ–¹å¼æ‰“å¼€file_type_cache.cchï¼" #: editor/filesystem_dock.cpp msgid "Cannot navigate to '" -msgstr "æ— æ³•å¯¼èˆªåˆ° " +msgstr "æ— æ³•å¯¼èˆªåˆ° '" + +#: editor/filesystem_dock.cpp +msgid "View items as a grid of thumbnails" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "View items as a list" +msgstr "" #: editor/filesystem_dock.cpp -#, fuzzy msgid "" "\n" -"Status: Needs Re-Import" -msgstr "ä¿å˜å¹¶é‡æ–°å¯¼å…¥" +"Status: Import of file failed. Please fix file and reimport manually." +msgstr "" #: editor/filesystem_dock.cpp -#, fuzzy msgid "" "\n" "Source: " -msgstr "æº:" +msgstr "" +"\n" +"æº: " + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Cannot move/rename resources root." +msgstr "æ— æ³•åŠ è½½/å¤„ç†æºå—体。" #: editor/filesystem_dock.cpp -msgid "Same source and destination files, doing nothing." -msgstr "æºæ–‡ä»¶å’Œç›®æ ‡æ–‡ä»¶ç›¸åŒï¼Œæ“作忽略。" +#, fuzzy +msgid "Cannot move a folder into itself.\n" +msgstr "ä¸å…许导入文件本身:" #: editor/filesystem_dock.cpp -msgid "Target file exists, can't overwrite. Delete first." -msgstr "" +#, fuzzy +msgid "Error moving:\n" +msgstr "移动目录出错:\n" #: editor/filesystem_dock.cpp -msgid "Same source and destination paths, doing nothing." -msgstr "æºè·¯å¾„å’Œç›®æ ‡è·¯å¾„ç›¸åŒï¼Œæ“作忽略。" +#, fuzzy +msgid "Unable to update dependencies:\n" +msgstr "场景'%s'çš„ä¾èµ–å·²è¢«ç ´å:" #: editor/filesystem_dock.cpp -msgid "Can't move directories to within themselves." -msgstr "æ— æ³•å°†ç›®å½•ç§»åŠ¨åˆ°è‡ªèº«ä¸‹ã€‚" +msgid "No name provided" +msgstr "" #: editor/filesystem_dock.cpp -msgid "Can't rename deps for:\n" +msgid "Provided name contains invalid characters" msgstr "" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Error moving file:\n" -msgstr "åŠ è½½å›¾ç‰‡å‡ºé”™:" +msgid "No name provided." +msgstr "移动或é‡å‘½å.." #: editor/filesystem_dock.cpp #, fuzzy -msgid "Error moving dir:\n" -msgstr "导入出错:" +msgid "Name contains invalid characters." +msgstr "å—ç¬¦åˆæ³•:" #: editor/filesystem_dock.cpp -msgid "Can't operate on '..'" -msgstr "æ— æ³•å¯¹'..'引用æ“作" +#, fuzzy +msgid "A file or folder with this name already exists." +msgstr "分组åç§°å·²å˜åœ¨ï¼" #: editor/filesystem_dock.cpp -msgid "Pick New Name and Location For:" -msgstr "选择新å称和路径:" +#, fuzzy +msgid "Renaming file:" +msgstr "é‡å‘½åå˜é‡" #: editor/filesystem_dock.cpp -msgid "No files selected!" -msgstr "没有选ä¸ä»»ä½•文件ï¼" +#, fuzzy +msgid "Renaming folder:" +msgstr "é‡å‘½å节点" #: editor/filesystem_dock.cpp msgid "Expand all" @@ -2558,40 +2473,38 @@ msgid "Collapse all" msgstr "收起所有" #: editor/filesystem_dock.cpp -msgid "Show In File Manager" -msgstr "在资æºç®¡ç†å™¨ä¸æ‰“å¼€" - -#: editor/filesystem_dock.cpp -msgid "Instance" -msgstr "创建实例节点" +msgid "Copy Path" +msgstr "æ‹·è´è·¯å¾„" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "编辑ä¾èµ–.." +#, fuzzy +msgid "Rename.." +msgstr "é‡å‘½å" #: editor/filesystem_dock.cpp -msgid "View Owners.." -msgstr "查看所有者.." +msgid "Move To.." +msgstr "移动.." #: editor/filesystem_dock.cpp -msgid "Copy Path" -msgstr "æ‹·è´è·¯å¾„" +#, fuzzy +msgid "New Folder.." +msgstr "新建目录" #: editor/filesystem_dock.cpp -msgid "Rename or Move.." -msgstr "移动或é‡å‘½å.." +msgid "Show In File Manager" +msgstr "在资æºç®¡ç†å™¨ä¸æ‰“å¼€" #: editor/filesystem_dock.cpp -msgid "Move To.." -msgstr "移动.." +msgid "Instance" +msgstr "创建实例节点" #: editor/filesystem_dock.cpp -msgid "Info" -msgstr "ä¿¡æ¯" +msgid "Edit Dependencies.." +msgstr "编辑ä¾èµ–.." #: editor/filesystem_dock.cpp -msgid "Re-Import.." -msgstr "釿–°å¯¼å…¥.." +msgid "View Owners.." +msgstr "查看所有者.." #: editor/filesystem_dock.cpp msgid "Previous Directory" @@ -2618,11 +2531,18 @@ msgid "" "Scanning Files,\n" "Please Wait.." msgstr "" +"æ‰«ææ–‡ä»¶ï¼Œ\n" +"请ç¨å€™ã€‚" #: editor/filesystem_dock.cpp msgid "Move" msgstr "移动" +#: editor/filesystem_dock.cpp editor/plugins/animation_tree_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Rename" +msgstr "é‡å‘½å" + #: editor/groups_editor.cpp msgid "Add to Group" msgstr "æ·»åŠ åˆ°åˆ†ç»„" @@ -2632,78 +2552,89 @@ msgid "Remove from Group" msgstr "从分组ä¸ç§»é™¤" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Import as Single Scene" -msgstr "导入场景.." +msgstr "导入为独立场景" + +#: editor/import/resource_importer_scene.cpp +#, fuzzy +msgid "Import with Separate Animations" +msgstr "导入独立æè´¨" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials" -msgstr "" +msgstr "导入独立æè´¨" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects" -msgstr "" +msgstr "导入独立物体" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects+Materials" -msgstr "" +msgstr "导入独立物体 + æè´¨" #: editor/import/resource_importer_scene.cpp #, fuzzy +msgid "Import with Separate Objects+Animations" +msgstr "导入独立物体 + æè´¨" + +#: editor/import/resource_importer_scene.cpp +#, fuzzy +msgid "Import with Separate Materials+Animations" +msgstr "导入独立æè´¨" + +#: editor/import/resource_importer_scene.cpp +#, fuzzy +msgid "Import with Separate Objects+Materials+Animations" +msgstr "导入独立物体 + æè´¨" + +#: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes" -msgstr "导入3D场景" +msgstr "导入多个场景" #: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes+Materials" -msgstr "" +msgstr "导入多个场景 + æè´¨" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Import Scene" msgstr "导入场景" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Importing Scene.." msgstr "导入场景.." #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Running Custom Script.." msgstr "执行自定义脚本.." #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Couldn't load post-import script:" msgstr "æ— æ³•è½½å…¥åŽå¯¼å…¥è„šæœ¬:" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Invalid/broken script for post-import (check console):" msgstr "åŽå¤„ç†è„šæœ¬è¢«æŸå或ä¸åˆæ³•(查看控制å°ï¼‰:" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Error running post-import script:" msgstr "åŽå¤„ç†è„šæœ¬è¿è¡Œå‘生错误:" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Saving.." msgstr "ä¿å˜ä¸..." #: editor/import_dock.cpp msgid "Set as Default for '%s'" -msgstr "" +msgstr "将默认设置为 '%s'" #: editor/import_dock.cpp msgid "Clear Default for '%s'" -msgstr "" +msgstr "清除默认'%s'" #: editor/import_dock.cpp msgid " Files" -msgstr "文件" +msgstr " 文件" #: editor/import_dock.cpp msgid "Import As:" @@ -2717,574 +2648,6 @@ msgstr "预设.." msgid "Reimport" msgstr "釿–°å¯¼å…¥" -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "No bit masks to import!" -msgstr "没有è¦å¯¼å…¥çš„bit masksï¼" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path is empty." -msgstr "ç›®æ ‡è·¯å¾„ä¸ºç©ºã€‚" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must be a complete resource path." -msgstr "ç›®æ ‡è·¯å¾„å¿…é¡»æ˜¯ä¸€ä¸ªå®Œæ•´çš„èµ„æºæ–‡ä»¶è·¯å¾„。" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must exist." -msgstr "ç›®æ ‡è·¯å¾„å¿…é¡»å˜åœ¨ã€‚" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Save path is empty!" -msgstr "ä¿å˜è·¯å¾„为空ï¼" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Import BitMasks" -msgstr "导入BitMask" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s):" -msgstr "æºè´´å›¾:" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Target Path:" -msgstr "ç›®æ ‡è·¯å¾„:" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Accept" -msgstr "接å—" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Bit Mask" -msgstr "使ީç (BitMask)" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No source font file!" -msgstr "请设置æºå—体文件ï¼" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No target font resource!" -msgstr "è¯·è®¾ç½®ç›®æ ‡å—体资æºï¼" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "" -"Invalid file extension.\n" -"Please use .font." -msgstr "" -"文件扩展åä¸åˆæ³•\n" -"请使用.font文件。" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Can't load/process source font." -msgstr "æ— æ³•åŠ è½½/å¤„ç†æºå—体。" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Couldn't save font." -msgstr "æ— æ³•ä¿å˜å—体。" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font:" -msgstr "æºå—体文件:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font Size:" -msgstr "æºå—体大å°:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Dest Resource:" -msgstr "ç›®æ ‡èµ„æº:" - -#: 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.\n" -"我能åžä¸‹çŽ»ç’ƒè€Œä¸ä¼¤èº«ä½“。" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Test:" -msgstr "测试:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Options:" -msgstr "选项:" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Font Import" -msgstr "导入å—体" - -#: 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 "æ¤æ–‡ä»¶å·²ç»æ˜¯ä¸€ä¸ªGodotçš„å—体文件,请æä¾›ä¸€ä¸ªä½å›¾å—体(BMFont)文件。" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Failed opening as BMFont file." -msgstr "打开ä½å›¾å—体失败。" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error initializing FreeType." -msgstr "åˆå§‹åŒ–FreeType出错。" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Unknown font format." -msgstr "未知的å—ä½“æ ¼å¼ã€‚" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error loading font." -msgstr "åŠ è½½å—体出错。" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Invalid font size." -msgstr "å—体大å°éžæ³•。" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Invalid font custom source." -msgstr "自定义å—ä½“æ–‡ä»¶éžæ³•。" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/plugins/theme_editor_plugin.cpp -msgid "Font" -msgstr "å—体" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "No meshes to import!" -msgstr "没有è¦å¯¼å…¥çš„Meshï¼" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Single Mesh Import" -msgstr "导入å•个Mesh" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Source Mesh(es):" -msgstr "æºMesh:" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Mesh" -msgstr "Mesh" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Surface %d" -msgstr "è¡¨é¢ %d" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "No samples to import!" -msgstr "没有音效è¦å¯¼å…¥ï¼" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Import Audio Samples" -msgstr "导入声音文件" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Source Sample(s):" -msgstr "æºéŸ³æ•ˆæ–‡ä»¶:" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Audio Sample" -msgstr "音效" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "New Clip" -msgstr "新片段" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Animation Options" -msgstr "动画选项" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Flags" -msgstr "æ ‡è®°" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Bake FPS:" -msgstr "烘培FPS:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Optimizer" -msgstr "优化" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Linear Error" -msgstr "最大线性误差" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angular Error" -msgstr "最大角度误差" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angle" -msgstr "最大角度" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Clips" -msgstr "片段" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Start(s)" -msgstr "起点" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "End(s)" -msgstr "终点" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Loop" -msgstr "循环" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Filters" -msgstr "ç›é€‰" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source path is empty." -msgstr "æºè·¯å¾„为空。" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't load post-import script." -msgstr "æ— æ³•è½½å…¥åŽå¯¼å…¥è„šæœ¬ã€‚" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Invalid/broken script for post-import." -msgstr "åŽå¯¼å…¥è„šæœ¬è¢«æŸå或ä¸åˆæ³•。" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Error importing scene." -msgstr "导入场景出错。" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import 3D Scene" -msgstr "导入3D场景" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source Scene:" -msgstr "æºåœºæ™¯:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Same as Target Scene" -msgstr "ä¸Žç›®æ ‡åœºæ™¯ç›¸åŒ" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Shared" -msgstr "共享的" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Target Texture Folder:" -msgstr "ç›®æ ‡è´´å›¾ç›®å½•:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Post-Process Script:" -msgstr "åŽå¤„ç†è„šæœ¬:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Custom Root Node Type:" -msgstr "è‡ªå®šä¹‰æ ¹èŠ‚ç‚¹ç±»åž‹:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Auto" -msgstr "自动" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Root Node Name:" -msgstr "节点åç§°:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "The Following Files are Missing:" -msgstr "找ä¸åˆ°ä¸‹åˆ—文件:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Anyway" -msgstr "ä»ç„¶å¯¼å…¥" - -#: editor/io_plugins/editor_scene_import_plugin.cpp scene/gui/dialogs.cpp -msgid "Cancel" -msgstr "å–æ¶ˆ" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import & Open" -msgstr "导入|打开" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Edited scene has not been saved, open imported scene anyway?" -msgstr "æ£åœ¨ç¼–辑的场景尚未ä¿å˜ï¼Œä»ç„¶è¦æ‰“开导入的场景å—?" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Image:" -msgstr "导入图片:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Can't import a file over itself:" -msgstr "ä¸å…许导入文件本身:" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't localize path: %s (already local)" -msgstr "æ— æ³•æœ¬åœ°åŒ–è·¯å¾„:%s (å·²ç»æ˜¯æœ¬åœ°è·¯å¾„)" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "3D Scene Animation" -msgstr "3D场景动画" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Uncompressed" -msgstr "ä¸åŽ‹ç¼©" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossless (PNG)" -msgstr "æ— æŸåŽ‹ç¼©ï¼ˆPNG)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossy (WebP)" -msgstr "有æŸåŽ‹ç¼©ï¼ˆWebP)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress (VRAM)" -msgstr "VRAM压缩" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Format" -msgstr "çº¹ç†æ ¼å¼" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Compression Quality (WebP):" -msgstr "高质é‡ï¼ˆWebP)压缩方å¼:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Options" -msgstr "纹ç†é€‰é¡¹" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Please specify some files!" -msgstr "è¯·æ·»åŠ æ–‡ä»¶ï¼" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "At least one file needed for Atlas." -msgstr "ç²¾çµé›†è‡³å°‘需è¦ä¸€ä¸ªæ–‡ä»¶ã€‚" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Error importing:" -msgstr "导入出错:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Only one file is required for large texture." -msgstr "大图导入仅支æŒä¸€ä¸ªè¾“入文件。" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Max Texture Size:" -msgstr "最大纹ç†å°ºå¯¸:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for Atlas (2D)" -msgstr "导入2Dç²¾çµé›†" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cell Size:" -msgstr "å•元尺寸:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Large Texture" -msgstr "大图" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Textures (2D)" -msgstr "导入2D大图" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture" -msgstr "æºè´´å›¾" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Base Atlas Texture" -msgstr "基础图集纹ç†" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s)" -msgstr "æºè´´å›¾(s)" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 2D" -msgstr "导入2D贴图" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 3D" -msgstr "导入3D贴图" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures" -msgstr "导入贴图" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "2D Texture" -msgstr "2D贴图" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "3D Texture" -msgstr "3D贴图" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Atlas Texture" -msgstr "ç²¾çµå›¾é›†" - -#: 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 "" -"æç¤º:大多数2D贴图并ä¸éœ€è¦å¯¼å…¥æ“作,åªè¦å°†png/jpg文件放到项目目录下å³å¯ã€‚" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Crop empty space." -msgstr "切除空白区域。" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture" -msgstr "贴图" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Texture" -msgstr "导入大图" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Load Source Image" -msgstr "åŠ è½½æºå›¾ç‰‡" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Slicing" -msgstr "切片ä¸" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Inserting" -msgstr "æ’å…¥ä¸" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Saving" -msgstr "æ£åœ¨ä¿å˜æ–‡ä»¶" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save large texture:" -msgstr "æ— æ³•ä¿å˜å¤§å›¾:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Build Atlas For:" -msgstr "使用以下图片生æˆç²¾çµé›†:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Loading Image:" -msgstr "åŠ è½½å›¾ç‰‡ä¸:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't load image:" -msgstr "æ— æ³•åŠ è½½å›¾ç‰‡:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Converting Images" -msgstr "æ£åœ¨è½¬æ¢å›¾ç‰‡" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cropping Images" -msgstr "剪è£å›¾ç‰‡" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Blitting Images" -msgstr "Blitting 图片" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save atlas image:" -msgstr "æ— æ³•ä¿å˜ç²¾çµé›†å›¾ç‰‡:" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save converted texture:" -msgstr "æ— æ³•ä¿å˜è½¬æ¢çš„贴图:" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid source!" -msgstr "输入æºéžæ³•ï¼" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid translation source!" -msgstr "æºè¯è¨€æ–‡ä»¶éžæ³•ï¼" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Column" -msgstr "列" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/script_create_dialog.cpp -msgid "Language" -msgstr "è¯è¨€" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No items to import!" -msgstr "没有è¦å¯¼å…¥çš„项目ï¼" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No target path!" -msgstr "ç›®æ ‡è·¯å¾„ä¸ºç©ºï¼" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translations" -msgstr "导入多ç§è¯è¨€ç¿»è¯‘" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Couldn't import!" -msgstr "æ— æ³•å¯¼å…¥ï¼" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translation" -msgstr "导入è¯è¨€ç¿»è¯‘" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Source CSV:" -msgstr "æºCSV文件:" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Ignore First Row" -msgstr "忽略第一行" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Compress" -msgstr "压缩" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Add to Project (project.godot)" -msgstr "æ·»åŠ åˆ°é¡¹ç›® (project.godot)" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Languages:" -msgstr "导入è¯è¨€:" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Translation" -msgstr "è¯è¨€" - #: editor/multi_node_edit.cpp msgid "MultiNode Set" msgstr "多节点组" @@ -3297,6 +2660,49 @@ msgstr "分组" msgid "Select a Node to edit Signals and Groups." msgstr "请选择一个节点æ¥è®¾ç½®ä¿¡å·æˆ–分组。" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create Poly" +msgstr "创建多边形" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly" +msgstr "编辑多边形" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +#, fuzzy +msgid "Insert Point" +msgstr "æ’å…¥ä¸" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly (Remove Point)" +msgstr "编辑多边形(移除顶点)" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Remove Poly And Point" +msgstr "移除多边形åŠé¡¶ç‚¹" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create a new polygon from scratch." +msgstr "从头开始创建一个新的多边形。" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "" +"Edit existing polygon:\n" +"LMB: Move Point.\n" +"Ctrl+LMB: Split Segment.\n" +"RMB: Erase Point." +msgstr "" +"编辑多边形:\n" +"LMB: 移动点。\n" +"Ctrl + LMB: 分离片段。\n" +"人民å¸ï¼š 擦除点。" + #: editor/plugins/animation_player_editor_plugin.cpp msgid "Toggle Autoplay" msgstr "切æ¢AutoPlay" @@ -3315,7 +2721,7 @@ msgstr "é‡å‘½å动画:" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Delete Animation?" -msgstr "åˆ é™¤åŠ¨ç”»" +msgstr "是å¦åˆ 除动画?" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp @@ -3450,7 +2856,6 @@ msgstr "动画åç§°:" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp #: editor/script_create_dialog.cpp msgid "Error!" @@ -3478,9 +2883,8 @@ msgid "New name:" msgstr "æ–°åç§°:" #: editor/plugins/animation_tree_editor_plugin.cpp -#, fuzzy msgid "Edit Filters" -msgstr "编辑节点ç›é€‰" +msgstr "编辑ç›é€‰å™¨" #: editor/plugins/animation_tree_editor_plugin.cpp #: editor/plugins/multimesh_editor_plugin.cpp @@ -3561,10 +2965,6 @@ msgid "Delete Input" msgstr "åˆ é™¤è¾“å…¥äº‹ä»¶" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Rename" -msgstr "é‡å‘½å" - -#: editor/plugins/animation_tree_editor_plugin.cpp msgid "Animation tree is valid." msgstr "åŠ¨ç”»æ ‘å¯ç”¨ã€‚" @@ -3620,64 +3020,181 @@ msgstr "编辑节点ç›é€‰" msgid "Filters.." msgstr "ç›é€‰.." -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing %d Triangles:" -msgstr "æ£åœ¨è§£æžç¬¬%d个三角形:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Free" +msgstr "释放" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Contents:" +msgstr "内容:" -#: editor/plugins/baked_light_baker.cpp -msgid "Triangle #" -msgstr "三角形 #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "View Files" +msgstr "查看文件" -#: editor/plugins/baked_light_baker.cpp -msgid "Light Baker Setup:" -msgstr "建立烘培:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve hostname:" +msgstr "æ— æ³•è§£æžä¸»æœºå:" -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing Geometry" -msgstr "è§£æžå¤šè¾¹å½¢ä¸" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve." +msgstr "æ— æ³•è§£æž." -#: editor/plugins/baked_light_baker.cpp -msgid "Fixing Lights" -msgstr "ä¿®æ£å…‰ç…§" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connection error, please try again." +msgstr "连接错误,请é‡è¯•。" -#: editor/plugins/baked_light_baker.cpp -msgid "Making BVH" -msgstr "制作BVH(动作骨骼)" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't connect." +msgstr "æ— æ³•è¿žæŽ¥ã€‚" -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Light Octree" -msgstr "创建光的 Octree(八剿 ‘)" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't connect to host:" +msgstr "æ— æ³•è¿žæŽ¥åˆ°æœåС噍:" -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Octree Texture" -msgstr "创建 Octree (八剿 ‘) 纹ç†" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response from host:" +msgstr "æœåŠ¡å™¨æ— å“应:" -#: editor/plugins/baked_light_baker.cpp -msgid "Transfer to Lightmaps:" -msgstr "转移到光照贴图:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response." +msgstr "æ— å“应。" -#: editor/plugins/baked_light_baker.cpp -msgid "Allocating Texture #" -msgstr "分é…çº¹ç† #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, return code:" +msgstr "请求失败,错误代ç :" -#: editor/plugins/baked_light_baker.cpp -msgid "Baking Triangle #" -msgstr "烘培三角形 #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Req. Failed." +msgstr "请求失败." -#: editor/plugins/baked_light_baker.cpp -msgid "Post-Processing Texture #" -msgstr "åŽåŠ å·¥çº¹ç† #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, too many redirects" +msgstr "请求失败,é‡å®šå‘次数过多" -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Bake!" -msgstr "烘培ï¼" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Redirect Loop." +msgstr "循环é‡å®šå‘。" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed:" +msgstr "失败:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Bad download hash, assuming file has been tampered with." +msgstr "文件hash值错误,该文件å¯èƒ½è¢«ç¯¡æ”¹ã€‚" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Expected:" +msgstr "预计:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Got:" +msgstr "获得:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed sha256 hash check" +msgstr "sha256å“ˆå¸Œå€¼æ ¡éªŒå¤±è´¥" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Asset Download Error:" +msgstr "资æºä¸‹è½½å‡ºé”™:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Fetching:" +msgstr "获å–:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Resolving.." +msgstr "è§£æžä¸.." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connecting.." +msgstr "连接ä¸.." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Requesting.." +msgstr "æ£åœ¨è¯·æ±‚.." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Error making request" +msgstr "请求错误" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Idle" +msgstr "空闲" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Retry" +msgstr "é‡è¯•" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download Error" +msgstr "下载错误" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download for this asset is already in progress!" +msgstr "æ¤èµ„æºæ–‡ä»¶æ£åœ¨ä¸‹è½½ä¸ï¼" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "first" +msgstr "首先" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "prev" +msgstr "上一页" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "next" +msgstr "下一页" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "last" +msgstr "最åŽä¸€é¡µ" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "All" +msgstr "全部" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Plugins" +msgstr "æ’ä»¶" -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Reset the lightmap octree baking process (start over)." -msgstr "é‡ç½®è´´å›¾çƒ˜ç„™è¿‡ç¨‹ ï¼ˆé‡æ–°å¼€å§‹ï¼‰ çš„ octree (八剿 ‘)。" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Sort:" +msgstr "排åº:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Reverse" +msgstr "å选" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Category:" +msgstr "分类:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Site:" +msgstr "站点:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Support.." +msgstr "支æŒ.." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Official" +msgstr "官方" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Testing" +msgstr "测试" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Assets ZIP File" +msgstr "ZIP资æºåŒ…" #: editor/plugins/camera_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp msgid "Preview" msgstr "预览" @@ -3720,12 +3237,18 @@ msgid "Edit CanvasItem" msgstr "编辑CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Change Anchors" +#, fuzzy +msgid "Anchors only" +msgstr "锚点" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Change Anchors and Margins" msgstr "编辑锚点" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom (%):" -msgstr "缩放(%):" +msgid "Change Anchors" +msgstr "编辑锚点" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Paste Pose" @@ -3775,60 +3298,78 @@ msgid "Pan Mode" msgstr "移动画布" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Lock the selected object in place (can't be moved)." -msgstr "é”定选ä¸å¯¹è±¡çš„ä½ç½®ã€‚" +#, fuzzy +msgid "Toggles snapping" +msgstr "设置æ–点" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Unlock the selected object (can be moved)." -msgstr "è§£é”选ä¸å¯¹è±¡çš„ä½ç½®ã€‚" +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "使用å¸é™„" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Makes sure the object's children are not selectable." -msgstr "ç¡®ä¿èŠ‚ç‚¹çš„å噿— 法被选ä¸ã€‚" +#, fuzzy +msgid "Snapping options" +msgstr "动画选项" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Restores the object's children's ability to be selected." -msgstr "æ¢å¤èŠ‚ç‚¹çš„åå™èƒ½å¤Ÿè¢«é€‰ä¸ã€‚" +#, fuzzy +msgid "Snap to grid" +msgstr "å¸é™„模å¼:" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp -#: editor/project_settings_editor.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Edit" -msgstr "编辑" +msgid "Use Rotation Snap" +msgstr "使用旋转å¸é™„" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" -msgstr "使用å¸é™„" +#, fuzzy +msgid "Configure Snap..." +msgstr "设置å¸é™„.." #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" -msgstr "æ˜¾ç¤ºç½‘æ ¼" +msgid "Snap Relative" +msgstr "相对å¸é™„" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Rotation Snap" -msgstr "使用旋转å¸é™„" +msgid "Use Pixel Snap" +msgstr "使用åƒç´ å¸é™„" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap Relative" -msgstr "相对å¸é™„" +msgid "Smart snapping" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "设置å¸é™„.." +#, fuzzy +msgid "Snap to parent" +msgstr "展开父节点" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Pixel Snap" -msgstr "使用åƒç´ å¸é™„" +msgid "Snap to node anchor" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Skeleton.." -msgstr "骨骼.." +msgid "Snap to node sides" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to other nodes" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Lock the selected object in place (can't be moved)." +msgstr "é”定选ä¸å¯¹è±¡çš„ä½ç½®ã€‚" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Unlock the selected object (can be moved)." +msgstr "è§£é”选ä¸å¯¹è±¡çš„ä½ç½®ã€‚" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Makes sure the object's children are not selectable." +msgstr "ç¡®ä¿èŠ‚ç‚¹çš„å噿— 法被选ä¸ã€‚" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Restores the object's children's ability to be selected." +msgstr "æ¢å¤èŠ‚ç‚¹çš„åå™èƒ½å¤Ÿè¢«é€‰ä¸ã€‚" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Make Bones" @@ -3856,12 +3397,19 @@ msgid "View" msgstr "视图" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Reset" -msgstr "é‡ç½®ç¼©æ”¾" +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "æ˜¾ç¤ºç½‘æ ¼" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Set.." -msgstr "设置缩放.." +#, fuzzy +msgid "Show helpers" +msgstr "显示骨骼" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show rulers" +msgstr "显示骨骼" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -3872,8 +3420,9 @@ msgid "Frame Selection" msgstr "最大化显示选ä¸èŠ‚ç‚¹" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Anchor" -msgstr "锚点" +#, fuzzy +msgid "Layout" +msgstr "ä¿å˜å¸ƒå±€" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Keys" @@ -3896,12 +3445,21 @@ msgid "Clear Pose" msgstr "清除姿势" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Set a Value" -msgstr "设置值" +msgid "Drag pivot from mouse position" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Set pivot at mouse position" +msgstr "设置曲线输出ä½ç½®ï¼ˆPos)" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap (Pixels):" -msgstr "å¸é™„(åƒç´ ):" +msgid "Multiply grid step by 2" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Divide grid step by 2" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Add %s" @@ -3911,23 +3469,28 @@ msgstr "æ·»åŠ (Add) %s" msgid "Adding %s..." msgstr "æ·»åŠ (Adding) %s..." -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Create Node" msgstr "新节点" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Error instancing scene from %s" msgstr "从%s实例化场景出错" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "OK :(" msgstr "好å§" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "No parent to instance a child at." msgstr "没有选ä¸èŠ‚ç‚¹æ¥æ·»åŠ å®žä¾‹ã€‚" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "This operation requires a single selected node." msgstr "æ¤æ“作åªèƒ½åº”用于å•个选ä¸èŠ‚ç‚¹ã€‚" @@ -3943,45 +3506,6 @@ msgstr "" "拖放+ Shiftï¼šå°†èŠ‚ç‚¹æ·»åŠ ä¸ºå…„å¼ŸèŠ‚ç‚¹\n" "拖放+ Alt:更改节点类型" -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Create Poly" -msgstr "创建多边形" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly" -msgstr "编辑多边形" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly (Remove Point)" -msgstr "编辑多边形(移除顶点)" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Create a new polygon from scratch." -msgstr "从头开始创建一个新的多边形。" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -msgid "" -"Edit existing polygon:\n" -"LMB: Move Point.\n" -"Ctrl+LMB: Split Segment.\n" -"RMB: Erase Point." -msgstr "" - #: editor/plugins/collision_polygon_editor_plugin.cpp msgid "Create Poly3D" msgstr "创建 Poly3D (多边型3D)" @@ -3991,14 +3515,6 @@ msgid "Set Handle" msgstr "设置处ç†ç¨‹åº" #: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Creating Mesh Library" -msgstr "创建 Mesh(ç½‘æ ¼) 库" - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Thumbnail.." -msgstr "缩略图.." - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Remove item %d?" msgstr "确定è¦ç§»é™¤é¡¹ç›®%då—?" @@ -4021,19 +3537,38 @@ msgid "Update from Scene" msgstr "ä»Žåœºæ™¯ä¸æ›´æ–°" #: editor/plugins/curve_editor_plugin.cpp +msgid "Flat0" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Flat1" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp #, fuzzy -msgid "Modify Curve Point" -msgstr "修改曲线" +msgid "Ease in" +msgstr "缓入" #: editor/plugins/curve_editor_plugin.cpp #, fuzzy +msgid "Ease out" +msgstr "缓出" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Smoothstep" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Modify Curve Point" +msgstr "修改曲线点" + +#: editor/plugins/curve_editor_plugin.cpp msgid "Modify Curve Tangent" -msgstr "修改曲线图" +msgstr "修改曲线切角" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Load Curve Preset" -msgstr "åŠ è½½é¢„è®¾" +msgstr "åŠ è½½æ›²çº¿é¢„è®¾" #: editor/plugins/curve_editor_plugin.cpp msgid "Add point" @@ -4044,31 +3579,28 @@ msgid "Remove point" msgstr "移除顶点" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Left linear" -msgstr "线性" +msgstr "左线性" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Right linear" -msgstr "å³è§†å›¾" +msgstr "å³çº¿æ€§" #: editor/plugins/curve_editor_plugin.cpp msgid "Load preset" msgstr "åŠ è½½é¢„è®¾" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Remove Curve Point" msgstr "移除路径顶点" #: editor/plugins/curve_editor_plugin.cpp msgid "Toggle Curve Linear Tangent" -msgstr "" +msgstr "åˆ‡æ¢æ›²çº¿çº¿æ€§Tangent" #: editor/plugins/curve_editor_plugin.cpp msgid "Hold Shift to edit tangents individually" -msgstr "" +msgstr "æŒ‰ä½ Shift å¯å•独编辑切线" #: editor/plugins/gradient_editor_plugin.cpp msgid "Add/Remove Color Ramp Point" @@ -4096,28 +3628,26 @@ msgid "" "No OccluderPolygon2D resource on this node.\n" "Create and assign one?" msgstr "" +"在这个节点上没有 OccluderPolygon2D 资æºã€‚\n" +"创建和分é…一个å—?" #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "Create Occluder Polygon" msgstr "æ·»åŠ é®å…‰å¤šè¾¹å½¢" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Edit existing polygon:" msgstr "编辑已å˜åœ¨çš„多边形:" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "LMB: Move Point." msgstr "é¼ æ ‡å·¦é”®:移动点。" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Ctrl+LMB: Split Segment." msgstr "Ctrl+é¼ æ ‡å·¦é”®:分割视图å—。" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "RMB: Erase Point." msgstr "é¼ æ ‡å³é”®:移除点。" @@ -4218,6 +3748,10 @@ msgid "Create Outline" msgstr "创建轮廓(outlines)" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh" +msgstr "Mesh" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Body" msgstr "åˆ›å»ºä¸‰ç»´é™æ€èº«ä½“(Body)" @@ -4345,14 +3879,83 @@ msgstr "éšæœºç¼©æ”¾:" msgid "Populate" msgstr "å¡«å……" +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Bake!" +msgstr "烘培ï¼" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +#, fuzzy +msgid "Bake the navigation mesh.\n" +msgstr "创建导航Mesh(ç½‘æ ¼)" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +#, fuzzy +msgid "Clear the navigation mesh." +msgstr "创建导航Mesh(ç½‘æ ¼)" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Setting up Configuration..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Calculating grid size..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Creating heightfield..." +msgstr "创建光的 Octree(八剿 ‘)" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Marking walkable triangles..." +msgstr "å¯ç¿»è¯‘å—符串.." + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Constructing compact heightfield..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Eroding walkable area..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Partioning..." +msgstr "è¦å‘Š" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Creating contours..." +msgstr "创建 Octree (八剿 ‘) 纹ç†" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Creating polymesh..." +msgstr "åˆ›å»ºè½®å»“ç½‘æ ¼(Outline Mesh).." + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Converting to native navigation mesh..." +msgstr "创建导航Mesh(ç½‘æ ¼)" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Navigation Mesh Generator Setup:" +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Parsing Geometry..." +msgstr "è§£æžå¤šè¾¹å½¢ä¸" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Done!" +msgstr "" + #: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Create Navigation Polygon" msgstr "创建导航多边形" -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Remove Poly And Point" -msgstr "移除多边形åŠé¡¶ç‚¹" - #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Clear Emission Mask" msgstr "清除Emission Mask(å‘å°„å±è”½ï¼‰" @@ -4364,7 +3967,7 @@ msgstr "æ£åœ¨ç”ŸæˆAABB" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Can only set point into a ParticlesMaterial process material" -msgstr "" +msgstr "å¯ä»¥è®¾ç½®ParticlesMaterial 点的æè´¨" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Error loading image:" @@ -4380,7 +3983,7 @@ msgstr "设置Emission Mask(å‘å°„å±è”½ï¼‰" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generate Visibility Rect" -msgstr "" +msgstr "生æˆå¯è§†åŒ–区域" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Load Emission Mask" @@ -4388,9 +3991,8 @@ msgstr "åŠ è½½Emission Mask(å‘å°„å±è”½ï¼‰" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "Particles" -msgstr "顶点" +msgstr "ç²’å" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generated Point Count:" @@ -4399,19 +4001,19 @@ msgstr "生æˆé¡¶ç‚¹è®¡æ•°:" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp msgid "Generation Time (sec):" -msgstr "ç”Ÿæˆæ—¶é—´ï¼ˆç§’)" +msgstr "ç”Ÿæˆæ—¶é—´ï¼ˆç§’):" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Emission Mask" -msgstr "" +msgstr "å‘å…‰é®ç½©ï¼ˆmask)" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Capture from Pixel" -msgstr "" +msgstr "从åƒç´ æ•æ‰" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Emission Colors" -msgstr "" +msgstr "å‘光颜色" #: editor/plugins/particles_editor_plugin.cpp msgid "Node does not contain geometry." @@ -4471,11 +4073,11 @@ msgstr "体积" #: editor/plugins/particles_editor_plugin.cpp msgid "Emission Source: " -msgstr "å‘å°„æºï¼š" +msgstr "å‘å°„æºï¼š " #: editor/plugins/particles_editor_plugin.cpp msgid "Generate Visibility AABB" -msgstr "" +msgstr "生æˆå¯è§çš„AABB" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Remove Point from Curve" @@ -4525,15 +4127,18 @@ msgid "Curve Point #" msgstr "曲线定点 #" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Point Pos" +#, fuzzy +msgid "Set Curve Point Position" msgstr "è®¾ç½®æ›²çº¿é¡¶ç‚¹åæ ‡" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve In Pos" +#, fuzzy +msgid "Set Curve In Position" msgstr "设置的曲线输入ä½ç½®ï¼ˆPos)" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Out Pos" +#, fuzzy +msgid "Set Curve Out Position" msgstr "设置曲线输出ä½ç½®ï¼ˆPos)" #: editor/plugins/path_editor_plugin.cpp @@ -4593,6 +4198,14 @@ msgid "Scale Polygon" msgstr "缩放多边形" #: editor/plugins/polygon_2d_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit" +msgstr "编辑" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon->UV" msgstr "多边形->UV" @@ -4647,63 +4260,10 @@ msgstr "åŠ è½½èµ„æº" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "粘贴" -#: editor/plugins/rich_text_editor_plugin.cpp -msgid "Parse BBCode" -msgstr "è§£æžBBCode" - -#: editor/plugins/sample_editor_plugin.cpp -msgid "Length:" -msgstr "长度:" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Open Sample File(s)" -msgstr "打开声音文件" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "ERROR: Couldn't load sample!" -msgstr "错误:æ— æ³•åŠ è½½éŸ³æ•ˆï¼" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Add Sample" -msgstr "æ·»åŠ éŸ³æ•ˆ" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Rename Sample" -msgstr "é‡å‘½å音效" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Delete Sample" -msgstr "åˆ é™¤éŸ³æ•ˆ" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "16 Bits" -msgstr "16ä½" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "8 Bits" -msgstr "8ä½" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Stereo" -msgstr "立体声" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Mono" -msgstr "å•声é“" - -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/script_editor_debugger.cpp -msgid "Format" -msgstr "æ ¼å¼" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Pitch" -msgstr "音调" - #: editor/plugins/script_editor_plugin.cpp msgid "Clear Recent Files" msgstr "清ç†å½“剿–‡ä»¶" @@ -4713,6 +4273,8 @@ msgid "" "Close and save changes?\n" "\"" msgstr "" +"å…³é—å¹¶ä¿å˜æ›´æ”¹å—?\n" +"\"" #: editor/plugins/script_editor_plugin.cpp msgid "Error while saving theme" @@ -4740,7 +4302,7 @@ msgstr "主题å¦å˜ä¸º.." #: editor/plugins/script_editor_plugin.cpp msgid " Class Reference" -msgstr "" +msgstr " 类引用" #: editor/plugins/script_editor_plugin.cpp msgid "Next script" @@ -4794,10 +4356,13 @@ msgstr "关闿–‡æ¡£" msgid "Close All" msgstr "å…³é—全部" +#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp +msgid "Run" +msgstr "è¿è¡Œ" + #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Toggle Scripts Panel" -msgstr "åˆ‡æ¢æ”¶è—" +msgstr "切æ¢è„šæœ¬é¢æ¿" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -4832,25 +4397,12 @@ msgid "Keep Debugger Open" msgstr "ä¿æŒè°ƒè¯•器打开" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Debug with external editor" -msgstr "打开下一个编辑器" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Window" -msgstr "窗å£" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Left" -msgstr "å‘左移动" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Right" -msgstr "å‘å³ç§»åЍ" +msgstr "使用外部编辑器进行调试" #: editor/plugins/script_editor_plugin.cpp msgid "Open Godot online documentation" -msgstr "" +msgstr "打开Godot在线文档" #: editor/plugins/script_editor_plugin.cpp msgid "Search the class hierarchy." @@ -4903,7 +4455,7 @@ msgstr "å†…å»ºè„šæœ¬åªæœ‰åœ¨å…¶æ‰€å±žçš„节点读å–åŽæ‰èƒ½è¢«ä¿®æ”¹" #: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." -msgstr "" +msgstr "åªå¯ä»¥æ‹–入文件系统的资æºã€‚" #: editor/plugins/script_text_editor.cpp msgid "Pick Color" @@ -4933,7 +4485,7 @@ msgstr "剪切" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Copy" msgstr "å¤åˆ¶" @@ -4952,9 +4504,8 @@ msgid "Move Down" msgstr "å‘下移动" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Delete Line" -msgstr "åˆ é™¤é¡¶ç‚¹" +msgstr "åˆ é™¤çº¿" #: editor/plugins/script_text_editor.cpp msgid "Indent Left" @@ -5197,10 +4748,6 @@ msgid "View Plane Transform." msgstr "视图平é¢å˜æ¢ã€‚" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Scaling to %s%%." -msgstr "缩放到%s%%。" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." msgstr "旋转%s度。" @@ -5217,10 +4764,6 @@ msgid "Top View." msgstr "俯视图(Top View)。" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Top" -msgstr "顶部" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "åŽè§†å›¾ã€‚" @@ -5262,7 +4805,7 @@ msgstr "æ’入动画键。" #: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" -msgstr "" +msgstr "绘制的对象" #: editor/plugins/spatial_editor_plugin.cpp msgid "Material Changes" @@ -5278,7 +4821,7 @@ msgstr "表é¢å˜æ›´" #: editor/plugins/spatial_editor_plugin.cpp msgid "Draw Calls" -msgstr "Draw Calls" +msgstr "绘制调用(Draw Calls)" #: editor/plugins/spatial_editor_plugin.cpp msgid "Vertices" @@ -5302,60 +4845,57 @@ msgstr "显示过度绘制" #: editor/plugins/spatial_editor_plugin.cpp msgid "Display Unshaded" -msgstr "" +msgstr "æ˜¾ç¤ºæ— é˜´å½±" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Environment" -msgstr "" +msgstr "视图环境" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "View Gizmos" msgstr "Gizmos(å¯è§†åŒ–调试工具)" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Information" -msgstr "" +msgstr "查看信æ¯" #: editor/plugins/spatial_editor_plugin.cpp msgid "Audio Listener" msgstr "音频监å¬å™¨" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Doppler Enable" -msgstr "å¯ç”¨" +msgstr "å¯ç”¨å¤šæ™®å‹’效应" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Left" -msgstr "" +msgstr "自由视图 å·¦" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Right" -msgstr "" +msgstr "自由视图 å³" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Forward" -msgstr "" +msgstr "自由视图 å‰" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Backwards" -msgstr "" +msgstr "自由视图 åŽ" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Up" -msgstr "" +msgstr "自由视图 上" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Down" -msgstr "" +msgstr "自由视图 下" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Speed Modifier" -msgstr "" +msgstr "自由视图速度调整" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "preview" msgstr "预览" @@ -5364,17 +4904,18 @@ msgid "XForm Dialog" msgstr "XFormå¯¹è¯æ¡†" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Select Mode (Q)\n" -msgstr "选择模å¼" +msgstr "é€‰æ‹©æ¨¡å¼ (Q)\n" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "" "Drag: Rotate\n" "Alt+Drag: Move\n" "Alt+RMB: Depth list selection" -msgstr "Alt+é¼ æ ‡å³é”®:æ˜¾ç¤ºé¼ æ ‡ç‚¹å‡»ä½ç½®ä¸‹çš„æ‰€æœ‰èŠ‚ç‚¹åˆ—è¡¨" +msgstr "" +"é¼ æ ‡æ‹–æ‹½ï¼šæ—‹è½¬\n" +"Alt+拖拽:移动\n" +"Alt+é¼ æ ‡å³é”®ï¼šæ˜¾ç¤ºåˆ—表" #: editor/plugins/spatial_editor_plugin.cpp msgid "Move Mode (W)" @@ -5433,30 +4974,30 @@ msgid "Align Selection With View" msgstr "选ä¸é¡¹ä¸Žè§†å›¾å¯¹é½" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Tool Select" -msgstr "选择" +msgstr "选择工具" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Tool Move" -msgstr "移动" +msgstr "移动工具" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Tool Rotate" -msgstr "Ctrl:旋转" +msgstr "旋转工具" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Tool Scale" -msgstr "缩放:" +msgstr "缩放工具" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform" msgstr "å˜æ¢" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Configure Snap.." +msgstr "设置å¸é™„.." + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Local Coords" msgstr "æœ¬åœ°åæ ‡" @@ -5602,6 +5143,10 @@ msgid "Speed (FPS):" msgstr "速度(FPS):" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Loop" +msgstr "循环" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animation Frames" msgstr "动画帧" @@ -5614,19 +5159,20 @@ msgid "Insert Empty (After)" msgstr "æ’入空白帧(之åŽï¼‰" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Up" -msgstr "å‘上" +#, fuzzy +msgid "Move (Before)" +msgstr "移动节点" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Down" -msgstr "å‘下" +#, fuzzy +msgid "Move (After)" +msgstr "å‘左移动" #: editor/plugins/style_box_editor_plugin.cpp msgid "StyleBox Preview:" msgstr "StyleBox预览:" #: editor/plugins/texture_region_editor_plugin.cpp -#, fuzzy msgid "Set Region Rect" msgstr "设置纹ç†åŒºåŸŸ" @@ -5688,14 +5234,12 @@ msgid "Remove Item" msgstr "移除项目" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All Items" msgstr "移除类项目" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All" -msgstr "移除" +msgstr "移除全部" #: editor/plugins/theme_editor_plugin.cpp msgid "Theme" @@ -5783,11 +5327,14 @@ msgid "Style" msgstr "æ ·å¼" #: editor/plugins/theme_editor_plugin.cpp +msgid "Font" +msgstr "å—体" + +#: editor/plugins/theme_editor_plugin.cpp msgid "Color" msgstr "颜色" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Erase Selection" msgstr "擦除选ä¸" @@ -5796,18 +5343,16 @@ msgid "Paint TileMap" msgstr "ç»˜åˆ¶ç –å—地图" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Line Draw" -msgstr "线性" +msgstr "线性绘制" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Rectangle Paint" -msgstr "" +msgstr "绘制矩形" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Bucket Fill" -msgstr "æ¡¶(Bucket)" +msgstr "油漆桶填充" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Erase TileMap" @@ -5834,12 +5379,13 @@ msgid "Mirror Y" msgstr "沿Y轴翻转" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Bucket" -msgstr "æ¡¶(Bucket)" +#, fuzzy +msgid "Paint Tile" +msgstr "ç»˜åˆ¶ç –å—地图" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Pick Tile" -msgstr "é€‰æ‹©ç –å—" +msgstr "é€‰æ‹©ç –å—(Tile)" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Rotate 0 degrees" @@ -5898,6 +5444,11 @@ msgid "Delete preset '%s'?" msgstr "åˆ é™¤é€‰ä¸çš„ '%s'?" #: editor/project_export.cpp +#, fuzzy +msgid "Export templates for this platform are missing/corrupted: " +msgstr "没有下列平å°çš„导出模æ¿:" + +#: editor/project_export.cpp msgid "Presets" msgstr "预设" @@ -5911,15 +5462,15 @@ msgstr "资æº" #: editor/project_export.cpp msgid "Export all resources in the project" -msgstr "导出项目ä¸çš„æ‰€æœ‰èµ„æºã€‚" +msgstr "导出项目ä¸çš„æ‰€æœ‰èµ„æº" #: editor/project_export.cpp msgid "Export selected scenes (and dependencies)" -msgstr "导出选ä¸çš„场景(包括其ä¾èµ–)。" +msgstr "导出选ä¸çš„场景(包括ä¾èµ–项)" #: editor/project_export.cpp msgid "Export selected resources (and dependencies)" -msgstr "导出选ä¸çš„资æºï¼ˆåŒ…括其ä¾èµ–资æºï¼‰ã€‚" +msgstr "导出选ä¸çš„资æºï¼ˆåŒ…括ä¾èµ–资æºï¼‰" #: editor/project_export.cpp msgid "Export Mode:" @@ -5932,12 +5483,12 @@ msgstr "导出的资æº:" #: editor/project_export.cpp msgid "" "Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" -msgstr "导出éžèµ„æºæ–‡ä»¶ç›é€‰ï¼ˆä½¿ç”¨è‹±æ–‡é€—å·åˆ†éš”,如:*.json,*.txt):" +msgstr "导出éžèµ„æºæ–‡ä»¶ç›é€‰ï¼ˆä½¿ç”¨è‹±æ–‡é€—å·åˆ†éš”,如:*.json,*.txt)" #: editor/project_export.cpp msgid "" "Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" -msgstr "排除导出的éžèµ„æºæ–‡ä»¶ç›é€‰ï¼ˆä½¿ç”¨è‹±æ–‡é€—å·åˆ†éš”,如:*.json,*.txt):" +msgstr "排除导出的éžèµ„æºæ–‡ä»¶ç›é€‰ï¼ˆä½¿ç”¨è‹±æ–‡é€—å·åˆ†éš”,如:*.json,*.txt)" #: editor/project_export.cpp msgid "Patches" @@ -5948,18 +5499,16 @@ msgid "Make Patch" msgstr "制作Patch" #: editor/project_export.cpp -#, fuzzy msgid "Features" -msgstr "贴图" +msgstr "功能" #: editor/project_export.cpp msgid "Custom (comma-separated):" -msgstr "" +msgstr "自定义 (以逗å·åˆ†éš”):" #: editor/project_export.cpp -#, fuzzy msgid "Feature List:" -msgstr "方法列表:" +msgstr "功能列表:" #: editor/project_export.cpp msgid "Export PCK/Zip" @@ -5970,30 +5519,61 @@ msgid "Export templates for this platform are missing:" msgstr "没有下列平å°çš„导出模æ¿:" #: editor/project_export.cpp +#, fuzzy +msgid "Export templates for this platform are missing/corrupted:" +msgstr "没有下列平å°çš„导出模æ¿:" + +#: editor/project_export.cpp msgid "Export With Debug" msgstr "导出为调试" #: editor/project_manager.cpp -msgid "Invalid project path, the path must exist!" -msgstr "项目目录ä¸å˜åœ¨ï¼" +#, fuzzy +msgid "The path does not exists." +msgstr "文件ä¸å˜åœ¨ã€‚" + +#: editor/project_manager.cpp +#, fuzzy +msgid "Please choose a 'project.godot' file." +msgstr "请导出到项目目录之外ï¼" #: editor/project_manager.cpp -msgid "Invalid project path, project.godot must not exist." -msgstr "项目目录下ä¸èƒ½åŒ…å«project.godot文件。" +msgid "" +"Your project will be created in a non empty folder (you might want to create " +"a new folder)." +msgstr "" #: editor/project_manager.cpp -msgid "Invalid project path, project.godot must exist." -msgstr "项目目录下必须包å«project.godot文件。" +msgid "Please choose a folder that does not contain a 'project.godot' file." +msgstr "" #: editor/project_manager.cpp msgid "Imported Project" msgstr "已导入的项目" #: editor/project_manager.cpp +msgid " " +msgstr "" + +#: editor/project_manager.cpp +msgid "It would be a good idea to name your project." +msgstr "" + +#: editor/project_manager.cpp msgid "Invalid project path (changed anything?)." msgstr "é¡¹ç›®è·¯å¾„éžæ³•(被外部修改?)。" #: editor/project_manager.cpp +#, fuzzy +msgid "Couldn't get project.godot in project path." +msgstr "æ— æ³•åœ¨é¡¹ç›®ç›®å½•ä¸‹åˆ›å»ºproject.godot文件。" + +#: editor/project_manager.cpp +#, fuzzy +msgid "Couldn't edit project.godot in project path." +msgstr "æ— æ³•åœ¨é¡¹ç›®ç›®å½•ä¸‹åˆ›å»ºproject.godot文件。" + +#: editor/project_manager.cpp msgid "Couldn't create project.godot in project path." msgstr "æ— æ³•åœ¨é¡¹ç›®ç›®å½•ä¸‹åˆ›å»ºproject.godot文件。" @@ -6002,38 +5582,49 @@ msgid "The following files failed extraction from package:" msgstr "æå–以下文件失败:" #: editor/project_manager.cpp +#, fuzzy +msgid "Rename Project" +msgstr "未命å项目" + +#: editor/project_manager.cpp +#, fuzzy +msgid "Couldn't get project.godot in the project path." +msgstr "æ— æ³•åœ¨é¡¹ç›®ç›®å½•ä¸‹åˆ›å»ºproject.godot文件。" + +#: editor/project_manager.cpp +msgid "New Game Project" +msgstr "新建游æˆé¡¹ç›®" + +#: editor/project_manager.cpp msgid "Import Existing Project" msgstr "导入现有项目" #: editor/project_manager.cpp -msgid "Project Path (Must Exist):" -msgstr "项目目录(必须å˜åœ¨ï¼‰:" +msgid "Create New Project" +msgstr "新建项目" + +#: editor/project_manager.cpp +msgid "Install Project:" +msgstr "安装项目:" #: editor/project_manager.cpp msgid "Project Name:" msgstr "项目åç§°:" #: editor/project_manager.cpp -msgid "Create New Project" -msgstr "新建项目" +#, fuzzy +msgid "Create folder" +msgstr "新建目录" #: editor/project_manager.cpp msgid "Project Path:" msgstr "项目目录:" #: editor/project_manager.cpp -msgid "Install Project:" -msgstr "安装项目:" - -#: editor/project_manager.cpp msgid "Browse" msgstr "æµè§ˆ" #: editor/project_manager.cpp -msgid "New Game Project" -msgstr "新建游æˆé¡¹ç›®" - -#: editor/project_manager.cpp msgid "That's a BINGO!" msgstr "ç¢‰å ¡äº†ï¼" @@ -6042,24 +5633,30 @@ msgid "Unnamed Project" msgstr "未命å项目" #: editor/project_manager.cpp +#, fuzzy +msgid "Can't open project" +msgstr "æ— æ³•è¿è¡Œé¡¹ç›®" + +#: editor/project_manager.cpp msgid "Are you sure to open more than one project?" msgstr "æ‚¨ç¡®å®šè¦æ‰“开多个项目å—?" #: editor/project_manager.cpp -#, fuzzy msgid "" "Can't run project: no main scene defined.\n" "Please edit the project and set the main scene in \"Project Settings\" under " "the \"Application\" category." msgstr "" "尚未定义主场景, 现在选择一个å—?\n" -"ä½ ä¹Ÿå¯ä»¥ç¨åŽåœ¨é¡¹ç›®è®¾ç½®çš„application分类下修改。" +"ä½ ä¹Ÿå¯ä»¥ç¨åŽåœ¨é¡¹ç›®è®¾ç½®çš„Application分类下修改。" #: editor/project_manager.cpp msgid "" "Can't run project: Assets need to be imported.\n" "Please edit the project to trigger the initial import." msgstr "" +"ä¸èƒ½è¿è¡Œé¡¹ç›®ï¼š 需è¦å¯¼å…¥èµ„æºæ–‡ä»¶ã€‚\n" +"请编辑项目导入åˆå§‹åŒ–资æºã€‚" #: editor/project_manager.cpp msgid "Are you sure to run more than one project?" @@ -6080,10 +5677,6 @@ msgid "Project List" msgstr "项目列表" #: editor/project_manager.cpp -msgid "Run" -msgstr "è¿è¡Œ" - -#: editor/project_manager.cpp msgid "Scan" msgstr "扫æ" @@ -6104,9 +5697,8 @@ msgid "Exit" msgstr "退出" #: editor/project_manager.cpp -#, fuzzy msgid "Can't run project" -msgstr "æ— æ³•è¿žæŽ¥ã€‚" +msgstr "æ— æ³•è¿è¡Œé¡¹ç›®" #: editor/project_settings_editor.cpp msgid "Key " @@ -6141,17 +5733,14 @@ msgid "Add Input Action Event" msgstr "æ·»åŠ è¾“å…¥äº‹ä»¶" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Meta+" msgstr "Meta+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Shift+" msgstr "Shift+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Alt+" msgstr "Alt+" @@ -6212,7 +5801,7 @@ msgstr "更改" msgid "Joypad Axis Index:" msgstr "手柄摇æ†åºå·:" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Axis" msgstr "è½´" @@ -6232,59 +5821,66 @@ msgstr "移除输入事件" msgid "Add Event" msgstr "æ·»åŠ äº‹ä»¶" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Device" msgstr "设备" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Button" msgstr "按钮" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Left Button." msgstr "左键。" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Right Button." msgstr "å³é”®ã€‚" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Middle Button." msgstr "ä¸é”®ï¼ˆæ»šè½®ï¼‰ã€‚" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Up." msgstr "滚轮å‘上滚动。" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Down." msgstr "滚轮å‘下滚动。" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Add Global Property" -msgstr "æ·»åŠ Getter Property" +msgstr "æ·»åŠ Getter属性" #: editor/project_settings_editor.cpp -msgid "Select an setting item first!" -msgstr "" +#, fuzzy +msgid "Select a setting item first!" +msgstr "首先选择一个设置项目 ï¼" #: editor/project_settings_editor.cpp -#, fuzzy msgid "No property '" -msgstr "属性:" +msgstr "没有属性 '" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Setting '" -msgstr "设置" +msgstr "设置 '" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Delete Item" msgstr "åˆ é™¤è¾“å…¥äº‹ä»¶" #: editor/project_settings_editor.cpp +#, fuzzy +msgid "Can't contain '/' or ':'" +msgstr "æ— æ³•è¿žæŽ¥åˆ°æœåС噍:" + +#: editor/project_settings_editor.cpp +#, fuzzy +msgid "Already existing" +msgstr "动作%så·²å˜åœ¨ï¼" + +#: editor/project_settings_editor.cpp msgid "Error saving settings." msgstr "ä¿å˜è®¾ç½®å‡ºé”™ã€‚" @@ -6294,7 +5890,7 @@ msgstr "ä¿å˜è®¾ç½®æˆåŠŸã€‚" #: editor/project_settings_editor.cpp msgid "Override for Feature" -msgstr "" +msgstr "é‡å†™åŠŸèƒ½" #: editor/project_settings_editor.cpp msgid "Add Translation" @@ -6338,7 +5934,7 @@ msgstr "属性:" #: editor/project_settings_editor.cpp msgid "Override For.." -msgstr "" +msgstr "é‡å†™çš„......" #: editor/project_settings_editor.cpp msgid "Input Map" @@ -6425,7 +6021,6 @@ msgid "Assign" msgstr "分é…(Assign)" #: editor/property_editor.cpp -#, fuzzy msgid "Select Node" msgstr "选择一个节点" @@ -6434,17 +6029,26 @@ msgid "New Script" msgstr "新建脚本" #: editor/property_editor.cpp +#, fuzzy +msgid "Make Unique" +msgstr "æ·»åŠ éª¨éª¼" + +#: editor/property_editor.cpp msgid "Show in File System" msgstr "在资æºç®¡ç†å™¨ä¸å±•示" #: editor/property_editor.cpp +#, fuzzy +msgid "Convert To %s" +msgstr "转æ¢ä¸º.." + +#: editor/property_editor.cpp msgid "Error loading file: Not a resource!" msgstr "åŠ è½½æ–‡ä»¶å‡ºé”™:䏿˜¯èµ„æºæ–‡ä»¶ï¼" #: editor/property_editor.cpp -#, fuzzy msgid "Selected node is not a Viewport!" -msgstr "选择è¦å¯¼å…¥çš„节点" +msgstr "é€‰å®šçš„èŠ‚ç‚¹ä¸æ˜¯ä¸€ä¸ªViewport节点ï¼" #: editor/property_editor.cpp msgid "Pick a Node" @@ -6475,6 +6079,11 @@ msgid "Select Property" msgstr "选择属性" #: editor/property_selector.cpp +#, fuzzy +msgid "Select Virtual Method" +msgstr "选择方å¼" + +#: editor/property_selector.cpp msgid "Select Method" msgstr "选择方å¼" @@ -6502,26 +6111,6 @@ msgstr "ä¿æŒå…¨å±€å˜æ¢" msgid "Reparent" msgstr "é‡è®¾çˆ¶èŠ‚ç‚¹" -#: editor/resources_dock.cpp -msgid "Create New Resource" -msgstr "创建资æº" - -#: editor/resources_dock.cpp -msgid "Open Resource" -msgstr "打开资æº" - -#: editor/resources_dock.cpp -msgid "Save Resource" -msgstr "ä¿å˜èµ„æº" - -#: editor/resources_dock.cpp -msgid "Resource Tools" -msgstr "资æºå·¥å…·" - -#: editor/resources_dock.cpp -msgid "Make Local" -msgstr "使用本地" - #: editor/run_settings_dialog.cpp msgid "Run Mode:" msgstr "è¿è¡Œæ¨¡å¼:" @@ -6648,14 +6237,6 @@ msgid "Sub-Resources:" msgstr "å资æº:" #: editor/scene_tree_dock.cpp -msgid "Edit Groups" -msgstr "编辑分组" - -#: editor/scene_tree_dock.cpp -msgid "Edit Connections" -msgstr "编辑事件连接" - -#: editor/scene_tree_dock.cpp msgid "Clear Inheritance" msgstr "清除继承" @@ -6714,9 +6295,8 @@ msgid "" msgstr "å®žä¾‹åŒ–åœºæ™¯æ–‡ä»¶ä¸ºä¸€ä¸ªèŠ‚ç‚¹ï¼Œå¦‚æžœæ²¡æœ‰æ ¹èŠ‚ç‚¹åˆ™åˆ›å»ºä¸€ä¸ªç»§æ‰¿è‡ªè¯¥æ–‡ä»¶çš„åœºæ™¯ã€‚" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Filter nodes" -msgstr "ç›é€‰" +msgstr "ç›é€‰èŠ‚ç‚¹" #: editor/scene_tree_dock.cpp msgid "Attach a new or existing script for the selected node." @@ -6751,6 +6331,8 @@ msgid "" "Node has connection(s) and group(s)\n" "Click to show signals dock." msgstr "" +"节点具有信å·è¿žæŽ¥å’Œç»„\n" +"å•å‡»ä»¥æ˜¾ç¤ºä¿¡å·æŽ¥å£ã€‚" #: editor/scene_tree_editor.cpp msgid "" @@ -6789,6 +6371,8 @@ msgid "" "Children are not selectable.\n" "Click to make selectable" msgstr "" +"åèŠ‚ç‚¹æ— æ³•é€‰æ‹©ã€‚\n" +"å•击使其å¯é€‰" #: editor/scene_tree_editor.cpp msgid "Toggle Visibility" @@ -6807,18 +6391,16 @@ msgid "Scene Tree (Nodes):" msgstr "åœºæ™¯æ ‘:" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "Node Configuration Warning!" -msgstr "节点é…ç½®è¦å‘Š:" +msgstr "节点é…ç½®è¦å‘Šï¼" #: editor/scene_tree_editor.cpp msgid "Select a Node" msgstr "选择一个节点" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Error loading template '%s'" -msgstr "åŠ è½½å›¾ç‰‡å‡ºé”™:" +msgstr "åŠ è½½æ¨¡æ¿ %s 时出错" #: editor/script_create_dialog.cpp msgid "Error - Could not create script in filesystem." @@ -6845,6 +6427,15 @@ msgid "Invalid base path" msgstr "çˆ¶è·¯å¾„éžæ³•" #: editor/script_create_dialog.cpp +msgid "Directory of the same name exists" +msgstr "" + +#: editor/script_create_dialog.cpp +#, fuzzy +msgid "File exists, will be reused" +msgstr "文件已å˜åœ¨ï¼Œç¡®å®šè¦è¦†ç›–它å—?" + +#: editor/script_create_dialog.cpp msgid "Invalid extension" msgstr "扩展åéžæ³•" @@ -6885,6 +6476,10 @@ msgid "Load existing script file" msgstr "åŠ è½½çŽ°æœ‰è„šæœ¬" #: editor/script_create_dialog.cpp +msgid "Language" +msgstr "è¯è¨€" + +#: editor/script_create_dialog.cpp msgid "Inherits" msgstr "继承自" @@ -6925,6 +6520,10 @@ msgid "Function:" msgstr "函数:" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Errors" msgstr "错误" @@ -7005,6 +6604,10 @@ msgid "Type" msgstr "类型" #: editor/script_editor_debugger.cpp +msgid "Format" +msgstr "æ ¼å¼" + +#: editor/script_editor_debugger.cpp msgid "Usage" msgstr "用é‡" @@ -7038,7 +6641,7 @@ msgstr "设置光照åŠå¾„" #: editor/spatial_editor_gizmos.cpp msgid "Change AudioStreamPlayer3D Emission Angle" -msgstr "" +msgstr "æ”¹å˜ AudioStreamPlayer3D å‘å°„è§’" #: editor/spatial_editor_gizmos.cpp msgid "Change Camera FOV" @@ -7080,12 +6683,30 @@ msgstr "修改粒åAABB" msgid "Change Probe Extents" msgstr "更改探针(Probe)范围" +#: modules/gdnative/gd_native_library_editor.cpp +#, fuzzy +msgid "Library" +msgstr "MeshLibrary(ç½‘æ ¼åº“).." + +#: modules/gdnative/gd_native_library_editor.cpp +#, fuzzy +msgid "Status" +msgstr "状æ€ï¼š" + +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Libraries: " +msgstr "" + +#: modules/gdnative/register_types.cpp +msgid "GDNative" +msgstr "" + #: 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/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "没有足够的å—节æ¥è§£ç æˆ–æ ¼å¼ä¸æ£ç¡®ã€‚" @@ -7124,133 +6745,112 @@ msgstr "éžæ³•çš„å—å…¸å®žä¾‹ï¼ˆæ´¾ç”Ÿç±»éžæ³•)" #: modules/gdscript/gd_functions.cpp msgid "Object can't provide a length." -msgstr "" +msgstr "对象ä¸èƒ½æä¾›é•¿åº¦ã€‚" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Delete Selection" -msgstr "åˆ é™¤é€‰æ‹©çš„èŠ‚ç‚¹" +msgstr "åˆ é™¤é€‰æ‹©çš„æ …æ ¼å›¾" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Duplicate Selection" msgstr "å¤åˆ¶é€‰ä¸é¡¹" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Paint" -msgstr "" - -#: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Snap View" -msgstr "Top视图" +msgstr "æ•æ‰è§†å›¾" #: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy msgid "Prev Level (%sDown Wheel)" -msgstr "" +msgstr "上一级" #: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy msgid "Next Level (%sUp Wheel)" -msgstr "" +msgstr "下一级" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Clip Disabled" -msgstr "å·²ç¦ç”¨" +msgstr "ç¦ç”¨å‰ªè¾‘" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Clip Above" -msgstr "" +msgstr "上级剪辑" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Clip Below" -msgstr "" +msgstr "下级剪辑" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Edit X Axis" -msgstr "" +msgstr "编辑 X è½´" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Edit Y Axis" -msgstr "" +msgstr "编辑 Y è½´" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Edit Z Axis" -msgstr "" +msgstr "编辑 Z è½´" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Cursor Rotate X" -msgstr "Ctrl:旋转" +msgstr "å…‰æ ‡æ²¿X轴旋转" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Cursor Rotate Y" -msgstr "Ctrl:旋转" +msgstr "沿Y轴旋转" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Cursor Rotate Z" -msgstr "Ctrl:旋转" +msgstr "沿Z轴旋转" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Back Rotate X" -msgstr "" +msgstr "å…‰æ ‡æ²¿Xè½´å‘åŽæ—‹è½¬" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Back Rotate Y" -msgstr "" +msgstr "å…‰æ ‡æ²¿Yè½´å‘åŽæ—‹è½¬" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Back Rotate Z" -msgstr "" +msgstr "å…‰æ ‡æ²¿Zè½´å‘åŽæ—‹è½¬" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Clear Rotation" -msgstr "" +msgstr "å…‰æ ‡æ¸…é™¤æ—‹è½¬" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Create Area" -msgstr "新建" +msgstr "新建区域" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Create Exterior Connector" -msgstr "新建项目" +msgstr "创建外部连接器" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Erase Area" -msgstr "æ“¦é™¤ç –å—地图" +msgstr "擦除区域" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Selection -> Duplicate" -msgstr "仅选ä¸" +msgstr "选择->å¤åˆ¶" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Selection -> Clear" -msgstr "仅选ä¸" +msgstr "选择->清空" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Settings" -msgstr "æ•æ‰(snap)设置" +msgstr "æ …æ ¼å›¾è®¾ç½®" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Pick Distance:" -msgstr "实例:" - -#: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy -msgid "Tiles" -msgstr "文件" +msgstr "拾å–è·ç¦»:" -#: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Areas" +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "Builds" msgstr "" #: modules/visual_script/visual_script.cpp @@ -7285,29 +6885,24 @@ msgid "Stack overflow with stack depth: " msgstr "å †æ ˆæ·±åº¦æº¢å‡ºï¼š " #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Signal Arguments" -msgstr "ç¼–è¾‘äº‹ä»¶å‚æ•°:" +msgstr "编辑信å·å‚æ•°" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Argument Type" -msgstr "修改数组类型" +msgstr "ä¿®æ”¹å‚æ•°ç±»åž‹" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Argument name" -msgstr "更改输入åç§°" +msgstr "æ›´æ”¹å‚æ•°åç§°" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Set Variable Default Value" msgstr "修改默认值" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Set Variable Type" -msgstr "编辑å˜é‡:" +msgstr "设置å˜é‡ç±»åž‹" #: modules/visual_script/visual_script_editor.cpp msgid "Functions:" @@ -7358,14 +6953,12 @@ msgid "Add Node" msgstr "æ·»åŠ èŠ‚ç‚¹" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Remove VisualScript Nodes" -msgstr "ç§»é™¤æ— æ•ˆé”®" +msgstr "åˆ é™¤ VisualScript 节点" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Duplicate VisualScript Nodes" -msgstr "å¤åˆ¶Graph Node节点" +msgstr "å¤åˆ¶ VisualScript 节点" #: modules/visual_script/visual_script_editor.cpp msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature." @@ -7408,24 +7001,20 @@ msgid "Add Setter Property" msgstr "æ·»åŠ Setter Property" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Base Type" -msgstr "更改类型" +msgstr "更改基本类型" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Move Node(s)" -msgstr "移除节点" +msgstr "移动节点" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Remove VisualScript Node" -msgstr "移除Graph Node节点" +msgstr "åˆ é™¤ VisualScript 节点" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Connect Nodes" -msgstr "连接到节点:" +msgstr "连接节点" #: modules/visual_script/visual_script_editor.cpp msgid "Condition" @@ -7452,46 +7041,48 @@ msgid "Return" msgstr "返回节点(Return)" #: modules/visual_script/visual_script_editor.cpp +msgid "Call" +msgstr "调用到" + +#: modules/visual_script/visual_script_editor.cpp msgid "Get" msgstr "获å–" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy +msgid "Script already has function '%s'" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Input Value" -msgstr "更改输入åç§°" +msgstr "更改输入的值" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Can't copy the function node." -msgstr "æ— æ³•å¯¹'..'引用æ“作" +msgstr "æ— æ³•å¤åˆ¶å‡½æ•°èŠ‚ç‚¹ã€‚" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Clipboard is empty!" -msgstr "资æºå‰ªåˆ‡æ¿ä¸æ— 内容ï¼" +msgstr "å‰ªè´´æ¿æ˜¯ç©ºçš„ ï¼" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Paste VisualScript Nodes" -msgstr "粘贴节点" +msgstr "粘贴 VisualScript 节点" #: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "åˆ é™¤å‡½æ•°" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Edit Variable" -msgstr "编辑å˜é‡:" +msgstr "编辑å˜é‡" #: modules/visual_script/visual_script_editor.cpp msgid "Remove Variable" msgstr "åˆ é™¤å˜é‡" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Edit Signal" -msgstr "编辑事件:" +msgstr "编辑信å·" #: modules/visual_script/visual_script_editor.cpp msgid "Remove Signal" @@ -7703,7 +7294,7 @@ msgstr "" msgid "" "A material to process the particles is not assigned, so no behavior is " "imprinted." -msgstr "" +msgstr "ç²’åæè´¨æ²¡æœ‰æŒ‡å®šï¼Œè¯¥è¡Œä¸ºæ— 效。" #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." @@ -7715,6 +7306,9 @@ msgid "" "by the physics engine when running.\n" "Change the size in children collision shapes instead." msgstr "" +"è¿è¡Œæ—¶ï¼Œä¿®æ”¹RigidBody2D (character或rigid模å¼ï¼‰çš„尺寸,会修改物ç†å¼•擎的大å°" +"尺寸。\n" +"修改å节点碰撞形状的大å°ä½œä¸ºä»£æ›¿ã€‚" #: scene/2d/remote_transform_2d.cpp msgid "Path property must point to a valid Node2D node to work." @@ -7743,31 +7337,31 @@ msgstr "VisibilityEnable2Dç±»åž‹çš„èŠ‚ç‚¹ç”¨äºŽåœºæ™¯çš„æ ¹èŠ‚ç‚¹æ‰èƒ½èŽ·å¾—æœ€ #: scene/3d/arvr_nodes.cpp msgid "ARVRCamera must have an ARVROrigin node as its parent" -msgstr "" +msgstr "ARVRCamera 必须处于 ARVROrigin 节点之下" #: scene/3d/arvr_nodes.cpp msgid "ARVRController must have an ARVROrigin node as its parent" -msgstr "" +msgstr "ARVRController 必须处于 ARVROrigin 节点之下" #: scene/3d/arvr_nodes.cpp msgid "" "The controller id must not be 0 or this controller will not be bound to an " "actual controller" -msgstr "" +msgstr "控制器 id å¿…é¡»ä¸ä¸º 0 æˆ–æ¤æŽ§åˆ¶å™¨å°†ä¸ç»‘定到实际的控制器" #: scene/3d/arvr_nodes.cpp msgid "ARVRAnchor must have an ARVROrigin node as its parent" -msgstr "" +msgstr "ARVRAnchor 必须处于 ARVROrigin 节点之下" #: scene/3d/arvr_nodes.cpp msgid "" "The anchor id must not be 0 or this anchor will not be bound to an actual " "anchor" -msgstr "" +msgstr "锚 id å¿…é¡»ä¸æ˜¯ 0 或这个锚点将ä¸ç»‘定到实际的锚" #: scene/3d/arvr_nodes.cpp msgid "ARVROrigin requires an ARVRCamera child node" -msgstr "" +msgstr "ARVROrigin 必须拥有 ARVRCamera å节点" #: scene/3d/collision_polygon.cpp msgid "" @@ -7813,7 +7407,7 @@ msgstr "" #: scene/3d/particles.cpp msgid "" "Nothing is visible because meshes have not been assigned to draw passes." -msgstr "" +msgstr "ç²’åä¸å¯è§ï¼Œå› ä¸ºæ²¡æœ‰ç½‘æ ¼(meshes)指定到绘制通é“(draw passes)。" #: scene/3d/physics_body.cpp msgid "" @@ -7821,6 +7415,9 @@ msgid "" "the physics engine when running.\n" "Change the size in children collision shapes instead." msgstr "" +"è¿è¡Œæ—¶ï¼Œä¿®æ”¹RigidBody(character或rigid模å¼ï¼‰çš„尺寸,会修改物ç†å¼•擎的大å°å°º" +"寸。\n" +"修改å节点碰撞形状的大å°ä½œä¸ºä»£æ›¿ã€‚" #: scene/3d/remote_transform.cpp msgid "Path property must point to a valid Spatial node to work." @@ -7839,16 +7436,25 @@ msgstr "" "SpriteFrame资æºå¿…须是通过AnimatedSprite3D节点的Frames属性创建的,å¦åˆ™æ— 法显示" "动画帧。" +#: scene/3d/vehicle_body.cpp +msgid "" +"VehicleWheel serves to provide a wheel system to a VehicleBody. Please use " +"it as a child of a VehicleBody." +msgstr "" + #: scene/gui/color_picker.cpp -#, fuzzy msgid "Raw Mode" -msgstr "移动画布" +msgstr "Raw 模å¼" #: scene/gui/color_picker.cpp msgid "Add current color as a preset" msgstr "将当å‰é¢œè‰²æ·»åŠ ä¸ºé¢„è®¾" #: scene/gui/dialogs.cpp +msgid "Cancel" +msgstr "å–æ¶ˆ" + +#: scene/gui/dialogs.cpp msgid "Alert!" msgstr "æç¤ºï¼" @@ -7856,10 +7462,6 @@ msgstr "æç¤ºï¼" msgid "Please Confirm..." msgstr "请确认..." -#: scene/gui/input_action.cpp -msgid "Ctrl+" -msgstr "Ctrl+" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -7883,7 +7485,7 @@ msgstr "" msgid "" "Default Environment as specified in Project Setings (Rendering -> Viewport -" "> Default Environment) could not be loaded." -msgstr "" +msgstr "项目设置ä¸çš„é»˜è®¤çŽ¯å¢ƒæ— æ³•åŠ è½½ï¼Œè¯¦è§ï¼ˆæ¸²æŸ“->视图->默认环境) 。" #: scene/main/viewport.cpp msgid "" @@ -7896,6 +7498,628 @@ msgstr "" "使其æˆä¸ºå控件的所以它å¯ä»¥æœ‰ä¸€ä¸ªå°ºå¯¸å¤§å°å€¼ã€‚å¦åˆ™è¯·è®¾ç½®ä¸ºRender target,并将其" "内部纹ç†åˆ†é…给一些节点以显示。" +#: scene/resources/dynamic_font.cpp +msgid "Error initializing FreeType." +msgstr "åˆå§‹åŒ–FreeType出错。" + +#: scene/resources/dynamic_font.cpp +msgid "Unknown font format." +msgstr "未知的å—ä½“æ ¼å¼ã€‚" + +#: scene/resources/dynamic_font.cpp +msgid "Error loading font." +msgstr "åŠ è½½å—体出错。" + +#: scene/resources/dynamic_font.cpp +msgid "Invalid font size." +msgstr "å—体大å°éžæ³•。" + +#~ msgid "Method List For '%s':" +#~ msgstr "'%s'的方法列表:" + +#~ msgid "Arguments:" +#~ msgstr "傿•°:" + +#~ msgid "Return:" +#~ msgstr "返回:" + +#~ msgid "Added:" +#~ msgstr "å·²æ·»åŠ :" + +#~ msgid "Removed:" +#~ msgstr "已移除:" + +#~ msgid "Error saving atlas:" +#~ msgstr "ä¿å˜è´´å›¾é›†å‡ºé”™:" + +#~ msgid "Could not save atlas subtexture:" +#~ msgstr "æ— æ³•ä¿å˜ç²¾çµé›†å贴图:" + +#~ msgid "Exporting for %s" +#~ msgstr "æ£åœ¨å¯¼å‡º %s" + +#~ msgid "Setting Up.." +#~ msgstr "é…ç½®.." + +#~ msgid "Error loading scene." +#~ msgstr "åŠ è½½åœºæ™¯å‡ºé”™ã€‚" + +#~ msgid "Re-Import" +#~ msgstr "釿–°å¯¼å…¥" + +#~ msgid "Please wait for scan to complete." +#~ msgstr "扫æä¸ï¼Œè¯·ç¨åŽ..." + +#~ msgid "Current scene must be saved to re-import." +#~ msgstr "需è¦å…ˆä¿å˜å½“å‰åœºæ™¯æ‰èƒ½é‡æ–°å¯¼å…¥ã€‚" + +#~ msgid "Save & Re-Import" +#~ msgstr "ä¿å˜å¹¶é‡æ–°å¯¼å…¥" + +#~ msgid "Re-Importing" +#~ msgstr "釿–°å¯¼å…¥" + +#~ msgid "Re-Import Changed Resources" +#~ msgstr "釿–°å¯¼å…¥æ”¹å˜çš„资æº" + +#~ msgid "Loading Export Templates" +#~ msgstr "æ£åœ¨åŠ è½½å¯¼å‡ºæ¨¡æ¿" + +#~ msgid "" +#~ "\n" +#~ "Status: Needs Re-Import" +#~ msgstr "" +#~ "\n" +#~ "状æ€ï¼š 需è¦é‡æ–°å¯¼å…¥" + +#~ msgid "Same source and destination files, doing nothing." +#~ msgstr "æºæ–‡ä»¶å’Œç›®æ ‡æ–‡ä»¶ç›¸åŒï¼Œæ“作忽略。" + +#~ msgid "Target file exists, can't overwrite. Delete first." +#~ msgstr "ç›®æ ‡æ–‡ä»¶å˜åœ¨ï¼Œæ— æ³•è¦†ç›–ã€‚è¯·å…ˆåˆ é™¤ã€‚" + +#~ msgid "Same source and destination paths, doing nothing." +#~ msgstr "æºè·¯å¾„å’Œç›®æ ‡è·¯å¾„ç›¸åŒï¼Œæ“作忽略。" + +#~ msgid "Can't move directories to within themselves." +#~ msgstr "æ— æ³•å°†ç›®å½•ç§»åŠ¨åˆ°è‡ªèº«ä¸‹ã€‚" + +#~ msgid "Can't rename deps for:\n" +#~ msgstr "æ— æ³•é‡å‘½ådeps:\n" + +#~ msgid "Error moving file:\n" +#~ msgstr "移动文件时出错:\n" + +#~ msgid "Pick New Name and Location For:" +#~ msgstr "选择新å称和路径:" + +#~ msgid "No files selected!" +#~ msgstr "没有选ä¸ä»»ä½•文件ï¼" + +#~ msgid "Info" +#~ msgstr "ä¿¡æ¯" + +#~ msgid "Re-Import.." +#~ msgstr "釿–°å¯¼å…¥.." + +#~ msgid "No bit masks to import!" +#~ msgstr "没有è¦å¯¼å…¥çš„bit masksï¼" + +#~ msgid "Target path is empty." +#~ msgstr "ç›®æ ‡è·¯å¾„ä¸ºç©ºã€‚" + +#~ msgid "Target path must be a complete resource path." +#~ msgstr "ç›®æ ‡è·¯å¾„å¿…é¡»æ˜¯ä¸€ä¸ªå®Œæ•´çš„èµ„æºæ–‡ä»¶è·¯å¾„。" + +#~ msgid "Target path must exist." +#~ msgstr "ç›®æ ‡è·¯å¾„å¿…é¡»å˜åœ¨ã€‚" + +#~ msgid "Save path is empty!" +#~ msgstr "ä¿å˜è·¯å¾„为空ï¼" + +#~ msgid "Import BitMasks" +#~ msgstr "导入BitMask" + +#~ msgid "Source Texture(s):" +#~ msgstr "æºè´´å›¾:" + +#~ msgid "Target Path:" +#~ msgstr "ç›®æ ‡è·¯å¾„:" + +#~ msgid "Accept" +#~ msgstr "接å—" + +#~ msgid "Bit Mask" +#~ msgstr "使ީç (BitMask)" + +#~ msgid "No source font file!" +#~ msgstr "请设置æºå—体文件ï¼" + +#~ msgid "No target font resource!" +#~ msgstr "è¯·è®¾ç½®ç›®æ ‡å—体资æºï¼" + +#~ msgid "" +#~ "Invalid file extension.\n" +#~ "Please use .font." +#~ msgstr "" +#~ "文件扩展åä¸åˆæ³•\n" +#~ "请使用.font文件。" + +#~ msgid "Couldn't save font." +#~ msgstr "æ— æ³•ä¿å˜å—体。" + +#~ msgid "Source Font:" +#~ msgstr "æºå—体文件:" + +#~ msgid "Source Font Size:" +#~ msgstr "æºå—体大å°:" + +#~ msgid "Dest Resource:" +#~ msgstr "ç›®æ ‡èµ„æº:" + +#~ msgid "The quick brown fox jumps over the lazy dog." +#~ msgstr "" +#~ "The quick brown fox jumps over the lazy dog.\n" +#~ "我能åžä¸‹çŽ»ç’ƒè€Œä¸ä¼¤èº«ä½“。" + +#~ msgid "Test:" +#~ msgstr "测试:" + +#~ msgid "Options:" +#~ msgstr "选项:" + +#~ msgid "Font Import" +#~ msgstr "导入å—体" + +#~ msgid "" +#~ "This file is already a Godot font file, please supply a BMFont type file " +#~ "instead." +#~ msgstr "æ¤æ–‡ä»¶å·²ç»æ˜¯ä¸€ä¸ªGodotçš„å—体文件,请æä¾›ä¸€ä¸ªä½å›¾å—体(BMFont)文件。" + +#~ msgid "Failed opening as BMFont file." +#~ msgstr "打开ä½å›¾å—体失败。" + +#~ msgid "Invalid font custom source." +#~ msgstr "自定义å—ä½“æ–‡ä»¶éžæ³•。" + +#~ msgid "No meshes to import!" +#~ msgstr "没有è¦å¯¼å…¥çš„Meshï¼" + +#~ msgid "Single Mesh Import" +#~ msgstr "导入å•个Mesh" + +#~ msgid "Source Mesh(es):" +#~ msgstr "æºMesh:" + +#~ msgid "Surface %d" +#~ msgstr "è¡¨é¢ %d" + +#~ msgid "No samples to import!" +#~ msgstr "没有音效è¦å¯¼å…¥ï¼" + +#~ msgid "Import Audio Samples" +#~ msgstr "导入声音文件" + +#~ msgid "Source Sample(s):" +#~ msgstr "æºéŸ³æ•ˆæ–‡ä»¶:" + +#~ msgid "Audio Sample" +#~ msgstr "音效" + +#~ msgid "New Clip" +#~ msgstr "新片段" + +#~ msgid "Flags" +#~ msgstr "æ ‡è®°" + +#~ msgid "Bake FPS:" +#~ msgstr "烘培FPS:" + +#~ msgid "Optimizer" +#~ msgstr "优化" + +#~ msgid "Max Linear Error" +#~ msgstr "最大线性误差" + +#~ msgid "Max Angular Error" +#~ msgstr "最大角度误差" + +#~ msgid "Max Angle" +#~ msgstr "最大角度" + +#~ msgid "Clips" +#~ msgstr "片段" + +#~ msgid "Start(s)" +#~ msgstr "起点" + +#~ msgid "End(s)" +#~ msgstr "终点" + +#~ msgid "Filters" +#~ msgstr "ç›é€‰" + +#~ msgid "Source path is empty." +#~ msgstr "æºè·¯å¾„为空。" + +#~ msgid "Couldn't load post-import script." +#~ msgstr "æ— æ³•è½½å…¥åŽå¯¼å…¥è„šæœ¬ã€‚" + +#~ msgid "Invalid/broken script for post-import." +#~ msgstr "åŽå¯¼å…¥è„šæœ¬è¢«æŸå或ä¸åˆæ³•。" + +#~ msgid "Error importing scene." +#~ msgstr "导入场景出错。" + +#~ msgid "Import 3D Scene" +#~ msgstr "导入3D场景" + +#~ msgid "Source Scene:" +#~ msgstr "æºåœºæ™¯:" + +#~ msgid "Same as Target Scene" +#~ msgstr "ä¸Žç›®æ ‡åœºæ™¯ç›¸åŒ" + +#~ msgid "Shared" +#~ msgstr "共享的" + +#~ msgid "Target Texture Folder:" +#~ msgstr "ç›®æ ‡è´´å›¾ç›®å½•:" + +#~ msgid "Post-Process Script:" +#~ msgstr "åŽå¤„ç†è„šæœ¬:" + +#~ msgid "Custom Root Node Type:" +#~ msgstr "è‡ªå®šä¹‰æ ¹èŠ‚ç‚¹ç±»åž‹:" + +#~ msgid "Auto" +#~ msgstr "自动" + +#~ msgid "Root Node Name:" +#~ msgstr "节点åç§°:" + +#~ msgid "The Following Files are Missing:" +#~ msgstr "找ä¸åˆ°ä¸‹åˆ—文件:" + +#~ msgid "Import Anyway" +#~ msgstr "ä»ç„¶å¯¼å…¥" + +#~ msgid "Import & Open" +#~ msgstr "导入|打开" + +#~ msgid "Edited scene has not been saved, open imported scene anyway?" +#~ msgstr "æ£åœ¨ç¼–辑的场景尚未ä¿å˜ï¼Œä»ç„¶è¦æ‰“开导入的场景å—?" + +#~ msgid "Import Image:" +#~ msgstr "导入图片:" + +#~ msgid "Couldn't localize path: %s (already local)" +#~ msgstr "æ— æ³•æœ¬åœ°åŒ–è·¯å¾„:%s (å·²ç»æ˜¯æœ¬åœ°è·¯å¾„)" + +#~ msgid "3D Scene Animation" +#~ msgstr "3D场景动画" + +#~ msgid "Uncompressed" +#~ msgstr "ä¸åŽ‹ç¼©" + +#~ msgid "Compress Lossless (PNG)" +#~ msgstr "æ— æŸåŽ‹ç¼©ï¼ˆPNG)" + +#~ msgid "Compress Lossy (WebP)" +#~ msgstr "有æŸåŽ‹ç¼©ï¼ˆWebP)" + +#~ msgid "Compress (VRAM)" +#~ msgstr "VRAM压缩" + +#~ msgid "Texture Format" +#~ msgstr "çº¹ç†æ ¼å¼" + +#~ msgid "Texture Compression Quality (WebP):" +#~ msgstr "高质é‡ï¼ˆWebP)压缩方å¼:" + +#~ msgid "Texture Options" +#~ msgstr "纹ç†é€‰é¡¹" + +#~ msgid "Please specify some files!" +#~ msgstr "è¯·æ·»åŠ æ–‡ä»¶ï¼" + +#~ msgid "At least one file needed for Atlas." +#~ msgstr "ç²¾çµé›†è‡³å°‘需è¦ä¸€ä¸ªæ–‡ä»¶ã€‚" + +#~ msgid "Error importing:" +#~ msgstr "导入出错:" + +#~ msgid "Only one file is required for large texture." +#~ msgstr "大图导入仅支æŒä¸€ä¸ªè¾“入文件。" + +#~ msgid "Max Texture Size:" +#~ msgstr "最大纹ç†å°ºå¯¸:" + +#~ msgid "Import Textures for Atlas (2D)" +#~ msgstr "导入2Dç²¾çµé›†" + +#~ msgid "Cell Size:" +#~ msgstr "å•元尺寸:" + +#~ msgid "Large Texture" +#~ msgstr "大图" + +#~ msgid "Import Large Textures (2D)" +#~ msgstr "导入2D大图" + +#~ msgid "Source Texture" +#~ msgstr "æºè´´å›¾" + +#~ msgid "Base Atlas Texture" +#~ msgstr "基础图集纹ç†" + +#~ msgid "Source Texture(s)" +#~ msgstr "æºè´´å›¾(s)" + +#~ msgid "Import Textures for 2D" +#~ msgstr "导入2D贴图" + +#~ msgid "Import Textures for 3D" +#~ msgstr "导入3D贴图" + +#~ msgid "Import Textures" +#~ msgstr "导入贴图" + +#~ msgid "2D Texture" +#~ msgstr "2D贴图" + +#~ msgid "3D Texture" +#~ msgstr "3D贴图" + +#~ msgid "Atlas Texture" +#~ msgstr "ç²¾çµå›¾é›†" + +#~ msgid "" +#~ "NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files " +#~ "to the project." +#~ msgstr "" +#~ "æç¤º:大多数2D贴图并ä¸éœ€è¦å¯¼å…¥æ“作,åªè¦å°†png/jpg文件放到项目目录下å³å¯ã€‚" + +#~ msgid "Crop empty space." +#~ msgstr "切除空白区域。" + +#~ msgid "Texture" +#~ msgstr "贴图" + +#~ msgid "Import Large Texture" +#~ msgstr "导入大图" + +#~ msgid "Load Source Image" +#~ msgstr "åŠ è½½æºå›¾ç‰‡" + +#~ msgid "Slicing" +#~ msgstr "切片ä¸" + +#~ msgid "Saving" +#~ msgstr "æ£åœ¨ä¿å˜æ–‡ä»¶" + +#~ msgid "Couldn't save large texture:" +#~ msgstr "æ— æ³•ä¿å˜å¤§å›¾:" + +#~ msgid "Build Atlas For:" +#~ msgstr "使用以下图片生æˆç²¾çµé›†:" + +#~ msgid "Loading Image:" +#~ msgstr "åŠ è½½å›¾ç‰‡ä¸:" + +#~ msgid "Couldn't load image:" +#~ msgstr "æ— æ³•åŠ è½½å›¾ç‰‡:" + +#~ msgid "Converting Images" +#~ msgstr "æ£åœ¨è½¬æ¢å›¾ç‰‡" + +#~ msgid "Cropping Images" +#~ msgstr "剪è£å›¾ç‰‡" + +#~ msgid "Blitting Images" +#~ msgstr "Blitting 图片" + +#~ msgid "Couldn't save atlas image:" +#~ msgstr "æ— æ³•ä¿å˜ç²¾çµé›†å›¾ç‰‡:" + +#~ msgid "Couldn't save converted texture:" +#~ msgstr "æ— æ³•ä¿å˜è½¬æ¢çš„贴图:" + +#~ msgid "Invalid source!" +#~ msgstr "输入æºéžæ³•ï¼" + +#~ msgid "Invalid translation source!" +#~ msgstr "æºè¯è¨€æ–‡ä»¶éžæ³•ï¼" + +#~ msgid "Column" +#~ msgstr "列" + +#~ msgid "No items to import!" +#~ msgstr "没有è¦å¯¼å…¥çš„项目ï¼" + +#~ msgid "No target path!" +#~ msgstr "ç›®æ ‡è·¯å¾„ä¸ºç©ºï¼" + +#~ msgid "Import Translations" +#~ msgstr "导入多ç§è¯è¨€ç¿»è¯‘" + +#~ msgid "Couldn't import!" +#~ msgstr "æ— æ³•å¯¼å…¥ï¼" + +#~ msgid "Import Translation" +#~ msgstr "导入è¯è¨€ç¿»è¯‘" + +#~ msgid "Source CSV:" +#~ msgstr "æºCSV文件:" + +#~ msgid "Ignore First Row" +#~ msgstr "忽略第一行" + +#~ msgid "Compress" +#~ msgstr "压缩" + +#~ msgid "Add to Project (project.godot)" +#~ msgstr "æ·»åŠ åˆ°é¡¹ç›® (project.godot)" + +#~ msgid "Import Languages:" +#~ msgstr "导入è¯è¨€:" + +#~ msgid "Translation" +#~ msgstr "è¯è¨€" + +#~ msgid "Parsing %d Triangles:" +#~ msgstr "æ£åœ¨è§£æžç¬¬%d个三角形:" + +#~ msgid "Triangle #" +#~ msgstr "三角形 #" + +#~ msgid "Light Baker Setup:" +#~ msgstr "建立烘培:" + +#~ msgid "Fixing Lights" +#~ msgstr "ä¿®æ£å…‰ç…§" + +#~ msgid "Making BVH" +#~ msgstr "制作BVH(动作骨骼)" + +#~ msgid "Transfer to Lightmaps:" +#~ msgstr "转移到光照贴图:" + +#~ msgid "Allocating Texture #" +#~ msgstr "分é…çº¹ç† #" + +#~ msgid "Baking Triangle #" +#~ msgstr "烘培三角形 #" + +#~ msgid "Post-Processing Texture #" +#~ msgstr "åŽåŠ å·¥çº¹ç† #" + +#~ msgid "Reset the lightmap octree baking process (start over)." +#~ msgstr "é‡ç½®è´´å›¾çƒ˜ç„™è¿‡ç¨‹ ï¼ˆé‡æ–°å¼€å§‹ï¼‰ çš„ octree (八剿 ‘)。" + +#~ msgid "Zoom (%):" +#~ msgstr "缩放(%):" + +#~ msgid "Skeleton.." +#~ msgstr "骨骼.." + +#~ msgid "Zoom Reset" +#~ msgstr "é‡ç½®ç¼©æ”¾" + +#~ msgid "Zoom Set.." +#~ msgstr "设置缩放.." + +#~ msgid "Set a Value" +#~ msgstr "设置值" + +#~ msgid "Snap (Pixels):" +#~ msgstr "å¸é™„(åƒç´ ):" + +#~ msgid "Parse BBCode" +#~ msgstr "è§£æžBBCode" + +#~ msgid "Length:" +#~ msgstr "长度:" + +#~ msgid "Open Sample File(s)" +#~ msgstr "打开声音文件" + +#~ msgid "ERROR: Couldn't load sample!" +#~ msgstr "错误:æ— æ³•åŠ è½½éŸ³æ•ˆï¼" + +#~ msgid "Add Sample" +#~ msgstr "æ·»åŠ éŸ³æ•ˆ" + +#~ msgid "Rename Sample" +#~ msgstr "é‡å‘½å音效" + +#~ msgid "Delete Sample" +#~ msgstr "åˆ é™¤éŸ³æ•ˆ" + +#~ msgid "16 Bits" +#~ msgstr "16ä½" + +#~ msgid "8 Bits" +#~ msgstr "8ä½" + +#~ msgid "Stereo" +#~ msgstr "立体声" + +#~ msgid "Mono" +#~ msgstr "å•声é“" + +#~ msgid "Pitch" +#~ msgstr "音调" + +#~ msgid "Window" +#~ msgstr "窗å£" + +#~ msgid "Move Right" +#~ msgstr "å‘å³ç§»åЍ" + +#~ msgid "Scaling to %s%%." +#~ msgstr "缩放到%s%%。" + +#~ msgid "Up" +#~ msgstr "å‘上" + +#~ msgid "Down" +#~ msgstr "å‘下" + +#~ msgid "Bucket" +#~ msgstr "æ¡¶(Bucket)" + +#~ msgid "Invalid project path, the path must exist!" +#~ msgstr "项目目录ä¸å˜åœ¨ï¼" + +#~ msgid "Invalid project path, project.godot must not exist." +#~ msgstr "项目目录下ä¸èƒ½åŒ…å«project.godot文件。" + +#~ msgid "Invalid project path, project.godot must exist." +#~ msgstr "项目目录下必须包å«project.godot文件。" + +#~ msgid "Project Path (Must Exist):" +#~ msgstr "项目目录(必须å˜åœ¨ï¼‰:" + +#~ msgid "Create New Resource" +#~ msgstr "创建资æº" + +#~ msgid "Open Resource" +#~ msgstr "打开资æº" + +#~ msgid "Save Resource" +#~ msgstr "ä¿å˜èµ„æº" + +#~ msgid "Resource Tools" +#~ msgstr "资æºå·¥å…·" + +#~ msgid "Make Local" +#~ msgstr "使用本地" + +#~ msgid "Edit Groups" +#~ msgstr "编辑分组" + +#~ msgid "Edit Connections" +#~ msgstr "编辑事件连接" + +#~ msgid "GridMap Paint" +#~ msgstr "ç»˜åˆ¶æ …æ ¼å›¾" + +#~ msgid "Tiles" +#~ msgstr "ç –å—(Tiles)" + +#~ msgid "Areas" +#~ msgstr "区域" + +#~ msgid "Ctrl+" +#~ msgstr "Ctrl+" + +#~ msgid "Down Wheel)" +#~ msgstr "下轮)" + +#~ msgid "Up Wheel)" +#~ msgstr "上轮)" + #~ msgid "Close scene? (Unsaved changes will be lost)" #~ msgstr "确定è¦å…³é—场景å—?(未ä¿å˜çš„修改将丢失)" @@ -7909,9 +8133,6 @@ msgstr "" #~ msgid "Close Goto Prev. Scene" #~ msgstr "å…³é—å¹¶å‰å¾€ä¸Šä¸€ä¸ªåœºæ™¯" -#~ msgid "Expand to Parent" -#~ msgstr "展开父节点" - #~ msgid "Del" #~ msgstr "åˆ é™¤" @@ -8070,18 +8291,12 @@ msgstr "" #~ msgid "Save Translatable Strings" #~ msgstr "ä¿å˜å¯ç¿»è¯‘å—符串" -#~ msgid "Translatable Strings.." -#~ msgstr "å¯ç¿»è¯‘å—符串.." - #~ msgid "Install Export Templates" #~ msgstr "安装导出模æ¿" #~ msgid "Edit Script Options" #~ msgstr "脚本编辑器选项" -#~ msgid "Please export outside the project folder!" -#~ msgstr "请导出到项目目录之外ï¼" - #~ msgid "Error exporting project!" #~ msgstr "导出项目出错ï¼" @@ -8140,18 +8355,12 @@ msgstr "" #~ msgid "Include" #~ msgstr "包å«" -#~ msgid "Change Image Group" -#~ msgstr "修改图片分组" - #~ msgid "Group name can't be empty!" #~ msgstr "分组åç§°ä¸èƒ½ä¸ºç©ºï¼" #~ msgid "Invalid character in group name!" #~ msgstr "分组åç§°ä¸åŒ…å«éžæ³•å—符ï¼" -#~ msgid "Group name already exists!" -#~ msgstr "分组åç§°å·²å˜åœ¨ï¼" - #~ msgid "Add Image Group" #~ msgstr "æ·»åŠ å›¾ç‰‡åˆ†ç»„" diff --git a/editor/translations/zh_HK.po b/editor/translations/zh_HK.po index f04322ff3c..e4f565f0c3 100644 --- a/editor/translations/zh_HK.po +++ b/editor/translations/zh_HK.po @@ -196,10 +196,9 @@ msgid "Create %d NEW tracks and insert keys?" msgstr "" #: editor/animation_editor.cpp editor/create_dialog.cpp -#: editor/editor_audio_buses.cpp +#: editor/editor_audio_buses.cpp editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp #: editor/plugins/mesh_instance_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp editor/project_manager.cpp #: editor/script_create_dialog.cpp msgid "Create" @@ -361,265 +360,6 @@ msgstr "" msgid "Change Array Value" msgstr "" -#: editor/asset_library_editor_plugin.cpp -msgid "Free" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp -msgid "Version:" -msgstr "版本:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Contents:" -msgstr "內容:" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "View Files" -msgstr "檔案" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_help.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp -msgid "Description:" -msgstr "æè¿°ï¼š" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -#: editor/project_manager.cpp -msgid "Install" -msgstr "安è£" - -#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp -#: editor/connections_dialog.cpp editor/export_template_manager.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -#: editor/project_settings_editor.cpp editor/property_editor.cpp -#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Close" -msgstr "關閉" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve hostname:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Connection error, please try again." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't connect." -msgstr "ä¸èƒ½é€£æŽ¥ã€‚" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't connect to host:" -msgstr "ä¸èƒ½é€£åˆ°ä¸»æ©Ÿï¼š" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response from host:" -msgstr "主機沒有回應:" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response." -msgstr "沒有回應。" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Request failed, return code:" -msgstr "請求失敗," - -#: editor/asset_library_editor_plugin.cpp -msgid "Req. Failed." -msgstr "請求失敗。" - -#: editor/asset_library_editor_plugin.cpp -msgid "Request failed, too many redirects" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Redirect Loop." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed:" -msgstr "失敗:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Bad download hash, assuming file has been tampered with." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Expected:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Got:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed sha256 hash check" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Asset Download Error:" -msgstr "Asset下載出ç¾éŒ¯èª¤ï¼š" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -msgid "Success!" -msgstr "æˆåŠŸï¼" - -#: editor/asset_library_editor_plugin.cpp -msgid "Fetching:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Resolving.." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Connecting.." -msgstr "連到..." - -#: editor/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "請求ä¸..." - -#: editor/asset_library_editor_plugin.cpp -msgid "Error making request" -msgstr "請求時出ç¾éŒ¯èª¤" - -#: editor/asset_library_editor_plugin.cpp -msgid "Idle" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Retry" -msgstr "é‡è©¦" - -#: editor/asset_library_editor_plugin.cpp -msgid "Download Error" -msgstr "下載出ç¾éŒ¯èª¤" - -#: editor/asset_library_editor_plugin.cpp -msgid "Download for this asset is already in progress!" -msgstr "Asset已在下載ä¸" - -#: editor/asset_library_editor_plugin.cpp -msgid "first" -msgstr "首é " - -#: editor/asset_library_editor_plugin.cpp -msgid "prev" -msgstr "上一é " - -#: editor/asset_library_editor_plugin.cpp -msgid "next" -msgstr "下一é " - -#: editor/asset_library_editor_plugin.cpp -msgid "last" -msgstr "å°¾é " - -#: editor/asset_library_editor_plugin.cpp -msgid "All" -msgstr "全部" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/property_selector.cpp editor/quick_open.cpp -#: editor/settings_config_dialog.cpp -msgid "Search:" -msgstr "æœå°‹ï¼š" - -#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Search" -msgstr "æœå°‹" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/project_manager.cpp -msgid "Import" -msgstr "å°Žå…¥" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Plugins" -msgstr "æ’ä»¶" - -#: editor/asset_library_editor_plugin.cpp -msgid "Sort:" -msgstr "排åºï¼š" - -#: editor/asset_library_editor_plugin.cpp -msgid "Reverse" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Category:" -msgstr "分類:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Site:" -msgstr "地å€:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Official" -msgstr "官方" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -msgid "Community" -msgstr "社群" - -#: editor/asset_library_editor_plugin.cpp -msgid "Testing" -msgstr "測試" - -#: editor/asset_library_editor_plugin.cpp -msgid "Assets ZIP File" -msgstr "Assets ZIP 檔" - -#: editor/call_dialog.cpp -msgid "Method List For '%s':" -msgstr "" - -#: editor/call_dialog.cpp modules/visual_script/visual_script_editor.cpp -msgid "Call" -msgstr "" - -#: editor/call_dialog.cpp -msgid "Method List:" -msgstr "" - -#: editor/call_dialog.cpp -msgid "Arguments:" -msgstr "" - -#: editor/call_dialog.cpp -msgid "Return:" -msgstr "" - #: editor/code_editor.cpp msgid "Go to Line" msgstr "跳到行" @@ -656,6 +396,14 @@ msgstr "完整詞語" msgid "Selection Only" msgstr "åªé™é¸ä¸" +#: editor/code_editor.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp +msgid "Search" +msgstr "æœå°‹" + #: editor/code_editor.cpp editor/editor_help.cpp msgid "Find" msgstr "查找" @@ -688,11 +436,11 @@ msgstr "" msgid "Skip" msgstr "è·³éŽ" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom In" msgstr "放大" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom Out" msgstr "縮å°" @@ -760,6 +508,20 @@ msgstr "" msgid "Oneshot" msgstr "" +#: editor/connections_dialog.cpp editor/dependency_editor.cpp +#: editor/export_template_manager.cpp +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Close" +msgstr "關閉" + #: editor/connections_dialog.cpp msgid "Connect" msgstr "連到" @@ -785,7 +547,7 @@ msgstr "連到..." msgid "Disconnect" msgstr "䏿–·" -#: editor/connections_dialog.cpp editor/node_dock.cpp +#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" msgstr "訊號" @@ -802,12 +564,25 @@ msgstr "最愛:" msgid "Recent:" msgstr "最近:" +#: editor/create_dialog.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp +#: editor/quick_open.cpp editor/settings_config_dialog.cpp +msgid "Search:" +msgstr "æœå°‹ï¼š" + #: editor/create_dialog.cpp editor/editor_help.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp #: editor/quick_open.cpp msgid "Matches:" msgstr "å»åˆï¼š" +#: editor/create_dialog.cpp editor/editor_help.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp +#: editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "æè¿°ï¼š" + #: editor/dependency_editor.cpp msgid "Search Replacement For:" msgstr "æœå°‹å’Œæ›¿ä»£ç‚ºï¼š" @@ -863,6 +638,10 @@ msgid "Owners Of:" msgstr "" #: editor/dependency_editor.cpp +msgid "Remove selected files from the project? (no undo)" +msgstr "" + +#: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" @@ -870,7 +649,7 @@ msgid "" msgstr "" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (no undo)" +msgid "Cannot remove:\n" msgstr "" #: editor/dependency_editor.cpp @@ -937,10 +716,6 @@ msgid "Godot Engine contributors" msgstr "" #: editor/editor_about.cpp -msgid "Authors" -msgstr "" - -#: editor/editor_about.cpp #, fuzzy msgid "Project Founders" msgstr "專案è¨å®š" @@ -959,6 +734,38 @@ msgid "Developers" msgstr "開發者" #: editor/editor_about.cpp +msgid "Authors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Platinum Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Mini Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Silver Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Bronze Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Donors" +msgstr "" + +#: editor/editor_about.cpp msgid "License" msgstr "" @@ -1002,6 +809,16 @@ msgid "Package Installed Successfully!" msgstr "" #: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Success!" +msgstr "æˆåŠŸï¼" + +#: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp +msgid "Install" +msgstr "安è£" + +#: editor/editor_asset_installer.cpp msgid "Package Installer" msgstr "" @@ -1052,11 +869,6 @@ msgid "Audio Bus, Drag and Drop to rearrange." msgstr "" #: editor/editor_audio_buses.cpp -#, fuzzy -msgid "Bus options" -msgstr "é¸é …" - -#: editor/editor_audio_buses.cpp msgid "Solo" msgstr "" @@ -1068,6 +880,11 @@ msgstr "" msgid "Bypass" msgstr "" +#: editor/editor_audio_buses.cpp +#, fuzzy +msgid "Bus options" +msgstr "é¸é …" + #: editor/editor_audio_buses.cpp editor/plugins/tile_map_editor_plugin.cpp #: editor/scene_tree_dock.cpp msgid "Duplicate" @@ -1075,6 +892,11 @@ msgstr "複製" #: editor/editor_audio_buses.cpp #, fuzzy +msgid "Reset Volume" +msgstr "é‡è¨ç¸®æ”¾æ¯”例" + +#: editor/editor_audio_buses.cpp +#, fuzzy msgid "Delete Effect" msgstr "刪除é¸ä¸æª”案" @@ -1098,6 +920,11 @@ msgstr "複製" #: editor/editor_audio_buses.cpp #, fuzzy +msgid "Reset Bus Volume" +msgstr "é‡è¨ç¸®æ”¾æ¯”例" + +#: editor/editor_audio_buses.cpp +#, fuzzy msgid "Move Audio Bus" msgstr "移動" @@ -1129,7 +956,8 @@ msgstr "" msgid "Create a new Bus Layout." msgstr "" -#: editor/editor_audio_buses.cpp editor/script_create_dialog.cpp +#: editor/editor_audio_buses.cpp editor/property_editor.cpp +#: editor/script_create_dialog.cpp msgid "Load" msgstr "" @@ -1233,7 +1061,7 @@ msgid "Rearrange Autoloads" msgstr "釿–°æŽ’例Autoloads" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp scene/gui/file_dialog.cpp +#: scene/gui/file_dialog.cpp msgid "Path:" msgstr "路徑:" @@ -1241,9 +1069,7 @@ msgstr "路徑:" msgid "Node Name:" msgstr "" -#: editor/editor_autoload_settings.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp editor/project_manager.cpp +#: editor/editor_autoload_settings.cpp editor/project_manager.cpp msgid "Name" msgstr "å稱" @@ -1277,18 +1103,19 @@ msgid "Choose a Directory" msgstr "鏿“‡è³‡æ–™å¤¾" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Create Folder" msgstr "新增資料夾" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: editor/editor_plugin_settings.cpp editor/plugins/theme_editor_plugin.cpp -#: editor/project_export.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp +#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp +#: scene/gui/file_dialog.cpp msgid "Name:" msgstr "å稱:" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Could not create folder." msgstr "無法新增資料夾" @@ -1308,30 +1135,6 @@ msgstr "" msgid "Template file not found:\n" msgstr "" -#: editor/editor_export.cpp -msgid "Added:" -msgstr "å·²åŠ å…¥ï¼š" - -#: editor/editor_export.cpp -msgid "Removed:" -msgstr "已移除:" - -#: editor/editor_export.cpp -msgid "Error saving atlas:" -msgstr "" - -#: editor/editor_export.cpp -msgid "Could not save atlas subtexture:" -msgstr "" - -#: editor/editor_export.cpp -msgid "Exporting for %s" -msgstr "" - -#: editor/editor_export.cpp -msgid "Setting Up.." -msgstr "" - #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "檔案已å˜åœ¨, è¦è¦†è“‹å—Ž?" @@ -1417,6 +1220,11 @@ msgstr "上移最愛" msgid "Move Favorite Down" msgstr "下移最愛" +#: editor/editor_file_dialog.cpp +#, fuzzy +msgid "Go to parent folder" +msgstr "無法新增資料夾" + #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Directories & Files:" msgstr "資料夾和檔案:" @@ -1460,6 +1268,10 @@ msgstr "" msgid "Search Classes" msgstr "" +#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +msgid "Top" +msgstr "" + #: editor/editor_help.cpp editor/property_editor.cpp msgid "Class:" msgstr "" @@ -1476,15 +1288,28 @@ msgstr "" msgid "Brief Description:" msgstr "" +#: editor/editor_help.cpp +msgid "Members" +msgstr "" + #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "" #: editor/editor_help.cpp +#, fuzzy +msgid "Public Methods" +msgstr "鏿“‡æ¨¡å¼" + +#: editor/editor_help.cpp msgid "Public Methods:" msgstr "" #: editor/editor_help.cpp +msgid "GUI Theme Items" +msgstr "" + +#: editor/editor_help.cpp msgid "GUI Theme Items:" msgstr "" @@ -1494,6 +1319,11 @@ msgstr "訊號:" #: editor/editor_help.cpp #, fuzzy +msgid "Enumerations" +msgstr "ç¿»è¯:" + +#: editor/editor_help.cpp +#, fuzzy msgid "Enumerations:" msgstr "ç¿»è¯:" @@ -1502,18 +1332,49 @@ msgid "enum " msgstr "" #: editor/editor_help.cpp +#, fuzzy +msgid "Constants" +msgstr "常數" + +#: editor/editor_help.cpp msgid "Constants:" msgstr "" #: editor/editor_help.cpp +#, fuzzy +msgid "Description" +msgstr "æè¿°ï¼š" + +#: editor/editor_help.cpp +msgid "Properties" +msgstr "" + +#: editor/editor_help.cpp msgid "Property Description:" msgstr "" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this property. Please help us by " +"[color=$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp +#, fuzzy +msgid "Methods" +msgstr "鏿“‡æ¨¡å¼" + +#: editor/editor_help.cpp msgid "Method Description:" msgstr "" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this method. Please help us by [color=" +"$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp msgid "Search Text" msgstr "" @@ -1522,25 +1383,22 @@ msgid "Output:" msgstr "" #: editor/editor_log.cpp editor/plugins/animation_tree_editor_plugin.cpp -#: editor/plugins/rich_text_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_editor_debugger.cpp scene/gui/line_edit.cpp -#: scene/gui/text_edit.cpp +#: editor/property_editor.cpp editor/script_editor_debugger.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Clear" msgstr "清空" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp #, fuzzy msgid "Error saving resource!" msgstr "儲å˜è³‡æºæ™‚出ç¾éŒ¯èª¤ï¼" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Save Resource As.." msgstr "把資æºå¦å˜ç‚º..." -#: editor/editor_node.cpp editor/export_template_manager.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "I see.." msgstr "如來如æ¤" @@ -1559,6 +1417,29 @@ msgid "Error while saving." msgstr "å„²å˜æ™‚出ç¾éŒ¯èª¤" #: editor/editor_node.cpp +#, fuzzy +msgid "Can't open '%s'." +msgstr "ä¸èƒ½é€£æŽ¥ã€‚" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Error while parsing '%s'." +msgstr "å„²å˜æ™‚出ç¾éŒ¯èª¤" + +#: editor/editor_node.cpp +msgid "Unexpected end of file '%s'." +msgstr "" + +#: editor/editor_node.cpp +msgid "Missing '%s' or its dependencies." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Error while loading '%s'." +msgstr "å„²å˜æ™‚出ç¾éŒ¯èª¤" + +#: editor/editor_node.cpp msgid "Saving Scene" msgstr "å ´æ™¯å„²å˜ä¸" @@ -1619,6 +1500,33 @@ msgid "Restored default layout to base settings." msgstr "é‡è¨é è¨ä½ˆå±€ã€‚" #: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was imported, so it's not editable.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was instanced or inherited.\n" +"Changes to it will not be kept when saving the current scene." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource was imported, so it's not editable. Change its settings in the " +"import panel and then re-import." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This scene was imported, so changes to it will not be kept.\n" +"Instancing it or inheriting will allow making changes to it.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp #, fuzzy msgid "Copy Params" msgstr "è¤‡è£½åƒæ•¸" @@ -1785,6 +1693,12 @@ msgid "Save changes the following scene(s) before opening Project Manager?" msgstr "" #: editor/editor_node.cpp +msgid "" +"This option is deprecated. Situations where refresh must be forced are now " +"considered a bug. Please report." +msgstr "" + +#: editor/editor_node.cpp msgid "Pick a Main Scene" msgstr "鏿“‡ä¸»å ´æ™¯" @@ -1811,7 +1725,7 @@ msgid "" msgstr "" #: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Ugh" msgstr "" @@ -1822,14 +1736,15 @@ msgid "" msgstr "" #: editor/editor_node.cpp -msgid "Error loading scene." -msgstr "è¼‰å…¥å ´æ™¯æ™‚å‡ºç¾éŒ¯èª¤" - -#: editor/editor_node.cpp msgid "Scene '%s' has broken dependencies:" msgstr "" #: editor/editor_node.cpp +#, fuzzy +msgid "Clear Recent Scenes" +msgstr "é—œé–‰å ´æ™¯" + +#: editor/editor_node.cpp msgid "Save Layout" msgstr "儲å˜ä½ˆå±€" @@ -1862,7 +1777,7 @@ msgstr "" msgid "Toggle distraction-free mode." msgstr "" -#: editor/editor_node.cpp editor/io_plugins/editor_scene_import_plugin.cpp +#: editor/editor_node.cpp msgid "Scene" msgstr "å ´æ™¯" @@ -2085,6 +2000,10 @@ msgstr "" msgid "Issue Tracker" msgstr "" +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +msgid "Community" +msgstr "社群" + #: editor/editor_node.cpp msgid "About" msgstr "關於" @@ -2093,7 +2012,7 @@ msgstr "關於" msgid "Play the project." msgstr "é‹è¡Œå°ˆæ¡ˆ" -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Play" msgstr "é‹è¡Œ" @@ -2109,7 +2028,7 @@ msgstr "æš«åœå ´æ™¯" msgid "Stop the scene." msgstr "åœæ¢é‹è¡Œå ´æ™¯" -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Stop" msgstr "åœæ¢" @@ -2182,6 +2101,15 @@ msgid "Object properties." msgstr "" #: editor/editor_node.cpp +msgid "Changes may be lost!" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Import" +msgstr "å°Žå…¥" + +#: editor/editor_node.cpp msgid "FileSystem" msgstr "" @@ -2197,14 +2125,6 @@ msgstr "" msgid "Don't Save" msgstr "" -#: editor/editor_node.cpp editor/editor_reimport_dialog.cpp -msgid "Re-Import" -msgstr "" - -#: editor/editor_node.cpp editor/editor_plugin_settings.cpp -msgid "Update" -msgstr "æ›´æ–°" - #: editor/editor_node.cpp msgid "Import Templates From ZIP File" msgstr "" @@ -2269,11 +2189,28 @@ msgstr "è¦é›¢é–‹ç·¨è¼¯å™¨å—Ž?" msgid "Open the previous Editor" msgstr "" +#: editor/editor_plugin.cpp +msgid "Creating Mesh Previews" +msgstr "" + +#: editor/editor_plugin.cpp +msgid "Thumbnail.." +msgstr "" + #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" msgstr "" #: editor/editor_plugin_settings.cpp +msgid "Update" +msgstr "æ›´æ–°" + +#: editor/editor_plugin_settings.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Version:" +msgstr "版本:" + +#: editor/editor_plugin_settings.cpp msgid "Author:" msgstr "" @@ -2325,26 +2262,6 @@ msgstr "" msgid "Frame #:" msgstr "" -#: editor/editor_reimport_dialog.cpp -msgid "Please wait for scan to complete." -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Current scene must be saved to re-import." -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Save & Re-Import" -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Importing" -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Import Changed Resources" -msgstr "" - #: editor/editor_run_native.cpp msgid "Select device from the list" msgstr "" @@ -2454,10 +2371,6 @@ msgid "Importing:" msgstr "å°Žå…¥ä¸:" #: editor/export_template_manager.cpp -msgid "Loading Export Templates" -msgstr "" - -#: editor/export_template_manager.cpp msgid "Current Version:" msgstr "" @@ -2493,9 +2406,17 @@ msgid "Cannot navigate to '" msgstr "" #: editor/filesystem_dock.cpp +msgid "View items as a grid of thumbnails" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "View items as a list" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "" "\n" -"Status: Needs Re-Import" +"Status: Import of file failed. Please fix file and reimport manually." msgstr "" #: editor/filesystem_dock.cpp @@ -2506,45 +2427,50 @@ msgid "" msgstr "來æº:" #: editor/filesystem_dock.cpp -msgid "Same source and destination files, doing nothing." +msgid "Cannot move/rename resources root." msgstr "" #: editor/filesystem_dock.cpp -msgid "Target file exists, can't overwrite. Delete first." +msgid "Cannot move a folder into itself.\n" msgstr "" #: editor/filesystem_dock.cpp -msgid "Same source and destination paths, doing nothing." +#, fuzzy +msgid "Error moving:\n" +msgstr "載入錯誤:" + +#: editor/filesystem_dock.cpp +msgid "Unable to update dependencies:\n" msgstr "" #: editor/filesystem_dock.cpp -msgid "Can't move directories to within themselves." +msgid "No name provided" msgstr "" #: editor/filesystem_dock.cpp -msgid "Can't rename deps for:\n" +msgid "Provided name contains invalid characters" msgstr "" #: editor/filesystem_dock.cpp -#, fuzzy -msgid "Error moving file:\n" -msgstr "儲å˜TileSet時出ç¾éŒ¯èª¤ï¼" +msgid "No name provided." +msgstr "" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Error moving dir:\n" -msgstr "載入錯誤:" +msgid "Name contains invalid characters." +msgstr "有效å—符:" #: editor/filesystem_dock.cpp -msgid "Can't operate on '..'" +msgid "A file or folder with this name already exists." msgstr "" #: editor/filesystem_dock.cpp -msgid "Pick New Name and Location For:" -msgstr "" +#, fuzzy +msgid "Renaming file:" +msgstr "儲å˜TileSet時出ç¾éŒ¯èª¤ï¼" #: editor/filesystem_dock.cpp -msgid "No files selected!" +msgid "Renaming folder:" msgstr "" #: editor/filesystem_dock.cpp @@ -2556,39 +2482,36 @@ msgid "Collapse all" msgstr "" #: editor/filesystem_dock.cpp -msgid "Show In File Manager" -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Instance" -msgstr "" +msgid "Copy Path" +msgstr "複製路徑" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." +msgid "Rename.." msgstr "" #: editor/filesystem_dock.cpp -msgid "View Owners.." +msgid "Move To.." msgstr "" #: editor/filesystem_dock.cpp -msgid "Copy Path" -msgstr "複製路徑" +#, fuzzy +msgid "New Folder.." +msgstr "新增資料夾" #: editor/filesystem_dock.cpp -msgid "Rename or Move.." +msgid "Show In File Manager" msgstr "" #: editor/filesystem_dock.cpp -msgid "Move To.." +msgid "Instance" msgstr "" #: editor/filesystem_dock.cpp -msgid "Info" +msgid "Edit Dependencies.." msgstr "" #: editor/filesystem_dock.cpp -msgid "Re-Import.." +msgid "View Owners.." msgstr "" #: editor/filesystem_dock.cpp @@ -2621,6 +2544,11 @@ msgstr "" msgid "Move" msgstr "" +#: editor/filesystem_dock.cpp editor/plugins/animation_tree_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Rename" +msgstr "" + #: editor/groups_editor.cpp msgid "Add to Group" msgstr "" @@ -2635,6 +2563,10 @@ msgid "Import as Single Scene" msgstr "æ›´æ–°å ´æ™¯" #: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials" msgstr "" @@ -2647,6 +2579,18 @@ msgid "Import with Separate Objects+Materials" msgstr "" #: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Materials+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Materials+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes" msgstr "" @@ -2655,38 +2599,31 @@ msgid "Import as Multiple Scenes+Materials" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Import Scene" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Importing Scene.." msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Running Custom Script.." msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Couldn't load post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Invalid/broken script for post-import (check console):" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Error running post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Saving.." msgstr "" @@ -2717,579 +2654,54 @@ msgstr "" msgid "Reimport" msgstr "å°Žå…¥" -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "No bit masks to import!" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path is empty." -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must be a complete resource path." -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must exist." -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Save path is empty!" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Import BitMasks" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s):" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Target Path:" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Accept" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Bit Mask" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No source font file!" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No target font resource!" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "" -"Invalid file extension.\n" -"Please use .font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Can't load/process source font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Couldn't save font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font Size:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Dest Resource:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "The quick brown fox jumps over the lazy dog." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Test:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Options:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Font Import" -msgstr "" - -#: 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 "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Failed opening as BMFont file." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error initializing FreeType." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Unknown font format." -msgstr "å—å½¢æ ¼å¼ä¸æ˜Ž" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error loading font." -msgstr "載入å—形出ç¾éŒ¯èª¤" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Invalid font size." -msgstr "無效å—åž‹" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Invalid font custom source." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/plugins/theme_editor_plugin.cpp -msgid "Font" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "No meshes to import!" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Single Mesh Import" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Source Mesh(es):" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Mesh" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Surface %d" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "No samples to import!" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Import Audio Samples" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Source Sample(s):" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Audio Sample" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "New Clip" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Animation Options" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Flags" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Bake FPS:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Optimizer" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Linear Error" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angular Error" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angle" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Clips" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Start(s)" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "End(s)" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Loop" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Filters" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source path is empty." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't load post-import script." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Invalid/broken script for post-import." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Error importing scene." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import 3D Scene" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source Scene:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Same as Target Scene" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Shared" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Target Texture Folder:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Post-Process Script:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Custom Root Node Type:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Auto" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Root Node Name:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "The Following Files are Missing:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Anyway" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp scene/gui/dialogs.cpp -msgid "Cancel" -msgstr "å–æ¶ˆ" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import & Open" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Edited scene has not been saved, open imported scene anyway?" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Image:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Can't import a file over itself:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't localize path: %s (already local)" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "3D Scene Animation" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Uncompressed" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossless (PNG)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossy (WebP)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress (VRAM)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Format" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Compression Quality (WebP):" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Options" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Please specify some files!" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "At least one file needed for Atlas." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Error importing:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Only one file is required for large texture." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Max Texture Size:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for Atlas (2D)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cell Size:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Large Texture" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Textures (2D)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture" +#: editor/multi_node_edit.cpp +msgid "MultiNode Set" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Base Atlas Texture" +#: editor/node_dock.cpp +msgid "Groups" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s)" +#: editor/node_dock.cpp +msgid "Select a Node to edit Signals and Groups." msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 2D" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create Poly" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 3D" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures" +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Insert Point" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "2D Texture" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly (Remove Point)" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "3D Texture" +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Remove Poly And Point" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Atlas Texture" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create a new polygon from scratch." msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp +#: editor/plugins/abstract_polygon_2d_editor.cpp msgid "" -"NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files to " -"the project." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Crop empty space." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Texture" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Load Source Image" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Slicing" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Inserting" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Saving" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save large texture:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Build Atlas For:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Loading Image:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't load image:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Converting Images" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cropping Images" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Blitting Images" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save atlas image:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save converted texture:" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid source!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid translation source!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Column" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/script_create_dialog.cpp -msgid "Language" -msgstr "語言" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No items to import!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No target path!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translations" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Couldn't import!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translation" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Source CSV:" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Ignore First Row" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Compress" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Add to Project (project.godot)" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Languages:" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Translation" -msgstr "" - -#: editor/multi_node_edit.cpp -msgid "MultiNode Set" -msgstr "" - -#: editor/node_dock.cpp -msgid "Groups" -msgstr "" - -#: editor/node_dock.cpp -msgid "Select a Node to edit Signals and Groups." +"Edit existing polygon:\n" +"LMB: Move Point.\n" +"Ctrl+LMB: Split Segment.\n" +"RMB: Erase Point." msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp @@ -3445,7 +2857,6 @@ msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp #: editor/script_create_dialog.cpp msgid "Error!" @@ -3556,10 +2967,6 @@ msgid "Delete Input" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Rename" -msgstr "" - -#: editor/plugins/animation_tree_editor_plugin.cpp msgid "Animation tree is valid." msgstr "" @@ -3615,64 +3022,185 @@ msgstr "" msgid "Filters.." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing %d Triangles:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Free" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Triangle #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Contents:" +msgstr "內容:" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "View Files" +msgstr "檔案" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve hostname:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Light Baker Setup:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing Geometry" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connection error, please try again." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Fixing Lights" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't connect." +msgstr "ä¸èƒ½é€£æŽ¥ã€‚" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't connect to host:" +msgstr "ä¸èƒ½é€£åˆ°ä¸»æ©Ÿï¼š" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response from host:" +msgstr "主機沒有回應:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response." +msgstr "沒有回應。" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Request failed, return code:" +msgstr "請求失敗," + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Req. Failed." +msgstr "請求失敗。" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, too many redirects" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Making BVH" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Redirect Loop." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Light Octree" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed:" +msgstr "失敗:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Bad download hash, assuming file has been tampered with." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Octree Texture" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Expected:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Transfer to Lightmaps:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Got:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Allocating Texture #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed sha256 hash check" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Baking Triangle #" +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Asset Download Error:" +msgstr "Asset下載出ç¾éŒ¯èª¤ï¼š" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Fetching:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Post-Processing Texture #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Resolving.." msgstr "" -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Bake!" +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Connecting.." +msgstr "連到..." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Requesting.." +msgstr "請求ä¸..." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Error making request" +msgstr "請求時出ç¾éŒ¯èª¤" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Idle" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Retry" +msgstr "é‡è©¦" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download Error" +msgstr "下載出ç¾éŒ¯èª¤" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download for this asset is already in progress!" +msgstr "Asset已在下載ä¸" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "first" +msgstr "首é " + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "prev" +msgstr "上一é " + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "next" +msgstr "下一é " + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "last" +msgstr "å°¾é " + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "All" +msgstr "全部" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Plugins" +msgstr "æ’ä»¶" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Sort:" +msgstr "排åºï¼š" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Reverse" msgstr "" -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Reset the lightmap octree baking process (start over)." +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Category:" +msgstr "分類:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Site:" +msgstr "地å€:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Support.." msgstr "" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Official" +msgstr "官方" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Testing" +msgstr "測試" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Assets ZIP File" +msgstr "Assets ZIP 檔" + #: editor/plugins/camera_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp msgid "Preview" msgstr "" @@ -3715,11 +3243,15 @@ msgid "Edit CanvasItem" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Change Anchors" +msgid "Anchors only" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Change Anchors and Margins" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom (%):" +msgid "Change Anchors" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3770,59 +3302,72 @@ msgid "Pan Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Lock the selected object in place (can't be moved)." +msgid "Toggles snapping" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Unlock the selected object (can be moved)." +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Makes sure the object's children are not selectable." +msgid "Snapping options" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Restores the object's children's ability to be selected." +msgid "Snap to grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp -#: editor/project_settings_editor.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Edit" -msgstr "編輯" +msgid "Use Rotation Snap" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +msgid "Configure Snap..." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +msgid "Snap Relative" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Rotation Snap" +msgid "Use Pixel Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap Relative" +msgid "Smart snapping" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." +msgid "Snap to parent" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Pixel Snap" +msgid "Snap to node anchor" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to node sides" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to other nodes" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Lock the selected object in place (can't be moved)." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Unlock the selected object (can be moved)." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Makes sure the object's children are not selectable." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Skeleton.." +msgid "Restores the object's children's ability to be selected." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3851,11 +3396,16 @@ msgid "View" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Reset" +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show helpers" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Set.." +msgid "Show rulers" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3867,8 +3417,9 @@ msgid "Frame Selection" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Anchor" -msgstr "" +#, fuzzy +msgid "Layout" +msgstr "儲å˜ä½ˆå±€" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Keys" @@ -3891,11 +3442,20 @@ msgid "Clear Pose" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Set a Value" +msgid "Drag pivot from mouse position" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap (Pixels):" +#, fuzzy +msgid "Set pivot at mouse position" +msgstr "åªé™é¸ä¸" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Multiply grid step by 2" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Divide grid step by 2" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3906,23 +3466,28 @@ msgstr "" msgid "Adding %s..." msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Create Node" msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Error instancing scene from %s" msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "OK :(" msgstr "OK :(" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "No parent to instance a child at." msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "This operation requires a single selected node." msgstr "" @@ -3936,45 +3501,6 @@ msgid "" "Drag & drop + Alt : Change node type" msgstr "" -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Create Poly" -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly" -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly (Remove Point)" -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Create a new polygon from scratch." -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -msgid "" -"Edit existing polygon:\n" -"LMB: Move Point.\n" -"Ctrl+LMB: Split Segment.\n" -"RMB: Erase Point." -msgstr "" - #: editor/plugins/collision_polygon_editor_plugin.cpp msgid "Create Poly3D" msgstr "" @@ -3984,14 +3510,6 @@ msgid "Set Handle" msgstr "" #: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Creating Mesh Library" -msgstr "" - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Thumbnail.." -msgstr "" - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Remove item %d?" msgstr "" @@ -4014,6 +3532,27 @@ msgid "Update from Scene" msgstr "" #: editor/plugins/curve_editor_plugin.cpp +msgid "Flat0" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Flat1" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +#, fuzzy +msgid "Ease in" +msgstr "縮放selection" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Ease out" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Smoothstep" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp msgid "Modify Curve Point" msgstr "" @@ -4093,22 +3632,18 @@ msgid "Create Occluder Polygon" msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Edit existing polygon:" msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "LMB: Move Point." msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Ctrl+LMB: Split Segment." msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "RMB: Erase Point." msgstr "" @@ -4209,6 +3744,10 @@ msgid "Create Outline" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Body" msgstr "" @@ -4336,12 +3875,73 @@ msgstr "" msgid "Populate" msgstr "" -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Create Navigation Polygon" +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Bake!" +msgstr "" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Bake the navigation mesh.\n" +msgstr "" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Clear the navigation mesh." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Setting up Configuration..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Calculating grid size..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating heightfield..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Marking walkable triangles..." +msgstr "å„²å˜æœ¬åœ°æ›´æ”¹.." + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Constructing compact heightfield..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Eroding walkable area..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Partioning..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating contours..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating polymesh..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Converting to native navigation mesh..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Navigation Mesh Generator Setup:" +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Parsing Geometry..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Done!" msgstr "" #: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Remove Poly And Point" +msgid "Create Navigation Polygon" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4515,16 +4115,19 @@ msgid "Curve Point #" msgstr "" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Point Pos" -msgstr "" +#, fuzzy +msgid "Set Curve Point Position" +msgstr "åªé™é¸ä¸" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve In Pos" -msgstr "" +#, fuzzy +msgid "Set Curve In Position" +msgstr "åªé™é¸ä¸" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Out Pos" -msgstr "" +#, fuzzy +msgid "Set Curve Out Position" +msgstr "åªé™é¸ä¸" #: editor/plugins/path_editor_plugin.cpp msgid "Split Path" @@ -4584,6 +4187,14 @@ msgid "Scale Polygon" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit" +msgstr "編輯" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon->UV" msgstr "" @@ -4638,63 +4249,10 @@ msgstr "" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "貼上" -#: editor/plugins/rich_text_editor_plugin.cpp -msgid "Parse BBCode" -msgstr "" - -#: editor/plugins/sample_editor_plugin.cpp -msgid "Length:" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Open Sample File(s)" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "ERROR: Couldn't load sample!" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Add Sample" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Rename Sample" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Delete Sample" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "16 Bits" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "8 Bits" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Stereo" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Mono" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/script_editor_debugger.cpp -msgid "Format" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Pitch" -msgstr "" - #: editor/plugins/script_editor_plugin.cpp msgid "Clear Recent Files" msgstr "" @@ -4787,6 +4345,10 @@ msgstr "é—œé–‰å ´æ™¯" msgid "Close All" msgstr "關閉" +#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp +msgid "Run" +msgstr "é‹è¡Œ" + #: editor/plugins/script_editor_plugin.cpp msgid "Toggle Scripts Panel" msgstr "" @@ -4829,18 +4391,6 @@ msgid "Debug with external editor" msgstr "è¦é›¢é–‹ç·¨è¼¯å™¨å—Ž?" #: editor/plugins/script_editor_plugin.cpp -msgid "Window" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Left" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Right" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp msgid "Open Godot online documentation" msgstr "" @@ -4925,7 +4475,7 @@ msgstr "剪下" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Copy" msgstr "複製" @@ -5191,10 +4741,6 @@ msgid "View Plane Transform." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Scaling to %s%%." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." msgstr "" @@ -5211,10 +4757,6 @@ msgid "Top View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Top" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "" @@ -5451,6 +4993,10 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Configure Snap.." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Local Coords" msgstr "" @@ -5596,6 +5142,10 @@ msgid "Speed (FPS):" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Loop" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animation Frames" msgstr "" @@ -5608,11 +5158,12 @@ msgid "Insert Empty (After)" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Up" -msgstr "" +#, fuzzy +msgid "Move (Before)" +msgstr "移動模å¼" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Down" +msgid "Move (After)" msgstr "" #: editor/plugins/style_box_editor_plugin.cpp @@ -5776,6 +5327,10 @@ msgid "Style" msgstr "" #: editor/plugins/theme_editor_plugin.cpp +msgid "Font" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp msgid "Color" msgstr "" @@ -5826,7 +5381,7 @@ msgid "Mirror Y" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Bucket" +msgid "Paint Tile" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp @@ -5893,6 +5448,10 @@ msgid "Delete preset '%s'?" msgstr "è¦åˆªé™¤é¸ä¸æª”案?" #: editor/project_export.cpp +msgid "Export templates for this platform are missing/corrupted: " +msgstr "" + +#: editor/project_export.cpp msgid "Presets" msgstr "" @@ -5966,19 +5525,30 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +msgid "Export templates for this platform are missing/corrupted:" +msgstr "" + +#: editor/project_export.cpp msgid "Export With Debug" msgstr "" #: editor/project_manager.cpp -msgid "Invalid project path, the path must exist!" +#, fuzzy +msgid "The path does not exists." +msgstr "檔案ä¸å˜åœ¨." + +#: editor/project_manager.cpp +msgid "Please choose a 'project.godot' file." msgstr "" #: editor/project_manager.cpp -msgid "Invalid project path, project.godot must not exist." +msgid "" +"Your project will be created in a non empty folder (you might want to create " +"a new folder)." msgstr "" #: editor/project_manager.cpp -msgid "Invalid project path, project.godot must exist." +msgid "Please choose a folder that does not contain a 'project.godot' file." msgstr "" #: editor/project_manager.cpp @@ -5986,10 +5556,26 @@ msgid "Imported Project" msgstr "" #: editor/project_manager.cpp +msgid " " +msgstr "" + +#: editor/project_manager.cpp +msgid "It would be a good idea to name your project." +msgstr "" + +#: editor/project_manager.cpp msgid "Invalid project path (changed anything?)." msgstr "" #: editor/project_manager.cpp +msgid "Couldn't get project.godot in project path." +msgstr "" + +#: editor/project_manager.cpp +msgid "Couldn't edit project.godot in project path." +msgstr "" + +#: editor/project_manager.cpp msgid "Couldn't create project.godot in project path." msgstr "" @@ -5998,15 +5584,20 @@ msgid "The following files failed extraction from package:" msgstr "" #: editor/project_manager.cpp -msgid "Import Existing Project" +#, fuzzy +msgid "Rename Project" +msgstr "專案" + +#: editor/project_manager.cpp +msgid "Couldn't get project.godot in the project path." msgstr "" #: editor/project_manager.cpp -msgid "Project Path (Must Exist):" +msgid "New Game Project" msgstr "" #: editor/project_manager.cpp -msgid "Project Name:" +msgid "Import Existing Project" msgstr "" #: editor/project_manager.cpp @@ -6014,22 +5605,27 @@ msgid "Create New Project" msgstr "" #: editor/project_manager.cpp -msgid "Project Path:" +msgid "Install Project:" msgstr "" #: editor/project_manager.cpp -msgid "Install Project:" +msgid "Project Name:" msgstr "" #: editor/project_manager.cpp -msgid "Browse" -msgstr "ç€è¦½" +#, fuzzy +msgid "Create folder" +msgstr "新增資料夾" #: editor/project_manager.cpp -msgid "New Game Project" +msgid "Project Path:" msgstr "" #: editor/project_manager.cpp +msgid "Browse" +msgstr "ç€è¦½" + +#: editor/project_manager.cpp msgid "That's a BINGO!" msgstr "" @@ -6038,6 +5634,11 @@ msgid "Unnamed Project" msgstr "" #: editor/project_manager.cpp +#, fuzzy +msgid "Can't open project" +msgstr "ä¸èƒ½é€£æŽ¥ã€‚" + +#: editor/project_manager.cpp msgid "Are you sure to open more than one project?" msgstr "" @@ -6073,10 +5674,6 @@ msgid "Project List" msgstr "" #: editor/project_manager.cpp -msgid "Run" -msgstr "é‹è¡Œ" - -#: editor/project_manager.cpp msgid "Scan" msgstr "" @@ -6135,17 +5732,14 @@ msgid "Add Input Action Event" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Meta+" msgstr "Meta+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Shift+" msgstr "Shift+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Alt+" msgstr "Alt+" @@ -6207,7 +5801,7 @@ msgstr "當改變時更新" msgid "Joypad Axis Index:" msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp #, fuzzy msgid "Axis" msgstr "ä¸è»¸" @@ -6228,31 +5822,31 @@ msgstr "" msgid "Add Event" msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Device" msgstr "è¨å‚™" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Button" msgstr "按éµ" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Left Button." msgstr "左𨫡" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Right Button." msgstr "å³ð¨«¡" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Middle Button." msgstr "ä¸ð¨«¡" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Up." msgstr "上滾" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Down." msgstr "下滾" @@ -6261,7 +5855,7 @@ msgid "Add Global Property" msgstr "" #: editor/project_settings_editor.cpp -msgid "Select an setting item first!" +msgid "Select a setting item first!" msgstr "" #: editor/project_settings_editor.cpp @@ -6279,6 +5873,15 @@ msgid "Delete Item" msgstr "刪除" #: editor/project_settings_editor.cpp +#, fuzzy +msgid "Can't contain '/' or ':'" +msgstr "ä¸èƒ½é€£åˆ°ä¸»æ©Ÿï¼š" + +#: editor/project_settings_editor.cpp +msgid "Already existing" +msgstr "" + +#: editor/project_settings_editor.cpp msgid "Error saving settings." msgstr "" @@ -6429,10 +6032,19 @@ msgid "New Script" msgstr "下一個腳本" #: editor/property_editor.cpp +msgid "Make Unique" +msgstr "" + +#: editor/property_editor.cpp msgid "Show in File System" msgstr "" #: editor/property_editor.cpp +#, fuzzy +msgid "Convert To %s" +msgstr "轉為..." + +#: editor/property_editor.cpp msgid "Error loading file: Not a resource!" msgstr "" @@ -6472,6 +6084,11 @@ msgstr "鏿“‡æ¨¡å¼" #: editor/property_selector.cpp #, fuzzy +msgid "Select Virtual Method" +msgstr "鏿“‡æ¨¡å¼" + +#: editor/property_selector.cpp +#, fuzzy msgid "Select Method" msgstr "鏿“‡æ¨¡å¼" @@ -6499,26 +6116,6 @@ msgstr "" msgid "Reparent" msgstr "" -#: editor/resources_dock.cpp -msgid "Create New Resource" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Open Resource" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Save Resource" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Resource Tools" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Make Local" -msgstr "" - #: editor/run_settings_dialog.cpp msgid "Run Mode:" msgstr "" @@ -6646,14 +6243,6 @@ msgid "Sub-Resources:" msgstr "資æº" #: editor/scene_tree_dock.cpp -msgid "Edit Groups" -msgstr "" - -#: editor/scene_tree_dock.cpp -msgid "Edit Connections" -msgstr "" - -#: editor/scene_tree_dock.cpp msgid "Clear Inheritance" msgstr "" @@ -6842,6 +6431,15 @@ msgid "Invalid base path" msgstr "" #: editor/script_create_dialog.cpp +msgid "Directory of the same name exists" +msgstr "" + +#: editor/script_create_dialog.cpp +#, fuzzy +msgid "File exists, will be reused" +msgstr "檔案已å˜åœ¨, è¦è¦†è“‹å—Ž?" + +#: editor/script_create_dialog.cpp msgid "Invalid extension" msgstr "無效副檔å" @@ -6886,6 +6484,10 @@ msgid "Load existing script file" msgstr "下一個腳本" #: editor/script_create_dialog.cpp +msgid "Language" +msgstr "語言" + +#: editor/script_create_dialog.cpp msgid "Inherits" msgstr "" @@ -6929,6 +6531,10 @@ msgid "Function:" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Errors" msgstr "錯誤" @@ -7010,6 +6616,10 @@ msgid "Type" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Format" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Usage" msgstr "" @@ -7085,12 +6695,29 @@ msgstr "" msgid "Change Probe Extents" msgstr "" +#: modules/gdnative/gd_native_library_editor.cpp +#, fuzzy +msgid "Library" +msgstr "MeshLibrary.." + +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Status" +msgstr "" + +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Libraries: " +msgstr "" + +#: modules/gdnative/register_types.cpp +msgid "GDNative" +msgstr "" + #: 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/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "" @@ -7142,10 +6769,6 @@ msgid "GridMap Duplicate Selection" msgstr "複製 Selection" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Paint" -msgstr "" - -#: modules/gridmap/grid_map_editor_plugin.cpp msgid "Snap View" msgstr "" @@ -7242,13 +6865,8 @@ msgstr "è¨å®š" msgid "Pick Distance:" msgstr "" -#: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy -msgid "Tiles" -msgstr "檔案" - -#: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Areas" +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "Builds" msgstr "" #: modules/visual_script/visual_script.cpp @@ -7445,10 +7063,18 @@ msgid "Return" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Call" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Get" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Script already has function '%s'" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Change Input Value" msgstr "動畫變化數值" @@ -7814,6 +7440,12 @@ msgid "" "order for AnimatedSprite3D to display frames." msgstr "" +#: scene/3d/vehicle_body.cpp +msgid "" +"VehicleWheel serves to provide a wheel system to a VehicleBody. Please use " +"it as a child of a VehicleBody." +msgstr "" + #: scene/gui/color_picker.cpp msgid "Raw Mode" msgstr "" @@ -7823,6 +7455,10 @@ msgid "Add current color as a preset" msgstr "" #: scene/gui/dialogs.cpp +msgid "Cancel" +msgstr "å–æ¶ˆ" + +#: scene/gui/dialogs.cpp msgid "Alert!" msgstr "è¦å‘Š!" @@ -7830,10 +7466,6 @@ msgstr "è¦å‘Š!" msgid "Please Confirm..." msgstr "請確èª..." -#: scene/gui/input_action.cpp -msgid "Ctrl+" -msgstr "Ctrl+" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -7862,6 +7494,38 @@ msgid "" "texture to some node for display." msgstr "" +#: scene/resources/dynamic_font.cpp +msgid "Error initializing FreeType." +msgstr "" + +#: scene/resources/dynamic_font.cpp +msgid "Unknown font format." +msgstr "å—å½¢æ ¼å¼ä¸æ˜Ž" + +#: scene/resources/dynamic_font.cpp +msgid "Error loading font." +msgstr "載入å—形出ç¾éŒ¯èª¤" + +#: scene/resources/dynamic_font.cpp +msgid "Invalid font size." +msgstr "無效å—åž‹" + +#~ msgid "Added:" +#~ msgstr "å·²åŠ å…¥ï¼š" + +#~ msgid "Removed:" +#~ msgstr "已移除:" + +#~ msgid "Error loading scene." +#~ msgstr "è¼‰å…¥å ´æ™¯æ™‚å‡ºç¾éŒ¯èª¤" + +#, fuzzy +#~ msgid "Tiles" +#~ msgstr "檔案" + +#~ msgid "Ctrl+" +#~ msgstr "Ctrl+" + #~ msgid "Close scene? (Unsaved changes will be lost)" #~ msgstr "è¦é—œé–‰å ´æ™¯å—Žï¼Ÿï¼ˆæœªå„²å˜çš„æ›´æ”¹å°‡æœƒæ¶ˆå¤±ï¼‰" diff --git a/editor/translations/zh_TW.po b/editor/translations/zh_TW.po index 8ed54a0798..44b6b730d5 100644 --- a/editor/translations/zh_TW.po +++ b/editor/translations/zh_TW.po @@ -194,10 +194,9 @@ msgid "Create %d NEW tracks and insert keys?" msgstr "" #: editor/animation_editor.cpp editor/create_dialog.cpp -#: editor/editor_audio_buses.cpp +#: editor/editor_audio_buses.cpp editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp #: editor/plugins/mesh_instance_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp editor/project_manager.cpp #: editor/script_create_dialog.cpp msgid "Create" @@ -359,265 +358,6 @@ msgstr "" msgid "Change Array Value" msgstr "" -#: editor/asset_library_editor_plugin.cpp -msgid "Free" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp -msgid "Version:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Contents:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "View Files" -msgstr "éŽæ¿¾æª”案.." - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_help.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp -msgid "Description:" -msgstr "æè¿°:" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -#: editor/project_manager.cpp -msgid "Install" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp -#: editor/connections_dialog.cpp editor/export_template_manager.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -#: editor/project_settings_editor.cpp editor/property_editor.cpp -#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Close" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve hostname:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't resolve." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Connection error, please try again." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Can't connect." -msgstr "連接..." - -#: editor/asset_library_editor_plugin.cpp -msgid "Can't connect to host:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response from host:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "No response." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Request failed, return code:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Req. Failed." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Request failed, too many redirects" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Redirect Loop." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Bad download hash, assuming file has been tampered with." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Expected:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Got:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Failed sha256 hash check" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Asset Download Error:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/editor_asset_installer.cpp -msgid "Success!" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Fetching:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Resolving.." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Connecting.." -msgstr "連接..." - -#: editor/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Error making request" -msgstr "è¼‰å…¥å ´æ™¯æ™‚ç™¼ç”ŸéŒ¯èª¤" - -#: editor/asset_library_editor_plugin.cpp -msgid "Idle" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Retry" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Download Error" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Download for this asset is already in progress!" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "first" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "prev" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "next" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "last" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "All" -msgstr "全部" - -#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/property_selector.cpp editor/quick_open.cpp -#: editor/settings_config_dialog.cpp -msgid "Search:" -msgstr "æœå°‹:" - -#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Search" -msgstr "æœå°‹" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/project_manager.cpp -msgid "Import" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Plugins" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Sort:" -msgstr "排åº:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Reverse" -msgstr "å轉" - -#: editor/asset_library_editor_plugin.cpp editor/project_settings_editor.cpp -msgid "Category:" -msgstr "類別:" - -#: editor/asset_library_editor_plugin.cpp -msgid "Site:" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Official" -msgstr "官方" - -#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp -msgid "Community" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Testing" -msgstr "" - -#: editor/asset_library_editor_plugin.cpp -msgid "Assets ZIP File" -msgstr "" - -#: editor/call_dialog.cpp -msgid "Method List For '%s':" -msgstr "" - -#: editor/call_dialog.cpp modules/visual_script/visual_script_editor.cpp -msgid "Call" -msgstr "" - -#: editor/call_dialog.cpp -msgid "Method List:" -msgstr "方法:" - -#: editor/call_dialog.cpp -msgid "Arguments:" -msgstr "è¼¸å…¥åƒæ•¸" - -#: editor/call_dialog.cpp -msgid "Return:" -msgstr "回傳值:" - #: editor/code_editor.cpp msgid "Go to Line" msgstr "å‰å¾€ç¬¬...行" @@ -654,6 +394,14 @@ msgstr "" msgid "Selection Only" msgstr "åƒ…é¸æ“‡å€åŸŸ" +#: editor/code_editor.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp +msgid "Search" +msgstr "æœå°‹" + #: editor/code_editor.cpp editor/editor_help.cpp msgid "Find" msgstr "尋找" @@ -686,11 +434,11 @@ msgstr "æ¯æ¬¡å–代都è¦å…ˆè©¢å•我" msgid "Skip" msgstr "è·³éŽ" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom In" msgstr "放大" -#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/code_editor.cpp msgid "Zoom Out" msgstr "縮å°" @@ -758,6 +506,20 @@ msgstr "å»¶é²" msgid "Oneshot" msgstr "" +#: editor/connections_dialog.cpp editor/dependency_editor.cpp +#: editor/export_template_manager.cpp +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Close" +msgstr "" + #: editor/connections_dialog.cpp msgid "Connect" msgstr "" @@ -783,7 +545,7 @@ msgstr "連接..." msgid "Disconnect" msgstr "æ–·ç·š" -#: editor/connections_dialog.cpp editor/node_dock.cpp +#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" msgstr "" @@ -800,12 +562,25 @@ msgstr "我的最愛:" msgid "Recent:" msgstr "最近å˜å–:" +#: editor/create_dialog.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp +#: editor/quick_open.cpp editor/settings_config_dialog.cpp +msgid "Search:" +msgstr "æœå°‹:" + #: editor/create_dialog.cpp editor/editor_help.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp #: editor/quick_open.cpp msgid "Matches:" msgstr "ç¬¦åˆæ¢ä»¶:" +#: editor/create_dialog.cpp editor/editor_help.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp +#: editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "æè¿°:" + #: editor/dependency_editor.cpp msgid "Search Replacement For:" msgstr "" @@ -863,6 +638,10 @@ msgid "Owners Of:" msgstr "" #: editor/dependency_editor.cpp +msgid "Remove selected files from the project? (no undo)" +msgstr "æ¤å‹•作無法復原, 確定è¦å¾žå°ˆæ¡ˆä¸åˆªé™¤æ‰€é¸çš„æª”案?" + +#: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" @@ -872,8 +651,8 @@ msgstr "" "æ¤å‹•作無法復原, 確定è¦åˆªé™¤å—Ž?" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (no undo)" -msgstr "æ¤å‹•作無法復原, 確定è¦å¾žå°ˆæ¡ˆä¸åˆªé™¤æ‰€é¸çš„æª”案?" +msgid "Cannot remove:\n" +msgstr "" #: editor/dependency_editor.cpp #, fuzzy @@ -940,10 +719,6 @@ msgid "Godot Engine contributors" msgstr "" #: editor/editor_about.cpp -msgid "Authors" -msgstr "" - -#: editor/editor_about.cpp #, fuzzy msgid "Project Founders" msgstr "專案è¨å®š" @@ -961,6 +736,38 @@ msgid "Developers" msgstr "" #: editor/editor_about.cpp +msgid "Authors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Platinum Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Mini Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Silver Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Bronze Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Donors" +msgstr "" + +#: editor/editor_about.cpp msgid "License" msgstr "" @@ -1002,6 +809,16 @@ msgid "Package Installed Successfully!" msgstr "" #: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Success!" +msgstr "" + +#: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp +msgid "Install" +msgstr "" + +#: editor/editor_asset_installer.cpp msgid "Package Installer" msgstr "" @@ -1050,11 +867,6 @@ msgid "Audio Bus, Drag and Drop to rearrange." msgstr "" #: editor/editor_audio_buses.cpp -#, fuzzy -msgid "Bus options" -msgstr "除錯é¸é …" - -#: editor/editor_audio_buses.cpp msgid "Solo" msgstr "" @@ -1066,6 +878,11 @@ msgstr "" msgid "Bypass" msgstr "" +#: editor/editor_audio_buses.cpp +#, fuzzy +msgid "Bus options" +msgstr "除錯é¸é …" + #: editor/editor_audio_buses.cpp editor/plugins/tile_map_editor_plugin.cpp #: editor/scene_tree_dock.cpp msgid "Duplicate" @@ -1073,6 +890,11 @@ msgstr "" #: editor/editor_audio_buses.cpp #, fuzzy +msgid "Reset Volume" +msgstr "é‡è¨ç¸®æ”¾å¤§å°" + +#: editor/editor_audio_buses.cpp +#, fuzzy msgid "Delete Effect" msgstr "刪除" @@ -1094,6 +916,11 @@ msgid "Duplicate Audio Bus" msgstr "複製所é¸" #: editor/editor_audio_buses.cpp +#, fuzzy +msgid "Reset Bus Volume" +msgstr "é‡è¨ç¸®æ”¾å¤§å°" + +#: editor/editor_audio_buses.cpp msgid "Move Audio Bus" msgstr "" @@ -1125,7 +952,8 @@ msgstr "" msgid "Create a new Bus Layout." msgstr "" -#: editor/editor_audio_buses.cpp editor/script_create_dialog.cpp +#: editor/editor_audio_buses.cpp editor/property_editor.cpp +#: editor/script_create_dialog.cpp msgid "Load" msgstr "載入" @@ -1216,7 +1044,7 @@ msgid "Rearrange Autoloads" msgstr "" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp scene/gui/file_dialog.cpp +#: scene/gui/file_dialog.cpp msgid "Path:" msgstr "路徑:" @@ -1224,9 +1052,7 @@ msgstr "路徑:" msgid "Node Name:" msgstr "節點å稱:" -#: editor/editor_autoload_settings.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp editor/project_manager.cpp +#: editor/editor_autoload_settings.cpp editor/project_manager.cpp msgid "Name" msgstr "å稱" @@ -1260,18 +1086,19 @@ msgid "Choose a Directory" msgstr "鏿“‡è³‡æ–™å¤¾" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Create Folder" msgstr "新增資料夾" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: editor/editor_plugin_settings.cpp editor/plugins/theme_editor_plugin.cpp -#: editor/project_export.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp +#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp +#: scene/gui/file_dialog.cpp msgid "Name:" msgstr "å稱:" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp -#: scene/gui/file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Could not create folder." msgstr "無法新增資料夾" @@ -1291,30 +1118,6 @@ msgstr "" msgid "Template file not found:\n" msgstr "" -#: editor/editor_export.cpp -msgid "Added:" -msgstr "已新增:" - -#: editor/editor_export.cpp -msgid "Removed:" -msgstr "已刪除:" - -#: editor/editor_export.cpp -msgid "Error saving atlas:" -msgstr "" - -#: editor/editor_export.cpp -msgid "Could not save atlas subtexture:" -msgstr "" - -#: editor/editor_export.cpp -msgid "Exporting for %s" -msgstr "" - -#: editor/editor_export.cpp -msgid "Setting Up.." -msgstr "" - #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "檔案已經å˜åœ¨, è¦è¦†å¯«å—Ž?" @@ -1399,6 +1202,11 @@ msgstr "" msgid "Move Favorite Down" msgstr "" +#: editor/editor_file_dialog.cpp +#, fuzzy +msgid "Go to parent folder" +msgstr "無法新增資料夾" + #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Directories & Files:" msgstr "資料夾 & 檔案:" @@ -1441,6 +1249,10 @@ msgstr "" msgid "Search Classes" msgstr "" +#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +msgid "Top" +msgstr "" + #: editor/editor_help.cpp editor/property_editor.cpp msgid "Class:" msgstr "" @@ -1457,15 +1269,27 @@ msgstr "" msgid "Brief Description:" msgstr "" +#: editor/editor_help.cpp +msgid "Members" +msgstr "" + #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "" #: editor/editor_help.cpp +msgid "Public Methods" +msgstr "" + +#: editor/editor_help.cpp msgid "Public Methods:" msgstr "" #: editor/editor_help.cpp +msgid "GUI Theme Items" +msgstr "" + +#: editor/editor_help.cpp msgid "GUI Theme Items:" msgstr "" @@ -1474,6 +1298,10 @@ msgid "Signals:" msgstr "" #: editor/editor_help.cpp +msgid "Enumerations" +msgstr "" + +#: editor/editor_help.cpp msgid "Enumerations:" msgstr "" @@ -1482,18 +1310,48 @@ msgid "enum " msgstr "" #: editor/editor_help.cpp +msgid "Constants" +msgstr "" + +#: editor/editor_help.cpp msgid "Constants:" msgstr "" #: editor/editor_help.cpp +#, fuzzy +msgid "Description" +msgstr "æè¿°:" + +#: editor/editor_help.cpp +msgid "Properties" +msgstr "" + +#: editor/editor_help.cpp msgid "Property Description:" msgstr "" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this property. Please help us by " +"[color=$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp +#, fuzzy +msgid "Methods" +msgstr "方法:" + +#: editor/editor_help.cpp msgid "Method Description:" msgstr "" #: editor/editor_help.cpp +msgid "" +"There is currently no description for this method. Please help us by [color=" +"$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp msgid "Search Text" msgstr "æœå°‹è©žå½™" @@ -1503,24 +1361,21 @@ msgid "Output:" msgstr " 輸出:" #: editor/editor_log.cpp editor/plugins/animation_tree_editor_plugin.cpp -#: editor/plugins/rich_text_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_editor_debugger.cpp scene/gui/line_edit.cpp -#: scene/gui/text_edit.cpp +#: editor/property_editor.cpp editor/script_editor_debugger.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Clear" msgstr "清除" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Error saving resource!" msgstr "" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#: editor/resources_dock.cpp msgid "Save Resource As.." msgstr "" -#: editor/editor_node.cpp editor/export_template_manager.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "I see.." msgstr "我知é“了" @@ -1537,6 +1392,29 @@ msgid "Error while saving." msgstr "" #: editor/editor_node.cpp +#, fuzzy +msgid "Can't open '%s'." +msgstr "連接..." + +#: editor/editor_node.cpp +#, fuzzy +msgid "Error while parsing '%s'." +msgstr "è¼‰å…¥å ´æ™¯æ™‚ç™¼ç”ŸéŒ¯èª¤" + +#: editor/editor_node.cpp +msgid "Unexpected end of file '%s'." +msgstr "" + +#: editor/editor_node.cpp +msgid "Missing '%s' or its dependencies." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Error while loading '%s'." +msgstr "è¼‰å…¥å ´æ™¯æ™‚ç™¼ç”ŸéŒ¯èª¤" + +#: editor/editor_node.cpp msgid "Saving Scene" msgstr "" @@ -1595,6 +1473,33 @@ msgid "Restored default layout to base settings." msgstr "" #: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was imported, so it's not editable.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was instanced or inherited.\n" +"Changes to it will not be kept when saving the current scene." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource was imported, so it's not editable. Change its settings in the " +"import panel and then re-import." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This scene was imported, so changes to it will not be kept.\n" +"Instancing it or inheriting will allow making changes to it.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp msgid "Copy Params" msgstr "è¤‡è£½åƒæ•¸" @@ -1757,6 +1662,12 @@ msgid "Save changes the following scene(s) before opening Project Manager?" msgstr "" #: editor/editor_node.cpp +msgid "" +"This option is deprecated. Situations where refresh must be forced are now " +"considered a bug. Please report." +msgstr "" + +#: editor/editor_node.cpp msgid "Pick a Main Scene" msgstr "挑一個主è¦å ´æ™¯" @@ -1783,7 +1694,7 @@ msgid "" msgstr "" #: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Ugh" msgstr "呃" @@ -1794,14 +1705,15 @@ msgid "" msgstr "" #: editor/editor_node.cpp -msgid "Error loading scene." -msgstr "è¼‰å…¥å ´æ™¯æ™‚ç™¼ç”ŸéŒ¯èª¤" - -#: editor/editor_node.cpp msgid "Scene '%s' has broken dependencies:" msgstr "" #: editor/editor_node.cpp +#, fuzzy +msgid "Clear Recent Scenes" +msgstr "é—œé–‰å ´æ™¯" + +#: editor/editor_node.cpp msgid "Save Layout" msgstr "" @@ -1834,7 +1746,7 @@ msgstr "" msgid "Toggle distraction-free mode." msgstr "" -#: editor/editor_node.cpp editor/io_plugins/editor_scene_import_plugin.cpp +#: editor/editor_node.cpp #, fuzzy msgid "Scene" msgstr "å ´æ™¯" @@ -2055,6 +1967,10 @@ msgstr "" msgid "Issue Tracker" msgstr "" +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +msgid "Community" +msgstr "" + #: editor/editor_node.cpp msgid "About" msgstr "" @@ -2063,7 +1979,7 @@ msgstr "" msgid "Play the project." msgstr "éŠçŽ©æ¤å°ˆæ¡ˆ" -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Play" msgstr "é–‹å§‹" @@ -2079,7 +1995,7 @@ msgstr "æš«åœå ´æ™¯" msgid "Stop the scene." msgstr "åœæ¢æ¤å ´æ™¯" -#: editor/editor_node.cpp editor/plugins/sample_library_editor_plugin.cpp +#: editor/editor_node.cpp msgid "Stop" msgstr "åœæ¢" @@ -2152,6 +2068,15 @@ msgid "Object properties." msgstr "" #: editor/editor_node.cpp +msgid "Changes may be lost!" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Import" +msgstr "" + +#: editor/editor_node.cpp msgid "FileSystem" msgstr "" @@ -2167,14 +2092,6 @@ msgstr "" msgid "Don't Save" msgstr "" -#: editor/editor_node.cpp editor/editor_reimport_dialog.cpp -msgid "Re-Import" -msgstr "" - -#: editor/editor_node.cpp editor/editor_plugin_settings.cpp -msgid "Update" -msgstr "" - #: editor/editor_node.cpp msgid "Import Templates From ZIP File" msgstr "" @@ -2236,11 +2153,28 @@ msgstr "離開編輯器嗎?" msgid "Open the previous Editor" msgstr "" +#: editor/editor_plugin.cpp +msgid "Creating Mesh Previews" +msgstr "" + +#: editor/editor_plugin.cpp +msgid "Thumbnail.." +msgstr "" + #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" msgstr "" #: editor/editor_plugin_settings.cpp +msgid "Update" +msgstr "" + +#: editor/editor_plugin_settings.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Version:" +msgstr "" + +#: editor/editor_plugin_settings.cpp msgid "Author:" msgstr "" @@ -2292,26 +2226,6 @@ msgstr "" msgid "Frame #:" msgstr "" -#: editor/editor_reimport_dialog.cpp -msgid "Please wait for scan to complete." -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Current scene must be saved to re-import." -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Save & Re-Import" -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Importing" -msgstr "" - -#: editor/editor_reimport_dialog.cpp -msgid "Re-Import Changed Resources" -msgstr "" - #: editor/editor_run_native.cpp msgid "Select device from the list" msgstr "" @@ -2421,10 +2335,6 @@ msgid "Importing:" msgstr "" #: editor/export_template_manager.cpp -msgid "Loading Export Templates" -msgstr "" - -#: editor/export_template_manager.cpp msgid "Current Version:" msgstr "" @@ -2457,81 +2367,78 @@ msgid "Cannot navigate to '" msgstr "" #: editor/filesystem_dock.cpp -msgid "" -"\n" -"Status: Needs Re-Import" -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "" -"\n" -"Source: " +msgid "View items as a grid of thumbnails" msgstr "" #: editor/filesystem_dock.cpp -msgid "Same source and destination files, doing nothing." +msgid "View items as a list" msgstr "" #: editor/filesystem_dock.cpp -msgid "Target file exists, can't overwrite. Delete first." +msgid "" +"\n" +"Status: Import of file failed. Please fix file and reimport manually." msgstr "" #: editor/filesystem_dock.cpp -msgid "Same source and destination paths, doing nothing." +msgid "" +"\n" +"Source: " msgstr "" #: editor/filesystem_dock.cpp -msgid "Can't move directories to within themselves." +msgid "Cannot move/rename resources root." msgstr "" #: editor/filesystem_dock.cpp -msgid "Can't rename deps for:\n" +msgid "Cannot move a folder into itself.\n" msgstr "" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Error moving file:\n" +msgid "Error moving:\n" msgstr "載入時發生錯誤:" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Error moving dir:\n" -msgstr "載入時發生錯誤:" +msgid "Unable to update dependencies:\n" +msgstr "å ´æ™¯ç¼ºå°‘äº†æŸäº›è³‡æºä»¥è‡³æ–¼ç„¡æ³•載入" #: editor/filesystem_dock.cpp -msgid "Can't operate on '..'" +msgid "No name provided" msgstr "" #: editor/filesystem_dock.cpp -msgid "Pick New Name and Location For:" +msgid "Provided name contains invalid characters" msgstr "" #: editor/filesystem_dock.cpp -msgid "No files selected!" +msgid "No name provided." msgstr "" #: editor/filesystem_dock.cpp -msgid "Expand all" +msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp -msgid "Collapse all" +msgid "A file or folder with this name already exists." msgstr "" #: editor/filesystem_dock.cpp -msgid "Show In File Manager" -msgstr "" +#, fuzzy +msgid "Renaming file:" +msgstr "載入時發生錯誤:" #: editor/filesystem_dock.cpp -msgid "Instance" +msgid "Renaming folder:" msgstr "" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." +msgid "Expand all" msgstr "" #: editor/filesystem_dock.cpp -msgid "View Owners.." +msgid "Collapse all" msgstr "" #: editor/filesystem_dock.cpp @@ -2539,7 +2446,7 @@ msgid "Copy Path" msgstr "" #: editor/filesystem_dock.cpp -msgid "Rename or Move.." +msgid "Rename.." msgstr "" #: editor/filesystem_dock.cpp @@ -2547,11 +2454,24 @@ msgid "Move To.." msgstr "" #: editor/filesystem_dock.cpp -msgid "Info" +#, fuzzy +msgid "New Folder.." +msgstr "新增資料夾" + +#: editor/filesystem_dock.cpp +msgid "Show In File Manager" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Instance" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Edit Dependencies.." msgstr "" #: editor/filesystem_dock.cpp -msgid "Re-Import.." +msgid "View Owners.." msgstr "" #: editor/filesystem_dock.cpp @@ -2584,6 +2504,11 @@ msgstr "" msgid "Move" msgstr "" +#: editor/filesystem_dock.cpp editor/plugins/animation_tree_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Rename" +msgstr "" + #: editor/groups_editor.cpp msgid "Add to Group" msgstr "" @@ -2598,6 +2523,10 @@ msgid "Import as Single Scene" msgstr "æ›´æ–°å ´æ™¯" #: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials" msgstr "" @@ -2610,6 +2539,18 @@ msgid "Import with Separate Objects+Materials" msgstr "" #: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Materials+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Materials+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes" msgstr "" @@ -2618,38 +2559,31 @@ msgid "Import as Multiple Scenes+Materials" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Import Scene" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Importing Scene.." msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Running Custom Script.." msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Couldn't load post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Invalid/broken script for post-import (check console):" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Error running post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp msgid "Saving.." msgstr "" @@ -2677,579 +2611,54 @@ msgstr "" msgid "Reimport" msgstr "" -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "No bit masks to import!" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path is empty." -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must be a complete resource path." -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Target path must exist." -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Save path is empty!" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Import BitMasks" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s):" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Target Path:" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/io_plugins/editor_texture_import_plugin.cpp -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Accept" -msgstr "" - -#: editor/io_plugins/editor_bitmask_import_plugin.cpp -msgid "Bit Mask" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No source font file!" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "No target font resource!" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "" -"Invalid file extension.\n" -"Please use .font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Can't load/process source font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Couldn't save font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Source Font Size:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Dest Resource:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "The quick brown fox jumps over the lazy dog." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Test:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/io_plugins/editor_sample_import_plugin.cpp -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Options:" -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Font Import" -msgstr "" - -#: 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 "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Failed opening as BMFont file." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error initializing FreeType." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Unknown font format." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Error loading font." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: scene/resources/dynamic_font.cpp -msgid "Invalid font size." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -msgid "Invalid font custom source." -msgstr "" - -#: editor/io_plugins/editor_font_import_plugin.cpp -#: editor/plugins/theme_editor_plugin.cpp -msgid "Font" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "No meshes to import!" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Single Mesh Import" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Source Mesh(es):" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -#: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Mesh" -msgstr "" - -#: editor/io_plugins/editor_mesh_import_plugin.cpp -msgid "Surface %d" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "No samples to import!" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Import Audio Samples" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Source Sample(s):" -msgstr "" - -#: editor/io_plugins/editor_sample_import_plugin.cpp -msgid "Audio Sample" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "New Clip" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Animation Options" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Flags" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Bake FPS:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Optimizer" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Linear Error" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angular Error" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Max Angle" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Clips" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Start(s)" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "End(s)" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Loop" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Filters" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source path is empty." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't load post-import script." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Invalid/broken script for post-import." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Error importing scene." -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import 3D Scene" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Source Scene:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Same as Target Scene" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Shared" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Target Texture Folder:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Post-Process Script:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Custom Root Node Type:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Auto" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Root Node Name:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "The Following Files are Missing:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Anyway" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp scene/gui/dialogs.cpp -msgid "Cancel" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import & Open" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Edited scene has not been saved, open imported scene anyway?" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Import Image:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Can't import a file over itself:" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "Couldn't localize path: %s (already local)" -msgstr "" - -#: editor/io_plugins/editor_scene_import_plugin.cpp -msgid "3D Scene Animation" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Uncompressed" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossless (PNG)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress Lossy (WebP)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Compress (VRAM)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Format" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Compression Quality (WebP):" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture Options" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Please specify some files!" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "At least one file needed for Atlas." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Error importing:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Only one file is required for large texture." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Max Texture Size:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for Atlas (2D)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cell Size:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Large Texture" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Textures (2D)" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture" +#: editor/multi_node_edit.cpp +msgid "MultiNode Set" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Base Atlas Texture" +#: editor/node_dock.cpp +msgid "Groups" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Source Texture(s)" +#: editor/node_dock.cpp +msgid "Select a Node to edit Signals and Groups." msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 2D" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create Poly" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures for 3D" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Textures" +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Insert Point" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "2D Texture" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly (Remove Point)" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "3D Texture" +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Remove Poly And Point" msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Atlas Texture" +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create a new polygon from scratch." msgstr "" -#: editor/io_plugins/editor_texture_import_plugin.cpp +#: editor/plugins/abstract_polygon_2d_editor.cpp msgid "" -"NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files to " -"the project." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Crop empty space." -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Texture" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Import Large Texture" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Load Source Image" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Slicing" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Inserting" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Saving" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save large texture:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Build Atlas For:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Loading Image:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't load image:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Converting Images" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Cropping Images" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Blitting Images" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save atlas image:" -msgstr "" - -#: editor/io_plugins/editor_texture_import_plugin.cpp -msgid "Couldn't save converted texture:" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid source!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Invalid translation source!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Column" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -#: editor/script_create_dialog.cpp -msgid "Language" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No items to import!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "No target path!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translations" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Couldn't import!" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Translation" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Source CSV:" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Ignore First Row" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Compress" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Add to Project (project.godot)" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Import Languages:" -msgstr "" - -#: editor/io_plugins/editor_translation_import_plugin.cpp -msgid "Translation" -msgstr "" - -#: editor/multi_node_edit.cpp -msgid "MultiNode Set" -msgstr "" - -#: editor/node_dock.cpp -msgid "Groups" -msgstr "" - -#: editor/node_dock.cpp -msgid "Select a Node to edit Signals and Groups." +"Edit existing polygon:\n" +"LMB: Move Point.\n" +"Ctrl+LMB: Split Segment.\n" +"RMB: Erase Point." msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp @@ -3405,7 +2814,6 @@ msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp #: editor/script_create_dialog.cpp msgid "Error!" @@ -3516,10 +2924,6 @@ msgid "Delete Input" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Rename" -msgstr "" - -#: editor/plugins/animation_tree_editor_plugin.cpp msgid "Animation tree is valid." msgstr "" @@ -3575,64 +2979,185 @@ msgstr "" msgid "Filters.." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing %d Triangles:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Free" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Triangle #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Contents:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Light Baker Setup:" +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "View Files" +msgstr "éŽæ¿¾æª”案.." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve hostname:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Parsing Geometry" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Fixing Lights" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connection error, please try again." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Making BVH" +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Can't connect." +msgstr "連接..." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't connect to host:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Light Octree" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response from host:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Creating Octree Texture" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Transfer to Lightmaps:" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, return code:" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Allocating Texture #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Req. Failed." msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Baking Triangle #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, too many redirects" msgstr "" -#: editor/plugins/baked_light_baker.cpp -msgid "Post-Processing Texture #" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Redirect Loop." msgstr "" -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Bake!" +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed:" msgstr "" -#: editor/plugins/baked_light_editor_plugin.cpp -msgid "Reset the lightmap octree baking process (start over)." +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Bad download hash, assuming file has been tampered with." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Expected:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Got:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed sha256 hash check" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Asset Download Error:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Fetching:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Resolving.." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Connecting.." +msgstr "連接..." + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Requesting.." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "Error making request" +msgstr "è¼‰å…¥å ´æ™¯æ™‚ç™¼ç”ŸéŒ¯èª¤" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Idle" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Retry" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download Error" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download for this asset is already in progress!" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "first" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "prev" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "next" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "last" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "All" +msgstr "全部" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Plugins" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Sort:" +msgstr "排åº:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Reverse" +msgstr "å轉" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Category:" +msgstr "類別:" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Site:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Support.." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Official" +msgstr "官方" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Testing" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Assets ZIP File" msgstr "" #: editor/plugins/camera_editor_plugin.cpp -#: editor/plugins/sample_library_editor_plugin.cpp msgid "Preview" msgstr "" @@ -3675,11 +3200,15 @@ msgid "Edit CanvasItem" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Change Anchors" +msgid "Anchors only" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom (%):" +msgid "Change Anchors and Margins" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Change Anchors" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3730,59 +3259,72 @@ msgid "Pan Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Lock the selected object in place (can't be moved)." +msgid "Toggles snapping" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Unlock the selected object (can be moved)." +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Makes sure the object's children are not selectable." +msgid "Snapping options" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Restores the object's children's ability to be selected." +msgid "Snap to grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -#: editor/plugins/script_text_editor.cpp -#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp -#: editor/project_settings_editor.cpp -#: modules/visual_script/visual_script_editor.cpp -msgid "Edit" +msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +msgid "Configure Snap..." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +msgid "Snap Relative" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Rotation Snap" +msgid "Use Pixel Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap Relative" +msgid "Smart snapping" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." +msgid "Snap to parent" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Use Pixel Snap" +msgid "Snap to node anchor" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Skeleton.." +msgid "Snap to node sides" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to other nodes" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Lock the selected object in place (can't be moved)." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Unlock the selected object (can be moved)." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Makes sure the object's children are not selectable." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Restores the object's children's ability to be selected." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3811,11 +3353,16 @@ msgid "View" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Reset" +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show helpers" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Zoom Set.." +msgid "Show rulers" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3827,7 +3374,7 @@ msgid "Frame Selection" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Anchor" +msgid "Layout" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3851,11 +3398,20 @@ msgid "Clear Pose" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Set a Value" +msgid "Drag pivot from mouse position" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Set pivot at mouse position" +msgstr "移除" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Multiply grid step by 2" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap (Pixels):" +msgid "Divide grid step by 2" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3866,23 +3422,28 @@ msgstr "" msgid "Adding %s..." msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Create Node" msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Error instancing scene from %s" msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "OK :(" msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "No parent to instance a child at." msgstr "" -#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "This operation requires a single selected node." msgstr "" @@ -3896,45 +3457,6 @@ msgid "" "Drag & drop + Alt : Change node type" msgstr "" -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Create Poly" -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly" -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/collision_polygon_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -#: editor/plugins/path_2d_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Edit Poly (Remove Point)" -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -#: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Create a new polygon from scratch." -msgstr "" - -#: editor/plugins/collision_polygon_2d_editor_plugin.cpp -msgid "" -"Edit existing polygon:\n" -"LMB: Move Point.\n" -"Ctrl+LMB: Split Segment.\n" -"RMB: Erase Point." -msgstr "" - #: editor/plugins/collision_polygon_editor_plugin.cpp msgid "Create Poly3D" msgstr "" @@ -3944,14 +3466,6 @@ msgid "Set Handle" msgstr "" #: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Creating Mesh Library" -msgstr "" - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp -msgid "Thumbnail.." -msgstr "" - -#: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Remove item %d?" msgstr "" @@ -3974,6 +3488,27 @@ msgid "Update from Scene" msgstr "" #: editor/plugins/curve_editor_plugin.cpp +msgid "Flat0" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Flat1" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +#, fuzzy +msgid "Ease in" +msgstr "æ‰€æœ‰çš„é¸æ“‡" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Ease out" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Smoothstep" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp msgid "Modify Curve Point" msgstr "" @@ -4052,22 +3587,18 @@ msgid "Create Occluder Polygon" msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Edit existing polygon:" msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "LMB: Move Point." msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Ctrl+LMB: Split Segment." msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "RMB: Erase Point." msgstr "" @@ -4168,6 +3699,10 @@ msgid "Create Outline" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Body" msgstr "" @@ -4295,12 +3830,73 @@ msgstr "" msgid "Populate" msgstr "" -#: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Create Navigation Polygon" +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Bake!" +msgstr "" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Bake the navigation mesh.\n" +msgstr "" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Clear the navigation mesh." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Setting up Configuration..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Calculating grid size..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating heightfield..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +#, fuzzy +msgid "Marking walkable triangles..." +msgstr "æ£åœ¨å„²å˜è®Šæ›´.." + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Constructing compact heightfield..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Eroding walkable area..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Partioning..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating contours..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating polymesh..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Converting to native navigation mesh..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Navigation Mesh Generator Setup:" +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Parsing Geometry..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Done!" msgstr "" #: editor/plugins/navigation_polygon_editor_plugin.cpp -msgid "Remove Poly And Point" +msgid "Create Navigation Polygon" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4474,16 +4070,19 @@ msgid "Curve Point #" msgstr "" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Point Pos" -msgstr "" +#, fuzzy +msgid "Set Curve Point Position" +msgstr "移除" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve In Pos" -msgstr "" +#, fuzzy +msgid "Set Curve In Position" +msgstr "移除" #: editor/plugins/path_editor_plugin.cpp -msgid "Set Curve Out Pos" -msgstr "" +#, fuzzy +msgid "Set Curve Out Position" +msgstr "移除" #: editor/plugins/path_editor_plugin.cpp msgid "Split Path" @@ -4542,6 +4141,14 @@ msgid "Scale Polygon" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon->UV" msgstr "" @@ -4596,63 +4203,10 @@ msgstr "" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "" -#: editor/plugins/rich_text_editor_plugin.cpp -msgid "Parse BBCode" -msgstr "" - -#: editor/plugins/sample_editor_plugin.cpp -msgid "Length:" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Open Sample File(s)" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "ERROR: Couldn't load sample!" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Add Sample" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Rename Sample" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Delete Sample" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "16 Bits" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "8 Bits" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Stereo" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Mono" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -#: editor/script_editor_debugger.cpp -msgid "Format" -msgstr "" - -#: editor/plugins/sample_library_editor_plugin.cpp -msgid "Pitch" -msgstr "" - #: editor/plugins/script_editor_plugin.cpp msgid "Clear Recent Files" msgstr "" @@ -4743,6 +4297,10 @@ msgstr "" msgid "Close All" msgstr "" +#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp +msgid "Run" +msgstr "" + #: editor/plugins/script_editor_plugin.cpp msgid "Toggle Scripts Panel" msgstr "" @@ -4785,18 +4343,6 @@ msgid "Debug with external editor" msgstr "離開編輯器嗎?" #: editor/plugins/script_editor_plugin.cpp -msgid "Window" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Left" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Move Right" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp msgid "Open Godot online documentation" msgstr "" @@ -4880,7 +4426,7 @@ msgstr "" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp editor/property_editor.cpp -#: editor/resources_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Copy" msgstr "" @@ -5146,10 +4692,6 @@ msgid "View Plane Transform." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Scaling to %s%%." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." msgstr "" @@ -5166,10 +4708,6 @@ msgid "Top View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Top" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "" @@ -5402,6 +4940,10 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Configure Snap.." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Local Coords" msgstr "" @@ -5547,6 +5089,10 @@ msgid "Speed (FPS):" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Loop" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animation Frames" msgstr "" @@ -5559,11 +5105,11 @@ msgid "Insert Empty (After)" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Up" +msgid "Move (Before)" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp -msgid "Down" +msgid "Move (After)" msgstr "" #: editor/plugins/style_box_editor_plugin.cpp @@ -5726,6 +5272,10 @@ msgid "Style" msgstr "" #: editor/plugins/theme_editor_plugin.cpp +msgid "Font" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp msgid "Color" msgstr "" @@ -5776,7 +5326,7 @@ msgid "Mirror Y" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Bucket" +msgid "Paint Tile" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp @@ -5840,6 +5390,10 @@ msgid "Delete preset '%s'?" msgstr "" #: editor/project_export.cpp +msgid "Export templates for this platform are missing/corrupted: " +msgstr "" + +#: editor/project_export.cpp msgid "Presets" msgstr "" @@ -5912,19 +5466,30 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +msgid "Export templates for this platform are missing/corrupted:" +msgstr "" + +#: editor/project_export.cpp msgid "Export With Debug" msgstr "" #: editor/project_manager.cpp -msgid "Invalid project path, the path must exist!" +#, fuzzy +msgid "The path does not exists." +msgstr "檔案ä¸å˜åœ¨" + +#: editor/project_manager.cpp +msgid "Please choose a 'project.godot' file." msgstr "" #: editor/project_manager.cpp -msgid "Invalid project path, project.godot must not exist." +msgid "" +"Your project will be created in a non empty folder (you might want to create " +"a new folder)." msgstr "" #: editor/project_manager.cpp -msgid "Invalid project path, project.godot must exist." +msgid "Please choose a folder that does not contain a 'project.godot' file." msgstr "" #: editor/project_manager.cpp @@ -5932,10 +5497,26 @@ msgid "Imported Project" msgstr "" #: editor/project_manager.cpp +msgid " " +msgstr "" + +#: editor/project_manager.cpp +msgid "It would be a good idea to name your project." +msgstr "" + +#: editor/project_manager.cpp msgid "Invalid project path (changed anything?)." msgstr "" #: editor/project_manager.cpp +msgid "Couldn't get project.godot in project path." +msgstr "" + +#: editor/project_manager.cpp +msgid "Couldn't edit project.godot in project path." +msgstr "" + +#: editor/project_manager.cpp msgid "Couldn't create project.godot in project path." msgstr "" @@ -5944,15 +5525,20 @@ msgid "The following files failed extraction from package:" msgstr "" #: editor/project_manager.cpp -msgid "Import Existing Project" +#, fuzzy +msgid "Rename Project" +msgstr "專案è¨å®š" + +#: editor/project_manager.cpp +msgid "Couldn't get project.godot in the project path." msgstr "" #: editor/project_manager.cpp -msgid "Project Path (Must Exist):" +msgid "New Game Project" msgstr "" #: editor/project_manager.cpp -msgid "Project Name:" +msgid "Import Existing Project" msgstr "" #: editor/project_manager.cpp @@ -5960,19 +5546,24 @@ msgid "Create New Project" msgstr "" #: editor/project_manager.cpp -msgid "Project Path:" +msgid "Install Project:" msgstr "" #: editor/project_manager.cpp -msgid "Install Project:" +msgid "Project Name:" msgstr "" #: editor/project_manager.cpp -msgid "Browse" +#, fuzzy +msgid "Create folder" +msgstr "新增資料夾" + +#: editor/project_manager.cpp +msgid "Project Path:" msgstr "" #: editor/project_manager.cpp -msgid "New Game Project" +msgid "Browse" msgstr "" #: editor/project_manager.cpp @@ -5984,6 +5575,11 @@ msgid "Unnamed Project" msgstr "" #: editor/project_manager.cpp +#, fuzzy +msgid "Can't open project" +msgstr "連接..." + +#: editor/project_manager.cpp msgid "Are you sure to open more than one project?" msgstr "" @@ -6019,10 +5615,6 @@ msgid "Project List" msgstr "" #: editor/project_manager.cpp -msgid "Run" -msgstr "" - -#: editor/project_manager.cpp msgid "Scan" msgstr "" @@ -6080,17 +5672,14 @@ msgid "Add Input Action Event" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Meta+" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Shift+" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#: scene/gui/input_action.cpp msgid "Alt+" msgstr "" @@ -6151,7 +5740,7 @@ msgstr "" msgid "Joypad Axis Index:" msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Axis" msgstr "" @@ -6171,31 +5760,31 @@ msgstr "" msgid "Add Event" msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Device" msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Button" msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Left Button." msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Right Button." msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Middle Button." msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Up." msgstr "" -#: editor/project_settings_editor.cpp scene/gui/input_action.cpp +#: editor/project_settings_editor.cpp msgid "Wheel Down." msgstr "" @@ -6204,7 +5793,7 @@ msgid "Add Global Property" msgstr "" #: editor/project_settings_editor.cpp -msgid "Select an setting item first!" +msgid "Select a setting item first!" msgstr "" #: editor/project_settings_editor.cpp @@ -6221,6 +5810,14 @@ msgid "Delete Item" msgstr "刪除" #: editor/project_settings_editor.cpp +msgid "Can't contain '/' or ':'" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Already existing" +msgstr "" + +#: editor/project_settings_editor.cpp msgid "Error saving settings." msgstr "" @@ -6370,10 +5967,19 @@ msgid "New Script" msgstr "" #: editor/property_editor.cpp +msgid "Make Unique" +msgstr "" + +#: editor/property_editor.cpp msgid "Show in File System" msgstr "" #: editor/property_editor.cpp +#, fuzzy +msgid "Convert To %s" +msgstr "è½‰æ›æˆ.." + +#: editor/property_editor.cpp msgid "Error loading file: Not a resource!" msgstr "" @@ -6410,6 +6016,10 @@ msgid "Select Property" msgstr "" #: editor/property_selector.cpp +msgid "Select Virtual Method" +msgstr "" + +#: editor/property_selector.cpp msgid "Select Method" msgstr "" @@ -6437,26 +6047,6 @@ msgstr "" msgid "Reparent" msgstr "" -#: editor/resources_dock.cpp -msgid "Create New Resource" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Open Resource" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Save Resource" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Resource Tools" -msgstr "" - -#: editor/resources_dock.cpp -msgid "Make Local" -msgstr "" - #: editor/run_settings_dialog.cpp msgid "Run Mode:" msgstr "" @@ -6583,14 +6173,6 @@ msgid "Sub-Resources:" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Edit Groups" -msgstr "" - -#: editor/scene_tree_dock.cpp -msgid "Edit Connections" -msgstr "" - -#: editor/scene_tree_dock.cpp msgid "Clear Inheritance" msgstr "" @@ -6775,6 +6357,15 @@ msgid "Invalid base path" msgstr "" #: editor/script_create_dialog.cpp +msgid "Directory of the same name exists" +msgstr "" + +#: editor/script_create_dialog.cpp +#, fuzzy +msgid "File exists, will be reused" +msgstr "檔案已經å˜åœ¨, è¦è¦†å¯«å—Ž?" + +#: editor/script_create_dialog.cpp msgid "Invalid extension" msgstr "" @@ -6816,6 +6407,10 @@ msgid "Load existing script file" msgstr "" #: editor/script_create_dialog.cpp +msgid "Language" +msgstr "" + +#: editor/script_create_dialog.cpp msgid "Inherits" msgstr "" @@ -6856,6 +6451,10 @@ msgid "Function:" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Errors" msgstr "" @@ -6938,6 +6537,10 @@ msgid "Type" msgstr "類型" #: editor/script_editor_debugger.cpp +msgid "Format" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Usage" msgstr "使用é‡" @@ -7016,12 +6619,28 @@ msgstr "" msgid "Change Probe Extents" msgstr "變更框型範åœ" +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Library" +msgstr "" + +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Status" +msgstr "" + +#: modules/gdnative/gd_native_library_editor.cpp +msgid "Libraries: " +msgstr "" + +#: modules/gdnative/register_types.cpp +msgid "GDNative" +msgstr "" + #: 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/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "解碼å—節ä½å…ƒä¸è¶³ï¼Œæˆ–ç‚ºç„¡æ•ˆæ ¼å¼ã€‚" @@ -7078,10 +6697,6 @@ msgid "GridMap Duplicate Selection" msgstr "複製所é¸" #: modules/gridmap/grid_map_editor_plugin.cpp -msgid "GridMap Paint" -msgstr "" - -#: modules/gridmap/grid_map_editor_plugin.cpp msgid "Snap View" msgstr "" @@ -7178,12 +6793,8 @@ msgstr "專案è¨å®š" msgid "Pick Distance:" msgstr "" -#: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Tiles" -msgstr "" - -#: modules/gridmap/grid_map_editor_plugin.cpp -msgid "Areas" +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "Builds" msgstr "" #: modules/visual_script/visual_script.cpp @@ -7377,10 +6988,18 @@ msgid "Return" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Call" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Get" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Script already has function '%s'" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Input Value" msgstr "" @@ -7740,6 +7359,12 @@ msgid "" "order for AnimatedSprite3D to display frames." msgstr "" +#: scene/3d/vehicle_body.cpp +msgid "" +"VehicleWheel serves to provide a wheel system to a VehicleBody. Please use " +"it as a child of a VehicleBody." +msgstr "" + #: scene/gui/color_picker.cpp msgid "Raw Mode" msgstr "" @@ -7749,6 +7374,10 @@ msgid "Add current color as a preset" msgstr "" #: scene/gui/dialogs.cpp +msgid "Cancel" +msgstr "" + +#: scene/gui/dialogs.cpp msgid "Alert!" msgstr "" @@ -7756,10 +7385,6 @@ msgstr "" msgid "Please Confirm..." msgstr "" -#: scene/gui/input_action.cpp -msgid "Ctrl+" -msgstr "Ctrl+" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -7788,6 +7413,37 @@ msgid "" "texture to some node for display." msgstr "" +#: scene/resources/dynamic_font.cpp +msgid "Error initializing FreeType." +msgstr "" + +#: scene/resources/dynamic_font.cpp +msgid "Unknown font format." +msgstr "" + +#: scene/resources/dynamic_font.cpp +msgid "Error loading font." +msgstr "" + +#: scene/resources/dynamic_font.cpp +msgid "Invalid font size." +msgstr "" + +#~ msgid "Arguments:" +#~ msgstr "è¼¸å…¥åƒæ•¸" + +#~ msgid "Return:" +#~ msgstr "回傳值:" + +#~ msgid "Added:" +#~ msgstr "已新增:" + +#~ msgid "Removed:" +#~ msgstr "已刪除:" + +#~ msgid "Ctrl+" +#~ msgstr "Ctrl+" + #~ msgid "Close scene? (Unsaved changes will be lost)" #~ msgstr "沒有儲å˜çš„變更都會éºå¤±, 確定è¦é—œé–‰?" diff --git a/main/SCsub b/main/SCsub index 1f97cd1be0..ae63b94864 100644 --- a/main/SCsub +++ b/main/SCsub @@ -16,7 +16,7 @@ def make_splash(target, source, env): g.write("/* THIS FILE IS GENERATED DO NOT EDIT */\n") g.write("#ifndef BOOT_SPLASH_H\n") g.write("#define BOOT_SPLASH_H\n") - g.write("static const Color boot_splash_bg_color = Color(1,1,1,1);\n") + g.write('static const Color boot_splash_bg_color = Color::html("#232323");\n') g.write("static const unsigned char boot_splash_png[] = {\n") for i in range(len(buf)): g.write(byte_to_str(buf[i]) + ",\n") diff --git a/main/input_default.cpp b/main/input_default.cpp index 902d3168d8..2940f432d5 100644 --- a/main/input_default.cpp +++ b/main/input_default.cpp @@ -105,8 +105,8 @@ bool InputDefault::is_action_just_pressed(const StringName &p_action) const { if (!E) return false; - if (Engine::get_singleton()->is_in_fixed_frame()) { - return E->get().pressed && E->get().fixed_frame == Engine::get_singleton()->get_fixed_frames(); + if (Engine::get_singleton()->is_in_physics_frame()) { + return E->get().pressed && E->get().physics_frame == Engine::get_singleton()->get_physics_frames(); } else { return E->get().pressed && E->get().idle_frame == Engine::get_singleton()->get_idle_frames(); } @@ -118,8 +118,8 @@ bool InputDefault::is_action_just_released(const StringName &p_action) const { if (!E) return false; - if (Engine::get_singleton()->is_in_fixed_frame()) { - return !E->get().pressed && E->get().fixed_frame == Engine::get_singleton()->get_fixed_frames(); + if (Engine::get_singleton()->is_in_physics_frame()) { + return !E->get().pressed && E->get().physics_frame == Engine::get_singleton()->get_physics_frames(); } else { return !E->get().pressed && E->get().idle_frame == Engine::get_singleton()->get_idle_frames(); } @@ -324,7 +324,7 @@ void InputDefault::parse_input_event(const Ref<InputEvent> &p_event) { if (InputMap::get_singleton()->event_is_action(p_event, E->key()) && is_action_pressed(E->key()) != p_event->is_pressed()) { Action action; - action.fixed_frame = Engine::get_singleton()->get_fixed_frames(); + action.physics_frame = Engine::get_singleton()->get_physics_frames(); action.idle_frame = Engine::get_singleton()->get_idle_frames(); action.pressed = p_event->is_pressed(); action_state[E->key()] = action; @@ -422,9 +422,9 @@ int InputDefault::get_mouse_button_mask() const { return mouse_button_mask; // do not trust OS implementaiton, should remove it - OS::get_singleton()->get_mouse_button_state(); } -void InputDefault::warp_mouse_pos(const Vector2 &p_to) { +void InputDefault::warp_mouse_position(const Vector2 &p_to) { - OS::get_singleton()->warp_mouse_pos(p_to); + OS::get_singleton()->warp_mouse_position(p_to); } Point2i InputDefault::warp_mouse_motion(const Ref<InputEventMouseMotion> &p_motion, const Rect2 &p_rect) { @@ -447,7 +447,7 @@ Point2i InputDefault::warp_mouse_motion(const Ref<InputEventMouseMotion> &p_moti const Point2i pos_local = p_motion->get_global_position() - p_rect.position; const Point2i pos_warped(Math::fposmod(pos_local.x, p_rect.size.x), Math::fposmod(pos_local.y, p_rect.size.y)); if (pos_warped != pos_local) { - OS::get_singleton()->warp_mouse_pos(pos_warped + p_rect.position); + OS::get_singleton()->warp_mouse_position(pos_warped + p_rect.position); } return rel_warped; @@ -460,7 +460,7 @@ void InputDefault::action_press(const StringName &p_action) { Action action; - action.fixed_frame = Engine::get_singleton()->get_fixed_frames(); + action.physics_frame = Engine::get_singleton()->get_physics_frames(); action.idle_frame = Engine::get_singleton()->get_idle_frames(); action.pressed = true; @@ -471,7 +471,7 @@ void InputDefault::action_release(const StringName &p_action) { Action action; - action.fixed_frame = Engine::get_singleton()->get_fixed_frames(); + action.physics_frame = Engine::get_singleton()->get_physics_frames(); action.idle_frame = Engine::get_singleton()->get_idle_frames(); action.pressed = false; diff --git a/main/input_default.h b/main/input_default.h index 345c34c55e..e2cb03e67c 100644 --- a/main/input_default.h +++ b/main/input_default.h @@ -51,7 +51,7 @@ class InputDefault : public Input { MainLoop *main_loop; struct Action { - uint64_t fixed_frame; + uint64_t physics_frame; uint64_t idle_frame; bool pressed; }; @@ -200,7 +200,7 @@ public: virtual Point2 get_last_mouse_speed() const; virtual int get_mouse_button_mask() const; - virtual void warp_mouse_pos(const Vector2 &p_to); + virtual void warp_mouse_position(const Vector2 &p_to); virtual Point2i warp_mouse_motion(const Ref<InputEventMouseMotion> &p_motion, const Rect2 &p_rect); virtual void parse_input_event(const Ref<InputEvent> &p_event); diff --git a/main/main.cpp b/main/main.cpp index 04375666a9..deffb3a632 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -45,6 +45,7 @@ #include "input_map.h" #include "io/resource_loader.h" #include "scene/main/scene_tree.h" +#include "servers/arvr_server.h" #include "servers/audio_server.h" #include "io/resource_loader.h" @@ -74,6 +75,7 @@ #include "performance.h" #include "translation.h" #include "version.h" +#include "version_hash.gen.h" static ProjectSettings *globals = NULL; static Engine *engine = NULL; @@ -81,6 +83,7 @@ static InputMap *input_map = NULL; static bool _start_success = false; static ScriptDebugger *script_debugger = NULL; AudioServer *audio_server = NULL; +ARVRServer *arvr_server = NULL; static MessageQueue *message_queue = NULL; static Performance *performance = NULL; @@ -122,6 +125,14 @@ static String unescape_cmdline(const String &p_str) { return p_str.replace("%20", " "); } +static String get_full_version_string() { + + String hash = String(VERSION_HASH); + if (hash.length() != 0) + hash = "." + hash.left(7); + return String(VERSION_MKSTRING) + hash; +} + //#define DEBUG_INIT #ifdef DEBUG_INIT @@ -132,7 +143,7 @@ static String unescape_cmdline(const String &p_str) { void Main::print_help(const char *p_binary) { - OS::get_singleton()->print(VERSION_FULL_NAME " - https://godotengine.org\n"); + print_line(String(_MKSTR(VERSION_NAME)) + " v" + get_full_version_string() + " - https://godotengine.org"); OS::get_singleton()->print("(c) 2007-2017 Juan Linietsky, Ariel Manzur.\n"); OS::get_singleton()->print("(c) 2014-2017 Godot Engine contributors.\n"); OS::get_singleton()->print("\n"); @@ -141,6 +152,7 @@ void Main::print_help(const char *p_binary) { OS::get_singleton()->print("General options:\n"); OS::get_singleton()->print(" -h, --help Display this help message.\n"); + OS::get_singleton()->print(" --version Display the version string.\n"); OS::get_singleton()->print(" -v, --verbose Use verbose stdout mode.\n"); OS::get_singleton()->print(" --quiet Quiet mode, silences stdout messages. Errors are still displayed.\n"); OS::get_singleton()->print("\n"); @@ -152,6 +164,7 @@ void Main::print_help(const char *p_binary) { #endif OS::get_singleton()->print(" -l, --language <locale> Use a specific locale (<locale> being a two-letter code).\n"); OS::get_singleton()->print(" --path <directory> Path to a project (<directory> must contain a 'project.godot' file).\n"); + OS::get_singleton()->print(" -u, --upwards Scan folders upwards for project.godot file.\n"); OS::get_singleton()->print(" --main-pack <file> Path to a pack (.pck) file to load.\n"); OS::get_singleton()->print(" --render-thread <mode> Render thread mode ('unsafe', 'safe', 'separate').\n"); OS::get_singleton()->print(" --remote-fs <address> Remote filesystem (<host/IP>[:<port>] address).\n"); @@ -195,7 +208,7 @@ void Main::print_help(const char *p_binary) { OS::get_singleton()->print(" --time-scale <scale> Force time scale (higher values are faster, 1.0 is normal speed).\n"); OS::get_singleton()->print(" --disable-render-loop Disable render loop so rendering only occurs when called explicitly from script.\n"); OS::get_singleton()->print(" --disable-crash-handler Disable crash handler when supported by the platform code.\n"); - OS::get_singleton()->print(" --fixed-fps <fps> Forces a fixed ratio between process and fixed_process timing, for use when precision is required, or when rendering to video files. Setting this will disable real-time syncronization, so that run speed is only capped by performance\n"); + OS::get_singleton()->print(" --fixed-fps <fps> Force a fixed number of frames per second. This setting disables real-time synchronization.\n"); OS::get_singleton()->print("\n"); OS::get_singleton()->print("Standalone tools:\n"); @@ -203,7 +216,7 @@ void Main::print_help(const char *p_binary) { #ifdef TOOLS_ENABLED OS::get_singleton()->print(" --export <target> Export the project using the given export target.\n"); OS::get_singleton()->print(" --export-debug Use together with --export, enables debug mode for the template.\n"); - OS::get_singleton()->print(" --doctool <file> Dump the whole engine API to <file> in XML format. If <file> exists, it will be merged.\n"); + OS::get_singleton()->print(" --doctool <path> Dump the engine API reference to the given <path> in XML format, merging if existing files are found.\n"); OS::get_singleton()->print(" --no-docbase Disallow dumping the base types (used with --doctool).\n"); #ifdef DEBUG_METHODS_ENABLED OS::get_singleton()->print(" --gdnative-generate-json-api Generate JSON dump of the Godot API for GDNative bindings.\n"); @@ -221,7 +234,6 @@ void Main::print_help(const char *p_binary) { } Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_phase) { - RID_OwnerBase::init_rid(); OS::get_singleton()->initialize_core(); @@ -244,8 +256,11 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph register_core_settings(); //here globals is present + OS::get_singleton()->initialize_logger(); + translation_server = memnew(TranslationServer); performance = memnew(Performance); + ClassDB::register_class<Performance>(); globals->add_singleton(ProjectSettings::Singleton("Performance", performance)); GLOBAL_DEF("debug/settings/crash_handler/message", String("Please include this when reporting the bug on https://github.com/godotengine/godot/issues")); @@ -268,7 +283,6 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph while (I) { I->get() = unescape_cmdline(I->get().strip_escapes()); - //print_line("CMD: "+I->get()); I = I->next(); } @@ -279,6 +293,7 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph String video_driver = ""; String audio_driver = ""; String game_path = "."; + bool upwards = false; String debug_mode; String debug_host; String main_pack; @@ -318,6 +333,11 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph show_help = true; goto error; + } else if (I->get() == "--version") { + + print_line(get_full_version_string()); + goto error; + } else if (I->get() == "--resolution") { // force resolution if (I->next()) { @@ -482,6 +502,8 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph OS::get_singleton()->print("Missing relative or absolute path, aborting.\n"); goto error; } + } else if (I->get() == "-u" || I->get() == "--upwards") { // scan folders upwards + upwards = true; } else if (I->get().ends_with("project.godot")) { String path; String file = I->get(); @@ -679,7 +701,7 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph #endif - if (globals->setup(game_path, main_pack) != OK) { + if (globals->setup(game_path, main_pack, upwards) != OK) { #ifdef TOOLS_ENABLED editor = false; @@ -711,7 +733,7 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph #ifdef TOOLS_ENABLED - if (main_args.size() == 0 && (!ProjectSettings::get_singleton()->has("application/run/main_loop_type")) && (!ProjectSettings::get_singleton()->has("application/run/main_scene") || String(ProjectSettings::get_singleton()->get("application/run/main_scene")) == "")) + if (main_args.size() == 0 && (!ProjectSettings::get_singleton()->has_setting("application/run/main_loop_type")) && (!ProjectSettings::get_singleton()->has_setting("application/run/main_scene") || String(ProjectSettings::get_singleton()->get("application/run/main_scene")) == "")) use_custom_res = false; //project manager (run without arguments) #endif @@ -724,21 +746,21 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph //if (video_driver == "") // useless for now, so removing // video_driver = GLOBAL_DEF("display/driver/name", Variant((const char *)OS::get_singleton()->get_video_driver_name(0))); - if (!force_res && use_custom_res && globals->has("display/window/size/width")) + if (!force_res && use_custom_res && globals->has_setting("display/window/size/width")) video_mode.width = globals->get("display/window/size/width"); - if (!force_res && use_custom_res && globals->has("display/window/size/height")) + if (!force_res && use_custom_res && globals->has_setting("display/window/size/height")) video_mode.height = globals->get("display/window/size/height"); - if (!editor && ((globals->has("display/window/dpi/allow_hidpi") && !globals->get("display/window/dpi/allow_hidpi")) || force_lowdpi)) { + if (!editor && ((globals->has_setting("display/window/dpi/allow_hidpi") && !globals->get("display/window/dpi/allow_hidpi")) || force_lowdpi)) { OS::get_singleton()->_allow_hidpi = false; } - if (use_custom_res && globals->has("display/window/size/fullscreen")) + if (use_custom_res && globals->has_setting("display/window/size/fullscreen")) video_mode.fullscreen = globals->get("display/window/size/fullscreen"); - if (use_custom_res && globals->has("display/window/size/resizable")) + if (use_custom_res && globals->has_setting("display/window/size/resizable")) video_mode.resizable = globals->get("display/window/size/resizable"); - if (use_custom_res && globals->has("display/window/size/borderless")) + if (use_custom_res && globals->has_setting("display/window/size/borderless")) video_mode.borderless_window = globals->get("display/window/size/borderless"); - if (!force_res && use_custom_res && globals->has("display/window/size/test_width") && globals->has("display/window/size/test_height")) { + if (!force_res && use_custom_res && globals->has_setting("display/window/size/test_width") && globals->has_setting("display/window/size/test_height")) { int tw = globals->get("display/window/size/test_width"); int th = globals->get("display/window/size/test_height"); if (tw > 0 && th > 0) { @@ -759,6 +781,9 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph GLOBAL_DEF("rendering/quality/intended_usage/framebuffer_allocation", 2); GLOBAL_DEF("rendering/quality/intended_usage/framebuffer_allocation.mobile", 3); + if (editor) { + OS::get_singleton()->_allow_hidpi = true; //editors always in hidpi + } Engine::get_singleton()->_pixel_snap = GLOBAL_DEF("rendering/quality/2d/use_pixel_snap", false); OS::get_singleton()->_keep_screen_on = GLOBAL_DEF("display/window/energy_saving/keep_screen_on", true); if (rtm == -1) { @@ -916,11 +941,14 @@ Error Main::setup2(Thread::ID p_main_tid_override) { OS::get_singleton()->set_window_position(init_custom_pos); } - //right moment to create and initialize the audio server + // right moment to create and initialize the audio server audio_server = memnew(AudioServer); audio_server->init(); + // also init our arvr_server from here + arvr_server = memnew(ARVRServer); + OS::get_singleton()->set_use_vsync(use_vsync); register_core_singletons(); @@ -990,8 +1018,10 @@ Error Main::setup2(Thread::ID p_main_tid_override) { #endif } +#ifdef TOOLS_ENABLED Ref<Image> icon = memnew(Image(app_icon_png)); OS::get_singleton()->set_icon(icon); +#endif } MAIN_PRINT("Main: DCC"); @@ -1082,6 +1112,7 @@ bool Main::start() { ERR_FAIL_COND_V(!_start_success, false); + bool hasicon = false; bool editor = false; String doc_tool; List<String> removal_docs; @@ -1319,7 +1350,7 @@ bool Main::start() { String stretch_mode = GLOBAL_DEF("display/window/stretch/mode", "disabled"); String stretch_aspect = GLOBAL_DEF("display/window/stretch/aspect", "ignore"); Size2i stretch_size = Size2(GLOBAL_DEF("display/window/size/width", 0), GLOBAL_DEF("display/window/size/height", 0)); - int stretch_shrink = GLOBAL_DEF("display/window/stretch/shrink", 1); + real_t stretch_shrink = GLOBAL_DEF("display/window/stretch/shrink", 1.0f); SceneTree::StretchMode sml_sm = SceneTree::STRETCH_MODE_DISABLED; if (stretch_mode == "2d") @@ -1519,8 +1550,10 @@ bool Main::start() { if (iconpath != "") { Ref<Image> icon; icon.instance(); - if (icon->load(iconpath) == OK) + if (icon->load(iconpath) == OK) { OS::get_singleton()->set_icon(icon); + hasicon = true; + } } } } @@ -1537,6 +1570,11 @@ bool Main::start() { #endif } + if (!hasicon) { + Ref<Image> icon = memnew(Image(app_icon_png)); + OS::get_singleton()->set_icon(icon); + } + OS::get_singleton()->set_main_loop(main_loop); return true; @@ -1550,7 +1588,7 @@ uint32_t Main::frame = 0; bool Main::force_redraw_requested = false; //for performance metrics -static uint64_t fixed_process_max = 0; +static uint64_t physics_process_max = 0; static uint64_t idle_process_max = 0; bool Main::iteration() { @@ -1573,7 +1611,7 @@ bool Main::iteration() { return false; */ - uint64_t fixed_process_ticks = 0; + uint64_t physics_process_ticks = 0; uint64_t idle_process_ticks = 0; frame += ticks_elapsed; @@ -1591,11 +1629,11 @@ bool Main::iteration() { int iters = 0; - Engine::get_singleton()->_in_fixed = true; + Engine::get_singleton()->_in_physics = true; while (time_accum > frame_slice) { - uint64_t fixed_begin = OS::get_singleton()->get_ticks_usec(); + uint64_t physics_begin = OS::get_singleton()->get_ticks_usec(); PhysicsServer::get_singleton()->sync(); PhysicsServer::get_singleton()->flush_queries(); @@ -1618,13 +1656,13 @@ bool Main::iteration() { time_accum -= frame_slice; message_queue->flush(); - 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); + physics_process_ticks = MAX(physics_process_ticks, OS::get_singleton()->get_ticks_usec() - physics_begin); // keep the largest one for reference + physics_process_max = MAX(OS::get_singleton()->get_ticks_usec() - physics_begin, physics_process_max); iters++; - Engine::get_singleton()->_fixed_frames++; + Engine::get_singleton()->_physics_frames++; } - Engine::get_singleton()->_in_fixed = false; + Engine::get_singleton()->_in_physics = false; uint64_t idle_begin = OS::get_singleton()->get_ticks_usec(); @@ -1660,7 +1698,7 @@ bool Main::iteration() { if (script_debugger) { if (script_debugger->is_profiling()) { - script_debugger->profiling_set_frame_times(USEC_TO_SEC(frame_time), USEC_TO_SEC(idle_process_ticks), USEC_TO_SEC(fixed_process_ticks), frame_slice); + script_debugger->profiling_set_frame_times(USEC_TO_SEC(frame_time), USEC_TO_SEC(idle_process_ticks), USEC_TO_SEC(physics_process_ticks), frame_slice); } script_debugger->idle_poll(); } @@ -1676,9 +1714,9 @@ bool Main::iteration() { Engine::get_singleton()->_fps = frames; performance->set_process_time(USEC_TO_SEC(idle_process_max)); - performance->set_fixed_process_time(USEC_TO_SEC(fixed_process_max)); + performance->set_physics_process_time(USEC_TO_SEC(physics_process_max)); idle_process_max = 0; - fixed_process_max = 0; + physics_process_max = 0; frame %= 1000000; frames = 0; @@ -1742,6 +1780,11 @@ void Main::cleanup() { memdelete(audio_server); } + if (arvr_server) { + // cleanup now before we pull the rug from underneath... + memdelete(arvr_server); + } + unregister_driver_types(); unregister_module_types(); unregister_scene_types(); diff --git a/main/performance.cpp b/main/performance.cpp index e85d2bf736..c4b62559c7 100644 --- a/main/performance.cpp +++ b/main/performance.cpp @@ -42,7 +42,7 @@ void Performance::_bind_methods() { BIND_ENUM_CONSTANT(TIME_FPS); BIND_ENUM_CONSTANT(TIME_PROCESS); - BIND_ENUM_CONSTANT(TIME_FIXED_PROCESS); + BIND_ENUM_CONSTANT(TIME_PHYSICS_PROCESS); BIND_ENUM_CONSTANT(MEMORY_STATIC); BIND_ENUM_CONSTANT(MEMORY_DYNAMIC); BIND_ENUM_CONSTANT(MEMORY_STATIC_MAX); @@ -57,10 +57,10 @@ void Performance::_bind_methods() { BIND_ENUM_CONSTANT(RENDER_SHADER_CHANGES_IN_FRAME); BIND_ENUM_CONSTANT(RENDER_SURFACE_CHANGES_IN_FRAME); BIND_ENUM_CONSTANT(RENDER_DRAW_CALLS_IN_FRAME); - BIND_ENUM_CONSTANT(RENDER_USAGE_VIDEO_MEM_TOTAL); BIND_ENUM_CONSTANT(RENDER_VIDEO_MEM_USED); BIND_ENUM_CONSTANT(RENDER_TEXTURE_MEM_USED); BIND_ENUM_CONSTANT(RENDER_VERTEX_MEM_USED); + BIND_ENUM_CONSTANT(RENDER_USAGE_VIDEO_MEM_TOTAL); BIND_ENUM_CONSTANT(PHYSICS_2D_ACTIVE_OBJECTS); BIND_ENUM_CONSTANT(PHYSICS_2D_COLLISION_PAIRS); BIND_ENUM_CONSTANT(PHYSICS_2D_ISLAND_COUNT); @@ -78,7 +78,7 @@ String Performance::get_monitor_name(Monitor p_monitor) const { "time/fps", "time/process", - "time/fixed_process", + "time/physics_process", "memory/static", "memory/dynamic", "memory/static_max", @@ -94,7 +94,7 @@ String Performance::get_monitor_name(Monitor p_monitor) const { "raster/surface_changes", "raster/draw_calls", "video/video_mem", - "video/texure_mem", + "video/texture_mem", "video/vertex_mem", "video/video_mem_max", "physics_2d/active_objects", @@ -114,7 +114,7 @@ float Performance::get_monitor(Monitor p_monitor) const { switch (p_monitor) { case TIME_FPS: return Engine::get_singleton()->get_frames_per_second(); case TIME_PROCESS: return _process_time; - case TIME_FIXED_PROCESS: return _fixed_process_time; + case TIME_PHYSICS_PROCESS: return _physics_process_time; case MEMORY_STATIC: return Memory::get_mem_usage(); case MEMORY_DYNAMIC: return MemoryPool::total_memory; case MEMORY_STATIC_MAX: return Memory::get_mem_max_usage(); @@ -158,14 +158,14 @@ void Performance::set_process_time(float p_pt) { _process_time = p_pt; } -void Performance::set_fixed_process_time(float p_pt) { +void Performance::set_physics_process_time(float p_pt) { - _fixed_process_time = p_pt; + _physics_process_time = p_pt; } Performance::Performance() { _process_time = 0; - _fixed_process_time = 0; + _physics_process_time = 0; singleton = this; } diff --git a/main/performance.h b/main/performance.h index a9e3c07d7c..900e6434b7 100644 --- a/main/performance.h +++ b/main/performance.h @@ -43,14 +43,14 @@ class Performance : public Object { static void _bind_methods(); float _process_time; - float _fixed_process_time; + float _physics_process_time; public: enum Monitor { TIME_FPS, TIME_PROCESS, - TIME_FIXED_PROCESS, + TIME_PHYSICS_PROCESS, MEMORY_STATIC, MEMORY_DYNAMIC, MEMORY_STATIC_MAX, @@ -83,7 +83,7 @@ public: String get_monitor_name(Monitor p_monitor) const; void set_process_time(float p_pt); - void set_fixed_process_time(float p_pt); + void set_physics_process_time(float p_pt); static Performance *get_singleton() { return singleton; } diff --git a/main/splash.png b/main/splash.png Binary files differindex 894a7d7aba..34be46557f 100644 --- a/main/splash.png +++ b/main/splash.png diff --git a/methods.py b/methods.py index 2ab76a5416..b56a0364b5 100644 --- a/methods.py +++ b/methods.py @@ -1360,6 +1360,10 @@ def win32_spawn(sh, escape, cmd, args, spawnenv): return exit_code """ +def android_add_flat_dir(self, dir): + if (dir not in self.android_flat_dirs): + self.android_flat_dirs.append(dir) + def android_add_maven_repository(self, url): if (url not in self.android_maven_repos): self.android_maven_repos.append(url) @@ -1706,9 +1710,9 @@ def generate_vs_project(env, num_jobs): env.AddToVSProject(env.servers_sources) env.AddToVSProject(env.editor_sources) - env['MSVSBUILDCOM'] = build_commandline('scons platform=windows target=$(Configuration) tools=!tools! -j' + str(num_jobs)) - env['MSVSREBUILDCOM'] = build_commandline('scons platform=windows target=$(Configuration) tools=!tools! vsproj=yes -j' + str(num_jobs)) - env['MSVSCLEANCOM'] = build_commandline('scons --clean platform=windows target=$(Configuration) tools=!tools! -j' + str(num_jobs)) + env['MSVSBUILDCOM'] = build_commandline('scons --directory=$(ProjectDir) platform=windows target=$(Configuration) tools=!tools! -j' + str(num_jobs)) + env['MSVSREBUILDCOM'] = build_commandline('scons --directory=$(ProjectDir) platform=windows target=$(Configuration) tools=!tools! vsproj=yes -j' + str(num_jobs)) + env['MSVSCLEANCOM'] = build_commandline('scons --directory=$(ProjectDir) --clean platform=windows target=$(Configuration) tools=!tools! -j' + str(num_jobs)) # This version information (Win32, x64, Debug, Release, Release_Debug seems to be # required for Visual Studio to understand that it needs to generate an NMAKE diff --git a/misc/dist/ios_xcode/export_options.plist b/misc/dist/ios_xcode/export_options.plist new file mode 100644 index 0000000000..86d89a6e42 --- /dev/null +++ b/misc/dist/ios_xcode/export_options.plist @@ -0,0 +1,10 @@ +<?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>method</key> + <string>$export_method</string> + <key>teamID</key> + <string>$team_id</string> +</dict> +</plist>
\ No newline at end of file diff --git a/misc/dist/ios_xcode/godot_debug.iphone b/misc/dist/ios_xcode/godot.iphone.debug.arm index e69de29bb2..e69de29bb2 100755 --- a/misc/dist/ios_xcode/godot_debug.iphone +++ b/misc/dist/ios_xcode/godot.iphone.debug.arm diff --git a/misc/dist/ios_xcode/godot_opt.iphone b/misc/dist/ios_xcode/godot.iphone.debug.arm64 index e69de29bb2..e69de29bb2 100755 --- a/misc/dist/ios_xcode/godot_opt.iphone +++ b/misc/dist/ios_xcode/godot.iphone.debug.arm64 diff --git a/misc/dist/ios_xcode/godot.iphone.debug.fat b/misc/dist/ios_xcode/godot.iphone.debug.fat new file mode 100755 index 0000000000..e69de29bb2 --- /dev/null +++ b/misc/dist/ios_xcode/godot.iphone.debug.fat diff --git a/misc/dist/ios_xcode/godot.iphone.release.arm b/misc/dist/ios_xcode/godot.iphone.release.arm new file mode 100755 index 0000000000..e69de29bb2 --- /dev/null +++ b/misc/dist/ios_xcode/godot.iphone.release.arm diff --git a/misc/dist/ios_xcode/godot.iphone.release.arm64 b/misc/dist/ios_xcode/godot.iphone.release.arm64 new file mode 100755 index 0000000000..e69de29bb2 --- /dev/null +++ b/misc/dist/ios_xcode/godot.iphone.release.arm64 diff --git a/misc/dist/ios_xcode/godot.iphone.release.fat b/misc/dist/ios_xcode/godot.iphone.release.fat new file mode 100755 index 0000000000..e69de29bb2 --- /dev/null +++ b/misc/dist/ios_xcode/godot.iphone.release.fat diff --git a/misc/dist/ios_xcode/godot_ios.xcodeproj/project.pbxproj b/misc/dist/ios_xcode/godot_ios.xcodeproj/project.pbxproj index bdba8488c8..3f2db94193 100644 --- a/misc/dist/ios_xcode/godot_ios.xcodeproj/project.pbxproj +++ b/misc/dist/ios_xcode/godot_ios.xcodeproj/project.pbxproj @@ -7,18 +7,17 @@ objects = { /* Begin PBXBuildFile section */ - D07CD43F1C5D573600B7FB28 /* Default-568h@2x~iphone.png in Resources */ = {isa = PBXBuildFile; fileRef = D07CD4331C5D573600B7FB28 /* Default-568h@2x~iphone.png */; }; - D07CD4401C5D573600B7FB28 /* Default-667h.png in Resources */ = {isa = PBXBuildFile; fileRef = D07CD4341C5D573600B7FB28 /* Default-667h.png */; }; + 1F1575721F582BE20003B888 /* dylibs in Resources */ = {isa = PBXBuildFile; fileRef = 1F1575711F582BE20003B888 /* dylibs */; }; + 1FF4C1851F584E3F00A41E41 /* GameKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1FF4C1841F584E3F00A41E41 /* GameKit.framework */; }; + 1FF4C1871F584E5600A41E41 /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1FF4C1861F584E5600A41E41 /* StoreKit.framework */; }; + D07CD43F1C5D573600B7FB28 /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D07CD4331C5D573600B7FB28 /* Default-568h@2x.png */; }; D07CD4411C5D573600B7FB28 /* Default-667h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D07CD4351C5D573600B7FB28 /* Default-667h@2x.png */; }; - D07CD4421C5D573600B7FB28 /* Default-736h.png in Resources */ = {isa = PBXBuildFile; fileRef = D07CD4361C5D573600B7FB28 /* Default-736h.png */; }; - D07CD4431C5D573600B7FB28 /* Default-736h@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = D07CD4371C5D573600B7FB28 /* Default-736h@3x.png */; }; - D07CD4441C5D573600B7FB28 /* Default-Landscape-736h.png in Resources */ = {isa = PBXBuildFile; fileRef = D07CD4381C5D573600B7FB28 /* Default-Landscape-736h.png */; }; - D07CD4451C5D573600B7FB28 /* Default-Landscape@2x~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = D07CD4391C5D573600B7FB28 /* Default-Landscape@2x~ipad.png */; }; - D07CD4461C5D573600B7FB28 /* Default-Landscape~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = D07CD43A1C5D573600B7FB28 /* Default-Landscape~ipad.png */; }; - D07CD4471C5D573600B7FB28 /* Default-Portrait@2x~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = D07CD43B1C5D573600B7FB28 /* Default-Portrait@2x~ipad.png */; }; - D07CD4481C5D573600B7FB28 /* Default-Portrait~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = D07CD43C1C5D573600B7FB28 /* Default-Portrait~ipad.png */; }; - D07CD4491C5D573600B7FB28 /* Default@2x~iphone.png in Resources */ = {isa = PBXBuildFile; fileRef = D07CD43D1C5D573600B7FB28 /* Default@2x~iphone.png */; }; - D07CD44A1C5D573600B7FB28 /* Default~iphone.png in Resources */ = {isa = PBXBuildFile; fileRef = D07CD43E1C5D573600B7FB28 /* Default~iphone.png */; }; + D07CD4421C5D573600B7FB28 /* Default-Portrait-736h@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = D07CD4361C5D573600B7FB28 /* Default-Portrait-736h@3x.png */; }; + D07CD4441C5D573600B7FB28 /* Default-Landscape-736h@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = D07CD4381C5D573600B7FB28 /* Default-Landscape-736h@3x.png */; }; + D07CD4451C5D573600B7FB28 /* Default-Landscape@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D07CD4391C5D573600B7FB28 /* Default-Landscape@2x.png */; }; + D07CD4461C5D573600B7FB28 /* Default-Landscape-1366h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D07CD43A1C5D573600B7FB28 /* Default-Landscape-1366h@2x.png */; }; + D07CD4471C5D573600B7FB28 /* Default-Portrait@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D07CD43B1C5D573600B7FB28 /* Default-Portrait@2x.png */; }; + D07CD4481C5D573600B7FB28 /* Default-Portrait-1366h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D07CD43C1C5D573600B7FB28 /* Default-Portrait-1366h@2x.png */; }; D07CD44E1C5D589C00B7FB28 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = D07CD44D1C5D589C00B7FB28 /* Images.xcassets */; }; D0BCFE3818AEBDA2004A7AAE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0BCFE3718AEBDA2004A7AAE /* Foundation.framework */; }; D0BCFE3A18AEBDA2004A7AAE /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0BCFE3918AEBDA2004A7AAE /* CoreGraphics.framework */; }; @@ -26,36 +25,36 @@ 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 */; }; - D0BCFE7818AEBFEB004A7AAE /* data.pck in Resources */ = {isa = PBXBuildFile; fileRef = D0BCFE7718AEBFEB004A7AAE /* data.pck */; }; - D0BCFE7A18AEC06A004A7AAE /* godot_opt.iphone in Resources */ = {isa = PBXBuildFile; fileRef = D0BCFE7918AEC06A004A7AAE /* godot_opt.iphone */; }; + D0BCFE7818AEBFEB004A7AAE /* $binary.pck in Resources */ = {isa = PBXBuildFile; fileRef = D0BCFE7718AEBFEB004A7AAE /* $binary.pck */; }; + D0BCFE7A18AEC06A004A7AAE /* $binary.iphone in Resources */ = {isa = PBXBuildFile; fileRef = D0BCFE7918AEC06A004A7AAE /* $binary.iphone */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ - D07CD4331C5D573600B7FB28 /* Default-568h@2x~iphone.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x~iphone.png"; sourceTree = "<group>"; }; - D07CD4341C5D573600B7FB28 /* Default-667h.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-667h.png"; sourceTree = "<group>"; }; + 1F1575711F582BE20003B888 /* dylibs */ = {isa = PBXFileReference; lastKnownFileType = folder; name = dylibs; path = dylibs; sourceTree = "<group>"; }; + 1FF4C1841F584E3F00A41E41 /* GameKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GameKit.framework; path = System/Library/Frameworks/GameKit.framework; sourceTree = SDKROOT; }; + 1FF4C1861F584E5600A41E41 /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = System/Library/Frameworks/StoreKit.framework; sourceTree = SDKROOT; }; + 1FF4C1881F584E6300A41E41 /* $binary.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = $binary.entitlements; sourceTree = "<group>"; }; + D07CD4331C5D573600B7FB28 /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x.png"; sourceTree = "<group>"; }; D07CD4351C5D573600B7FB28 /* Default-667h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-667h@2x.png"; sourceTree = "<group>"; }; - D07CD4361C5D573600B7FB28 /* Default-736h.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-736h.png"; sourceTree = "<group>"; }; - D07CD4371C5D573600B7FB28 /* Default-736h@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-736h@3x.png"; sourceTree = "<group>"; }; - D07CD4381C5D573600B7FB28 /* Default-Landscape-736h.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-Landscape-736h.png"; sourceTree = "<group>"; }; - D07CD4391C5D573600B7FB28 /* Default-Landscape@2x~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-Landscape@2x~ipad.png"; sourceTree = "<group>"; }; - D07CD43A1C5D573600B7FB28 /* Default-Landscape~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-Landscape~ipad.png"; sourceTree = "<group>"; }; - D07CD43B1C5D573600B7FB28 /* Default-Portrait@2x~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-Portrait@2x~ipad.png"; sourceTree = "<group>"; }; - D07CD43C1C5D573600B7FB28 /* Default-Portrait~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-Portrait~ipad.png"; sourceTree = "<group>"; }; - D07CD43D1C5D573600B7FB28 /* Default@2x~iphone.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default@2x~iphone.png"; sourceTree = "<group>"; }; - D07CD43E1C5D573600B7FB28 /* Default~iphone.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default~iphone.png"; sourceTree = "<group>"; }; + D07CD4361C5D573600B7FB28 /* Default-Portrait-736h@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-Portrait-736h@3x.png"; sourceTree = "<group>"; }; + D07CD4381C5D573600B7FB28 /* Default-Landscape-736h@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-Landscape-736h@3x.png"; sourceTree = "<group>"; }; + D07CD4391C5D573600B7FB28 /* Default-Landscape@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-Landscape@2x.png"; sourceTree = "<group>"; }; + D07CD43A1C5D573600B7FB28 /* Default-Landscape-1366h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-Landscape-1366h@2x.png"; sourceTree = "<group>"; }; + D07CD43B1C5D573600B7FB28 /* Default-Portrait@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-Portrait@2x.png"; sourceTree = "<group>"; }; + D07CD43C1C5D573600B7FB28 /* Default-Portrait-1366h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-Portrait-1366h@2x.png"; sourceTree = "<group>"; }; D07CD44D1C5D589C00B7FB28 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; }; - D0BCFE3418AEBDA2004A7AAE /* godot_ios.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = godot_ios.app; sourceTree = BUILT_PRODUCTS_DIR; }; + D0BCFE3418AEBDA2004A7AAE /* $binary.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = $binary.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>"; }; + D0BCFE4318AEBDA2004A7AAE /* $binary-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "$binary-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>"; }; + D0BCFE4918AEBDA2004A7AAE /* $binary-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "$binary-Prefix.pch"; sourceTree = "<group>"; }; D0BCFE6118AEBDA3004A7AAE /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; - D0BCFE7718AEBFEB004A7AAE /* data.pck */ = {isa = PBXFileReference; lastKnownFileType = text; path = data.pck; sourceTree = "<group>"; }; - D0BCFE7918AEC06A004A7AAE /* godot_opt.iphone */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; path = godot_opt.iphone; sourceTree = "<group>"; }; + D0BCFE7718AEBFEB004A7AAE /* $binary.pck */ = {isa = PBXFileReference; lastKnownFileType = file; path = $binary.pck; sourceTree = "<group>"; }; + D0BCFE7918AEC06A004A7AAE /* $binary.iphone */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; path = $binary.iphone; sourceTree = "<group>"; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -64,8 +63,10 @@ buildActionMask = 2147483647; files = ( D0BCFE4018AEBDA2004A7AAE /* OpenGLES.framework in Frameworks */, + 1FF4C1871F584E5600A41E41 /* StoreKit.framework in Frameworks */, D0BCFE3A18AEBDA2004A7AAE /* CoreGraphics.framework in Frameworks */, D0BCFE3C18AEBDA2004A7AAE /* UIKit.framework in Frameworks */, + 1FF4C1851F584E3F00A41E41 /* GameKit.framework in Frameworks */, D0BCFE3E18AEBDA2004A7AAE /* GLKit.framework in Frameworks */, D0BCFE3818AEBDA2004A7AAE /* Foundation.framework in Frameworks */, ); @@ -77,9 +78,10 @@ D0BCFE2B18AEBDA2004A7AAE = { isa = PBXGroup; children = ( - D0BCFE7918AEC06A004A7AAE /* godot_opt.iphone */, - D0BCFE7718AEBFEB004A7AAE /* data.pck */, - D0BCFE4118AEBDA2004A7AAE /* godot_ios */, + 1F1575711F582BE20003B888 /* dylibs */, + D0BCFE7918AEC06A004A7AAE /* $binary.iphone */, + D0BCFE7718AEBFEB004A7AAE /* $binary.pck */, + D0BCFE4118AEBDA2004A7AAE /* $binary */, D0BCFE3618AEBDA2004A7AAE /* Frameworks */, D0BCFE3518AEBDA2004A7AAE /* Products */, ); @@ -88,7 +90,7 @@ D0BCFE3518AEBDA2004A7AAE /* Products */ = { isa = PBXGroup; children = ( - D0BCFE3418AEBDA2004A7AAE /* godot_ios.app */, + D0BCFE3418AEBDA2004A7AAE /* $binary.app */, ); name = Products; sourceTree = "<group>"; @@ -96,6 +98,8 @@ D0BCFE3618AEBDA2004A7AAE /* Frameworks */ = { isa = PBXGroup; children = ( + 1FF4C1861F584E5600A41E41 /* StoreKit.framework */, + 1FF4C1841F584E3F00A41E41 /* GameKit.framework */, D0BCFE3718AEBDA2004A7AAE /* Foundation.framework */, D0BCFE3918AEBDA2004A7AAE /* CoreGraphics.framework */, D0BCFE3B18AEBDA2004A7AAE /* UIKit.framework */, @@ -106,33 +110,30 @@ name = Frameworks; sourceTree = "<group>"; }; - D0BCFE4118AEBDA2004A7AAE /* godot_ios */ = { + D0BCFE4118AEBDA2004A7AAE /* $binary */ = { isa = PBXGroup; children = ( - D07CD4331C5D573600B7FB28 /* Default-568h@2x~iphone.png */, - D07CD4341C5D573600B7FB28 /* Default-667h.png */, + 1FF4C1881F584E6300A41E41 /* $binary.entitlements */, + D07CD4331C5D573600B7FB28 /* Default-568h@2x.png */, D07CD4351C5D573600B7FB28 /* Default-667h@2x.png */, - D07CD4361C5D573600B7FB28 /* Default-736h.png */, - D07CD4371C5D573600B7FB28 /* Default-736h@3x.png */, - D07CD4381C5D573600B7FB28 /* Default-Landscape-736h.png */, - D07CD4391C5D573600B7FB28 /* Default-Landscape@2x~ipad.png */, - D07CD43A1C5D573600B7FB28 /* Default-Landscape~ipad.png */, - D07CD43B1C5D573600B7FB28 /* Default-Portrait@2x~ipad.png */, - D07CD43C1C5D573600B7FB28 /* Default-Portrait~ipad.png */, - D07CD43D1C5D573600B7FB28 /* Default@2x~iphone.png */, - D07CD43E1C5D573600B7FB28 /* Default~iphone.png */, + D07CD4361C5D573600B7FB28 /* Default-Portrait-736h@3x.png */, + D07CD4381C5D573600B7FB28 /* Default-Landscape-736h@3x.png */, + D07CD4391C5D573600B7FB28 /* Default-Landscape@2x.png */, + D07CD43A1C5D573600B7FB28 /* Default-Landscape-1366h@2x.png */, + D07CD43B1C5D573600B7FB28 /* Default-Portrait@2x.png */, + D07CD43C1C5D573600B7FB28 /* Default-Portrait-1366h@2x.png */, D07CD44D1C5D589C00B7FB28 /* Images.xcassets */, D0BCFE4218AEBDA2004A7AAE /* Supporting Files */, ); - path = godot_ios; + path = $binary; sourceTree = "<group>"; }; D0BCFE4218AEBDA2004A7AAE /* Supporting Files */ = { isa = PBXGroup; children = ( - D0BCFE4318AEBDA2004A7AAE /* godot_ios-Info.plist */, + D0BCFE4318AEBDA2004A7AAE /* $binary-Info.plist */, D0BCFE4418AEBDA2004A7AAE /* InfoPlist.strings */, - D0BCFE4918AEBDA2004A7AAE /* godot_ios-Prefix.pch */, + D0BCFE4918AEBDA2004A7AAE /* $binary-Prefix.pch */, ); name = "Supporting Files"; sourceTree = "<group>"; @@ -140,9 +141,9 @@ /* End PBXGroup section */ /* Begin PBXNativeTarget section */ - D0BCFE3318AEBDA2004A7AAE /* godot_ios */ = { + D0BCFE3318AEBDA2004A7AAE /* $binary */ = { isa = PBXNativeTarget; - buildConfigurationList = D0BCFE7118AEBDA3004A7AAE /* Build configuration list for PBXNativeTarget "godot_ios" */; + buildConfigurationList = D0BCFE7118AEBDA3004A7AAE /* Build configuration list for PBXNativeTarget "$binary" */; buildPhases = ( D0BCFE3018AEBDA2004A7AAE /* Sources */, D0BCFE3118AEBDA2004A7AAE /* Frameworks */, @@ -152,9 +153,9 @@ ); dependencies = ( ); - name = godot_ios; - productName = godot_ios; - productReference = D0BCFE3418AEBDA2004A7AAE /* godot_ios.app */; + name = "$binary"; + productName = "$name"; + productReference = D0BCFE3418AEBDA2004A7AAE /* $binary.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ @@ -165,8 +166,24 @@ attributes = { LastUpgradeCheck = 0500; ORGANIZATIONNAME = GodotEngine; + TargetAttributes = { + D0BCFE3318AEBDA2004A7AAE = { + DevelopmentTeam = $team_id; + SystemCapabilities = { + com.apple.GameCenter = { + enabled = 1; + }; + com.apple.InAppPurchase = { + enabled = 1; + }; + com.apple.Push = { + enabled = 1; + }; + }; + }; + }; }; - buildConfigurationList = D0BCFE2F18AEBDA2004A7AAE /* Build configuration list for PBXProject "godot_ios" */; + buildConfigurationList = D0BCFE2F18AEBDA2004A7AAE /* Build configuration list for PBXProject "$binary" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; @@ -179,7 +196,7 @@ projectDirPath = ""; projectRoot = ""; targets = ( - D0BCFE3318AEBDA2004A7AAE /* godot_ios */, + D0BCFE3318AEBDA2004A7AAE /* $binary */, ); }; /* End PBXProject section */ @@ -189,22 +206,19 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - D07CD4471C5D573600B7FB28 /* Default-Portrait@2x~ipad.png in Resources */, + 1F1575721F582BE20003B888 /* dylibs in Resources */, D07CD44E1C5D589C00B7FB28 /* Images.xcassets in Resources */, - D0BCFE7818AEBFEB004A7AAE /* data.pck in Resources */, - D07CD4461C5D573600B7FB28 /* Default-Landscape~ipad.png in Resources */, + D0BCFE7818AEBFEB004A7AAE /* $binary.pck in Resources */, + D07CD4471C5D573600B7FB28 /* Default-Portrait@2x.png in Resources */, + D07CD4461C5D573600B7FB28 /* Default-Landscape-1366h@2x.png in Resources */, D07CD4411C5D573600B7FB28 /* Default-667h@2x.png in Resources */, - D07CD4401C5D573600B7FB28 /* Default-667h.png in Resources */, - D07CD4431C5D573600B7FB28 /* Default-736h@3x.png in Resources */, - D07CD43F1C5D573600B7FB28 /* Default-568h@2x~iphone.png in Resources */, - D07CD4451C5D573600B7FB28 /* Default-Landscape@2x~ipad.png in Resources */, - D07CD44A1C5D573600B7FB28 /* Default~iphone.png in Resources */, - D07CD4491C5D573600B7FB28 /* Default@2x~iphone.png in Resources */, - D07CD4441C5D573600B7FB28 /* Default-Landscape-736h.png in Resources */, - D07CD4421C5D573600B7FB28 /* Default-736h.png in Resources */, + D07CD43F1C5D573600B7FB28 /* Default-568h@2x.png in Resources */, + D07CD4451C5D573600B7FB28 /* Default-Landscape@2x.png in Resources */, + D07CD4441C5D573600B7FB28 /* Default-Landscape-736h@3x.png in Resources */, + D07CD4421C5D573600B7FB28 /* Default-Portrait-736h@3x.png in Resources */, + D07CD4481C5D573600B7FB28 /* Default-Portrait-1366h@2x.png in Resources */, D0BCFE4618AEBDA2004A7AAE /* InfoPlist.strings in Resources */, - D0BCFE7A18AEC06A004A7AAE /* godot_opt.iphone in Resources */, - D07CD4481C5D573600B7FB28 /* Default-Portrait~ipad.png in Resources */, + D0BCFE7A18AEC06A004A7AAE /* $binary.iphone in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -249,7 +263,7 @@ 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"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "$code_sign_identity_debug"; COPY_PHASE_STRIP = NO; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; @@ -265,7 +279,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; @@ -289,7 +303,8 @@ 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"; + CODE_SIGN_IDENTITY = "$code_sign_identity_release"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "$code_sign_identity_release"; COPY_PHASE_STRIP = YES; ENABLE_NS_ASSERTIONS = NO; GCC_C_LANGUAGE_STANDARD = gnu99; @@ -299,7 +314,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; @@ -311,13 +326,22 @@ buildSettings = { ARCHS = "$(ARCHS_STANDARD)"; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_ENTITLEMENTS = $binary/$binary.entitlements; + CODE_SIGN_IDENTITY = "$code_sign_identity_debug"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "$code_sign_identity_debug"; CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)"; + DEVELOPMENT_TEAM = $team_id; 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 = 6.0; - PRODUCT_BUNDLE_IDENTIFIER = org.godotengine.game.ios; + GCC_PREFIX_HEADER = "$binary/$binary-Prefix.pch"; + INFOPLIST_FILE = "$binary/$binary-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/dylibs", + ); + PRODUCT_BUNDLE_IDENTIFIER = $identifier; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE = "$provisioning_profile_uuid_debug"; TARGETED_DEVICE_FAMILY = "1,2"; VALID_ARCHS = "armv7 armv7s"; WRAPPER_EXTENSION = app; @@ -329,14 +353,22 @@ buildSettings = { ARCHS = "$(ARCHS_STANDARD)"; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Distribution: Ariel Manzur (BYC57PA2Q5)"; + CODE_SIGN_ENTITLEMENTS = $binary/$binary.entitlements; + CODE_SIGN_IDENTITY = "$code_sign_identity_release"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "$code_sign_identity_release"; CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)"; + DEVELOPMENT_TEAM = $team_id; 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 = 6.0; - PRODUCT_BUNDLE_IDENTIFIER = org.godotengine.game.ios; + GCC_PREFIX_HEADER = "$binary/$binary-Prefix.pch"; + INFOPLIST_FILE = "$binary/$binary-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/dylibs", + ); + PRODUCT_BUNDLE_IDENTIFIER = $identifier; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE = "$provisioning_profile_uuid_release"; TARGETED_DEVICE_FAMILY = "1,2"; VALID_ARCHS = "armv7 armv7s"; WRAPPER_EXTENSION = app; @@ -346,7 +378,7 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - D0BCFE2F18AEBDA2004A7AAE /* Build configuration list for PBXProject "godot_ios" */ = { + D0BCFE2F18AEBDA2004A7AAE /* Build configuration list for PBXProject "$binary" */ = { isa = XCConfigurationList; buildConfigurations = ( D0BCFE6F18AEBDA3004A7AAE /* Debug */, @@ -355,7 +387,7 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - D0BCFE7118AEBDA3004A7AAE /* Build configuration list for PBXNativeTarget "godot_ios" */ = { + D0BCFE7118AEBDA3004A7AAE /* Build configuration list for PBXNativeTarget "$binary" */ = { isa = XCConfigurationList; buildConfigurations = ( D0BCFE7218AEBDA3004A7AAE /* Debug */, diff --git a/misc/dist/ios_xcode/godot_ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/misc/dist/ios_xcode/godot_ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata index 3c9ba38bbe..c9c19829f4 100644 --- a/misc/dist/ios_xcode/godot_ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ b/misc/dist/ios_xcode/godot_ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -2,6 +2,6 @@ <Workspace version = "1.0"> <FileRef - location = "self:godot_ios.xcodeproj"> + location = "self:$binary.xcodeproj"> </FileRef> </Workspace> diff --git a/misc/dist/ios_xcode/godot_ios.xcodeproj/xcshareddata/xcschemes/godot_ios.xcscheme b/misc/dist/ios_xcode/godot_ios.xcodeproj/xcshareddata/xcschemes/godot_ios.xcscheme new file mode 100644 index 0000000000..b6beeb012f --- /dev/null +++ b/misc/dist/ios_xcode/godot_ios.xcodeproj/xcshareddata/xcschemes/godot_ios.xcscheme @@ -0,0 +1,93 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Scheme + LastUpgradeVersion = "0710" + version = "1.3"> + <BuildAction + parallelizeBuildables = "YES" + buildImplicitDependencies = "YES"> + <BuildActionEntries> + <BuildActionEntry + buildForTesting = "YES" + buildForRunning = "YES" + buildForProfiling = "YES" + buildForArchiving = "YES" + buildForAnalyzing = "YES"> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "A340BDFEBCA49239A941883D" + BuildableName = "$binary.app" + BlueprintName = "$binary" + ReferencedContainer = "container:$binary.xcodeproj"> + </BuildableReference> + </BuildActionEntry> + </BuildActionEntries> + </BuildAction> + <TestAction + buildConfiguration = "Debug" + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + shouldUseLaunchSchemeArgsEnv = "YES"> + <Testables> + </Testables> + <MacroExpansion> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "A340BDFEBCA49239A941883D" + BuildableName = "$binary.app" + BlueprintName = "$binary" + ReferencedContainer = "container:$binary.xcodeproj"> + </BuildableReference> + </MacroExpansion> + <AdditionalOptions> + </AdditionalOptions> + </TestAction> + <LaunchAction + buildConfiguration = "Debug" + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + launchStyle = "0" + useCustomWorkingDirectory = "NO" + ignoresPersistentStateOnLaunch = "NO" + debugDocumentVersioning = "YES" + debugServiceExtension = "internal" + allowLocationSimulation = "YES"> + <BuildableProductRunnable + runnableDebuggingMode = "0"> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "A340BDFEBCA49239A941883D" + BuildableName = "$binary.app" + BlueprintName = "$binary" + ReferencedContainer = "container:$binary.xcodeproj"> + </BuildableReference> + </BuildableProductRunnable> + <CommandLineArguments> + </CommandLineArguments> + <AdditionalOptions> + </AdditionalOptions> + </LaunchAction> + <ProfileAction + buildConfiguration = "Debug" + shouldUseLaunchSchemeArgsEnv = "YES" + savedToolIdentifier = "" + useCustomWorkingDirectory = "NO" + debugDocumentVersioning = "YES"> + <BuildableProductRunnable + runnableDebuggingMode = "0"> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "A340BDFEBCA49239A941883D" + BuildableName = "$binary.app" + BlueprintName = "$binary" + ReferencedContainer = "container:$binary.xcodeproj"> + </BuildableReference> + </BuildableProductRunnable> + </ProfileAction> + <AnalyzeAction + buildConfiguration = "Debug"> + </AnalyzeAction> + <ArchiveAction + buildConfiguration = "Debug" + revealArchiveInOrganizer = "YES"> + </ArchiveAction> +</Scheme> diff --git a/misc/dist/ios_xcode/godot_ios/Default-568h@2x~iphone.png b/misc/dist/ios_xcode/godot_ios/Default-568h@2x.png Binary files differindex 1d5e472665..1d5e472665 100644 --- a/misc/dist/ios_xcode/godot_ios/Default-568h@2x~iphone.png +++ b/misc/dist/ios_xcode/godot_ios/Default-568h@2x.png diff --git a/misc/dist/ios_xcode/godot_ios/Default-667h.png b/misc/dist/ios_xcode/godot_ios/Default-667h.png Binary files differdeleted file mode 100644 index b13a399c83..0000000000 --- a/misc/dist/ios_xcode/godot_ios/Default-667h.png +++ /dev/null diff --git a/misc/dist/ios_xcode/godot_ios/Default-736h@3x.png b/misc/dist/ios_xcode/godot_ios/Default-736h@3x.png Binary files differdeleted file mode 100644 index 33847ac136..0000000000 --- a/misc/dist/ios_xcode/godot_ios/Default-736h@3x.png +++ /dev/null diff --git a/misc/dist/ios_xcode/godot_ios/Default-Landscape-1366h@2x.png b/misc/dist/ios_xcode/godot_ios/Default-Landscape-1366h@2x.png Binary files differnew file mode 100644 index 0000000000..ec5b4f7888 --- /dev/null +++ b/misc/dist/ios_xcode/godot_ios/Default-Landscape-1366h@2x.png diff --git a/misc/dist/ios_xcode/godot_ios/Default-Landscape-736h.png b/misc/dist/ios_xcode/godot_ios/Default-Landscape-736h@3x.png Binary files differindex 2a025b745b..2a025b745b 100644 --- a/misc/dist/ios_xcode/godot_ios/Default-Landscape-736h.png +++ b/misc/dist/ios_xcode/godot_ios/Default-Landscape-736h@3x.png diff --git a/misc/dist/ios_xcode/godot_ios/Default-Landscape@2x~ipad.png b/misc/dist/ios_xcode/godot_ios/Default-Landscape@2x.png Binary files differindex 7099f3e18d..7099f3e18d 100644 --- a/misc/dist/ios_xcode/godot_ios/Default-Landscape@2x~ipad.png +++ b/misc/dist/ios_xcode/godot_ios/Default-Landscape@2x.png diff --git a/misc/dist/ios_xcode/godot_ios/Default-Landscape~ipad.png b/misc/dist/ios_xcode/godot_ios/Default-Landscape~ipad.png Binary files differdeleted file mode 100644 index 4a761c339a..0000000000 --- a/misc/dist/ios_xcode/godot_ios/Default-Landscape~ipad.png +++ /dev/null diff --git a/misc/dist/ios_xcode/godot_ios/Default-Portrait-1366h@2x.png b/misc/dist/ios_xcode/godot_ios/Default-Portrait-1366h@2x.png Binary files differnew file mode 100644 index 0000000000..a6d054ba2a --- /dev/null +++ b/misc/dist/ios_xcode/godot_ios/Default-Portrait-1366h@2x.png diff --git a/misc/dist/ios_xcode/godot_ios/Default-736h.png b/misc/dist/ios_xcode/godot_ios/Default-Portrait-736h@3x.png Binary files differindex 8c44edbccd..8c44edbccd 100644 --- a/misc/dist/ios_xcode/godot_ios/Default-736h.png +++ b/misc/dist/ios_xcode/godot_ios/Default-Portrait-736h@3x.png diff --git a/misc/dist/ios_xcode/godot_ios/Default-Portrait@2x.png b/misc/dist/ios_xcode/godot_ios/Default-Portrait@2x.png Binary files differnew file mode 100644 index 0000000000..a6d054ba2a --- /dev/null +++ b/misc/dist/ios_xcode/godot_ios/Default-Portrait@2x.png diff --git a/misc/dist/ios_xcode/godot_ios/Default-Portrait@2x~ipad.png b/misc/dist/ios_xcode/godot_ios/Default-Portrait@2x~ipad.png Binary files differdeleted file mode 100644 index b09cf21186..0000000000 --- a/misc/dist/ios_xcode/godot_ios/Default-Portrait@2x~ipad.png +++ /dev/null diff --git a/misc/dist/ios_xcode/godot_ios/Default-Portrait~ipad.png b/misc/dist/ios_xcode/godot_ios/Default-Portrait~ipad.png Binary files differdeleted file mode 100644 index fa698eb70c..0000000000 --- a/misc/dist/ios_xcode/godot_ios/Default-Portrait~ipad.png +++ /dev/null diff --git a/misc/dist/ios_xcode/godot_ios/Default@2x~iphone.png b/misc/dist/ios_xcode/godot_ios/Default@2x~iphone.png Binary files differdeleted file mode 100644 index ddf2861f4d..0000000000 --- a/misc/dist/ios_xcode/godot_ios/Default@2x~iphone.png +++ /dev/null diff --git a/misc/dist/ios_xcode/godot_ios/Default~iphone.png b/misc/dist/ios_xcode/godot_ios/Default~iphone.png Binary files differdeleted file mode 100644 index c485a33b03..0000000000 --- a/misc/dist/ios_xcode/godot_ios/Default~iphone.png +++ /dev/null diff --git a/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Contents.json b/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index a458b67873..0000000000 --- a/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,128 +0,0 @@ -{ - "images" : [ - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "1x", - "filename": "Icon-29.png", - }, - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "2x", - "filename": "Icon-58.png", - }, - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "3x", - "filename": "icon-87.png", - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "2x", - "filename": "Icon-80.png", - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "3x", - "filename": "Icon-120.png", - }, - { - "idiom" : "iphone", - "size" : "57x57", - "scale" : "1x", - "filename": "Icon-57.png", - }, - { - "idiom" : "iphone", - "size" : "57x57", - "scale" : "2x", - "filename": "Icon-114.png", - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "2x", - "filename": "Icon-120.png", - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "3x", - "filename": "Icon-180.png", - }, - { - "idiom" : "ipad", - "size" : "29x29", - "scale" : "1x", - "filename": "Icon-29.png", - }, - { - "idiom" : "ipad", - "size" : "29x29", - "scale" : "2x", - "filename": "Icon-58.png", - }, - { - "idiom" : "ipad", - "size" : "40x40", - "scale" : "1x", - "filename": "Icon-40.png", - }, - { - "idiom" : "ipad", - "size" : "40x40", - "scale" : "2x", - "filename": "Icon-80.png", - }, - { - "idiom" : "ipad", - "size" : "50x50", - "scale" : "1x", - "filename": "Icon-50.png", - }, - { - "idiom" : "ipad", - "size" : "50x50", - "scale" : "2x", - "filename": "Icon-100.png", - }, - { - "idiom" : "ipad", - "size" : "72x72", - "scale" : "1x", - "filename": "Icon-72.png", - }, - { - "idiom" : "ipad", - "size" : "72x72", - "scale" : "2x", - "filename": "Icon-144.png", - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-76.png", - "scale" : "1x", - }, - { - "idiom" : "ipad", - "size" : "76x76", - "scale" : "2x", - "filename": "Icon-152.png", - }, - { - "idiom" : "ipad", - "size" : "83.5x83.5", - "scale" : "2x", - "filename": "icon-167.png", - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} diff --git a/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-100.png b/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-100.png Binary files differdeleted file mode 100644 index 165f4423b3..0000000000 --- a/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-100.png +++ /dev/null diff --git a/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-114.png b/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-114.png Binary files differdeleted file mode 100644 index 2e205e920c..0000000000 --- a/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-114.png +++ /dev/null diff --git a/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-120.png b/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-120.png Binary files differdeleted file mode 100644 index 6245f83f48..0000000000 --- a/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-120.png +++ /dev/null diff --git a/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-144.png b/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-144.png Binary files differdeleted file mode 100644 index 7b24e01bc6..0000000000 --- a/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-144.png +++ /dev/null diff --git a/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-152.png b/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-152.png Binary files differdeleted file mode 100644 index 344b470fa3..0000000000 --- a/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-152.png +++ /dev/null diff --git a/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-180.png b/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-180.png Binary files differdeleted file mode 100644 index 0dcebbc3f2..0000000000 --- a/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-180.png +++ /dev/null diff --git a/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-29.png b/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-29.png Binary files differdeleted file mode 100644 index 9ae94e9aaf..0000000000 --- a/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-29.png +++ /dev/null diff --git a/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-40.png b/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-40.png Binary files differdeleted file mode 100644 index 569f24df91..0000000000 --- a/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-40.png +++ /dev/null diff --git a/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-50.png b/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-50.png Binary files differdeleted file mode 100644 index 9e69ed3121..0000000000 --- a/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-50.png +++ /dev/null diff --git a/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-57.png b/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-57.png Binary files differdeleted file mode 100644 index b970fa3067..0000000000 --- a/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-57.png +++ /dev/null diff --git a/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-58.png b/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-58.png Binary files differdeleted file mode 100644 index 6097a6c73b..0000000000 --- a/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-58.png +++ /dev/null diff --git a/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-60.png b/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-60.png Binary files differdeleted file mode 100644 index 21b9622eb6..0000000000 --- a/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-60.png +++ /dev/null diff --git a/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-72.png b/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-72.png Binary files differdeleted file mode 100644 index 34dea8e6ad..0000000000 --- a/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-72.png +++ /dev/null diff --git a/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-76.png b/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-76.png Binary files differdeleted file mode 100644 index f72eb0b345..0000000000 --- a/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-76.png +++ /dev/null diff --git a/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-80.png b/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-80.png Binary files differdeleted file mode 100644 index 793c9b1f5f..0000000000 --- a/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-80.png +++ /dev/null diff --git a/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/icon-167.png b/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/icon-167.png Binary files differdeleted file mode 100644 index 7cd0e054ab..0000000000 --- a/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/icon-167.png +++ /dev/null diff --git a/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/icon-87.png b/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/icon-87.png Binary files differdeleted file mode 100644 index e9b2429754..0000000000 --- a/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/icon-87.png +++ /dev/null diff --git a/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/sizes b/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/sizes deleted file mode 100644 index e328a62cb6..0000000000 --- a/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/sizes +++ /dev/null @@ -1,17 +0,0 @@ -100 -114 -120 -144 -152 -167 -180 -29 -40 -50 -57 -58 -60 -72 -76 -80 -87 diff --git a/misc/dist/ios_xcode/godot_ios/godot_ios-Info.plist b/misc/dist/ios_xcode/godot_ios/godot_ios-Info.plist index f97b0fca36..1531a41bd0 100644 --- a/misc/dist/ios_xcode/godot_ios/godot_ios-Info.plist +++ b/misc/dist/ios_xcode/godot_ios/godot_ios-Info.plist @@ -5,32 +5,33 @@ <key>CFBundleDevelopmentRegion</key> <string>en</string> <key>CFBundleDisplayName</key> - <string>Insert Name Here</string> + <string>$name</string> <key>CFBundleExecutable</key> - <string>godot_opt.iphone</string> + <string>$binary.iphone</string> <key>CFBundleIcons</key> <dict/> <key>CFBundleIcons~ipad</key> <dict/> <key>CFBundleIdentifier</key> - <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> + <string>$identifier</string> <key>CFBundleInfoDictionaryVersion</key> <string>6.0</string> <key>CFBundleName</key> - <string>${PRODUCT_NAME}</string> + <string>$name</string> <key>CFBundlePackageType</key> <string>APPL</string> <key>CFBundleShortVersionString</key> - <string>1.0</string> + <string>$short_version</string> <key>CFBundleSignature</key> - <string>????</string> + <string>$signature</string> <key>CFBundleVersion</key> - <string>1.0</string> + <string>$version</string> <key>LSRequiresIPhoneOS</key> <true/> <key>UIRequiredDeviceCapabilities</key> <array> <string>armv7</string> + <string>gamekit</string> </array> <key>UIRequiresFullScreen</key> <true/> diff --git a/misc/dist/ios_xcode/godot_ios/godot_ios.entitlements b/misc/dist/ios_xcode/godot_ios/godot_ios.entitlements new file mode 100644 index 0000000000..903def2af5 --- /dev/null +++ b/misc/dist/ios_xcode/godot_ios/godot_ios.entitlements @@ -0,0 +1,8 @@ +<?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>aps-environment</key> + <string>development</string> +</dict> +</plist> diff --git a/misc/dist/linux/godot.6 b/misc/dist/linux/godot.6 new file mode 100644 index 0000000000..946fa6c913 --- /dev/null +++ b/misc/dist/linux/godot.6 @@ -0,0 +1,165 @@ +.TH GODOT "6" "September 2017" "godot 3.0-alpha" "Games" +.SH NAME +godot \- multi\-platform 2D and 3D game engine with a feature\-rich editor +.SH SYNOPSIS +.B godot +[\fI\,options\/\fR] [path to scene or 'project.godot' file] +.SH DESCRIPTION +Godot Engine is an advanced, feature\-packed, multi\-platform 2D and 3D game +engine. +.br +It provides a huge set of common tools, so you can just focus on making +your game without reinventing the wheel. +.SS "General options:" +.TP +\fB\-h\fR, \fB\-\-help\fR +Display this help message. +.TP +\fB\-\-version\fR +Display the version string. +.TP +\fB\-v\fR, \fB\-\-verbose\fR +Use verbose stdout mode. +.TP +\fB\-\-quiet\fR +Quiet mode, silences stdout messages. Errors are still displayed. +.SS "Run options:" +.TP +\fB\-e\fR, \fB\-\-editor\fR +Start the editor instead of running the scene. +.TP +\fB\-p\fR, \fB\-\-project\-manager\fR +Start the project manager, even if a project is auto\-detected. +.TP +\fB\-l\fR, \fB\-\-language\fR <locale> +Use a specific locale (<locale> being a two\-letter code). +.TP +\fB\-\-path\fR <directory> +Path to a project (<directory> must contain a 'project.godot' file). +.TP +\fB\-\-main\-pack\fR <file> +Path to a pack (.pck) file to load. +.TP +\fB\-\-render\-thread\fR <mode> +Render thread mode ('unsafe', 'safe', 'separate'). +.TP +\fB\-\-remote\-fs\fR <address> +Remote filesystem (<host/IP>[:<port>] address). +.TP +\fB\-\-remote\-fs\-password\fR <password> +Password for remote filesystem. +.TP +\fB\-\-audio\-driver\fR <driver> +Audio driver ('PulseAudio', 'ALSA'). +.TP +\fB\-\-video\-driver\fR <driver> +Video driver ('GLES3'). +.SS "Display options:" +.TP +\fB\-f\fR, \fB\-\-fullscreen\fR +Request fullscreen mode. +.TP +\fB\-m\fR, \fB\-\-maximized\fR +Request a maximized window. +.TP +\fB\-w\fR, \fB\-\-windowed\fR +Request windowed mode. +.TP +\fB\-\-resolution\fR <W>x<H> +Request window resolution. +.TP +\fB\-\-position\fR <X>,<Y> +Request window position. +.TP +\fB\-\-low\-dpi\fR +Force low\-DPI mode (macOS and Windows only). +.TP +\fB\-\-no\-window\fR +Disable window creation (Windows only). Useful together with \fB\-\-script\fR. +.SS "Debug options:" +.TP +\fB\-d\fR, \fB\-\-debug\fR +Debug (local stdout debugger). +.TP +\fB\-b\fR, \fB\-\-breakpoints\fR +Breakpoint list as source::line comma\-separated pairs, no spaces (use %20 instead). +.TP +\fB\-\-profiling\fR +Enable profiling in the script debugger. +.TP +\fB\-\-remote\-debug\fR <address> +Remote debug (<host/IP>:<port> address). +.TP +\fB\-\-debug\-collisions\fR +Show collisions shapes when running the scene. +.TP +\fB\-\-debug\-navigation\fR +Show navigation polygons when running the scene. +.TP +\fB\-\-frame\-delay\fR <ms> +Simulate high CPU load (delay each frame by <ms> milliseconds). +.TP +\fB\-\-time\-scale\fR <scale> +Force time scale (higher values are faster, 1.0 is normal speed). +.TP +\fB\-\-disable\-render\-loop\fR +Disable render loop so rendering only occurs when called explicitly from script. +.TP +\fB\-\-disable\-crash\-handler\fR +Disable crash handler when supported by the platform code. +.TP +\fB\-\-fixed\-fps\fR <fps> +Force a fixed number of frames per second. This setting disables real\-time synchronization. +.SS "Standalone tools:" +.TP +\fB\-s\fR, \fB\-\-script\fR <script> +Run a script. +.TP +\fB\-\-export\fR <target> +Export the project using the given export target. +.TP +\fB\-\-export\-debug\fR +Use together with \fB\-\-export\fR, enables debug mode for the template. +.TP +\fB\-\-doctool\fR <path> +Dump the engine API reference to the given <path> in XML format, merging if existing files are found. +.TP +\fB\-\-no\-docbase\fR +Disallow dumping the base types (used with \fB\-\-doctool\fR). +.TP +\fB\-\-gdnative\-generate\-json\-api\fR +Generate JSON dump of the Godot API for GDNative bindings. +.TP +\fB\-\-test\fR <test> +Run a unit test ('string', 'containers', 'math', 'render', 'multimesh', 'gui', 'io', 'shaderlang', 'physics', 'oa_hash_map'). +.SH FILES +~/.godot/ +.RS +User\-specific configuration and cache folder, contains persistent editor and game configuration and saved files, temporary metadata, etc. +.RE +~/.godot/app_userdata/ +.RS +Contains the default configuration and user data folders for Godot\-made games (\fIuser://\fR path). +.RE +~/.godot/templates/ +.RS +Installation folder for "export templates", compiled binaries of the engine to deploy on the many supported platforms. +.RE +/usr/share/doc/godot/ +.RS +Additional documentation files. +.RE +/usr/share/licenses/godot/ +.RS +Detailed licensing information. +.RE +.SH "SEE ALSO" +See the project website at \fIhttps://godotengine.org\fR and the source +code repository at \fIhttps://github.com/godotengine/godot\fR for more details. +.SH BUGS +Godot Engine is a free and open source project and welcomes any kind of +contributions. In particular, you can report issues or make suggestions on +Godot's issue tracker at \fIhttps://github.com/godotengine/godot/issues\fR. +.SH AUTHOR +Man page written by Rémi Verschelde <akien@godotengine.org> on behalf of the +Godot Engine development team. diff --git a/misc/dist/linux/godot.appdata.xml b/misc/dist/linux/godot.appdata.xml new file mode 100644 index 0000000000..907fe1f3be --- /dev/null +++ b/misc/dist/linux/godot.appdata.xml @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Copyright 2017 Rémi Verschelde <akien@godotengine.org> --> +<component type="desktop"> + <id>godot.desktop</id> + <metadata_license>CC0-1.0</metadata_license> + <project_license>MIT</project_license> + <name>Godot Engine</name> + <summary>Multi-platform 2D and 3D game engine with a feature-rich editor</summary> + <description> + <p> + Godot is an advanced, feature-packed, multi-platform 2D and 3D game + engine. It provides a huge set of common tools, so you can just focus on + making your game without reinventing the wheel. + </p> + <p> + Godot is completely free and open source under the very permissive MIT + license. No strings attached, no royalties, nothing. Your game is yours, + down to the last line of engine code. + </p> + </description> + <screenshots> + <screenshot type="default" width="1330" height="720"> + <caption>3D project loaded in the Godot Engine editor</caption> + <image>https://download.tuxfamily.org/godotengine/media/screenshots/editor_3d_fracteed-720p.jpg</image> + </screenshot> + </screenshots> + <url type="homepage">https://godotengine.org</url> + <url type="bugtracker">https://github.com/godotengine/godot/issues</url> + <url type="help">http://docs.godotengine.org</url> + <url type="donation">https://godotengine.org/donate</url> + <url type="translate">https://hosted.weblate.org/projects/godot-engine/godot</url> + <developer_name>The Godot Engine Community</developer_name> + <update_contact>akien_at_godotengine_dot_org</update_contact> +</component> diff --git a/misc/dist/linux/godot.desktop b/misc/dist/linux/godot.desktop new file mode 100644 index 0000000000..545c491256 --- /dev/null +++ b/misc/dist/linux/godot.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Name=Godot Engine +GenericName=Libre game engine +Comment=Multi-platform 2D and 3D game engine with a feature rich editor +Exec=godot -pm +Icon=godot +Terminal=false +Type=Application +Categories=Development;IDE; diff --git a/misc/dist/osx_tools.app/Contents/Info.plist b/misc/dist/osx_tools.app/Contents/Info.plist index 4d88e97503..5012d17c37 100755 --- a/misc/dist/osx_tools.app/Contents/Info.plist +++ b/misc/dist/osx_tools.app/Contents/Info.plist @@ -19,11 +19,11 @@ <key>CFBundlePackageType</key> <string>APPL</string> <key>CFBundleShortVersionString</key> - <string>2.2-dev</string> + <string>3.0-dev</string> <key>CFBundleSignature</key> <string>godot</string> <key>CFBundleVersion</key> - <string>2.2-dev</string> + <string>3.0-dev</string> <key>NSHumanReadableCopyright</key> <string>© 2007-2017 Juan Linietsky, Ariel Manzur</string> <key>LSMinimumSystemVersion</key> diff --git a/modules/dds/texture_loader_dds.cpp b/modules/dds/texture_loader_dds.cpp index 95d93e6af6..ae9daa802f 100644 --- a/modules/dds/texture_loader_dds.cpp +++ b/modules/dds/texture_loader_dds.cpp @@ -152,7 +152,7 @@ RES ResourceFormatDDS::load(const String &p_path, const String &p_original_path, */ //must avoid this later - while (f->get_pos() < 128) + while (f->get_position() < 128) f->get_8(); DDSFormat dds_format; diff --git a/modules/enet/SCsub b/modules/enet/SCsub index 42a933a66d..4790c5099f 100644 --- a/modules/enet/SCsub +++ b/modules/enet/SCsub @@ -7,7 +7,7 @@ Import('env_modules') env_enet = env_modules.Clone() -if (env['builtin_enet'] != 'no'): +if env['builtin_enet']: thirdparty_dir = "#thirdparty/enet/" thirdparty_sources = [ "godot.cpp", diff --git a/modules/etc/config.py b/modules/etc/config.py index 4b0b01b78e..7dc2cb59c1 100644 --- a/modules/etc/config.py +++ b/modules/etc/config.py @@ -6,6 +6,6 @@ def can_build(platform): def configure(env): # Tools only, disabled for non-tools # TODO: Find a cleaner way to achieve that - if (env["tools"] == "no"): - env["module_etc_enabled"] = "no" + if not env['tools']: + env['module_etc_enabled'] = False env.disabled_modules.append("etc") diff --git a/modules/freetype/SCsub b/modules/freetype/SCsub index f22df4407c..19e384af73 100644 --- a/modules/freetype/SCsub +++ b/modules/freetype/SCsub @@ -6,7 +6,7 @@ from compat import isbasestring # Not building in a separate env as scene needs it # Thirdparty source files -if (env['builtin_freetype'] != 'no'): +if env['builtin_freetype']: thirdparty_dir = "#thirdparty/freetype/" thirdparty_sources = [ "src/autofit/autofit.c", @@ -65,7 +65,7 @@ if (env['builtin_freetype'] != 'no'): env.Append(CPPPATH=[thirdparty_dir, thirdparty_dir + "/include"]) # also requires libpng headers - if (env['builtin_libpng'] != 'no'): + if env['builtin_libpng']: env.Append(CPPPATH=["#thirdparty/libpng"]) lib = env.Library("freetype_builtin", thirdparty_sources) diff --git a/modules/gdnative/SCsub b/modules/gdnative/SCsub index f386f2b542..a6ae143947 100644 --- a/modules/gdnative/SCsub +++ b/modules/gdnative/SCsub @@ -4,14 +4,155 @@ Import('env') gdn_env = env.Clone() -gdn_env.add_source_files(env.modules_sources, "*.cpp") +gdn_env.add_source_files(env.modules_sources, "gd_native_library_editor.cpp") +gdn_env.add_source_files(env.modules_sources, "gdnative.cpp") +gdn_env.add_source_files(env.modules_sources, "register_types.cpp") gdn_env.add_source_files(env.modules_sources, "gdnative/*.cpp") gdn_env.add_source_files(env.modules_sources, "nativescript/*.cpp") -gdn_env.Append(CPPFLAGS=['-DGDAPI_BUILT_IN']) gdn_env.Append(CPPPATH=['#modules/gdnative/include/']) -if "platform" in env and env["platform"] == "x11": # there has to be a better solution? - env.Append(LINKFLAGS=["-rdynamic"]) +SConscript("nativearvr/SCsub") +SConscript("pluginscript/SCsub") + +def _spaced(e): + return e if e[-1] == '*' else e + ' ' + +def _build_gdnative_api_struct_header(api): + out = [ + '/* THIS FILE IS GENERATED DO NOT EDIT */', + '#ifndef GODOT_GDNATIVE_API_STRUCT_H', + '#define GODOT_GDNATIVE_API_STRUCT_H', + '', + '#include <gdnative/gdnative.h>', + '#include <nativearvr/godot_nativearvr.h>', + '#include <nativescript/godot_nativescript.h>', + '#include <pluginscript/godot_pluginscript.h>', + '', + '#define GDNATIVE_API_INIT(options) do { extern const godot_gdnative_api_struct *_gdnative_wrapper_api_struct; _gdnative_wrapper_api_struct = options->api_struct; } while (0)', + '', + '#ifdef __cplusplus', + 'extern "C" {', + '#endif', + '', + 'typedef struct godot_gdnative_api_struct {', + '\tvoid *next;', + '\tconst char *version;', + ] + + for funcdef in api['api']: + args = ', '.join(['%s%s' % (_spaced(t), n) for t, n in funcdef['arguments']]) + out.append('\t%s(*%s)(%s);' % (_spaced(funcdef['return_type']), funcdef['name'], args)) + + out += [ + '} godot_gdnative_api_struct;', + '', + '#ifdef __cplusplus', + '}', + '#endif', + '', + '#endif // GODOT_GDNATIVE_API_STRUCT_H', + '' + ] + return '\n'.join(out) + +def _build_gdnative_api_struct_source(api): + out = [ + '/* THIS FILE IS GENERATED DO NOT EDIT */', + '', + '#include <gdnative_api_struct.gen.h>', + '', + 'const char *_gdnative_api_version = "%s";' % api['version'], + 'extern const godot_gdnative_api_struct api_struct = {', + '\tNULL,', + '\t_gdnative_api_version,', + ] + + for funcdef in api['api']: + out.append('\t%s,' % funcdef['name']) + out.append('};\n') + + return '\n'.join(out) + +def build_gdnative_api_struct(target, source, env): + import json + from collections import OrderedDict + + with open(source[0].path, 'r') as fd: + api = json.load(fd) + + header, source = target + with open(header.path, 'w') as fd: + fd.write(_build_gdnative_api_struct_header(api)) + with open(source.path, 'w') as fd: + fd.write(_build_gdnative_api_struct_source(api)) + +_, gensource = gdn_env.Command(['include/gdnative_api_struct.gen.h', 'gdnative_api_struct.gen.cpp'], + 'gdnative_api.json', build_gdnative_api_struct) +gdn_env.add_source_files(env.modules_sources, [gensource]) env.use_ptrcall = True + + +def _build_gdnative_wrapper_code(api): + out = [ + '/* THIS FILE IS GENERATED DO NOT EDIT */', + '', + '#include <gdnative/gdnative.h>', + '#include <nativescript/godot_nativescript.h>', + '#include <pluginscript/godot_pluginscript.h>', + '', + '#include <gdnative_api_struct.gen.h>', + '', + 'godot_gdnative_api_struct *_gdnative_wrapper_api_struct = 0;', + '', + '#ifdef __cplusplus', + 'extern "C" {', + '#endif', + '' + ] + + for funcdef in api['api']: + args = ', '.join(['%s%s' % (_spaced(t), n) for t, n in funcdef['arguments']]) + out.append('%s%s(%s) {' % (_spaced(funcdef['return_type']), funcdef['name'], args)) + + args = ', '.join(['%s' % n for t, n in funcdef['arguments']]) + + return_line = '\treturn ' if funcdef['return_type'] != 'void' else '\t' + return_line += '_gdnative_wrapper_api_struct->' + funcdef['name'] + '(' + args + ');' + + out.append(return_line) + out.append('}') + out.append('') + + out += [ + '#ifdef __cplusplus', + '}', + '#endif' + ] + + return '\n'.join(out) + + +def build_gdnative_wrapper_code(target, source, env): + import json + with open(source[0].path, 'r') as fd: + api = json.load(fd) + + wrapper_file = target[0] + with open(wrapper_file.path, 'w') as fd: + fd.write(_build_gdnative_wrapper_code(api)) + + + +if ARGUMENTS.get('gdnative_wrapper', False): + #build wrapper code + gensource, = gdn_env.Command('gdnative_wrapper_code.gen.cpp', 'gdnative_api.json', build_gdnative_wrapper_code) + + gd_wrapper_env = env.Clone() + gd_wrapper_env.Append(CPPPATH=['#modules/gdnative/include/']) + + # I think this doesn't work on MSVC yet... + gd_wrapper_env.Append(CCFLAGS=['-fPIC']) + + gd_wrapper_env.Library("#bin/gdnative_wrapper_code", [gensource]) diff --git a/modules/gdnative/config.py b/modules/gdnative/config.py index 9f57b9bb74..df3556249d 100644 --- a/modules/gdnative/config.py +++ b/modules/gdnative/config.py @@ -1,8 +1,12 @@ - def can_build(platform): return True - def configure(env): env.use_ptrcall = True + +def get_doc_classes(): + return ["GDNative", "GDNativeLibrary", "NativeScript", "ARVRInterfaceGDNative"] + +def get_doc_path(): + return "doc_classes" diff --git a/modules/gdnative/doc_classes/ARVRInterfaceGDNative.xml b/modules/gdnative/doc_classes/ARVRInterfaceGDNative.xml new file mode 100644 index 0000000000..308a7d5946 --- /dev/null +++ b/modules/gdnative/doc_classes/ARVRInterfaceGDNative.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<class name="ARVRInterfaceGDNative" inherits="ARVRInterface" category="Core" version="3.0.alpha.custom_build"> + <brief_description> + GDNative wrapper for an ARVR interface + </brief_description> + <description> + This is a wrapper class for GDNative implementations of the ARVR interface. To use a GDNative ARVR interface simply instantiate this object and set your GDNative library containing the ARVR interface implementation. + </description> + <tutorials> + </tutorials> + <demos> + </demos> + <methods> + </methods> + <constants> + </constants> +</class> diff --git a/doc/classes/GDNative.xml b/modules/gdnative/doc_classes/GDNative.xml index ba813c4564..83a1cf06f0 100644 --- a/doc/classes/GDNative.xml +++ b/modules/gdnative/doc_classes/GDNative.xml @@ -12,11 +12,11 @@ <method name="call_native"> <return type="Variant"> </return> - <argument index="0" name="procedure_name" type="String"> + <argument index="0" name="calling_type" type="String"> </argument> - <argument index="1" name="arguments" type="String"> + <argument index="1" name="procedure_name" type="String"> </argument> - <argument index="2" name="arg2" type="Array"> + <argument index="2" name="arguments" type="Array"> </argument> <description> </description> diff --git a/doc/classes/GDNativeLibrary.xml b/modules/gdnative/doc_classes/GDNativeLibrary.xml index c3561856cc..361c89e6b3 100644 --- a/doc/classes/GDNativeLibrary.xml +++ b/modules/gdnative/doc_classes/GDNativeLibrary.xml @@ -9,6 +9,12 @@ <demos> </demos> <methods> + <method name="get_active_library_path" qualifiers="const"> + <return type="String"> + </return> + <description> + </description> + </method> <method name="get_library_path" qualifiers="const"> <return type="String"> </return> diff --git a/doc/classes/NativeScript.xml b/modules/gdnative/doc_classes/NativeScript.xml index b040cfd966..b040cfd966 100644 --- a/doc/classes/NativeScript.xml +++ b/modules/gdnative/doc_classes/NativeScript.xml diff --git a/modules/gdnative/gd_native_library_editor.cpp b/modules/gdnative/gd_native_library_editor.cpp index cc2c2b69a6..c37b7f473d 100644 --- a/modules/gdnative/gd_native_library_editor.cpp +++ b/modules/gdnative/gd_native_library_editor.cpp @@ -72,7 +72,7 @@ void GDNativeLibraryEditor::_update_libraries() { libraries->create_item(); //rppt Vector<String> enabled_paths; - if (ProjectSettings::get_singleton()->has("gdnative/singletons")) { + if (ProjectSettings::get_singleton()->has_setting("gdnative/singletons")) { enabled_paths = ProjectSettings::get_singleton()->get("gdnative/singletons"); } Set<String> enabled_list; @@ -100,7 +100,7 @@ void GDNativeLibraryEditor::_item_edited() { String path = item->get_metadata(0); Vector<String> enabled_paths; - if (ProjectSettings::get_singleton()->has("gdnative/singletons")) { + if (ProjectSettings::get_singleton()->has_setting("gdnative/singletons")) { enabled_paths = ProjectSettings::get_singleton()->get("gdnative/singletons"); } diff --git a/modules/gdnative/gdnative.cpp b/modules/gdnative/gdnative.cpp index 93a9bac11c..3fc04a5498 100644 --- a/modules/gdnative/gdnative.cpp +++ b/modules/gdnative/gdnative.cpp @@ -40,15 +40,8 @@ const String init_symbol = "godot_gdnative_init"; const String terminate_symbol = "godot_gdnative_terminate"; -#define GDAPI_FUNC(name, ret_type, ...) name, -#define GDAPI_FUNC_VOID(name, ...) name, - -const godot_gdnative_api_struct api_struct = { - GODOT_GDNATIVE_API_FUNCTIONS -}; - -#undef GDAPI_FUNC -#undef GDAPI_FUNC_VOID +// Defined in gdnative_api_struct.gen.cpp +extern const godot_gdnative_api_struct api_struct; String GDNativeLibrary::platform_names[NUM_PLATFORMS + 1] = { "X11_32bit", @@ -110,6 +103,7 @@ GDNativeLibrary::~GDNativeLibrary() { void GDNativeLibrary::_bind_methods() { ClassDB::bind_method(D_METHOD("set_library_path", "platform", "path"), &GDNativeLibrary::set_library_path); ClassDB::bind_method(D_METHOD("get_library_path", "platform"), &GDNativeLibrary::get_library_path); + ClassDB::bind_method(D_METHOD("get_active_library_path"), &GDNativeLibrary::get_active_library_path); ClassDB::bind_method(D_METHOD("is_singleton_gdnative"), &GDNativeLibrary::is_singleton_gdnative); ClassDB::bind_method(D_METHOD("set_singleton_gdnative", "singleton"), &GDNativeLibrary::set_singleton_gdnative); @@ -205,10 +199,7 @@ void GDNative::_bind_methods() { ClassDB::bind_method(D_METHOD("initialize"), &GDNative::initialize); ClassDB::bind_method(D_METHOD("terminate"), &GDNative::terminate); - // TODO(karroffel): get_native_(raw_)call_types binding? - - // TODO(karroffel): make this a varargs function? - ClassDB::bind_method(D_METHOD("call_native", "procedure_name", "arguments"), &GDNative::call_native); + ClassDB::bind_method(D_METHOD("call_native", "calling_type", "procedure_name", "arguments"), &GDNative::call_native); ADD_PROPERTYNZ(PropertyInfo(Variant::OBJECT, "library", PROPERTY_HINT_RESOURCE_TYPE, "GDNativeLibrary"), "set_library", "get_library"); } @@ -234,18 +225,18 @@ bool GDNative::initialize() { ERR_PRINT("No library set for this platform"); return false; } - +#ifdef IPHONE_ENABLED + String path = lib_path.replace("res://", "dylibs/"); +#else String path = ProjectSettings::get_singleton()->globalize_path(lib_path); +#endif Error err = OS::get_singleton()->open_dynamic_library(path, native_handle); if (err != OK) { return false; } void *library_init; - err = OS::get_singleton()->get_dynamic_library_symbol_handle( - native_handle, - init_symbol, - library_init); + err = get_symbol(init_symbol, library_init); if (err || !library_init) { OS::get_singleton()->close_dynamic_library(native_handle); @@ -265,6 +256,7 @@ bool GDNative::initialize() { options.editor_api_hash = ClassDB::get_api_hash(ClassDB::API_EDITOR); options.no_api_hash = ClassDB::get_api_hash(ClassDB::API_NONE); options.gd_native_library = (godot_object *)(get_library().ptr()); + options.active_library_path = (godot_string *)&path; library_init_fpointer(&options); @@ -279,11 +271,8 @@ bool GDNative::terminate() { } void *library_terminate; - Error error = OS::get_singleton()->get_dynamic_library_symbol_handle( - native_handle, - terminate_symbol, - library_terminate); - if (error) { + Error error = get_symbol(terminate_symbol, library_terminate); + if (error || !library_terminate) { OS::get_singleton()->close_dynamic_library(native_handle); native_handle = NULL; return true; @@ -315,10 +304,6 @@ void GDNativeCallRegistry::register_native_call_type(StringName p_call_type, nat native_calls.insert(p_call_type, p_callback); } -void GDNativeCallRegistry::register_native_raw_call_type(StringName p_raw_call_type, native_raw_call_cb p_callback) { - native_raw_calls.insert(p_raw_call_type, p_callback); -} - Vector<StringName> GDNativeCallRegistry::get_native_call_types() { Vector<StringName> call_types; call_types.resize(native_calls.size()); @@ -331,18 +316,6 @@ Vector<StringName> GDNativeCallRegistry::get_native_call_types() { return call_types; } -Vector<StringName> GDNativeCallRegistry::get_native_raw_call_types() { - Vector<StringName> call_types; - call_types.resize(native_raw_calls.size()); - - size_t idx = 0; - for (Map<StringName, native_raw_call_cb>::Element *E = native_raw_calls.front(); E; E = E->next(), idx++) { - call_types[idx] = E->key(); - } - - return call_types; -} - Variant GDNative::call_native(StringName p_native_call_type, StringName p_procedure_name, Array p_arguments) { Map<StringName, native_call_cb>::Element *E = GDNativeCallRegistry::singleton->native_calls.find(p_native_call_type); @@ -351,20 +324,34 @@ Variant GDNative::call_native(StringName p_native_call_type, StringName p_proced return Variant(); } - String procedure_name = p_procedure_name; - godot_variant result = E->get()(native_handle, (godot_string *)&procedure_name, (godot_array *)&p_arguments); + void *procedure_handle; + + Error err = OS::get_singleton()->get_dynamic_library_symbol_handle( + native_handle, + p_procedure_name, + procedure_handle); + + if (err != OK || procedure_handle == NULL) { + return Variant(); + } + + godot_variant result = E->get()(procedure_handle, (godot_array *)&p_arguments); return *(Variant *)&result; } -void GDNative::call_native_raw(StringName p_raw_call_type, StringName p_procedure_name, void *data, int num_args, void **args, void *r_return) { +Error GDNative::get_symbol(StringName p_procedure_name, void *&r_handle) { - Map<StringName, native_raw_call_cb>::Element *E = GDNativeCallRegistry::singleton->native_raw_calls.find(p_raw_call_type); - if (!E) { - ERR_PRINT((String("No handler for native raw call type \"" + p_raw_call_type) + "\" found").utf8().get_data()); - return; + if (native_handle == NULL) { + ERR_PRINT("No valid library handle, can't get symbol from GDNative object"); + return ERR_CANT_OPEN; } - String procedure_name = p_procedure_name; - E->get()(native_handle, (godot_string *)&procedure_name, data, num_args, args, r_return); + Error result = OS::get_singleton()->get_dynamic_library_symbol_handle( + native_handle, + p_procedure_name, + r_handle, + true); + + return result; } diff --git a/modules/gdnative/gdnative.h b/modules/gdnative/gdnative.h index 29c6201641..e44cc55a79 100644 --- a/modules/gdnative/gdnative.h +++ b/modules/gdnative/gdnative.h @@ -36,7 +36,7 @@ #include "resource.h" #include "gdnative/gdnative.h" -#include "gdnative_api_struct.h" +#include "gdnative_api_struct.gen.h" class GDNativeLibrary : public Resource { GDCLASS(GDNativeLibrary, Resource) @@ -100,8 +100,7 @@ public: _FORCE_INLINE_ void set_singleton_gdnative(bool p_singleton) { singleton_gdnative = p_singleton; } }; -typedef godot_variant (*native_call_cb)(void *, godot_string *, godot_array *); -typedef void (*native_raw_call_cb)(void *, godot_string *, void *, int, void **, void *); +typedef godot_variant (*native_call_cb)(void *, godot_array *); struct GDNativeCallRegistry { static GDNativeCallRegistry *singleton; @@ -111,17 +110,13 @@ struct GDNativeCallRegistry { } inline GDNativeCallRegistry() - : native_calls(), - native_raw_calls() {} + : native_calls() {} Map<StringName, native_call_cb> native_calls; - Map<StringName, native_raw_call_cb> native_raw_calls; void register_native_call_type(StringName p_call_type, native_call_cb p_callback); - void register_native_raw_call_type(StringName p_raw_call_type, native_raw_call_cb p_callback); Vector<StringName> get_native_call_types(); - Vector<StringName> get_native_raw_call_types(); }; class GDNative : public Reference { @@ -149,7 +144,8 @@ public: bool terminate(); Variant call_native(StringName p_native_call_type, StringName p_procedure_name, Array p_arguments = Array()); - void call_native_raw(StringName p_raw_call_type, StringName p_procedure_name, void *data, int num_args, void **args, void *r_return); + + Error get_symbol(StringName p_procedure_name, void *&r_handle); }; #endif // GDNATIVE_H diff --git a/modules/gdnative/gdnative/gdnative.cpp b/modules/gdnative/gdnative/gdnative.cpp index cf1f6a4f16..64a7c33cf8 100644 --- a/modules/gdnative/gdnative/gdnative.cpp +++ b/modules/gdnative/gdnative/gdnative.cpp @@ -41,6 +41,7 @@ extern "C" { #endif extern "C" void _string_api_anchor(); +extern "C" void _string_name_api_anchor(); extern "C" void _vector2_api_anchor(); extern "C" void _rect2_api_anchor(); extern "C" void _vector3_api_anchor(); @@ -61,6 +62,7 @@ extern "C" void _variant_api_anchor(); void _api_anchor() { _string_api_anchor(); + _string_name_api_anchor(); _vector2_api_anchor(); _rect2_api_anchor(); _vector3_api_anchor(); diff --git a/modules/gdnative/gdnative/string.cpp b/modules/gdnative/gdnative/string.cpp index 9b715ce36a..905c513d9d 100644 --- a/modules/gdnative/gdnative/string.cpp +++ b/modules/gdnative/gdnative/string.cpp @@ -29,9 +29,9 @@ /*************************************************************************/ #include "gdnative/string.h" +#include "core/string_db.h" +#include "core/ustring.h" #include "core/variant.h" -#include "string_db.h" -#include "ustring.h" #include <string.h> diff --git a/modules/gdnative/gdnative/string_name.cpp b/modules/gdnative/gdnative/string_name.cpp new file mode 100644 index 0000000000..5c00fdfc2f --- /dev/null +++ b/modules/gdnative/gdnative/string_name.cpp @@ -0,0 +1,91 @@ +/*************************************************************************/ +/* string_name.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* http://www.godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 "gdnative/string_name.h" + +#include "core/string_db.h" +#include "core/ustring.h" + +#include <string.h> + +#ifdef __cplusplus +extern "C" { +#endif + +void _string_name_api_anchor() { +} + +void GDAPI godot_string_name_new(godot_string_name *r_dest, const godot_string *p_name) { + StringName *dest = (StringName *)r_dest; + const String *name = (const String *)p_name; + memnew_placement(dest, StringName(*name)); +} + +void GDAPI godot_string_name_new_data(godot_string_name *r_dest, const char *p_name) { + StringName *dest = (StringName *)r_dest; + memnew_placement(dest, StringName(p_name)); +} + +godot_string GDAPI godot_string_name_get_name(const godot_string_name *p_self) { + godot_string ret; + const StringName *self = (const StringName *)p_self; + memnew_placement(&ret, String(*self)); + return ret; +} + +uint32_t GDAPI godot_string_name_get_hash(const godot_string_name *p_self) { + const StringName *self = (const StringName *)p_self; + return self->hash(); +} + +const void GDAPI *godot_string_name_get_data_unique_pointer(const godot_string_name *p_self) { + const StringName *self = (const StringName *)p_self; + return self->data_unique_pointer(); +} + +godot_bool GDAPI godot_string_name_operator_equal(const godot_string_name *p_self, const godot_string_name *p_other) { + const StringName *self = (const StringName *)p_self; + const StringName *other = (const StringName *)p_other; + return self == other; +} + +godot_bool GDAPI godot_string_name_operator_less(const godot_string_name *p_self, const godot_string_name *p_other) { + const StringName *self = (const StringName *)p_self; + const StringName *other = (const StringName *)p_other; + return self < other; +} + +void GDAPI godot_string_name_destroy(godot_string_name *p_self) { + StringName *self = (StringName *)p_self; + self->~StringName(); +} + +#ifdef __cplusplus +} +#endif diff --git a/modules/gdnative/gdnative_api.json b/modules/gdnative/gdnative_api.json new file mode 100644 index 0000000000..31b021b751 --- /dev/null +++ b/modules/gdnative/gdnative_api.json @@ -0,0 +1,5313 @@ +{ + "version": "1.0.0", + "api": [ + { + "name": "godot_color_new_rgba", + "return_type": "void", + "arguments": [ + ["godot_color *", "r_dest"], + ["const godot_real", "p_r"], + ["const godot_real", "p_g"], + ["const godot_real", "p_b"], + ["const godot_real", "p_a"] + ] + }, + { + "name": "godot_color_new_rgb", + "return_type": "void", + "arguments": [ + ["godot_color *", "r_dest"], + ["const godot_real", "p_r"], + ["const godot_real", "p_g"], + ["const godot_real", "p_b"] + ] + }, + { + "name": "godot_color_get_r", + "return_type": "godot_real", + "arguments": [ + ["const godot_color *", "p_self"] + ] + }, + { + "name": "godot_color_set_r", + "return_type": "void", + "arguments": [ + ["godot_color *", "p_self"], + ["const godot_real", "r"] + ] + }, + { + "name": "godot_color_get_g", + "return_type": "godot_real", + "arguments": [ + ["const godot_color *", "p_self"] + ] + }, + { + "name": "godot_color_set_g", + "return_type": "void", + "arguments": [ + ["godot_color *", "p_self"], + ["const godot_real", "g"] + ] + }, + { + "name": "godot_color_get_b", + "return_type": "godot_real", + "arguments": [ + ["const godot_color *", "p_self"] + ] + }, + { + "name": "godot_color_set_b", + "return_type": "void", + "arguments": [ + ["godot_color *", "p_self"], + ["const godot_real", "b"] + ] + }, + { + "name": "godot_color_get_a", + "return_type": "godot_real", + "arguments": [ + ["const godot_color *", "p_self"] + ] + }, + { + "name": "godot_color_set_a", + "return_type": "void", + "arguments": [ + ["godot_color *", "p_self"], + ["const godot_real", "a"] + ] + }, + { + "name": "godot_color_get_h", + "return_type": "godot_real", + "arguments": [ + ["const godot_color *", "p_self"] + ] + }, + { + "name": "godot_color_get_s", + "return_type": "godot_real", + "arguments": [ + ["const godot_color *", "p_self"] + ] + }, + { + "name": "godot_color_get_v", + "return_type": "godot_real", + "arguments": [ + ["const godot_color *", "p_self"] + ] + }, + { + "name": "godot_color_as_string", + "return_type": "godot_string", + "arguments": [ + ["const godot_color *", "p_self"] + ] + }, + { + "name": "godot_color_to_rgba32", + "return_type": "godot_int", + "arguments": [ + ["const godot_color *", "p_self"] + ] + }, + { + "name": "godot_color_to_argb32", + "return_type": "godot_int", + "arguments": [ + ["const godot_color *", "p_self"] + ] + }, + { + "name": "godot_color_gray", + "return_type": "godot_real", + "arguments": [ + ["const godot_color *", "p_self"] + ] + }, + { + "name": "godot_color_inverted", + "return_type": "godot_color", + "arguments": [ + ["const godot_color *", "p_self"] + ] + }, + { + "name": "godot_color_contrasted", + "return_type": "godot_color", + "arguments": [ + ["const godot_color *", "p_self"] + ] + }, + { + "name": "godot_color_linear_interpolate", + "return_type": "godot_color", + "arguments": [ + ["const godot_color *", "p_self"], + ["const godot_color *", "p_b"], + ["const godot_real", "p_t"] + ] + }, + { + "name": "godot_color_blend", + "return_type": "godot_color", + "arguments": [ + ["const godot_color *", "p_self"], + ["const godot_color *", "p_over"] + ] + }, + { + "name": "godot_color_to_html", + "return_type": "godot_string", + "arguments": [ + ["const godot_color *", "p_self"], + ["const godot_bool", "p_with_alpha"] + ] + }, + { + "name": "godot_color_operator_equal", + "return_type": "godot_bool", + "arguments": [ + ["const godot_color *", "p_self"], + ["const godot_color *", "p_b"] + ] + }, + { + "name": "godot_color_operator_less", + "return_type": "godot_bool", + "arguments": [ + ["const godot_color *", "p_self"], + ["const godot_color *", "p_b"] + ] + }, + { + "name": "godot_vector2_new", + "return_type": "void", + "arguments": [ + ["godot_vector2 *", "r_dest"], + ["const godot_real", "p_x"], + ["const godot_real", "p_y"] + ] + }, + { + "name": "godot_vector2_as_string", + "return_type": "godot_string", + "arguments": [ + ["const godot_vector2 *", "p_self"] + ] + }, + { + "name": "godot_vector2_normalized", + "return_type": "godot_vector2", + "arguments": [ + ["const godot_vector2 *", "p_self"] + ] + }, + { + "name": "godot_vector2_length", + "return_type": "godot_real", + "arguments": [ + ["const godot_vector2 *", "p_self"] + ] + }, + { + "name": "godot_vector2_angle", + "return_type": "godot_real", + "arguments": [ + ["const godot_vector2 *", "p_self"] + ] + }, + { + "name": "godot_vector2_length_squared", + "return_type": "godot_real", + "arguments": [ + ["const godot_vector2 *", "p_self"] + ] + }, + { + "name": "godot_vector2_is_normalized", + "return_type": "godot_bool", + "arguments": [ + ["const godot_vector2 *", "p_self"] + ] + }, + { + "name": "godot_vector2_distance_to", + "return_type": "godot_real", + "arguments": [ + ["const godot_vector2 *", "p_self"], + ["const godot_vector2 *", "p_to"] + ] + }, + { + "name": "godot_vector2_distance_squared_to", + "return_type": "godot_real", + "arguments": [ + ["const godot_vector2 *", "p_self"], + ["const godot_vector2 *", "p_to"] + ] + }, + { + "name": "godot_vector2_angle_to", + "return_type": "godot_real", + "arguments": [ + ["const godot_vector2 *", "p_self"], + ["const godot_vector2 *", "p_to"] + ] + }, + { + "name": "godot_vector2_angle_to_point", + "return_type": "godot_real", + "arguments": [ + ["const godot_vector2 *", "p_self"], + ["const godot_vector2 *", "p_to"] + ] + }, + { + "name": "godot_vector2_linear_interpolate", + "return_type": "godot_vector2", + "arguments": [ + ["const godot_vector2 *", "p_self"], + ["const godot_vector2 *", "p_b"], + ["const godot_real", "p_t"] + ] + }, + { + "name": "godot_vector2_cubic_interpolate", + "return_type": "godot_vector2", + "arguments": [ + ["const godot_vector2 *", "p_self"], + ["const godot_vector2 *", "p_b"], + ["const godot_vector2 *", "p_pre_a"], + ["const godot_vector2 *", "p_post_b"], + ["const godot_real", "p_t"] + ] + }, + { + "name": "godot_vector2_rotated", + "return_type": "godot_vector2", + "arguments": [ + ["const godot_vector2 *", "p_self"], + ["const godot_real", "p_phi"] + ] + }, + { + "name": "godot_vector2_tangent", + "return_type": "godot_vector2", + "arguments": [ + ["const godot_vector2 *", "p_self"] + ] + }, + { + "name": "godot_vector2_floor", + "return_type": "godot_vector2", + "arguments": [ + ["const godot_vector2 *", "p_self"] + ] + }, + { + "name": "godot_vector2_snapped", + "return_type": "godot_vector2", + "arguments": [ + ["const godot_vector2 *", "p_self"], + ["const godot_vector2 *", "p_by"] + ] + }, + { + "name": "godot_vector2_aspect", + "return_type": "godot_real", + "arguments": [ + ["const godot_vector2 *", "p_self"] + ] + }, + { + "name": "godot_vector2_dot", + "return_type": "godot_real", + "arguments": [ + ["const godot_vector2 *", "p_self"], + ["const godot_vector2 *", "p_with"] + ] + }, + { + "name": "godot_vector2_slide", + "return_type": "godot_vector2", + "arguments": [ + ["const godot_vector2 *", "p_self"], + ["const godot_vector2 *", "p_n"] + ] + }, + { + "name": "godot_vector2_bounce", + "return_type": "godot_vector2", + "arguments": [ + ["const godot_vector2 *", "p_self"], + ["const godot_vector2 *", "p_n"] + ] + }, + { + "name": "godot_vector2_reflect", + "return_type": "godot_vector2", + "arguments": [ + ["const godot_vector2 *", "p_self"], + ["const godot_vector2 *", "p_n"] + ] + }, + { + "name": "godot_vector2_abs", + "return_type": "godot_vector2", + "arguments": [ + ["const godot_vector2 *", "p_self"] + ] + }, + { + "name": "godot_vector2_clamped", + "return_type": "godot_vector2", + "arguments": [ + ["const godot_vector2 *", "p_self"], + ["const godot_real", "p_length"] + ] + }, + { + "name": "godot_vector2_operator_add", + "return_type": "godot_vector2", + "arguments": [ + ["const godot_vector2 *", "p_self"], + ["const godot_vector2 *", "p_b"] + ] + }, + { + "name": "godot_vector2_operator_substract", + "return_type": "godot_vector2", + "arguments": [ + ["const godot_vector2 *", "p_self"], + ["const godot_vector2 *", "p_b"] + ] + }, + { + "name": "godot_vector2_operator_multiply_vector", + "return_type": "godot_vector2", + "arguments": [ + ["const godot_vector2 *", "p_self"], + ["const godot_vector2 *", "p_b"] + ] + }, + { + "name": "godot_vector2_operator_multiply_scalar", + "return_type": "godot_vector2", + "arguments": [ + ["const godot_vector2 *", "p_self"], + ["const godot_real", "p_b"] + ] + }, + { + "name": "godot_vector2_operator_divide_vector", + "return_type": "godot_vector2", + "arguments": [ + ["const godot_vector2 *", "p_self"], + ["const godot_vector2 *", "p_b"] + ] + }, + { + "name": "godot_vector2_operator_divide_scalar", + "return_type": "godot_vector2", + "arguments": [ + ["const godot_vector2 *", "p_self"], + ["const godot_real", "p_b"] + ] + }, + { + "name": "godot_vector2_operator_equal", + "return_type": "godot_bool", + "arguments": [ + ["const godot_vector2 *", "p_self"], + ["const godot_vector2 *", "p_b"] + ] + }, + { + "name": "godot_vector2_operator_less", + "return_type": "godot_bool", + "arguments": [ + ["const godot_vector2 *", "p_self"], + ["const godot_vector2 *", "p_b"] + ] + }, + { + "name": "godot_vector2_operator_neg", + "return_type": "godot_vector2", + "arguments": [ + ["const godot_vector2 *", "p_self"] + ] + }, + { + "name": "godot_vector2_set_x", + "return_type": "void", + "arguments": [ + ["godot_vector2 *", "p_self"], + ["const godot_real", "p_x"] + ] + }, + { + "name": "godot_vector2_set_y", + "return_type": "void", + "arguments": [ + ["godot_vector2 *", "p_self"], + ["const godot_real", "p_y"] + ] + }, + { + "name": "godot_vector2_get_x", + "return_type": "godot_real", + "arguments": [ + ["const godot_vector2 *", "p_self"] + ] + }, + { + "name": "godot_vector2_get_y", + "return_type": "godot_real", + "arguments": [ + ["const godot_vector2 *", "p_self"] + ] + }, + { + "name": "godot_quat_new", + "return_type": "void", + "arguments": [ + ["godot_quat *", "r_dest"], + ["const godot_real", "p_x"], + ["const godot_real", "p_y"], + ["const godot_real", "p_z"], + ["const godot_real", "p_w"] + ] + }, + { + "name": "godot_quat_new_with_axis_angle", + "return_type": "void", + "arguments": [ + ["godot_quat *", "r_dest"], + ["const godot_vector3 *", "p_axis"], + ["const godot_real", "p_angle"] + ] + }, + { + "name": "godot_quat_get_x", + "return_type": "godot_real", + "arguments": [ + ["const godot_quat *", "p_self"] + ] + }, + { + "name": "godot_quat_set_x", + "return_type": "void", + "arguments": [ + ["godot_quat *", "p_self"], + ["const godot_real", "val"] + ] + }, + { + "name": "godot_quat_get_y", + "return_type": "godot_real", + "arguments": [ + ["const godot_quat *", "p_self"] + ] + }, + { + "name": "godot_quat_set_y", + "return_type": "void", + "arguments": [ + ["godot_quat *", "p_self"], + ["const godot_real", "val"] + ] + }, + { + "name": "godot_quat_get_z", + "return_type": "godot_real", + "arguments": [ + ["const godot_quat *", "p_self"] + ] + }, + { + "name": "godot_quat_set_z", + "return_type": "void", + "arguments": [ + ["godot_quat *", "p_self"], + ["const godot_real", "val"] + ] + }, + { + "name": "godot_quat_get_w", + "return_type": "godot_real", + "arguments": [ + ["const godot_quat *", "p_self"] + ] + }, + { + "name": "godot_quat_set_w", + "return_type": "void", + "arguments": [ + ["godot_quat *", "p_self"], + ["const godot_real", "val"] + ] + }, + { + "name": "godot_quat_as_string", + "return_type": "godot_string", + "arguments": [ + ["const godot_quat *", "p_self"] + ] + }, + { + "name": "godot_quat_length", + "return_type": "godot_real", + "arguments": [ + ["const godot_quat *", "p_self"] + ] + }, + { + "name": "godot_quat_length_squared", + "return_type": "godot_real", + "arguments": [ + ["const godot_quat *", "p_self"] + ] + }, + { + "name": "godot_quat_normalized", + "return_type": "godot_quat", + "arguments": [ + ["const godot_quat *", "p_self"] + ] + }, + { + "name": "godot_quat_is_normalized", + "return_type": "godot_bool", + "arguments": [ + ["const godot_quat *", "p_self"] + ] + }, + { + "name": "godot_quat_inverse", + "return_type": "godot_quat", + "arguments": [ + ["const godot_quat *", "p_self"] + ] + }, + { + "name": "godot_quat_dot", + "return_type": "godot_real", + "arguments": [ + ["const godot_quat *", "p_self"], + ["const godot_quat *", "p_b"] + ] + }, + { + "name": "godot_quat_xform", + "return_type": "godot_vector3", + "arguments": [ + ["const godot_quat *", "p_self"], + ["const godot_vector3 *", "p_v"] + ] + }, + { + "name": "godot_quat_slerp", + "return_type": "godot_quat", + "arguments": [ + ["const godot_quat *", "p_self"], + ["const godot_quat *", "p_b"], + ["const godot_real", "p_t"] + ] + }, + { + "name": "godot_quat_slerpni", + "return_type": "godot_quat", + "arguments": [ + ["const godot_quat *", "p_self"], + ["const godot_quat *", "p_b"], + ["const godot_real", "p_t"] + ] + }, + { + "name": "godot_quat_cubic_slerp", + "return_type": "godot_quat", + "arguments": [ + ["const godot_quat *", "p_self"], + ["const godot_quat *", "p_b"], + ["const godot_quat *", "p_pre_a"], + ["const godot_quat *", "p_post_b"], + ["const godot_real", "p_t"] + ] + }, + { + "name": "godot_quat_operator_multiply", + "return_type": "godot_quat", + "arguments": [ + ["const godot_quat *", "p_self"], + ["const godot_real", "p_b"] + ] + }, + { + "name": "godot_quat_operator_add", + "return_type": "godot_quat", + "arguments": [ + ["const godot_quat *", "p_self"], + ["const godot_quat *", "p_b"] + ] + }, + { + "name": "godot_quat_operator_substract", + "return_type": "godot_quat", + "arguments": [ + ["const godot_quat *", "p_self"], + ["const godot_quat *", "p_b"] + ] + }, + { + "name": "godot_quat_operator_divide", + "return_type": "godot_quat", + "arguments": [ + ["const godot_quat *", "p_self"], + ["const godot_real", "p_b"] + ] + }, + { + "name": "godot_quat_operator_equal", + "return_type": "godot_bool", + "arguments": [ + ["const godot_quat *", "p_self"], + ["const godot_quat *", "p_b"] + ] + }, + { + "name": "godot_quat_operator_neg", + "return_type": "godot_quat", + "arguments": [ + ["const godot_quat *", "p_self"] + ] + }, + { + "name": "godot_basis_new_with_rows", + "return_type": "void", + "arguments": [ + ["godot_basis *", "r_dest"], + ["const godot_vector3 *", "p_x_axis"], + ["const godot_vector3 *", "p_y_axis"], + ["const godot_vector3 *", "p_z_axis"] + ] + }, + { + "name": "godot_basis_new_with_axis_and_angle", + "return_type": "void", + "arguments": [ + ["godot_basis *", "r_dest"], + ["const godot_vector3 *", "p_axis"], + ["const godot_real", "p_phi"] + ] + }, + { + "name": "godot_basis_new_with_euler", + "return_type": "void", + "arguments": [ + ["godot_basis *", "r_dest"], + ["const godot_vector3 *", "p_euler"] + ] + }, + { + "name": "godot_basis_as_string", + "return_type": "godot_string", + "arguments": [ + ["const godot_basis *", "p_self"] + ] + }, + { + "name": "godot_basis_inverse", + "return_type": "godot_basis", + "arguments": [ + ["const godot_basis *", "p_self"] + ] + }, + { + "name": "godot_basis_transposed", + "return_type": "godot_basis", + "arguments": [ + ["const godot_basis *", "p_self"] + ] + }, + { + "name": "godot_basis_orthonormalized", + "return_type": "godot_basis", + "arguments": [ + ["const godot_basis *", "p_self"] + ] + }, + { + "name": "godot_basis_determinant", + "return_type": "godot_real", + "arguments": [ + ["const godot_basis *", "p_self"] + ] + }, + { + "name": "godot_basis_rotated", + "return_type": "godot_basis", + "arguments": [ + ["const godot_basis *", "p_self"], + ["const godot_vector3 *", "p_axis"], + ["const godot_real", "p_phi"] + ] + }, + { + "name": "godot_basis_scaled", + "return_type": "godot_basis", + "arguments": [ + ["const godot_basis *", "p_self"], + ["const godot_vector3 *", "p_scale"] + ] + }, + { + "name": "godot_basis_get_scale", + "return_type": "godot_vector3", + "arguments": [ + ["const godot_basis *", "p_self"] + ] + }, + { + "name": "godot_basis_get_euler", + "return_type": "godot_vector3", + "arguments": [ + ["const godot_basis *", "p_self"] + ] + }, + { + "name": "godot_basis_tdotx", + "return_type": "godot_real", + "arguments": [ + ["const godot_basis *", "p_self"], + ["const godot_vector3 *", "p_with"] + ] + }, + { + "name": "godot_basis_tdoty", + "return_type": "godot_real", + "arguments": [ + ["const godot_basis *", "p_self"], + ["const godot_vector3 *", "p_with"] + ] + }, + { + "name": "godot_basis_tdotz", + "return_type": "godot_real", + "arguments": [ + ["const godot_basis *", "p_self"], + ["const godot_vector3 *", "p_with"] + ] + }, + { + "name": "godot_basis_xform", + "return_type": "godot_vector3", + "arguments": [ + ["const godot_basis *", "p_self"], + ["const godot_vector3 *", "p_v"] + ] + }, + { + "name": "godot_basis_xform_inv", + "return_type": "godot_vector3", + "arguments": [ + ["const godot_basis *", "p_self"], + ["const godot_vector3 *", "p_v"] + ] + }, + { + "name": "godot_basis_get_orthogonal_index", + "return_type": "godot_int", + "arguments": [ + ["const godot_basis *", "p_self"] + ] + }, + { + "name": "godot_basis_new", + "return_type": "void", + "arguments": [ + ["godot_basis *", "r_dest"] + ] + }, + { + "name": "godot_basis_new_with_euler_quat", + "return_type": "void", + "arguments": [ + ["godot_basis *", "r_dest"], + ["const godot_quat *", "p_euler"] + ] + }, + { + "name": "godot_basis_get_elements", + "return_type": "void", + "arguments": [ + ["godot_basis *", "p_self"], + ["godot_vector3 *", "p_elements"] + ] + }, + { + "name": "godot_basis_get_axis", + "return_type": "godot_vector3", + "arguments": [ + ["const godot_basis *", "p_self"], + ["const godot_int", "p_axis"] + ] + }, + { + "name": "godot_basis_set_axis", + "return_type": "void", + "arguments": [ + ["godot_basis *", "p_self"], + ["const godot_int", "p_axis"], + ["const godot_vector3 *", "p_value"] + ] + }, + { + "name": "godot_basis_get_row", + "return_type": "godot_vector3", + "arguments": [ + ["const godot_basis *", "p_self"], + ["const godot_int", "p_row"] + ] + }, + { + "name": "godot_basis_set_row", + "return_type": "void", + "arguments": [ + ["godot_basis *", "p_self"], + ["const godot_int", "p_row"], + ["const godot_vector3 *", "p_value"] + ] + }, + { + "name": "godot_basis_operator_equal", + "return_type": "godot_bool", + "arguments": [ + ["const godot_basis *", "p_self"], + ["const godot_basis *", "p_b"] + ] + }, + { + "name": "godot_basis_operator_add", + "return_type": "godot_basis", + "arguments": [ + ["const godot_basis *", "p_self"], + ["const godot_basis *", "p_b"] + ] + }, + { + "name": "godot_basis_operator_substract", + "return_type": "godot_basis", + "arguments": [ + ["const godot_basis *", "p_self"], + ["const godot_basis *", "p_b"] + ] + }, + { + "name": "godot_basis_operator_multiply_vector", + "return_type": "godot_basis", + "arguments": [ + ["const godot_basis *", "p_self"], + ["const godot_basis *", "p_b"] + ] + }, + { + "name": "godot_basis_operator_multiply_scalar", + "return_type": "godot_basis", + "arguments": [ + ["const godot_basis *", "p_self"], + ["const godot_real", "p_b"] + ] + }, + { + "name": "godot_vector3_new", + "return_type": "void", + "arguments": [ + ["godot_vector3 *", "r_dest"], + ["const godot_real", "p_x"], + ["const godot_real", "p_y"], + ["const godot_real", "p_z"] + ] + }, + { + "name": "godot_vector3_as_string", + "return_type": "godot_string", + "arguments": [ + ["const godot_vector3 *", "p_self"] + ] + }, + { + "name": "godot_vector3_min_axis", + "return_type": "godot_int", + "arguments": [ + ["const godot_vector3 *", "p_self"] + ] + }, + { + "name": "godot_vector3_max_axis", + "return_type": "godot_int", + "arguments": [ + ["const godot_vector3 *", "p_self"] + ] + }, + { + "name": "godot_vector3_length", + "return_type": "godot_real", + "arguments": [ + ["const godot_vector3 *", "p_self"] + ] + }, + { + "name": "godot_vector3_length_squared", + "return_type": "godot_real", + "arguments": [ + ["const godot_vector3 *", "p_self"] + ] + }, + { + "name": "godot_vector3_is_normalized", + "return_type": "godot_bool", + "arguments": [ + ["const godot_vector3 *", "p_self"] + ] + }, + { + "name": "godot_vector3_normalized", + "return_type": "godot_vector3", + "arguments": [ + ["const godot_vector3 *", "p_self"] + ] + }, + { + "name": "godot_vector3_inverse", + "return_type": "godot_vector3", + "arguments": [ + ["const godot_vector3 *", "p_self"] + ] + }, + { + "name": "godot_vector3_snapped", + "return_type": "godot_vector3", + "arguments": [ + ["const godot_vector3 *", "p_self"], + ["const godot_vector3 *", "p_by"] + ] + }, + { + "name": "godot_vector3_rotated", + "return_type": "godot_vector3", + "arguments": [ + ["const godot_vector3 *", "p_self"], + ["const godot_vector3 *", "p_axis"], + ["const godot_real", "p_phi"] + ] + }, + { + "name": "godot_vector3_linear_interpolate", + "return_type": "godot_vector3", + "arguments": [ + ["const godot_vector3 *", "p_self"], + ["const godot_vector3 *", "p_b"], + ["const godot_real", "p_t"] + ] + }, + { + "name": "godot_vector3_cubic_interpolate", + "return_type": "godot_vector3", + "arguments": [ + ["const godot_vector3 *", "p_self"], + ["const godot_vector3 *", "p_b"], + ["const godot_vector3 *", "p_pre_a"], + ["const godot_vector3 *", "p_post_b"], + ["const godot_real", "p_t"] + ] + }, + { + "name": "godot_vector3_dot", + "return_type": "godot_real", + "arguments": [ + ["const godot_vector3 *", "p_self"], + ["const godot_vector3 *", "p_b"] + ] + }, + { + "name": "godot_vector3_cross", + "return_type": "godot_vector3", + "arguments": [ + ["const godot_vector3 *", "p_self"], + ["const godot_vector3 *", "p_b"] + ] + }, + { + "name": "godot_vector3_outer", + "return_type": "godot_basis", + "arguments": [ + ["const godot_vector3 *", "p_self"], + ["const godot_vector3 *", "p_b"] + ] + }, + { + "name": "godot_vector3_to_diagonal_matrix", + "return_type": "godot_basis", + "arguments": [ + ["const godot_vector3 *", "p_self"] + ] + }, + { + "name": "godot_vector3_abs", + "return_type": "godot_vector3", + "arguments": [ + ["const godot_vector3 *", "p_self"] + ] + }, + { + "name": "godot_vector3_floor", + "return_type": "godot_vector3", + "arguments": [ + ["const godot_vector3 *", "p_self"] + ] + }, + { + "name": "godot_vector3_ceil", + "return_type": "godot_vector3", + "arguments": [ + ["const godot_vector3 *", "p_self"] + ] + }, + { + "name": "godot_vector3_distance_to", + "return_type": "godot_real", + "arguments": [ + ["const godot_vector3 *", "p_self"], + ["const godot_vector3 *", "p_b"] + ] + }, + { + "name": "godot_vector3_distance_squared_to", + "return_type": "godot_real", + "arguments": [ + ["const godot_vector3 *", "p_self"], + ["const godot_vector3 *", "p_b"] + ] + }, + { + "name": "godot_vector3_angle_to", + "return_type": "godot_real", + "arguments": [ + ["const godot_vector3 *", "p_self"], + ["const godot_vector3 *", "p_to"] + ] + }, + { + "name": "godot_vector3_slide", + "return_type": "godot_vector3", + "arguments": [ + ["const godot_vector3 *", "p_self"], + ["const godot_vector3 *", "p_n"] + ] + }, + { + "name": "godot_vector3_bounce", + "return_type": "godot_vector3", + "arguments": [ + ["const godot_vector3 *", "p_self"], + ["const godot_vector3 *", "p_n"] + ] + }, + { + "name": "godot_vector3_reflect", + "return_type": "godot_vector3", + "arguments": [ + ["const godot_vector3 *", "p_self"], + ["const godot_vector3 *", "p_n"] + ] + }, + { + "name": "godot_vector3_operator_add", + "return_type": "godot_vector3", + "arguments": [ + ["const godot_vector3 *", "p_self"], + ["const godot_vector3 *", "p_b"] + ] + }, + { + "name": "godot_vector3_operator_substract", + "return_type": "godot_vector3", + "arguments": [ + ["const godot_vector3 *", "p_self"], + ["const godot_vector3 *", "p_b"] + ] + }, + { + "name": "godot_vector3_operator_multiply_vector", + "return_type": "godot_vector3", + "arguments": [ + ["const godot_vector3 *", "p_self"], + ["const godot_vector3 *", "p_b"] + ] + }, + { + "name": "godot_vector3_operator_multiply_scalar", + "return_type": "godot_vector3", + "arguments": [ + ["const godot_vector3 *", "p_self"], + ["const godot_real", "p_b"] + ] + }, + { + "name": "godot_vector3_operator_divide_vector", + "return_type": "godot_vector3", + "arguments": [ + ["const godot_vector3 *", "p_self"], + ["const godot_vector3 *", "p_b"] + ] + }, + { + "name": "godot_vector3_operator_divide_scalar", + "return_type": "godot_vector3", + "arguments": [ + ["const godot_vector3 *", "p_self"], + ["const godot_real", "p_b"] + ] + }, + { + "name": "godot_vector3_operator_equal", + "return_type": "godot_bool", + "arguments": [ + ["const godot_vector3 *", "p_self"], + ["const godot_vector3 *", "p_b"] + ] + }, + { + "name": "godot_vector3_operator_less", + "return_type": "godot_bool", + "arguments": [ + ["const godot_vector3 *", "p_self"], + ["const godot_vector3 *", "p_b"] + ] + }, + { + "name": "godot_vector3_operator_neg", + "return_type": "godot_vector3", + "arguments": [ + ["const godot_vector3 *", "p_self"] + ] + }, + { + "name": "godot_vector3_set_axis", + "return_type": "void", + "arguments": [ + ["godot_vector3 *", "p_self"], + ["const godot_vector3_axis", "p_axis"], + ["const godot_real", "p_val"] + ] + }, + { + "name": "godot_vector3_get_axis", + "return_type": "godot_real", + "arguments": [ + ["const godot_vector3 *", "p_self"], + ["const godot_vector3_axis", "p_axis"] + ] + }, + { + "name": "godot_pool_byte_array_new", + "return_type": "void", + "arguments": [ + ["godot_pool_byte_array *", "r_dest"] + ] + }, + { + "name": "godot_pool_byte_array_new_copy", + "return_type": "void", + "arguments": [ + ["godot_pool_byte_array *", "r_dest"], + ["const godot_pool_byte_array *", "p_src"] + ] + }, + { + "name": "godot_pool_byte_array_new_with_array", + "return_type": "void", + "arguments": [ + ["godot_pool_byte_array *", "r_dest"], + ["const godot_array *", "p_a"] + ] + }, + { + "name": "godot_pool_byte_array_append", + "return_type": "void", + "arguments": [ + ["godot_pool_byte_array *", "p_self"], + ["const uint8_t", "p_data"] + ] + }, + { + "name": "godot_pool_byte_array_append_array", + "return_type": "void", + "arguments": [ + ["godot_pool_byte_array *", "p_self"], + ["const godot_pool_byte_array *", "p_array"] + ] + }, + { + "name": "godot_pool_byte_array_insert", + "return_type": "godot_error", + "arguments": [ + ["godot_pool_byte_array *", "p_self"], + ["const godot_int", "p_idx"], + ["const uint8_t", "p_data"] + ] + }, + { + "name": "godot_pool_byte_array_invert", + "return_type": "void", + "arguments": [ + ["godot_pool_byte_array *", "p_self"] + ] + }, + { + "name": "godot_pool_byte_array_push_back", + "return_type": "void", + "arguments": [ + ["godot_pool_byte_array *", "p_self"], + ["const uint8_t", "p_data"] + ] + }, + { + "name": "godot_pool_byte_array_remove", + "return_type": "void", + "arguments": [ + ["godot_pool_byte_array *", "p_self"], + ["const godot_int", "p_idx"] + ] + }, + { + "name": "godot_pool_byte_array_resize", + "return_type": "void", + "arguments": [ + ["godot_pool_byte_array *", "p_self"], + ["const godot_int", "p_size"] + ] + }, + { + "name": "godot_pool_byte_array_set", + "return_type": "void", + "arguments": [ + ["godot_pool_byte_array *", "p_self"], + ["const godot_int", "p_idx"], + ["const uint8_t", "p_data"] + ] + }, + { + "name": "godot_pool_byte_array_get", + "return_type": "uint8_t", + "arguments": [ + ["const godot_pool_byte_array *", "p_self"], + ["const godot_int", "p_idx"] + ] + }, + { + "name": "godot_pool_byte_array_size", + "return_type": "godot_int", + "arguments": [ + ["const godot_pool_byte_array *", "p_self"] + ] + }, + { + "name": "godot_pool_byte_array_destroy", + "return_type": "void", + "arguments": [ + ["godot_pool_byte_array *", "p_self"] + ] + }, + { + "name": "godot_pool_int_array_new", + "return_type": "void", + "arguments": [ + ["godot_pool_int_array *", "r_dest"] + ] + }, + { + "name": "godot_pool_int_array_new_copy", + "return_type": "void", + "arguments": [ + ["godot_pool_int_array *", "r_dest"], + ["const godot_pool_int_array *", "p_src"] + ] + }, + { + "name": "godot_pool_int_array_new_with_array", + "return_type": "void", + "arguments": [ + ["godot_pool_int_array *", "r_dest"], + ["const godot_array *", "p_a"] + ] + }, + { + "name": "godot_pool_int_array_append", + "return_type": "void", + "arguments": [ + ["godot_pool_int_array *", "p_self"], + ["const godot_int", "p_data"] + ] + }, + { + "name": "godot_pool_int_array_append_array", + "return_type": "void", + "arguments": [ + ["godot_pool_int_array *", "p_self"], + ["const godot_pool_int_array *", "p_array"] + ] + }, + { + "name": "godot_pool_int_array_insert", + "return_type": "godot_error", + "arguments": [ + ["godot_pool_int_array *", "p_self"], + ["const godot_int", "p_idx"], + ["const godot_int", "p_data"] + ] + }, + { + "name": "godot_pool_int_array_invert", + "return_type": "void", + "arguments": [ + ["godot_pool_int_array *", "p_self"] + ] + }, + { + "name": "godot_pool_int_array_push_back", + "return_type": "void", + "arguments": [ + ["godot_pool_int_array *", "p_self"], + ["const godot_int", "p_data"] + ] + }, + { + "name": "godot_pool_int_array_remove", + "return_type": "void", + "arguments": [ + ["godot_pool_int_array *", "p_self"], + ["const godot_int", "p_idx"] + ] + }, + { + "name": "godot_pool_int_array_resize", + "return_type": "void", + "arguments": [ + ["godot_pool_int_array *", "p_self"], + ["const godot_int", "p_size"] + ] + }, + { + "name": "godot_pool_int_array_set", + "return_type": "void", + "arguments": [ + ["godot_pool_int_array *", "p_self"], + ["const godot_int", "p_idx"], + ["const godot_int", "p_data"] + ] + }, + { + "name": "godot_pool_int_array_get", + "return_type": "godot_int", + "arguments": [ + ["const godot_pool_int_array *", "p_self"], + ["const godot_int", "p_idx"] + ] + }, + { + "name": "godot_pool_int_array_size", + "return_type": "godot_int", + "arguments": [ + ["const godot_pool_int_array *", "p_self"] + ] + }, + { + "name": "godot_pool_int_array_destroy", + "return_type": "void", + "arguments": [ + ["godot_pool_int_array *", "p_self"] + ] + }, + { + "name": "godot_pool_real_array_new", + "return_type": "void", + "arguments": [ + ["godot_pool_real_array *", "r_dest"] + ] + }, + { + "name": "godot_pool_real_array_new_copy", + "return_type": "void", + "arguments": [ + ["godot_pool_real_array *", "r_dest"], + ["const godot_pool_real_array *", "p_src"] + ] + }, + { + "name": "godot_pool_real_array_new_with_array", + "return_type": "void", + "arguments": [ + ["godot_pool_real_array *", "r_dest"], + ["const godot_array *", "p_a"] + ] + }, + { + "name": "godot_pool_real_array_append", + "return_type": "void", + "arguments": [ + ["godot_pool_real_array *", "p_self"], + ["const godot_real", "p_data"] + ] + }, + { + "name": "godot_pool_real_array_append_array", + "return_type": "void", + "arguments": [ + ["godot_pool_real_array *", "p_self"], + ["const godot_pool_real_array *", "p_array"] + ] + }, + { + "name": "godot_pool_real_array_insert", + "return_type": "godot_error", + "arguments": [ + ["godot_pool_real_array *", "p_self"], + ["const godot_int", "p_idx"], + ["const godot_real", "p_data"] + ] + }, + { + "name": "godot_pool_real_array_invert", + "return_type": "void", + "arguments": [ + ["godot_pool_real_array *", "p_self"] + ] + }, + { + "name": "godot_pool_real_array_push_back", + "return_type": "void", + "arguments": [ + ["godot_pool_real_array *", "p_self"], + ["const godot_real", "p_data"] + ] + }, + { + "name": "godot_pool_real_array_remove", + "return_type": "void", + "arguments": [ + ["godot_pool_real_array *", "p_self"], + ["const godot_int", "p_idx"] + ] + }, + { + "name": "godot_pool_real_array_resize", + "return_type": "void", + "arguments": [ + ["godot_pool_real_array *", "p_self"], + ["const godot_int", "p_size"] + ] + }, + { + "name": "godot_pool_real_array_set", + "return_type": "void", + "arguments": [ + ["godot_pool_real_array *", "p_self"], + ["const godot_int", "p_idx"], + ["const godot_real", "p_data"] + ] + }, + { + "name": "godot_pool_real_array_get", + "return_type": "godot_real", + "arguments": [ + ["const godot_pool_real_array *", "p_self"], + ["const godot_int", "p_idx"] + ] + }, + { + "name": "godot_pool_real_array_size", + "return_type": "godot_int", + "arguments": [ + ["const godot_pool_real_array *", "p_self"] + ] + }, + { + "name": "godot_pool_real_array_destroy", + "return_type": "void", + "arguments": [ + ["godot_pool_real_array *", "p_self"] + ] + }, + { + "name": "godot_pool_string_array_new", + "return_type": "void", + "arguments": [ + ["godot_pool_string_array *", "r_dest"] + ] + }, + { + "name": "godot_pool_string_array_new_copy", + "return_type": "void", + "arguments": [ + ["godot_pool_string_array *", "r_dest"], + ["const godot_pool_string_array *", "p_src"] + ] + }, + { + "name": "godot_pool_string_array_new_with_array", + "return_type": "void", + "arguments": [ + ["godot_pool_string_array *", "r_dest"], + ["const godot_array *", "p_a"] + ] + }, + { + "name": "godot_pool_string_array_append", + "return_type": "void", + "arguments": [ + ["godot_pool_string_array *", "p_self"], + ["const godot_string *", "p_data"] + ] + }, + { + "name": "godot_pool_string_array_append_array", + "return_type": "void", + "arguments": [ + ["godot_pool_string_array *", "p_self"], + ["const godot_pool_string_array *", "p_array"] + ] + }, + { + "name": "godot_pool_string_array_insert", + "return_type": "godot_error", + "arguments": [ + ["godot_pool_string_array *", "p_self"], + ["const godot_int", "p_idx"], + ["const godot_string *", "p_data"] + ] + }, + { + "name": "godot_pool_string_array_invert", + "return_type": "void", + "arguments": [ + ["godot_pool_string_array *", "p_self"] + ] + }, + { + "name": "godot_pool_string_array_push_back", + "return_type": "void", + "arguments": [ + ["godot_pool_string_array *", "p_self"], + ["const godot_string *", "p_data"] + ] + }, + { + "name": "godot_pool_string_array_remove", + "return_type": "void", + "arguments": [ + ["godot_pool_string_array *", "p_self"], + ["const godot_int", "p_idx"] + ] + }, + { + "name": "godot_pool_string_array_resize", + "return_type": "void", + "arguments": [ + ["godot_pool_string_array *", "p_self"], + ["const godot_int", "p_size"] + ] + }, + { + "name": "godot_pool_string_array_set", + "return_type": "void", + "arguments": [ + ["godot_pool_string_array *", "p_self"], + ["const godot_int", "p_idx"], + ["const godot_string *", "p_data"] + ] + }, + { + "name": "godot_pool_string_array_get", + "return_type": "godot_string", + "arguments": [ + ["const godot_pool_string_array *", "p_self"], + ["const godot_int", "p_idx"] + ] + }, + { + "name": "godot_pool_string_array_size", + "return_type": "godot_int", + "arguments": [ + ["const godot_pool_string_array *", "p_self"] + ] + }, + { + "name": "godot_pool_string_array_destroy", + "return_type": "void", + "arguments": [ + ["godot_pool_string_array *", "p_self"] + ] + }, + { + "name": "godot_pool_vector2_array_new", + "return_type": "void", + "arguments": [ + ["godot_pool_vector2_array *", "r_dest"] + ] + }, + { + "name": "godot_pool_vector2_array_new_copy", + "return_type": "void", + "arguments": [ + ["godot_pool_vector2_array *", "r_dest"], + ["const godot_pool_vector2_array *", "p_src"] + ] + }, + { + "name": "godot_pool_vector2_array_new_with_array", + "return_type": "void", + "arguments": [ + ["godot_pool_vector2_array *", "r_dest"], + ["const godot_array *", "p_a"] + ] + }, + { + "name": "godot_pool_vector2_array_append", + "return_type": "void", + "arguments": [ + ["godot_pool_vector2_array *", "p_self"], + ["const godot_vector2 *", "p_data"] + ] + }, + { + "name": "godot_pool_vector2_array_append_array", + "return_type": "void", + "arguments": [ + ["godot_pool_vector2_array *", "p_self"], + ["const godot_pool_vector2_array *", "p_array"] + ] + }, + { + "name": "godot_pool_vector2_array_insert", + "return_type": "godot_error", + "arguments": [ + ["godot_pool_vector2_array *", "p_self"], + ["const godot_int", "p_idx"], + ["const godot_vector2 *", "p_data"] + ] + }, + { + "name": "godot_pool_vector2_array_invert", + "return_type": "void", + "arguments": [ + ["godot_pool_vector2_array *", "p_self"] + ] + }, + { + "name": "godot_pool_vector2_array_push_back", + "return_type": "void", + "arguments": [ + ["godot_pool_vector2_array *", "p_self"], + ["const godot_vector2 *", "p_data"] + ] + }, + { + "name": "godot_pool_vector2_array_remove", + "return_type": "void", + "arguments": [ + ["godot_pool_vector2_array *", "p_self"], + ["const godot_int", "p_idx"] + ] + }, + { + "name": "godot_pool_vector2_array_resize", + "return_type": "void", + "arguments": [ + ["godot_pool_vector2_array *", "p_self"], + ["const godot_int", "p_size"] + ] + }, + { + "name": "godot_pool_vector2_array_set", + "return_type": "void", + "arguments": [ + ["godot_pool_vector2_array *", "p_self"], + ["const godot_int", "p_idx"], + ["const godot_vector2 *", "p_data"] + ] + }, + { + "name": "godot_pool_vector2_array_get", + "return_type": "godot_vector2", + "arguments": [ + ["const godot_pool_vector2_array *", "p_self"], + ["const godot_int", "p_idx"] + ] + }, + { + "name": "godot_pool_vector2_array_size", + "return_type": "godot_int", + "arguments": [ + ["const godot_pool_vector2_array *", "p_self"] + ] + }, + { + "name": "godot_pool_vector2_array_destroy", + "return_type": "void", + "arguments": [ + ["godot_pool_vector2_array *", "p_self"] + ] + }, + { + "name": "godot_pool_vector3_array_new", + "return_type": "void", + "arguments": [ + ["godot_pool_vector3_array *", "r_dest"] + ] + }, + { + "name": "godot_pool_vector3_array_new_copy", + "return_type": "void", + "arguments": [ + ["godot_pool_vector3_array *", "r_dest"], + ["const godot_pool_vector3_array *", "p_src"] + ] + }, + { + "name": "godot_pool_vector3_array_new_with_array", + "return_type": "void", + "arguments": [ + ["godot_pool_vector3_array *", "r_dest"], + ["const godot_array *", "p_a"] + ] + }, + { + "name": "godot_pool_vector3_array_append", + "return_type": "void", + "arguments": [ + ["godot_pool_vector3_array *", "p_self"], + ["const godot_vector3 *", "p_data"] + ] + }, + { + "name": "godot_pool_vector3_array_append_array", + "return_type": "void", + "arguments": [ + ["godot_pool_vector3_array *", "p_self"], + ["const godot_pool_vector3_array *", "p_array"] + ] + }, + { + "name": "godot_pool_vector3_array_insert", + "return_type": "godot_error", + "arguments": [ + ["godot_pool_vector3_array *", "p_self"], + ["const godot_int", "p_idx"], + ["const godot_vector3 *", "p_data"] + ] + }, + { + "name": "godot_pool_vector3_array_invert", + "return_type": "void", + "arguments": [ + ["godot_pool_vector3_array *", "p_self"] + ] + }, + { + "name": "godot_pool_vector3_array_push_back", + "return_type": "void", + "arguments": [ + ["godot_pool_vector3_array *", "p_self"], + ["const godot_vector3 *", "p_data"] + ] + }, + { + "name": "godot_pool_vector3_array_remove", + "return_type": "void", + "arguments": [ + ["godot_pool_vector3_array *", "p_self"], + ["const godot_int", "p_idx"] + ] + }, + { + "name": "godot_pool_vector3_array_resize", + "return_type": "void", + "arguments": [ + ["godot_pool_vector3_array *", "p_self"], + ["const godot_int", "p_size"] + ] + }, + { + "name": "godot_pool_vector3_array_set", + "return_type": "void", + "arguments": [ + ["godot_pool_vector3_array *", "p_self"], + ["const godot_int", "p_idx"], + ["const godot_vector3 *", "p_data"] + ] + }, + { + "name": "godot_pool_vector3_array_get", + "return_type": "godot_vector3", + "arguments": [ + ["const godot_pool_vector3_array *", "p_self"], + ["const godot_int", "p_idx"] + ] + }, + { + "name": "godot_pool_vector3_array_size", + "return_type": "godot_int", + "arguments": [ + ["const godot_pool_vector3_array *", "p_self"] + ] + }, + { + "name": "godot_pool_vector3_array_destroy", + "return_type": "void", + "arguments": [ + ["godot_pool_vector3_array *", "p_self"] + ] + }, + { + "name": "godot_pool_color_array_new", + "return_type": "void", + "arguments": [ + ["godot_pool_color_array *", "r_dest"] + ] + }, + { + "name": "godot_pool_color_array_new_copy", + "return_type": "void", + "arguments": [ + ["godot_pool_color_array *", "r_dest"], + ["const godot_pool_color_array *", "p_src"] + ] + }, + { + "name": "godot_pool_color_array_new_with_array", + "return_type": "void", + "arguments": [ + ["godot_pool_color_array *", "r_dest"], + ["const godot_array *", "p_a"] + ] + }, + { + "name": "godot_pool_color_array_append", + "return_type": "void", + "arguments": [ + ["godot_pool_color_array *", "p_self"], + ["const godot_color *", "p_data"] + ] + }, + { + "name": "godot_pool_color_array_append_array", + "return_type": "void", + "arguments": [ + ["godot_pool_color_array *", "p_self"], + ["const godot_pool_color_array *", "p_array"] + ] + }, + { + "name": "godot_pool_color_array_insert", + "return_type": "godot_error", + "arguments": [ + ["godot_pool_color_array *", "p_self"], + ["const godot_int", "p_idx"], + ["const godot_color *", "p_data"] + ] + }, + { + "name": "godot_pool_color_array_invert", + "return_type": "void", + "arguments": [ + ["godot_pool_color_array *", "p_self"] + ] + }, + { + "name": "godot_pool_color_array_push_back", + "return_type": "void", + "arguments": [ + ["godot_pool_color_array *", "p_self"], + ["const godot_color *", "p_data"] + ] + }, + { + "name": "godot_pool_color_array_remove", + "return_type": "void", + "arguments": [ + ["godot_pool_color_array *", "p_self"], + ["const godot_int", "p_idx"] + ] + }, + { + "name": "godot_pool_color_array_resize", + "return_type": "void", + "arguments": [ + ["godot_pool_color_array *", "p_self"], + ["const godot_int", "p_size"] + ] + }, + { + "name": "godot_pool_color_array_set", + "return_type": "void", + "arguments": [ + ["godot_pool_color_array *", "p_self"], + ["const godot_int", "p_idx"], + ["const godot_color *", "p_data"] + ] + }, + { + "name": "godot_pool_color_array_get", + "return_type": "godot_color", + "arguments": [ + ["const godot_pool_color_array *", "p_self"], + ["const godot_int", "p_idx"] + ] + }, + { + "name": "godot_pool_color_array_size", + "return_type": "godot_int", + "arguments": [ + ["const godot_pool_color_array *", "p_self"] + ] + }, + { + "name": "godot_pool_color_array_destroy", + "return_type": "void", + "arguments": [ + ["godot_pool_color_array *", "p_self"] + ] + }, + { + "name": "godot_array_new", + "return_type": "void", + "arguments": [ + ["godot_array *", "r_dest"] + ] + }, + { + "name": "godot_array_new_copy", + "return_type": "void", + "arguments": [ + ["godot_array *", "r_dest"], + ["const godot_array *", "p_src"] + ] + }, + { + "name": "godot_array_new_pool_color_array", + "return_type": "void", + "arguments": [ + ["godot_array *", "r_dest"], + ["const godot_pool_color_array *", "p_pca"] + ] + }, + { + "name": "godot_array_new_pool_vector3_array", + "return_type": "void", + "arguments": [ + ["godot_array *", "r_dest"], + ["const godot_pool_vector3_array *", "p_pv3a"] + ] + }, + { + "name": "godot_array_new_pool_vector2_array", + "return_type": "void", + "arguments": [ + ["godot_array *", "r_dest"], + ["const godot_pool_vector2_array *", "p_pv2a"] + ] + }, + { + "name": "godot_array_new_pool_string_array", + "return_type": "void", + "arguments": [ + ["godot_array *", "r_dest"], + ["const godot_pool_string_array *", "p_psa"] + ] + }, + { + "name": "godot_array_new_pool_real_array", + "return_type": "void", + "arguments": [ + ["godot_array *", "r_dest"], + ["const godot_pool_real_array *", "p_pra"] + ] + }, + { + "name": "godot_array_new_pool_int_array", + "return_type": "void", + "arguments": [ + ["godot_array *", "r_dest"], + ["const godot_pool_int_array *", "p_pia"] + ] + }, + { + "name": "godot_array_new_pool_byte_array", + "return_type": "void", + "arguments": [ + ["godot_array *", "r_dest"], + ["const godot_pool_byte_array *", "p_pba"] + ] + }, + { + "name": "godot_array_set", + "return_type": "void", + "arguments": [ + ["godot_array *", "p_self"], + ["const godot_int", "p_idx"], + ["const godot_variant *", "p_value"] + ] + }, + { + "name": "godot_array_get", + "return_type": "godot_variant", + "arguments": [ + ["const godot_array *", "p_self"], + ["const godot_int", "p_idx"] + ] + }, + { + "name": "godot_array_operator_index", + "return_type": "godot_variant *", + "arguments": [ + ["godot_array *", "p_self"], + ["const godot_int", "p_idx"] + ] + }, + { + "name": "godot_array_append", + "return_type": "void", + "arguments": [ + ["godot_array *", "p_self"], + ["const godot_variant *", "p_value"] + ] + }, + { + "name": "godot_array_clear", + "return_type": "void", + "arguments": [ + ["godot_array *", "p_self"] + ] + }, + { + "name": "godot_array_count", + "return_type": "godot_int", + "arguments": [ + ["const godot_array *", "p_self"], + ["const godot_variant *", "p_value"] + ] + }, + { + "name": "godot_array_empty", + "return_type": "godot_bool", + "arguments": [ + ["const godot_array *", "p_self"] + ] + }, + { + "name": "godot_array_erase", + "return_type": "void", + "arguments": [ + ["godot_array *", "p_self"], + ["const godot_variant *", "p_value"] + ] + }, + { + "name": "godot_array_front", + "return_type": "godot_variant", + "arguments": [ + ["const godot_array *", "p_self"] + ] + }, + { + "name": "godot_array_back", + "return_type": "godot_variant", + "arguments": [ + ["const godot_array *", "p_self"] + ] + }, + { + "name": "godot_array_find", + "return_type": "godot_int", + "arguments": [ + ["const godot_array *", "p_self"], + ["const godot_variant *", "p_what"], + ["const godot_int", "p_from"] + ] + }, + { + "name": "godot_array_find_last", + "return_type": "godot_int", + "arguments": [ + ["const godot_array *", "p_self"], + ["const godot_variant *", "p_what"] + ] + }, + { + "name": "godot_array_has", + "return_type": "godot_bool", + "arguments": [ + ["const godot_array *", "p_self"], + ["const godot_variant *", "p_value"] + ] + }, + { + "name": "godot_array_hash", + "return_type": "godot_int", + "arguments": [ + ["const godot_array *", "p_self"] + ] + }, + { + "name": "godot_array_insert", + "return_type": "void", + "arguments": [ + ["godot_array *", "p_self"], + ["const godot_int", "p_pos"], + ["const godot_variant *", "p_value"] + ] + }, + { + "name": "godot_array_invert", + "return_type": "void", + "arguments": [ + ["godot_array *", "p_self"] + ] + }, + { + "name": "godot_array_pop_back", + "return_type": "godot_variant", + "arguments": [ + ["godot_array *", "p_self"] + ] + }, + { + "name": "godot_array_pop_front", + "return_type": "godot_variant", + "arguments": [ + ["godot_array *", "p_self"] + ] + }, + { + "name": "godot_array_push_back", + "return_type": "void", + "arguments": [ + ["godot_array *", "p_self"], + ["const godot_variant *", "p_value"] + ] + }, + { + "name": "godot_array_push_front", + "return_type": "void", + "arguments": [ + ["godot_array *", "p_self"], + ["const godot_variant *", "p_value"] + ] + }, + { + "name": "godot_array_remove", + "return_type": "void", + "arguments": [ + ["godot_array *", "p_self"], + ["const godot_int", "p_idx"] + ] + }, + { + "name": "godot_array_resize", + "return_type": "void", + "arguments": [ + ["godot_array *", "p_self"], + ["const godot_int", "p_size"] + ] + }, + { + "name": "godot_array_rfind", + "return_type": "godot_int", + "arguments": [ + ["const godot_array *", "p_self"], + ["const godot_variant *", "p_what"], + ["const godot_int", "p_from"] + ] + }, + { + "name": "godot_array_size", + "return_type": "godot_int", + "arguments": [ + ["const godot_array *", "p_self"] + ] + }, + { + "name": "godot_array_sort", + "return_type": "void", + "arguments": [ + ["godot_array *", "p_self"] + ] + }, + { + "name": "godot_array_sort_custom", + "return_type": "void", + "arguments": [ + ["godot_array *", "p_self"], + ["godot_object *", "p_obj"], + ["const godot_string *", "p_func"] + ] + }, + { + "name": "godot_array_destroy", + "return_type": "void", + "arguments": [ + ["godot_array *", "p_self"] + ] + }, + { + "name": "godot_dictionary_new", + "return_type": "void", + "arguments": [ + ["godot_dictionary *", "r_dest"] + ] + }, + { + "name": "godot_dictionary_new_copy", + "return_type": "void", + "arguments": [ + ["godot_dictionary *", "r_dest"], + ["const godot_dictionary *", "p_src"] + ] + }, + { + "name": "godot_dictionary_destroy", + "return_type": "void", + "arguments": [ + ["godot_dictionary *", "p_self"] + ] + }, + { + "name": "godot_dictionary_size", + "return_type": "godot_int", + "arguments": [ + ["const godot_dictionary *", "p_self"] + ] + }, + { + "name": "godot_dictionary_empty", + "return_type": "godot_bool", + "arguments": [ + ["const godot_dictionary *", "p_self"] + ] + }, + { + "name": "godot_dictionary_clear", + "return_type": "void", + "arguments": [ + ["godot_dictionary *", "p_self"] + ] + }, + { + "name": "godot_dictionary_has", + "return_type": "godot_bool", + "arguments": [ + ["const godot_dictionary *", "p_self"], + ["const godot_variant *", "p_key"] + ] + }, + { + "name": "godot_dictionary_has_all", + "return_type": "godot_bool", + "arguments": [ + ["const godot_dictionary *", "p_self"], + ["const godot_array *", "p_keys"] + ] + }, + { + "name": "godot_dictionary_erase", + "return_type": "void", + "arguments": [ + ["godot_dictionary *", "p_self"], + ["const godot_variant *", "p_key"] + ] + }, + { + "name": "godot_dictionary_hash", + "return_type": "godot_int", + "arguments": [ + ["const godot_dictionary *", "p_self"] + ] + }, + { + "name": "godot_dictionary_keys", + "return_type": "godot_array", + "arguments": [ + ["const godot_dictionary *", "p_self"] + ] + }, + { + "name": "godot_dictionary_values", + "return_type": "godot_array", + "arguments": [ + ["const godot_dictionary *", "p_self"] + ] + }, + { + "name": "godot_dictionary_get", + "return_type": "godot_variant", + "arguments": [ + ["const godot_dictionary *", "p_self"], + ["const godot_variant *", "p_key"] + ] + }, + { + "name": "godot_dictionary_set", + "return_type": "void", + "arguments": [ + ["godot_dictionary *", "p_self"], + ["const godot_variant *", "p_key"], + ["const godot_variant *", "p_value"] + ] + }, + { + "name": "godot_dictionary_operator_index", + "return_type": "godot_variant *", + "arguments": [ + ["godot_dictionary *", "p_self"], + ["const godot_variant *", "p_key"] + ] + }, + { + "name": "godot_dictionary_next", + "return_type": "godot_variant *", + "arguments": [ + ["const godot_dictionary *", "p_self"], + ["const godot_variant *", "p_key"] + ] + }, + { + "name": "godot_dictionary_operator_equal", + "return_type": "godot_bool", + "arguments": [ + ["const godot_dictionary *", "p_self"], + ["const godot_dictionary *", "p_b"] + ] + }, + { + "name": "godot_dictionary_to_json", + "return_type": "godot_string", + "arguments": [ + ["const godot_dictionary *", "p_self"] + ] + }, + { + "name": "godot_node_path_new", + "return_type": "void", + "arguments": [ + ["godot_node_path *", "r_dest"], + ["const godot_string *", "p_from"] + ] + }, + { + "name": "godot_node_path_new_copy", + "return_type": "void", + "arguments": [ + ["godot_node_path *", "r_dest"], + ["const godot_node_path *", "p_src"] + ] + }, + { + "name": "godot_node_path_destroy", + "return_type": "void", + "arguments": [ + ["godot_node_path *", "p_self"] + ] + }, + { + "name": "godot_node_path_as_string", + "return_type": "godot_string", + "arguments": [ + ["const godot_node_path *", "p_self"] + ] + }, + { + "name": "godot_node_path_is_absolute", + "return_type": "godot_bool", + "arguments": [ + ["const godot_node_path *", "p_self"] + ] + }, + { + "name": "godot_node_path_get_name_count", + "return_type": "godot_int", + "arguments": [ + ["const godot_node_path *", "p_self"] + ] + }, + { + "name": "godot_node_path_get_name", + "return_type": "godot_string", + "arguments": [ + ["const godot_node_path *", "p_self"], + ["const godot_int", "p_idx"] + ] + }, + { + "name": "godot_node_path_get_subname_count", + "return_type": "godot_int", + "arguments": [ + ["const godot_node_path *", "p_self"] + ] + }, + { + "name": "godot_node_path_get_subname", + "return_type": "godot_string", + "arguments": [ + ["const godot_node_path *", "p_self"], + ["const godot_int", "p_idx"] + ] + }, + { + "name": "godot_node_path_get_property", + "return_type": "godot_string", + "arguments": [ + ["const godot_node_path *", "p_self"] + ] + }, + { + "name": "godot_node_path_is_empty", + "return_type": "godot_bool", + "arguments": [ + ["const godot_node_path *", "p_self"] + ] + }, + { + "name": "godot_node_path_operator_equal", + "return_type": "godot_bool", + "arguments": [ + ["const godot_node_path *", "p_self"], + ["const godot_node_path *", "p_b"] + ] + }, + { + "name": "godot_plane_new_with_reals", + "return_type": "void", + "arguments": [ + ["godot_plane *", "r_dest"], + ["const godot_real", "p_a"], + ["const godot_real", "p_b"], + ["const godot_real", "p_c"], + ["const godot_real", "p_d"] + ] + }, + { + "name": "godot_plane_new_with_vectors", + "return_type": "void", + "arguments": [ + ["godot_plane *", "r_dest"], + ["const godot_vector3 *", "p_v1"], + ["const godot_vector3 *", "p_v2"], + ["const godot_vector3 *", "p_v3"] + ] + }, + { + "name": "godot_plane_new_with_normal", + "return_type": "void", + "arguments": [ + ["godot_plane *", "r_dest"], + ["const godot_vector3 *", "p_normal"], + ["const godot_real", "p_d"] + ] + }, + { + "name": "godot_plane_as_string", + "return_type": "godot_string", + "arguments": [ + ["const godot_plane *", "p_self"] + ] + }, + { + "name": "godot_plane_normalized", + "return_type": "godot_plane", + "arguments": [ + ["const godot_plane *", "p_self"] + ] + }, + { + "name": "godot_plane_center", + "return_type": "godot_vector3", + "arguments": [ + ["const godot_plane *", "p_self"] + ] + }, + { + "name": "godot_plane_get_any_point", + "return_type": "godot_vector3", + "arguments": [ + ["const godot_plane *", "p_self"] + ] + }, + { + "name": "godot_plane_is_point_over", + "return_type": "godot_bool", + "arguments": [ + ["const godot_plane *", "p_self"], + ["const godot_vector3 *", "p_point"] + ] + }, + { + "name": "godot_plane_distance_to", + "return_type": "godot_real", + "arguments": [ + ["const godot_plane *", "p_self"], + ["const godot_vector3 *", "p_point"] + ] + }, + { + "name": "godot_plane_has_point", + "return_type": "godot_bool", + "arguments": [ + ["const godot_plane *", "p_self"], + ["const godot_vector3 *", "p_point"], + ["const godot_real", "p_epsilon"] + ] + }, + { + "name": "godot_plane_project", + "return_type": "godot_vector3", + "arguments": [ + ["const godot_plane *", "p_self"], + ["const godot_vector3 *", "p_point"] + ] + }, + { + "name": "godot_plane_intersect_3", + "return_type": "godot_bool", + "arguments": [ + ["const godot_plane *", "p_self"], + ["godot_vector3 *", "r_dest"], + ["const godot_plane *", "p_b"], + ["const godot_plane *", "p_c"] + ] + }, + { + "name": "godot_plane_intersects_ray", + "return_type": "godot_bool", + "arguments": [ + ["const godot_plane *", "p_self"], + ["godot_vector3 *", "r_dest"], + ["const godot_vector3 *", "p_from"], + ["const godot_vector3 *", "p_dir"] + ] + }, + { + "name": "godot_plane_intersects_segment", + "return_type": "godot_bool", + "arguments": [ + ["const godot_plane *", "p_self"], + ["godot_vector3 *", "r_dest"], + ["const godot_vector3 *", "p_begin"], + ["const godot_vector3 *", "p_end"] + ] + }, + { + "name": "godot_plane_operator_neg", + "return_type": "godot_plane", + "arguments": [ + ["const godot_plane *", "p_self"] + ] + }, + { + "name": "godot_plane_operator_equal", + "return_type": "godot_bool", + "arguments": [ + ["const godot_plane *", "p_self"], + ["const godot_plane *", "p_b"] + ] + }, + { + "name": "godot_plane_set_normal", + "return_type": "void", + "arguments": [ + ["godot_plane *", "p_self"], + ["const godot_vector3 *", "p_normal"] + ] + }, + { + "name": "godot_plane_get_normal", + "return_type": "godot_vector3", + "arguments": [ + ["const godot_plane *", "p_self"] + ] + }, + { + "name": "godot_plane_get_d", + "return_type": "godot_real", + "arguments": [ + ["const godot_plane *", "p_self"] + ] + }, + { + "name": "godot_plane_set_d", + "return_type": "void", + "arguments": [ + ["godot_plane *", "p_self"], + ["const godot_real", "p_d"] + ] + }, + { + "name": "godot_rect2_new_with_position_and_size", + "return_type": "void", + "arguments": [ + ["godot_rect2 *", "r_dest"], + ["const godot_vector2 *", "p_pos"], + ["const godot_vector2 *", "p_size"] + ] + }, + { + "name": "godot_rect2_new", + "return_type": "void", + "arguments": [ + ["godot_rect2 *", "r_dest"], + ["const godot_real", "p_x"], + ["const godot_real", "p_y"], + ["const godot_real", "p_width"], + ["const godot_real", "p_height"] + ] + }, + { + "name": "godot_rect2_as_string", + "return_type": "godot_string", + "arguments": [ + ["const godot_rect2 *", "p_self"] + ] + }, + { + "name": "godot_rect2_get_area", + "return_type": "godot_real", + "arguments": [ + ["const godot_rect2 *", "p_self"] + ] + }, + { + "name": "godot_rect2_intersects", + "return_type": "godot_bool", + "arguments": [ + ["const godot_rect2 *", "p_self"], + ["const godot_rect2 *", "p_b"] + ] + }, + { + "name": "godot_rect2_encloses", + "return_type": "godot_bool", + "arguments": [ + ["const godot_rect2 *", "p_self"], + ["const godot_rect2 *", "p_b"] + ] + }, + { + "name": "godot_rect2_has_no_area", + "return_type": "godot_bool", + "arguments": [ + ["const godot_rect2 *", "p_self"] + ] + }, + { + "name": "godot_rect2_clip", + "return_type": "godot_rect2", + "arguments": [ + ["const godot_rect2 *", "p_self"], + ["const godot_rect2 *", "p_b"] + ] + }, + { + "name": "godot_rect2_merge", + "return_type": "godot_rect2", + "arguments": [ + ["const godot_rect2 *", "p_self"], + ["const godot_rect2 *", "p_b"] + ] + }, + { + "name": "godot_rect2_has_point", + "return_type": "godot_bool", + "arguments": [ + ["const godot_rect2 *", "p_self"], + ["const godot_vector2 *", "p_point"] + ] + }, + { + "name": "godot_rect2_grow", + "return_type": "godot_rect2", + "arguments": [ + ["const godot_rect2 *", "p_self"], + ["const godot_real", "p_by"] + ] + }, + { + "name": "godot_rect2_expand", + "return_type": "godot_rect2", + "arguments": [ + ["const godot_rect2 *", "p_self"], + ["const godot_vector2 *", "p_to"] + ] + }, + { + "name": "godot_rect2_operator_equal", + "return_type": "godot_bool", + "arguments": [ + ["const godot_rect2 *", "p_self"], + ["const godot_rect2 *", "p_b"] + ] + }, + { + "name": "godot_rect2_get_position", + "return_type": "godot_vector2", + "arguments": [ + ["const godot_rect2 *", "p_self"] + ] + }, + { + "name": "godot_rect2_get_size", + "return_type": "godot_vector2", + "arguments": [ + ["const godot_rect2 *", "p_self"] + ] + }, + { + "name": "godot_rect2_set_position", + "return_type": "void", + "arguments": [ + ["godot_rect2 *", "p_self"], + ["const godot_vector2 *", "p_pos"] + ] + }, + { + "name": "godot_rect2_set_size", + "return_type": "void", + "arguments": [ + ["godot_rect2 *", "p_self"], + ["const godot_vector2 *", "p_size"] + ] + }, + { + "name": "godot_rect3_new", + "return_type": "void", + "arguments": [ + ["godot_rect3 *", "r_dest"], + ["const godot_vector3 *", "p_pos"], + ["const godot_vector3 *", "p_size"] + ] + }, + { + "name": "godot_rect3_get_position", + "return_type": "godot_vector3", + "arguments": [ + ["const godot_rect3 *", "p_self"] + ] + }, + { + "name": "godot_rect3_set_position", + "return_type": "void", + "arguments": [ + ["const godot_rect3 *", "p_self"], + ["const godot_vector3 *", "p_v"] + ] + }, + { + "name": "godot_rect3_get_size", + "return_type": "godot_vector3", + "arguments": [ + ["const godot_rect3 *", "p_self"] + ] + }, + { + "name": "godot_rect3_set_size", + "return_type": "void", + "arguments": [ + ["const godot_rect3 *", "p_self"], + ["const godot_vector3 *", "p_v"] + ] + }, + { + "name": "godot_rect3_as_string", + "return_type": "godot_string", + "arguments": [ + ["const godot_rect3 *", "p_self"] + ] + }, + { + "name": "godot_rect3_get_area", + "return_type": "godot_real", + "arguments": [ + ["const godot_rect3 *", "p_self"] + ] + }, + { + "name": "godot_rect3_has_no_area", + "return_type": "godot_bool", + "arguments": [ + ["const godot_rect3 *", "p_self"] + ] + }, + { + "name": "godot_rect3_has_no_surface", + "return_type": "godot_bool", + "arguments": [ + ["const godot_rect3 *", "p_self"] + ] + }, + { + "name": "godot_rect3_intersects", + "return_type": "godot_bool", + "arguments": [ + ["const godot_rect3 *", "p_self"], + ["const godot_rect3 *", "p_with"] + ] + }, + { + "name": "godot_rect3_encloses", + "return_type": "godot_bool", + "arguments": [ + ["const godot_rect3 *", "p_self"], + ["const godot_rect3 *", "p_with"] + ] + }, + { + "name": "godot_rect3_merge", + "return_type": "godot_rect3", + "arguments": [ + ["const godot_rect3 *", "p_self"], + ["const godot_rect3 *", "p_with"] + ] + }, + { + "name": "godot_rect3_intersection", + "return_type": "godot_rect3", + "arguments": [ + ["const godot_rect3 *", "p_self"], + ["const godot_rect3 *", "p_with"] + ] + }, + { + "name": "godot_rect3_intersects_plane", + "return_type": "godot_bool", + "arguments": [ + ["const godot_rect3 *", "p_self"], + ["const godot_plane *", "p_plane"] + ] + }, + { + "name": "godot_rect3_intersects_segment", + "return_type": "godot_bool", + "arguments": [ + ["const godot_rect3 *", "p_self"], + ["const godot_vector3 *", "p_from"], + ["const godot_vector3 *", "p_to"] + ] + }, + { + "name": "godot_rect3_has_point", + "return_type": "godot_bool", + "arguments": [ + ["const godot_rect3 *", "p_self"], + ["const godot_vector3 *", "p_point"] + ] + }, + { + "name": "godot_rect3_get_support", + "return_type": "godot_vector3", + "arguments": [ + ["const godot_rect3 *", "p_self"], + ["const godot_vector3 *", "p_dir"] + ] + }, + { + "name": "godot_rect3_get_longest_axis", + "return_type": "godot_vector3", + "arguments": [ + ["const godot_rect3 *", "p_self"] + ] + }, + { + "name": "godot_rect3_get_longest_axis_index", + "return_type": "godot_int", + "arguments": [ + ["const godot_rect3 *", "p_self"] + ] + }, + { + "name": "godot_rect3_get_longest_axis_size", + "return_type": "godot_real", + "arguments": [ + ["const godot_rect3 *", "p_self"] + ] + }, + { + "name": "godot_rect3_get_shortest_axis", + "return_type": "godot_vector3", + "arguments": [ + ["const godot_rect3 *", "p_self"] + ] + }, + { + "name": "godot_rect3_get_shortest_axis_index", + "return_type": "godot_int", + "arguments": [ + ["const godot_rect3 *", "p_self"] + ] + }, + { + "name": "godot_rect3_get_shortest_axis_size", + "return_type": "godot_real", + "arguments": [ + ["const godot_rect3 *", "p_self"] + ] + }, + { + "name": "godot_rect3_expand", + "return_type": "godot_rect3", + "arguments": [ + ["const godot_rect3 *", "p_self"], + ["const godot_vector3 *", "p_to_point"] + ] + }, + { + "name": "godot_rect3_grow", + "return_type": "godot_rect3", + "arguments": [ + ["const godot_rect3 *", "p_self"], + ["const godot_real", "p_by"] + ] + }, + { + "name": "godot_rect3_get_endpoint", + "return_type": "godot_vector3", + "arguments": [ + ["const godot_rect3 *", "p_self"], + ["const godot_int", "p_idx"] + ] + }, + { + "name": "godot_rect3_operator_equal", + "return_type": "godot_bool", + "arguments": [ + ["const godot_rect3 *", "p_self"], + ["const godot_rect3 *", "p_b"] + ] + }, + { + "name": "godot_rid_new", + "return_type": "void", + "arguments": [ + ["godot_rid *", "r_dest"] + ] + }, + { + "name": "godot_rid_get_id", + "return_type": "godot_int", + "arguments": [ + ["const godot_rid *", "p_self"] + ] + }, + { + "name": "godot_rid_new_with_resource", + "return_type": "void", + "arguments": [ + ["godot_rid *", "r_dest"], + ["const godot_object *", "p_from"] + ] + }, + { + "name": "godot_rid_operator_equal", + "return_type": "godot_bool", + "arguments": [ + ["const godot_rid *", "p_self"], + ["const godot_rid *", "p_b"] + ] + }, + { + "name": "godot_rid_operator_less", + "return_type": "godot_bool", + "arguments": [ + ["const godot_rid *", "p_self"], + ["const godot_rid *", "p_b"] + ] + }, + { + "name": "godot_transform_new_with_axis_origin", + "return_type": "void", + "arguments": [ + ["godot_transform *", "r_dest"], + ["const godot_vector3 *", "p_x_axis"], + ["const godot_vector3 *", "p_y_axis"], + ["const godot_vector3 *", "p_z_axis"], + ["const godot_vector3 *", "p_origin"] + ] + }, + { + "name": "godot_transform_new", + "return_type": "void", + "arguments": [ + ["godot_transform *", "r_dest"], + ["const godot_basis *", "p_basis"], + ["const godot_vector3 *", "p_origin"] + ] + }, + { + "name": "godot_transform_get_basis", + "return_type": "godot_basis", + "arguments": [ + ["const godot_transform *", "p_self"] + ] + }, + { + "name": "godot_transform_set_basis", + "return_type": "void", + "arguments": [ + ["godot_transform *", "p_self"], + ["godot_basis *", "p_v"] + ] + }, + { + "name": "godot_transform_get_origin", + "return_type": "godot_vector3", + "arguments": [ + ["const godot_transform *", "p_self"] + ] + }, + { + "name": "godot_transform_set_origin", + "return_type": "void", + "arguments": [ + ["godot_transform *", "p_self"], + ["godot_vector3 *", "p_v"] + ] + }, + { + "name": "godot_transform_as_string", + "return_type": "godot_string", + "arguments": [ + ["const godot_transform *", "p_self"] + ] + }, + { + "name": "godot_transform_inverse", + "return_type": "godot_transform", + "arguments": [ + ["const godot_transform *", "p_self"] + ] + }, + { + "name": "godot_transform_affine_inverse", + "return_type": "godot_transform", + "arguments": [ + ["const godot_transform *", "p_self"] + ] + }, + { + "name": "godot_transform_orthonormalized", + "return_type": "godot_transform", + "arguments": [ + ["const godot_transform *", "p_self"] + ] + }, + { + "name": "godot_transform_rotated", + "return_type": "godot_transform", + "arguments": [ + ["const godot_transform *", "p_self"], + ["const godot_vector3 *", "p_axis"], + ["const godot_real", "p_phi"] + ] + }, + { + "name": "godot_transform_scaled", + "return_type": "godot_transform", + "arguments": [ + ["const godot_transform *", "p_self"], + ["const godot_vector3 *", "p_scale"] + ] + }, + { + "name": "godot_transform_translated", + "return_type": "godot_transform", + "arguments": [ + ["const godot_transform *", "p_self"], + ["const godot_vector3 *", "p_ofs"] + ] + }, + { + "name": "godot_transform_looking_at", + "return_type": "godot_transform", + "arguments": [ + ["const godot_transform *", "p_self"], + ["const godot_vector3 *", "p_target"], + ["const godot_vector3 *", "p_up"] + ] + }, + { + "name": "godot_transform_xform_plane", + "return_type": "godot_plane", + "arguments": [ + ["const godot_transform *", "p_self"], + ["const godot_plane *", "p_v"] + ] + }, + { + "name": "godot_transform_xform_inv_plane", + "return_type": "godot_plane", + "arguments": [ + ["const godot_transform *", "p_self"], + ["const godot_plane *", "p_v"] + ] + }, + { + "name": "godot_transform_new_identity", + "return_type": "void", + "arguments": [ + ["godot_transform *", "r_dest"] + ] + }, + { + "name": "godot_transform_operator_equal", + "return_type": "godot_bool", + "arguments": [ + ["const godot_transform *", "p_self"], + ["const godot_transform *", "p_b"] + ] + }, + { + "name": "godot_transform_operator_multiply", + "return_type": "godot_transform", + "arguments": [ + ["const godot_transform *", "p_self"], + ["const godot_transform *", "p_b"] + ] + }, + { + "name": "godot_transform_xform_vector3", + "return_type": "godot_vector3", + "arguments": [ + ["const godot_transform *", "p_self"], + ["const godot_vector3 *", "p_v"] + ] + }, + { + "name": "godot_transform_xform_inv_vector3", + "return_type": "godot_vector3", + "arguments": [ + ["const godot_transform *", "p_self"], + ["const godot_vector3 *", "p_v"] + ] + }, + { + "name": "godot_transform_xform_rect3", + "return_type": "godot_rect3", + "arguments": [ + ["const godot_transform *", "p_self"], + ["const godot_rect3 *", "p_v"] + ] + }, + { + "name": "godot_transform_xform_inv_rect3", + "return_type": "godot_rect3", + "arguments": [ + ["const godot_transform *", "p_self"], + ["const godot_rect3 *", "p_v"] + ] + }, + { + "name": "godot_transform2d_new", + "return_type": "void", + "arguments": [ + ["godot_transform2d *", "r_dest"], + ["const godot_real", "p_rot"], + ["const godot_vector2 *", "p_pos"] + ] + }, + { + "name": "godot_transform2d_new_axis_origin", + "return_type": "void", + "arguments": [ + ["godot_transform2d *", "r_dest"], + ["const godot_vector2 *", "p_x_axis"], + ["const godot_vector2 *", "p_y_axis"], + ["const godot_vector2 *", "p_origin"] + ] + }, + { + "name": "godot_transform2d_as_string", + "return_type": "godot_string", + "arguments": [ + ["const godot_transform2d *", "p_self"] + ] + }, + { + "name": "godot_transform2d_inverse", + "return_type": "godot_transform2d", + "arguments": [ + ["const godot_transform2d *", "p_self"] + ] + }, + { + "name": "godot_transform2d_affine_inverse", + "return_type": "godot_transform2d", + "arguments": [ + ["const godot_transform2d *", "p_self"] + ] + }, + { + "name": "godot_transform2d_get_rotation", + "return_type": "godot_real", + "arguments": [ + ["const godot_transform2d *", "p_self"] + ] + }, + { + "name": "godot_transform2d_get_origin", + "return_type": "godot_vector2", + "arguments": [ + ["const godot_transform2d *", "p_self"] + ] + }, + { + "name": "godot_transform2d_get_scale", + "return_type": "godot_vector2", + "arguments": [ + ["const godot_transform2d *", "p_self"] + ] + }, + { + "name": "godot_transform2d_orthonormalized", + "return_type": "godot_transform2d", + "arguments": [ + ["const godot_transform2d *", "p_self"] + ] + }, + { + "name": "godot_transform2d_rotated", + "return_type": "godot_transform2d", + "arguments": [ + ["const godot_transform2d *", "p_self"], + ["const godot_real", "p_phi"] + ] + }, + { + "name": "godot_transform2d_scaled", + "return_type": "godot_transform2d", + "arguments": [ + ["const godot_transform2d *", "p_self"], + ["const godot_vector2 *", "p_scale"] + ] + }, + { + "name": "godot_transform2d_translated", + "return_type": "godot_transform2d", + "arguments": [ + ["const godot_transform2d *", "p_self"], + ["const godot_vector2 *", "p_offset"] + ] + }, + { + "name": "godot_transform2d_xform_vector2", + "return_type": "godot_vector2", + "arguments": [ + ["const godot_transform2d *", "p_self"], + ["const godot_vector2 *", "p_v"] + ] + }, + { + "name": "godot_transform2d_xform_inv_vector2", + "return_type": "godot_vector2", + "arguments": [ + ["const godot_transform2d *", "p_self"], + ["const godot_vector2 *", "p_v"] + ] + }, + { + "name": "godot_transform2d_basis_xform_vector2", + "return_type": "godot_vector2", + "arguments": [ + ["const godot_transform2d *", "p_self"], + ["const godot_vector2 *", "p_v"] + ] + }, + { + "name": "godot_transform2d_basis_xform_inv_vector2", + "return_type": "godot_vector2", + "arguments": [ + ["const godot_transform2d *", "p_self"], + ["const godot_vector2 *", "p_v"] + ] + }, + { + "name": "godot_transform2d_interpolate_with", + "return_type": "godot_transform2d", + "arguments": [ + ["const godot_transform2d *", "p_self"], + ["const godot_transform2d *", "p_m"], + ["const godot_real", "p_c"] + ] + }, + { + "name": "godot_transform2d_operator_equal", + "return_type": "godot_bool", + "arguments": [ + ["const godot_transform2d *", "p_self"], + ["const godot_transform2d *", "p_b"] + ] + }, + { + "name": "godot_transform2d_operator_multiply", + "return_type": "godot_transform2d", + "arguments": [ + ["const godot_transform2d *", "p_self"], + ["const godot_transform2d *", "p_b"] + ] + }, + { + "name": "godot_transform2d_new_identity", + "return_type": "void", + "arguments": [ + ["godot_transform2d *", "r_dest"] + ] + }, + { + "name": "godot_transform2d_xform_rect2", + "return_type": "godot_rect2", + "arguments": [ + ["const godot_transform2d *", "p_self"], + ["const godot_rect2 *", "p_v"] + ] + }, + { + "name": "godot_transform2d_xform_inv_rect2", + "return_type": "godot_rect2", + "arguments": [ + ["const godot_transform2d *", "p_self"], + ["const godot_rect2 *", "p_v"] + ] + }, + { + "name": "godot_variant_get_type", + "return_type": "godot_variant_type", + "arguments": [ + ["const godot_variant *", "p_v"] + ] + }, + { + "name": "godot_variant_new_copy", + "return_type": "void", + "arguments": [ + ["godot_variant *", "r_dest"], + ["const godot_variant *", "p_src"] + ] + }, + { + "name": "godot_variant_new_nil", + "return_type": "void", + "arguments": [ + ["godot_variant *", "r_dest"] + ] + }, + { + "name": "godot_variant_new_bool", + "return_type": "void", + "arguments": [ + ["godot_variant *", "p_v"], + ["const godot_bool", "p_b"] + ] + }, + { + "name": "godot_variant_new_uint", + "return_type": "void", + "arguments": [ + ["godot_variant *", "r_dest"], + ["const uint64_t", "p_i"] + ] + }, + { + "name": "godot_variant_new_int", + "return_type": "void", + "arguments": [ + ["godot_variant *", "r_dest"], + ["const int64_t", "p_i"] + ] + }, + { + "name": "godot_variant_new_real", + "return_type": "void", + "arguments": [ + ["godot_variant *", "r_dest"], + ["const double", "p_r"] + ] + }, + { + "name": "godot_variant_new_string", + "return_type": "void", + "arguments": [ + ["godot_variant *", "r_dest"], + ["const godot_string *", "p_s"] + ] + }, + { + "name": "godot_variant_new_vector2", + "return_type": "void", + "arguments": [ + ["godot_variant *", "r_dest"], + ["const godot_vector2 *", "p_v2"] + ] + }, + { + "name": "godot_variant_new_rect2", + "return_type": "void", + "arguments": [ + ["godot_variant *", "r_dest"], + ["const godot_rect2 *", "p_rect2"] + ] + }, + { + "name": "godot_variant_new_vector3", + "return_type": "void", + "arguments": [ + ["godot_variant *", "r_dest"], + ["const godot_vector3 *", "p_v3"] + ] + }, + { + "name": "godot_variant_new_transform2d", + "return_type": "void", + "arguments": [ + ["godot_variant *", "r_dest"], + ["const godot_transform2d *", "p_t2d"] + ] + }, + { + "name": "godot_variant_new_plane", + "return_type": "void", + "arguments": [ + ["godot_variant *", "r_dest"], + ["const godot_plane *", "p_plane"] + ] + }, + { + "name": "godot_variant_new_quat", + "return_type": "void", + "arguments": [ + ["godot_variant *", "r_dest"], + ["const godot_quat *", "p_quat"] + ] + }, + { + "name": "godot_variant_new_rect3", + "return_type": "void", + "arguments": [ + ["godot_variant *", "r_dest"], + ["const godot_rect3 *", "p_rect3"] + ] + }, + { + "name": "godot_variant_new_basis", + "return_type": "void", + "arguments": [ + ["godot_variant *", "r_dest"], + ["const godot_basis *", "p_basis"] + ] + }, + { + "name": "godot_variant_new_transform", + "return_type": "void", + "arguments": [ + ["godot_variant *", "r_dest"], + ["const godot_transform *", "p_trans"] + ] + }, + { + "name": "godot_variant_new_color", + "return_type": "void", + "arguments": [ + ["godot_variant *", "r_dest"], + ["const godot_color *", "p_color"] + ] + }, + { + "name": "godot_variant_new_node_path", + "return_type": "void", + "arguments": [ + ["godot_variant *", "r_dest"], + ["const godot_node_path *", "p_np"] + ] + }, + { + "name": "godot_variant_new_rid", + "return_type": "void", + "arguments": [ + ["godot_variant *", "r_dest"], + ["const godot_rid *", "p_rid"] + ] + }, + { + "name": "godot_variant_new_object", + "return_type": "void", + "arguments": [ + ["godot_variant *", "r_dest"], + ["const godot_object *", "p_obj"] + ] + }, + { + "name": "godot_variant_new_dictionary", + "return_type": "void", + "arguments": [ + ["godot_variant *", "r_dest"], + ["const godot_dictionary *", "p_dict"] + ] + }, + { + "name": "godot_variant_new_array", + "return_type": "void", + "arguments": [ + ["godot_variant *", "r_dest"], + ["const godot_array *", "p_arr"] + ] + }, + { + "name": "godot_variant_new_pool_byte_array", + "return_type": "void", + "arguments": [ + ["godot_variant *", "r_dest"], + ["const godot_pool_byte_array *", "p_pba"] + ] + }, + { + "name": "godot_variant_new_pool_int_array", + "return_type": "void", + "arguments": [ + ["godot_variant *", "r_dest"], + ["const godot_pool_int_array *", "p_pia"] + ] + }, + { + "name": "godot_variant_new_pool_real_array", + "return_type": "void", + "arguments": [ + ["godot_variant *", "r_dest"], + ["const godot_pool_real_array *", "p_pra"] + ] + }, + { + "name": "godot_variant_new_pool_string_array", + "return_type": "void", + "arguments": [ + ["godot_variant *", "r_dest"], + ["const godot_pool_string_array *", "p_psa"] + ] + }, + { + "name": "godot_variant_new_pool_vector2_array", + "return_type": "void", + "arguments": [ + ["godot_variant *", "r_dest"], + ["const godot_pool_vector2_array *", "p_pv2a"] + ] + }, + { + "name": "godot_variant_new_pool_vector3_array", + "return_type": "void", + "arguments": [ + ["godot_variant *", "r_dest"], + ["const godot_pool_vector3_array *", "p_pv3a"] + ] + }, + { + "name": "godot_variant_new_pool_color_array", + "return_type": "void", + "arguments": [ + ["godot_variant *", "r_dest"], + ["const godot_pool_color_array *", "p_pca"] + ] + }, + { + "name": "godot_variant_as_bool", + "return_type": "godot_bool", + "arguments": [ + ["const godot_variant *", "p_self"] + ] + }, + { + "name": "godot_variant_as_uint", + "return_type": "uint64_t", + "arguments": [ + ["const godot_variant *", "p_self"] + ] + }, + { + "name": "godot_variant_as_int", + "return_type": "int64_t", + "arguments": [ + ["const godot_variant *", "p_self"] + ] + }, + { + "name": "godot_variant_as_real", + "return_type": "double", + "arguments": [ + ["const godot_variant *", "p_self"] + ] + }, + { + "name": "godot_variant_as_string", + "return_type": "godot_string", + "arguments": [ + ["const godot_variant *", "p_self"] + ] + }, + { + "name": "godot_variant_as_vector2", + "return_type": "godot_vector2", + "arguments": [ + ["const godot_variant *", "p_self"] + ] + }, + { + "name": "godot_variant_as_rect2", + "return_type": "godot_rect2", + "arguments": [ + ["const godot_variant *", "p_self"] + ] + }, + { + "name": "godot_variant_as_vector3", + "return_type": "godot_vector3", + "arguments": [ + ["const godot_variant *", "p_self"] + ] + }, + { + "name": "godot_variant_as_transform2d", + "return_type": "godot_transform2d", + "arguments": [ + ["const godot_variant *", "p_self"] + ] + }, + { + "name": "godot_variant_as_plane", + "return_type": "godot_plane", + "arguments": [ + ["const godot_variant *", "p_self"] + ] + }, + { + "name": "godot_variant_as_quat", + "return_type": "godot_quat", + "arguments": [ + ["const godot_variant *", "p_self"] + ] + }, + { + "name": "godot_variant_as_rect3", + "return_type": "godot_rect3", + "arguments": [ + ["const godot_variant *", "p_self"] + ] + }, + { + "name": "godot_variant_as_basis", + "return_type": "godot_basis", + "arguments": [ + ["const godot_variant *", "p_self"] + ] + }, + { + "name": "godot_variant_as_transform", + "return_type": "godot_transform", + "arguments": [ + ["const godot_variant *", "p_self"] + ] + }, + { + "name": "godot_variant_as_color", + "return_type": "godot_color", + "arguments": [ + ["const godot_variant *", "p_self"] + ] + }, + { + "name": "godot_variant_as_node_path", + "return_type": "godot_node_path", + "arguments": [ + ["const godot_variant *", "p_self"] + ] + }, + { + "name": "godot_variant_as_rid", + "return_type": "godot_rid", + "arguments": [ + ["const godot_variant *", "p_self"] + ] + }, + { + "name": "godot_variant_as_object", + "return_type": "godot_object *", + "arguments": [ + ["const godot_variant *", "p_self"] + ] + }, + { + "name": "godot_variant_as_dictionary", + "return_type": "godot_dictionary", + "arguments": [ + ["const godot_variant *", "p_self"] + ] + }, + { + "name": "godot_variant_as_array", + "return_type": "godot_array", + "arguments": [ + ["const godot_variant *", "p_self"] + ] + }, + { + "name": "godot_variant_as_pool_byte_array", + "return_type": "godot_pool_byte_array", + "arguments": [ + ["const godot_variant *", "p_self"] + ] + }, + { + "name": "godot_variant_as_pool_int_array", + "return_type": "godot_pool_int_array", + "arguments": [ + ["const godot_variant *", "p_self"] + ] + }, + { + "name": "godot_variant_as_pool_real_array", + "return_type": "godot_pool_real_array", + "arguments": [ + ["const godot_variant *", "p_self"] + ] + }, + { + "name": "godot_variant_as_pool_string_array", + "return_type": "godot_pool_string_array", + "arguments": [ + ["const godot_variant *", "p_self"] + ] + }, + { + "name": "godot_variant_as_pool_vector2_array", + "return_type": "godot_pool_vector2_array", + "arguments": [ + ["const godot_variant *", "p_self"] + ] + }, + { + "name": "godot_variant_as_pool_vector3_array", + "return_type": "godot_pool_vector3_array", + "arguments": [ + ["const godot_variant *", "p_self"] + ] + }, + { + "name": "godot_variant_as_pool_color_array", + "return_type": "godot_pool_color_array", + "arguments": [ + ["const godot_variant *", "p_self"] + ] + }, + { + "name": "godot_variant_call", + "return_type": "godot_variant", + "arguments": [ + ["godot_variant *", "p_self"], + ["const godot_string *", "p_method"], + ["const godot_variant **", "p_args"], + ["const godot_int", "p_argcount"], + ["godot_variant_call_error *", "r_error"] + ] + }, + { + "name": "godot_variant_has_method", + "return_type": "godot_bool", + "arguments": [ + ["const godot_variant *", "p_self"], + ["const godot_string *", "p_method"] + ] + }, + { + "name": "godot_variant_operator_equal", + "return_type": "godot_bool", + "arguments": [ + ["const godot_variant *", "p_self"], + ["const godot_variant *", "p_other"] + ] + }, + { + "name": "godot_variant_operator_less", + "return_type": "godot_bool", + "arguments": [ + ["const godot_variant *", "p_self"], + ["const godot_variant *", "p_other"] + ] + }, + { + "name": "godot_variant_hash_compare", + "return_type": "godot_bool", + "arguments": [ + ["const godot_variant *", "p_self"], + ["const godot_variant *", "p_other"] + ] + }, + { + "name": "godot_variant_booleanize", + "return_type": "godot_bool", + "arguments": [ + ["const godot_variant *", "p_self"] + ] + }, + { + "name": "godot_variant_destroy", + "return_type": "void", + "arguments": [ + ["godot_variant *", "p_self"] + ] + }, + { + "name": "godot_string_new", + "return_type": "void", + "arguments": [ + ["godot_string *", "r_dest"] + ] + }, + { + "name": "godot_string_new_copy", + "return_type": "void", + "arguments": [ + ["godot_string *", "r_dest"], + ["const godot_string *", "p_src"] + ] + }, + { + "name": "godot_string_new_data", + "return_type": "void", + "arguments": [ + ["godot_string *", "r_dest"], + ["const char *", "p_contents"], + ["const int", "p_size"] + ] + }, + { + "name": "godot_string_new_unicode_data", + "return_type": "void", + "arguments": [ + ["godot_string *", "r_dest"], + ["const wchar_t *", "p_contents"], + ["const int", "p_size"] + ] + }, + { + "name": "godot_string_get_data", + "return_type": "void", + "arguments": [ + ["const godot_string *", "p_self"], + ["char *", "p_dest"], + ["int *", "p_size"] + ] + }, + { + "name": "godot_string_operator_index", + "return_type": "wchar_t *", + "arguments": [ + ["godot_string *", "p_self"], + ["const godot_int", "p_idx"] + ] + }, + { + "name": "godot_string_c_str", + "return_type": "const char *", + "arguments": [ + ["const godot_string *", "p_self"] + ] + }, + { + "name": "godot_string_unicode_str", + "return_type": "const wchar_t *", + "arguments": [ + ["const godot_string *", "p_self"] + ] + }, + { + "name": "godot_string_operator_equal", + "return_type": "godot_bool", + "arguments": [ + ["const godot_string *", "p_self"], + ["const godot_string *", "p_b"] + ] + }, + { + "name": "godot_string_operator_less", + "return_type": "godot_bool", + "arguments": [ + ["const godot_string *", "p_self"], + ["const godot_string *", "p_b"] + ] + }, + { + "name": "godot_string_operator_plus", + "return_type": "godot_string", + "arguments": [ + ["const godot_string *", "p_self"], + ["const godot_string *", "p_b"] + ] + }, + { + "name": "godot_string_length", + "return_type": "godot_int", + "arguments": [ + ["const godot_string *", "p_self"] + ] + }, + { + "name": "godot_string_begins_with", + "return_type": "godot_bool", + "arguments": [ + ["const godot_string *", "p_self"], + ["const godot_string *", "p_string"] + ] + }, + { + "name": "godot_string_begins_with_char_array", + "return_type": "godot_bool", + "arguments": [ + ["const godot_string *", "p_self"], + ["const char *", "p_char_array"] + ] + }, + { + "name": "godot_string_bigrams", + "return_type": "godot_array", + "arguments": [ + ["const godot_string *", "p_self"] + ] + }, + { + "name": "godot_string_chr", + "return_type": "godot_string", + "arguments": [ + ["wchar_t", "p_character"] + ] + }, + { + "name": "godot_string_ends_with", + "return_type": "godot_bool", + "arguments": [ + ["const godot_string *", "p_self"], + ["const godot_string *", "p_string"] + ] + }, + { + "name": "godot_string_find", + "return_type": "godot_int", + "arguments": [ + ["const godot_string *", "p_self"], + ["godot_string", "p_what"] + ] + }, + { + "name": "godot_string_find_from", + "return_type": "godot_int", + "arguments": [ + ["const godot_string *", "p_self"], + ["godot_string", "p_what"], + ["godot_int", "p_from"] + ] + }, + { + "name": "godot_string_findmk", + "return_type": "godot_int", + "arguments": [ + ["const godot_string *", "p_self"], + ["const godot_array *", "p_keys"] + ] + }, + { + "name": "godot_string_findmk_from", + "return_type": "godot_int", + "arguments": [ + ["const godot_string *", "p_self"], + ["const godot_array *", "p_keys"], + ["godot_int", "p_from"] + ] + }, + { + "name": "godot_string_findmk_from_in_place", + "return_type": "godot_int", + "arguments": [ + ["const godot_string *", "p_self"], + ["const godot_array *", "p_keys"], + ["godot_int", "p_from"], + ["godot_int *", "r_key"] + ] + }, + { + "name": "godot_string_findn", + "return_type": "godot_int", + "arguments": [ + ["const godot_string *", "p_self"], + ["godot_string", "p_what"] + ] + }, + { + "name": "godot_string_findn_from", + "return_type": "godot_int", + "arguments": [ + ["const godot_string *", "p_self"], + ["godot_string", "p_what"], + ["godot_int", "p_from"] + ] + }, + { + "name": "godot_string_find_last", + "return_type": "godot_int", + "arguments": [ + ["const godot_string *", "p_self"], + ["godot_string", "p_what"] + ] + }, + { + "name": "godot_string_format", + "return_type": "godot_string", + "arguments": [ + ["const godot_string *", "p_self"], + ["const godot_variant *", "p_values"] + ] + }, + { + "name": "godot_string_format_with_custom_placeholder", + "return_type": "godot_string", + "arguments": [ + ["const godot_string *", "p_self"], + ["const godot_variant *", "p_values"], + ["const char *", "p_placeholder"] + ] + }, + { + "name": "godot_string_hex_encode_buffer", + "return_type": "godot_string", + "arguments": [ + ["const uint8_t *", "p_buffer"], + ["godot_int", "p_len"] + ] + }, + { + "name": "godot_string_hex_to_int", + "return_type": "godot_int", + "arguments": [ + ["const godot_string *", "p_self"] + ] + }, + { + "name": "godot_string_hex_to_int_without_prefix", + "return_type": "godot_int", + "arguments": [ + ["const godot_string *", "p_self"] + ] + }, + { + "name": "godot_string_insert", + "return_type": "godot_string", + "arguments": [ + ["const godot_string *", "p_self"], + ["godot_int", "p_at_pos"], + ["godot_string", "p_string"] + ] + }, + { + "name": "godot_string_is_numeric", + "return_type": "godot_bool", + "arguments": [ + ["const godot_string *", "p_self"] + ] + }, + { + "name": "godot_string_is_subsequence_of", + "return_type": "godot_bool", + "arguments": [ + ["const godot_string *", "p_self"], + ["const godot_string *", "p_string"] + ] + }, + { + "name": "godot_string_is_subsequence_ofi", + "return_type": "godot_bool", + "arguments": [ + ["const godot_string *", "p_self"], + ["const godot_string *", "p_string"] + ] + }, + { + "name": "godot_string_lpad", + "return_type": "godot_string", + "arguments": [ + ["const godot_string *", "p_self"], + ["godot_int", "p_min_length"] + ] + }, + { + "name": "godot_string_lpad_with_custom_character", + "return_type": "godot_string", + "arguments": [ + ["const godot_string *", "p_self"], + ["godot_int", "p_min_length"], + ["const godot_string *", "p_character"] + ] + }, + { + "name": "godot_string_match", + "return_type": "godot_bool", + "arguments": [ + ["const godot_string *", "p_self"], + ["const godot_string *", "p_wildcard"] + ] + }, + { + "name": "godot_string_matchn", + "return_type": "godot_bool", + "arguments": [ + ["const godot_string *", "p_self"], + ["const godot_string *", "p_wildcard"] + ] + }, + { + "name": "godot_string_md5", + "return_type": "godot_string", + "arguments": [ + ["const uint8_t *", "p_md5"] + ] + }, + { + "name": "godot_string_num", + "return_type": "godot_string", + "arguments": [ + ["double", "p_num"] + ] + }, + { + "name": "godot_string_num_int64", + "return_type": "godot_string", + "arguments": [ + ["int64_t", "p_num"], + ["godot_int", "p_base"] + ] + }, + { + "name": "godot_string_num_int64_capitalized", + "return_type": "godot_string", + "arguments": [ + ["int64_t", "p_num"], + ["godot_int", "p_base"], + ["godot_bool", "p_capitalize_hex"] + ] + }, + { + "name": "godot_string_num_real", + "return_type": "godot_string", + "arguments": [ + ["double", "p_num"] + ] + }, + { + "name": "godot_string_num_scientific", + "return_type": "godot_string", + "arguments": [ + ["double", "p_num"] + ] + }, + { + "name": "godot_string_num_with_decimals", + "return_type": "godot_string", + "arguments": [ + ["double", "p_num"], + ["godot_int", "p_decimals"] + ] + }, + { + "name": "godot_string_pad_decimals", + "return_type": "godot_string", + "arguments": [ + ["const godot_string *", "p_self"], + ["godot_int", "p_digits"] + ] + }, + { + "name": "godot_string_pad_zeros", + "return_type": "godot_string", + "arguments": [ + ["const godot_string *", "p_self"], + ["godot_int", "p_digits"] + ] + }, + { + "name": "godot_string_replace_first", + "return_type": "godot_string", + "arguments": [ + ["const godot_string *", "p_self"], + ["godot_string", "p_key"], + ["godot_string", "p_with"] + ] + }, + { + "name": "godot_string_replace", + "return_type": "godot_string", + "arguments": [ + ["const godot_string *", "p_self"], + ["godot_string", "p_key"], + ["godot_string", "p_with"] + ] + }, + { + "name": "godot_string_replacen", + "return_type": "godot_string", + "arguments": [ + ["const godot_string *", "p_self"], + ["godot_string", "p_key"], + ["godot_string", "p_with"] + ] + }, + { + "name": "godot_string_rfind", + "return_type": "godot_int", + "arguments": [ + ["const godot_string *", "p_self"], + ["godot_string", "p_what"] + ] + }, + { + "name": "godot_string_rfindn", + "return_type": "godot_int", + "arguments": [ + ["const godot_string *", "p_self"], + ["godot_string", "p_what"] + ] + }, + { + "name": "godot_string_rfind_from", + "return_type": "godot_int", + "arguments": [ + ["const godot_string *", "p_self"], + ["godot_string", "p_what"], + ["godot_int", "p_from"] + ] + }, + { + "name": "godot_string_rfindn_from", + "return_type": "godot_int", + "arguments": [ + ["const godot_string *", "p_self"], + ["godot_string", "p_what"], + ["godot_int", "p_from"] + ] + }, + { + "name": "godot_string_rpad", + "return_type": "godot_string", + "arguments": [ + ["const godot_string *", "p_self"], + ["godot_int", "p_min_length"] + ] + }, + { + "name": "godot_string_rpad_with_custom_character", + "return_type": "godot_string", + "arguments": [ + ["const godot_string *", "p_self"], + ["godot_int", "p_min_length"], + ["const godot_string *", "p_character"] + ] + }, + { + "name": "godot_string_similarity", + "return_type": "godot_real", + "arguments": [ + ["const godot_string *", "p_self"], + ["const godot_string *", "p_string"] + ] + }, + { + "name": "godot_string_sprintf", + "return_type": "godot_string", + "arguments": [ + ["const godot_string *", "p_self"], + ["const godot_array *", "p_values"], + ["godot_bool *", "p_error"] + ] + }, + { + "name": "godot_string_substr", + "return_type": "godot_string", + "arguments": [ + ["const godot_string *", "p_self"], + ["godot_int", "p_from"], + ["godot_int", "p_chars"] + ] + }, + { + "name": "godot_string_to_double", + "return_type": "double", + "arguments": [ + ["const godot_string *", "p_self"] + ] + }, + { + "name": "godot_string_to_float", + "return_type": "godot_real", + "arguments": [ + ["const godot_string *", "p_self"] + ] + }, + { + "name": "godot_string_to_int", + "return_type": "godot_int", + "arguments": [ + ["const godot_string *", "p_self"] + ] + }, + { + "name": "godot_string_camelcase_to_underscore", + "return_type": "godot_string", + "arguments": [ + ["const godot_string *", "p_self"] + ] + }, + { + "name": "godot_string_camelcase_to_underscore_lowercased", + "return_type": "godot_string", + "arguments": [ + ["const godot_string *", "p_self"] + ] + }, + { + "name": "godot_string_capitalize", + "return_type": "godot_string", + "arguments": [ + ["const godot_string *", "p_self"] + ] + }, + { + "name": "godot_string_char_to_double", + "return_type": "double", + "arguments": [ + ["const char *", "p_what"] + ] + }, + { + "name": "godot_string_char_to_int", + "return_type": "godot_int", + "arguments": [ + ["const char *", "p_what"] + ] + }, + { + "name": "godot_string_wchar_to_int", + "return_type": "int64_t", + "arguments": [ + ["const wchar_t *", "p_str"] + ] + }, + { + "name": "godot_string_char_to_int_with_len", + "return_type": "godot_int", + "arguments": [ + ["const char *", "p_what"], + ["godot_int", "p_len"] + ] + }, + { + "name": "godot_string_char_to_int64_with_len", + "return_type": "int64_t", + "arguments": [ + ["const wchar_t *", "p_str"], + ["int", "p_len"] + ] + }, + { + "name": "godot_string_hex_to_int64", + "return_type": "int64_t", + "arguments": [ + ["const godot_string *", "p_self"] + ] + }, + { + "name": "godot_string_hex_to_int64_with_prefix", + "return_type": "int64_t", + "arguments": [ + ["const godot_string *", "p_self"] + ] + }, + { + "name": "godot_string_to_int64", + "return_type": "int64_t", + "arguments": [ + ["const godot_string *", "p_self"] + ] + }, + { + "name": "godot_string_unicode_char_to_double", + "return_type": "double", + "arguments": [ + ["const wchar_t *", "p_str"], + ["const wchar_t **", "r_end"] + ] + }, + { + "name": "godot_string_get_slice_count", + "return_type": "godot_int", + "arguments": [ + ["const godot_string *", "p_self"], + ["godot_string", "p_splitter"] + ] + }, + { + "name": "godot_string_get_slice", + "return_type": "godot_string", + "arguments": [ + ["const godot_string *", "p_self"], + ["godot_string", "p_splitter"], + ["godot_int", "p_slice"] + ] + }, + { + "name": "godot_string_get_slicec", + "return_type": "godot_string", + "arguments": [ + ["const godot_string *", "p_self"], + ["wchar_t", "p_splitter"], + ["godot_int", "p_slice"] + ] + }, + { + "name": "godot_string_split", + "return_type": "godot_array", + "arguments": [ + ["const godot_string *", "p_self"], + ["const godot_string *", "p_splitter"] + ] + }, + { + "name": "godot_string_split_allow_empty", + "return_type": "godot_array", + "arguments": [ + ["const godot_string *", "p_self"], + ["const godot_string *", "p_splitter"] + ] + }, + { + "name": "godot_string_split_floats", + "return_type": "godot_array", + "arguments": [ + ["const godot_string *", "p_self"], + ["const godot_string *", "p_splitter"] + ] + }, + { + "name": "godot_string_split_floats_allows_empty", + "return_type": "godot_array", + "arguments": [ + ["const godot_string *", "p_self"], + ["const godot_string *", "p_splitter"] + ] + }, + { + "name": "godot_string_split_floats_mk", + "return_type": "godot_array", + "arguments": [ + ["const godot_string *", "p_self"], + ["const godot_array *", "p_splitters"] + ] + }, + { + "name": "godot_string_split_floats_mk_allows_empty", + "return_type": "godot_array", + "arguments": [ + ["const godot_string *", "p_self"], + ["const godot_array *", "p_splitters"] + ] + }, + { + "name": "godot_string_split_ints", + "return_type": "godot_array", + "arguments": [ + ["const godot_string *", "p_self"], + ["const godot_string *", "p_splitter"] + ] + }, + { + "name": "godot_string_split_ints_allows_empty", + "return_type": "godot_array", + "arguments": [ + ["const godot_string *", "p_self"], + ["const godot_string *", "p_splitter"] + ] + }, + { + "name": "godot_string_split_ints_mk", + "return_type": "godot_array", + "arguments": [ + ["const godot_string *", "p_self"], + ["const godot_array *", "p_splitters"] + ] + }, + { + "name": "godot_string_split_ints_mk_allows_empty", + "return_type": "godot_array", + "arguments": [ + ["const godot_string *", "p_self"], + ["const godot_array *", "p_splitters"] + ] + }, + { + "name": "godot_string_split_spaces", + "return_type": "godot_array", + "arguments": [ + ["const godot_string *", "p_self"] + ] + }, + { + "name": "godot_string_char_lowercase", + "return_type": "wchar_t", + "arguments": [ + ["wchar_t", "p_char"] + ] + }, + { + "name": "godot_string_char_uppercase", + "return_type": "wchar_t", + "arguments": [ + ["wchar_t", "p_char"] + ] + }, + { + "name": "godot_string_to_lower", + "return_type": "godot_string", + "arguments": [ + ["const godot_string *", "p_self"] + ] + }, + { + "name": "godot_string_to_upper", + "return_type": "godot_string", + "arguments": [ + ["const godot_string *", "p_self"] + ] + }, + { + "name": "godot_string_get_basename", + "return_type": "godot_string", + "arguments": [ + ["const godot_string *", "p_self"] + ] + }, + { + "name": "godot_string_get_extension", + "return_type": "godot_string", + "arguments": [ + ["const godot_string *", "p_self"] + ] + }, + { + "name": "godot_string_left", + "return_type": "godot_string", + "arguments": [ + ["const godot_string *", "p_self"], + ["godot_int", "p_pos"] + ] + }, + { + "name": "godot_string_ord_at", + "return_type": "wchar_t", + "arguments": [ + ["const godot_string *", "p_self"], + ["godot_int", "p_idx"] + ] + }, + { + "name": "godot_string_plus_file", + "return_type": "godot_string", + "arguments": [ + ["const godot_string *", "p_self"], + ["const godot_string *", "p_file"] + ] + }, + { + "name": "godot_string_right", + "return_type": "godot_string", + "arguments": [ + ["const godot_string *", "p_self"], + ["godot_int", "p_pos"] + ] + }, + { + "name": "godot_string_strip_edges", + "return_type": "godot_string", + "arguments": [ + ["const godot_string *", "p_self"], + ["godot_bool", "p_left"], + ["godot_bool", "p_right"] + ] + }, + { + "name": "godot_string_strip_escapes", + "return_type": "godot_string", + "arguments": [ + ["const godot_string *", "p_self"] + ] + }, + { + "name": "godot_string_erase", + "return_type": "void", + "arguments": [ + ["godot_string *", "p_self"], + ["godot_int", "p_pos"], + ["godot_int", "p_chars"] + ] + }, + { + "name": "godot_string_ascii", + "return_type": "void", + "arguments": [ + ["godot_string *", "p_self"], + ["char *", "result"] + ] + }, + { + "name": "godot_string_ascii_extended", + "return_type": "void", + "arguments": [ + ["godot_string *", "p_self"], + ["char *", "result"] + ] + }, + { + "name": "godot_string_utf8", + "return_type": "void", + "arguments": [ + ["godot_string *", "p_self"], + ["char *", "result"] + ] + }, + { + "name": "godot_string_parse_utf8", + "return_type": "godot_bool", + "arguments": [ + ["godot_string *", "p_self"], + ["const char *", "p_utf8"] + ] + }, + { + "name": "godot_string_parse_utf8_with_len", + "return_type": "godot_bool", + "arguments": [ + ["godot_string *", "p_self"], + ["const char *", "p_utf8"], + ["godot_int", "p_len"] + ] + }, + { + "name": "godot_string_chars_to_utf8", + "return_type": "godot_string", + "arguments": [ + ["const char *", "p_utf8"] + ] + }, + { + "name": "godot_string_chars_to_utf8_with_len", + "return_type": "godot_string", + "arguments": [ + ["const char *", "p_utf8"], + ["godot_int", "p_len"] + ] + }, + { + "name": "godot_string_hash", + "return_type": "uint32_t", + "arguments": [ + ["const godot_string *", "p_self"] + ] + }, + { + "name": "godot_string_hash64", + "return_type": "uint64_t", + "arguments": [ + ["const godot_string *", "p_self"] + ] + }, + { + "name": "godot_string_hash_chars", + "return_type": "uint32_t", + "arguments": [ + ["const char *", "p_cstr"] + ] + }, + { + "name": "godot_string_hash_chars_with_len", + "return_type": "uint32_t", + "arguments": [ + ["const char *", "p_cstr"], + ["godot_int", "p_len"] + ] + }, + { + "name": "godot_string_hash_utf8_chars", + "return_type": "uint32_t", + "arguments": [ + ["const wchar_t *", "p_str"] + ] + }, + { + "name": "godot_string_hash_utf8_chars_with_len", + "return_type": "uint32_t", + "arguments": [ + ["const wchar_t *", "p_str"], + ["godot_int", "p_len"] + ] + }, + { + "name": "godot_string_md5_buffer", + "return_type": "godot_pool_byte_array", + "arguments": [ + ["const godot_string *", "p_self"] + ] + }, + { + "name": "godot_string_md5_text", + "return_type": "godot_string", + "arguments": [ + ["const godot_string *", "p_self"] + ] + }, + { + "name": "godot_string_sha256_buffer", + "return_type": "godot_pool_byte_array", + "arguments": [ + ["const godot_string *", "p_self"] + ] + }, + { + "name": "godot_string_sha256_text", + "return_type": "godot_string", + "arguments": [ + ["const godot_string *", "p_self"] + ] + }, + { + "name": "godot_string_empty", + "return_type": "godot_bool", + "arguments": [ + ["const godot_string *", "p_self"] + ] + }, + { + "name": "godot_string_get_base_dir", + "return_type": "godot_string", + "arguments": [ + ["const godot_string *", "p_self"] + ] + }, + { + "name": "godot_string_get_file", + "return_type": "godot_string", + "arguments": [ + ["const godot_string *", "p_self"] + ] + }, + { + "name": "godot_string_humanize_size", + "return_type": "godot_string", + "arguments": [ + ["size_t", "p_size"] + ] + }, + { + "name": "godot_string_is_abs_path", + "return_type": "godot_bool", + "arguments": [ + ["const godot_string *", "p_self"] + ] + }, + { + "name": "godot_string_is_rel_path", + "return_type": "godot_bool", + "arguments": [ + ["const godot_string *", "p_self"] + ] + }, + { + "name": "godot_string_is_resource_file", + "return_type": "godot_bool", + "arguments": [ + ["const godot_string *", "p_self"] + ] + }, + { + "name": "godot_string_path_to", + "return_type": "godot_string", + "arguments": [ + ["const godot_string *", "p_self"], + ["const godot_string *", "p_path"] + ] + }, + { + "name": "godot_string_path_to_file", + "return_type": "godot_string", + "arguments": [ + ["const godot_string *", "p_self"], + ["const godot_string *", "p_path"] + ] + }, + { + "name": "godot_string_simplify_path", + "return_type": "godot_string", + "arguments": [ + ["const godot_string *", "p_self"] + ] + }, + { + "name": "godot_string_c_escape", + "return_type": "godot_string", + "arguments": [ + ["const godot_string *", "p_self"] + ] + }, + { + "name": "godot_string_c_escape_multiline", + "return_type": "godot_string", + "arguments": [ + ["const godot_string *", "p_self"] + ] + }, + { + "name": "godot_string_c_unescape", + "return_type": "godot_string", + "arguments": [ + ["const godot_string *", "p_self"] + ] + }, + { + "name": "godot_string_http_escape", + "return_type": "godot_string", + "arguments": [ + ["const godot_string *", "p_self"] + ] + }, + { + "name": "godot_string_http_unescape", + "return_type": "godot_string", + "arguments": [ + ["const godot_string *", "p_self"] + ] + }, + { + "name": "godot_string_json_escape", + "return_type": "godot_string", + "arguments": [ + ["const godot_string *", "p_self"] + ] + }, + { + "name": "godot_string_word_wrap", + "return_type": "godot_string", + "arguments": [ + ["const godot_string *", "p_self"], + ["godot_int", "p_chars_per_line"] + ] + }, + { + "name": "godot_string_xml_escape", + "return_type": "godot_string", + "arguments": [ + ["const godot_string *", "p_self"] + ] + }, + { + "name": "godot_string_xml_escape_with_quotes", + "return_type": "godot_string", + "arguments": [ + ["const godot_string *", "p_self"] + ] + }, + { + "name": "godot_string_xml_unescape", + "return_type": "godot_string", + "arguments": [ + ["const godot_string *", "p_self"] + ] + }, + { + "name": "godot_string_percent_decode", + "return_type": "godot_string", + "arguments": [ + ["const godot_string *", "p_self"] + ] + }, + { + "name": "godot_string_percent_encode", + "return_type": "godot_string", + "arguments": [ + ["const godot_string *", "p_self"] + ] + }, + { + "name": "godot_string_is_valid_float", + "return_type": "godot_bool", + "arguments": [ + ["const godot_string *", "p_self"] + ] + }, + { + "name": "godot_string_is_valid_hex_number", + "return_type": "godot_bool", + "arguments": [ + ["const godot_string *", "p_self"], + ["godot_bool", "p_with_prefix"] + ] + }, + { + "name": "godot_string_is_valid_html_color", + "return_type": "godot_bool", + "arguments": [ + ["const godot_string *", "p_self"] + ] + }, + { + "name": "godot_string_is_valid_identifier", + "return_type": "godot_bool", + "arguments": [ + ["const godot_string *", "p_self"] + ] + }, + { + "name": "godot_string_is_valid_integer", + "return_type": "godot_bool", + "arguments": [ + ["const godot_string *", "p_self"] + ] + }, + { + "name": "godot_string_is_valid_ip_address", + "return_type": "godot_bool", + "arguments": [ + ["const godot_string *", "p_self"] + ] + }, + { + "name": "godot_string_destroy", + "return_type": "void", + "arguments": [ + ["godot_string *", "p_self"] + ] + }, + { + "name": "godot_string_name_new", + "return_type": "void", + "arguments": [ + ["godot_string_name *", "r_dest"], + ["const godot_string *", "p_name"] + ] + }, + { + "name": "godot_string_name_new_data", + "return_type": "void", + "arguments": [ + ["godot_string_name *", "r_dest"], + ["const char *", "p_name"] + ] + }, + { + "name": "godot_string_name_get_name", + "return_type": "godot_string", + "arguments": [ + ["const godot_string_name *", "p_self"] + ] + }, + { + "name": "godot_string_name_get_hash", + "return_type": "uint32_t", + "arguments": [ + ["const godot_string_name *", "p_self"] + ] + }, + { + "name": "godot_string_name_get_data_unique_pointer", + "return_type": "const void *", + "arguments": [ + ["const godot_string_name *", "p_self"] + ] + }, + { + "name": "godot_string_name_operator_equal", + "return_type": "godot_bool", + "arguments": [ + ["const godot_string_name *", "p_self"], + ["const godot_string_name *", "p_other"] + ] + }, + { + "name": "godot_string_name_operator_less", + "return_type": "godot_bool", + "arguments": [ + ["const godot_string_name *", "p_self"], + ["const godot_string_name *", "p_other"] + ] + }, + { + "name": "godot_string_name_destroy", + "return_type": "void", + "arguments": [ + ["godot_string_name *", "p_self"] + ] + }, + { + "name": "godot_object_destroy", + "return_type": "void", + "arguments": [ + ["godot_object *", "p_o"] + ] + }, + { + "name": "godot_global_get_singleton", + "return_type": "godot_object *", + "arguments": [ + ["char *", "p_name"] + ] + }, + { + "name": "godot_method_bind_get_method", + "return_type": "godot_method_bind *", + "arguments": [ + ["const char *", "p_classname"], + ["const char *", "p_methodname"] + ] + }, + { + "name": "godot_method_bind_ptrcall", + "return_type": "void", + "arguments": [ + ["godot_method_bind *", "p_method_bind"], + ["godot_object *", "p_instance"], + ["const void **", "p_args"], + ["void *", "p_ret"] + ] + }, + { + "name": "godot_method_bind_call", + "return_type": "godot_variant", + "arguments": [ + ["godot_method_bind *", "p_method_bind"], + ["godot_object *", "p_instance"], + ["const godot_variant **", "p_args"], + ["const int", "p_arg_count"], + ["godot_variant_call_error *", "p_call_error"] + ] + }, + { + "name": "godot_get_class_constructor", + "return_type": "godot_class_constructor", + "arguments": [ + ["const char *", "p_classname"] + ] + }, + { + "name": "godot_alloc", + "return_type": "void *", + "arguments": [ + ["int", "p_bytes"] + ] + }, + { + "name": "godot_realloc", + "return_type": "void *", + "arguments": [ + ["void *", "p_ptr"], + ["int", "p_bytes"] + ] + }, + { + "name": "godot_free", + "return_type": "void", + "arguments": [ + ["void *", "p_ptr"] + ] + }, + { + "name": "godot_print_error", + "return_type": "void", + "arguments": [ + ["const char *", "p_description"], + ["const char *", "p_function"], + ["const char *", "p_file"], + ["int", "p_line"] + ] + }, + { + "name": "godot_print_warning", + "return_type": "void", + "arguments": [ + ["const char *", "p_description"], + ["const char *", "p_function"], + ["const char *", "p_file"], + ["int", "p_line"] + ] + }, + { + "name": "godot_print", + "return_type": "void", + "arguments": [ + ["const godot_string *", "p_message"] + ] + }, + { + "name": "godot_nativescript_register_class", + "return_type": "void", + "arguments": [ + ["void *", "p_gdnative_handle"], + ["const char *", "p_name"], + ["const char *", "p_base"], + ["godot_instance_create_func", "p_create_func"], + ["godot_instance_destroy_func", "p_destroy_func"] + ] + }, + { + "name": "godot_nativescript_register_tool_class", + "return_type": "void", + "arguments": [ + ["void *", "p_gdnative_handle"], + ["const char *", "p_name"], + ["const char *", "p_base"], + ["godot_instance_create_func", "p_create_func"], + ["godot_instance_destroy_func", "p_destroy_func"] + ] + }, + { + "name": "godot_nativescript_register_method", + "return_type": "void", + "arguments": [ + ["void *", "p_gdnative_handle"], + ["const char *", "p_name"], + ["const char *", "p_function_name"], + ["godot_method_attributes", "p_attr"], + ["godot_instance_method", "p_method"] + ] + }, + { + "name": "godot_nativescript_register_property", + "return_type": "void", + "arguments": [ + ["void *", "p_gdnative_handle"], + ["const char *", "p_name"], + ["const char *", "p_path"], + ["godot_property_attributes *", "p_attr"], + ["godot_property_set_func", "p_set_func"], + ["godot_property_get_func", "p_get_func"] + ] + }, + { + "name": "godot_nativescript_register_signal", + "return_type": "void", + "arguments": [ + ["void *", "p_gdnative_handle"], + ["const char *", "p_name"], + ["const godot_signal *", "p_signal"] + ] + }, + { + "name": "godot_nativescript_get_userdata", + "return_type": "void *", + "arguments": [ + ["godot_object *", "p_instance"] + ] + }, + { + "name": "godot_arvr_register_interface", + "return_type": "void", + "arguments": [ + ["const godot_arvr_interface_gdnative *", "p_interface"] + ] + }, + { + "name": "godot_arvr_get_worldscale", + "return_type": "godot_real", + "arguments": [] + }, + { + "name": "godot_arvr_get_reference_frame", + "return_type": "godot_transform", + "arguments": [] + }, + { + "name": "godot_arvr_blit", + "return_type": "void", + "arguments": [ + ["int", "p_eye"], + ["godot_rid *", "p_render_target"], + ["godot_rect2 *", "p_screen_rect"] + ] + }, + { + "name": "godot_arvr_get_texid", + "return_type": "godot_int", + "arguments": [ + ["godot_rid *", "p_render_target"] + ] + }, + { + "name": "godot_arvr_add_controller", + "return_type": "godot_int", + "arguments": [ + ["char *", "p_device_name"], + ["godot_int", "p_hand"], + ["godot_bool", "p_tracks_orientation"], + ["godot_bool", "p_tracks_position"] + ] + }, + { + "name": "godot_arvr_remove_controller", + "return_type": "void", + "arguments": [ + ["godot_int", "p_controller_id"] + ] + }, + { + "name": "godot_arvr_set_controller_transform", + "return_type": "void", + "arguments": [ + ["godot_int", "p_controller_id"], + ["godot_transform *", "p_transform"], + ["godot_bool", "p_tracks_orientation"], + ["godot_bool", "p_tracks_position"] + ] + }, + { + "name": "godot_arvr_set_controller_button", + "return_type": "void", + "arguments": [ + ["godot_int", "p_controller_id"], + ["godot_int", "p_button"], + ["godot_bool", "p_is_pressed"] + ] + }, + { + "name": "godot_arvr_set_controller_axis", + "return_type": "void", + "arguments": [ + ["godot_int", "p_controller_id"], + ["godot_int", "p_exis"], + ["godot_real", "p_value"], + ["godot_bool", "p_can_be_negative"] + ] + } + ] +} diff --git a/modules/gdnative/include/gdnative/array.h b/modules/gdnative/include/gdnative/array.h index edab028cba..d0639589b7 100644 --- a/modules/gdnative/include/gdnative/array.h +++ b/modules/gdnative/include/gdnative/array.h @@ -46,11 +46,20 @@ typedef struct { } godot_array; #endif +// reduce extern "C" nesting for VS2013 +#ifdef __cplusplus +} +#endif + #include <gdnative/pool_arrays.h> #include <gdnative/variant.h> #include <gdnative/gdnative.h> +#ifdef __cplusplus +extern "C" { +#endif + void GDAPI godot_array_new(godot_array *r_dest); void GDAPI godot_array_new_copy(godot_array *r_dest, const godot_array *p_src); void GDAPI godot_array_new_pool_color_array(godot_array *r_dest, const godot_pool_color_array *p_pca); diff --git a/modules/gdnative/include/gdnative/basis.h b/modules/gdnative/include/gdnative/basis.h index 8ff6a6f541..b86b1c17d8 100644 --- a/modules/gdnative/include/gdnative/basis.h +++ b/modules/gdnative/include/gdnative/basis.h @@ -45,10 +45,19 @@ typedef struct { } godot_basis; #endif +// reduce extern "C" nesting for VS2013 +#ifdef __cplusplus +} +#endif + #include <gdnative/gdnative.h> #include <gdnative/quat.h> #include <gdnative/vector3.h> +#ifdef __cplusplus +extern "C" { +#endif + void GDAPI godot_basis_new_with_rows(godot_basis *r_dest, const godot_vector3 *p_x_axis, const godot_vector3 *p_y_axis, const godot_vector3 *p_z_axis); void GDAPI godot_basis_new_with_axis_and_angle(godot_basis *r_dest, const godot_vector3 *p_axis, const godot_real p_phi); void GDAPI godot_basis_new_with_euler(godot_basis *r_dest, const godot_vector3 *p_euler); diff --git a/modules/gdnative/include/gdnative/color.h b/modules/gdnative/include/gdnative/color.h index 14265466b9..857e86a738 100644 --- a/modules/gdnative/include/gdnative/color.h +++ b/modules/gdnative/include/gdnative/color.h @@ -45,9 +45,18 @@ typedef struct { } godot_color; #endif +// reduce extern "C" nesting for VS2013 +#ifdef __cplusplus +} +#endif + #include <gdnative/gdnative.h> #include <gdnative/string.h> +#ifdef __cplusplus +extern "C" { +#endif + void GDAPI godot_color_new_rgba(godot_color *r_dest, const godot_real p_r, const godot_real p_g, const godot_real p_b, const godot_real p_a); void GDAPI godot_color_new_rgb(godot_color *r_dest, const godot_real p_r, const godot_real p_g, const godot_real p_b); diff --git a/modules/gdnative/include/gdnative/dictionary.h b/modules/gdnative/include/gdnative/dictionary.h index c85c3f3830..e68d0fdc29 100644 --- a/modules/gdnative/include/gdnative/dictionary.h +++ b/modules/gdnative/include/gdnative/dictionary.h @@ -45,10 +45,19 @@ typedef struct { } godot_dictionary; #endif +// reduce extern "C" nesting for VS2013 +#ifdef __cplusplus +} +#endif + #include <gdnative/array.h> #include <gdnative/gdnative.h> #include <gdnative/variant.h> +#ifdef __cplusplus +extern "C" { +#endif + void GDAPI godot_dictionary_new(godot_dictionary *r_dest); void GDAPI godot_dictionary_new_copy(godot_dictionary *r_dest, const godot_dictionary *p_src); void GDAPI godot_dictionary_destroy(godot_dictionary *p_self); diff --git a/modules/gdnative/include/gdnative/gdnative.h b/modules/gdnative/include/gdnative/gdnative.h index 1c5e91d733..25d45db306 100644 --- a/modules/gdnative/include/gdnative/gdnative.h +++ b/modules/gdnative/include/gdnative/gdnative.h @@ -34,29 +34,20 @@ extern "C" { #endif -#ifdef GDAPI_BUILT_IN -#define GDAPI_EXPORT -#endif - #ifdef _WIN32 -#if defined(GDAPI_EXPORT) -#define GDCALLINGCONV -#define GDAPI __declspec(dllexport) GDCALLINGCONV -#else #define GDCALLINGCONV -#define GDAPI __declspec(dllimport) GDCALLINGCONV -#endif +#define GDAPI GDCALLINGCONV #elif defined(__APPLE__) #include "TargetConditionals.h" #if TARGET_OS_IPHONE -#define GDCALLINGCONV -#define GDAPI +#define GDCALLINGCONV __attribute__((visibility("default"))) +#define GDAPI GDCALLINGCONV #elif TARGET_OS_MAC #define GDCALLINGCONV __attribute__((sysv_abi)) #define GDAPI GDCALLINGCONV #endif #else -#define GDCALLINGCONV __attribute__((sysv_abi, visibility("default"))) +#define GDCALLINGCONV __attribute__((sysv_abi)) #define GDAPI GDCALLINGCONV #endif @@ -103,7 +94,7 @@ typedef enum { GODOT_ERR_CANT_CONNECT, // (25) GODOT_ERR_CANT_RESOLVE, GODOT_ERR_CONNECTION_ERROR, - GODOT_ERR_CANT_AQUIRE_RESOURCE, + GODOT_ERR_CANT_ACQUIRE_RESOURCE, GODOT_ERR_CANT_FORK, GODOT_ERR_INVALID_DATA, ///< Data passed is invalid (30) GODOT_ERR_INVALID_PARAMETER, ///< Parameter passed is invalid @@ -150,6 +141,10 @@ typedef void godot_object; #include <gdnative/string.h> +/////// String name + +#include <gdnative/string_name.h> + ////// Vector2 #include <gdnative/vector2.h> @@ -243,6 +238,7 @@ typedef struct { uint64_t no_api_hash; godot_object *gd_native_library; // pointer to GDNativeLibrary that is being initialized const struct godot_gdnative_api_struct *api_struct; + const godot_string *active_library_path; } godot_gdnative_init_options; typedef struct { @@ -259,7 +255,7 @@ godot_dictionary GDAPI godot_get_global_constants(); ////// GDNative procedure types typedef void (*godot_gdnative_init_fn)(godot_gdnative_init_options *); typedef void (*godot_gdnative_terminate_fn)(godot_gdnative_terminate_options *); -typedef godot_variant (*godot_gdnative_procedure_fn)(void *, godot_array *); +typedef godot_variant (*godot_gdnative_procedure_fn)(godot_array *); ////// System Functions diff --git a/modules/gdnative/include/gdnative/node_path.h b/modules/gdnative/include/gdnative/node_path.h index 0cfdbc1127..42446175d8 100644 --- a/modules/gdnative/include/gdnative/node_path.h +++ b/modules/gdnative/include/gdnative/node_path.h @@ -45,9 +45,18 @@ typedef struct { } godot_node_path; #endif +// reduce extern "C" nesting for VS2013 +#ifdef __cplusplus +} +#endif + #include <gdnative/gdnative.h> #include <gdnative/string.h> +#ifdef __cplusplus +extern "C" { +#endif + void GDAPI godot_node_path_new(godot_node_path *r_dest, const godot_string *p_from); void GDAPI godot_node_path_new_copy(godot_node_path *r_dest, const godot_node_path *p_src); void GDAPI godot_node_path_destroy(godot_node_path *p_self); diff --git a/modules/gdnative/include/gdnative/plane.h b/modules/gdnative/include/gdnative/plane.h index 6a8915e08b..dddd172122 100644 --- a/modules/gdnative/include/gdnative/plane.h +++ b/modules/gdnative/include/gdnative/plane.h @@ -45,9 +45,18 @@ typedef struct { } godot_plane; #endif +// reduce extern "C" nesting for VS2013 +#ifdef __cplusplus +} +#endif + #include <gdnative/gdnative.h> #include <gdnative/vector3.h> +#ifdef __cplusplus +extern "C" { +#endif + void GDAPI godot_plane_new_with_reals(godot_plane *r_dest, const godot_real p_a, const godot_real p_b, const godot_real p_c, const godot_real p_d); void GDAPI godot_plane_new_with_vectors(godot_plane *r_dest, const godot_vector3 *p_v1, const godot_vector3 *p_v2, const godot_vector3 *p_v3); void GDAPI godot_plane_new_with_normal(godot_plane *r_dest, const godot_vector3 *p_normal, const godot_real p_d); diff --git a/modules/gdnative/include/gdnative/pool_arrays.h b/modules/gdnative/include/gdnative/pool_arrays.h index cb1095ee8c..93181f2a6b 100644 --- a/modules/gdnative/include/gdnative/pool_arrays.h +++ b/modules/gdnative/include/gdnative/pool_arrays.h @@ -113,6 +113,11 @@ typedef struct { } godot_pool_color_array; #endif +// reduce extern "C" nesting for VS2013 +#ifdef __cplusplus +} +#endif + #include <gdnative/array.h> #include <gdnative/color.h> #include <gdnative/vector2.h> @@ -120,6 +125,10 @@ typedef struct { #include <gdnative/gdnative.h> +#ifdef __cplusplus +extern "C" { +#endif + // byte void GDAPI godot_pool_byte_array_new(godot_pool_byte_array *r_dest); diff --git a/modules/gdnative/include/gdnative/quat.h b/modules/gdnative/include/gdnative/quat.h index 4ffb96eb26..acae6e3e90 100644 --- a/modules/gdnative/include/gdnative/quat.h +++ b/modules/gdnative/include/gdnative/quat.h @@ -45,9 +45,18 @@ typedef struct { } godot_quat; #endif +// reduce extern "C" nesting for VS2013 +#ifdef __cplusplus +} +#endif + #include <gdnative/gdnative.h> #include <gdnative/vector3.h> +#ifdef __cplusplus +extern "C" { +#endif + void GDAPI godot_quat_new(godot_quat *r_dest, const godot_real p_x, const godot_real p_y, const godot_real p_z, const godot_real p_w); void GDAPI godot_quat_new_with_axis_angle(godot_quat *r_dest, const godot_vector3 *p_axis, const godot_real p_angle); diff --git a/modules/gdnative/include/gdnative/rect2.h b/modules/gdnative/include/gdnative/rect2.h index 9e6cf60342..1c66443d4f 100644 --- a/modules/gdnative/include/gdnative/rect2.h +++ b/modules/gdnative/include/gdnative/rect2.h @@ -43,9 +43,18 @@ typedef struct godot_rect2 { } godot_rect2; #endif +// reduce extern "C" nesting for VS2013 +#ifdef __cplusplus +} +#endif + #include <gdnative/gdnative.h> #include <gdnative/vector2.h> +#ifdef __cplusplus +extern "C" { +#endif + void GDAPI godot_rect2_new_with_position_and_size(godot_rect2 *r_dest, const godot_vector2 *p_pos, const godot_vector2 *p_size); void GDAPI godot_rect2_new(godot_rect2 *r_dest, const godot_real p_x, const godot_real p_y, const godot_real p_width, const godot_real p_height); diff --git a/modules/gdnative/include/gdnative/rect3.h b/modules/gdnative/include/gdnative/rect3.h index f94b6fea25..f603a9268a 100644 --- a/modules/gdnative/include/gdnative/rect3.h +++ b/modules/gdnative/include/gdnative/rect3.h @@ -45,10 +45,19 @@ typedef struct { } godot_rect3; #endif +// reduce extern "C" nesting for VS2013 +#ifdef __cplusplus +} +#endif + #include <gdnative/gdnative.h> #include <gdnative/plane.h> #include <gdnative/vector3.h> +#ifdef __cplusplus +extern "C" { +#endif + void GDAPI godot_rect3_new(godot_rect3 *r_dest, const godot_vector3 *p_pos, const godot_vector3 *p_size); godot_vector3 GDAPI godot_rect3_get_position(const godot_rect3 *p_self); diff --git a/modules/gdnative/include/gdnative/rid.h b/modules/gdnative/include/gdnative/rid.h index d9b5336fc9..caa1bb967e 100644 --- a/modules/gdnative/include/gdnative/rid.h +++ b/modules/gdnative/include/gdnative/rid.h @@ -45,8 +45,17 @@ typedef struct { } godot_rid; #endif +// reduce extern "C" nesting for VS2013 +#ifdef __cplusplus +} +#endif + #include <gdnative/gdnative.h> +#ifdef __cplusplus +extern "C" { +#endif + void GDAPI godot_rid_new(godot_rid *r_dest); godot_int GDAPI godot_rid_get_id(const godot_rid *p_self); diff --git a/modules/gdnative/include/gdnative/string.h b/modules/gdnative/include/gdnative/string.h index aca23a81d8..f30fdb8dc7 100644 --- a/modules/gdnative/include/gdnative/string.h +++ b/modules/gdnative/include/gdnative/string.h @@ -46,9 +46,18 @@ typedef struct { } godot_string; #endif +// reduce extern "C" nesting for VS2013 +#ifdef __cplusplus +} +#endif + #include <gdnative/gdnative.h> #include <gdnative/variant.h> +#ifdef __cplusplus +extern "C" { +#endif + void GDAPI godot_string_new(godot_string *r_dest); void GDAPI godot_string_new_copy(godot_string *r_dest, const godot_string *p_src); void GDAPI godot_string_new_data(godot_string *r_dest, const char *p_contents, const int p_size); diff --git a/modules/gdnative/include/gdnative/string_name.h b/modules/gdnative/include/gdnative/string_name.h new file mode 100644 index 0000000000..ee9f603d20 --- /dev/null +++ b/modules/gdnative/include/gdnative/string_name.h @@ -0,0 +1,77 @@ +/*************************************************************************/ +/* string_name.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* http://www.godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 GODOT_STRING_NAME_H +#define GODOT_STRING_NAME_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include <stdint.h> +#include <wchar.h> + +#define GODOT_STRING_NAME_SIZE sizeof(void *) + +#ifndef GODOT_CORE_API_GODOT_STRING_NAME_TYPE_DEFINED +#define GODOT_CORE_API_GODOT_STRING_NAME_TYPE_DEFINED +typedef struct { + uint8_t _dont_touch_that[GODOT_STRING_NAME_SIZE]; +} godot_string_name; +#endif + +// reduce extern "C" nesting for VS2013 +#ifdef __cplusplus +} +#endif + +#include <gdnative/gdnative.h> + +#ifdef __cplusplus +extern "C" { +#endif + +void GDAPI godot_string_name_new(godot_string_name *r_dest, const godot_string *p_name); +void GDAPI godot_string_name_new_data(godot_string_name *r_dest, const char *p_name); + +godot_string GDAPI godot_string_name_get_name(const godot_string_name *p_self); + +uint32_t GDAPI godot_string_name_get_hash(const godot_string_name *p_self); +const void GDAPI *godot_string_name_get_data_unique_pointer(const godot_string_name *p_self); + +godot_bool GDAPI godot_string_name_operator_equal(const godot_string_name *p_self, const godot_string_name *p_other); +godot_bool GDAPI godot_string_name_operator_less(const godot_string_name *p_self, const godot_string_name *p_other); + +void GDAPI godot_string_name_destroy(godot_string_name *p_self); + +#ifdef __cplusplus +} +#endif + +#endif // GODOT_STRING_NAME_H diff --git a/modules/gdnative/include/gdnative/transform.h b/modules/gdnative/include/gdnative/transform.h index 656afae129..8f50b01fb5 100644 --- a/modules/gdnative/include/gdnative/transform.h +++ b/modules/gdnative/include/gdnative/transform.h @@ -45,11 +45,20 @@ typedef struct { } godot_transform; #endif +// reduce extern "C" nesting for VS2013 +#ifdef __cplusplus +} +#endif + #include <gdnative/basis.h> #include <gdnative/gdnative.h> #include <gdnative/variant.h> #include <gdnative/vector3.h> +#ifdef __cplusplus +extern "C" { +#endif + void GDAPI godot_transform_new_with_axis_origin(godot_transform *r_dest, const godot_vector3 *p_x_axis, const godot_vector3 *p_y_axis, const godot_vector3 *p_z_axis, const godot_vector3 *p_origin); void GDAPI godot_transform_new(godot_transform *r_dest, const godot_basis *p_basis, const godot_vector3 *p_origin); diff --git a/modules/gdnative/include/gdnative/transform2d.h b/modules/gdnative/include/gdnative/transform2d.h index a945868b17..c68bd2963f 100644 --- a/modules/gdnative/include/gdnative/transform2d.h +++ b/modules/gdnative/include/gdnative/transform2d.h @@ -45,10 +45,19 @@ typedef struct { } godot_transform2d; #endif +// reduce extern "C" nesting for VS2013 +#ifdef __cplusplus +} +#endif + #include <gdnative/gdnative.h> #include <gdnative/variant.h> #include <gdnative/vector2.h> +#ifdef __cplusplus +extern "C" { +#endif + void GDAPI godot_transform2d_new(godot_transform2d *r_dest, const godot_real p_rot, const godot_vector2 *p_pos); void GDAPI godot_transform2d_new_axis_origin(godot_transform2d *r_dest, const godot_vector2 *p_x_axis, const godot_vector2 *p_y_axis, const godot_vector2 *p_origin); diff --git a/modules/gdnative/include/gdnative/variant.h b/modules/gdnative/include/gdnative/variant.h index 7b804c1eaf..3d744ef1f2 100644 --- a/modules/gdnative/include/gdnative/variant.h +++ b/modules/gdnative/include/gdnative/variant.h @@ -99,6 +99,11 @@ typedef struct godot_variant_call_error { godot_variant_type expected; } godot_variant_call_error; +// reduce extern "C" nesting for VS2013 +#ifdef __cplusplus +} +#endif + #include <gdnative/array.h> #include <gdnative/basis.h> #include <gdnative/color.h> @@ -119,6 +124,10 @@ typedef struct godot_variant_call_error { #include <gdnative/gdnative.h> +#ifdef __cplusplus +extern "C" { +#endif + godot_variant_type GDAPI godot_variant_get_type(const godot_variant *p_v); void GDAPI godot_variant_new_copy(godot_variant *r_dest, const godot_variant *p_src); diff --git a/modules/gdnative/include/gdnative/vector2.h b/modules/gdnative/include/gdnative/vector2.h index 0af4abae27..07105abaf2 100644 --- a/modules/gdnative/include/gdnative/vector2.h +++ b/modules/gdnative/include/gdnative/vector2.h @@ -45,8 +45,17 @@ typedef struct { } godot_vector2; #endif +// reduce extern "C" nesting for VS2013 +#ifdef __cplusplus +} +#endif + #include <gdnative/gdnative.h> +#ifdef __cplusplus +extern "C" { +#endif + void GDAPI godot_vector2_new(godot_vector2 *r_dest, const godot_real p_x, const godot_real p_y); godot_string GDAPI godot_vector2_as_string(const godot_vector2 *p_self); diff --git a/modules/gdnative/include/gdnative/vector3.h b/modules/gdnative/include/gdnative/vector3.h index a27d516ec5..3ed23778ec 100644 --- a/modules/gdnative/include/gdnative/vector3.h +++ b/modules/gdnative/include/gdnative/vector3.h @@ -45,9 +45,18 @@ typedef struct { } godot_vector3; #endif +// reduce extern "C" nesting for VS2013 +#ifdef __cplusplus +} +#endif + #include <gdnative/basis.h> #include <gdnative/gdnative.h> +#ifdef __cplusplus +extern "C" { +#endif + typedef enum { GODOT_VECTOR3_AXIS_X, GODOT_VECTOR3_AXIS_Y, diff --git a/modules/gdnative/include/gdnative_api_struct.h b/modules/gdnative/include/gdnative_api_struct.h deleted file mode 100644 index c345e27227..0000000000 --- a/modules/gdnative/include/gdnative_api_struct.h +++ /dev/null @@ -1,723 +0,0 @@ -/*************************************************************************/ -/* gdnative_api_struct.h */ -/*************************************************************************/ -/* This file is part of: */ -/* GODOT ENGINE */ -/* https://godotengine.org */ -/*************************************************************************/ -/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ -/* */ -/* 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 GODOT_GDNATIVE_API_STRUCT_H -#define GODOT_GDNATIVE_API_STRUCT_H - -#include <gdnative/gdnative.h> -#include <nativescript/godot_nativescript.h> - -#ifdef __cplusplus -extern "C" { -#endif - -// Using X_MACRO to keep api function signatures in a single list -#define GODOT_GDNATIVE_API_FUNCTIONS \ - GDAPI_FUNC_VOID(godot_color_new_rgba, godot_color *r_dest, const godot_real p_r, const godot_real p_g, const godot_real p_b, const godot_real p_a) \ - GDAPI_FUNC_VOID(godot_color_new_rgb, godot_color *r_dest, const godot_real p_r, const godot_real p_g, const godot_real p_b) \ - GDAPI_FUNC(godot_color_get_r, godot_real, const godot_color *p_self) \ - GDAPI_FUNC_VOID(godot_color_set_r, godot_color *p_self, const godot_real r) \ - GDAPI_FUNC(godot_color_get_g, godot_real, const godot_color *p_self) \ - GDAPI_FUNC_VOID(godot_color_set_g, godot_color *p_self, const godot_real g) \ - GDAPI_FUNC(godot_color_get_b, godot_real, const godot_color *p_self) \ - GDAPI_FUNC_VOID(godot_color_set_b, godot_color *p_self, const godot_real b) \ - GDAPI_FUNC(godot_color_get_a, godot_real, const godot_color *p_self) \ - GDAPI_FUNC_VOID(godot_color_set_a, godot_color *p_self, const godot_real a) \ - GDAPI_FUNC(godot_color_get_h, godot_real, const godot_color *p_self) \ - GDAPI_FUNC(godot_color_get_s, godot_real, const godot_color *p_self) \ - GDAPI_FUNC(godot_color_get_v, godot_real, const godot_color *p_self) \ - GDAPI_FUNC(godot_color_as_string, godot_string, const godot_color *p_self) \ - GDAPI_FUNC(godot_color_to_rgba32, godot_int, const godot_color *p_self) \ - GDAPI_FUNC(godot_color_to_argb32, godot_int, const godot_color *p_self) \ - GDAPI_FUNC(godot_color_gray, godot_real, const godot_color *p_self) \ - GDAPI_FUNC(godot_color_inverted, godot_color, const godot_color *p_self) \ - GDAPI_FUNC(godot_color_contrasted, godot_color, const godot_color *p_self) \ - GDAPI_FUNC(godot_color_linear_interpolate, godot_color, const godot_color *p_self, const godot_color *p_b, const godot_real p_t) \ - GDAPI_FUNC(godot_color_blend, godot_color, const godot_color *p_self, const godot_color *p_over) \ - GDAPI_FUNC(godot_color_to_html, godot_string, const godot_color *p_self, const godot_bool p_with_alpha) \ - GDAPI_FUNC(godot_color_operator_equal, godot_bool, const godot_color *p_self, const godot_color *p_b) \ - GDAPI_FUNC(godot_color_operator_less, godot_bool, const godot_color *p_self, const godot_color *p_b) \ - GDAPI_FUNC_VOID(godot_vector2_new, godot_vector2 *r_dest, const godot_real p_x, const godot_real p_y) \ - GDAPI_FUNC(godot_vector2_as_string, godot_string, const godot_vector2 *p_self) \ - GDAPI_FUNC(godot_vector2_normalized, godot_vector2, const godot_vector2 *p_self) \ - GDAPI_FUNC(godot_vector2_length, godot_real, const godot_vector2 *p_self) \ - GDAPI_FUNC(godot_vector2_angle, godot_real, const godot_vector2 *p_self) \ - GDAPI_FUNC(godot_vector2_length_squared, godot_real, const godot_vector2 *p_self) \ - GDAPI_FUNC(godot_vector2_is_normalized, godot_bool, const godot_vector2 *p_self) \ - GDAPI_FUNC(godot_vector2_distance_to, godot_real, const godot_vector2 *p_self, const godot_vector2 *p_to) \ - GDAPI_FUNC(godot_vector2_distance_squared_to, godot_real, const godot_vector2 *p_self, const godot_vector2 *p_to) \ - GDAPI_FUNC(godot_vector2_angle_to, godot_real, const godot_vector2 *p_self, const godot_vector2 *p_to) \ - GDAPI_FUNC(godot_vector2_angle_to_point, godot_real, const godot_vector2 *p_self, const godot_vector2 *p_to) \ - GDAPI_FUNC(godot_vector2_linear_interpolate, godot_vector2, const godot_vector2 *p_self, const godot_vector2 *p_b, const godot_real p_t) \ - GDAPI_FUNC(godot_vector2_cubic_interpolate, godot_vector2, const godot_vector2 *p_self, const godot_vector2 *p_b, const godot_vector2 *p_pre_a, const godot_vector2 *p_post_b, const godot_real p_t) \ - GDAPI_FUNC(godot_vector2_rotated, godot_vector2, const godot_vector2 *p_self, const godot_real p_phi) \ - GDAPI_FUNC(godot_vector2_tangent, godot_vector2, const godot_vector2 *p_self) \ - GDAPI_FUNC(godot_vector2_floor, godot_vector2, const godot_vector2 *p_self) \ - GDAPI_FUNC(godot_vector2_snapped, godot_vector2, const godot_vector2 *p_self, const godot_vector2 *p_by) \ - GDAPI_FUNC(godot_vector2_aspect, godot_real, const godot_vector2 *p_self) \ - GDAPI_FUNC(godot_vector2_dot, godot_real, const godot_vector2 *p_self, const godot_vector2 *p_with) \ - GDAPI_FUNC(godot_vector2_slide, godot_vector2, const godot_vector2 *p_self, const godot_vector2 *p_n) \ - GDAPI_FUNC(godot_vector2_bounce, godot_vector2, const godot_vector2 *p_self, const godot_vector2 *p_n) \ - GDAPI_FUNC(godot_vector2_reflect, godot_vector2, const godot_vector2 *p_self, const godot_vector2 *p_n) \ - GDAPI_FUNC(godot_vector2_abs, godot_vector2, const godot_vector2 *p_self) \ - GDAPI_FUNC(godot_vector2_clamped, godot_vector2, const godot_vector2 *p_self, const godot_real p_length) \ - GDAPI_FUNC(godot_vector2_operator_add, godot_vector2, const godot_vector2 *p_self, const godot_vector2 *p_b) \ - GDAPI_FUNC(godot_vector2_operator_substract, godot_vector2, const godot_vector2 *p_self, const godot_vector2 *p_b) \ - GDAPI_FUNC(godot_vector2_operator_multiply_vector, godot_vector2, const godot_vector2 *p_self, const godot_vector2 *p_b) \ - GDAPI_FUNC(godot_vector2_operator_multiply_scalar, godot_vector2, const godot_vector2 *p_self, const godot_real p_b) \ - GDAPI_FUNC(godot_vector2_operator_divide_vector, godot_vector2, const godot_vector2 *p_self, const godot_vector2 *p_b) \ - GDAPI_FUNC(godot_vector2_operator_divide_scalar, godot_vector2, const godot_vector2 *p_self, const godot_real p_b) \ - GDAPI_FUNC(godot_vector2_operator_equal, godot_bool, const godot_vector2 *p_self, const godot_vector2 *p_b) \ - GDAPI_FUNC(godot_vector2_operator_less, godot_bool, const godot_vector2 *p_self, const godot_vector2 *p_b) \ - GDAPI_FUNC(godot_vector2_operator_neg, godot_vector2, const godot_vector2 *p_self) \ - GDAPI_FUNC_VOID(godot_vector2_set_x, godot_vector2 *p_self, const godot_real p_x) \ - GDAPI_FUNC_VOID(godot_vector2_set_y, godot_vector2 *p_self, const godot_real p_y) \ - GDAPI_FUNC(godot_vector2_get_x, godot_real, const godot_vector2 *p_self) \ - GDAPI_FUNC(godot_vector2_get_y, godot_real, const godot_vector2 *p_self) \ - GDAPI_FUNC_VOID(godot_quat_new, godot_quat *r_dest, const godot_real p_x, const godot_real p_y, const godot_real p_z, const godot_real p_w) \ - GDAPI_FUNC_VOID(godot_quat_new_with_axis_angle, godot_quat *r_dest, const godot_vector3 *p_axis, const godot_real p_angle) \ - GDAPI_FUNC(godot_quat_get_x, godot_real, const godot_quat *p_self) \ - GDAPI_FUNC_VOID(godot_quat_set_x, godot_quat *p_self, const godot_real val) \ - GDAPI_FUNC(godot_quat_get_y, godot_real, const godot_quat *p_self) \ - GDAPI_FUNC_VOID(godot_quat_set_y, godot_quat *p_self, const godot_real val) \ - GDAPI_FUNC(godot_quat_get_z, godot_real, const godot_quat *p_self) \ - GDAPI_FUNC_VOID(godot_quat_set_z, godot_quat *p_self, const godot_real val) \ - GDAPI_FUNC(godot_quat_get_w, godot_real, const godot_quat *p_self) \ - GDAPI_FUNC_VOID(godot_quat_set_w, godot_quat *p_self, const godot_real val) \ - GDAPI_FUNC(godot_quat_as_string, godot_string, const godot_quat *p_self) \ - GDAPI_FUNC(godot_quat_length, godot_real, const godot_quat *p_self) \ - GDAPI_FUNC(godot_quat_length_squared, godot_real, const godot_quat *p_self) \ - GDAPI_FUNC(godot_quat_normalized, godot_quat, const godot_quat *p_self) \ - GDAPI_FUNC(godot_quat_is_normalized, godot_bool, const godot_quat *p_self) \ - GDAPI_FUNC(godot_quat_inverse, godot_quat, const godot_quat *p_self) \ - GDAPI_FUNC(godot_quat_dot, godot_real, const godot_quat *p_self, const godot_quat *p_b) \ - GDAPI_FUNC(godot_quat_xform, godot_vector3, const godot_quat *p_self, const godot_vector3 *p_v) \ - GDAPI_FUNC(godot_quat_slerp, godot_quat, const godot_quat *p_self, const godot_quat *p_b, const godot_real p_t) \ - GDAPI_FUNC(godot_quat_slerpni, godot_quat, const godot_quat *p_self, const godot_quat *p_b, const godot_real p_t) \ - GDAPI_FUNC(godot_quat_cubic_slerp, godot_quat, const godot_quat *p_self, const godot_quat *p_b, const godot_quat *p_pre_a, const godot_quat *p_post_b, const godot_real p_t) \ - GDAPI_FUNC(godot_quat_operator_multiply, godot_quat, const godot_quat *p_self, const godot_real p_b) \ - GDAPI_FUNC(godot_quat_operator_add, godot_quat, const godot_quat *p_self, const godot_quat *p_b) \ - GDAPI_FUNC(godot_quat_operator_substract, godot_quat, const godot_quat *p_self, const godot_quat *p_b) \ - GDAPI_FUNC(godot_quat_operator_divide, godot_quat, const godot_quat *p_self, const godot_real p_b) \ - GDAPI_FUNC(godot_quat_operator_equal, godot_bool, const godot_quat *p_self, const godot_quat *p_b) \ - GDAPI_FUNC(godot_quat_operator_neg, godot_quat, const godot_quat *p_self) \ - GDAPI_FUNC_VOID(godot_basis_new_with_rows, godot_basis *r_dest, const godot_vector3 *p_x_axis, const godot_vector3 *p_y_axis, const godot_vector3 *p_z_axis) \ - GDAPI_FUNC_VOID(godot_basis_new_with_axis_and_angle, godot_basis *r_dest, const godot_vector3 *p_axis, const godot_real p_phi) \ - GDAPI_FUNC_VOID(godot_basis_new_with_euler, godot_basis *r_dest, const godot_vector3 *p_euler) \ - GDAPI_FUNC(godot_basis_as_string, godot_string, const godot_basis *p_self) \ - GDAPI_FUNC(godot_basis_inverse, godot_basis, const godot_basis *p_self) \ - GDAPI_FUNC(godot_basis_transposed, godot_basis, const godot_basis *p_self) \ - GDAPI_FUNC(godot_basis_orthonormalized, godot_basis, const godot_basis *p_self) \ - GDAPI_FUNC(godot_basis_determinant, godot_real, const godot_basis *p_self) \ - GDAPI_FUNC(godot_basis_rotated, godot_basis, const godot_basis *p_self, const godot_vector3 *p_axis, const godot_real p_phi) \ - GDAPI_FUNC(godot_basis_scaled, godot_basis, const godot_basis *p_self, const godot_vector3 *p_scale) \ - GDAPI_FUNC(godot_basis_get_scale, godot_vector3, const godot_basis *p_self) \ - GDAPI_FUNC(godot_basis_get_euler, godot_vector3, const godot_basis *p_self) \ - GDAPI_FUNC(godot_basis_tdotx, godot_real, const godot_basis *p_self, const godot_vector3 *p_with) \ - GDAPI_FUNC(godot_basis_tdoty, godot_real, const godot_basis *p_self, const godot_vector3 *p_with) \ - GDAPI_FUNC(godot_basis_tdotz, godot_real, const godot_basis *p_self, const godot_vector3 *p_with) \ - GDAPI_FUNC(godot_basis_xform, godot_vector3, const godot_basis *p_self, const godot_vector3 *p_v) \ - GDAPI_FUNC(godot_basis_xform_inv, godot_vector3, const godot_basis *p_self, const godot_vector3 *p_v) \ - GDAPI_FUNC(godot_basis_get_orthogonal_index, godot_int, const godot_basis *p_self) \ - GDAPI_FUNC_VOID(godot_basis_new, godot_basis *r_dest) \ - GDAPI_FUNC_VOID(godot_basis_new_with_euler_quat, godot_basis *r_dest, const godot_quat *p_euler) \ - GDAPI_FUNC_VOID(godot_basis_get_elements, godot_basis *p_self, godot_vector3 *p_elements) \ - GDAPI_FUNC(godot_basis_get_axis, godot_vector3, const godot_basis *p_self, const godot_int p_axis) \ - GDAPI_FUNC_VOID(godot_basis_set_axis, godot_basis *p_self, const godot_int p_axis, const godot_vector3 *p_value) \ - GDAPI_FUNC(godot_basis_get_row, godot_vector3, const godot_basis *p_self, const godot_int p_row) \ - GDAPI_FUNC_VOID(godot_basis_set_row, godot_basis *p_self, const godot_int p_row, const godot_vector3 *p_value) \ - GDAPI_FUNC(godot_basis_operator_equal, godot_bool, const godot_basis *p_self, const godot_basis *p_b) \ - GDAPI_FUNC(godot_basis_operator_add, godot_basis, const godot_basis *p_self, const godot_basis *p_b) \ - GDAPI_FUNC(godot_basis_operator_substract, godot_basis, const godot_basis *p_self, const godot_basis *p_b) \ - GDAPI_FUNC(godot_basis_operator_multiply_vector, godot_basis, const godot_basis *p_self, const godot_basis *p_b) \ - GDAPI_FUNC(godot_basis_operator_multiply_scalar, godot_basis, const godot_basis *p_self, const godot_real p_b) \ - GDAPI_FUNC_VOID(godot_vector3_new, godot_vector3 *r_dest, const godot_real p_x, const godot_real p_y, const godot_real p_z) \ - GDAPI_FUNC(godot_vector3_as_string, godot_string, const godot_vector3 *p_self) \ - GDAPI_FUNC(godot_vector3_min_axis, godot_int, const godot_vector3 *p_self) \ - GDAPI_FUNC(godot_vector3_max_axis, godot_int, const godot_vector3 *p_self) \ - GDAPI_FUNC(godot_vector3_length, godot_real, const godot_vector3 *p_self) \ - GDAPI_FUNC(godot_vector3_length_squared, godot_real, const godot_vector3 *p_self) \ - GDAPI_FUNC(godot_vector3_is_normalized, godot_bool, const godot_vector3 *p_self) \ - GDAPI_FUNC(godot_vector3_normalized, godot_vector3, const godot_vector3 *p_self) \ - GDAPI_FUNC(godot_vector3_inverse, godot_vector3, const godot_vector3 *p_self) \ - GDAPI_FUNC(godot_vector3_snapped, godot_vector3, const godot_vector3 *p_self, const godot_vector3 *p_by) \ - GDAPI_FUNC(godot_vector3_rotated, godot_vector3, const godot_vector3 *p_self, const godot_vector3 *p_axis, const godot_real p_phi) \ - GDAPI_FUNC(godot_vector3_linear_interpolate, godot_vector3, const godot_vector3 *p_self, const godot_vector3 *p_b, const godot_real p_t) \ - GDAPI_FUNC(godot_vector3_cubic_interpolate, godot_vector3, const godot_vector3 *p_self, const godot_vector3 *p_b, const godot_vector3 *p_pre_a, const godot_vector3 *p_post_b, const godot_real p_t) \ - GDAPI_FUNC(godot_vector3_dot, godot_real, const godot_vector3 *p_self, const godot_vector3 *p_b) \ - GDAPI_FUNC(godot_vector3_cross, godot_vector3, const godot_vector3 *p_self, const godot_vector3 *p_b) \ - GDAPI_FUNC(godot_vector3_outer, godot_basis, const godot_vector3 *p_self, const godot_vector3 *p_b) \ - GDAPI_FUNC(godot_vector3_to_diagonal_matrix, godot_basis, const godot_vector3 *p_self) \ - GDAPI_FUNC(godot_vector3_abs, godot_vector3, const godot_vector3 *p_self) \ - GDAPI_FUNC(godot_vector3_floor, godot_vector3, const godot_vector3 *p_self) \ - GDAPI_FUNC(godot_vector3_ceil, godot_vector3, const godot_vector3 *p_self) \ - GDAPI_FUNC(godot_vector3_distance_to, godot_real, const godot_vector3 *p_self, const godot_vector3 *p_b) \ - GDAPI_FUNC(godot_vector3_distance_squared_to, godot_real, const godot_vector3 *p_self, const godot_vector3 *p_b) \ - GDAPI_FUNC(godot_vector3_angle_to, godot_real, const godot_vector3 *p_self, const godot_vector3 *p_to) \ - GDAPI_FUNC(godot_vector3_slide, godot_vector3, const godot_vector3 *p_self, const godot_vector3 *p_n) \ - GDAPI_FUNC(godot_vector3_bounce, godot_vector3, const godot_vector3 *p_self, const godot_vector3 *p_n) \ - GDAPI_FUNC(godot_vector3_reflect, godot_vector3, const godot_vector3 *p_self, const godot_vector3 *p_n) \ - GDAPI_FUNC(godot_vector3_operator_add, godot_vector3, const godot_vector3 *p_self, const godot_vector3 *p_b) \ - GDAPI_FUNC(godot_vector3_operator_substract, godot_vector3, const godot_vector3 *p_self, const godot_vector3 *p_b) \ - GDAPI_FUNC(godot_vector3_operator_multiply_vector, godot_vector3, const godot_vector3 *p_self, const godot_vector3 *p_b) \ - GDAPI_FUNC(godot_vector3_operator_multiply_scalar, godot_vector3, const godot_vector3 *p_self, const godot_real p_b) \ - GDAPI_FUNC(godot_vector3_operator_divide_vector, godot_vector3, const godot_vector3 *p_self, const godot_vector3 *p_b) \ - GDAPI_FUNC(godot_vector3_operator_divide_scalar, godot_vector3, const godot_vector3 *p_self, const godot_real p_b) \ - GDAPI_FUNC(godot_vector3_operator_equal, godot_bool, const godot_vector3 *p_self, const godot_vector3 *p_b) \ - GDAPI_FUNC(godot_vector3_operator_less, godot_bool, const godot_vector3 *p_self, const godot_vector3 *p_b) \ - GDAPI_FUNC(godot_vector3_operator_neg, godot_vector3, const godot_vector3 *p_self) \ - GDAPI_FUNC_VOID(godot_vector3_set_axis, godot_vector3 *p_self, const godot_vector3_axis p_axis, const godot_real p_val) \ - GDAPI_FUNC(godot_vector3_get_axis, godot_real, const godot_vector3 *p_self, const godot_vector3_axis p_axis) \ - GDAPI_FUNC_VOID(godot_pool_byte_array_new, godot_pool_byte_array *r_dest) \ - GDAPI_FUNC_VOID(godot_pool_byte_array_new_copy, godot_pool_byte_array *r_dest, const godot_pool_byte_array *p_src) \ - GDAPI_FUNC_VOID(godot_pool_byte_array_new_with_array, godot_pool_byte_array *r_dest, const godot_array *p_a) \ - GDAPI_FUNC_VOID(godot_pool_byte_array_append, godot_pool_byte_array *p_self, const uint8_t p_data) \ - GDAPI_FUNC_VOID(godot_pool_byte_array_append_array, godot_pool_byte_array *p_self, const godot_pool_byte_array *p_array) \ - GDAPI_FUNC(godot_pool_byte_array_insert, godot_error, godot_pool_byte_array *p_self, const godot_int p_idx, const uint8_t p_data) \ - GDAPI_FUNC_VOID(godot_pool_byte_array_invert, godot_pool_byte_array *p_self) \ - GDAPI_FUNC_VOID(godot_pool_byte_array_push_back, godot_pool_byte_array *p_self, const uint8_t p_data) \ - GDAPI_FUNC_VOID(godot_pool_byte_array_remove, godot_pool_byte_array *p_self, const godot_int p_idx) \ - GDAPI_FUNC_VOID(godot_pool_byte_array_resize, godot_pool_byte_array *p_self, const godot_int p_size) \ - GDAPI_FUNC_VOID(godot_pool_byte_array_set, godot_pool_byte_array *p_self, const godot_int p_idx, const uint8_t p_data) \ - GDAPI_FUNC(godot_pool_byte_array_get, uint8_t, const godot_pool_byte_array *p_self, const godot_int p_idx) \ - GDAPI_FUNC(godot_pool_byte_array_size, godot_int, const godot_pool_byte_array *p_self) \ - GDAPI_FUNC_VOID(godot_pool_byte_array_destroy, godot_pool_byte_array *p_self) \ - GDAPI_FUNC_VOID(godot_pool_int_array_new, godot_pool_int_array *r_dest) \ - GDAPI_FUNC_VOID(godot_pool_int_array_new_copy, godot_pool_int_array *r_dest, const godot_pool_int_array *p_src) \ - GDAPI_FUNC_VOID(godot_pool_int_array_new_with_array, godot_pool_int_array *r_dest, const godot_array *p_a) \ - GDAPI_FUNC_VOID(godot_pool_int_array_append, godot_pool_int_array *p_self, const godot_int p_data) \ - GDAPI_FUNC_VOID(godot_pool_int_array_append_array, godot_pool_int_array *p_self, const godot_pool_int_array *p_array) \ - GDAPI_FUNC(godot_pool_int_array_insert, godot_error, godot_pool_int_array *p_self, const godot_int p_idx, const godot_int p_data) \ - GDAPI_FUNC_VOID(godot_pool_int_array_invert, godot_pool_int_array *p_self) \ - GDAPI_FUNC_VOID(godot_pool_int_array_push_back, godot_pool_int_array *p_self, const godot_int p_data) \ - GDAPI_FUNC_VOID(godot_pool_int_array_remove, godot_pool_int_array *p_self, const godot_int p_idx) \ - GDAPI_FUNC_VOID(godot_pool_int_array_resize, godot_pool_int_array *p_self, const godot_int p_size) \ - GDAPI_FUNC_VOID(godot_pool_int_array_set, godot_pool_int_array *p_self, const godot_int p_idx, const godot_int p_data) \ - GDAPI_FUNC(godot_pool_int_array_get, godot_int, const godot_pool_int_array *p_self, const godot_int p_idx) \ - GDAPI_FUNC(godot_pool_int_array_size, godot_int, const godot_pool_int_array *p_self) \ - GDAPI_FUNC_VOID(godot_pool_int_array_destroy, godot_pool_int_array *p_self) \ - GDAPI_FUNC_VOID(godot_pool_real_array_new, godot_pool_real_array *r_dest) \ - GDAPI_FUNC_VOID(godot_pool_real_array_new_copy, godot_pool_real_array *r_dest, const godot_pool_real_array *p_src) \ - GDAPI_FUNC_VOID(godot_pool_real_array_new_with_array, godot_pool_real_array *r_dest, const godot_array *p_a) \ - GDAPI_FUNC_VOID(godot_pool_real_array_append, godot_pool_real_array *p_self, const godot_real p_data) \ - GDAPI_FUNC_VOID(godot_pool_real_array_append_array, godot_pool_real_array *p_self, const godot_pool_real_array *p_array) \ - GDAPI_FUNC(godot_pool_real_array_insert, godot_error, godot_pool_real_array *p_self, const godot_int p_idx, const godot_real p_data) \ - GDAPI_FUNC_VOID(godot_pool_real_array_invert, godot_pool_real_array *p_self) \ - GDAPI_FUNC_VOID(godot_pool_real_array_push_back, godot_pool_real_array *p_self, const godot_real p_data) \ - GDAPI_FUNC_VOID(godot_pool_real_array_remove, godot_pool_real_array *p_self, const godot_int p_idx) \ - GDAPI_FUNC_VOID(godot_pool_real_array_resize, godot_pool_real_array *p_self, const godot_int p_size) \ - GDAPI_FUNC_VOID(godot_pool_real_array_set, godot_pool_real_array *p_self, const godot_int p_idx, const godot_real p_data) \ - GDAPI_FUNC(godot_pool_real_array_get, godot_real, const godot_pool_real_array *p_self, const godot_int p_idx) \ - GDAPI_FUNC(godot_pool_real_array_size, godot_int, const godot_pool_real_array *p_self) \ - GDAPI_FUNC_VOID(godot_pool_real_array_destroy, godot_pool_real_array *p_self) \ - GDAPI_FUNC_VOID(godot_pool_string_array_new, godot_pool_string_array *r_dest) \ - GDAPI_FUNC_VOID(godot_pool_string_array_new_copy, godot_pool_string_array *r_dest, const godot_pool_string_array *p_src) \ - GDAPI_FUNC_VOID(godot_pool_string_array_new_with_array, godot_pool_string_array *r_dest, const godot_array *p_a) \ - GDAPI_FUNC_VOID(godot_pool_string_array_append, godot_pool_string_array *p_self, const godot_string *p_data) \ - GDAPI_FUNC_VOID(godot_pool_string_array_append_array, godot_pool_string_array *p_self, const godot_pool_string_array *p_array) \ - GDAPI_FUNC(godot_pool_string_array_insert, godot_error, godot_pool_string_array *p_self, const godot_int p_idx, const godot_string *p_data) \ - GDAPI_FUNC_VOID(godot_pool_string_array_invert, godot_pool_string_array *p_self) \ - GDAPI_FUNC_VOID(godot_pool_string_array_push_back, godot_pool_string_array *p_self, const godot_string *p_data) \ - GDAPI_FUNC_VOID(godot_pool_string_array_remove, godot_pool_string_array *p_self, const godot_int p_idx) \ - GDAPI_FUNC_VOID(godot_pool_string_array_resize, godot_pool_string_array *p_self, const godot_int p_size) \ - GDAPI_FUNC_VOID(godot_pool_string_array_set, godot_pool_string_array *p_self, const godot_int p_idx, const godot_string *p_data) \ - GDAPI_FUNC(godot_pool_string_array_get, godot_string, const godot_pool_string_array *p_self, const godot_int p_idx) \ - GDAPI_FUNC(godot_pool_string_array_size, godot_int, const godot_pool_string_array *p_self) \ - GDAPI_FUNC_VOID(godot_pool_string_array_destroy, godot_pool_string_array *p_self) \ - GDAPI_FUNC_VOID(godot_pool_vector2_array_new, godot_pool_vector2_array *r_dest) \ - GDAPI_FUNC_VOID(godot_pool_vector2_array_new_copy, godot_pool_vector2_array *r_dest, const godot_pool_vector2_array *p_src) \ - GDAPI_FUNC_VOID(godot_pool_vector2_array_new_with_array, godot_pool_vector2_array *r_dest, const godot_array *p_a) \ - GDAPI_FUNC_VOID(godot_pool_vector2_array_append, godot_pool_vector2_array *p_self, const godot_vector2 *p_data) \ - GDAPI_FUNC_VOID(godot_pool_vector2_array_append_array, godot_pool_vector2_array *p_self, const godot_pool_vector2_array *p_array) \ - GDAPI_FUNC(godot_pool_vector2_array_insert, godot_error, godot_pool_vector2_array *p_self, const godot_int p_idx, const godot_vector2 *p_data) \ - GDAPI_FUNC_VOID(godot_pool_vector2_array_invert, godot_pool_vector2_array *p_self) \ - GDAPI_FUNC_VOID(godot_pool_vector2_array_push_back, godot_pool_vector2_array *p_self, const godot_vector2 *p_data) \ - GDAPI_FUNC_VOID(godot_pool_vector2_array_remove, godot_pool_vector2_array *p_self, const godot_int p_idx) \ - GDAPI_FUNC_VOID(godot_pool_vector2_array_resize, godot_pool_vector2_array *p_self, const godot_int p_size) \ - GDAPI_FUNC_VOID(godot_pool_vector2_array_set, godot_pool_vector2_array *p_self, const godot_int p_idx, const godot_vector2 *p_data) \ - GDAPI_FUNC(godot_pool_vector2_array_get, godot_vector2, const godot_pool_vector2_array *p_self, const godot_int p_idx) \ - GDAPI_FUNC(godot_pool_vector2_array_size, godot_int, const godot_pool_vector2_array *p_self) \ - GDAPI_FUNC_VOID(godot_pool_vector2_array_destroy, godot_pool_vector2_array *p_self) \ - GDAPI_FUNC_VOID(godot_pool_vector3_array_new, godot_pool_vector3_array *r_dest) \ - GDAPI_FUNC_VOID(godot_pool_vector3_array_new_copy, godot_pool_vector3_array *r_dest, const godot_pool_vector3_array *p_src) \ - GDAPI_FUNC_VOID(godot_pool_vector3_array_new_with_array, godot_pool_vector3_array *r_dest, const godot_array *p_a) \ - GDAPI_FUNC_VOID(godot_pool_vector3_array_append, godot_pool_vector3_array *p_self, const godot_vector3 *p_data) \ - GDAPI_FUNC_VOID(godot_pool_vector3_array_append_array, godot_pool_vector3_array *p_self, const godot_pool_vector3_array *p_array) \ - GDAPI_FUNC(godot_pool_vector3_array_insert, godot_error, godot_pool_vector3_array *p_self, const godot_int p_idx, const godot_vector3 *p_data) \ - GDAPI_FUNC_VOID(godot_pool_vector3_array_invert, godot_pool_vector3_array *p_self) \ - GDAPI_FUNC_VOID(godot_pool_vector3_array_push_back, godot_pool_vector3_array *p_self, const godot_vector3 *p_data) \ - GDAPI_FUNC_VOID(godot_pool_vector3_array_remove, godot_pool_vector3_array *p_self, const godot_int p_idx) \ - GDAPI_FUNC_VOID(godot_pool_vector3_array_resize, godot_pool_vector3_array *p_self, const godot_int p_size) \ - GDAPI_FUNC_VOID(godot_pool_vector3_array_set, godot_pool_vector3_array *p_self, const godot_int p_idx, const godot_vector3 *p_data) \ - GDAPI_FUNC(godot_pool_vector3_array_get, godot_vector3, const godot_pool_vector3_array *p_self, const godot_int p_idx) \ - GDAPI_FUNC(godot_pool_vector3_array_size, godot_int, const godot_pool_vector3_array *p_self) \ - GDAPI_FUNC_VOID(godot_pool_vector3_array_destroy, godot_pool_vector3_array *p_self) \ - GDAPI_FUNC_VOID(godot_pool_color_array_new, godot_pool_color_array *r_dest) \ - GDAPI_FUNC_VOID(godot_pool_color_array_new_copy, godot_pool_color_array *r_dest, const godot_pool_color_array *p_src) \ - GDAPI_FUNC_VOID(godot_pool_color_array_new_with_array, godot_pool_color_array *r_dest, const godot_array *p_a) \ - GDAPI_FUNC_VOID(godot_pool_color_array_append, godot_pool_color_array *p_self, const godot_color *p_data) \ - GDAPI_FUNC_VOID(godot_pool_color_array_append_array, godot_pool_color_array *p_self, const godot_pool_color_array *p_array) \ - GDAPI_FUNC(godot_pool_color_array_insert, godot_error, godot_pool_color_array *p_self, const godot_int p_idx, const godot_color *p_data) \ - GDAPI_FUNC_VOID(godot_pool_color_array_invert, godot_pool_color_array *p_self) \ - GDAPI_FUNC_VOID(godot_pool_color_array_push_back, godot_pool_color_array *p_self, const godot_color *p_data) \ - GDAPI_FUNC_VOID(godot_pool_color_array_remove, godot_pool_color_array *p_self, const godot_int p_idx) \ - GDAPI_FUNC_VOID(godot_pool_color_array_resize, godot_pool_color_array *p_self, const godot_int p_size) \ - GDAPI_FUNC_VOID(godot_pool_color_array_set, godot_pool_color_array *p_self, const godot_int p_idx, const godot_color *p_data) \ - GDAPI_FUNC(godot_pool_color_array_get, godot_color, const godot_pool_color_array *p_self, const godot_int p_idx) \ - GDAPI_FUNC(godot_pool_color_array_size, godot_int, const godot_pool_color_array *p_self) \ - GDAPI_FUNC_VOID(godot_pool_color_array_destroy, godot_pool_color_array *p_self) \ - GDAPI_FUNC_VOID(godot_array_new, godot_array *r_dest) \ - GDAPI_FUNC_VOID(godot_array_new_copy, godot_array *r_dest, const godot_array *p_src) \ - GDAPI_FUNC_VOID(godot_array_new_pool_color_array, godot_array *r_dest, const godot_pool_color_array *p_pca) \ - GDAPI_FUNC_VOID(godot_array_new_pool_vector3_array, godot_array *r_dest, const godot_pool_vector3_array *p_pv3a) \ - GDAPI_FUNC_VOID(godot_array_new_pool_vector2_array, godot_array *r_dest, const godot_pool_vector2_array *p_pv2a) \ - GDAPI_FUNC_VOID(godot_array_new_pool_string_array, godot_array *r_dest, const godot_pool_string_array *p_psa) \ - GDAPI_FUNC_VOID(godot_array_new_pool_real_array, godot_array *r_dest, const godot_pool_real_array *p_pra) \ - GDAPI_FUNC_VOID(godot_array_new_pool_int_array, godot_array *r_dest, const godot_pool_int_array *p_pia) \ - GDAPI_FUNC_VOID(godot_array_new_pool_byte_array, godot_array *r_dest, const godot_pool_byte_array *p_pba) \ - GDAPI_FUNC_VOID(godot_array_set, godot_array *p_self, const godot_int p_idx, const godot_variant *p_value) \ - GDAPI_FUNC(godot_array_get, godot_variant, const godot_array *p_self, const godot_int p_idx) \ - GDAPI_FUNC(godot_array_operator_index, godot_variant *, godot_array *p_self, const godot_int p_idx) \ - GDAPI_FUNC_VOID(godot_array_append, godot_array *p_self, const godot_variant *p_value) \ - GDAPI_FUNC_VOID(godot_array_clear, godot_array *p_self) \ - GDAPI_FUNC(godot_array_count, godot_int, const godot_array *p_self, const godot_variant *p_value) \ - GDAPI_FUNC(godot_array_empty, godot_bool, const godot_array *p_self) \ - GDAPI_FUNC_VOID(godot_array_erase, godot_array *p_self, const godot_variant *p_value) \ - GDAPI_FUNC(godot_array_front, godot_variant, const godot_array *p_self) \ - GDAPI_FUNC(godot_array_back, godot_variant, const godot_array *p_self) \ - GDAPI_FUNC(godot_array_find, godot_int, const godot_array *p_self, const godot_variant *p_what, const godot_int p_from) \ - GDAPI_FUNC(godot_array_find_last, godot_int, const godot_array *p_self, const godot_variant *p_what) \ - GDAPI_FUNC(godot_array_has, godot_bool, const godot_array *p_self, const godot_variant *p_value) \ - GDAPI_FUNC(godot_array_hash, godot_int, const godot_array *p_self) \ - GDAPI_FUNC_VOID(godot_array_insert, godot_array *p_self, const godot_int p_pos, const godot_variant *p_value) \ - GDAPI_FUNC_VOID(godot_array_invert, godot_array *p_self) \ - GDAPI_FUNC(godot_array_pop_back, godot_variant, godot_array *p_self) \ - GDAPI_FUNC(godot_array_pop_front, godot_variant, godot_array *p_self) \ - GDAPI_FUNC_VOID(godot_array_push_back, godot_array *p_self, const godot_variant *p_value) \ - GDAPI_FUNC_VOID(godot_array_push_front, godot_array *p_self, const godot_variant *p_value) \ - GDAPI_FUNC_VOID(godot_array_remove, godot_array *p_self, const godot_int p_idx) \ - GDAPI_FUNC_VOID(godot_array_resize, godot_array *p_self, const godot_int p_size) \ - GDAPI_FUNC(godot_array_rfind, godot_int, const godot_array *p_self, const godot_variant *p_what, const godot_int p_from) \ - GDAPI_FUNC(godot_array_size, godot_int, const godot_array *p_self) \ - GDAPI_FUNC_VOID(godot_array_sort, godot_array *p_self) \ - GDAPI_FUNC_VOID(godot_array_sort_custom, godot_array *p_self, godot_object *p_obj, const godot_string *p_func) \ - GDAPI_FUNC_VOID(godot_array_destroy, godot_array *p_self) \ - GDAPI_FUNC_VOID(godot_dictionary_new, godot_dictionary *r_dest) \ - GDAPI_FUNC_VOID(godot_dictionary_new_copy, godot_dictionary *r_dest, const godot_dictionary *p_src) \ - GDAPI_FUNC_VOID(godot_dictionary_destroy, godot_dictionary *p_self) \ - GDAPI_FUNC(godot_dictionary_size, godot_int, const godot_dictionary *p_self) \ - GDAPI_FUNC(godot_dictionary_empty, godot_bool, const godot_dictionary *p_self) \ - GDAPI_FUNC_VOID(godot_dictionary_clear, godot_dictionary *p_self) \ - GDAPI_FUNC(godot_dictionary_has, godot_bool, const godot_dictionary *p_self, const godot_variant *p_key) \ - GDAPI_FUNC(godot_dictionary_has_all, godot_bool, const godot_dictionary *p_self, const godot_array *p_keys) \ - GDAPI_FUNC_VOID(godot_dictionary_erase, godot_dictionary *p_self, const godot_variant *p_key) \ - GDAPI_FUNC(godot_dictionary_hash, godot_int, const godot_dictionary *p_self) \ - GDAPI_FUNC(godot_dictionary_keys, godot_array, const godot_dictionary *p_self) \ - GDAPI_FUNC(godot_dictionary_values, godot_array, const godot_dictionary *p_self) \ - GDAPI_FUNC(godot_dictionary_get, godot_variant, const godot_dictionary *p_self, const godot_variant *p_key) \ - GDAPI_FUNC_VOID(godot_dictionary_set, godot_dictionary *p_self, const godot_variant *p_key, const godot_variant *p_value) \ - GDAPI_FUNC(godot_dictionary_operator_index, godot_variant *, godot_dictionary *p_self, const godot_variant *p_key) \ - GDAPI_FUNC(godot_dictionary_next, godot_variant *, const godot_dictionary *p_self, const godot_variant *p_key) \ - GDAPI_FUNC(godot_dictionary_operator_equal, godot_bool, const godot_dictionary *p_self, const godot_dictionary *p_b) \ - GDAPI_FUNC(godot_dictionary_to_json, godot_string, const godot_dictionary *p_self) \ - GDAPI_FUNC_VOID(godot_node_path_new, godot_node_path *r_dest, const godot_string *p_from) \ - GDAPI_FUNC_VOID(godot_node_path_new_copy, godot_node_path *r_dest, const godot_node_path *p_src) \ - GDAPI_FUNC_VOID(godot_node_path_destroy, godot_node_path *p_self) \ - GDAPI_FUNC(godot_node_path_as_string, godot_string, const godot_node_path *p_self) \ - GDAPI_FUNC(godot_node_path_is_absolute, godot_bool, const godot_node_path *p_self) \ - GDAPI_FUNC(godot_node_path_get_name_count, godot_int, const godot_node_path *p_self) \ - GDAPI_FUNC(godot_node_path_get_name, godot_string, const godot_node_path *p_self, const godot_int p_idx) \ - GDAPI_FUNC(godot_node_path_get_subname_count, godot_int, const godot_node_path *p_self) \ - GDAPI_FUNC(godot_node_path_get_subname, godot_string, const godot_node_path *p_self, const godot_int p_idx) \ - GDAPI_FUNC(godot_node_path_get_property, godot_string, const godot_node_path *p_self) \ - GDAPI_FUNC(godot_node_path_is_empty, godot_bool, const godot_node_path *p_self) \ - GDAPI_FUNC(godot_node_path_operator_equal, godot_bool, const godot_node_path *p_self, const godot_node_path *p_b) \ - GDAPI_FUNC_VOID(godot_plane_new_with_reals, godot_plane *r_dest, const godot_real p_a, const godot_real p_b, const godot_real p_c, const godot_real p_d) \ - GDAPI_FUNC_VOID(godot_plane_new_with_vectors, godot_plane *r_dest, const godot_vector3 *p_v1, const godot_vector3 *p_v2, const godot_vector3 *p_v3) \ - GDAPI_FUNC_VOID(godot_plane_new_with_normal, godot_plane *r_dest, const godot_vector3 *p_normal, const godot_real p_d) \ - GDAPI_FUNC(godot_plane_as_string, godot_string, const godot_plane *p_self) \ - GDAPI_FUNC(godot_plane_normalized, godot_plane, const godot_plane *p_self) \ - GDAPI_FUNC(godot_plane_center, godot_vector3, const godot_plane *p_self) \ - GDAPI_FUNC(godot_plane_get_any_point, godot_vector3, const godot_plane *p_self) \ - GDAPI_FUNC(godot_plane_is_point_over, godot_bool, const godot_plane *p_self, const godot_vector3 *p_point) \ - GDAPI_FUNC(godot_plane_distance_to, godot_real, const godot_plane *p_self, const godot_vector3 *p_point) \ - GDAPI_FUNC(godot_plane_has_point, godot_bool, const godot_plane *p_self, const godot_vector3 *p_point, const godot_real p_epsilon) \ - GDAPI_FUNC(godot_plane_project, godot_vector3, const godot_plane *p_self, const godot_vector3 *p_point) \ - GDAPI_FUNC(godot_plane_intersect_3, godot_bool, const godot_plane *p_self, godot_vector3 *r_dest, const godot_plane *p_b, const godot_plane *p_c) \ - GDAPI_FUNC(godot_plane_intersects_ray, godot_bool, const godot_plane *p_self, godot_vector3 *r_dest, const godot_vector3 *p_from, const godot_vector3 *p_dir) \ - GDAPI_FUNC(godot_plane_intersects_segment, godot_bool, const godot_plane *p_self, godot_vector3 *r_dest, const godot_vector3 *p_begin, const godot_vector3 *p_end) \ - GDAPI_FUNC(godot_plane_operator_neg, godot_plane, const godot_plane *p_self) \ - GDAPI_FUNC(godot_plane_operator_equal, godot_bool, const godot_plane *p_self, const godot_plane *p_b) \ - GDAPI_FUNC_VOID(godot_plane_set_normal, godot_plane *p_self, const godot_vector3 *p_normal) \ - GDAPI_FUNC(godot_plane_get_normal, godot_vector3, const godot_plane *p_self) \ - GDAPI_FUNC(godot_plane_get_d, godot_real, const godot_plane *p_self) \ - GDAPI_FUNC_VOID(godot_plane_set_d, godot_plane *p_self, const godot_real p_d) \ - GDAPI_FUNC_VOID(godot_rect2_new_with_position_and_size, godot_rect2 *r_dest, const godot_vector2 *p_pos, const godot_vector2 *p_size) \ - GDAPI_FUNC_VOID(godot_rect2_new, godot_rect2 *r_dest, const godot_real p_x, const godot_real p_y, const godot_real p_width, const godot_real p_height) \ - GDAPI_FUNC(godot_rect2_as_string, godot_string, const godot_rect2 *p_self) \ - GDAPI_FUNC(godot_rect2_get_area, godot_real, const godot_rect2 *p_self) \ - GDAPI_FUNC(godot_rect2_intersects, godot_bool, const godot_rect2 *p_self, const godot_rect2 *p_b) \ - GDAPI_FUNC(godot_rect2_encloses, godot_bool, const godot_rect2 *p_self, const godot_rect2 *p_b) \ - GDAPI_FUNC(godot_rect2_has_no_area, godot_bool, const godot_rect2 *p_self) \ - GDAPI_FUNC(godot_rect2_clip, godot_rect2, const godot_rect2 *p_self, const godot_rect2 *p_b) \ - GDAPI_FUNC(godot_rect2_merge, godot_rect2, const godot_rect2 *p_self, const godot_rect2 *p_b) \ - GDAPI_FUNC(godot_rect2_has_point, godot_bool, const godot_rect2 *p_self, const godot_vector2 *p_point) \ - GDAPI_FUNC(godot_rect2_grow, godot_rect2, const godot_rect2 *p_self, const godot_real p_by) \ - GDAPI_FUNC(godot_rect2_expand, godot_rect2, const godot_rect2 *p_self, const godot_vector2 *p_to) \ - GDAPI_FUNC(godot_rect2_operator_equal, godot_bool, const godot_rect2 *p_self, const godot_rect2 *p_b) \ - GDAPI_FUNC(godot_rect2_get_position, godot_vector2, const godot_rect2 *p_self) \ - GDAPI_FUNC(godot_rect2_get_size, godot_vector2, const godot_rect2 *p_self) \ - GDAPI_FUNC_VOID(godot_rect2_set_position, godot_rect2 *p_self, const godot_vector2 *p_pos) \ - GDAPI_FUNC_VOID(godot_rect2_set_size, godot_rect2 *p_self, const godot_vector2 *p_size) \ - GDAPI_FUNC_VOID(godot_rect3_new, godot_rect3 *r_dest, const godot_vector3 *p_pos, const godot_vector3 *p_size) \ - GDAPI_FUNC(godot_rect3_get_position, godot_vector3, const godot_rect3 *p_self) \ - GDAPI_FUNC_VOID(godot_rect3_set_position, const godot_rect3 *p_self, const godot_vector3 *p_v) \ - GDAPI_FUNC(godot_rect3_get_size, godot_vector3, const godot_rect3 *p_self) \ - GDAPI_FUNC_VOID(godot_rect3_set_size, const godot_rect3 *p_self, const godot_vector3 *p_v) \ - GDAPI_FUNC(godot_rect3_as_string, godot_string, const godot_rect3 *p_self) \ - GDAPI_FUNC(godot_rect3_get_area, godot_real, const godot_rect3 *p_self) \ - GDAPI_FUNC(godot_rect3_has_no_area, godot_bool, const godot_rect3 *p_self) \ - GDAPI_FUNC(godot_rect3_has_no_surface, godot_bool, const godot_rect3 *p_self) \ - GDAPI_FUNC(godot_rect3_intersects, godot_bool, const godot_rect3 *p_self, const godot_rect3 *p_with) \ - GDAPI_FUNC(godot_rect3_encloses, godot_bool, const godot_rect3 *p_self, const godot_rect3 *p_with) \ - GDAPI_FUNC(godot_rect3_merge, godot_rect3, const godot_rect3 *p_self, const godot_rect3 *p_with) \ - GDAPI_FUNC(godot_rect3_intersection, godot_rect3, const godot_rect3 *p_self, const godot_rect3 *p_with) \ - GDAPI_FUNC(godot_rect3_intersects_plane, godot_bool, const godot_rect3 *p_self, const godot_plane *p_plane) \ - GDAPI_FUNC(godot_rect3_intersects_segment, godot_bool, const godot_rect3 *p_self, const godot_vector3 *p_from, const godot_vector3 *p_to) \ - GDAPI_FUNC(godot_rect3_has_point, godot_bool, const godot_rect3 *p_self, const godot_vector3 *p_point) \ - GDAPI_FUNC(godot_rect3_get_support, godot_vector3, const godot_rect3 *p_self, const godot_vector3 *p_dir) \ - GDAPI_FUNC(godot_rect3_get_longest_axis, godot_vector3, const godot_rect3 *p_self) \ - GDAPI_FUNC(godot_rect3_get_longest_axis_index, godot_int, const godot_rect3 *p_self) \ - GDAPI_FUNC(godot_rect3_get_longest_axis_size, godot_real, const godot_rect3 *p_self) \ - GDAPI_FUNC(godot_rect3_get_shortest_axis, godot_vector3, const godot_rect3 *p_self) \ - GDAPI_FUNC(godot_rect3_get_shortest_axis_index, godot_int, const godot_rect3 *p_self) \ - GDAPI_FUNC(godot_rect3_get_shortest_axis_size, godot_real, const godot_rect3 *p_self) \ - GDAPI_FUNC(godot_rect3_expand, godot_rect3, const godot_rect3 *p_self, const godot_vector3 *p_to_point) \ - GDAPI_FUNC(godot_rect3_grow, godot_rect3, const godot_rect3 *p_self, const godot_real p_by) \ - GDAPI_FUNC(godot_rect3_get_endpoint, godot_vector3, const godot_rect3 *p_self, const godot_int p_idx) \ - GDAPI_FUNC(godot_rect3_operator_equal, godot_bool, const godot_rect3 *p_self, const godot_rect3 *p_b) \ - GDAPI_FUNC_VOID(godot_rid_new, godot_rid *r_dest) \ - GDAPI_FUNC(godot_rid_get_id, godot_int, const godot_rid *p_self) \ - GDAPI_FUNC_VOID(godot_rid_new_with_resource, godot_rid *r_dest, const godot_object *p_from) \ - GDAPI_FUNC(godot_rid_operator_equal, godot_bool, const godot_rid *p_self, const godot_rid *p_b) \ - GDAPI_FUNC(godot_rid_operator_less, godot_bool, const godot_rid *p_self, const godot_rid *p_b) \ - GDAPI_FUNC_VOID(godot_transform_new_with_axis_origin, godot_transform *r_dest, const godot_vector3 *p_x_axis, const godot_vector3 *p_y_axis, const godot_vector3 *p_z_axis, const godot_vector3 *p_origin) \ - GDAPI_FUNC_VOID(godot_transform_new, godot_transform *r_dest, const godot_basis *p_basis, const godot_vector3 *p_origin) \ - GDAPI_FUNC(godot_transform_get_basis, godot_basis, const godot_transform *p_self) \ - GDAPI_FUNC_VOID(godot_transform_set_basis, godot_transform *p_self, godot_basis *p_v) \ - GDAPI_FUNC(godot_transform_get_origin, godot_vector3, const godot_transform *p_self) \ - GDAPI_FUNC_VOID(godot_transform_set_origin, godot_transform *p_self, godot_vector3 *p_v) \ - GDAPI_FUNC(godot_transform_as_string, godot_string, const godot_transform *p_self) \ - GDAPI_FUNC(godot_transform_inverse, godot_transform, const godot_transform *p_self) \ - GDAPI_FUNC(godot_transform_affine_inverse, godot_transform, const godot_transform *p_self) \ - GDAPI_FUNC(godot_transform_orthonormalized, godot_transform, const godot_transform *p_self) \ - GDAPI_FUNC(godot_transform_rotated, godot_transform, const godot_transform *p_self, const godot_vector3 *p_axis, const godot_real p_phi) \ - GDAPI_FUNC(godot_transform_scaled, godot_transform, const godot_transform *p_self, const godot_vector3 *p_scale) \ - GDAPI_FUNC(godot_transform_translated, godot_transform, const godot_transform *p_self, const godot_vector3 *p_ofs) \ - GDAPI_FUNC(godot_transform_looking_at, godot_transform, const godot_transform *p_self, const godot_vector3 *p_target, const godot_vector3 *p_up) \ - GDAPI_FUNC(godot_transform_xform_plane, godot_plane, const godot_transform *p_self, const godot_plane *p_v) \ - GDAPI_FUNC(godot_transform_xform_inv_plane, godot_plane, const godot_transform *p_self, const godot_plane *p_v) \ - GDAPI_FUNC_VOID(godot_transform_new_identity, godot_transform *r_dest) \ - GDAPI_FUNC(godot_transform_operator_equal, godot_bool, const godot_transform *p_self, const godot_transform *p_b) \ - GDAPI_FUNC(godot_transform_operator_multiply, godot_transform, const godot_transform *p_self, const godot_transform *p_b) \ - GDAPI_FUNC(godot_transform_xform_vector3, godot_vector3, const godot_transform *p_self, const godot_vector3 *p_v) \ - GDAPI_FUNC(godot_transform_xform_inv_vector3, godot_vector3, const godot_transform *p_self, const godot_vector3 *p_v) \ - GDAPI_FUNC(godot_transform_xform_rect3, godot_rect3, const godot_transform *p_self, const godot_rect3 *p_v) \ - GDAPI_FUNC(godot_transform_xform_inv_rect3, godot_rect3, const godot_transform *p_self, const godot_rect3 *p_v) \ - GDAPI_FUNC_VOID(godot_transform2d_new, godot_transform2d *r_dest, const godot_real p_rot, const godot_vector2 *p_pos) \ - GDAPI_FUNC_VOID(godot_transform2d_new_axis_origin, godot_transform2d *r_dest, const godot_vector2 *p_x_axis, const godot_vector2 *p_y_axis, const godot_vector2 *p_origin) \ - GDAPI_FUNC(godot_transform2d_as_string, godot_string, const godot_transform2d *p_self) \ - GDAPI_FUNC(godot_transform2d_inverse, godot_transform2d, const godot_transform2d *p_self) \ - GDAPI_FUNC(godot_transform2d_affine_inverse, godot_transform2d, const godot_transform2d *p_self) \ - GDAPI_FUNC(godot_transform2d_get_rotation, godot_real, const godot_transform2d *p_self) \ - GDAPI_FUNC(godot_transform2d_get_origin, godot_vector2, const godot_transform2d *p_self) \ - GDAPI_FUNC(godot_transform2d_get_scale, godot_vector2, const godot_transform2d *p_self) \ - GDAPI_FUNC(godot_transform2d_orthonormalized, godot_transform2d, const godot_transform2d *p_self) \ - GDAPI_FUNC(godot_transform2d_rotated, godot_transform2d, const godot_transform2d *p_self, const godot_real p_phi) \ - GDAPI_FUNC(godot_transform2d_scaled, godot_transform2d, const godot_transform2d *p_self, const godot_vector2 *p_scale) \ - GDAPI_FUNC(godot_transform2d_translated, godot_transform2d, const godot_transform2d *p_self, const godot_vector2 *p_offset) \ - GDAPI_FUNC(godot_transform2d_xform_vector2, godot_vector2, const godot_transform2d *p_self, const godot_vector2 *p_v) \ - GDAPI_FUNC(godot_transform2d_xform_inv_vector2, godot_vector2, const godot_transform2d *p_self, const godot_vector2 *p_v) \ - GDAPI_FUNC(godot_transform2d_basis_xform_vector2, godot_vector2, const godot_transform2d *p_self, const godot_vector2 *p_v) \ - GDAPI_FUNC(godot_transform2d_basis_xform_inv_vector2, godot_vector2, const godot_transform2d *p_self, const godot_vector2 *p_v) \ - GDAPI_FUNC(godot_transform2d_interpolate_with, godot_transform2d, const godot_transform2d *p_self, const godot_transform2d *p_m, const godot_real p_c) \ - GDAPI_FUNC(godot_transform2d_operator_equal, godot_bool, const godot_transform2d *p_self, const godot_transform2d *p_b) \ - GDAPI_FUNC(godot_transform2d_operator_multiply, godot_transform2d, const godot_transform2d *p_self, const godot_transform2d *p_b) \ - GDAPI_FUNC_VOID(godot_transform2d_new_identity, godot_transform2d *r_dest) \ - GDAPI_FUNC(godot_transform2d_xform_rect2, godot_rect2, const godot_transform2d *p_self, const godot_rect2 *p_v) \ - GDAPI_FUNC(godot_transform2d_xform_inv_rect2, godot_rect2, const godot_transform2d *p_self, const godot_rect2 *p_v) \ - GDAPI_FUNC(godot_variant_get_type, godot_variant_type, const godot_variant *p_v) \ - GDAPI_FUNC_VOID(godot_variant_new_copy, godot_variant *r_dest, const godot_variant *p_src) \ - GDAPI_FUNC_VOID(godot_variant_new_nil, godot_variant *r_dest) \ - GDAPI_FUNC_VOID(godot_variant_new_bool, godot_variant *p_v, const godot_bool p_b) \ - GDAPI_FUNC_VOID(godot_variant_new_uint, godot_variant *r_dest, const uint64_t p_i) \ - GDAPI_FUNC_VOID(godot_variant_new_int, godot_variant *r_dest, const int64_t p_i) \ - GDAPI_FUNC_VOID(godot_variant_new_real, godot_variant *r_dest, const double p_r) \ - GDAPI_FUNC_VOID(godot_variant_new_string, godot_variant *r_dest, const godot_string *p_s) \ - GDAPI_FUNC_VOID(godot_variant_new_vector2, godot_variant *r_dest, const godot_vector2 *p_v2) \ - GDAPI_FUNC_VOID(godot_variant_new_rect2, godot_variant *r_dest, const godot_rect2 *p_rect2) \ - GDAPI_FUNC_VOID(godot_variant_new_vector3, godot_variant *r_dest, const godot_vector3 *p_v3) \ - GDAPI_FUNC_VOID(godot_variant_new_transform2d, godot_variant *r_dest, const godot_transform2d *p_t2d) \ - GDAPI_FUNC_VOID(godot_variant_new_plane, godot_variant *r_dest, const godot_plane *p_plane) \ - GDAPI_FUNC_VOID(godot_variant_new_quat, godot_variant *r_dest, const godot_quat *p_quat) \ - GDAPI_FUNC_VOID(godot_variant_new_rect3, godot_variant *r_dest, const godot_rect3 *p_rect3) \ - GDAPI_FUNC_VOID(godot_variant_new_basis, godot_variant *r_dest, const godot_basis *p_basis) \ - GDAPI_FUNC_VOID(godot_variant_new_transform, godot_variant *r_dest, const godot_transform *p_trans) \ - GDAPI_FUNC_VOID(godot_variant_new_color, godot_variant *r_dest, const godot_color *p_color) \ - GDAPI_FUNC_VOID(godot_variant_new_node_path, godot_variant *r_dest, const godot_node_path *p_np) \ - GDAPI_FUNC_VOID(godot_variant_new_rid, godot_variant *r_dest, const godot_rid *p_rid) \ - GDAPI_FUNC_VOID(godot_variant_new_object, godot_variant *r_dest, const godot_object *p_obj) \ - GDAPI_FUNC_VOID(godot_variant_new_dictionary, godot_variant *r_dest, const godot_dictionary *p_dict) \ - GDAPI_FUNC_VOID(godot_variant_new_array, godot_variant *r_dest, const godot_array *p_arr) \ - GDAPI_FUNC_VOID(godot_variant_new_pool_byte_array, godot_variant *r_dest, const godot_pool_byte_array *p_pba) \ - GDAPI_FUNC_VOID(godot_variant_new_pool_int_array, godot_variant *r_dest, const godot_pool_int_array *p_pia) \ - GDAPI_FUNC_VOID(godot_variant_new_pool_real_array, godot_variant *r_dest, const godot_pool_real_array *p_pra) \ - GDAPI_FUNC_VOID(godot_variant_new_pool_string_array, godot_variant *r_dest, const godot_pool_string_array *p_psa) \ - GDAPI_FUNC_VOID(godot_variant_new_pool_vector2_array, godot_variant *r_dest, const godot_pool_vector2_array *p_pv2a) \ - GDAPI_FUNC_VOID(godot_variant_new_pool_vector3_array, godot_variant *r_dest, const godot_pool_vector3_array *p_pv3a) \ - GDAPI_FUNC_VOID(godot_variant_new_pool_color_array, godot_variant *r_dest, const godot_pool_color_array *p_pca) \ - GDAPI_FUNC(godot_variant_as_bool, godot_bool, const godot_variant *p_self) \ - GDAPI_FUNC(godot_variant_as_uint, uint64_t, const godot_variant *p_self) \ - GDAPI_FUNC(godot_variant_as_int, int64_t, const godot_variant *p_self) \ - GDAPI_FUNC(godot_variant_as_real, double, const godot_variant *p_self) \ - GDAPI_FUNC(godot_variant_as_string, godot_string, const godot_variant *p_self) \ - GDAPI_FUNC(godot_variant_as_vector2, godot_vector2, const godot_variant *p_self) \ - GDAPI_FUNC(godot_variant_as_rect2, godot_rect2, const godot_variant *p_self) \ - GDAPI_FUNC(godot_variant_as_vector3, godot_vector3, const godot_variant *p_self) \ - GDAPI_FUNC(godot_variant_as_transform2d, godot_transform2d, const godot_variant *p_self) \ - GDAPI_FUNC(godot_variant_as_plane, godot_plane, const godot_variant *p_self) \ - GDAPI_FUNC(godot_variant_as_quat, godot_quat, const godot_variant *p_self) \ - GDAPI_FUNC(godot_variant_as_rect3, godot_rect3, const godot_variant *p_self) \ - GDAPI_FUNC(godot_variant_as_basis, godot_basis, const godot_variant *p_self) \ - GDAPI_FUNC(godot_variant_as_transform, godot_transform, const godot_variant *p_self) \ - GDAPI_FUNC(godot_variant_as_color, godot_color, const godot_variant *p_self) \ - GDAPI_FUNC(godot_variant_as_node_path, godot_node_path, const godot_variant *p_self) \ - GDAPI_FUNC(godot_variant_as_rid, godot_rid, const godot_variant *p_self) \ - GDAPI_FUNC(godot_variant_as_object, godot_object *, const godot_variant *p_self) \ - GDAPI_FUNC(godot_variant_as_dictionary, godot_dictionary, const godot_variant *p_self) \ - GDAPI_FUNC(godot_variant_as_array, godot_array, const godot_variant *p_self) \ - GDAPI_FUNC(godot_variant_as_pool_byte_array, godot_pool_byte_array, const godot_variant *p_self) \ - GDAPI_FUNC(godot_variant_as_pool_int_array, godot_pool_int_array, const godot_variant *p_self) \ - GDAPI_FUNC(godot_variant_as_pool_real_array, godot_pool_real_array, const godot_variant *p_self) \ - GDAPI_FUNC(godot_variant_as_pool_string_array, godot_pool_string_array, const godot_variant *p_self) \ - GDAPI_FUNC(godot_variant_as_pool_vector2_array, godot_pool_vector2_array, const godot_variant *p_self) \ - GDAPI_FUNC(godot_variant_as_pool_vector3_array, godot_pool_vector3_array, const godot_variant *p_self) \ - GDAPI_FUNC(godot_variant_as_pool_color_array, godot_pool_color_array, const godot_variant *p_self) \ - GDAPI_FUNC(godot_variant_call, godot_variant, godot_variant *p_self, const godot_string *p_method, const godot_variant **p_args, const godot_int p_argcount, godot_variant_call_error *r_error) \ - GDAPI_FUNC(godot_variant_has_method, godot_bool, const godot_variant *p_self, const godot_string *p_method) \ - GDAPI_FUNC(godot_variant_operator_equal, godot_bool, const godot_variant *p_self, const godot_variant *p_other) \ - GDAPI_FUNC(godot_variant_operator_less, godot_bool, const godot_variant *p_self, const godot_variant *p_other) \ - GDAPI_FUNC(godot_variant_hash_compare, godot_bool, const godot_variant *p_self, const godot_variant *p_other) \ - GDAPI_FUNC(godot_variant_booleanize, godot_bool, const godot_variant *p_self) \ - GDAPI_FUNC_VOID(godot_variant_destroy, godot_variant *p_self) \ - GDAPI_FUNC_VOID(godot_string_new, godot_string *r_dest) \ - GDAPI_FUNC_VOID(godot_string_new_copy, godot_string *r_dest, const godot_string *p_src) \ - GDAPI_FUNC_VOID(godot_string_new_data, godot_string *r_dest, const char *p_contents, const int p_size) \ - GDAPI_FUNC_VOID(godot_string_new_unicode_data, godot_string *r_dest, const wchar_t *p_contents, const int p_size) \ - GDAPI_FUNC_VOID(godot_string_get_data, const godot_string *p_self, char *p_dest, int *p_size) \ - GDAPI_FUNC(godot_string_operator_index, wchar_t *, godot_string *p_self, const godot_int p_idx) \ - GDAPI_FUNC(godot_string_c_str, const char *, const godot_string *p_self) \ - GDAPI_FUNC(godot_string_unicode_str, const wchar_t *, const godot_string *p_self) \ - GDAPI_FUNC(godot_string_operator_equal, godot_bool, const godot_string *p_self, const godot_string *p_b) \ - GDAPI_FUNC(godot_string_operator_less, godot_bool, const godot_string *p_self, const godot_string *p_b) \ - GDAPI_FUNC(godot_string_operator_plus, godot_string, const godot_string *p_self, const godot_string *p_b) \ - GDAPI_FUNC(godot_string_length, godot_int, const godot_string *p_self) \ - GDAPI_FUNC(godot_string_begins_with, godot_bool, const godot_string *p_self, const godot_string *p_string) \ - GDAPI_FUNC(godot_string_begins_with_char_array, godot_bool, const godot_string *p_self, const char *p_char_array) \ - GDAPI_FUNC(godot_string_bigrams, godot_array, const godot_string *p_self) \ - GDAPI_FUNC(godot_string_chr, godot_string, wchar_t p_character) \ - GDAPI_FUNC(godot_string_ends_with, godot_bool, const godot_string *p_self, const godot_string *p_string) \ - GDAPI_FUNC(godot_string_find, godot_int, const godot_string *p_self, godot_string p_what) \ - GDAPI_FUNC(godot_string_find_from, godot_int, const godot_string *p_self, godot_string p_what, godot_int p_from) \ - GDAPI_FUNC(godot_string_findmk, godot_int, const godot_string *p_self, const godot_array *p_keys) \ - GDAPI_FUNC(godot_string_findmk_from, godot_int, const godot_string *p_self, const godot_array *p_keys, godot_int p_from) \ - GDAPI_FUNC(godot_string_findmk_from_in_place, godot_int, const godot_string *p_self, const godot_array *p_keys, godot_int p_from, godot_int *r_key) \ - GDAPI_FUNC(godot_string_findn, godot_int, const godot_string *p_self, godot_string p_what) \ - GDAPI_FUNC(godot_string_findn_from, godot_int, const godot_string *p_self, godot_string p_what, godot_int p_from) \ - GDAPI_FUNC(godot_string_find_last, godot_int, const godot_string *p_self, godot_string p_what) \ - GDAPI_FUNC(godot_string_format, godot_string, const godot_string *p_self, const godot_variant *p_values) \ - GDAPI_FUNC(godot_string_format_with_custom_placeholder, godot_string, const godot_string *p_self, const godot_variant *p_values, const char *p_placeholder) \ - GDAPI_FUNC(godot_string_hex_encode_buffer, godot_string, const uint8_t *p_buffer, godot_int p_len) \ - GDAPI_FUNC(godot_string_hex_to_int, godot_int, const godot_string *p_self) \ - GDAPI_FUNC(godot_string_hex_to_int_without_prefix, godot_int, const godot_string *p_self) \ - GDAPI_FUNC(godot_string_insert, godot_string, const godot_string *p_self, godot_int p_at_pos, godot_string p_string) \ - GDAPI_FUNC(godot_string_is_numeric, godot_bool, const godot_string *p_self) \ - GDAPI_FUNC(godot_string_is_subsequence_of, godot_bool, const godot_string *p_self, const godot_string *p_string) \ - GDAPI_FUNC(godot_string_is_subsequence_ofi, godot_bool, const godot_string *p_self, const godot_string *p_string) \ - GDAPI_FUNC(godot_string_lpad, godot_string, const godot_string *p_self, godot_int p_min_length) \ - GDAPI_FUNC(godot_string_lpad_with_custom_character, godot_string, const godot_string *p_self, godot_int p_min_length, const godot_string *p_character) \ - GDAPI_FUNC(godot_string_match, godot_bool, const godot_string *p_self, const godot_string *p_wildcard) \ - GDAPI_FUNC(godot_string_matchn, godot_bool, const godot_string *p_self, const godot_string *p_wildcard) \ - GDAPI_FUNC(godot_string_md5, godot_string, const uint8_t *p_md5) \ - GDAPI_FUNC(godot_string_num, godot_string, double p_num) \ - GDAPI_FUNC(godot_string_num_int64, godot_string, int64_t p_num, godot_int p_base) \ - GDAPI_FUNC(godot_string_num_int64_capitalized, godot_string, int64_t p_num, godot_int p_base, godot_bool p_capitalize_hex) \ - GDAPI_FUNC(godot_string_num_real, godot_string, double p_num) \ - GDAPI_FUNC(godot_string_num_scientific, godot_string, double p_num) \ - GDAPI_FUNC(godot_string_num_with_decimals, godot_string, double p_num, godot_int p_decimals) \ - GDAPI_FUNC(godot_string_pad_decimals, godot_string, const godot_string *p_self, godot_int p_digits) \ - GDAPI_FUNC(godot_string_pad_zeros, godot_string, const godot_string *p_self, godot_int p_digits) \ - GDAPI_FUNC(godot_string_replace_first, godot_string, const godot_string *p_self, godot_string p_key, godot_string p_with) \ - GDAPI_FUNC(godot_string_replace, godot_string, const godot_string *p_self, godot_string p_key, godot_string p_with) \ - GDAPI_FUNC(godot_string_replacen, godot_string, const godot_string *p_self, godot_string p_key, godot_string p_with) \ - GDAPI_FUNC(godot_string_rfind, godot_int, const godot_string *p_self, godot_string p_what) \ - GDAPI_FUNC(godot_string_rfindn, godot_int, const godot_string *p_self, godot_string p_what) \ - GDAPI_FUNC(godot_string_rfind_from, godot_int, const godot_string *p_self, godot_string p_what, godot_int p_from) \ - GDAPI_FUNC(godot_string_rfindn_from, godot_int, const godot_string *p_self, godot_string p_what, godot_int p_from) \ - GDAPI_FUNC(godot_string_rpad, godot_string, const godot_string *p_self, godot_int p_min_length) \ - GDAPI_FUNC(godot_string_rpad_with_custom_character, godot_string, const godot_string *p_self, godot_int p_min_length, const godot_string *p_character) \ - GDAPI_FUNC(godot_string_similarity, godot_real, const godot_string *p_self, const godot_string *p_string) \ - GDAPI_FUNC(godot_string_sprintf, godot_string, const godot_string *p_self, const godot_array *p_values, godot_bool *p_error) \ - GDAPI_FUNC(godot_string_substr, godot_string, const godot_string *p_self, godot_int p_from, godot_int p_chars) \ - GDAPI_FUNC(godot_string_to_double, double, const godot_string *p_self) \ - GDAPI_FUNC(godot_string_to_float, godot_real, const godot_string *p_self) \ - GDAPI_FUNC(godot_string_to_int, godot_int, const godot_string *p_self) \ - GDAPI_FUNC(godot_string_camelcase_to_underscore, godot_string, const godot_string *p_self) \ - GDAPI_FUNC(godot_string_camelcase_to_underscore_lowercased, godot_string, const godot_string *p_self) \ - GDAPI_FUNC(godot_string_capitalize, godot_string, const godot_string *p_self) \ - GDAPI_FUNC(godot_string_char_to_double, double, const char *p_what) \ - GDAPI_FUNC(godot_string_char_to_int, godot_int, const char *p_what) \ - GDAPI_FUNC(godot_string_wchar_to_int, int64_t, const wchar_t *p_str) \ - GDAPI_FUNC(godot_string_char_to_int_with_len, godot_int, const char *p_what, godot_int p_len) \ - GDAPI_FUNC(godot_string_char_to_int64_with_len, int64_t, const wchar_t *p_str, int p_len) \ - GDAPI_FUNC(godot_string_hex_to_int64, int64_t, const godot_string *p_self) \ - GDAPI_FUNC(godot_string_hex_to_int64_with_prefix, int64_t, const godot_string *p_self) \ - GDAPI_FUNC(godot_string_to_int64, int64_t, const godot_string *p_self) \ - GDAPI_FUNC(godot_string_unicode_char_to_double, double, const wchar_t *p_str, const wchar_t **r_end) \ - GDAPI_FUNC(godot_string_get_slice_count, godot_int, const godot_string *p_self, godot_string p_splitter) \ - GDAPI_FUNC(godot_string_get_slice, godot_string, const godot_string *p_self, godot_string p_splitter, godot_int p_slice) \ - GDAPI_FUNC(godot_string_get_slicec, godot_string, const godot_string *p_self, wchar_t p_splitter, godot_int p_slice) \ - GDAPI_FUNC(godot_string_split, godot_array, const godot_string *p_self, const godot_string *p_splitter) \ - GDAPI_FUNC(godot_string_split_allow_empty, godot_array, const godot_string *p_self, const godot_string *p_splitter) \ - GDAPI_FUNC(godot_string_split_floats, godot_array, const godot_string *p_self, const godot_string *p_splitter) \ - GDAPI_FUNC(godot_string_split_floats_allows_empty, godot_array, const godot_string *p_self, const godot_string *p_splitter) \ - GDAPI_FUNC(godot_string_split_floats_mk, godot_array, const godot_string *p_self, const godot_array *p_splitters) \ - GDAPI_FUNC(godot_string_split_floats_mk_allows_empty, godot_array, const godot_string *p_self, const godot_array *p_splitters) \ - GDAPI_FUNC(godot_string_split_ints, godot_array, const godot_string *p_self, const godot_string *p_splitter) \ - GDAPI_FUNC(godot_string_split_ints_allows_empty, godot_array, const godot_string *p_self, const godot_string *p_splitter) \ - GDAPI_FUNC(godot_string_split_ints_mk, godot_array, const godot_string *p_self, const godot_array *p_splitters) \ - GDAPI_FUNC(godot_string_split_ints_mk_allows_empty, godot_array, const godot_string *p_self, const godot_array *p_splitters) \ - GDAPI_FUNC(godot_string_split_spaces, godot_array, const godot_string *p_self) \ - GDAPI_FUNC(godot_string_char_lowercase, wchar_t, wchar_t p_char) \ - GDAPI_FUNC(godot_string_char_uppercase, wchar_t, wchar_t p_char) \ - GDAPI_FUNC(godot_string_to_lower, godot_string, const godot_string *p_self) \ - GDAPI_FUNC(godot_string_to_upper, godot_string, const godot_string *p_self) \ - GDAPI_FUNC(godot_string_get_basename, godot_string, const godot_string *p_self) \ - GDAPI_FUNC(godot_string_get_extension, godot_string, const godot_string *p_self) \ - GDAPI_FUNC(godot_string_left, godot_string, const godot_string *p_self, godot_int p_pos) \ - GDAPI_FUNC(godot_string_ord_at, wchar_t, const godot_string *p_self, godot_int p_idx) \ - GDAPI_FUNC(godot_string_plus_file, godot_string, const godot_string *p_self, const godot_string *p_file) \ - GDAPI_FUNC(godot_string_right, godot_string, const godot_string *p_self, godot_int p_pos) \ - GDAPI_FUNC(godot_string_strip_edges, godot_string, const godot_string *p_self, godot_bool p_left, godot_bool p_right) \ - GDAPI_FUNC(godot_string_strip_escapes, godot_string, const godot_string *p_self) \ - GDAPI_FUNC_VOID(godot_string_erase, godot_string *p_self, godot_int p_pos, godot_int p_chars) \ - GDAPI_FUNC_VOID(godot_string_ascii, godot_string *p_self, char *result) \ - GDAPI_FUNC_VOID(godot_string_ascii_extended, godot_string *p_self, char *result) \ - GDAPI_FUNC_VOID(godot_string_utf8, godot_string *p_self, char *result) \ - GDAPI_FUNC(godot_string_parse_utf8, godot_bool, godot_string *p_self, const char *p_utf8) \ - GDAPI_FUNC(godot_string_parse_utf8_with_len, godot_bool, godot_string *p_self, const char *p_utf8, godot_int p_len) \ - GDAPI_FUNC(godot_string_chars_to_utf8, godot_string, const char *p_utf8) \ - GDAPI_FUNC(godot_string_chars_to_utf8_with_len, godot_string, const char *p_utf8, godot_int p_len) \ - GDAPI_FUNC(godot_string_hash, uint32_t, const godot_string *p_self) \ - GDAPI_FUNC(godot_string_hash64, uint64_t, const godot_string *p_self) \ - GDAPI_FUNC(godot_string_hash_chars, uint32_t, const char *p_cstr) \ - GDAPI_FUNC(godot_string_hash_chars_with_len, uint32_t, const char *p_cstr, godot_int p_len) \ - GDAPI_FUNC(godot_string_hash_utf8_chars, uint32_t, const wchar_t *p_str) \ - GDAPI_FUNC(godot_string_hash_utf8_chars_with_len, uint32_t, const wchar_t *p_str, godot_int p_len) \ - GDAPI_FUNC(godot_string_md5_buffer, godot_pool_byte_array, const godot_string *p_self) \ - GDAPI_FUNC(godot_string_md5_text, godot_string, const godot_string *p_self) \ - GDAPI_FUNC(godot_string_sha256_buffer, godot_pool_byte_array, const godot_string *p_self) \ - GDAPI_FUNC(godot_string_sha256_text, godot_string, const godot_string *p_self) \ - GDAPI_FUNC(godot_string_empty, godot_bool, const godot_string *p_self) \ - GDAPI_FUNC(godot_string_get_base_dir, godot_string, const godot_string *p_self) \ - GDAPI_FUNC(godot_string_get_file, godot_string, const godot_string *p_self) \ - GDAPI_FUNC(godot_string_humanize_size, godot_string, size_t p_size) \ - GDAPI_FUNC(godot_string_is_abs_path, godot_bool, const godot_string *p_self) \ - GDAPI_FUNC(godot_string_is_rel_path, godot_bool, const godot_string *p_self) \ - GDAPI_FUNC(godot_string_is_resource_file, godot_bool, const godot_string *p_self) \ - GDAPI_FUNC(godot_string_path_to, godot_string, const godot_string *p_self, const godot_string *p_path) \ - GDAPI_FUNC(godot_string_path_to_file, godot_string, const godot_string *p_self, const godot_string *p_path) \ - GDAPI_FUNC(godot_string_simplify_path, godot_string, const godot_string *p_self) \ - GDAPI_FUNC(godot_string_c_escape, godot_string, const godot_string *p_self) \ - GDAPI_FUNC(godot_string_c_escape_multiline, godot_string, const godot_string *p_self) \ - GDAPI_FUNC(godot_string_c_unescape, godot_string, const godot_string *p_self) \ - GDAPI_FUNC(godot_string_http_escape, godot_string, const godot_string *p_self) \ - GDAPI_FUNC(godot_string_http_unescape, godot_string, const godot_string *p_self) \ - GDAPI_FUNC(godot_string_json_escape, godot_string, const godot_string *p_self) \ - GDAPI_FUNC(godot_string_word_wrap, godot_string, const godot_string *p_self, godot_int p_chars_per_line) \ - GDAPI_FUNC(godot_string_xml_escape, godot_string, const godot_string *p_self) \ - GDAPI_FUNC(godot_string_xml_escape_with_quotes, godot_string, const godot_string *p_self) \ - GDAPI_FUNC(godot_string_xml_unescape, godot_string, const godot_string *p_self) \ - GDAPI_FUNC(godot_string_percent_decode, godot_string, const godot_string *p_self) \ - GDAPI_FUNC(godot_string_percent_encode, godot_string, const godot_string *p_self) \ - GDAPI_FUNC(godot_string_is_valid_float, godot_bool, const godot_string *p_self) \ - GDAPI_FUNC(godot_string_is_valid_hex_number, godot_bool, const godot_string *p_self, godot_bool p_with_prefix) \ - GDAPI_FUNC(godot_string_is_valid_html_color, godot_bool, const godot_string *p_self) \ - GDAPI_FUNC(godot_string_is_valid_identifier, godot_bool, const godot_string *p_self) \ - GDAPI_FUNC(godot_string_is_valid_integer, godot_bool, const godot_string *p_self) \ - GDAPI_FUNC(godot_string_is_valid_ip_address, godot_bool, const godot_string *p_self) \ - GDAPI_FUNC_VOID(godot_string_destroy, godot_string *p_self) \ - GDAPI_FUNC_VOID(godot_object_destroy, godot_object *p_o) \ - GDAPI_FUNC(godot_global_get_singleton, godot_object *, char *p_name) \ - GDAPI_FUNC(godot_get_stack_bottom, void *) \ - GDAPI_FUNC(godot_method_bind_get_method, godot_method_bind *, const char *p_classname, const char *p_methodname) \ - GDAPI_FUNC_VOID(godot_method_bind_ptrcall, godot_method_bind *p_method_bind, godot_object *p_instance, const void **p_args, void *p_ret) \ - GDAPI_FUNC(godot_method_bind_call, godot_variant, godot_method_bind *p_method_bind, godot_object *p_instance, const godot_variant **p_args, const int p_arg_count, godot_variant_call_error *p_call_error) \ - GDAPI_FUNC(godot_get_class_constructor, godot_class_constructor, const char *p_classname) \ - GDAPI_FUNC(godot_get_global_constants, godot_dictionary) \ - GDAPI_FUNC(godot_alloc, void *, int p_bytes) \ - GDAPI_FUNC(godot_realloc, void *, void *p_ptr, int p_bytes) \ - GDAPI_FUNC_VOID(godot_free, void *p_ptr) \ - GDAPI_FUNC_VOID(godot_print_error, const char *p_description, const char *p_function, const char *p_file, int p_line) \ - GDAPI_FUNC_VOID(godot_print_warning, const char *p_description, const char *p_function, const char *p_file, int p_line) \ - GDAPI_FUNC_VOID(godot_print, const godot_string *p_message) \ - GDAPI_FUNC_VOID(godot_nativescript_register_class, void *p_gdnative_handle, const char *p_name, const char *p_base, godot_instance_create_func p_create_func, godot_instance_destroy_func p_destroy_func) \ - GDAPI_FUNC_VOID(godot_nativescript_register_tool_class, void *p_gdnative_handle, const char *p_name, const char *p_base, godot_instance_create_func p_create_func, godot_instance_destroy_func p_destroy_func) \ - GDAPI_FUNC_VOID(godot_nativescript_register_method, void *p_gdnative_handle, const char *p_name, const char *p_function_name, godot_method_attributes p_attr, godot_instance_method p_method) \ - GDAPI_FUNC_VOID(godot_nativescript_register_property, void *p_gdnative_handle, const char *p_name, const char *p_path, godot_property_attributes *p_attr, godot_property_set_func p_set_func, godot_property_get_func p_get_func) \ - GDAPI_FUNC_VOID(godot_nativescript_register_signal, void *p_gdnative_handle, const char *p_name, const godot_signal *p_signal) \ - GDAPI_FUNC(godot_nativescript_get_userdata, void *, godot_object *p_instance) - -#define GDAPI_FUNC(name, ret_type, ...) \ - ret_type (*name)(__VA_ARGS__); -#define GDAPI_FUNC_VOID(name, ...) \ - void (*name)(__VA_ARGS__); - -typedef struct godot_gdnative_api_struct { - GODOT_GDNATIVE_API_FUNCTIONS -} godot_gdnative_api_struct; - -#undef GDAPI_FUNC -#undef GDAPI_FUNC_VOID - -#ifdef __cplusplus -} -#endif - -#endif // GODOT_GDNATIVE_API_STRUCT_H diff --git a/modules/gdnative/include/nativearvr/godot_nativearvr.h b/modules/gdnative/include/nativearvr/godot_nativearvr.h new file mode 100644 index 0000000000..1a8970d396 --- /dev/null +++ b/modules/gdnative/include/nativearvr/godot_nativearvr.h @@ -0,0 +1,78 @@ +/*************************************************************************/ +/* godot_nativearvr.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 GODOT_NATIVEARVR_H +#define GODOT_NATIVEARVR_H + +#include <gdnative/gdnative.h> + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct { + void *(*constructor)(godot_object *); + void (*destructor)(void *); + godot_string (*get_name)(const void *); + godot_int (*get_capabilities)(const void *); + godot_bool (*get_anchor_detection_is_enabled)(const void *); + void (*set_anchor_detection_is_enabled)(void *, godot_bool); + godot_bool (*is_stereo)(const void *); + godot_bool (*is_initialized)(const void *); + godot_bool (*initialize)(void *); + void (*uninitialize)(void *); + godot_vector2 (*get_recommended_render_targetsize)(const void *); + godot_transform (*get_transform_for_eye)(void *, godot_int, godot_transform *); + void (*fill_projection_for_eye)(void *, godot_real *, godot_int, godot_real, godot_real, godot_real); + void (*commit_for_eye)(void *, godot_int, godot_rid *, godot_rect2 *); + void (*process)(void *); +} godot_arvr_interface_gdnative; + +void GDAPI godot_arvr_register_interface(const godot_arvr_interface_gdnative *p_interface); + +// helper functions to access ARVRServer data +godot_real GDAPI godot_arvr_get_worldscale(); +godot_transform GDAPI godot_arvr_get_reference_frame(); + +// helper functions for rendering +void GDAPI godot_arvr_blit(godot_int p_eye, godot_rid *p_render_target, godot_rect2 *p_rect); +godot_int GDAPI godot_arvr_get_texid(godot_rid *p_render_target); + +// helper functions for updating ARVR controllers +godot_int GDAPI godot_arvr_add_controller(char *p_device_name, godot_int p_hand, godot_bool p_tracks_orientation, godot_bool p_tracks_position); +void GDAPI godot_arvr_remove_controller(godot_int p_controller_id); +void GDAPI godot_arvr_set_controller_transform(godot_int p_controller_id, godot_transform *p_transform, godot_bool p_tracks_orientation, godot_bool p_tracks_position); +void GDAPI godot_arvr_set_controller_button(godot_int p_controller_id, godot_int p_button, godot_bool p_is_pressed); +void GDAPI godot_arvr_set_controller_axis(godot_int p_controller_id, godot_int p_axis, godot_real p_value, godot_bool p_can_be_negative); + +#ifdef __cplusplus +} +#endif + +#endif /* !GODOT_NATIVEARVR_H */ diff --git a/modules/gdnative/include/nativescript/godot_nativescript.h b/modules/gdnative/include/nativescript/godot_nativescript.h index 96f213ead7..8baff0fff9 100644 --- a/modules/gdnative/include/nativescript/godot_nativescript.h +++ b/modules/gdnative/include/nativescript/godot_nativescript.h @@ -36,42 +36,6 @@ extern "C" { #endif -#ifdef GDAPI_BUILT_IN -#define GDAPI_EXPORT -#endif - -#ifdef _WIN32 -#if defined(GDAPI_EXPORT) -#define GDCALLINGCONV -#define GDAPI __declspec(dllexport) GDCALLINGCONV -#else -#define GDCALLINGCONV -#define GDAPI __declspec(dllimport) GDCALLINGCONV -#endif -#elif defined(__APPLE__) -#include "TargetConditionals.h" -#if TARGET_OS_IPHONE -#define GDCALLINGCONV -#define GDAPI -#elif TARGET_OS_MAC -#define GDCALLINGCONV __attribute__((sysv_abi)) -#define GDAPI GDCALLINGCONV -#endif -#else -#define GDCALLINGCONV __attribute__((sysv_abi, visibility("default"))) -#define GDAPI GDCALLINGCONV -#endif - -// This is for libraries *using* the header, NOT GODOT EXPOSING STUFF!! -#ifdef _WIN32 -#define GDN_EXPORT __declspec(dllexport) -#else -#define GDN_EXPORT -#endif - -#include <stdbool.h> -#include <stdint.h> - typedef enum { GODOT_METHOD_RPC_MODE_DISABLED, GODOT_METHOD_RPC_MODE_REMOTE, diff --git a/modules/gdnative/include/pluginscript/godot_pluginscript.h b/modules/gdnative/include/pluginscript/godot_pluginscript.h new file mode 100644 index 0000000000..ec109bac83 --- /dev/null +++ b/modules/gdnative/include/pluginscript/godot_pluginscript.h @@ -0,0 +1,170 @@ +/*************************************************************************/ +/* godot_nativescript.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 GODOT_PLUGINSCRIPT_H +#define GODOT_PLUGINSCRIPT_H + +#include <gdnative/gdnative.h> +#include <nativescript/godot_nativescript.h> + +#ifdef __cplusplus +extern "C" { +#endif + +typedef void godot_pluginscript_instance_data; +typedef void godot_pluginscript_script_data; +typedef void godot_pluginscript_language_data; + +// --- Instance --- + +// TODO: use godot_string_name for faster lookup ? +typedef struct { + godot_pluginscript_instance_data *(*init)(godot_pluginscript_script_data *p_data, godot_object *p_owner); + void (*finish)(godot_pluginscript_instance_data *p_data); + + godot_bool (*set_prop)(godot_pluginscript_instance_data *p_data, const godot_string *p_name, const godot_variant *p_value); + godot_bool (*get_prop)(godot_pluginscript_instance_data *p_data, const godot_string *p_name, godot_variant *r_ret); + + godot_variant (*call_method)(godot_pluginscript_instance_data *p_data, + const godot_string_name *p_method, const godot_variant **p_args, + int p_argcount, godot_variant_call_error *r_error); + + void (*notification)(godot_pluginscript_instance_data *p_data, int p_notification); + // TODO: could this rpc mode stuff be moved to the godot_pluginscript_script_manifest ? + godot_method_rpc_mode (*get_rpc_mode)(godot_pluginscript_instance_data *p_data, const godot_string *p_method); + godot_method_rpc_mode (*get_rset_mode)(godot_pluginscript_instance_data *p_data, const godot_string *p_variable); + + //this is used by script languages that keep a reference counter of their own + //you can make make Ref<> not die when it reaches zero, so deleting the reference + //depends entirely from the script. + // Note: You can set thoses function pointer to NULL if not needed. + void (*refcount_incremented)(godot_pluginscript_instance_data *p_data); + bool (*refcount_decremented)(godot_pluginscript_instance_data *p_data); // return true if it can die +} godot_pluginscript_instance_desc; + +// --- Script --- + +typedef struct { + godot_pluginscript_script_data *data; + godot_string_name name; + godot_bool is_tool; + godot_string_name base; + + // Member lines format: {<string>: <int>} + godot_dictionary member_lines; + // Method info dictionary format + // { + // name: <string> + // args: [<dict:property>] + // default_args: [<variant>] + // return: <dict:property> + // flags: <int> + // rpc_mode: <int:godot_method_rpc_mode> + // } + godot_array methods; + // Same format than for methods + godot_array signals; + // Property info dictionary format + // { + // name: <string> + // type: <int:godot_variant_type> + // hint: <int:godot_property_hint> + // hint_string: <string> + // usage: <int:godot_property_usage_flags> + // default_value: <variant> + // rset_mode: <int:godot_method_rpc_mode> + // } + godot_array properties; +} godot_pluginscript_script_manifest; + +typedef struct { + godot_pluginscript_script_manifest (*init)(godot_pluginscript_language_data *p_data, const godot_string *p_path, const godot_string *p_source, godot_error *r_error); + void (*finish)(godot_pluginscript_script_data *p_data); + godot_pluginscript_instance_desc instance_desc; +} godot_pluginscript_script_desc; + +// --- Language --- + +typedef struct { + godot_string_name signature; + godot_int call_count; + godot_int total_time; // In microseconds + godot_int self_time; // In microseconds +} godot_pluginscript_profiling_data; + +typedef struct { + const char *name; + const char *type; + const char *extension; + const char **recognized_extensions; // NULL terminated array + godot_pluginscript_language_data *(*init)(); + void (*finish)(godot_pluginscript_language_data *p_data); + const char **reserved_words; // NULL terminated array + const char **comment_delimiters; // NULL terminated array + const char **string_delimiters; // NULL terminated array + godot_bool has_named_classes; + + godot_string (*get_template_source_code)(godot_pluginscript_language_data *p_data, const godot_string *p_class_name, const godot_string *p_base_class_name); + godot_bool (*validate)(godot_pluginscript_language_data *p_data, const godot_string *p_script, int *r_line_error, int *r_col_error, godot_string *r_test_error, const godot_string *p_path, godot_pool_string_array *r_functions); + int (*find_function)(godot_pluginscript_language_data *p_data, const godot_string *p_function, const godot_string *p_code); // Can be NULL + godot_string (*make_function)(godot_pluginscript_language_data *p_data, const godot_string *p_class, const godot_string *p_name, const godot_pool_string_array *p_args); + godot_error (*complete_code)(godot_pluginscript_language_data *p_data, const godot_string *p_code, const godot_string *p_base_path, godot_object *p_owner, godot_array *r_options, godot_bool *r_force, godot_string *r_call_hint); + void (*auto_indent_code)(godot_pluginscript_language_data *p_data, godot_string *p_code, int p_from_line, int p_to_line); + + void (*add_global_constant)(godot_pluginscript_language_data *p_data, const godot_string *p_variable, const godot_variant *p_value); + godot_string (*debug_get_error)(godot_pluginscript_language_data *p_data); + int (*debug_get_stack_level_count)(godot_pluginscript_language_data *p_data); + int (*debug_get_stack_level_line)(godot_pluginscript_language_data *p_data, int p_level); + godot_string (*debug_get_stack_level_function)(godot_pluginscript_language_data *p_data, int p_level); + godot_string (*debug_get_stack_level_source)(godot_pluginscript_language_data *p_data, int p_level); + void (*debug_get_stack_level_locals)(godot_pluginscript_language_data *p_data, int p_level, godot_pool_string_array *p_locals, godot_array *p_values, int p_max_subitems, int p_max_depth); + void (*debug_get_stack_level_members)(godot_pluginscript_language_data *p_data, int p_level, godot_pool_string_array *p_members, godot_array *p_values, int p_max_subitems, int p_max_depth); + void (*debug_get_globals)(godot_pluginscript_language_data *p_data, godot_pool_string_array *p_locals, godot_array *p_values, int p_max_subitems, int p_max_depth); + godot_string (*debug_parse_stack_level_expression)(godot_pluginscript_language_data *p_data, int p_level, const godot_string *p_expression, int p_max_subitems, int p_max_depth); + + // TODO: could this stuff be moved to the godot_pluginscript_language_desc ? + void (*get_public_functions)(godot_pluginscript_language_data *p_data, godot_array *r_functions); + void (*get_public_constants)(godot_pluginscript_language_data *p_data, godot_dictionary *r_constants); + + void (*profiling_start)(godot_pluginscript_language_data *p_data); + void (*profiling_stop)(godot_pluginscript_language_data *p_data); + int (*profiling_get_accumulated_data)(godot_pluginscript_language_data *p_data, godot_pluginscript_profiling_data *r_info, int p_info_max); + int (*profiling_get_frame_data)(godot_pluginscript_language_data *p_data, godot_pluginscript_profiling_data *r_info, int p_info_max); + void (*profiling_frame)(godot_pluginscript_language_data *p_data); + + godot_pluginscript_script_desc script_desc; +} godot_pluginscript_language_desc; + +void GDAPI godot_pluginscript_register_language(const godot_pluginscript_language_desc *language_desc); + +#ifdef __cplusplus +} +#endif + +#endif // GODOT_PLUGINSCRIPT_H diff --git a/modules/gdnative/nativearvr/SCsub b/modules/gdnative/nativearvr/SCsub new file mode 100644 index 0000000000..ecc5996108 --- /dev/null +++ b/modules/gdnative/nativearvr/SCsub @@ -0,0 +1,13 @@ +#!/usr/bin/env python + +import os +import methods + +Import('env') +Import('env_modules') + +env_arvr_gdnative = env_modules.Clone() + +env_arvr_gdnative.Append(CPPPATH=['#modules/gdnative/include/']) +env_arvr_gdnative.add_source_files(env.modules_sources, '*.cpp') + diff --git a/modules/gdnative/nativearvr/arvr_interface_gdnative.cpp b/modules/gdnative/nativearvr/arvr_interface_gdnative.cpp new file mode 100644 index 0000000000..ff8bda162f --- /dev/null +++ b/modules/gdnative/nativearvr/arvr_interface_gdnative.cpp @@ -0,0 +1,386 @@ +/*************************************************************************/ +/* arvr_interface_gdnative.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 "arvr_interface_gdnative.h" +#include "main/input_default.h" +#include "servers/arvr/arvr_positional_tracker.h" +#include "servers/visual/visual_server_global.h" + +ARVRInterfaceGDNative::ARVRInterfaceGDNative() { + // testing + printf("Construct gdnative interface\n"); + + // we won't have our data pointer until our library gets set + data = NULL; + + interface = NULL; +} + +ARVRInterfaceGDNative::~ARVRInterfaceGDNative() { + printf("Destruct gdnative interface\n"); + + if (is_initialized()) { + uninitialize(); + }; + + // cleanup after ourselves + cleanup(); +} + +void ARVRInterfaceGDNative::cleanup() { + if (interface != NULL) { + interface->destructor(data); + data = NULL; + interface = NULL; + } +} + +void ARVRInterfaceGDNative::set_interface(const godot_arvr_interface_gdnative *p_interface) { + // this should only be called once, just being paranoid.. + if (interface) { + cleanup(); + } + + // bind to our interface + interface = p_interface; + + // Now we do our constructing... + data = interface->constructor((godot_object *)this); +} + +StringName ARVRInterfaceGDNative::get_name() const { + + ERR_FAIL_COND_V(interface == NULL, StringName()); + + godot_string result = interface->get_name(data); + + StringName name = *(String *)&result; + + godot_string_destroy(&result); + + return name; +} + +int ARVRInterfaceGDNative::get_capabilities() const { + int capabilities; + + ERR_FAIL_COND_V(interface == NULL, 0); // 0 = None + + capabilities = interface->get_capabilities(data); + + return capabilities; +} + +bool ARVRInterfaceGDNative::get_anchor_detection_is_enabled() const { + bool enabled; + + ERR_FAIL_COND_V(interface == NULL, false); + + enabled = interface->get_anchor_detection_is_enabled(data); + + return enabled; +} + +void ARVRInterfaceGDNative::set_anchor_detection_is_enabled(bool p_enable) { + + ERR_FAIL_COND(interface == NULL); + + interface->set_anchor_detection_is_enabled(data, p_enable); +} + +bool ARVRInterfaceGDNative::is_stereo() { + bool stereo; + + ERR_FAIL_COND_V(interface == NULL, false); + + stereo = interface->is_stereo(data); + + return stereo; +} + +bool ARVRInterfaceGDNative::is_initialized() { + bool initialized; + + ERR_FAIL_COND_V(interface == NULL, false); + + initialized = interface->is_initialized(data); + + return initialized; +} + +bool ARVRInterfaceGDNative::initialize() { + bool initialized; + + ERR_FAIL_COND_V(interface == NULL, false); + + initialized = interface->initialize(data); + + if (initialized) { + // if we successfully initialize our interface and we don't have a primary interface yet, this becomes our primary interface + + ARVRServer *arvr_server = ARVRServer::get_singleton(); + if ((arvr_server != NULL) && (arvr_server->get_primary_interface() == NULL)) { + arvr_server->set_primary_interface(this); + }; + }; + + return initialized; +} + +void ARVRInterfaceGDNative::uninitialize() { + ERR_FAIL_COND(interface == NULL); + + ARVRServer *arvr_server = ARVRServer::get_singleton(); + if (arvr_server != NULL) { + // Whatever happens, make sure this is no longer our primary interface + arvr_server->clear_primary_interface_if(this); + } + + interface->uninitialize(data); +} + +Size2 ARVRInterfaceGDNative::get_recommended_render_targetsize() { + + ERR_FAIL_COND_V(interface == NULL, Size2()); + + godot_vector2 result = interface->get_recommended_render_targetsize(data); + Vector2 *vec = (Vector2 *)&result; + + return *vec; +} + +Transform ARVRInterfaceGDNative::get_transform_for_eye(ARVRInterface::Eyes p_eye, const Transform &p_cam_transform) { + Transform *ret; + + ERR_FAIL_COND_V(interface == NULL, Transform()); + + godot_transform t = interface->get_transform_for_eye(data, (int)p_eye, (godot_transform *)&p_cam_transform); + + ret = (Transform *)&t; + + return *ret; +} + +CameraMatrix ARVRInterfaceGDNative::get_projection_for_eye(ARVRInterface::Eyes p_eye, real_t p_aspect, real_t p_z_near, real_t p_z_far) { + CameraMatrix cm; + + ERR_FAIL_COND_V(interface == NULL, CameraMatrix()); + + interface->fill_projection_for_eye(data, (godot_real *)cm.matrix, (godot_int)p_eye, p_aspect, p_z_near, p_z_far); + + return cm; +} + +void ARVRInterfaceGDNative::commit_for_eye(ARVRInterface::Eyes p_eye, RID p_render_target, const Rect2 &p_screen_rect) { + + ERR_FAIL_COND(interface == NULL); + + interface->commit_for_eye(data, (godot_int)p_eye, (godot_rid *)&p_render_target, (godot_rect2 *)&p_screen_rect); +} + +void ARVRInterfaceGDNative::process() { + ERR_FAIL_COND(interface == NULL); + + interface->process(data); +} + +///////////////////////////////////////////////////////////////////////////////////// +// some helper callbacks + +extern "C" { + +void GDAPI godot_arvr_register_interface(const godot_arvr_interface_gdnative *p_interface) { + Ref<ARVRInterfaceGDNative> new_interface; + new_interface.instance(); + new_interface->set_interface((godot_arvr_interface_gdnative * const)p_interface); + ARVRServer::get_singleton()->add_interface(new_interface); +} + +godot_real GDAPI godot_arvr_get_worldscale() { + ARVRServer *arvr_server = ARVRServer::get_singleton(); + ERR_FAIL_NULL_V(arvr_server, 1.0); + + return arvr_server->get_world_scale(); +} + +godot_transform GDAPI godot_arvr_get_reference_frame() { + godot_transform reference_frame; + Transform *reference_frame_ptr = (Transform *)&reference_frame; + + ARVRServer *arvr_server = ARVRServer::get_singleton(); + if (arvr_server != NULL) { + *reference_frame_ptr = arvr_server->get_reference_frame(); + } else { + godot_transform_new_identity(&reference_frame); + } + + return reference_frame; +} + +void GDAPI godot_arvr_blit(godot_int p_eye, godot_rid *p_render_target, godot_rect2 *p_rect) { + // blits out our texture as is, handy for preview display of one of the eyes that is already rendered with lens distortion on an external HMD + ARVRInterface::Eyes eye = (ARVRInterface::Eyes)p_eye; + RID *render_target = (RID *)p_render_target; + Rect2 screen_rect = *(Rect2 *)p_rect; + + if (eye == ARVRInterface::EYE_LEFT) { + screen_rect.size.x /= 2.0; + } else if (p_eye == ARVRInterface::EYE_RIGHT) { + screen_rect.size.x /= 2.0; + screen_rect.position.x += screen_rect.size.x; + } + + VSG::rasterizer->set_current_render_target(RID()); + VSG::rasterizer->blit_render_target_to_screen(*render_target, screen_rect, 0); +} + +godot_int GDAPI godot_arvr_get_texid(godot_rid *p_render_target) { + // In order to send off our textures to display on our hardware we need the opengl texture ID instead of the render target RID + // This is a handy function to expose that. + RID *render_target = (RID *)p_render_target; + + RID eye_texture = VSG::storage->render_target_get_texture(*render_target); + uint32_t texid = VS::get_singleton()->texture_get_texid(eye_texture); + + return texid; +} + +godot_int GDAPI godot_arvr_add_controller(char *p_device_name, godot_int p_hand, godot_bool p_tracks_orientation, godot_bool p_tracks_position) { + ARVRServer *arvr_server = ARVRServer::get_singleton(); + ERR_FAIL_NULL_V(arvr_server, 0); + + InputDefault *input = (InputDefault *)Input::get_singleton(); + ERR_FAIL_NULL_V(input, 0); + + ARVRPositionalTracker *new_tracker = memnew(ARVRPositionalTracker); + new_tracker->set_name(p_device_name); + new_tracker->set_type(ARVRServer::TRACKER_CONTROLLER); + if (p_hand == 1) { + new_tracker->set_hand(ARVRPositionalTracker::TRACKER_LEFT_HAND); + } else if (p_hand == 2) { + new_tracker->set_hand(ARVRPositionalTracker::TRACKER_RIGHT_HAND); + } + + // also register as joystick... + int joyid = input->get_unused_joy_id(); + if (joyid != -1) { + new_tracker->set_joy_id(joyid); + input->joy_connection_changed(joyid, true, p_device_name, ""); + } + + if (p_tracks_orientation) { + Basis orientation; + new_tracker->set_orientation(orientation); + } + if (p_tracks_position) { + Vector3 position; + new_tracker->set_position(position); + } + + // add our tracker to our server and remember its pointer + arvr_server->add_tracker(new_tracker); + + // note, this ID is only unique within controllers! + return new_tracker->get_tracker_id(); +} + +void GDAPI godot_arvr_remove_controller(godot_int p_controller_id) { + ARVRServer *arvr_server = ARVRServer::get_singleton(); + ERR_FAIL_NULL(arvr_server); + + InputDefault *input = (InputDefault *)Input::get_singleton(); + ERR_FAIL_NULL(input); + + ARVRPositionalTracker *remove_tracker = arvr_server->find_by_type_and_id(ARVRServer::TRACKER_CONTROLLER, p_controller_id); + if (remove_tracker != NULL) { + // unset our joystick if applicable + int joyid = remove_tracker->get_joy_id(); + if (joyid != -1) { + input->joy_connection_changed(joyid, false, "", ""); + remove_tracker->set_joy_id(-1); + } + + // remove our tracker from our server + arvr_server->remove_tracker(remove_tracker); + memdelete(remove_tracker); + } +} + +void GDAPI godot_arvr_set_controller_transform(godot_int p_controller_id, godot_transform *p_transform, godot_bool p_tracks_orientation, godot_bool p_tracks_position) { + ARVRServer *arvr_server = ARVRServer::get_singleton(); + ERR_FAIL_NULL(arvr_server); + + ARVRPositionalTracker *tracker = arvr_server->find_by_type_and_id(ARVRServer::TRACKER_CONTROLLER, p_controller_id); + if (tracker != NULL) { + Transform *transform = (Transform *)p_transform; + if (p_tracks_orientation) { + tracker->set_orientation(transform->basis); + } + if (p_tracks_position) { + tracker->set_position(transform->origin); + } + } +} + +void GDAPI godot_arvr_set_controller_button(godot_int p_controller_id, godot_int p_button, godot_bool p_is_pressed) { + ARVRServer *arvr_server = ARVRServer::get_singleton(); + ERR_FAIL_NULL(arvr_server); + + InputDefault *input = (InputDefault *)Input::get_singleton(); + ERR_FAIL_NULL(input); + + ARVRPositionalTracker *tracker = arvr_server->find_by_type_and_id(ARVRServer::TRACKER_CONTROLLER, p_controller_id); + if (tracker != NULL) { + int joyid = tracker->get_joy_id(); + if (joyid != -1) { + input->joy_button(joyid, p_button, p_is_pressed); + } + } +} + +void GDAPI godot_arvr_set_controller_axis(godot_int p_controller_id, godot_int p_axis, godot_real p_value, godot_bool p_can_be_negative) { + ARVRServer *arvr_server = ARVRServer::get_singleton(); + ERR_FAIL_NULL(arvr_server); + + InputDefault *input = (InputDefault *)Input::get_singleton(); + ERR_FAIL_NULL(input); + + ARVRPositionalTracker *tracker = arvr_server->find_by_type_and_id(ARVRServer::TRACKER_CONTROLLER, p_controller_id); + if (tracker != NULL) { + int joyid = tracker->get_joy_id(); + if (joyid != -1) { + InputDefault::JoyAxis jx; + jx.min = p_can_be_negative ? -1 : 0; + jx.value = p_value; + input->joy_axis(joyid, p_axis, jx); + } + } +} +} diff --git a/modules/gdnative/nativearvr/arvr_interface_gdnative.h b/modules/gdnative/nativearvr/arvr_interface_gdnative.h new file mode 100644 index 0000000000..e45b51e070 --- /dev/null +++ b/modules/gdnative/nativearvr/arvr_interface_gdnative.h @@ -0,0 +1,86 @@ +/*************************************************************************/ +/* arvr_interface_gdnative.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 ARVR_INTERFACE_GDNATIVE_H +#define ARVR_INTERFACE_GDNATIVE_H + +#include "modules/gdnative/gdnative.h" +#include "servers/arvr/arvr_interface.h" + +/** + @authors Hinsbart & Karroffel & Mux213 + + This subclass of our AR/VR interface forms a bridge to GDNative. +*/ + +class ARVRInterfaceGDNative : public ARVRInterface { + GDCLASS(ARVRInterfaceGDNative, ARVRInterface) + + void cleanup(); + +protected: + const godot_arvr_interface_gdnative *interface; + void *data; + +public: + /** general interface information **/ + ARVRInterfaceGDNative(); + ~ARVRInterfaceGDNative(); + + void set_interface(const godot_arvr_interface_gdnative *p_interface); + + virtual StringName get_name() const; + virtual int get_capabilities() const; + + virtual bool is_initialized(); + virtual bool initialize(); + virtual void uninitialize(); + + /** specific to AR **/ + virtual bool get_anchor_detection_is_enabled() const; + virtual void set_anchor_detection_is_enabled(bool p_enable); + + /** rendering and internal **/ + virtual Size2 get_recommended_render_targetsize(); + virtual bool is_stereo(); + virtual Transform get_transform_for_eye(ARVRInterface::Eyes p_eye, const Transform &p_cam_transform); + + // we expose a PoolVector<float> version of this function to GDNative + PoolVector<float> _get_projection_for_eye(ARVRInterface::Eyes p_eye, real_t p_aspect, real_t p_z_near, real_t p_z_far); + + // and a CameraMatrix version to ARVRServer + virtual CameraMatrix get_projection_for_eye(ARVRInterface::Eyes p_eye, real_t p_aspect, real_t p_z_near, real_t p_z_far); + + virtual void commit_for_eye(ARVRInterface::Eyes p_eye, RID p_render_target, const Rect2 &p_screen_rect); + + virtual void process(); +}; + +#endif // ARVR_INTERFACE_GDNATIVE_H diff --git a/modules/gdnative/nativearvr/config.py b/modules/gdnative/nativearvr/config.py new file mode 100644 index 0000000000..4d1bdfe4d1 --- /dev/null +++ b/modules/gdnative/nativearvr/config.py @@ -0,0 +1,5 @@ +def can_build(platform): + return True + +def configure(env): + pass diff --git a/modules/gdnative/nativearvr/register_types.cpp b/modules/gdnative/nativearvr/register_types.cpp new file mode 100644 index 0000000000..c7d7847a21 --- /dev/null +++ b/modules/gdnative/nativearvr/register_types.cpp @@ -0,0 +1,39 @@ +/*************************************************************************/ +/* register_types.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 "arvr_interface_gdnative.h" + +void register_nativearvr_types() { + ClassDB::register_class<ARVRInterfaceGDNative>(); +} + +void unregister_nativearvr_types() { +} diff --git a/modules/gdnative/nativearvr/register_types.h b/modules/gdnative/nativearvr/register_types.h new file mode 100644 index 0000000000..5e7557c7e9 --- /dev/null +++ b/modules/gdnative/nativearvr/register_types.h @@ -0,0 +1,32 @@ +/*************************************************************************/ +/* register_types.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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_nativearvr_types(); +void unregister_nativearvr_types(); diff --git a/modules/gdnative/nativescript/SCsub b/modules/gdnative/nativescript/SCsub index e980e40e8e..ee3b9c351d 100644 --- a/modules/gdnative/nativescript/SCsub +++ b/modules/gdnative/nativescript/SCsub @@ -4,7 +4,9 @@ Import('env') mod_env = env.Clone() mod_env.add_source_files(env.modules_sources, "*.cpp") -mod_env.Append(CPPPATH='#modules/gdnative') mod_env.Append(CPPFLAGS=['-DGDAPI_BUILT_IN']) +if "platform" in env and env["platform"] in ["x11", "iphone"]: + env.Append(LINKFLAGS=["-rdynamic"]) + Export('mod_env') diff --git a/modules/gdnative/nativescript/api_generator.cpp b/modules/gdnative/nativescript/api_generator.cpp index fdd5a2ea19..63fb71feb6 100644 --- a/modules/gdnative/nativescript/api_generator.cpp +++ b/modules/gdnative/nativescript/api_generator.cpp @@ -31,7 +31,7 @@ #ifdef TOOLS_ENABLED -#include "class_db.h" +#include "core/class_db.h" #include "core/global_constants.h" #include "core/pair.h" #include "core/project_settings.h" @@ -80,6 +80,7 @@ struct PropertyAPI { String getter; String setter; String type; + int index; }; struct ConstantAPI { @@ -259,6 +260,8 @@ List<ClassAPI> generate_c_api_classes() { property_api.type = get_type_name(p->get()); } + property_api.index = ClassDB::get_property_index(class_name, p->get().name); + if (!property_api.setter.empty() || !property_api.getter.empty()) { class_api.properties.push_back(property_api); } @@ -395,7 +398,8 @@ static List<String> generate_c_api_json(const List<ClassAPI> &p_api) { source.push_back("\t\t\t\t\"name\": \"" + e->get().name + "\",\n"); source.push_back("\t\t\t\t\"type\": \"" + e->get().type + "\",\n"); source.push_back("\t\t\t\t\"getter\": \"" + e->get().getter + "\",\n"); - source.push_back("\t\t\t\t\"setter\": \"" + e->get().setter + "\"\n"); + source.push_back("\t\t\t\t\"setter\": \"" + e->get().setter + "\",\n"); + source.push_back(String("\t\t\t\t\"index\": ") + itos(e->get().index) + "\n"); source.push_back(String("\t\t\t}") + (e->next() ? "," : "") + "\n"); } source.push_back("\t\t],\n"); diff --git a/modules/gdnative/nativescript/api_generator.h b/modules/gdnative/nativescript/api_generator.h index 56c2d786e6..a8e2eaf0bf 100644 --- a/modules/gdnative/nativescript/api_generator.h +++ b/modules/gdnative/nativescript/api_generator.h @@ -30,8 +30,8 @@ #ifndef API_GENERATOR_H #define API_GENERATOR_H +#include "core/typedefs.h" #include "core/ustring.h" -#include "typedefs.h" Error generate_c_api(const String &p_path); diff --git a/modules/gdnative/nativescript/nativescript.cpp b/modules/gdnative/nativescript/nativescript.cpp index b9bd65af53..aa1fdc32da 100644 --- a/modules/gdnative/nativescript/nativescript.cpp +++ b/modules/gdnative/nativescript/nativescript.cpp @@ -31,11 +31,11 @@ #include "gdnative/gdnative.h" -#include "global_constants.h" +#include "core/global_constants.h" +#include "core/project_settings.h" #include "io/file_access_encrypted.h" #include "os/file_access.h" #include "os/os.h" -#include "project_settings.h" #include "scene/main/scene_tree.h" #include "scene/resources/scene_format_text.h" @@ -137,7 +137,6 @@ bool NativeScript::can_instance() const { #endif } -// TODO(karroffel): implement this Ref<Script> NativeScript::get_base_script() const { NativeScriptDesc *script_data = get_script_desc(); @@ -1010,17 +1009,15 @@ void NativeScriptLanguage::init_library(const Ref<GDNativeLibrary> &lib) { if (!library_script_users.has(lib_path)) library_script_users.insert(lib_path, Set<NativeScript *>()); - void *args[1] = { - (void *)&lib_path - }; + void *proc_ptr; + + Error err = gdn->get_symbol(_init_call_name, proc_ptr); - // here the library registers all the classes and stuff. - gdn->call_native_raw(_init_call_type, - _init_call_name, - NULL, - 1, - args, - NULL); + if (err != OK) { + ERR_PRINT(String("No " + _init_call_name + " in \"" + lib_path + "\" found").utf8().get_data()); + } else { + ((void (*)(godot_string *))proc_ptr)((godot_string *)&lib_path); + } } else { // already initialized. Nice. } @@ -1053,13 +1050,13 @@ void NativeScriptLanguage::call_libraries_cb(const StringName &name) { // library_gdnatives is modified only from the main thread, so it's safe not to use mutex here for (Map<String, Ref<GDNative> >::Element *L = library_gdnatives.front(); L; L = L->next()) { if (L->get()->is_initialized()) { - L->get()->call_native_raw( - _noarg_call_type, - name, - NULL, - 0, - NULL, - NULL); + + void *proc_ptr; + Error err = L->get()->get_symbol(name, proc_ptr); + + if (!err) { + ((void (*)())proc_ptr)(); + } } } } @@ -1142,12 +1139,14 @@ void NativeReloadNode::_notification(int p_what) { }; // here the library registers all the classes and stuff. - L->get()->call_native_raw(NSL->_init_call_type, - NSL->_init_call_name, - NULL, - 1, - args, - NULL); + + void *proc_ptr; + Error err = L->get()->get_symbol("godot_nativescript_init", proc_ptr); + if (err != OK) { + ERR_PRINT(String("No godot_nativescript_init in \"" + L->key() + "\" found").utf8().get_data()); + } else { + ((void (*)(void *))proc_ptr)((void *)&L->key()); + } for (Map<String, Set<NativeScript *> >::Element *U = NSL->library_script_users.front(); U; U = U->next()) { for (Set<NativeScript *>::Element *S = U->get().front(); S; S = S->next()) { diff --git a/modules/gdnative/nativescript/nativescript.h b/modules/gdnative/nativescript/nativescript.h index bc7e850d3e..b5db641179 100644 --- a/modules/gdnative/nativescript/nativescript.h +++ b/modules/gdnative/nativescript/nativescript.h @@ -30,14 +30,14 @@ #ifndef NATIVE_SCRIPT_H #define NATIVE_SCRIPT_H +#include "core/resource.h" +#include "core/script_language.h" +#include "core/self_list.h" #include "io/resource_loader.h" #include "io/resource_saver.h" #include "ordered_hash_map.h" #include "os/thread_safe.h" -#include "resource.h" #include "scene/main/node.h" -#include "script_language.h" -#include "self_list.h" #include "modules/gdnative/gdnative.h" #include <nativescript/godot_nativescript.h> diff --git a/modules/gdnative/nativescript/register_types.cpp b/modules/gdnative/nativescript/register_types.cpp index b846710ab8..d734bba810 100644 --- a/modules/gdnative/nativescript/register_types.cpp +++ b/modules/gdnative/nativescript/register_types.cpp @@ -38,53 +38,6 @@ NativeScriptLanguage *native_script_language; -typedef void (*native_script_init_fn)(void *); - -void init_call_cb(void *p_handle, godot_string *p_proc_name, void *p_data, int p_num_args, void **args, void *r_ret) { - if (p_handle == NULL) { - ERR_PRINT("No valid library handle, can't call nativescript init procedure"); - return; - } - - void *library_proc; - Error err = OS::get_singleton()->get_dynamic_library_symbol_handle( - p_handle, - *(String *)p_proc_name, - library_proc, - true); // we print our own message - if (err != OK) { - ERR_PRINT((String("GDNative procedure \"" + *(String *)p_proc_name) + "\" does not exists and can't be called").utf8().get_data()); - return; - } - - native_script_init_fn fn = (native_script_init_fn)library_proc; - - fn(args[0]); -} - -typedef void (*native_script_empty_callback)(); - -void noarg_call_cb(void *p_handle, godot_string *p_proc_name, void *p_data, int p_num_args, void **args, void *r_ret) { - if (p_handle == NULL) { - ERR_PRINT("No valid library handle, can't call nativescript callback"); - return; - } - - void *library_proc; - Error err = OS::get_singleton()->get_dynamic_library_symbol_handle( - p_handle, - *(String *)p_proc_name, - library_proc, - true); - if (err != OK) { - // it's fine if thread callbacks are not present in the library. - return; - } - - native_script_empty_callback fn = (native_script_empty_callback)library_proc; - fn(); -} - ResourceFormatLoaderNativeScript *resource_loader_gdns = NULL; ResourceFormatSaverNativeScript *resource_saver_gdns = NULL; @@ -95,9 +48,6 @@ void register_nativescript_types() { ScriptServer::register_language(native_script_language); - GDNativeCallRegistry::singleton->register_native_raw_call_type(native_script_language->_init_call_type, init_call_cb); - GDNativeCallRegistry::singleton->register_native_raw_call_type(native_script_language->_noarg_call_type, noarg_call_cb); - resource_saver_gdns = memnew(ResourceFormatSaverNativeScript); ResourceSaver::add_resource_format_saver(resource_saver_gdns); diff --git a/modules/gdnative/pluginscript/SCsub b/modules/gdnative/pluginscript/SCsub new file mode 100644 index 0000000000..2031a4236b --- /dev/null +++ b/modules/gdnative/pluginscript/SCsub @@ -0,0 +1,9 @@ +#!/usr/bin/env python + +Import('env') +Import('env_modules') + +env_pluginscript = env_modules.Clone() + +env_pluginscript.Append(CPPPATH=['#modules/gdnative/include/']) +env_pluginscript.add_source_files(env.modules_sources, '*.cpp') diff --git a/modules/gdnative/pluginscript/pluginscript_instance.cpp b/modules/gdnative/pluginscript/pluginscript_instance.cpp new file mode 100644 index 0000000000..8f01350826 --- /dev/null +++ b/modules/gdnative/pluginscript/pluginscript_instance.cpp @@ -0,0 +1,181 @@ +/*************************************************************************/ +/* pluginscript_instance.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* http://www.godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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. */ +/*************************************************************************/ + +// Godot imports +#include "core/os/os.h" +#include "core/variant.h" +// PluginScript imports +#include "pluginscript_instance.h" +#include "pluginscript_language.h" +#include "pluginscript_script.h" + +bool PluginScriptInstance::set(const StringName &p_name, const Variant &p_value) { + String name = String(p_name); + return _desc->set_prop(_data, (const godot_string *)&name, (const godot_variant *)&p_value); +} + +bool PluginScriptInstance::get(const StringName &p_name, Variant &r_ret) const { + String name = String(p_name); + return _desc->get_prop(_data, (const godot_string *)&name, (godot_variant *)&r_ret); +} + +Ref<Script> PluginScriptInstance::get_script() const { + return _script; +} + +ScriptLanguage *PluginScriptInstance::get_language() { + return _script->get_language(); +} + +Variant::Type PluginScriptInstance::get_property_type(const StringName &p_name, bool *r_is_valid) const { + if (!_script->has_property(p_name)) { + if (r_is_valid) { + *r_is_valid = false; + } + return Variant::NIL; + } + if (r_is_valid) { + *r_is_valid = true; + } + return _script->get_property_info(p_name).type; +} + +void PluginScriptInstance::get_property_list(List<PropertyInfo> *p_properties) const { + _script->get_script_property_list(p_properties); +} + +void PluginScriptInstance::get_method_list(List<MethodInfo> *p_list) const { + _script->get_script_method_list(p_list); +} + +bool PluginScriptInstance::has_method(const StringName &p_method) const { + return _script->has_method(p_method); +} + +Variant PluginScriptInstance::call(const StringName &p_method, const Variant **p_args, int p_argcount, Variant::CallError &r_error) { + // TODO: optimize when calling a Godot method from Godot to avoid param conversion ? + godot_variant ret = _desc->call_method( + _data, (godot_string_name *)&p_method, (const godot_variant **)p_args, + p_argcount, (godot_variant_call_error *)&r_error); + Variant *var_ret = (Variant *)&ret; + return *var_ret; +} + +#if 0 // TODO: Don't rely on default implementations provided by ScriptInstance ? +void PluginScriptInstance::call_multilevel(const StringName& p_method,const Variant** p_args,int p_argcount) { + +#if 0 + PluginScript *sptr=script.ptr(); + Variant::CallError ce; + + while(sptr) { + Map<StringName,GDFunction*>::Element *E = sptr->member_functions.find(p_method); + if (E) { + E->get()->call(this,p_args,p_argcount,ce); + } + sptr = sptr->_base; + } +#endif + +} + +#if 0 +void PluginScriptInstance::_ml_call_reversed(PluginScript *sptr,const StringName& p_method,const Variant** p_args,int p_argcount) { + + if (sptr->_base) + _ml_call_reversed(sptr->_base,p_method,p_args,p_argcount); + + Variant::CallError ce; + + Map<StringName,GDFunction*>::Element *E = sptr->member_functions.find(p_method); + if (E) { + E->get()->call(this,p_args,p_argcount,ce); + } + +} +#endif + + +void PluginScriptInstance::call_multilevel_reversed(const StringName& p_method,const Variant** p_args,int p_argcount) { + +#if 0 + if (script.ptr()) { + _ml_call_reversed(script.ptr(),p_method,p_args,p_argcount); + } +#endif +} +#endif // Multilevel stuff + +void PluginScriptInstance::notification(int p_notification) { + _desc->notification(_data, p_notification); +} + +ScriptInstance::RPCMode PluginScriptInstance::get_rpc_mode(const StringName &p_method) const { + return _script->get_rpc_mode(p_method); +} + +ScriptInstance::RPCMode PluginScriptInstance::get_rset_mode(const StringName &p_variable) const { + return _script->get_rset_mode(p_variable); +} + +void PluginScriptInstance::refcount_incremented() { + if (_desc->refcount_decremented) { + _desc->refcount_incremented(_data); + } +} + +bool PluginScriptInstance::refcount_decremented() { + // Return true if it can die + if (_desc->refcount_decremented) { + return _desc->refcount_decremented(_data); + } + return true; +} + +PluginScriptInstance::PluginScriptInstance() { +} + +bool PluginScriptInstance::init(PluginScript *p_script, Object *p_owner) { + _owner = p_owner; + _owner_variant = Variant(p_owner); + _script = Ref<PluginScript>(p_script); + _desc = &p_script->_desc->instance_desc; + _data = _desc->init(p_script->_data, (godot_object *)p_owner); + ERR_FAIL_COND_V(_data == NULL, false); + p_owner->set_script_instance(this); + return true; +} + +PluginScriptInstance::~PluginScriptInstance() { + _desc->finish(_data); + _script->_language->lock(); + _script->_instances.erase(_owner); + _script->_language->unlock(); +} diff --git a/modules/gdnative/pluginscript/pluginscript_instance.h b/modules/gdnative/pluginscript/pluginscript_instance.h new file mode 100644 index 0000000000..68696b4417 --- /dev/null +++ b/modules/gdnative/pluginscript/pluginscript_instance.h @@ -0,0 +1,90 @@ +/*************************************************************************/ +/* pluginscript_instance.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* http://www.godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 PLUGINSCRIPT_INSTANCE_H +#define PLUGINSCRIPT_INSTANCE_H + +// Godot imports +#include "core/script_language.h" +// PluginScript imports +#include <pluginscript/godot_pluginscript.h> + +class PluginScript; + +class PluginScriptInstance : public ScriptInstance { + friend class PluginScript; + +private: + Ref<PluginScript> _script; + Object *_owner; + Variant _owner_variant; + godot_pluginscript_instance_data *_data; + const godot_pluginscript_instance_desc *_desc; + +public: + _FORCE_INLINE_ Object *get_owner() { return _owner; } + + 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); +#if 0 + // Rely on default implementations provided by ScriptInstance for the moment. + // Note that multilevel call could be removed in 3.0 release, so stay tunned + // (see https://godotengine.org/qa/9244/can-override-the-_ready-and-_process-functions-child-classes) + virtual void call_multilevel(const StringName& p_method,const Variant** p_args,int p_argcount); + virtual void call_multilevel_reversed(const StringName& p_method,const Variant** p_args,int p_argcount); +#endif + + virtual void notification(int p_notification); + + virtual Ref<Script> get_script() const; + + virtual ScriptLanguage *get_language(); + + void set_path(const String &p_path); + + virtual RPCMode get_rpc_mode(const StringName &p_method) const; + virtual RPCMode get_rset_mode(const StringName &p_variable) const; + + virtual void refcount_incremented(); + virtual bool refcount_decremented(); + + PluginScriptInstance(); + bool init(PluginScript *p_script, Object *p_owner); + virtual ~PluginScriptInstance(); +}; + +#endif // PLUGINSCRIPT_INSTANCE_H diff --git a/modules/gdnative/pluginscript/pluginscript_language.cpp b/modules/gdnative/pluginscript/pluginscript_language.cpp new file mode 100644 index 0000000000..d4b86ae5b4 --- /dev/null +++ b/modules/gdnative/pluginscript/pluginscript_language.cpp @@ -0,0 +1,431 @@ +/*************************************************************************/ +/* pluginscript_language.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* http://www.godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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. */ +/*************************************************************************/ + +// Godot imports +#include "core/os/file_access.h" +#include "core/os/os.h" +#include "core/project_settings.h" +// PluginScript imports +#include "pluginscript_language.h" +#include "pluginscript_script.h" + +String PluginScriptLanguage::get_name() const { + return String(_desc.name); +} + +void PluginScriptLanguage::init() { + _data = _desc.init(); +} + +String PluginScriptLanguage::get_type() const { + return String(_desc.type); +} + +String PluginScriptLanguage::get_extension() const { + return String(_desc.extension); +} + +Error PluginScriptLanguage::execute_file(const String &p_path) { + // TODO: pretty sure this method is totally deprecated and should be removed... + return OK; +} + +void PluginScriptLanguage::finish() { + _desc.finish(_data); +} + +/* EDITOR FUNCTIONS */ + +void PluginScriptLanguage::get_reserved_words(List<String> *p_words) const { + if (_desc.reserved_words) { + const char **w = _desc.reserved_words; + while (*w) { + p_words->push_back(*w); + w++; + } + } +} + +void PluginScriptLanguage::get_comment_delimiters(List<String> *p_delimiters) const { + if (_desc.comment_delimiters) { + const char **w = _desc.comment_delimiters; + while (*w) { + p_delimiters->push_back(*w); + w++; + } + } +} + +void PluginScriptLanguage::get_string_delimiters(List<String> *p_delimiters) const { + if (_desc.string_delimiters) { + const char **w = _desc.string_delimiters; + while (*w) { + p_delimiters->push_back(*w); + w++; + } + } +} + +Ref<Script> PluginScriptLanguage::get_template(const String &p_class_name, const String &p_base_class_name) const { + Script *ns = create_script(); + Ref<Script> script = Ref<Script>(ns); + if (_desc.get_template_source_code) { + godot_string src = _desc.get_template_source_code(_data, (godot_string *)&p_class_name, (godot_string *)&p_base_class_name); + script->set_source_code(*(String *)&src); + } + return script; +} + +bool PluginScriptLanguage::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 { + PoolStringArray functions; + if (_desc.validate) { + bool ret = _desc.validate( + _data, + (godot_string *)&p_script, + &r_line_error, + &r_col_error, + (godot_string *)&r_test_error, + (godot_string *)&p_path, + (godot_pool_string_array *)&functions); + for (int i = 0; i < functions.size(); i++) { + r_functions->push_back(functions[i]); + } + return ret; + } + return true; +} + +Script *PluginScriptLanguage::create_script() const { + PluginScript *script = memnew(PluginScript()); + // I'm hurting kittens doing this I guess... + script->init(const_cast<PluginScriptLanguage *>(this)); + return script; +} + +bool PluginScriptLanguage::has_named_classes() const { + return _desc.has_named_classes; +} + +int PluginScriptLanguage::find_function(const String &p_function, const String &p_code) const { + if (_desc.find_function) { + return _desc.find_function(_data, (godot_string *)&p_function, (godot_string *)&p_code); + } + return -1; +} + +String PluginScriptLanguage::make_function(const String &p_class, const String &p_name, const PoolStringArray &p_args) const { + if (_desc.make_function) { + godot_string tmp = _desc.make_function(_data, (godot_string *)&p_class, (godot_string *)&p_name, (godot_pool_string_array *)&p_args); + String ret = *(String *)&tmp; + godot_string_destroy(&tmp); + return ret; + } + return String(); +} + +Error PluginScriptLanguage::complete_code(const String &p_code, const String &p_base_path, Object *p_owner, List<String> *r_options, bool &r_force, String &r_call_hint) { + if (_desc.complete_code) { + Array options; + godot_error tmp = _desc.complete_code( + _data, + (godot_string *)&p_code, + (godot_string *)&p_base_path, + (godot_object *)p_owner, + (godot_array *)&options, + &r_force, + (godot_string *)&r_call_hint); + for (int i = 0; i < options.size(); i++) { + r_options->push_back(String(options[i])); + } + Error err = *(Error *)tmp; + return err; + } + return ERR_UNAVAILABLE; +} + +void PluginScriptLanguage::auto_indent_code(String &p_code, int p_from_line, int p_to_line) const { + if (_desc.auto_indent_code) { + _desc.auto_indent_code(_data, (godot_string *)&p_code, p_from_line, p_to_line); + } + return; +} + +void PluginScriptLanguage::add_global_constant(const StringName &p_variable, const Variant &p_value) { + const String variable = String(p_variable); + _desc.add_global_constant(_data, (godot_string *)&variable, (godot_variant *)&p_value); +} + +/* LOADER FUNCTIONS */ + +void PluginScriptLanguage::get_recognized_extensions(List<String> *p_extensions) const { + for (int i = 0; _desc.recognized_extensions[i]; ++i) { + p_extensions->push_back(String(_desc.recognized_extensions[i])); + } +} + +void PluginScriptLanguage::get_public_functions(List<MethodInfo> *p_functions) const { + // TODO: provid this statically in `godot_pluginscript_language_desc` ? + if (_desc.get_public_functions) { + Array functions; + _desc.get_public_functions(_data, (godot_array *)&functions); + for (int i = 0; i < functions.size(); i++) { + MethodInfo mi = MethodInfo::from_dict(functions[i]); + p_functions->push_back(mi); + } + } +} + +void PluginScriptLanguage::get_public_constants(List<Pair<String, Variant> > *p_constants) const { + // TODO: provid this statically in `godot_pluginscript_language_desc` ? + if (_desc.get_public_constants) { + Dictionary constants; + _desc.get_public_constants(_data, (godot_dictionary *)&constants); + for (const Variant *key = constants.next(); key; key = constants.next(key)) { + Variant value = constants[key]; + p_constants->push_back(Pair<String, Variant>(*key, value)); + } + } +} + +void PluginScriptLanguage::profiling_start() { +#ifdef DEBUG_ENABLED + if (_desc.profiling_start) { + lock(); + _desc.profiling_start(_data); + unlock(); + } +#endif +} + +void PluginScriptLanguage::profiling_stop() { +#ifdef DEBUG_ENABLED + if (_desc.profiling_stop) { + lock(); + _desc.profiling_stop(_data); + unlock(); + } +#endif +} + +int PluginScriptLanguage::profiling_get_accumulated_data(ProfilingInfo *p_info_arr, int p_info_max) { + int info_count = 0; +#ifdef DEBUG_ENABLED + if (_desc.profiling_get_accumulated_data) { + godot_pluginscript_profiling_data *info = (godot_pluginscript_profiling_data *)memalloc( + sizeof(godot_pluginscript_profiling_data) * p_info_max); + info_count = _desc.profiling_get_accumulated_data(_data, info, p_info_max); + for (int i = 0; i < info_count; ++i) { + p_info_arr[i].signature = *(StringName *)&info[i].signature; + p_info_arr[i].call_count = info[i].call_count; + p_info_arr[i].total_time = info[i].total_time; + p_info_arr[i].self_time = info[i].self_time; + godot_string_name_destroy(&info[i].signature); + } + } +#endif + return info_count; +} + +int PluginScriptLanguage::profiling_get_frame_data(ProfilingInfo *p_info_arr, int p_info_max) { + int info_count = 0; +#ifdef DEBUG_ENABLED + if (_desc.profiling_get_frame_data) { + godot_pluginscript_profiling_data *info = (godot_pluginscript_profiling_data *)memalloc( + sizeof(godot_pluginscript_profiling_data) * p_info_max); + info_count = _desc.profiling_get_frame_data(_data, info, p_info_max); + for (int i = 0; i < info_count; ++i) { + p_info_arr[i].signature = *(StringName *)&info[i].signature; + p_info_arr[i].call_count = info[i].call_count; + p_info_arr[i].total_time = info[i].total_time; + p_info_arr[i].self_time = info[i].self_time; + godot_string_name_destroy(&info[i].signature); + } + } +#endif + return info_count; +} + +void PluginScriptLanguage::frame() { +#ifdef DEBUG_ENABLED + if (_desc.profiling_frame) { + _desc.profiling_frame(_data); + } +#endif +} + +/* DEBUGGER FUNCTIONS */ + +String PluginScriptLanguage::debug_get_error() const { + if (_desc.debug_get_error) { + godot_string tmp = _desc.debug_get_error(_data); + String ret = *(String *)&tmp; + godot_string_destroy(&tmp); + return ret; + } + return String("Nothing"); +} + +int PluginScriptLanguage::debug_get_stack_level_count() const { + if (_desc.debug_get_stack_level_count) { + return _desc.debug_get_stack_level_count(_data); + } + return 1; +} + +int PluginScriptLanguage::debug_get_stack_level_line(int p_level) const { + if (_desc.debug_get_stack_level_line) { + return _desc.debug_get_stack_level_line(_data, p_level); + } + return 1; +} + +String PluginScriptLanguage::debug_get_stack_level_function(int p_level) const { + if (_desc.debug_get_stack_level_function) { + godot_string tmp = _desc.debug_get_stack_level_function(_data, p_level); + String ret = *(String *)&tmp; + godot_string_destroy(&tmp); + return ret; + } + return String("Nothing"); +} + +String PluginScriptLanguage::debug_get_stack_level_source(int p_level) const { + if (_desc.debug_get_stack_level_source) { + godot_string tmp = _desc.debug_get_stack_level_source(_data, p_level); + String ret = *(String *)&tmp; + godot_string_destroy(&tmp); + return ret; + } + return String("Nothing"); +} + +void PluginScriptLanguage::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 (_desc.debug_get_stack_level_locals) { + PoolStringArray locals; + Array values; + _desc.debug_get_stack_level_locals(_data, p_level, (godot_pool_string_array *)&locals, (godot_array *)&values, p_max_subitems, p_max_depth); + for (int i = 0; i < locals.size(); i++) { + p_locals->push_back(locals[i]); + } + for (int i = 0; i < values.size(); i++) { + p_values->push_back(values[i]); + } + } +} + +void PluginScriptLanguage::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 (_desc.debug_get_stack_level_members) { + PoolStringArray members; + Array values; + _desc.debug_get_stack_level_members(_data, p_level, (godot_pool_string_array *)&members, (godot_array *)&values, p_max_subitems, p_max_depth); + for (int i = 0; i < members.size(); i++) { + p_members->push_back(members[i]); + } + for (int i = 0; i < values.size(); i++) { + p_values->push_back(values[i]); + } + } +} + +void PluginScriptLanguage::debug_get_globals(List<String> *p_locals, List<Variant> *p_values, int p_max_subitems, int p_max_depth) { + if (_desc.debug_get_globals) { + PoolStringArray locals; + Array values; + _desc.debug_get_globals(_data, (godot_pool_string_array *)&locals, (godot_array *)&values, p_max_subitems, p_max_depth); + for (int i = 0; i < locals.size(); i++) { + p_locals->push_back(locals[i]); + } + for (int i = 0; i < values.size(); i++) { + p_values->push_back(values[i]); + } + } +} + +String PluginScriptLanguage::debug_parse_stack_level_expression(int p_level, const String &p_expression, int p_max_subitems, int p_max_depth) { + if (_desc.debug_parse_stack_level_expression) { + godot_string tmp = _desc.debug_parse_stack_level_expression(_data, p_level, (godot_string *)&p_expression, p_max_subitems, p_max_depth); + String ret = *(String *)&tmp; + godot_string_destroy(&tmp); + return ret; + } + return String("Nothing"); +} + +void PluginScriptLanguage::reload_all_scripts() { + // TODO +} + +void PluginScriptLanguage::reload_tool_script(const Ref<Script> &p_script, bool p_soft_reload) { +#ifdef DEBUG_ENABLED + lock(); + // TODO + unlock(); +#endif +} + +void PluginScriptLanguage::lock() { +#ifndef NO_THREADS + if (_lock) { + _lock->lock(); + } +#endif +} + +void PluginScriptLanguage::unlock() { +#ifndef NO_THREADS + if (_lock) { + _lock->unlock(); + } +#endif +} + +PluginScriptLanguage::PluginScriptLanguage(const godot_pluginscript_language_desc *desc) + : _desc(*desc) { + _resource_loader = memnew(ResourceFormatLoaderPluginScript(this)); + _resource_saver = memnew(ResourceFormatSaverPluginScript(this)); + +// TODO: totally remove _lock attribute if NO_THREADS is set +#ifdef NO_THREADS + _lock = NULL; +#else + _lock = Mutex::create(); +#endif +} + +PluginScriptLanguage::~PluginScriptLanguage() { + memdelete(_resource_loader); + memdelete(_resource_saver); +#ifndef NO_THREADS + if (_lock) { + memdelete(_lock); + _lock = NULL; + } +#endif +} diff --git a/modules/gdnative/pluginscript/pluginscript_language.h b/modules/gdnative/pluginscript/pluginscript_language.h new file mode 100644 index 0000000000..a48dde97ce --- /dev/null +++ b/modules/gdnative/pluginscript/pluginscript_language.h @@ -0,0 +1,131 @@ +/*************************************************************************/ +/* pluginscript_language.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* http://www.godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 PLUGINSCRIPT_LANGUAGE_H +#define PLUGINSCRIPT_LANGUAGE_H + +// Godot imports +#include "core/io/resource_loader.h" +#include "core/io/resource_saver.h" +#include "core/map.h" +#include "core/script_language.h" +#include "core/self_list.h" +// PluginScript imports +#include "pluginscript_loader.h" +#include <pluginscript/godot_pluginscript.h> + +class PluginScript; +class PluginScriptInstance; + +class PluginScriptLanguage : public ScriptLanguage { + friend class PluginScript; + friend class PluginScriptInstance; + + ResourceFormatLoaderPluginScript *_resource_loader; + ResourceFormatSaverPluginScript *_resource_saver; + const godot_pluginscript_language_desc _desc; + godot_pluginscript_language_data *_data; + + Mutex *_lock; + SelfList<PluginScript>::List _script_list; + +public: + virtual String get_name() const; + + _FORCE_INLINE_ ResourceFormatLoaderPluginScript *get_resource_loader() { return _resource_loader; }; + _FORCE_INLINE_ ResourceFormatSaverPluginScript *get_resource_saver() { return _resource_saver; }; + + /* 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 bool can_inherit_from_file() { return true; } + 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 PoolStringArray &p_args) const; + virtual Error complete_code(const String &p_code, const String &p_base_path, Object *p_owner, List<String> *r_options, bool &r_force, String &r_call_hint); + 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); + + /* MULTITHREAD FUNCTIONS */ + + //some VMs need to be notified of thread creation/exiting to allocate a stack + // void thread_enter() {} + // void thread_exit() {} + + /* 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 Vector<StackInfo> debug_get_current_stack_info() { return Vector<StackInfo>(); } + + 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); + + virtual void frame(); + + void lock(); + void unlock(); + + PluginScriptLanguage(const godot_pluginscript_language_desc *desc); + virtual ~PluginScriptLanguage(); +}; + +#endif // PLUGINSCRIPT_LANGUAGE_H diff --git a/modules/gdnative/pluginscript/pluginscript_loader.cpp b/modules/gdnative/pluginscript/pluginscript_loader.cpp new file mode 100644 index 0000000000..3648e1a5b4 --- /dev/null +++ b/modules/gdnative/pluginscript/pluginscript_loader.cpp @@ -0,0 +1,113 @@ +/*************************************************************************/ +/* pluginscript_loader.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* http://www.godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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. */ +/*************************************************************************/ + +// Godot imports +#include "os/file_access.h" +// Pythonscript imports +#include "pluginscript_language.h" +#include "pluginscript_loader.h" +#include "pluginscript_script.h" + +ResourceFormatLoaderPluginScript::ResourceFormatLoaderPluginScript(PluginScriptLanguage *language) { + _language = language; +} + +RES ResourceFormatLoaderPluginScript::load(const String &p_path, const String &p_original_path, Error *r_error) { + if (r_error) + *r_error = ERR_FILE_CANT_OPEN; + + PluginScript *script = memnew(PluginScript); + script->init(_language); + + Ref<PluginScript> scriptres(script); + + Error err = script->load_source_code(p_path); + ERR_FAIL_COND_V(err != OK, RES()); + + script->set_path(p_original_path); + + script->reload(); + + if (r_error) + *r_error = OK; + + return scriptres; +} + +void ResourceFormatLoaderPluginScript::get_recognized_extensions(List<String> *p_extensions) const { + p_extensions->push_back(_language->get_extension()); +} + +bool ResourceFormatLoaderPluginScript::handles_type(const String &p_type) const { + return p_type == "Script" || p_type == _language->get_type(); +} + +String ResourceFormatLoaderPluginScript::get_resource_type(const String &p_path) const { + String el = p_path.get_extension().to_lower(); + if (el == _language->get_extension()) + return _language->get_type(); + return ""; +} + +ResourceFormatSaverPluginScript::ResourceFormatSaverPluginScript(PluginScriptLanguage *language) { + _language = language; +} + +Error ResourceFormatSaverPluginScript::save(const String &p_path, const RES &p_resource, uint32_t p_flags) { + Ref<PluginScript> sqscr = p_resource; + ERR_FAIL_COND_V(sqscr.is_null(), ERR_INVALID_PARAMETER); + + String source = sqscr->get_source_code(); + + Error err; + FileAccess *file = FileAccess::open(p_path, FileAccess::WRITE, &err); + ERR_FAIL_COND_V(err, err); + + file->store_string(source); + if (file->get_error() != OK && file->get_error() != ERR_FILE_EOF) { + memdelete(file); + return ERR_CANT_CREATE; + } + file->close(); + memdelete(file); + return OK; +} + +void ResourceFormatSaverPluginScript::get_recognized_extensions(const RES &p_resource, List<String> *p_extensions) const { + + if (Object::cast_to<PluginScript>(*p_resource)) { + p_extensions->push_back(_language->get_extension()); + } +} + +bool ResourceFormatSaverPluginScript::recognize(const RES &p_resource) const { + + return Object::cast_to<PluginScript>(*p_resource) != NULL; +} diff --git a/modules/gdnative/pluginscript/pluginscript_loader.h b/modules/gdnative/pluginscript/pluginscript_loader.h new file mode 100644 index 0000000000..b85e7725a1 --- /dev/null +++ b/modules/gdnative/pluginscript/pluginscript_loader.h @@ -0,0 +1,62 @@ +/*************************************************************************/ +/* pluginscript_loader.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* http://www.godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 PYTHONSCRIPT_PY_LOADER_H +#define PYTHONSCRIPT_PY_LOADER_H + +// Godot imports +#include "core/script_language.h" +#include "io/resource_loader.h" +#include "io/resource_saver.h" + +class PluginScriptLanguage; + +class ResourceFormatLoaderPluginScript : public ResourceFormatLoader { + PluginScriptLanguage *_language; + +public: + ResourceFormatLoaderPluginScript(PluginScriptLanguage *language); + virtual RES load(const String &p_path, const String &p_original_path = "", Error *r_error = NULL); + virtual void get_recognized_extensions(List<String> *p_extensions) const; + virtual bool handles_type(const String &p_type) const; + virtual String get_resource_type(const String &p_path) const; +}; + +class ResourceFormatSaverPluginScript : public ResourceFormatSaver { + PluginScriptLanguage *_language; + +public: + ResourceFormatSaverPluginScript(PluginScriptLanguage *language); + virtual Error save(const String &p_path, const RES &p_resource, uint32_t p_flags = 0); + virtual void get_recognized_extensions(const RES &p_resource, List<String> *p_extensions) const; + virtual bool recognize(const RES &p_resource) const; +}; + +#endif // PYTHONSCRIPT_PY_LOADER_H diff --git a/modules/gdnative/pluginscript/pluginscript_script.cpp b/modules/gdnative/pluginscript/pluginscript_script.cpp new file mode 100644 index 0000000000..7dd10a8bdf --- /dev/null +++ b/modules/gdnative/pluginscript/pluginscript_script.cpp @@ -0,0 +1,454 @@ +/*************************************************************************/ +/* pluginscript_script.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* http://www.godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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. */ +/*************************************************************************/ + +// Godot imports +#include "core/os/file_access.h" +// PluginScript imports +#include "pluginscript_instance.h" +#include "pluginscript_script.h" + +#if DEBUG_ENABLED +#define __ASSERT_SCRIPT_REASON "Cannot retrieve pluginscript class for this script, is you code correct ?" +#define ASSERT_SCRIPT_VALID() \ + { \ + ERR_EXPLAIN(__ASSERT_SCRIPT_REASON); \ + ERR_FAIL_COND(!can_instance()) \ + } +#define ASSERT_SCRIPT_VALID_V(ret) \ + { \ + ERR_EXPLAIN(__ASSERT_SCRIPT_REASON); \ + ERR_FAIL_COND_V(!can_instance(), ret) \ + } +#else +#define ASSERT_SCRIPT_VALID() +#define ASSERT_SCRIPT_VALID_V(ret) +#endif + +void PluginScript::_bind_methods() { +} + +#ifdef TOOLS_ENABLED + +void PluginScript::_placeholder_erased(PlaceHolderScriptInstance *p_placeholder) { + placeholders.erase(p_placeholder); +} + +#endif + +bool PluginScript::can_instance() const { + bool can = _valid || (!_tool && !ScriptServer::is_scripting_enabled()); + return can; +} + +Ref<Script> PluginScript::get_base_script() const { + if (_ref_base_parent.is_valid()) { + return Ref<PluginScript>(_ref_base_parent); + } else { + return Ref<Script>(); + } +} + +StringName PluginScript::get_instance_base_type() const { + if (_native_parent) + return _native_parent; + if (_ref_base_parent.is_valid()) + return _ref_base_parent->get_instance_base_type(); + return StringName(); +} + +void PluginScript::update_exports() { +// TODO +#ifdef TOOLS_ENABLED +#if 0 + ASSERT_SCRIPT_VALID(); + if (/*changed &&*/ placeholders.size()) { //hm :( + + //update placeholders if any + Map<StringName, Variant> propdefvalues; + List<PropertyInfo> propinfos; + const String *props = (const String *)pybind_get_prop_list(_py_exposed_class); + for (int i = 0; props[i] != ""; ++i) { + const String propname = props[i]; + pybind_get_prop_default_value(_py_exposed_class, propname.c_str(), (godot_variant *)&propdefvalues[propname]); + pybind_prop_info raw_info; + pybind_get_prop_info(_py_exposed_class, propname.c_str(), &raw_info); + PropertyInfo info; + info.type = (Variant::Type)raw_info.type; + info.name = propname; + info.hint = (PropertyHint)raw_info.hint; + info.hint_string = *(String *)&raw_info.hint_string; + info.usage = raw_info.usage; + propinfos.push_back(info); + } + for (Set<PlaceHolderScriptInstance *>::Element *E = placeholders.front(); E; E = E->next()) { + E->get()->update(propinfos, propdefvalues); + } + } +#endif +#endif +} + +// TODO: rename p_this "p_owner" ? +ScriptInstance *PluginScript::instance_create(Object *p_this) { + ASSERT_SCRIPT_VALID_V(NULL); + // TODO check script validity ? + if (!_tool && !ScriptServer::is_scripting_enabled()) { +#ifdef TOOLS_ENABLED + // Instance a fake script for editing the values + PlaceHolderScriptInstance *si = memnew(PlaceHolderScriptInstance(get_language(), Ref<Script>(this), p_this)); + placeholders.insert(si); + update_exports(); + return si; +#else + return NULL; +#endif + } + + PluginScript *top = this; + // TODO: can be optimized by storing a PluginScript::_base_parent direct pointer + while (top->_ref_base_parent.is_valid()) + top = top->_ref_base_parent.ptr(); + if (top->_native_parent) { + if (!ClassDB::is_parent_class(p_this->get_class_name(), top->_native_parent)) { + String msg = "Script inherits from native type '" + String(top->_native_parent) + "', so it can't be instanced in object of type: '" + p_this->get_class() + "'"; + // TODO: implement PluginscriptLanguage::debug_break_parse + // if (ScriptDebugger::get_singleton()) { + // _language->debug_break_parse(get_path(), 0, msg); + // } + ERR_EXPLAIN(msg); + ERR_FAIL_V(NULL); + } + } + + PluginScriptInstance *instance = memnew(PluginScriptInstance()); + const bool success = instance->init(this, p_this); + if (success) { + _language->lock(); + _instances.insert(instance->get_owner()); + _language->unlock(); + return instance; + } else { + memdelete(instance); + ERR_FAIL_V(NULL); + } +} + +bool PluginScript::instance_has(const Object *p_this) const { + _language->lock(); + bool hasit = _instances.has((Object *)p_this); + _language->unlock(); + return hasit; +} + +bool PluginScript::has_source_code() const { + bool has = _source != ""; + return has; +} + +String PluginScript::get_source_code() const { + return _source; +} + +void PluginScript::set_source_code(const String &p_code) { + if (_source == p_code) + return; + _source = p_code; +} + +Error PluginScript::reload(bool p_keep_state) { + _language->lock(); + ERR_FAIL_COND_V(!p_keep_state && _instances.size(), ERR_ALREADY_IN_USE); + _language->unlock(); + + _valid = false; + String basedir = _path; + + if (basedir == "") + basedir = get_path(); + + if (basedir != "") + basedir = basedir.get_base_dir(); + + if (_data) { + _desc->finish(_data); + } + + Error err; + godot_pluginscript_script_manifest manifest = _desc->init( + _language->_data, + (godot_string *)&_path, + (godot_string *)&_source, + (godot_error *)&err); + if (err) { + // TODO: GDscript uses `ScriptDebugger` here to jump into the parsing error + return err; + } + _valid = true; + // Use the manifest to configure this script object + _data = manifest.data; + _name = *(StringName *)&manifest.name; + _tool = manifest.is_tool; + // Base name is either another PluginScript or a regular class accessible + // through ClassDB + StringName *base_name = (StringName *)&manifest.base; + for (SelfList<PluginScript> *e = _language->_script_list.first(); e != NULL; e = e->next()) { + if (e->self()->_name == *base_name) { + // Found you, base is a PluginScript ! + _ref_base_parent = Ref<PluginScript>(e->self()); + break; + } + } + if (!_ref_base_parent.is_valid()) { + // Base is a native ClassDB + if (!ClassDB::class_exists(*base_name)) { + ERR_EXPLAIN("Unknown script '" + String(_name) + "' parent '" + String(*base_name) + "'."); + ERR_FAIL_V(ERR_PARSE_ERROR); + } + _native_parent = *base_name; + } + + Dictionary *members = (Dictionary *)&manifest.member_lines; + for (const Variant *key = members->next(); key != NULL; key = members->next(key)) { + _member_lines[*key] = (*members)[key]; + } + Array *methods = (Array *)&manifest.methods; + for (int i = 0; i < methods->size(); ++i) { + Dictionary v = (*methods)[i]; + MethodInfo mi = MethodInfo::from_dict(v); + _methods_info[mi.name] = mi; + // rpc_mode is passed as an optional field and is not part of MethodInfo + Variant var = v["rpc_mode"]; + if (var == Variant()) { + _methods_rpc_mode[mi.name] = ScriptInstance::RPC_MODE_DISABLED; + } else { + _methods_rpc_mode[mi.name] = ScriptInstance::RPCMode(int(var)); + } + } + Array *signals = (Array *)&manifest.signals; + for (int i = 0; i < signals->size(); ++i) { + Variant v = (*signals)[i]; + MethodInfo mi = MethodInfo::from_dict(v); + _signals_info[mi.name] = mi; + } + Array *properties = (Array *)&manifest.properties; + for (int i = 0; i < properties->size(); ++i) { + Dictionary v = (*properties)[i]; + PropertyInfo pi = PropertyInfo::from_dict(v); + _properties_info[pi.name] = pi; + _properties_default_values[pi.name] = v["default_value"]; + // rset_mode is passed as an optional field and is not part of PropertyInfo + Variant var = v["rset_mode"]; + if (var == Variant()) { + _methods_rpc_mode[pi.name] = ScriptInstance::RPC_MODE_DISABLED; + } else { + _methods_rpc_mode[pi.name] = ScriptInstance::RPCMode(int(var)); + } + } + // Manifest's attributes must be explicitly freed + godot_string_name_destroy(&manifest.name); + godot_string_name_destroy(&manifest.base); + godot_dictionary_destroy(&manifest.member_lines); + godot_array_destroy(&manifest.methods); + godot_array_destroy(&manifest.signals); + godot_array_destroy(&manifest.properties); + +#ifdef TOOLS_ENABLED +/*for (Set<PlaceHolderScriptInstance*>::Element *E=placeholders.front();E;E=E->next()) { + + _update_placeholder(E->get()); + }*/ +#endif + return OK; +} + +void PluginScript::get_script_method_list(List<MethodInfo> *r_methods) const { + ASSERT_SCRIPT_VALID(); + for (Map<StringName, MethodInfo>::Element *e = _methods_info.front(); e != NULL; e = e->next()) { + r_methods->push_back(e->get()); + } +} + +void PluginScript::get_script_property_list(List<PropertyInfo> *r_properties) const { + ASSERT_SCRIPT_VALID(); + for (Map<StringName, PropertyInfo>::Element *e = _properties_info.front(); e != NULL; e = e->next()) { + r_properties->push_back(e->get()); + } +} + +bool PluginScript::has_method(const StringName &p_method) const { + ASSERT_SCRIPT_VALID_V(false); + return _methods_info.has(p_method); +} + +MethodInfo PluginScript::get_method_info(const StringName &p_method) const { + ASSERT_SCRIPT_VALID_V(MethodInfo()); + const Map<StringName, MethodInfo>::Element *e = _methods_info.find(p_method); + if (e != NULL) { + return e->get(); + } else { + return MethodInfo(); + } +} + +bool PluginScript::has_property(const StringName &p_method) const { + ASSERT_SCRIPT_VALID_V(false); + return _properties_info.has(p_method); +} + +PropertyInfo PluginScript::get_property_info(const StringName &p_property) const { + ASSERT_SCRIPT_VALID_V(PropertyInfo()); + const Map<StringName, PropertyInfo>::Element *e = _properties_info.find(p_property); + if (e != NULL) { + return e->get(); + } else { + return PropertyInfo(); + } +} + +bool PluginScript::get_property_default_value(const StringName &p_property, Variant &r_value) const { + ASSERT_SCRIPT_VALID_V(false); +#ifdef TOOLS_ENABLED + const Map<StringName, Variant>::Element *e = _properties_default_values.find(p_property); + if (e != NULL) { + r_value = e->get(); + return true; + } else { + return false; + } +#endif + return false; +} + +String PluginScript::get_node_type() const { + // Even GDscript doesn't know what to put here ! + return ""; // ? +} + +ScriptLanguage *PluginScript::get_language() const { + return _language; +} + +Error PluginScript::load_source_code(const String &p_path) { + + PoolVector<uint8_t> sourcef; + Error err; + FileAccess *f = FileAccess::open(p_path, FileAccess::READ, &err); + if (err) { + ERR_FAIL_COND_V(err, err); + } + + int len = f->get_len(); + sourcef.resize(len + 1); + PoolVector<uint8_t>::Write w = sourcef.write(); + int r = f->get_buffer(w.ptr(), len); + f->close(); + memdelete(f); + ERR_FAIL_COND_V(r != len, ERR_CANT_OPEN); + w[len] = 0; + + String s; + if (s.parse_utf8((const char *)w.ptr())) { + ERR_EXPLAIN("Script '" + p_path + "' contains invalid unicode (utf-8), so it was not loaded. Please ensure that scripts are saved in valid utf-8 unicode."); + ERR_FAIL_V(ERR_INVALID_DATA); + } + + _source = s; +#ifdef TOOLS_ENABLED +// source_changed_cache=true; +#endif + _path = p_path; + return OK; +} + +bool PluginScript::has_script_signal(const StringName &p_signal) const { + ASSERT_SCRIPT_VALID_V(false); + return _signals_info.has(p_signal); +} + +void PluginScript::get_script_signal_list(List<MethodInfo> *r_signals) const { + ASSERT_SCRIPT_VALID(); + for (Map<StringName, MethodInfo>::Element *e = _signals_info.front(); e != NULL; e = e->next()) { + r_signals->push_back(e->get()); + } +} + +int PluginScript::get_member_line(const StringName &p_member) const { +#ifdef TOOLS_ENABLED + if (_member_lines.has(p_member)) + return _member_lines[p_member]; + else +#endif + return -1; +} + +ScriptInstance::RPCMode PluginScript::get_rpc_mode(const StringName &p_method) const { + ASSERT_SCRIPT_VALID_V(ScriptInstance::RPC_MODE_DISABLED); + const Map<StringName, ScriptInstance::RPCMode>::Element *e = _methods_rpc_mode.find(p_method); + if (e != NULL) { + return e->get(); + } else { + return ScriptInstance::RPC_MODE_DISABLED; + } +} + +ScriptInstance::RPCMode PluginScript::get_rset_mode(const StringName &p_variable) const { + ASSERT_SCRIPT_VALID_V(ScriptInstance::RPC_MODE_DISABLED); + const Map<StringName, ScriptInstance::RPCMode>::Element *e = _variables_rset_mode.find(p_variable); + if (e != NULL) { + return e->get(); + } else { + return ScriptInstance::RPC_MODE_DISABLED; + } +} + +PluginScript::PluginScript() + : _data(NULL), _tool(false), _valid(false), _script_list(this) { +} + +void PluginScript::init(PluginScriptLanguage *language) { + _desc = &language->_desc.script_desc; + _language = language; + +#ifdef DEBUG_ENABLED + _language->lock(); + _language->_script_list.add(&_script_list); + _language->unlock(); +#endif +} + +PluginScript::~PluginScript() { + _desc->finish(_data); + +#ifdef DEBUG_ENABLED + _language->lock(); + _language->_script_list.remove(&_script_list); + _language->unlock(); +#endif +} diff --git a/modules/gdnative/pluginscript/pluginscript_script.h b/modules/gdnative/pluginscript/pluginscript_script.h new file mode 100644 index 0000000000..e6b8643cd9 --- /dev/null +++ b/modules/gdnative/pluginscript/pluginscript_script.h @@ -0,0 +1,129 @@ +/*************************************************************************/ +/* pluginscript_script.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* http://www.godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 PLUGINSCRIPT_SCRIPT_H +#define PLUGINSCRIPT_SCRIPT_H + +// Godot imports +#include "core/script_language.h" +// PluginScript imports +#include "pluginscript_language.h" +#include <pluginscript/godot_pluginscript.h> + +class PyInstance; + +class PluginScript : public Script { + + GDCLASS(PluginScript, Script); + + friend class PluginScriptInstance; + friend class PluginScriptLanguage; + +private: + godot_pluginscript_script_data *_data; + const godot_pluginscript_script_desc *_desc; + PluginScriptLanguage *_language; + bool _tool; + bool _valid; + + Ref<PluginScript> _ref_base_parent; + StringName _native_parent; + SelfList<PluginScript> _script_list; + + Map<StringName, int> _member_lines; + Map<StringName, Variant> _properties_default_values; + Map<StringName, PropertyInfo> _properties_info; + Map<StringName, MethodInfo> _signals_info; + Map<StringName, MethodInfo> _methods_info; + Map<StringName, ScriptInstance::RPCMode> _variables_rset_mode; + Map<StringName, ScriptInstance::RPCMode> _methods_rpc_mode; + + Set<Object *> _instances; + //exported members + String _source; + String _path; + StringName _name; + +protected: + static void _bind_methods(); + +#ifdef TOOLS_ENABLED + Set<PlaceHolderScriptInstance *> placeholders; + //void _update_placeholder(PlaceHolderScriptInstance *p_placeholder); + virtual void _placeholder_erased(PlaceHolderScriptInstance *p_placeholder); +#endif +public: + virtual bool can_instance() const; + + virtual Ref<Script> get_base_script() const; //for script inheritance + + 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; + + 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); + // TODO: load_source_code only allow utf-8 file, should handle bytecode as well ? + virtual Error load_source_code(const String &p_path); + + virtual bool has_method(const StringName &p_method) const; + virtual MethodInfo get_method_info(const StringName &p_method) const; + + bool has_property(const StringName &p_method) const; + PropertyInfo get_property_info(const StringName &p_property) const; + + bool is_tool() const { return _tool; } + + 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 update_exports(); + virtual void get_script_method_list(List<MethodInfo> *r_methods) const; + virtual void get_script_property_list(List<PropertyInfo> *r_propertieslist) const; + + virtual int get_member_line(const StringName &p_member) const; + + ScriptInstance::RPCMode get_rpc_mode(const StringName &p_method) const; + ScriptInstance::RPCMode get_rset_mode(const StringName &p_variable) const; + + PluginScript(); + void init(PluginScriptLanguage *language); + virtual ~PluginScript(); +}; + +#endif // PLUGINSCRIPT_SCRIPT_H diff --git a/modules/gdnative/pluginscript/register_types.cpp b/modules/gdnative/pluginscript/register_types.cpp new file mode 100644 index 0000000000..5829d08dff --- /dev/null +++ b/modules/gdnative/pluginscript/register_types.cpp @@ -0,0 +1,118 @@ +/*************************************************************************/ +/* register_types.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* http://www.godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 "core/project_settings.h" +#include "io/resource_loader.h" +#include "io/resource_saver.h" +#include "os/dir_access.h" +#include "os/os.h" +#include "scene/main/scene_tree.h" + +#include "pluginscript_language.h" +#include "pluginscript_script.h" +#include <pluginscript/godot_pluginscript.h> + +static List<PluginScriptLanguage *> pluginscript_languages; + +static Error _check_language_desc(const godot_pluginscript_language_desc *desc) { + ERR_FAIL_COND_V(!desc->name || desc->name == String(), ERR_BUG); + ERR_FAIL_COND_V(!desc->type || desc->type == String(), ERR_BUG); + ERR_FAIL_COND_V(!desc->extension || desc->extension == String(), ERR_BUG); + ERR_FAIL_COND_V(!desc->recognized_extensions || !desc->recognized_extensions[0], ERR_BUG); + ERR_FAIL_COND_V(!desc->init, ERR_BUG); + ERR_FAIL_COND_V(!desc->finish, ERR_BUG); + + // desc->reserved_words is not mandatory + // desc->comment_delimiters is not mandatory + // desc->string_delimiters is not mandatory + + // desc->get_template_source_code is not mandatory + // desc->validate is not mandatory + + // desc->get_template_source_code is not mandatory + // desc->validate is not mandatory + // desc->find_function is not mandatory + // desc->make_function is not mandatory + // desc->complete_code is not mandatory + // desc->auto_indent_code is not mandatory + // desc->add_global_constant is not mandatory + // desc->debug_get_error is not mandatory + // desc->debug_get_stack_level_count is not mandatory + // desc->debug_get_stack_level_line is not mandatory + // desc->debug_get_stack_level_function is not mandatory + // desc->debug_get_stack_level_source is not mandatory + // desc->debug_get_stack_level_locals is not mandatory + // desc->debug_get_stack_level_members is not mandatory + // desc->debug_get_globals is not mandatory + // desc->debug_parse_stack_level_expression is not mandatory + // desc->profiling_start is not mandatory + // desc->profiling_stop is not mandatory + // desc->profiling_get_accumulated_data is not mandatory + // desc->profiling_get_frame_data is not mandatory + // desc->frame is not mandatory + + ERR_FAIL_COND_V(!desc->script_desc.init, ERR_BUG); + ERR_FAIL_COND_V(!desc->script_desc.finish, ERR_BUG); + + ERR_FAIL_COND_V(!desc->script_desc.instance_desc.init, ERR_BUG); + ERR_FAIL_COND_V(!desc->script_desc.instance_desc.finish, ERR_BUG); + ERR_FAIL_COND_V(!desc->script_desc.instance_desc.set_prop, ERR_BUG); + ERR_FAIL_COND_V(!desc->script_desc.instance_desc.get_prop, ERR_BUG); + ERR_FAIL_COND_V(!desc->script_desc.instance_desc.call_method, ERR_BUG); + ERR_FAIL_COND_V(!desc->script_desc.instance_desc.notification, ERR_BUG); + // desc->script_desc.instance_desc.refcount_incremented is not mandatory + // desc->script_desc.instance_desc.refcount_decremented is not mandatory + return OK; +} + +void GDAPI godot_pluginscript_register_language(const godot_pluginscript_language_desc *language_desc) { + Error ret = _check_language_desc(language_desc); + if (ret) { + ERR_FAIL(); + } + PluginScriptLanguage *language = memnew(PluginScriptLanguage(language_desc)); + ScriptServer::register_language(language); + ResourceLoader::add_resource_format_loader(language->get_resource_loader()); + ResourceSaver::add_resource_format_saver(language->get_resource_saver()); + pluginscript_languages.push_back(language); +} + +void register_pluginscript_types() { + ClassDB::register_class<PluginScript>(); +} + +void unregister_pluginscript_types() { + for (List<PluginScriptLanguage *>::Element *e = pluginscript_languages.front(); e; e = e->next()) { + PluginScriptLanguage *language = e->get(); + ScriptServer::unregister_language(language); + memdelete(language); + } +} diff --git a/modules/gdnative/pluginscript/register_types.h b/modules/gdnative/pluginscript/register_types.h new file mode 100644 index 0000000000..70bbb16c62 --- /dev/null +++ b/modules/gdnative/pluginscript/register_types.h @@ -0,0 +1,31 @@ +/*************************************************************************/ +/* register_types.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* http://www.godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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_pluginscript_types(); +void unregister_pluginscript_types(); diff --git a/modules/gdnative/register_types.cpp b/modules/gdnative/register_types.cpp index 997c342045..87f9cddaa2 100644 --- a/modules/gdnative/register_types.cpp +++ b/modules/gdnative/register_types.cpp @@ -35,7 +35,9 @@ #include "io/resource_loader.h" #include "io/resource_saver.h" +#include "nativearvr/register_types.h" #include "nativescript/register_types.h" +#include "pluginscript/register_types.h" #include "core/engine.h" #include "core/os/os.h" @@ -127,57 +129,12 @@ static void editor_init_callback() { #endif -godot_variant cb_standard_varcall(void *handle, godot_string *p_procedure, godot_array *p_args) { - if (handle == NULL) { - ERR_PRINT("No valid library handle, can't call standard varcall procedure"); - godot_variant ret; - godot_variant_new_nil(&ret); - return ret; - } - - void *library_proc; - Error err = OS::get_singleton()->get_dynamic_library_symbol_handle( - handle, - *(String *)p_procedure, - library_proc, - true); // we roll our own message - if (err != OK) { - ERR_PRINT((String("GDNative procedure \"" + *(String *)p_procedure) + "\" does not exists and can't be called").utf8().get_data()); - godot_variant ret; - godot_variant_new_nil(&ret); - return ret; - } +godot_variant cb_standard_varcall(void *p_procedure_handle, godot_array *p_args) { godot_gdnative_procedure_fn proc; - proc = (godot_gdnative_procedure_fn)library_proc; - - return proc(NULL, p_args); -} - -void cb_singleton_call( - void *p_handle, - godot_string *p_proc_name, - void *p_data, - int p_num_args, - void **p_args, - void *r_return) { - if (p_handle == NULL) { - ERR_PRINT("No valid library handle, can't call singleton procedure"); - return; - } + proc = (godot_gdnative_procedure_fn)p_procedure_handle; - void *singleton_proc; - Error err = OS::get_singleton()->get_dynamic_library_symbol_handle( - p_handle, - *(String *)p_proc_name, - singleton_proc); - - if (err != OK) { - return; - } - - void (*singleton_procedure_ptr)() = (void (*)())singleton_proc; - singleton_procedure_ptr(); + return proc(p_args); } GDNativeCallRegistry *GDNativeCallRegistry::singleton; @@ -200,13 +157,16 @@ void register_gdnative_types() { GDNativeCallRegistry::singleton->register_native_call_type("standard_varcall", cb_standard_varcall); - GDNativeCallRegistry::singleton->register_native_raw_call_type("gdnative_singleton_call", cb_singleton_call); - + register_nativearvr_types(); register_nativescript_types(); + register_pluginscript_types(); // run singletons - Array singletons = ProjectSettings::get_singleton()->get("gdnative/singletons"); + Array singletons = Array(); + if (ProjectSettings::get_singleton()->has_setting("gdnative/singletons")) { + singletons = ProjectSettings::get_singleton()->get("gdnative/singletons"); + } singleton_gdnatives.resize(singletons.size()); @@ -223,13 +183,16 @@ void register_gdnative_types() { continue; } - singleton_gdnatives[i]->call_native_raw( - "gdnative_singleton_call", + void *proc_ptr; + Error err = singleton_gdnatives[i]->get_symbol( "godot_gdnative_singleton", - NULL, - 0, - NULL, - NULL); + proc_ptr); + + if (err != OK) { + ERR_PRINT((String("No godot_gdnative_singleton in \"" + singleton_gdnatives[i]->get_library()->get_active_library_path()) + "\" found").utf8().get_data()); + } else { + ((void (*)())proc_ptr)(); + } } } @@ -247,8 +210,11 @@ void unregister_gdnative_types() { singleton_gdnatives[i]->terminate(); } + singleton_gdnatives.clear(); + unregister_pluginscript_types(); unregister_nativescript_types(); + unregister_nativearvr_types(); memdelete(GDNativeCallRegistry::singleton); diff --git a/modules/gdscript/gd_editor.cpp b/modules/gdscript/gd_editor.cpp index aa39ad92c4..b0408917a4 100644 --- a/modules/gdscript/gd_editor.cpp +++ b/modules/gdscript/gd_editor.cpp @@ -1952,7 +1952,6 @@ static void _find_call_arguments(GDCompletionContext &context, const GDParser::N //make sure identifier exists... const GDParser::IdentifierNode *id = static_cast<const GDParser::IdentifierNode *>(op->arguments[1]); - if (op->arguments[0]->type == GDParser::Node::TYPE_SELF) { //self, look up @@ -2021,7 +2020,7 @@ static void _find_call_arguments(GDCompletionContext &context, const GDParser::N base = script->get_native(); } else if (nc.is_valid()) { - if (context.function && !context.function->_static) { + if (!(context.function && context.function->_static)) { GDCompletionIdentifier ci; ci.type = Variant::OBJECT; diff --git a/modules/gdscript/gd_function.cpp b/modules/gdscript/gd_function.cpp index df7b16c96e..ce503b62f2 100644 --- a/modules/gdscript/gd_function.cpp +++ b/modules/gdscript/gd_function.cpp @@ -41,11 +41,12 @@ Variant *GDFunction::_get_variant(int p_address, GDInstance *p_instance, GDScrip switch ((p_address & ADDR_TYPE_MASK) >> ADDR_BITS) { case ADDR_TYPE_SELF: { - - if (!p_instance) { +#ifdef DEBUG_ENABLED + if (unlikely(!p_instance)) { r_error = "Cannot access self without instance."; return NULL; } +#endif return &self; } break; case ADDR_TYPE_CLASS: { @@ -53,18 +54,22 @@ Variant *GDFunction::_get_variant(int p_address, GDInstance *p_instance, GDScrip return &p_script->_static_ref; } break; case ADDR_TYPE_MEMBER: { - //member indexing is O(1) - if (!p_instance) { +#ifdef DEBUG_ENABLED + if (unlikely(!p_instance)) { r_error = "Cannot access member without instance."; return NULL; } +#endif + //member indexing is O(1) return &p_instance->members[address]; } break; case ADDR_TYPE_CLASS_CONSTANT: { //todo change to index! GDScript *o = p_script; +#ifdef DEBUG_ENABLED ERR_FAIL_INDEX_V(address, _global_names_count, NULL); +#endif const StringName *sn = &_global_names_ptr[address]; while (o) { @@ -84,18 +89,22 @@ Variant *GDFunction::_get_variant(int p_address, GDInstance *p_instance, GDScrip ERR_FAIL_V(NULL); } break; case ADDR_TYPE_LOCAL_CONSTANT: { +#ifdef DEBUG_ENABLED ERR_FAIL_INDEX_V(address, _constant_count, NULL); +#endif return &_constants_ptr[address]; } break; case ADDR_TYPE_STACK: case ADDR_TYPE_STACK_VARIABLE: { +#ifdef DEBUG_ENABLED ERR_FAIL_INDEX_V(address, _stack_size, NULL); +#endif return &p_stack[address]; } break; case ADDR_TYPE_GLOBAL: { - +#ifdef DEBUG_ENABLED ERR_FAIL_INDEX_V(address, GDScriptLanguage::get_singleton()->get_global_array_size(), NULL); - +#endif return &GDScriptLanguage::get_singleton()->get_global_array()[address]; } break; case ADDR_TYPE_NIL: { @@ -161,8 +170,71 @@ static String _get_var_type(const Variant *p_type) { return basestr; } +#if defined(__GNUC__) && !defined(__clang__) +#define OPCODES_TABLE \ + static const void *switch_table_ops[] = { \ + &&OPCODE_OPERATOR, \ + &&OPCODE_EXTENDS_TEST, \ + &&OPCODE_SET, \ + &&OPCODE_GET, \ + &&OPCODE_SET_NAMED, \ + &&OPCODE_GET_NAMED, \ + &&OPCODE_SET_MEMBER, \ + &&OPCODE_GET_MEMBER, \ + &&OPCODE_ASSIGN, \ + &&OPCODE_ASSIGN_TRUE, \ + &&OPCODE_ASSIGN_FALSE, \ + &&OPCODE_CONSTRUCT, \ + &&OPCODE_CONSTRUCT_ARRAY, \ + &&OPCODE_CONSTRUCT_DICTIONARY, \ + &&OPCODE_CALL, \ + &&OPCODE_CALL_RETURN, \ + &&OPCODE_CALL_BUILT_IN, \ + &&OPCODE_CALL_SELF, \ + &&OPCODE_CALL_SELF_BASE, \ + &&OPCODE_YIELD, \ + &&OPCODE_YIELD_SIGNAL, \ + &&OPCODE_YIELD_RESUME, \ + &&OPCODE_JUMP, \ + &&OPCODE_JUMP_IF, \ + &&OPCODE_JUMP_IF_NOT, \ + &&OPCODE_JUMP_TO_DEF_ARGUMENT, \ + &&OPCODE_RETURN, \ + &&OPCODE_ITERATE_BEGIN, \ + &&OPCODE_ITERATE, \ + &&OPCODE_ASSERT, \ + &&OPCODE_BREAKPOINT, \ + &&OPCODE_LINE, \ + &&OPCODE_END \ + }; + +#define OPCODE(m_op) \ + m_op: +#define OPCODE_WHILE(m_test) +#define OPCODES_END \ + OPSEXIT: +#define OPCODES_OUT \ + OPSOUT: +#define DISPATCH_OPCODE goto *switch_table_ops[_code_ptr[ip]] +#define OPCODE_SWITCH(m_test) DISPATCH_OPCODE; +#define OPCODE_BREAK goto OPSEXIT +#define OPCODE_OUT goto OPSOUT +#else +#define OPCODES_TABLE +#define OPCODE(m_op) case m_op: +#define OPCODE_WHILE(m_test) while (m_test) +#define OPCODES_END +#define OPCODES_OUT +#define DISPATCH_OPCODE continue +#define OPCODE_SWITCH(m_test) switch (m_test) +#define OPCODE_BREAK break +#define OPCODE_OUT break +#endif + Variant GDFunction::call(GDInstance *p_instance, const Variant **p_args, int p_argcount, Variant::CallError &r_err, CallState *p_state) { + OPCODES_TABLE; + if (!_code_ptr) { return Variant(); @@ -271,16 +343,23 @@ Variant GDFunction::call(GDInstance *p_instance, const Variant **p_args, int p_a if (ScriptDebugger::get_singleton()) GDScriptLanguage::get_singleton()->enter_function(p_instance, this, stack, &ip, &line); -#define GD_ERR_BREAK(m_cond) ERR_BREAK(m_cond) +#define GD_ERR_BREAK(m_cond) \ + { \ + if (unlikely(m_cond)) { \ + _err_print_error(FUNCTION_STR, __FILE__, __LINE__, "Condition ' " _STR(m_cond) " ' is true. Breaking..:"); \ + OPCODE_BREAK; \ + } else \ + _err_error_exists = false; \ + } #define CHECK_SPACE(m_space) \ - ERR_BREAK((ip + m_space) > _code_size) + GD_ERR_BREAK((ip + m_space) > _code_size) #define GET_VARIANT_PTR(m_v, m_code_ofs) \ Variant *m_v; \ m_v = _get_variant(_code_ptr[ip + m_code_ofs], p_instance, _class, self, stack, err_text); \ - if (!m_v) \ - break; + if (unlikely(!m_v)) \ + OPCODE_BREAK; #else #define GD_ERR_BREAK(m_cond) @@ -306,15 +385,15 @@ Variant GDFunction::call(GDInstance *p_instance, const Variant **p_args, int p_a bool exit_ok = false; #ifdef DEBUG_ENABLED - while (ip < _code_size) { + OPCODE_WHILE(ip < _code_size) { int last_opcode = _code_ptr[ip]; #else - while (true) { + OPCODE_WHILE(true) { #endif - switch (_code_ptr[ip]) { + OPCODE_SWITCH(_code_ptr[ip]) { - case OPCODE_OPERATOR: { + OPCODE(OPCODE_OPERATOR) { CHECK_SPACE(5); @@ -343,14 +422,14 @@ Variant GDFunction::call(GDInstance *p_instance, const Variant **p_args, int p_a } else { err_text = "Invalid operands '" + Variant::get_type_name(a->get_type()) + "' and '" + Variant::get_type_name(b->get_type()) + "' in operator '" + Variant::get_operator_name(op) + "'."; } - break; + OPCODE_BREAK; } *dst = ret; #endif ip += 5; - continue; + DISPATCH_OPCODE; } - case OPCODE_EXTENDS_TEST: { + OPCODE(OPCODE_EXTENDS_TEST) { CHECK_SPACE(4); @@ -362,12 +441,12 @@ Variant GDFunction::call(GDInstance *p_instance, const Variant **p_args, int p_a if (a->get_type() != Variant::OBJECT || a->operator Object *() == NULL) { err_text = "Left operand of 'is' is not an instance of anything."; - break; + OPCODE_BREAK; } if (b->get_type() != Variant::OBJECT || b->operator Object *() == NULL) { err_text = "Right operand of 'is' is not a class."; - break; + OPCODE_BREAK; } #endif Object *obj_A = *a; @@ -405,7 +484,7 @@ Variant GDFunction::call(GDInstance *p_instance, const Variant **p_args, int p_a if (!nc) { err_text = "Right operand of 'is' is not a class (type: '" + obj_B->get_class() + "')."; - break; + OPCODE_BREAK; } #endif extends_ok = ClassDB::is_parent_class(obj_A->get_class_name(), nc->get_name()); @@ -413,9 +492,9 @@ Variant GDFunction::call(GDInstance *p_instance, const Variant **p_args, int p_a *dst = extends_ok; ip += 4; - continue; + DISPATCH_OPCODE; } - case OPCODE_SET: { + OPCODE(OPCODE_SET) { CHECK_SPACE(3); @@ -435,13 +514,13 @@ Variant GDFunction::call(GDInstance *p_instance, const Variant **p_args, int p_a v = "of type '" + _get_var_type(index) + "'"; } err_text = "Invalid set index " + v + " (on base: '" + _get_var_type(dst) + "')."; - break; + OPCODE_BREAK; } #endif ip += 4; - continue; + DISPATCH_OPCODE; } - case OPCODE_GET: { + OPCODE(OPCODE_GET) { CHECK_SPACE(3); @@ -466,14 +545,14 @@ Variant GDFunction::call(GDInstance *p_instance, const Variant **p_args, int p_a v = "of type '" + _get_var_type(index) + "'"; } err_text = "Invalid get index " + v + " (on base: '" + _get_var_type(src) + "')."; - break; + OPCODE_BREAK; } *dst = ret; #endif ip += 4; - continue; + DISPATCH_OPCODE; } - case OPCODE_SET_NAMED: { + OPCODE(OPCODE_SET_NAMED) { CHECK_SPACE(3); @@ -492,13 +571,13 @@ Variant GDFunction::call(GDInstance *p_instance, const Variant **p_args, int p_a if (!valid) { String err_type; err_text = "Invalid set index '" + String(*index) + "' (on base: '" + _get_var_type(dst) + "')."; - break; + OPCODE_BREAK; } #endif ip += 4; - continue; + DISPATCH_OPCODE; } - case OPCODE_GET_NAMED: { + OPCODE(OPCODE_GET_NAMED) { CHECK_SPACE(4); @@ -525,14 +604,14 @@ Variant GDFunction::call(GDInstance *p_instance, const Variant **p_args, int p_a } else { err_text = "Invalid get index '" + index->operator String() + "' (on base: '" + _get_var_type(src) + "')."; } - break; + OPCODE_BREAK; } *dst = ret; #endif ip += 4; - continue; + DISPATCH_OPCODE; } - case OPCODE_SET_MEMBER: { + OPCODE(OPCODE_SET_MEMBER) { CHECK_SPACE(3); int indexname = _code_ptr[ip + 1]; @@ -545,16 +624,16 @@ Variant GDFunction::call(GDInstance *p_instance, const Variant **p_args, int p_a #ifdef DEBUG_ENABLED if (!ok) { err_text = "Internal error setting property: " + String(*index); - break; + OPCODE_BREAK; } else if (!valid) { err_text = "Error setting property '" + String(*index) + "' with value of type " + Variant::get_type_name(src->get_type()) + "."; - break; + OPCODE_BREAK; } #endif ip += 3; - continue; + DISPATCH_OPCODE; } - case OPCODE_GET_MEMBER: { + OPCODE(OPCODE_GET_MEMBER) { CHECK_SPACE(3); int indexname = _code_ptr[ip + 1]; @@ -566,13 +645,13 @@ Variant GDFunction::call(GDInstance *p_instance, const Variant **p_args, int p_a #ifdef DEBUG_ENABLED if (!ok) { err_text = "Internal error getting property: " + String(*index); - break; + OPCODE_BREAK; } #endif ip += 3; - continue; + DISPATCH_OPCODE; } - case OPCODE_ASSIGN: { + OPCODE(OPCODE_ASSIGN) { CHECK_SPACE(3); GET_VARIANT_PTR(dst, 1); @@ -581,9 +660,9 @@ Variant GDFunction::call(GDInstance *p_instance, const Variant **p_args, int p_a *dst = *src; ip += 3; - continue; + DISPATCH_OPCODE; } - case OPCODE_ASSIGN_TRUE: { + OPCODE(OPCODE_ASSIGN_TRUE) { CHECK_SPACE(2); GET_VARIANT_PTR(dst, 1); @@ -591,9 +670,9 @@ Variant GDFunction::call(GDInstance *p_instance, const Variant **p_args, int p_a *dst = true; ip += 2; - continue; + DISPATCH_OPCODE; } - case OPCODE_ASSIGN_FALSE: { + OPCODE(OPCODE_ASSIGN_FALSE) { CHECK_SPACE(2); GET_VARIANT_PTR(dst, 1); @@ -601,9 +680,9 @@ Variant GDFunction::call(GDInstance *p_instance, const Variant **p_args, int p_a *dst = false; ip += 2; - continue; + DISPATCH_OPCODE; } - case OPCODE_CONSTRUCT: { + OPCODE(OPCODE_CONSTRUCT) { CHECK_SPACE(2); Variant::Type t = Variant::Type(_code_ptr[ip + 1]); @@ -623,15 +702,15 @@ Variant GDFunction::call(GDInstance *p_instance, const Variant **p_args, int p_a if (err.error != Variant::CallError::CALL_OK) { err_text = _get_call_error(err, "'" + Variant::get_type_name(t) + "' constructor", (const Variant **)argptrs); - break; + OPCODE_BREAK; } #endif ip += 4 + argc; //construct a basic type - continue; + DISPATCH_OPCODE; } - case OPCODE_CONSTRUCT_ARRAY: { + OPCODE(OPCODE_CONSTRUCT_ARRAY) { CHECK_SPACE(1); int argc = _code_ptr[ip + 1]; @@ -649,9 +728,9 @@ Variant GDFunction::call(GDInstance *p_instance, const Variant **p_args, int p_a *dst = array; ip += 3 + argc; - continue; + DISPATCH_OPCODE; } - case OPCODE_CONSTRUCT_DICTIONARY: { + OPCODE(OPCODE_CONSTRUCT_DICTIONARY) { CHECK_SPACE(1); int argc = _code_ptr[ip + 1]; @@ -671,10 +750,10 @@ Variant GDFunction::call(GDInstance *p_instance, const Variant **p_args, int p_a *dst = dict; ip += 3 + argc * 2; - continue; + DISPATCH_OPCODE; } - case OPCODE_CALL_RETURN: - case OPCODE_CALL: { + OPCODE(OPCODE_CALL_RETURN) + OPCODE(OPCODE_CALL) { CHECK_SPACE(4); bool call_ret = _code_ptr[ip] == OPCODE_CALL_RETURN; @@ -736,24 +815,24 @@ Variant GDFunction::call(GDInstance *p_instance, const Variant **p_args, int p_a if (base->is_ref()) { err_text = "Attempted to free a reference."; - break; + OPCODE_BREAK; } else if (base->get_type() == Variant::OBJECT) { err_text = "Attempted to free a locked object (calling or emitting)."; - break; + OPCODE_BREAK; } } } err_text = _get_call_error(err, "function '" + methodstr + "' in base '" + basestr + "'", (const Variant **)argptrs); - break; + OPCODE_BREAK; } #endif //_call_func(NULL,base,*methodname,ip,argc,p_instance,stack); ip += argc + 1; - continue; + DISPATCH_OPCODE; } - case OPCODE_CALL_BUILT_IN: { + OPCODE(OPCODE_CALL_BUILT_IN) { CHECK_SPACE(4); @@ -786,17 +865,17 @@ Variant GDFunction::call(GDInstance *p_instance, const Variant **p_args, int p_a } else { err_text = _get_call_error(err, "built-in function '" + methodstr + "'", (const Variant **)argptrs); } - break; + OPCODE_BREAK; } #endif ip += argc + 1; - continue; + DISPATCH_OPCODE; } - case OPCODE_CALL_SELF: { + OPCODE(OPCODE_CALL_SELF) { - break; + OPCODE_BREAK; } - case OPCODE_CALL_SELF_BASE: { + OPCODE(OPCODE_CALL_SELF_BASE) { CHECK_SPACE(2); int self_fun = _code_ptr[ip + 1]; @@ -805,7 +884,7 @@ Variant GDFunction::call(GDInstance *p_instance, const Variant **p_args, int p_a if (self_fun < 0 || self_fun >= _global_names_count) { err_text = "compiler bug, function name not found"; - break; + OPCODE_BREAK; } #endif const StringName *methodname = &_global_names_ptr[self_fun]; @@ -865,14 +944,14 @@ Variant GDFunction::call(GDInstance *p_instance, const Variant **p_args, int p_a String methodstr = *methodname; err_text = _get_call_error(err, "function '" + methodstr + "'", (const Variant **)argptrs); - break; + OPCODE_BREAK; } ip += 4 + argc; - continue; + DISPATCH_OPCODE; } - case OPCODE_YIELD: - case OPCODE_YIELD_SIGNAL: { + OPCODE(OPCODE_YIELD) + OPCODE(OPCODE_YIELD_SIGNAL) { int ipofs = 1; if (_code_ptr[ip] == OPCODE_YIELD_SIGNAL) { @@ -913,11 +992,11 @@ Variant GDFunction::call(GDInstance *p_instance, const Variant **p_args, int p_a #ifdef DEBUG_ENABLED if (argobj->get_type() != Variant::OBJECT) { err_text = "First argument of yield() not of type object."; - break; + OPCODE_BREAK; } if (argname->get_type() != Variant::STRING) { err_text = "Second argument of yield() not a string (for signal name)."; - break; + OPCODE_BREAK; } #endif Object *obj = argobj->operator Object *(); @@ -926,18 +1005,18 @@ Variant GDFunction::call(GDInstance *p_instance, const Variant **p_args, int p_a if (!obj) { err_text = "First argument of yield() is null."; - break; + OPCODE_BREAK; } if (ScriptDebugger::get_singleton()) { if (!ObjectDB::instance_validate(obj)) { err_text = "First argument of yield() is a previously freed instance."; - break; + OPCODE_BREAK; } } if (signal.length() == 0) { err_text = "Second argument of yield() is an empty string (for signal name)."; - break; + OPCODE_BREAK; } #endif @@ -945,38 +1024,38 @@ Variant GDFunction::call(GDInstance *p_instance, const Variant **p_args, int p_a #ifdef DEBUG_ENABLED if (err != OK) { err_text = "Error connecting to signal: " + signal + " during yield()."; - break; + OPCODE_BREAK; } #endif } exit_ok = true; - break; + OPCODE_BREAK; } - case OPCODE_YIELD_RESUME: { + OPCODE(OPCODE_YIELD_RESUME) { CHECK_SPACE(2); #ifdef DEBUG_ENABLED if (!p_state) { err_text = ("Invalid Resume (bug?)"); - break; + OPCODE_BREAK; } #endif GET_VARIANT_PTR(result, 1); *result = p_state->result; ip += 2; - continue; + DISPATCH_OPCODE; } - case OPCODE_JUMP: { + OPCODE(OPCODE_JUMP) { CHECK_SPACE(2); int to = _code_ptr[ip + 1]; GD_ERR_BREAK(to < 0 || to > _code_size); ip = to; - continue; + DISPATCH_OPCODE; } - case OPCODE_JUMP_IF: { + OPCODE(OPCODE_JUMP_IF) { CHECK_SPACE(3); @@ -988,12 +1067,12 @@ Variant GDFunction::call(GDInstance *p_instance, const Variant **p_args, int p_a int to = _code_ptr[ip + 2]; GD_ERR_BREAK(to < 0 || to > _code_size); ip = to; - continue; + DISPATCH_OPCODE; } ip += 3; - continue; + DISPATCH_OPCODE; } - case OPCODE_JUMP_IF_NOT: { + OPCODE(OPCODE_JUMP_IF_NOT) { CHECK_SPACE(3); @@ -1005,26 +1084,26 @@ Variant GDFunction::call(GDInstance *p_instance, const Variant **p_args, int p_a int to = _code_ptr[ip + 2]; GD_ERR_BREAK(to < 0 || to > _code_size); ip = to; - continue; + DISPATCH_OPCODE; } ip += 3; - continue; + DISPATCH_OPCODE; } - case OPCODE_JUMP_TO_DEF_ARGUMENT: { + OPCODE(OPCODE_JUMP_TO_DEF_ARGUMENT) { CHECK_SPACE(2); ip = _default_arg_ptr[defarg]; - continue; + DISPATCH_OPCODE; } - case OPCODE_RETURN: { + OPCODE(OPCODE_RETURN) { CHECK_SPACE(2); GET_VARIANT_PTR(r, 1); retvalue = *r; exit_ok = true; - break; + OPCODE_BREAK; } - case OPCODE_ITERATE_BEGIN: { + OPCODE(OPCODE_ITERATE_BEGIN) { CHECK_SPACE(8); //space for this a regular iterate @@ -1036,13 +1115,13 @@ Variant GDFunction::call(GDInstance *p_instance, const Variant **p_args, int p_a #ifdef DEBUG_ENABLED if (!valid) { err_text = "Unable to iterate on object of type " + Variant::get_type_name(container->get_type()) + "'."; - break; + OPCODE_BREAK; } #endif int jumpto = _code_ptr[ip + 3]; GD_ERR_BREAK(jumpto < 0 || jumpto > _code_size); ip = jumpto; - continue; + DISPATCH_OPCODE; } GET_VARIANT_PTR(iterator, 4); @@ -1050,13 +1129,13 @@ Variant GDFunction::call(GDInstance *p_instance, const Variant **p_args, int p_a #ifdef DEBUG_ENABLED if (!valid) { err_text = "Unable to obtain iterator object of type " + Variant::get_type_name(container->get_type()) + "'."; - break; + OPCODE_BREAK; } #endif ip += 5; //skip regular iterate which is always next - continue; + DISPATCH_OPCODE; } - case OPCODE_ITERATE: { + OPCODE(OPCODE_ITERATE) { CHECK_SPACE(4); @@ -1068,13 +1147,13 @@ Variant GDFunction::call(GDInstance *p_instance, const Variant **p_args, int p_a #ifdef DEBUG_ENABLED if (!valid) { err_text = "Unable to iterate on object of type " + Variant::get_type_name(container->get_type()) + "' (type changed since first iteration?)."; - break; + OPCODE_BREAK; } #endif int jumpto = _code_ptr[ip + 3]; GD_ERR_BREAK(jumpto < 0 || jumpto > _code_size); ip = jumpto; - continue; + DISPATCH_OPCODE; } GET_VARIANT_PTR(iterator, 4); @@ -1082,13 +1161,13 @@ Variant GDFunction::call(GDInstance *p_instance, const Variant **p_args, int p_a #ifdef DEBUG_ENABLED if (!valid) { err_text = "Unable to obtain iterator object of type " + Variant::get_type_name(container->get_type()) + "' (but was obtained on first iteration?)."; - break; + OPCODE_BREAK; } #endif ip += 5; //loop again - continue; + DISPATCH_OPCODE; } - case OPCODE_ASSERT: { + OPCODE(OPCODE_ASSERT) { CHECK_SPACE(2); GET_VARIANT_PTR(test, 1); @@ -1098,23 +1177,23 @@ Variant GDFunction::call(GDInstance *p_instance, const Variant **p_args, int p_a if (!result) { err_text = "Assertion failed."; - break; + OPCODE_BREAK; } #endif ip += 2; - continue; + DISPATCH_OPCODE; } - case OPCODE_BREAKPOINT: { + OPCODE(OPCODE_BREAKPOINT) { #ifdef DEBUG_ENABLED if (ScriptDebugger::get_singleton()) { GDScriptLanguage::get_singleton()->debug_break("Breakpoint Statement", true); } #endif ip += 1; - continue; + DISPATCH_OPCODE; } - case OPCODE_LINE: { + OPCODE(OPCODE_LINE) { CHECK_SPACE(2); line = _code_ptr[ip + 1]; @@ -1141,23 +1220,26 @@ Variant GDFunction::call(GDInstance *p_instance, const Variant **p_args, int p_a ScriptDebugger::get_singleton()->line_poll(); } - continue; + DISPATCH_OPCODE; } - case OPCODE_END: { + OPCODE(OPCODE_END) { exit_ok = true; - break; + OPCODE_BREAK; } +#if 0 default: { err_text = "Illegal opcode " + itos(_code_ptr[ip]) + " at address " + itos(ip); - break; + OPCODE_BREAK; } +#endif } + OPCODES_END #ifdef DEBUG_ENABLED if (exit_ok) - break; + OPCODE_OUT; //error // function, file, line, error, explanation String err_file; @@ -1182,9 +1264,10 @@ Variant GDFunction::call(GDInstance *p_instance, const Variant **p_args, int p_a } #endif - break; + OPCODE_OUT; } + OPCODES_OUT #ifdef DEBUG_ENABLED if (GDScriptLanguage::get_singleton()->profiling) { uint64_t time_taken = OS::get_singleton()->get_ticks_usec() - function_start_time; @@ -1495,7 +1578,7 @@ void GDFunctionState::_bind_methods() { ClassDB::bind_method(D_METHOD("is_valid", "extended_check"), &GDFunctionState::is_valid, DEFVAL(false)); ClassDB::bind_vararg_method(METHOD_FLAGS_DEFAULT, "_signal_callback", &GDFunctionState::_signal_callback, MethodInfo("_signal_callback")); - ADD_SIGNAL(MethodInfo("completed", PropertyInfo(Variant::NIL, "result"))); + ADD_SIGNAL(MethodInfo("completed", PropertyInfo(Variant::NIL, "result", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NIL_IS_VARIANT))); } GDFunctionState::GDFunctionState() { diff --git a/modules/gridmap/doc_classes/GridMap.xml b/modules/gridmap/doc_classes/GridMap.xml index 3676570ec1..5b0fe56f25 100644 --- a/modules/gridmap/doc_classes/GridMap.xml +++ b/modules/gridmap/doc_classes/GridMap.xml @@ -1,8 +1,13 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="GridMap" inherits="Spatial" category="Core" version="3.0.alpha.custom_build"> <brief_description> + Node for 3D tile-based maps. </brief_description> <description> + GridMap lets you place meshes on a grid interactively. It works both from the editor and can help you create in-game level editors. + GridMaps use a [MeshLibrary] which contain a list of tiles: meshes with materials plus optional collisions and extra elements. + A GridMap contains a collection of cells. Each grid cell refers to a [MeshLibrary] item. All cells in the map have the same dimensions. + A GridMap is split into a sparse collection of octants for efficient rendering and physics processing. Every octant has the same dimensions and can contain several cells. </description> <tutorials> </tutorials> @@ -13,6 +18,7 @@ <return type="void"> </return> <description> + Clear all cells. </description> </method> <method name="get_cell_item" qualifiers="const"> @@ -25,6 +31,7 @@ <argument index="2" name="z" type="int"> </argument> <description> + The [MeshLibrary] item index located at the grid-based X, Y and Z coordinates. If the cell is empty, [INVALID_CELL_ITEM] will be returned. </description> </method> <method name="get_cell_item_orientation" qualifiers="const"> @@ -37,48 +44,75 @@ <argument index="2" name="z" type="int"> </argument> <description> + The orientation of the cell at the grid-based X, Y and Z coordinates. -1 is retuned if the cell is empty. </description> </method> <method name="get_cell_size" qualifiers="const"> <return type="Vector3"> </return> <description> + The dimensions of the grid's cells. </description> </method> <method name="get_center_x" qualifiers="const"> <return type="bool"> </return> <description> + Returns whether or not grid items are centered on the X axis. </description> </method> <method name="get_center_y" qualifiers="const"> <return type="bool"> </return> <description> + Returns whether or not grid items are centered on the Y axis. </description> </method> <method name="get_center_z" qualifiers="const"> <return type="bool"> </return> <description> + Returns whether or not grid items are centered on the Z axis. </description> </method> <method name="get_meshes"> <return type="Array"> </return> <description> + Array of [Transform] and [Mesh] references corresponding to the non empty cells in the grid. The transforms are specified in world space. </description> </method> <method name="get_octant_size" qualifiers="const"> <return type="int"> </return> <description> + The size of each octant measured in number of cells. This applies to all three axis. </description> </method> <method name="get_theme" qualifiers="const"> <return type="MeshLibrary"> </return> <description> + The assigned [MeshLibrary]. + </description> + </method> + <method name="get_used_cells" qualifiers="const"> + <return type="Array"> + </return> + <description> + Array of [Vector3] with the non empty cell coordinates in the grid map. + </description> + </method> + <method name="map_to_world" qualifiers="const"> + <return type="Vector3"> + </return> + <argument index="0" name="x" type="int"> + </argument> + <argument index="1" name="y" type="int"> + </argument> + <argument index="2" name="z" type="int"> + </argument> + <description> </description> </method> <method name="resource_changed"> @@ -103,6 +137,9 @@ <argument index="4" name="orientation" type="int" default="0"> </argument> <description> + Set the mesh index for the cell referenced by its grid-based X, Y and Z coordinates. + A negative item index will clear the cell. + Optionally, the item's orientation can be passed. </description> </method> <method name="set_cell_size"> @@ -111,6 +148,7 @@ <argument index="0" name="size" type="Vector3"> </argument> <description> + Sets the height, width and depth of the grid's cells. </description> </method> <method name="set_center_x"> @@ -119,6 +157,7 @@ <argument index="0" name="enable" type="bool"> </argument> <description> + Set grid items to be centered on the X axis. By default it is enabled. </description> </method> <method name="set_center_y"> @@ -127,6 +166,7 @@ <argument index="0" name="enable" type="bool"> </argument> <description> + Set grid items to be centered on the Y axis. By default it is enabled. </description> </method> <method name="set_center_z"> @@ -135,6 +175,7 @@ <argument index="0" name="enable" type="bool"> </argument> <description> + Set grid items to be centered on the Z axis. By default it is enabled. </description> </method> <method name="set_clip"> @@ -157,6 +198,7 @@ <argument index="0" name="size" type="int"> </argument> <description> + Sets the size for each octant measured in number of cells. This applies to all three axis. </description> </method> <method name="set_theme"> @@ -165,11 +207,21 @@ <argument index="0" name="theme" type="MeshLibrary"> </argument> <description> + Sets the collection of meshes for the map. + </description> + </method> + <method name="world_to_map" qualifiers="const"> + <return type="Vector3"> + </return> + <argument index="0" name="pos" type="Vector3"> + </argument> + <description> </description> </method> </methods> <constants> <constant name="INVALID_CELL_ITEM" value="-1" enum=""> + Invalid cell item that can be used in [method set_cell_item] to clear cells (or represent an empty cell in [method get_cell_item]). </constant> </constants> </class> diff --git a/modules/gridmap/grid_map.cpp b/modules/gridmap/grid_map.cpp index 4f7545a11d..cb14a5ee9c 100644 --- a/modules/gridmap/grid_map.cpp +++ b/modules/gridmap/grid_map.cpp @@ -333,6 +333,23 @@ int GridMap::get_cell_item_orientation(int p_x, int p_y, int p_z) const { return cell_map[key].rot; } +Vector3 GridMap::world_to_map(const Vector3 &p_world_pos) const { + Vector3 map_pos = p_world_pos / cell_size; + map_pos.x = floor(map_pos.x); + map_pos.y = floor(map_pos.y); + map_pos.z = floor(map_pos.z); + return map_pos; +} + +Vector3 GridMap::map_to_world(int p_x, int p_y, int p_z) const { + Vector3 offset = _get_offset(); + Vector3 world_pos( + p_x * cell_size.x + offset.x, + p_y * cell_size.y + offset.y, + p_z * cell_size.z + offset.z); + return world_pos; +} + void GridMap::_octant_transform(const OctantKey &p_key) { ERR_FAIL_COND(!octant_map.has(p_key)); @@ -407,7 +424,7 @@ bool GridMap::_octant_update(const OctantKey &p_key) { //print_line("OCTANT, CELLS: "+itos(ii.cells.size())); Vector3 cellpos = Vector3(E->get().x, E->get().y, E->get().z); - Vector3 ofs(cell_size.x * 0.5 * int(center_x), cell_size.y * 0.5 * int(center_y), cell_size.z * 0.5 * int(center_z)); + Vector3 ofs = _get_offset(); Transform xform; @@ -754,6 +771,9 @@ void GridMap::_bind_methods() { ClassDB::bind_method(D_METHOD("get_cell_item", "x", "y", "z"), &GridMap::get_cell_item); ClassDB::bind_method(D_METHOD("get_cell_item_orientation", "x", "y", "z"), &GridMap::get_cell_item_orientation); + ClassDB::bind_method(D_METHOD("world_to_map", "pos"), &GridMap::world_to_map); + ClassDB::bind_method(D_METHOD("map_to_world", "x", "y", "z"), &GridMap::map_to_world); + //ClassDB::bind_method(D_METHOD("_recreate_octants"),&GridMap::_recreate_octants); ClassDB::bind_method(D_METHOD("_update_octants_callback"), &GridMap::_update_octants_callback); ClassDB::bind_method(D_METHOD("resource_changed", "resource"), &GridMap::resource_changed); @@ -769,6 +789,8 @@ void GridMap::_bind_methods() { ClassDB::bind_method(D_METHOD("clear"), &GridMap::clear); + ClassDB::bind_method(D_METHOD("get_used_cells"), &GridMap::get_used_cells); + ClassDB::bind_method(D_METHOD("get_meshes"), &GridMap::get_meshes); BIND_CONSTANT(INVALID_CELL_ITEM); @@ -799,7 +821,7 @@ void GridMap::set_clip(bool p_enabled, bool p_clip_above, int p_floor, Vector3:: void GridMap::set_cell_scale(float p_scale) { cell_scale = p_scale; - _queue_octants_dirty(); + _recreate_octant_data(); } float GridMap::get_cell_scale() const { @@ -807,12 +829,25 @@ float GridMap::get_cell_scale() const { return cell_scale; } +Array GridMap::get_used_cells() const { + + Array a; + a.resize(cell_map.size()); + int i = 0; + for (Map<IndexKey, Cell>::Element *E = cell_map.front(); E; E = E->next()) { + Vector3 p(E->key().x, E->key().y, E->key().z); + a[i++] = p; + } + + return a; +} + Array GridMap::get_meshes() { if (theme.is_null()) return Array(); - Vector3 ofs(cell_size.x * 0.5 * int(center_x), cell_size.y * 0.5 * int(center_y), cell_size.z * 0.5 * int(center_z)); + Vector3 ofs = _get_offset(); Array meshes; for (Map<IndexKey, Cell>::Element *E = cell_map.front(); E; E = E->next()) { @@ -842,6 +877,13 @@ Array GridMap::get_meshes() { return meshes; } +Vector3 GridMap::_get_offset() const { + return Vector3( + cell_size.x * 0.5 * int(center_x), + cell_size.y * 0.5 * int(center_y), + cell_size.z * 0.5 * int(center_z)); +} + GridMap::GridMap() { cell_size = Vector3(2, 2, 2); diff --git a/modules/gridmap/grid_map.h b/modules/gridmap/grid_map.h index eb1b215696..5bfdf1dac3 100644 --- a/modules/gridmap/grid_map.h +++ b/modules/gridmap/grid_map.h @@ -184,6 +184,8 @@ class GridMap : public Spatial { void _clear_internal(); + Vector3 _get_offset() const; + protected: bool _set(const StringName &p_name, const Variant &p_value); bool _get(const StringName &p_name, Variant &r_ret) const; @@ -218,11 +220,16 @@ public: int get_cell_item(int p_x, int p_y, int p_z) const; int get_cell_item_orientation(int p_x, int p_y, int p_z) const; + Vector3 world_to_map(const Vector3 &p_pos) const; + Vector3 map_to_world(int p_x, int p_y, int p_z) const; + void set_clip(bool p_enabled, bool p_clip_above = true, int p_floor = 0, Vector3::Axis p_axis = Vector3::AXIS_X); void set_cell_scale(float p_scale); float get_cell_scale() const; + Array get_used_cells() const; + Array get_meshes(); void clear(); diff --git a/modules/hdr/image_loader_hdr.cpp b/modules/hdr/image_loader_hdr.cpp index 92d88207b3..08ac624504 100644 --- a/modules/hdr/image_loader_hdr.cpp +++ b/modules/hdr/image_loader_hdr.cpp @@ -38,7 +38,6 @@ Error ImageLoaderHDR::load_image(Ref<Image> p_image, FileAccess *f, bool p_force String header = f->get_token(); - print_line("HEADER: " + header); ERR_FAIL_COND_V(header != "#?RADIANCE" && header != "#?RGBE", ERR_FILE_UNRECOGNIZED); while (true) { @@ -64,8 +63,6 @@ Error ImageLoaderHDR::load_image(Ref<Image> p_image, FileAccess *f, bool p_force int width = f->get_line().to_int(); - print_line("HDR w: " + itos(width) + " h:" + itos(height)); - PoolVector<uint8_t> imgdata; imgdata.resize(height * width * sizeof(uint32_t)); @@ -102,7 +99,6 @@ Error ImageLoaderHDR::load_image(Ref<Image> p_image, FileAccess *f, bool p_force len <<= 8; len |= f->get_8(); - print_line("line: " + itos(len)); if (len != width) { ERR_EXPLAIN("invalid decoded scanline length, corrupt HDR"); ERR_FAIL_V(ERR_FILE_CORRUPT); diff --git a/modules/mobile_vr/SCsub b/modules/mobile_vr/SCsub new file mode 100644 index 0000000000..b4e2edcca1 --- /dev/null +++ b/modules/mobile_vr/SCsub @@ -0,0 +1,13 @@ +#!/usr/bin/env python + +import os +import methods + +Import('env') +Import('env_modules') + +env_mobile_vr = env_modules.Clone() + +env_mobile_vr.add_source_files(env.modules_sources, '*.cpp') + +SConscript("shaders/SCsub") diff --git a/modules/mobile_vr/config.py b/modules/mobile_vr/config.py new file mode 100644 index 0000000000..cf96c66125 --- /dev/null +++ b/modules/mobile_vr/config.py @@ -0,0 +1,12 @@ +def can_build(platform): + # should probably change this to only be true on iOS and Android + return True + +def configure(env): + pass + +def get_doc_classes(): + return ["MobileVRInterface"] + +def get_doc_path(): + return "doc_classes" diff --git a/modules/mobile_vr/doc_classes/MobileVRInterface.xml b/modules/mobile_vr/doc_classes/MobileVRInterface.xml new file mode 100644 index 0000000000..c945a99a9a --- /dev/null +++ b/modules/mobile_vr/doc_classes/MobileVRInterface.xml @@ -0,0 +1,134 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<class name="MobileVRInterface" inherits="ARVRInterface" category="Core" version="3.0.alpha.custom_build"> + <brief_description> + Generic mobile VR implementation + </brief_description> + <description> + This is a generic mobile VR implementation where you need to provide details about the phone and HMD used. It does not rely on any existing framework. This is the most basic interface we have. For the best effect you do need a mobile phone with a gyroscope and accelerometer. + Note that even though there is no positional tracking the camera will assume the headset is at a height of 1.85 meters. + </description> + <tutorials> + </tutorials> + <demos> + </demos> + <methods> + <method name="get_display_to_lens" qualifiers="const"> + <return type="float"> + </return> + <description> + Returns the distance between the display and the lens. + </description> + </method> + <method name="get_display_width" qualifiers="const"> + <return type="float"> + </return> + <description> + Return the width of the LCD screen of the device. + </description> + </method> + <method name="get_iod" qualifiers="const"> + <return type="float"> + </return> + <description> + Returns the interocular distance. + </description> + </method> + <method name="get_k1" qualifiers="const"> + <return type="float"> + </return> + <description> + Returns the k1 lens constant. + </description> + </method> + <method name="get_k2" qualifiers="const"> + <return type="float"> + </return> + <description> + Retuns the k2 lens constant + </description> + </method> + <method name="get_oversample" qualifiers="const"> + <return type="float"> + </return> + <description> + Returns the oversampling setting. + </description> + </method> + <method name="set_display_to_lens"> + <return type="void"> + </return> + <argument index="0" name="display_to_lens" type="float"> + </argument> + <description> + Sets the distance between display and the lens. + </description> + </method> + <method name="set_display_width"> + <return type="void"> + </return> + <argument index="0" name="display_width" type="float"> + </argument> + <description> + Sets the width of the LCD screen of the device. + </description> + </method> + <method name="set_iod"> + <return type="void"> + </return> + <argument index="0" name="iod" type="float"> + </argument> + <description> + Sets the interocular distance. + </description> + </method> + <method name="set_k1"> + <return type="void"> + </return> + <argument index="0" name="k" type="float"> + </argument> + <description> + Sets the k1 lens constant. + </description> + </method> + <method name="set_k2"> + <return type="void"> + </return> + <argument index="0" name="k" type="float"> + </argument> + <description> + Sets the k2 lens constant. + </description> + </method> + <method name="set_oversample"> + <return type="void"> + </return> + <argument index="0" name="oversample" type="float"> + </argument> + <description> + Sets the oversampling setting. + </description> + </method> + </methods> + <members> + <member name="display_to_lens" type="float" setter="set_display_to_lens" getter="get_display_to_lens"> + The distance between the display and the lenses inside of the device in centimeters. + </member> + <member name="display_width" type="float" setter="set_display_width" getter="get_display_width"> + The width of the display in centimeters. + </member> + <member name="iod" type="float" setter="set_iod" getter="get_iod"> + The interocular distance, also known as the interpupillary distance. The distance between the pupils of the left and right eye. + </member> + <member name="k1" type="float" setter="set_k1" getter="get_k1"> + The k1 lens factor is one of the two constants that define the strength of the lens used and directly influences the lens distortion effect. + </member> + <member name="k2" type="float" setter="set_k2" getter="get_k2"> + The k2 lens factor, see k1. + </member> + <member name="oversample" type="float" setter="set_oversample" getter="get_oversample"> + The oversample setting. Because of the lens distortion we have to render our buffers at a higher resolution then the screen can natively handle. A value between 1.5 and 2.0 often provides good results but at the cost of performance. + </member> + </members> + <constants> + </constants> +</class> diff --git a/modules/mobile_vr/mobile_interface.cpp b/modules/mobile_vr/mobile_interface.cpp new file mode 100644 index 0000000000..eb87bb2cf0 --- /dev/null +++ b/modules/mobile_vr/mobile_interface.cpp @@ -0,0 +1,504 @@ +/*************************************************************************/ +/* mobile_interface.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* http://www.godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 "mobile_interface.h" +#include "core/os/input.h" +#include "core/os/os.h" +#include "servers/visual/visual_server_global.h" + +StringName MobileVRInterface::get_name() const { + return "Native mobile"; +}; + +int MobileVRInterface::get_capabilities() const { + return ARVRInterface::ARVR_STEREO; +}; + +Vector3 MobileVRInterface::scale_magneto(const Vector3 &p_magnetometer) { + // Our magnetometer doesn't give us nice clean data. + // Well it may on Mac OS X because we're getting a calibrated value in the current implementation but Android we're getting raw data. + // This is a fairly simple adjustment we can do to correct for the magnetometer data being elliptical + + Vector3 mag_raw = p_magnetometer; + Vector3 mag_scaled = p_magnetometer; + + // update our variables every x frames + if (mag_count > 20) { + mag_current_min = mag_next_min; + mag_current_max = mag_next_max; + mag_count = 0; + } else { + mag_count++; + }; + + // adjust our min and max + if (mag_raw.x > mag_next_max.x) mag_next_max.x = mag_raw.x; + if (mag_raw.y > mag_next_max.y) mag_next_max.y = mag_raw.y; + if (mag_raw.z > mag_next_max.z) mag_next_max.z = mag_raw.z; + + if (mag_raw.x < mag_next_min.x) mag_next_min.x = mag_raw.x; + if (mag_raw.y < mag_next_min.y) mag_next_min.y = mag_raw.y; + if (mag_raw.z < mag_next_min.z) mag_next_min.z = mag_raw.z; + + // scale our x, y and z + if (!(mag_current_max.x - mag_current_min.x)) { + mag_raw.x -= (mag_current_min.x + mag_current_max.x) / 2.0; + mag_scaled.x = (mag_raw.x - mag_current_min.x) / ((mag_current_max.x - mag_current_min.x) * 2.0 - 1.0); + }; + + if (!(mag_current_max.y - mag_current_min.y)) { + mag_raw.y -= (mag_current_min.y + mag_current_max.y) / 2.0; + mag_scaled.y = (mag_raw.y - mag_current_min.y) / ((mag_current_max.y - mag_current_min.y) * 2.0 - 1.0); + }; + + if (!(mag_current_max.z - mag_current_min.z)) { + mag_raw.z -= (mag_current_min.z + mag_current_max.z) / 2.0; + mag_scaled.z = (mag_raw.z - mag_current_min.z) / ((mag_current_max.z - mag_current_min.z) * 2.0 - 1.0); + }; + + return mag_scaled; +}; + +Basis MobileVRInterface::combine_acc_mag(const Vector3 &p_grav, const Vector3 &p_magneto) { + // yup, stock standard cross product solution... + Vector3 up = -p_grav.normalized(); + + Vector3 magneto_east = up.cross(p_magneto.normalized()); // or is this west?, but should be horizon aligned now + magneto_east.normalize(); + + Vector3 magneto = up.cross(magneto_east); // and now we have a horizon aligned north + magneto.normalize(); + + // We use our gravity and magnetometer vectors to construct our matrix + Basis acc_mag_m3; + acc_mag_m3.elements[0] = -magneto_east; + acc_mag_m3.elements[1] = up; + acc_mag_m3.elements[2] = magneto; + + return acc_mag_m3; +}; + +void MobileVRInterface::set_position_from_sensors() { + _THREAD_SAFE_METHOD_ + + // this is a helper function that attempts to adjust our transform using our 9dof sensors + // 9dof is a misleading marketing term coming from 3 accelerometer axis + 3 gyro axis + 3 magnetometer axis = 9 axis + // but in reality this only offers 3 dof (yaw, pitch, roll) orientation + + uint64_t ticks = OS::get_singleton()->get_ticks_usec(); + uint64_t ticks_elapsed = ticks - last_ticks; + float delta_time = (double)ticks_elapsed / 1000000.0; + + // few things we need + Input *input = Input::get_singleton(); + Vector3 down(0.0, -1.0, 0.0); // Down is Y negative + Vector3 north(0.0, 0.0, 1.0); // North is Z positive + + // make copies of our inputs + Vector3 acc = input->get_accelerometer(); + Vector3 gyro = input->get_gyroscope(); + Vector3 grav = input->get_gravity(); + Vector3 magneto = scale_magneto(input->get_magnetometer()); // this may be overkill on iOS because we're already getting a calibrated magnetometer reading + + if (sensor_first) { + sensor_first = false; + } else { + acc = scrub(acc, last_accerometer_data, 2, 0.2); + magneto = scrub(magneto, last_magnetometer_data, 3, 0.3); + }; + + last_accerometer_data = acc; + last_magnetometer_data = magneto; + + if (grav.length() < 0.1) { + // not ideal but use our accelerometer, this will contain shakey shakey user behaviour + // maybe look into some math but I'm guessing that if this isn't available, its because we lack the gyro sensor to actually work out + // what a stable gravity vector is + grav = acc; + if (grav.length() > 0.1) { + has_gyro = true; + }; + } else { + has_gyro = true; + }; + + bool has_magneto = magneto.length() > 0.1; + bool has_grav = grav.length() > 0.1; + +#ifdef ANDROID_ENABLED + ///@TODO needs testing, i don't have a gyro, potentially can be removed depending on what comes out of issue #8101 + // On Android x and z axis seem inverted + gyro.x = -gyro.x; + gyro.z = -gyro.z; + grav.x = -grav.x; + grav.z = -grav.z; + magneto.x = -magneto.x; + magneto.z = -magneto.z; +#endif + + if (has_gyro) { + // start with applying our gyro (do NOT smooth our gyro!) + Basis rotate; + rotate.rotate(orientation.get_axis(0), gyro.x * delta_time); + rotate.rotate(orientation.get_axis(1), gyro.y * delta_time); + rotate.rotate(orientation.get_axis(2), gyro.z * delta_time); + orientation = rotate * orientation; + + tracking_state = ARVRInterface::ARVR_NORMAL_TRACKING; + }; + + ///@TODO improve this, the magnetometer is very fidgity sometimes flipping the axis for no apparent reason (probably a bug on my part) + // if you have a gyro + accelerometer that combo tends to be better then combining all three but without a gyro you need the magnetometer.. + if (has_magneto && has_grav && !has_gyro) { + // convert to quaternions, easier to smooth those out + Quat transform_quat(orientation); + Quat acc_mag_quat(combine_acc_mag(grav, magneto)); + transform_quat = transform_quat.slerp(acc_mag_quat, 0.1); + orientation = Basis(transform_quat); + + tracking_state = ARVRInterface::ARVR_NORMAL_TRACKING; + } else if (has_grav) { + // use gravity vector to make sure down is down... + // transform gravity into our world space + grav.normalize(); + Vector3 grav_adj = orientation.xform(grav); + float dot = grav_adj.dot(down); + if ((dot > -1.0) && (dot < 1.0)) { + // axis around which we have this rotation + Vector3 axis = grav_adj.cross(down); + axis.normalize(); + + Basis drift_compensation(axis, acos(dot) * delta_time * 10); + orientation = drift_compensation * orientation; + }; + }; + + // JIC + orientation.orthonormalize(); + + last_ticks = ticks; +}; + +void MobileVRInterface::_bind_methods() { + ClassDB::bind_method(D_METHOD("set_iod", "iod"), &MobileVRInterface::set_iod); + ClassDB::bind_method(D_METHOD("get_iod"), &MobileVRInterface::get_iod); + + ClassDB::bind_method(D_METHOD("set_display_width", "display_width"), &MobileVRInterface::set_display_width); + ClassDB::bind_method(D_METHOD("get_display_width"), &MobileVRInterface::get_display_width); + + ClassDB::bind_method(D_METHOD("set_display_to_lens", "display_to_lens"), &MobileVRInterface::set_display_to_lens); + ClassDB::bind_method(D_METHOD("get_display_to_lens"), &MobileVRInterface::get_display_to_lens); + + ClassDB::bind_method(D_METHOD("set_oversample", "oversample"), &MobileVRInterface::set_oversample); + ClassDB::bind_method(D_METHOD("get_oversample"), &MobileVRInterface::get_oversample); + + ClassDB::bind_method(D_METHOD("set_k1", "k"), &MobileVRInterface::set_k1); + ClassDB::bind_method(D_METHOD("get_k1"), &MobileVRInterface::get_k1); + + ClassDB::bind_method(D_METHOD("set_k2", "k"), &MobileVRInterface::set_k2); + ClassDB::bind_method(D_METHOD("get_k2"), &MobileVRInterface::get_k2); + + ADD_PROPERTY(PropertyInfo(Variant::REAL, "iod", PROPERTY_HINT_RANGE, "4.0,10.0,0.1"), "set_iod", "get_iod"); + ADD_PROPERTY(PropertyInfo(Variant::REAL, "display_width", PROPERTY_HINT_RANGE, "5.0,25.0,0.1"), "set_display_width", "get_display_width"); + ADD_PROPERTY(PropertyInfo(Variant::REAL, "display_to_lens", PROPERTY_HINT_RANGE, "5.0,25.0,0.1"), "set_display_to_lens", "get_display_to_lens"); + ADD_PROPERTY(PropertyInfo(Variant::REAL, "oversample", PROPERTY_HINT_RANGE, "1.0,2.0,0.1"), "set_oversample", "get_oversample"); + ADD_PROPERTY(PropertyInfo(Variant::REAL, "k1", PROPERTY_HINT_RANGE, "0.1,10.0,0.0001"), "set_k1", "get_k1"); + ADD_PROPERTY(PropertyInfo(Variant::REAL, "k2", PROPERTY_HINT_RANGE, "0.1,10.0,0.0001"), "set_k2", "get_k2"); +} + +void MobileVRInterface::set_iod(const real_t p_iod) { + intraocular_dist = p_iod; +}; + +real_t MobileVRInterface::get_iod() const { + return intraocular_dist; +}; + +void MobileVRInterface::set_display_width(const real_t p_display_width) { + display_width = p_display_width; +}; + +real_t MobileVRInterface::get_display_width() const { + return display_width; +}; + +void MobileVRInterface::set_display_to_lens(const real_t p_display_to_lens) { + display_to_lens = p_display_to_lens; +}; + +real_t MobileVRInterface::get_display_to_lens() const { + return display_to_lens; +}; + +void MobileVRInterface::set_oversample(const real_t p_oversample) { + oversample = p_oversample; +}; + +real_t MobileVRInterface::get_oversample() const { + return oversample; +}; + +void MobileVRInterface::set_k1(const real_t p_k1) { + k1 = p_k1; +}; + +real_t MobileVRInterface::get_k1() const { + return k1; +}; + +void MobileVRInterface::set_k2(const real_t p_k2) { + k2 = p_k2; +}; + +real_t MobileVRInterface::get_k2() const { + return k2; +}; + +bool MobileVRInterface::is_stereo() { + // needs stereo... + return true; +}; + +bool MobileVRInterface::is_initialized() { + return (initialized); +}; + +bool MobileVRInterface::initialize() { + ARVRServer *arvr_server = ARVRServer::get_singleton(); + ERR_FAIL_NULL_V(arvr_server, false); + + if (!initialized) { + // reset our sensor data and orientation + mag_count = 0; + has_gyro = false; + sensor_first = true; + mag_next_min = Vector3(10000, 10000, 10000); + mag_next_max = Vector3(-10000, -10000, -10000); + mag_current_min = Vector3(0, 0, 0); + mag_current_max = Vector3(0, 0, 0); + + // reset our orientation + orientation = Basis(); + + // make this our primary interface + arvr_server->set_primary_interface(this); + + last_ticks = OS::get_singleton()->get_ticks_usec(); + ; + initialized = true; + }; + + return true; +}; + +void MobileVRInterface::uninitialize() { + if (initialized) { + ARVRServer *arvr_server = ARVRServer::get_singleton(); + if (arvr_server != NULL) { + // no longer our primary interface + arvr_server->clear_primary_interface_if(this); + } + + initialized = false; + }; +}; + +Size2 MobileVRInterface::get_recommended_render_targetsize() { + _THREAD_SAFE_METHOD_ + + // we use half our window size + Size2 target_size = OS::get_singleton()->get_window_size(); + target_size.x *= 0.5 * oversample; + target_size.y *= oversample; + + return target_size; +}; + +Transform MobileVRInterface::get_transform_for_eye(ARVRInterface::Eyes p_eye, const Transform &p_cam_transform) { + _THREAD_SAFE_METHOD_ + + Transform transform_for_eye; + + ARVRServer *arvr_server = ARVRServer::get_singleton(); + ERR_FAIL_NULL_V(arvr_server, transform_for_eye); + + if (initialized) { + float world_scale = arvr_server->get_world_scale(); + + // we don't need to check for the existance of our HMD, doesn't effect our values... + // note * 0.01 to convert cm to m and * 0.5 as we're moving half in each direction... + if (p_eye == ARVRInterface::EYE_LEFT) { + transform_for_eye.origin.x = -(intraocular_dist * 0.01 * 0.5 * world_scale); + } else if (p_eye == ARVRInterface::EYE_RIGHT) { + transform_for_eye.origin.x = intraocular_dist * 0.01 * 0.5 * world_scale; + } else { + // for mono we don't reposition, we want our center position. + }; + + // just scale our origin point of our transform + Transform hmd_transform; + hmd_transform.basis = orientation; + hmd_transform.origin = Vector3(0.0, eye_height * world_scale, 0.0); + + transform_for_eye = p_cam_transform * (arvr_server->get_reference_frame()) * hmd_transform * transform_for_eye; + } else { + // huh? well just return what we got.... + transform_for_eye = p_cam_transform; + }; + + return transform_for_eye; +}; + +CameraMatrix MobileVRInterface::get_projection_for_eye(ARVRInterface::Eyes p_eye, real_t p_aspect, real_t p_z_near, real_t p_z_far) { + _THREAD_SAFE_METHOD_ + + CameraMatrix eye; + + if (p_eye == ARVRInterface::EYE_MONO) { + ///@TODO for now hardcode some of this, what is really needed here is that this needs to be in sync with the real cameras properties + // which probably means implementing a specific class for iOS and Android. For now this is purely here as an example. + // Note also that if you use a normal viewport with AR/VR turned off you can still use the tracker output of this interface + // to position a stock standard Godot camera and have control over this. + // This will make more sense when we implement ARkit on iOS (probably a separate interface). + eye.set_perspective(60.0, p_aspect, p_z_near, p_z_far, false); + } else { + eye.set_for_hmd(p_eye == ARVRInterface::EYE_LEFT ? 1 : 2, p_aspect, intraocular_dist, display_width, display_to_lens, oversample, p_z_near, p_z_far); + }; + + return eye; +}; + +void MobileVRInterface::commit_for_eye(ARVRInterface::Eyes p_eye, RID p_render_target, const Rect2 &p_screen_rect) { + _THREAD_SAFE_METHOD_ + + // We must have a valid render target + ERR_FAIL_COND(!p_render_target.is_valid()); + + // Because we are rendering to our device we must use our main viewport! + ERR_FAIL_COND(p_screen_rect == Rect2()); + + float offset_x = 0.0; + float aspect_ratio = 0.5 * p_screen_rect.size.x / p_screen_rect.size.y; + Vector2 eye_center; + + if (p_eye == ARVRInterface::EYE_LEFT) { + offset_x = -1.0; + eye_center.x = ((-intraocular_dist / 2.0) + (display_width / 4.0)) / (display_width / 2.0); + } else if (p_eye == ARVRInterface::EYE_RIGHT) { + eye_center.x = ((intraocular_dist / 2.0) - (display_width / 4.0)) / (display_width / 2.0); + } + + // unset our render target so we are outputting to our main screen by making RasterizerStorageGLES3::system_fbo our current FBO + VSG::rasterizer->set_current_render_target(RID()); + + // now output to screen + // VSG::rasterizer->blit_render_target_to_screen(p_render_target, screen_rect, 0); + + // get our render target + RID eye_texture = VSG::storage->render_target_get_texture(p_render_target); + uint32_t texid = VS::get_singleton()->texture_get_texid(eye_texture); + glActiveTexture(GL_TEXTURE0); + glBindTexture(GL_TEXTURE_2D, texid); + + lens_shader.bind(); + lens_shader.set_uniform(LensDistortedShaderGLES3::OFFSET_X, offset_x); + lens_shader.set_uniform(LensDistortedShaderGLES3::K1, k1); + lens_shader.set_uniform(LensDistortedShaderGLES3::K2, k2); + lens_shader.set_uniform(LensDistortedShaderGLES3::EYE_CENTER, eye_center); + lens_shader.set_uniform(LensDistortedShaderGLES3::UPSCALE, oversample); + lens_shader.set_uniform(LensDistortedShaderGLES3::ASPECT_RATIO, aspect_ratio); + + glBindVertexArray(half_screen_array); + glDrawArrays(GL_TRIANGLE_FAN, 0, 4); + glBindVertexArray(0); +}; + +void MobileVRInterface::process() { + _THREAD_SAFE_METHOD_ + + if (initialized) { + set_position_from_sensors(); + }; +}; + +MobileVRInterface::MobileVRInterface() { + initialized = false; + + // Just set some defaults for these. At some point we need to look at adding a lookup table for common device + headset combos and/or support reading cardboard QR codes + eye_height = 1.85; + intraocular_dist = 6.0; + display_width = 14.5; + display_to_lens = 4.0; + oversample = 1.5; + k1 = 0.215; + k2 = 0.215; + last_ticks = 0; + + // create our shader stuff + lens_shader.init(); + + { + glGenBuffers(1, &half_screen_quad); + glBindBuffer(GL_ARRAY_BUFFER, half_screen_quad); + { + const float qv[16] = { + 0, -1, + -1, -1, + 0, 1, + -1, 1, + 1, 1, + 1, 1, + 1, -1, + 1, -1, + }; + + glBufferData(GL_ARRAY_BUFFER, sizeof(float) * 16, qv, GL_STATIC_DRAW); + } + + glBindBuffer(GL_ARRAY_BUFFER, 0); //unbind + + glGenVertexArrays(1, &half_screen_array); + glBindVertexArray(half_screen_array); + glBindBuffer(GL_ARRAY_BUFFER, half_screen_quad); + glVertexAttribPointer(VS::ARRAY_VERTEX, 2, GL_FLOAT, GL_FALSE, sizeof(float) * 4, 0); + glEnableVertexAttribArray(0); + glVertexAttribPointer(VS::ARRAY_TEX_UV, 2, GL_FLOAT, GL_FALSE, sizeof(float) * 4, ((uint8_t *)NULL) + 8); + glEnableVertexAttribArray(4); + glBindVertexArray(0); + glBindBuffer(GL_ARRAY_BUFFER, 0); //unbind + } +}; + +MobileVRInterface::~MobileVRInterface() { + // and make sure we cleanup if we haven't already + if (is_initialized()) { + uninitialize(); + }; +}; diff --git a/modules/mobile_vr/mobile_interface.h b/modules/mobile_vr/mobile_interface.h new file mode 100644 index 0000000000..747377ae46 --- /dev/null +++ b/modules/mobile_vr/mobile_interface.h @@ -0,0 +1,152 @@ +/*************************************************************************/ +/* mobile_interface.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* http://www.godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 MOBILE_VR_INTERFACE_H +#define MOBILE_VR_INTERFACE_H + +#include "servers/arvr/arvr_interface.h" +#include "servers/arvr/arvr_positional_tracker.h" + +#include "shaders/lens_distorted.glsl.gen.h" + +/** + @author Bastiaan Olij <mux213@gmail.com> + + The mobile interface is a native VR interface that can be used on Android and iOS phones. + It contains a basic implementation supporting 3DOF tracking if a gyroscope and accelerometer are + present and sets up the proper projection matrices based on the values provided. + + We're planning to eventually do separate interfaces towards mobile SDKs that have far more capabilities and + do not rely on the user providing most of these settings (though enhancing this with auto detection features + based on the device we're running on would be cool). I'm mostly adding this as an example or base plate for + more advanced interfaces. +*/ + +class MobileVRInterface : public ARVRInterface { + GDCLASS(MobileVRInterface, ARVRInterface); + +private: + bool initialized; + Basis orientation; + float eye_height; + uint64_t last_ticks; + + LensDistortedShaderGLES3 lens_shader; + GLuint half_screen_quad; + GLuint half_screen_array; + + real_t intraocular_dist; + real_t display_width; + real_t display_to_lens; + real_t oversample; + + //@TODO not yet used, these are needed in our distortion shader... + real_t k1; + real_t k2; + + /* + logic for processing our sensor data, this was originally in our positional tracker logic but I think + that doesn't make sense in hindsight. It only makes marginally more sense to park it here for now, + this probably deserves an object of its own + */ + Vector3 scale_magneto(const Vector3 &p_magnetometer); + Basis combine_acc_mag(const Vector3 &p_grav, const Vector3 &p_magneto); + + int mag_count; + bool has_gyro; + bool sensor_first; + Vector3 last_accerometer_data; + Vector3 last_magnetometer_data; + Vector3 mag_current_min; + Vector3 mag_current_max; + Vector3 mag_next_min; + Vector3 mag_next_max; + + ///@TODO a few support functions for trackers, most are math related and should likely be moved elsewhere + float floor_decimals(float p_value, float p_decimals) { + float power_of_10 = pow(10.0f, p_decimals); + return floor(p_value * power_of_10) / power_of_10; + }; + + Vector3 floor_decimals(const Vector3 &p_vector, float p_decimals) { + return Vector3(floor_decimals(p_vector.x, p_decimals), floor_decimals(p_vector.y, p_decimals), floor_decimals(p_vector.z, p_decimals)); + }; + + Vector3 low_pass(const Vector3 &p_vector, const Vector3 &p_last_vector, float p_factor) { + return p_vector + (p_factor * (p_last_vector - p_vector)); + }; + + Vector3 scrub(const Vector3 &p_vector, const Vector3 &p_last_vector, float p_decimals, float p_factor) { + return low_pass(floor_decimals(p_vector, p_decimals), p_last_vector, p_factor); + }; + + void set_position_from_sensors(); + +protected: + static void _bind_methods(); + +public: + void set_iod(const real_t p_iod); + real_t get_iod() const; + + void set_display_width(const real_t p_display_width); + real_t get_display_width() const; + + void set_display_to_lens(const real_t p_display_to_lens); + real_t get_display_to_lens() const; + + void set_oversample(const real_t p_oversample); + real_t get_oversample() const; + + void set_k1(const real_t p_k1); + real_t get_k1() const; + + void set_k2(const real_t p_k2); + real_t get_k2() const; + + virtual StringName get_name() const; + virtual int get_capabilities() const; + + virtual bool is_initialized(); + virtual bool initialize(); + virtual void uninitialize(); + + virtual Size2 get_recommended_render_targetsize(); + virtual bool is_stereo(); + virtual Transform get_transform_for_eye(ARVRInterface::Eyes p_eye, const Transform &p_cam_transform); + virtual CameraMatrix get_projection_for_eye(ARVRInterface::Eyes p_eye, real_t p_aspect, real_t p_z_near, real_t p_z_far); + virtual void commit_for_eye(ARVRInterface::Eyes p_eye, RID p_render_target, const Rect2 &p_screen_rect); + + virtual void process(); + + MobileVRInterface(); + ~MobileVRInterface(); +}; + +#endif // MOBILE_VR_INTERFACE_H diff --git a/modules/mobile_vr/register_types.cpp b/modules/mobile_vr/register_types.cpp new file mode 100644 index 0000000000..f742ecbf00 --- /dev/null +++ b/modules/mobile_vr/register_types.cpp @@ -0,0 +1,43 @@ +/*************************************************************************/ +/* register_types.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 "mobile_interface.h" + +void register_mobile_vr_types() { + ClassDB::register_class<MobileVRInterface>(); + + Ref<MobileVRInterface> mobile_vr; + mobile_vr.instance(); + ARVRServer::get_singleton()->add_interface(mobile_vr); +} + +void unregister_mobile_vr_types() { +} diff --git a/modules/mobile_vr/register_types.h b/modules/mobile_vr/register_types.h new file mode 100644 index 0000000000..a492fff397 --- /dev/null +++ b/modules/mobile_vr/register_types.h @@ -0,0 +1,31 @@ +/*************************************************************************/ +/* register_types.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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_mobile_vr_types(); +void unregister_mobile_vr_types(); diff --git a/modules/mobile_vr/shaders/SCsub b/modules/mobile_vr/shaders/SCsub new file mode 100644 index 0000000000..cf53c9ebe0 --- /dev/null +++ b/modules/mobile_vr/shaders/SCsub @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +Import('env') + +if 'GLES3_GLSL' in env['BUILDERS']: + env.GLES3_GLSL('lens_distorted.glsl'); + diff --git a/modules/mobile_vr/shaders/lens_distorted.glsl b/modules/mobile_vr/shaders/lens_distorted.glsl new file mode 100644 index 0000000000..5a2975d737 --- /dev/null +++ b/modules/mobile_vr/shaders/lens_distorted.glsl @@ -0,0 +1,59 @@ +[vertex] + +layout(location=0) in highp vec4 vertex_attrib; +layout(location=4) in vec2 uv_in; + +uniform float offset_x; + +out vec2 uv_interp; + +void main() { + + uv_interp = uv_in; + gl_Position = vec4(vertex_attrib.x + offset_x, vertex_attrib.y, 0.0, 1.0); +} + +[fragment] + +uniform sampler2D source; //texunit:0 + +uniform vec2 eye_center; +uniform float k1; +uniform float k2; +uniform float upscale; +uniform float aspect_ratio; + +in vec2 uv_interp; + +layout(location = 0) out vec4 frag_color; + +void main() { + vec2 coords = uv_interp; + vec2 offset = coords - eye_center; + + // take aspect ratio into account + offset.y /= aspect_ratio; + + // distort + vec2 offset_sq = offset * offset; + float radius_sq = offset_sq.x + offset_sq.y; + float radius_s4 = radius_sq * radius_sq; + float distortion_scale = 1.0 + (k1 * radius_sq) + (k2 * radius_s4); + offset *= distortion_scale; + + // reapply aspect ratio + offset.y *= aspect_ratio; + + // add our eye center back in + coords = offset + eye_center; + coords /= upscale; + + // and check our color + if (coords.x < -1.0 || coords.y < -1.0 || coords.x > 1.0 || coords.y > 1.0) { + frag_color = vec4(0.0, 0.0, 0.0, 1.0); + } else { + coords = (coords + vec2(1.0)) / vec2(2.0); + frag_color = textureLod(source, coords, 0.0); + } +} + diff --git a/modules/mono/SCsub b/modules/mono/SCsub new file mode 100644 index 0000000000..caf4fdb3ca --- /dev/null +++ b/modules/mono/SCsub @@ -0,0 +1,121 @@ +#!/usr/bin/env python + +Import('env') + +from compat import byte_to_str + +def make_cs_files_header(src, dst): + with open(dst, 'w') as header: + header.write('/* This is an automatically generated file; DO NOT EDIT! OK THX */\n') + header.write('#ifndef _CS_FILES_DATA_H\n') + header.write('#define _CS_FILES_DATA_H\n\n') + header.write('#include "map.h"\n') + header.write('#include "ustring.h"\n') + inserted_files = '' + import os + for file in os.listdir(src): + if file.endswith('.cs'): + with open(os.path.join(src, file), 'rb') as f: + buf = f.read() + decomp_size = len(buf) + import zlib + buf = zlib.compress(buf) + name = os.path.splitext(file)[0] + header.write('\nstatic const int _cs_' + name + '_compressed_size = ' + str(len(buf)) + ';\n') + header.write('static const int _cs_' + name + '_uncompressed_size = ' + str(decomp_size) + ';\n') + header.write('static const unsigned char _cs_' + name + '_compressed[] = { ') + for i, buf_idx in enumerate(range(len(buf))): + if i > 0: + header.write(', ') + header.write(byte_to_str(buf[buf_idx])) + inserted_files += '\tr_files.insert(\"' + file + '\", ' \ + 'CompressedFile(_cs_' + name + '_compressed_size, ' \ + '_cs_' + name + '_uncompressed_size, ' \ + '_cs_' + name + '_compressed));\n' + header.write(' };\n') + header.write('\nstruct CompressedFile\n' '{\n' + '\tint compressed_size;\n' '\tint uncompressed_size;\n' '\tconst unsigned char* data;\n' + '\n\tCompressedFile(int p_comp_size, int p_uncomp_size, const unsigned char* p_data)\n' + '\t{\n' '\t\tcompressed_size = p_comp_size;\n' '\t\tuncompressed_size = p_uncomp_size;\n' + '\t\tdata = p_data;\n' '\t}\n' '\n\tCompressedFile() {}\n' '};\n' + '\nvoid get_compressed_files(Map<String, CompressedFile>& r_files)\n' '{\n' + inserted_files + '}\n' + ) + header.write('#endif // _CS_FILES_DATA_H') + + +env.add_source_files(env.modules_sources, '*.cpp') +env.add_source_files(env.modules_sources, 'mono_gd/*.cpp') +env.add_source_files(env.modules_sources, 'utils/*.cpp') + +if env['tools']: + env.add_source_files(env.modules_sources, 'editor/*.cpp') + make_cs_files_header('glue/cs_files', 'glue/cs_compressed.gen.h') + +vars = Variables() +vars.Add(BoolVariable('mono_glue', 'Build with the mono glue sources', True)) +vars.Update(env) + +# Glue sources +if env['mono_glue']: + env.add_source_files(env.modules_sources, 'glue/*.cpp') +else: + env.Append(CPPDEFINES = [ 'MONO_GLUE_DISABLED' ]) + +if ARGUMENTS.get('yolo_copy', False): + env.Append(CPPDEFINES = [ 'YOLO_COPY' ]) + +# Build GodotSharpTools solution + +import os +import subprocess +import mono_reg_utils as monoreg + + +def mono_build_solution(source, target, env): + if os.name == 'nt': + msbuild_tools_path = monoreg.find_msbuild_tools_path_reg() + if not msbuild_tools_path: + raise RuntimeError('Cannot find MSBuild Tools Path in the registry') + msbuild_path = os.path.join(msbuild_tools_path, 'MSBuild.exe') + else: + msbuild_path = 'msbuild' + + output_path = os.path.abspath(os.path.join(str(target[0]), os.pardir)) + + msbuild_args = [ + msbuild_path, + os.path.abspath(str(source[0])), + '/p:Configuration=Release', + '/p:OutputPath=' + output_path + ] + + msbuild_env = os.environ.copy() + + # Needed when running from Developer Command Prompt for VS + if 'PLATFORM' in msbuild_env: + del msbuild_env['PLATFORM'] + + msbuild_alt_paths = [ 'xbuild' ] + + while True: + try: + subprocess.check_call(msbuild_args, env = msbuild_env) + break + except subprocess.CalledProcessError: + raise RuntimeError('GodotSharpTools build failed') + except OSError: + if os.name != 'nt': + if not msbuild_alt_paths: + raise RuntimeError('Could not find commands msbuild or xbuild') + # Try xbuild + msbuild_args[0] = msbuild_alt_paths.pop(0) + else: + raise RuntimeError('Could not find command MSBuild.exe') + + +mono_sln_builder = Builder(action = mono_build_solution) +env.Append(BUILDERS = { 'MonoBuildSolution' : mono_sln_builder }) +env.MonoBuildSolution( + os.path.join(Dir('#bin').abspath, 'GodotSharpTools.dll'), + 'editor/GodotSharpTools/GodotSharpTools.sln' +) diff --git a/modules/mono/config.py b/modules/mono/config.py new file mode 100644 index 0000000000..0833d30ce1 --- /dev/null +++ b/modules/mono/config.py @@ -0,0 +1,147 @@ + +import imp +import os +import sys +from shutil import copyfile + +from SCons.Script import BoolVariable, Environment, Variables + + +monoreg = imp.load_source('mono_reg_utils', 'modules/mono/mono_reg_utils.py') + + +def find_file_in_dir(directory, files, prefix='', extension=''): + if not extension.startswith('.'): + extension = '.' + extension + for curfile in files: + if os.path.isfile(os.path.join(directory, prefix + curfile + extension)): + return curfile + + return None + + +def can_build(platform): + if platform in ["javascript"]: + return False # Not yet supported + return True + + +def is_enabled(): + # The module is disabled by default. Use module_mono_enabled=yes to enable it. + return False + + +def configure(env): + env.use_ptrcall = True + + envvars = Variables() + envvars.Add(BoolVariable('mono_static', 'Statically link mono', False)) + envvars.Update(env) + + mono_static = env['mono_static'] + + mono_lib_names = ['mono-2.0-sgen', 'monosgen-2.0'] + + if env['platform'] == 'windows': + if mono_static: + raise RuntimeError('mono-static: Not supported on Windows') + + if env['bits'] == '32': + if os.getenv('MONO32_PREFIX'): + mono_root = os.getenv('MONO32_PREFIX') + elif os.name == 'nt': + mono_root = monoreg.find_mono_root_dir() + else: + if os.getenv('MONO64_PREFIX'): + mono_root = os.getenv('MONO64_PREFIX') + elif os.name == 'nt': + mono_root = monoreg.find_mono_root_dir() + + if mono_root is None: + raise RuntimeError('Mono installation directory not found') + + mono_lib_path = os.path.join(mono_root, 'lib') + + env.Append(LIBPATH=mono_lib_path) + env.Append(CPPPATH=os.path.join(mono_root, 'include', 'mono-2.0')) + + mono_lib_name = find_file_in_dir(mono_lib_path, mono_lib_names, extension='.lib') + + if mono_lib_name is None: + raise RuntimeError('Could not find mono library in: ' + mono_lib_path) + + if os.getenv('VCINSTALLDIR'): + env.Append(LINKFLAGS=mono_lib_name + Environment()['LIBSUFFIX']) + else: + env.Append(LIBS=mono_lib_name) + + mono_bin_path = os.path.join(mono_root, 'bin') + + mono_dll_name = find_file_in_dir(mono_bin_path, mono_lib_names, extension='.dll') + + mono_dll_src = os.path.join(mono_bin_path, mono_dll_name + '.dll') + mono_dll_dst = os.path.join('bin', mono_dll_name + '.dll') + copy_mono_dll = True + + if not os.path.isdir('bin'): + os.mkdir('bin') + elif os.path.exists(mono_dll_dst): + copy_mono_dll = False + + if copy_mono_dll: + copyfile(mono_dll_src, mono_dll_dst) + else: + mono_root = None + + if env['bits'] == '32': + if os.getenv('MONO32_PREFIX'): + mono_root = os.getenv('MONO32_PREFIX') + else: + if os.getenv('MONO64_PREFIX'): + mono_root = os.getenv('MONO64_PREFIX') + + if mono_root is not None: + mono_lib_path = os.path.join(mono_root, 'lib') + + env.Append(LIBPATH=mono_lib_path) + env.Append(CPPPATH=os.path.join(mono_root, 'include', 'mono-2.0')) + + mono_lib = find_file_in_dir(mono_lib_path, mono_lib_names, prefix='lib', extension='.a') + + if mono_lib is None: + raise RuntimeError('Could not find mono library in: ' + mono_lib_path) + + env.Append(CPPFLAGS=['-D_REENTRANT']) + + if mono_static: + mono_lib_file = os.path.join(mono_lib_path, 'lib' + mono_lib + '.a') + + if sys.platform == "darwin": + env.Append(LINKFLAGS=['-Wl,-force_load,' + mono_lib_file]) + elif sys.platform == "linux" or sys.platform == "linux2": + env.Append(LINKFLAGS=['-Wl,-whole-archive', mono_lib_file, '-Wl,-no-whole-archive']) + else: + raise RuntimeError('mono-static: Not supported on this platform') + else: + env.Append(LIBS=[mono_lib]) + + if sys.platform == "darwin": + env.Append(LIBS=['iconv', 'pthread']) + elif sys.platform == "linux" or sys.platform == "linux2": + env.Append(LIBS=['m', 'rt', 'dl', 'pthread']) + + else: + if mono_static: + raise RuntimeError('mono-static: Not supported with pkg-config. Specify a mono prefix manually') + + env.ParseConfig('pkg-config monosgen-2 --cflags --libs') + + env.Append(LINKFLAGS='-rdynamic') + + +def get_doc_classes(): + return ["@C#", "CSharpScript", "GodotSharp"] + + +def get_doc_path(): + return "doc_classes" diff --git a/modules/mono/csharp_script.cpp b/modules/mono/csharp_script.cpp new file mode 100644 index 0000000000..ba8c7df9cc --- /dev/null +++ b/modules/mono/csharp_script.cpp @@ -0,0 +1,1972 @@ +/*************************************************************************/ +/* csharp_script.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 "csharp_script.h" + +#include <mono/metadata/threads.h> + +#include "os/file_access.h" +#include "os/os.h" +#include "os/thread.h" +#include "project_settings.h" + +#ifdef TOOLS_ENABLED +#include "editor/bindings_generator.h" +#include "editor/csharp_project.h" +#include "editor/editor_node.h" +#include "editor/godotsharp_editor.h" +#include "utils/string_utils.h" +#endif + +#include "godotsharp_dirs.h" +#include "mono_gd/gd_mono_class.h" +#include "mono_gd/gd_mono_marshal.h" +#include "signal_awaiter_utils.h" + +#define CACHED_STRING_NAME(m_var) (CSharpLanguage::get_singleton()->get_string_names().m_var) + +#ifdef TOOLS_ENABLED +static bool _create_project_solution_if_needed() { + + String sln_path = GodotSharpDirs::get_project_sln_path(); + String csproj_path = GodotSharpDirs::get_project_csproj_path(); + + if (!FileAccess::exists(sln_path) || !FileAccess::exists(csproj_path)) { + // A solution does not yet exist, create a new one + + CRASH_COND(GodotSharpEditor::get_singleton() == NULL); + return GodotSharpEditor::get_singleton()->call("_create_project_solution"); + } + + return true; +} +#endif + +CSharpLanguage *CSharpLanguage::singleton = NULL; + +String CSharpLanguage::get_name() const { + + return "C#"; +} + +String CSharpLanguage::get_type() const { + + return "CSharpScript"; +} + +String CSharpLanguage::get_extension() const { + + return "cs"; +} + +Error CSharpLanguage::execute_file(const String &p_path) { + + // ?? + return OK; +} + +#ifdef TOOLS_ENABLED +void gdsharp_editor_init_callback() { + + EditorNode *editor = EditorNode::get_singleton(); + editor->add_child(memnew(GodotSharpEditor(editor))); +} +#endif + +void CSharpLanguage::init() { + + gdmono = memnew(GDMono); + gdmono->initialize(); + +#ifdef MONO_GLUE_DISABLED + WARN_PRINT("This binary is built with `mono_glue=no` and cannot be used for scripting"); +#endif + +#if defined(TOOLS_ENABLED) && defined(DEBUG_METHODS_ENABLED) + if (gdmono->get_editor_tools_assembly() != NULL) { + List<String> cmdline_args = OS::get_singleton()->get_cmdline_args(); + BindingsGenerator::handle_cmdline_args(cmdline_args); + } +#endif + +#ifdef TOOLS_ENABLED + EditorNode::add_init_callback(&gdsharp_editor_init_callback); +#endif +} + +void CSharpLanguage::finish() { + + if (gdmono) { + memdelete(gdmono); + gdmono = NULL; + } +} + +void CSharpLanguage::get_reserved_words(List<String> *p_words) const { + + static const char *_reserved_words[] = { + // Reserved keywords + "abstract", + "as", + "base", + "bool", + "break", + "byte", + "case", + "catch", + "char", + "checked", + "class", + "const", + "continue", + "decimal", + "default", + "delegate", + "do", + "double", + "else", + "enum", + "event", + "explicit", + "extern", + "false", + "finally", + "fixed", + "float", + "for", + "forech", + "goto", + "if", + "implicit", + "in", + "int", + "interface", + "internal", + "is", + "lock", + "long", + "namespace", + "new", + "null", + "object", + "operator", + "out", + "override", + "params", + "private", + "protected", + "public", + "readonly", + "ref", + "return", + "sbyte", + "sealed", + "short", + "sizeof", + "stackalloc", + "static", + "string", + "struct", + "switch", + "this", + "throw", + "true", + "try", + "typeof", + "uint", + "ulong", + "unchecked", + "unsafe", + "ushort", + "using", + "virtual", + "volatile", + "void", + "while", + + // Contextual keywords. Not reserved words, but I guess we should include + // them because this seems to be used only for syntax highlighting. + "add", + "ascending", + "by", + "descending", + "dynamic", + "equals", + "from", + "get", + "global", + "group", + "in", + "into", + "join", + "let", + "on", + "orderby", + "partial", + "remove", + "select", + "set", + "value", + "var", + "where", + "yield", + 0 + }; + + const char **w = _reserved_words; + + while (*w) { + p_words->push_back(*w); + w++; + } +} + +void CSharpLanguage::get_comment_delimiters(List<String> *p_delimiters) const { + + p_delimiters->push_back("//"); // single-line comment + p_delimiters->push_back("/* */"); // delimited comment +} + +void CSharpLanguage::get_string_delimiters(List<String> *p_delimiters) const { + + p_delimiters->push_back("' '"); // character literal + p_delimiters->push_back("\" \""); // regular string literal + p_delimiters->push_back("@\" \""); // verbatim string literal +} + +Ref<Script> CSharpLanguage::get_template(const String &p_class_name, const String &p_base_class_name) const { + + String script_template = "using " BINDINGS_NAMESPACE ";\n" + "using System;\n" + "\n" + "public class %CLASS_NAME% : %BASE_CLASS_NAME%\n" + "{\n" + " // Member variables here, example:\n" + " // private int a = 2;\n" + " // private string b = \"textvar\";\n" + "\n" + " public override void _Ready()\n" + " {\n" + " // Called every time the node is added to the scene.\n" + " // Initialization here\n" + " \n" + " }\n" + "}\n"; + + script_template = script_template.replace("%BASE_CLASS_NAME%", p_base_class_name).replace("%CLASS_NAME%", p_class_name); + + Ref<CSharpScript> script; + script.instance(); + script->set_source_code(script_template); + + return script; +} + +Script *CSharpLanguage::create_script() const { + + return memnew(CSharpScript); +} + +bool CSharpLanguage::has_named_classes() const { + + return true; +} + +static String variant_type_to_managed_name(const String &p_var_type_name) { + + if (p_var_type_name.empty()) + return "object"; + + if (!ClassDB::class_exists(p_var_type_name)) { + Variant::Type var_types[] = { + Variant::BOOL, + Variant::INT, + Variant::REAL, + Variant::STRING, + Variant::VECTOR2, + Variant::RECT2, + Variant::VECTOR3, + Variant::TRANSFORM2D, + Variant::PLANE, + Variant::QUAT, + Variant::RECT3, + Variant::BASIS, + Variant::TRANSFORM, + Variant::COLOR, + Variant::NODE_PATH, + Variant::_RID + }; + + for (int i = 0; i < sizeof(var_types) / sizeof(Variant::Type); i++) { + if (p_var_type_name == Variant::get_type_name(var_types[i])) + return p_var_type_name; + } + + if (p_var_type_name == "String") + return "string"; // I prefer this one >:[ + + // TODO these will be rewritten later into custom containers + + if (p_var_type_name == "Array") + return "object[]"; + + if (p_var_type_name == "Dictionary") + return "Dictionary<object, object>"; + + if (p_var_type_name == "PoolByteArray") + return "byte[]"; + if (p_var_type_name == "PoolIntArray") + return "int[]"; + if (p_var_type_name == "PoolRealArray") + return "float[]"; + if (p_var_type_name == "PoolStringArray") + return "string[]"; + if (p_var_type_name == "PoolVector2Array") + return "Vector2[]"; + if (p_var_type_name == "PoolVector3Array") + return "Vector3[]"; + if (p_var_type_name == "PoolColorArray") + return "Color[]"; + + return "object"; + } + + return p_var_type_name; +} + +String CSharpLanguage::make_function(const String &p_class, const String &p_name, const PoolStringArray &p_args) const { +#ifdef TOOLS_ENABLED + // FIXME + // - Due to Godot's API limitation this just appends the function to the end of the file + // - Use fully qualified name if there is ambiguity + String s = "private void " + p_name + "("; + for (int i = 0; i < p_args.size(); i++) { + const String &arg = p_args[i]; + + if (i > 0) + s += ", "; + + s += variant_type_to_managed_name(arg.get_slice(":", 1)) + " " + escape_csharp_keyword(arg.get_slice(":", 0)); + } + s += ")\n{\n // Replace with function body\n}\n"; + + return s; +#else + return String(); +#endif +} + +void CSharpLanguage::frame() { + + const Ref<MonoGCHandle> &task_scheduler_handle = GDMonoUtils::mono_cache.task_scheduler_handle; + + if (task_scheduler_handle.is_valid()) { + MonoObject *task_scheduler = task_scheduler_handle->get_target(); + + if (task_scheduler) { + GDMonoUtils::GodotTaskScheduler_Activate thunk = CACHED_METHOD_THUNK(GodotTaskScheduler, Activate); + + ERR_FAIL_NULL(thunk); + + MonoObject *ex; + thunk(task_scheduler, &ex); + + if (ex) { + mono_print_unhandled_exception(ex); + ERR_FAIL(); + } + } + } +} + +struct CSharpScriptDepSort { + + // must support sorting so inheritance works properly (parent must be reloaded first) + bool operator()(const Ref<CSharpScript> &A, const Ref<CSharpScript> &B) const { + if (A == B) + return false; // shouldn't happen but.. + GDMonoClass *I = B->base; + while (I) { + if (I == A->script_class) { + // A is a base of B + return true; + } + + I = I->get_parent_class(); + } + + return false; // not a base + } +}; + +void CSharpLanguage::reload_all_scripts() { + +#ifdef DEBUG_ENABLED + +#ifndef NO_THREADS + lock->lock(); +#endif + + List<Ref<CSharpScript> > scripts; + + SelfList<CSharpScript> *elem = script_list.first(); + while (elem) { + if (elem->self()->get_path().is_resource_file()) { + scripts.push_back(Ref<CSharpScript>(elem->self())); //cast to gdscript to avoid being erased by accident + } + elem = elem->next(); + } + +#ifndef NO_THREADS + lock->unlock(); +#endif + + //as scripts are going to be reloaded, must proceed without locking here + + scripts.sort_custom<CSharpScriptDepSort>(); //update in inheritance dependency order + + for (List<Ref<CSharpScript> >::Element *E = scripts.front(); E; E = E->next()) { + E->get()->load_source_code(E->get()->get_path()); + E->get()->reload(true); + } +#endif +} + +void CSharpLanguage::reload_tool_script(const Ref<Script> &p_script, bool p_soft_reload) { + + (void)p_script; // UNUSED + +#ifdef TOOLS_ENABLED + reload_assemblies_if_needed(p_soft_reload); +#endif +} + +#ifdef TOOLS_ENABLED +void CSharpLanguage::reload_assemblies_if_needed(bool p_soft_reload) { + + if (gdmono->is_runtime_initialized()) { + + GDMonoAssembly *proj_assembly = gdmono->get_project_assembly(); + + if (proj_assembly) { + String proj_asm_path = proj_assembly->get_path(); + + if (!FileAccess::exists(proj_assembly->get_path())) { + // Maybe it wasn't loaded from the default path, so check this as well + String proj_asm_name = ProjectSettings::get_singleton()->get("application/config/name"); + proj_asm_path = GodotSharpDirs::get_res_temp_assemblies_dir().plus_file(proj_asm_name); + if (!FileAccess::exists(proj_asm_path)) + return; // No assembly to load + } + + if (FileAccess::get_modified_time(proj_asm_path) <= proj_assembly->get_modified_time()) + return; // Already up to date + } else { + String proj_asm_name = ProjectSettings::get_singleton()->get("application/config/name"); + if (!FileAccess::exists(GodotSharpDirs::get_res_temp_assemblies_dir().plus_file(proj_asm_name))) + return; // No assembly to load + } + } + +#ifndef NO_THREADS + lock->lock(); +#endif + + List<Ref<CSharpScript> > scripts; + + SelfList<CSharpScript> *elem = script_list.first(); + while (elem) { + if (elem->self()->get_path().is_resource_file()) { + + scripts.push_back(Ref<CSharpScript>(elem->self())); //cast to CSharpScript to avoid being erased by accident + } + elem = elem->next(); + } + +#ifndef NO_THREADS + lock->unlock(); +#endif + + //when someone asks you why dynamically typed languages are easier to write.... + + Map<Ref<CSharpScript>, Map<ObjectID, List<Pair<StringName, Variant> > > > to_reload; + + //as scripts are going to be reloaded, must proceed without locking here + + scripts.sort_custom<CSharpScriptDepSort>(); //update in inheritance dependency order + + for (List<Ref<CSharpScript> >::Element *E = scripts.front(); E; E = E->next()) { + + to_reload.insert(E->get(), Map<ObjectID, List<Pair<StringName, Variant> > >()); + + if (!p_soft_reload) { + + //save state and remove script from instances + Map<ObjectID, List<Pair<StringName, Variant> > > &map = to_reload[E->get()]; + + while (E->get()->instances.front()) { + Object *obj = E->get()->instances.front()->get(); + //save instance info + List<Pair<StringName, Variant> > state; + if (obj->get_script_instance()) { + + obj->get_script_instance()->get_property_state(state); + + Ref<MonoGCHandle> gchandle = CAST_CSHARP_INSTANCE(obj->get_script_instance())->gchandle; + if (gchandle.is_valid()) + gchandle->release(); + + map[obj->get_instance_id()] = state; + obj->set_script(RefPtr()); + } + } + + //same thing for placeholders + while (E->get()->placeholders.size()) { + + Object *obj = E->get()->placeholders.front()->get()->get_owner(); + //save instance info + List<Pair<StringName, Variant> > state; + if (obj->get_script_instance()) { + obj->get_script_instance()->get_property_state(state); + map[obj->get_instance_id()] = state; + obj->set_script(RefPtr()); + } + } + + for (Map<ObjectID, List<Pair<StringName, Variant> > >::Element *F = E->get()->pending_reload_state.front(); F; F = F->next()) { + map[F->key()] = F->get(); //pending to reload, use this one instead + } + + E->get()->_clear(); + } + } + + if (gdmono->reload_scripts_domain() != OK) + return; + + for (Map<Ref<CSharpScript>, Map<ObjectID, List<Pair<StringName, Variant> > > >::Element *E = to_reload.front(); E; E = E->next()) { + + Ref<CSharpScript> scr = E->key(); + scr->exports_invalidated = true; + scr->reload(p_soft_reload); + scr->update_exports(); + + //restore state if saved + for (Map<ObjectID, List<Pair<StringName, Variant> > >::Element *F = E->get().front(); F; F = F->next()) { + + Object *obj = ObjectDB::get_instance(F->key()); + if (!obj) + continue; + + if (!p_soft_reload) { + //clear it just in case (may be a pending reload state) + obj->set_script(RefPtr()); + } + obj->set_script(scr.get_ref_ptr()); + if (!obj->get_script_instance()) { + //failed, save reload state for next time if not saved + if (!scr->pending_reload_state.has(obj->get_instance_id())) { + scr->pending_reload_state[obj->get_instance_id()] = F->get(); + } + continue; + } + + for (List<Pair<StringName, Variant> >::Element *G = F->get().front(); G; G = G->next()) { + obj->get_script_instance()->set(G->get().first, G->get().second); + } + + scr->pending_reload_state.erase(obj->get_instance_id()); //as it reloaded, remove pending state + } + + //if instance states were saved, set them! + } +} +#endif + +void CSharpLanguage::get_recognized_extensions(List<String> *p_extensions) const { + + p_extensions->push_back("cs"); +} + +#ifdef TOOLS_ENABLED +Error CSharpLanguage::open_in_external_editor(const Ref<Script> &p_script, int p_line, int p_col) { + + return GodotSharpEditor::get_singleton()->open_in_external_editor(p_script, p_line, p_col); +} + +bool CSharpLanguage::overrides_external_editor() { + + return GodotSharpEditor::get_singleton()->overrides_external_editor(); +} +#endif + +void CSharpLanguage::thread_enter() { + +#if 0 + if (mono->is_runtime_initialized()) { + GDMonoUtils::attach_current_thread(); + } +#endif +} + +void CSharpLanguage::thread_exit() { + +#if 0 + if (mono->is_runtime_initialized()) { + GDMonoUtils::detach_current_thread(); + } +#endif +} + +bool CSharpLanguage::debug_break_parse(const String &p_file, int p_line, const String &p_error) { + + // Break because of parse error + if (ScriptDebugger::get_singleton() && Thread::get_caller_id() == Thread::get_main_id()) { + // TODO + //_debug_parse_err_line = p_line; + //_debug_parse_err_file = p_file; + //_debug_error = p_error; + ScriptDebugger::get_singleton()->debug(this, false); + return true; + } else { + return false; + } +} + +bool CSharpLanguage::debug_break(const String &p_error, bool p_allow_continue) { + + if (ScriptDebugger::get_singleton() && Thread::get_caller_id() == Thread::get_main_id()) { + // TODO + //_debug_parse_err_line = -1; + //_debug_parse_err_file = ""; + //_debug_error = p_error; + ScriptDebugger::get_singleton()->debug(this, p_allow_continue); + return true; + } else { + return false; + } +} + +void CSharpLanguage::set_language_index(int p_idx) { + + ERR_FAIL_COND(lang_idx != -1); + lang_idx = p_idx; +} + +CSharpLanguage::CSharpLanguage() { + + ERR_FAIL_COND(singleton); + singleton = this; + + gdmono = NULL; + +#ifdef NO_THREADS + lock = NULL; + gchandle_bind_lock = NULL; +#else + lock = Mutex::create(); + script_bind_lock = Mutex::create(); +#endif + + lang_idx = -1; +} + +CSharpLanguage::~CSharpLanguage() { + + finish(); + + if (lock) { + memdelete(lock); + lock = NULL; + } + + if (script_bind_lock) { + memdelete(script_bind_lock); + script_bind_lock = NULL; + } + + singleton = NULL; +} + +void *CSharpLanguage::alloc_instance_binding_data(Object *p_object) { + +#ifdef DEBUG_ENABLED + // I don't trust you + if (p_object->get_script_instance()) + CRASH_COND(NULL != CAST_CSHARP_INSTANCE(p_object->get_script_instance())); +#endif + + StringName type_name = p_object->get_class_name(); + + // ¯\_(ツ)_/¯ + const ClassDB::ClassInfo *classinfo = ClassDB::classes.getptr(type_name); + while (classinfo && !classinfo->exposed) + classinfo = classinfo->inherits_ptr; + ERR_FAIL_NULL_V(classinfo, NULL); + type_name = classinfo->name; + + GDMonoClass *type_class = GDMonoUtils::type_get_proxy_class(type_name); + + ERR_FAIL_NULL_V(type_class, NULL); + + MonoObject *mono_object = GDMonoUtils::create_managed_for_godot_object(type_class, type_name, p_object); + + ERR_FAIL_NULL_V(mono_object, NULL); + + // Tie managed to unmanaged + bool strong_handle = true; + Reference *ref = Object::cast_to<Reference>(p_object); + + if (ref) { + strong_handle = false; + + // Unsafe refcount increment. The managed instance also counts as a reference. + // This way if the unmanaged world has no references to our owner + // but the managed instance is alive, the refcount will be 1 instead of 0. + // See: _GodotSharp::_dispose_object(Object *p_object) + + ref->reference(); + } + + Ref<MonoGCHandle> gchandle = strong_handle ? MonoGCHandle::create_strong(mono_object) : + MonoGCHandle::create_weak(mono_object); + +#ifndef NO_THREADS + script_bind_lock->lock(); +#endif + + void *data = (void *)gchandle_bindings.insert(p_object, gchandle); + +#ifndef NO_THREADS + script_bind_lock->unlock(); +#endif + + return data; +} + +void CSharpLanguage::free_instance_binding_data(void *p_data) { + +#ifndef NO_THREADS + script_bind_lock->lock(); +#endif + + gchandle_bindings.erase((Map<Object *, Ref<MonoGCHandle> >::Element *)p_data); + +#ifndef NO_THREADS + script_bind_lock->unlock(); +#endif +} + +void CSharpInstance::_ml_call_reversed(GDMonoClass *klass, const StringName &p_method, const Variant **p_args, int p_argcount) { + + GDMonoClass *base = klass->get_parent_class(); + if (base && base != script->native) + _ml_call_reversed(base, p_method, p_args, p_argcount); + + GDMonoMethod *method = klass->get_method(p_method, p_argcount); + + if (method) { + method->invoke(get_mono_object(), p_args); + } +} + +CSharpInstance *CSharpInstance::create_for_managed_type(Object *p_owner, CSharpScript *p_script, const Ref<MonoGCHandle> &p_gchandle) { + + CSharpInstance *instance = memnew(CSharpInstance); + + Reference *ref = Object::cast_to<Reference>(p_owner); + + instance->base_ref = ref != NULL; + instance->script = Ref<CSharpScript>(p_script); + instance->owner = p_owner; + instance->gchandle = p_gchandle; + + if (instance->base_ref) + instance->_reference_owner_unsafe(); + + p_script->instances.insert(p_owner); + + return instance; +} + +MonoObject *CSharpInstance::get_mono_object() const { +#ifdef DEBUG_ENABLED + CRASH_COND(gchandle.is_null()); +#endif + return gchandle->get_target(); +} + +bool CSharpInstance::set(const StringName &p_name, const Variant &p_value) { + + ERR_FAIL_COND_V(!script.is_valid(), false); + + GDMonoClass *top = script->script_class; + + while (top && top != script->native) { + GDMonoField *field = script->script_class->get_field(p_name); + + if (field) { + MonoObject *mono_object = get_mono_object(); + + ERR_EXPLAIN("Reference has been garbage collected?"); + ERR_FAIL_NULL_V(mono_object, false); + + field->set_value(mono_object, p_value); + + return true; + } + + top = top->get_parent_class(); + } + + // Call _set + + Variant name = p_name; + const Variant *args[2] = { &name, &p_value }; + + MonoObject *mono_object = get_mono_object(); + top = script->script_class; + + while (top && top != script->native) { + GDMonoMethod *method = top->get_method(CACHED_STRING_NAME(_set), 2); + + if (method) { + MonoObject *ret = method->invoke(mono_object, args); + + if (ret && GDMonoMarshal::unbox<MonoBoolean>(ret) == true) + return true; + } + + top = top->get_parent_class(); + } + + return false; +} + +bool CSharpInstance::get(const StringName &p_name, Variant &r_ret) const { + + ERR_FAIL_COND_V(!script.is_valid(), false); + + GDMonoClass *top = script->script_class; + + while (top && top != script->native) { + GDMonoField *field = top->get_field(p_name); + + if (field) { + MonoObject *mono_object = get_mono_object(); + + ERR_EXPLAIN("Reference has been garbage collected?"); + ERR_FAIL_NULL_V(mono_object, false); + + MonoObject *value = field->get_value(mono_object); + r_ret = GDMonoMarshal::mono_object_to_variant(value, field->get_type()); + return true; + } + + // Call _get + + GDMonoMethod *method = top->get_method(CACHED_STRING_NAME(_get), 1); + + if (method) { + Variant name = p_name; + const Variant *args[1] = { &name }; + + MonoObject *ret = method->invoke(get_mono_object(), args); + + if (ret) { + r_ret = GDMonoMarshal::mono_object_to_variant(ret); + return true; + } + } + + top = top->get_parent_class(); + } + + return false; +} + +void CSharpInstance::get_property_list(List<PropertyInfo> *p_properties) const { + + for (Map<StringName, PropertyInfo>::Element *E = script->member_info.front(); E; E = E->next()) { + p_properties->push_back(E->value()); + } +} + +Variant::Type CSharpInstance::get_property_type(const StringName &p_name, bool *r_is_valid) const { + + if (script->member_info.has(p_name)) { + if (r_is_valid) + *r_is_valid = true; + return script->member_info[p_name].type; + } + + if (r_is_valid) + *r_is_valid = false; + + return Variant::NIL; +} + +bool CSharpInstance::has_method(const StringName &p_method) const { + + if (!script.is_valid()) + return false; + + GDMonoClass *top = script->script_class; + + while (top && top != script->native) { + if (top->has_method(p_method)) { + return true; + } + + top = top->get_parent_class(); + } + + return false; +} + +Variant CSharpInstance::call(const StringName &p_method, const Variant **p_args, int p_argcount, Variant::CallError &r_error) { + + MonoObject *mono_object = get_mono_object(); + + ERR_EXPLAIN("Reference has been garbage collected?"); + ERR_FAIL_NULL_V(mono_object, Variant()); + + if (!script.is_valid()) + return Variant(); + + GDMonoClass *top = script->script_class; + + while (top && top != script->native) { + GDMonoMethod *method = top->get_method(p_method, p_argcount); + + if (method) { + MonoObject *return_value = method->invoke(mono_object, p_args); + + if (return_value) { + return GDMonoMarshal::mono_object_to_variant(return_value, method->get_return_type()); + } else { + return Variant(); + } + } + + top = top->get_parent_class(); + } + + r_error.error = Variant::CallError::CALL_ERROR_INVALID_METHOD; + + return Variant(); +} + +void CSharpInstance::call_multilevel(const StringName &p_method, const Variant **p_args, int p_argcount) { + + if (script.is_valid()) { + MonoObject *mono_object = get_mono_object(); + + GDMonoClass *top = script->script_class; + + while (top && top != script->native) { + GDMonoMethod *method = top->get_method(p_method, p_argcount); + + if (method) + method->invoke(mono_object, p_args); + + top = top->get_parent_class(); + } + } +} + +void CSharpInstance::call_multilevel_reversed(const StringName &p_method, const Variant **p_args, int p_argcount) { + + if (script.is_valid()) { + _ml_call_reversed(script->script_class, p_method, p_args, p_argcount); + } +} + +void CSharpInstance::_reference_owner_unsafe() { + +#ifdef DEBUG_ENABLED + CRASH_COND(!base_ref); +#endif + + // Unsafe refcount increment. The managed instance also counts as a reference. + // This way if the unmanaged world has no references to our owner + // but the managed instance is alive, the refcount will be 1 instead of 0. + // See: _unreference_owner_unsafe() + + // May not me referenced yet, so we must use init_ref() instead of reference() + Object::cast_to<Reference>(owner)->init_ref(); +} + +void CSharpInstance::_unreference_owner_unsafe() { + +#ifdef DEBUG_ENABLED + CRASH_COND(!base_ref); +#endif + + // Called from CSharpInstance::mono_object_disposed() or ~CSharpInstance() + + // Unsafe refcount decrement. The managed instance also counts as a reference. + // See: _reference_owner_unsafe() + + if (Object::cast_to<Reference>(owner)->unreference()) { + memdelete(owner); + owner = NULL; + } +} + +void CSharpInstance::mono_object_disposed() { + + if (base_ref) + _unreference_owner_unsafe(); +} + +void CSharpInstance::refcount_incremented() { + + CRASH_COND(!base_ref); + + Reference *ref_owner = Object::cast_to<Reference>(owner); + + if (ref_owner->reference_get_count() > 1) { // Remember the managed side holds a reference, hence 1 instead of 0 here + // The reference count was increased after the managed side was the only one referencing our owner. + // This means the owner is being referenced again by the unmanaged side, + // so the owner must hold the managed side alive again to avoid it from being GCed. + + // Release the current weak handle and replace it with a strong handle. + uint32_t strong_gchandle = MonoGCHandle::make_strong_handle(gchandle->get_target()); + gchandle->release(); + gchandle->set_handle(strong_gchandle); + } +} + +bool CSharpInstance::refcount_decremented() { + + CRASH_COND(!base_ref); + + Reference *ref_owner = Object::cast_to<Reference>(owner); + + int refcount = ref_owner->reference_get_count(); + + if (refcount == 1) { // Remember the managed side holds a reference, hence 1 instead of 0 here + // If owner owner is no longer referenced by the unmanaged side, + // the managed instance takes responsibility of deleting the owner when GCed. + + // Release the current strong handle and replace it with a weak handle. + uint32_t weak_gchandle = MonoGCHandle::make_weak_handle(gchandle->get_target()); + gchandle->release(); + gchandle->set_handle(weak_gchandle); + + return false; + } + + ref_dying = (refcount == 0); + + return ref_dying; +} + +ScriptInstance::RPCMode CSharpInstance::get_rpc_mode(const StringName &p_method) const { + + GDMonoClass *top = script->script_class; + + while (top && top != script->native) { + GDMonoMethod *method = top->get_method(p_method); + + if (method) { // TODO should we reject static methods? + // TODO cache result + if (method->has_attribute(CACHED_CLASS(RemoteAttribute))) + return RPC_MODE_REMOTE; + if (method->has_attribute(CACHED_CLASS(SyncAttribute))) + return RPC_MODE_SYNC; + if (method->has_attribute(CACHED_CLASS(MasterAttribute))) + return RPC_MODE_MASTER; + if (method->has_attribute(CACHED_CLASS(SlaveAttribute))) + return RPC_MODE_SLAVE; + } + + top = top->get_parent_class(); + } + + return RPC_MODE_DISABLED; +} + +ScriptInstance::RPCMode CSharpInstance::get_rset_mode(const StringName &p_variable) const { + + GDMonoClass *top = script->script_class; + + while (top && top != script->native) { + GDMonoField *field = top->get_field(p_variable); + + if (field) { // TODO should we reject static fields? + // TODO cache result + if (field->has_attribute(CACHED_CLASS(RemoteAttribute))) + return RPC_MODE_REMOTE; + if (field->has_attribute(CACHED_CLASS(SyncAttribute))) + return RPC_MODE_SYNC; + if (field->has_attribute(CACHED_CLASS(MasterAttribute))) + return RPC_MODE_MASTER; + if (field->has_attribute(CACHED_CLASS(SlaveAttribute))) + return RPC_MODE_SLAVE; + } + + top = top->get_parent_class(); + } + + return RPC_MODE_DISABLED; +} + +void CSharpInstance::notification(int p_notification) { + + Variant value = p_notification; + const Variant *args[1] = { &value }; + + call_multilevel(CACHED_STRING_NAME(_notification), args, 1); +} + +Ref<Script> CSharpInstance::get_script() const { + + return script; +} + +ScriptLanguage *CSharpInstance::get_language() { + + return CSharpLanguage::get_singleton(); +} + +CSharpInstance::CSharpInstance() { + + owner = NULL; + base_ref = false; + ref_dying = false; +} + +CSharpInstance::~CSharpInstance() { + + if (gchandle.is_valid()) { + gchandle->release(); // Make sure it's released + } + + if (base_ref && !ref_dying) { // it may be called from the owner's destructor +#ifdef DEBUG_ENABLED + CRASH_COND(!owner); // dunno, just in case +#endif + _unreference_owner_unsafe(); + } + + if (script.is_valid() && owner) { +#ifndef NO_THREADS + CSharpLanguage::singleton->lock->lock(); +#endif + +#ifdef DEBUG_ENABLED + // CSharpInstance must not be created unless it's going to be added to the list for sure + Set<Object *>::Element *match = script->instances.find(owner); + CRASH_COND(!match); + script->instances.erase(match); +#else + script->instances.erase(owner); +#endif + +#ifndef NO_THREADS + CSharpLanguage::singleton->lock->unlock(); +#endif + } +} + +#ifdef TOOLS_ENABLED +void CSharpScript::_placeholder_erased(PlaceHolderScriptInstance *p_placeholder) { + + placeholders.erase(p_placeholder); +} +#endif + +#ifdef TOOLS_ENABLED +void CSharpScript::_update_exports_values(Map<StringName, Variant> &values, List<PropertyInfo> &propnames) { + + if (base_cache.is_valid()) { + base_cache->_update_exports_values(values, propnames); + } + + for (Map<StringName, Variant>::Element *E = exported_members_defval_cache.front(); E; E = E->next()) { + values[E->key()] = E->get(); + } + + for (List<PropertyInfo>::Element *E = exported_members_cache.front(); E; E = E->next()) { + propnames.push_back(E->get()); + } +} +#endif + +bool CSharpScript::_update_exports() { + +#ifdef TOOLS_ENABLED + if (!valid) + return false; + + bool changed = false; + + if (exports_invalidated) { + exports_invalidated = false; + + changed = true; + + member_info.clear(); + exported_members_cache.clear(); + exported_members_defval_cache.clear(); + + // We are creating a temporary new instance of the class here to get the default value + // TODO Workaround. Should be replaced with IL opcodes analysis + + MonoObject *tmp_object = mono_object_new(SCRIPTS_DOMAIN, script_class->get_raw()); + + if (tmp_object) { + CACHED_FIELD(GodotObject, ptr)->set_value_raw(tmp_object, tmp_object); // FIXME WTF is this workaround + + GDMonoMethod *ctor = script_class->get_method(CACHED_STRING_NAME(dotctor), 0); + MonoObject *ex = NULL; + ctor->invoke(tmp_object, NULL, &ex); + + if (ex) { + ERR_PRINT("Exception thrown from constructor of temporary MonoObject:"); + mono_print_unhandled_exception(ex); + tmp_object = NULL; + ERR_FAIL_V(false); + } + } else { + ERR_PRINT("Failed to create temporary MonoObject"); + return false; + } + + GDMonoClass *top = script_class; + + while (top && top != native) { + const Vector<GDMonoField *> &fields = top->get_all_fields(); + + for (int i = 0; i < fields.size(); i++) { + GDMonoField *field = fields[i]; + + if (field->is_static()) { + if (field->has_attribute(CACHED_CLASS(ExportAttribute))) + ERR_PRINTS("Cannot export field because it is static: " + top->get_full_name() + "." + field->get_name()); + continue; + } + + String name = field->get_name(); + StringName cname = name; + + if (member_info.has(cname)) + continue; + + ManagedType field_type = field->get_type(); + Variant::Type type = GDMonoMarshal::managed_to_variant_type(field_type); + + if (field->has_attribute(CACHED_CLASS(ExportAttribute))) { + // Field has Export attribute + MonoObject *attr = field->get_attribute(CACHED_CLASS(ExportAttribute)); + + PropertyHint hint; + String hint_string; + + if (type == Variant::NIL) { + ERR_PRINTS("Unknown type of exported field: " + top->get_full_name() + "." + field->get_name()); + continue; + } else if (type == Variant::INT && field_type.type_encoding == MONO_TYPE_VALUETYPE && mono_class_is_enum(field_type.type_class->get_raw())) { + type = Variant::INT; + hint = PROPERTY_HINT_ENUM; + + Vector<MonoClassField *> fields = field_type.type_class->get_enum_fields(); + + for (int i = 0; i < fields.size(); i++) { + if (i > 0) + hint_string += ","; + hint_string += mono_field_get_name(fields[i]); + } + } else if (type == Variant::OBJECT && CACHED_CLASS(GodotReference)->is_assignable_from(field_type.type_class)) { + hint = PROPERTY_HINT_RESOURCE_TYPE; + hint_string = NATIVE_GDMONOCLASS_NAME(field_type.type_class); + } else { + hint = PropertyHint(CACHED_FIELD(ExportAttribute, hint)->get_int_value(attr)); + hint_string = CACHED_FIELD(ExportAttribute, hint_string)->get_string_value(attr); + } + + PropertyInfo prop_info = PropertyInfo(type, name, hint, hint_string, PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_SCRIPT_VARIABLE); + + member_info[cname] = prop_info; + exported_members_cache.push_back(prop_info); + + if (tmp_object) { + exported_members_defval_cache[cname] = GDMonoMarshal::mono_object_to_variant(field->get_value(tmp_object)); + } + } else { + member_info[cname] = PropertyInfo(type, name, PROPERTY_HINT_NONE, "", PROPERTY_USAGE_SCRIPT_VARIABLE); + } + } + + top = top->get_parent_class(); + } + } + + if (placeholders.size()) { + // Update placeholders if any + Map<StringName, Variant> values; + List<PropertyInfo> propnames; + _update_exports_values(values, propnames); + + for (Set<PlaceHolderScriptInstance *>::Element *E = placeholders.front(); E; E = E->next()) { + E->get()->update(propnames, values); + } + } + + return changed; +#endif + return false; +} + +void CSharpScript::_clear() { + + tool = false; + valid = false; + + base = NULL; + native = NULL; + script_class = NULL; +} + +Variant CSharpScript::call(const StringName &p_method, const Variant **p_args, int p_argcount, Variant::CallError &r_error) { + + GDMonoClass *top = script_class; + + while (top && top != native) { + GDMonoMethod *method = top->get_method(p_method, p_argcount); + + if (method && method->is_static()) { + MonoObject *result = method->invoke(NULL, p_args); + + if (result) { + return GDMonoMarshal::mono_object_to_variant(result, method->get_return_type()); + } else { + return Variant(); + } + } + + top = top->get_parent_class(); + } + + // No static method found. Try regular instance calls + return Script::call(p_method, p_args, p_argcount, r_error); +} + +void CSharpScript::_resource_path_changed() { + + String path = get_path(); + + if (!path.empty()) { + name = get_path().get_file().get_basename(); + } +} + +void CSharpScript::_bind_methods() { + + ClassDB::bind_vararg_method(METHOD_FLAGS_DEFAULT, "new", &CSharpScript::_new, MethodInfo(Variant::OBJECT, "new")); +} + +Ref<CSharpScript> CSharpScript::create_for_managed_type(GDMonoClass *p_class) { + + // This method should not fail + + CRASH_COND(!p_class); + + Ref<CSharpScript> script = memnew(CSharpScript); + + script->name = p_class->get_name(); + script->script_class = p_class; + script->native = GDMonoUtils::get_class_native_base(script->script_class); + + CRASH_COND(script->native == NULL); + + GDMonoClass *base = script->script_class->get_parent_class(); + + if (base != script->native) + script->base = base; + +#ifdef DEBUG_ENABLED + // For debug builds, we must fetch from all native base methods as well. + // Native base methods must be fetched before the current class. + // Not needed if the script class itself is a native class. + + if (script->script_class != script->native) { + GDMonoClass *native_top = script->native; + while (native_top) { + native_top->fetch_methods_with_godot_api_checks(script->native); + + if (native_top == CACHED_CLASS(GodotObject)) + break; + + native_top = native_top->get_parent_class(); + } + } +#endif + + script->script_class->fetch_methods_with_godot_api_checks(script->native); + + // Need to fetch method from base classes as well + GDMonoClass *top = script->script_class; + while (top && top != script->native) { + top->fetch_methods_with_godot_api_checks(script->native); + top = top->get_parent_class(); + } + + return script; +} + +bool CSharpScript::can_instance() const { + +#ifdef TOOLS_ENABLED + if (Engine::get_singleton()->is_editor_hint()) { + + if (get_path().find("::") == -1) { // Ignore if built-in script. Can happen if the file is deleted... + if (_create_project_solution_if_needed()) { + CSharpProject::add_item(GodotSharpDirs::get_project_csproj_path(), + "Compile", + ProjectSettings::get_singleton()->globalize_path(get_path())); + } else { + ERR_PRINTS("Cannot add " + get_path() + " to the C# project because it could not be created."); + } + } + } +#endif + + return valid || (!tool && !ScriptServer::is_scripting_enabled()); +} + +StringName CSharpScript::get_instance_base_type() const { + + if (native) + return native->get_name(); + else + return StringName(); +} + +CSharpInstance *CSharpScript::_create_instance(const Variant **p_args, int p_argcount, Object *p_owner, bool p_isref, Variant::CallError &r_error) { + + /* STEP 1, CREATE */ + + CSharpInstance *instance = memnew(CSharpInstance); + instance->base_ref = p_isref; + instance->script = Ref<CSharpScript>(this); + instance->owner = p_owner; + instance->owner->set_script_instance(instance); + + if (instance->base_ref) + instance->_reference_owner_unsafe(); + + /* STEP 2, INITIALIZE AND CONSTRUCT */ + + MonoObject *mono_object = mono_object_new(SCRIPTS_DOMAIN, script_class->get_raw()); + + if (!mono_object) { + instance->script = Ref<CSharpScript>(); + instance->owner->set_script_instance(NULL); + r_error.error = Variant::CallError::CALL_ERROR_INSTANCE_IS_NULL; + ERR_EXPLAIN("Failed to allocate memory for the object"); + ERR_FAIL_V(NULL); + } + +#ifndef NO_THREADS + CSharpLanguage::singleton->lock->lock(); +#endif + + instances.insert(instance->owner); + +#ifndef NO_THREADS + CSharpLanguage::singleton->lock->unlock(); +#endif + + CACHED_FIELD(GodotObject, ptr)->set_value_raw(mono_object, instance->owner); + + // Construct + GDMonoMethod *ctor = script_class->get_method(CACHED_STRING_NAME(dotctor), p_argcount); + ctor->invoke(mono_object, p_args, NULL); + + // Tie managed to unmanaged + instance->gchandle = MonoGCHandle::create_strong(mono_object); + + /* STEP 3, PARTY */ + + //@TODO make thread safe + return instance; +} + +Variant CSharpScript::_new(const Variant **p_args, int p_argcount, Variant::CallError &r_error) { + + if (!valid) { + r_error.error = Variant::CallError::CALL_ERROR_INVALID_METHOD; + return Variant(); + } + + r_error.error = Variant::CallError::CALL_OK; + REF ref; + Object *owner = NULL; + + ERR_FAIL_NULL_V(native, Variant()); + + owner = ClassDB::instance(NATIVE_GDMONOCLASS_NAME(native)); + + Reference *r = Object::cast_to<Reference>(owner); + if (r) { + ref = REF(r); + } + + CSharpInstance *instance = _create_instance(p_args, p_argcount, owner, r != NULL, r_error); + if (!instance) { + if (ref.is_null()) { + memdelete(owner); //no owner, sorry + } + return Variant(); + } + + if (ref.is_valid()) { + return ref; + } else { + return owner; + } +} + +ScriptInstance *CSharpScript::instance_create(Object *p_this) { + + if (!valid) + return NULL; + + if (!tool && !ScriptServer::is_scripting_enabled()) { +#ifdef TOOLS_ENABLED + PlaceHolderScriptInstance *si = memnew(PlaceHolderScriptInstance(CSharpLanguage::get_singleton(), Ref<Script>(this), p_this)); + placeholders.insert(si); + _update_exports(); + return si; +#else + return NULL; +#endif + } + + if (native) { + String native_name = native->get_name(); + if (!ClassDB::is_parent_class(p_this->get_class_name(), native_name)) { + if (ScriptDebugger::get_singleton()) { + CSharpLanguage::get_singleton()->debug_break_parse(get_path(), 0, "Script inherits from native type '" + native_name + "', so it can't be instanced in object of type: '" + p_this->get_class() + "'"); + } + ERR_EXPLAIN("Script inherits from native type '" + native_name + "', so it can't be instanced in object of type: '" + p_this->get_class() + "'"); + ERR_FAIL_V(NULL); + } + } + + Variant::CallError unchecked_error; + return _create_instance(NULL, 0, p_this, Object::cast_to<Reference>(p_this), unchecked_error); +} + +bool CSharpScript::instance_has(const Object *p_this) const { + +#ifndef NO_THREADS + CSharpLanguage::singleton->lock->lock(); +#endif + + bool ret = instances.has((Object *)p_this); + +#ifndef NO_THREADS + CSharpLanguage::singleton->lock->unlock(); +#endif + + return ret; +} + +bool CSharpScript::has_source_code() const { + + return !source.empty(); +} + +String CSharpScript::get_source_code() const { + + return source; +} + +void CSharpScript::set_source_code(const String &p_code) { + + if (source == p_code) + return; + source = p_code; +#ifdef TOOLS_ENABLED + source_changed_cache = true; +#endif +} + +bool CSharpScript::has_method(const StringName &p_method) const { + + return script_class->has_method(p_method); +} + +Error CSharpScript::reload(bool p_keep_state) { + +#ifndef NO_THREADS + CSharpLanguage::singleton->lock->lock(); +#endif + + bool has_instances = instances.size(); + +#ifndef NO_THREADS + CSharpLanguage::singleton->lock->unlock(); +#endif + + ERR_FAIL_COND_V(!p_keep_state && has_instances, ERR_ALREADY_IN_USE); + + GDMonoAssembly *project_assembly = GDMono::get_singleton()->get_project_assembly(); + + if (project_assembly) { + script_class = project_assembly->get_object_derived_class(name); + + if (!script_class) { + ERR_PRINTS("Cannot find class " + name + " for script " + get_path()); + } +#ifdef DEBUG_ENABLED + else if (OS::get_singleton()->is_stdout_verbose()) { + OS::get_singleton()->print(String("Found class " + script_class->get_namespace() + "." + + script_class->get_name() + " for script " + get_path() + "\n") + .utf8()); + } +#endif + + valid = script_class != NULL; + + if (script_class) { + tool = script_class->has_attribute(CACHED_CLASS(ToolAttribute)); + + native = GDMonoUtils::get_class_native_base(script_class); + + CRASH_COND(native == NULL); + + GDMonoClass *base_class = script_class->get_parent_class(); + + if (base_class != native) + base = base_class; + +#ifdef DEBUG_ENABLED + // For debug builds, we must fetch from all native base methods as well. + // Native base methods must be fetched before the current class. + // Not needed if the script class itself is a native class. + + if (script_class != native) { + GDMonoClass *native_top = native; + while (native_top) { + native_top->fetch_methods_with_godot_api_checks(native); + + if (native_top == CACHED_CLASS(GodotObject)) + break; + + native_top = native_top->get_parent_class(); + } + } +#endif + + script_class->fetch_methods_with_godot_api_checks(native); + + // Need to fetch method from base classes as well + GDMonoClass *top = script_class; + while (top && top != native) { + top->fetch_methods_with_godot_api_checks(native); + top = top->get_parent_class(); + } + } + + return OK; + } + + return ERR_FILE_MISSING_DEPENDENCIES; +} + +String CSharpScript::get_node_type() const { + + return ""; // ? +} + +ScriptLanguage *CSharpScript::get_language() const { + + return CSharpLanguage::get_singleton(); +} + +bool CSharpScript::get_property_default_value(const StringName &p_property, Variant &r_value) const { + +#ifdef TOOLS_ENABLED + + const Map<StringName, Variant>::Element *E = exported_members_defval_cache.find(p_property); + if (E) { + r_value = E->get(); + return true; + } + + if (base_cache.is_valid()) { + return base_cache->get_property_default_value(p_property, r_value); + } + +#endif + return false; +} + +void CSharpScript::update_exports() { + +#ifdef TOOLS_ENABLED + _update_exports(); +#endif +} + +Ref<Script> CSharpScript::get_base_script() const { + + // TODO search in metadata file once we have it, not important any way? + return Ref<Script>(); +} + +void CSharpScript::get_script_property_list(List<PropertyInfo> *p_list) const { + + for (Map<StringName, PropertyInfo>::Element *E = member_info.front(); E; E = E->next()) { + p_list->push_back(E->value()); + } +} + +int CSharpScript::get_member_line(const StringName &p_member) const { + + // TODO omnisharp + return -1; +} + +Error CSharpScript::load_source_code(const String &p_path) { + + PoolVector<uint8_t> sourcef; + Error err; + FileAccess *f = FileAccess::open(p_path, FileAccess::READ, &err); + ERR_FAIL_COND_V(err != OK, err); + + int len = f->get_len(); + sourcef.resize(len + 1); + PoolVector<uint8_t>::Write w = sourcef.write(); + int r = f->get_buffer(w.ptr(), len); + f->close(); + memdelete(f); + ERR_FAIL_COND_V(r != len, ERR_CANT_OPEN); + w[len] = 0; + + String s; + if (s.parse_utf8((const char *)w.ptr())) { + + ERR_EXPLAIN("Script '" + p_path + "' contains invalid unicode (utf-8), so it was not loaded. Please ensure that scripts are saved in valid utf-8 unicode."); + ERR_FAIL_V(ERR_INVALID_DATA); + } + + source = s; + +#ifdef TOOLS_ENABLED + source_changed_cache = true; +#endif + + return OK; +} + +StringName CSharpScript::get_script_name() const { + + return name; +} + +CSharpScript::CSharpScript() + : script_list(this) { + + _clear(); + +#ifdef TOOLS_ENABLED + source_changed_cache = false; + exports_invalidated = true; +#endif + + _resource_path_changed(); + +#ifdef DEBUG_ENABLED + +#ifndef NO_THREADS + CSharpLanguage::get_singleton()->lock->lock(); +#endif + + CSharpLanguage::get_singleton()->script_list.add(&script_list); + +#ifndef NO_THREADS + CSharpLanguage::get_singleton()->lock->unlock(); +#endif + +#endif // DEBUG_ENABLED +} + +CSharpScript::~CSharpScript() { + +#ifdef DEBUG_ENABLED + +#ifndef NO_THREADS + CSharpLanguage::get_singleton()->lock->lock(); +#endif + + CSharpLanguage::get_singleton()->script_list.remove(&script_list); + +#ifndef NO_THREADS + CSharpLanguage::get_singleton()->lock->unlock(); +#endif + +#endif // DEBUG_ENABLED +} + +/*************** RESOURCE ***************/ + +RES ResourceFormatLoaderCSharpScript::load(const String &p_path, const String &p_original_path, Error *r_error) { + + if (r_error) + *r_error = ERR_FILE_CANT_OPEN; + + // TODO ignore anything inside bin/ and obj/ in tools builds? + + CSharpScript *script = memnew(CSharpScript); + + Ref<CSharpScript> scriptres(script); + +#if defined(DEBUG_ENABLED) || defined(TOOLS_ENABLED) + Error err = script->load_source_code(p_path); + ERR_FAIL_COND_V(err != OK, RES()); +#endif + + script->set_path(p_original_path); + +#ifndef TOOLS_ENABLED + +#ifdef DEBUG_ENABLED + // User is responsible for thread attach/detach + ERR_EXPLAIN("Thread is not attached"); + CRASH_COND(mono_domain_get() == NULL); +#endif + +#else + if (Engine::get_singleton()->is_editor_hint() && mono_domain_get() == NULL) { + + CRASH_COND(Thread::get_caller_id() == Thread::get_main_id()); + + // Thread is not attached, but we will make an exception in this case + // because this may be called by one of the editor's worker threads. + // Attach this thread temporarily to reload the script. + + MonoThread *mono_thread = mono_thread_attach(SCRIPTS_DOMAIN); + CRASH_COND(mono_thread == NULL); + script->reload(); + mono_thread_detach(mono_thread); + + } else // just reload it normally +#endif + script->reload(); + + if (r_error) + *r_error = OK; + + return scriptres; +} + +void ResourceFormatLoaderCSharpScript::get_recognized_extensions(List<String> *p_extensions) const { + + p_extensions->push_back("cs"); +} + +bool ResourceFormatLoaderCSharpScript::handles_type(const String &p_type) const { + + return p_type == "Script" || p_type == CSharpLanguage::get_singleton()->get_type(); +} + +String ResourceFormatLoaderCSharpScript::get_resource_type(const String &p_path) const { + + return p_path.get_extension().to_lower() == "cs" ? CSharpLanguage::get_singleton()->get_type() : ""; +} + +Error ResourceFormatSaverCSharpScript::save(const String &p_path, const RES &p_resource, uint32_t p_flags) { + + Ref<CSharpScript> sqscr = p_resource; + ERR_FAIL_COND_V(sqscr.is_null(), ERR_INVALID_PARAMETER); + + String source = sqscr->get_source_code(); + +#ifdef TOOLS_ENABLED + if (!FileAccess::exists(p_path)) { + // The file does not yet exists, let's assume the user just created this script + + if (_create_project_solution_if_needed()) { + CSharpProject::add_item(GodotSharpDirs::get_project_csproj_path(), + "Compile", + ProjectSettings::get_singleton()->globalize_path(p_path)); + } else { + ERR_PRINTS("Cannot add " + p_path + " to the C# project because it could not be created."); + } + } +#endif + + Error err; + FileAccess *file = FileAccess::open(p_path, FileAccess::WRITE, &err); + ERR_FAIL_COND_V(err, err); + + file->store_string(source); + + if (file->get_error() != OK && file->get_error() != ERR_FILE_EOF) { + memdelete(file); + return ERR_CANT_CREATE; + } + + file->close(); + memdelete(file); + + if (ScriptServer::is_reload_scripts_on_save_enabled()) { + CSharpLanguage::get_singleton()->reload_tool_script(p_resource, false); + } + + return OK; +} + +void ResourceFormatSaverCSharpScript::get_recognized_extensions(const RES &p_resource, List<String> *p_extensions) const { + + if (Object::cast_to<CSharpScript>(p_resource.ptr())) { + p_extensions->push_back("cs"); + } +} + +bool ResourceFormatSaverCSharpScript::recognize(const RES &p_resource) const { + + return Object::cast_to<CSharpScript>(p_resource.ptr()) != NULL; +} + +CSharpLanguage::StringNameCache::StringNameCache() { + + _signal_callback = StaticCString::create("_signal_callback"); + _set = StaticCString::create("_set"); + _get = StaticCString::create("_get"); + _notification = StaticCString::create("_notification"); + dotctor = StaticCString::create(".ctor"); +} diff --git a/modules/mono/csharp_script.h b/modules/mono/csharp_script.h new file mode 100644 index 0000000000..6b8475fb61 --- /dev/null +++ b/modules/mono/csharp_script.h @@ -0,0 +1,340 @@ +/*************************************************************************/ +/* csharp_script.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 CSHARP_SCRIPT_H +#define CSHARP_SCRIPT_H + +#include "io/resource_loader.h" +#include "io/resource_saver.h" +#include "script_language.h" +#include "self_list.h" + +#include "mono_gc_handle.h" +#include "mono_gd/gd_mono.h" +#include "mono_gd/gd_mono_header.h" +#include "mono_gd/gd_mono_internals.h" + +class CSharpScript; +class CSharpInstance; +class CSharpLanguage; + +#ifdef NO_SAFE_CAST +template <typename TScriptInstance, typename TScriptLanguage> +TScriptInstance *cast_script_instance(ScriptInstance *p_inst) { + return p_inst->get_language() == TScriptLanguage::get_singleton() ? static_cast<TScriptInstance *>(p_inst) : NULL; +} +#else +template <typename TScriptInstance, typename TScriptLanguage> +TScriptInstance *cast_script_instance(ScriptInstance *p_inst) { + return dynamic_cast<TScriptInstance *>(p_inst); +} +#endif + +#define CAST_CSHARP_INSTANCE(m_inst) (cast_script_instance<CSharpInstance, CSharpLanguage>(m_inst)) + +class CSharpScript : public Script { + + GDCLASS(CSharpScript, Script) + + friend class CSharpInstance; + friend class CSharpLanguage; + friend class CSharpScriptDepSort; + + bool tool; + bool valid; + + bool builtin; + + GDMonoClass *base; + GDMonoClass *native; + GDMonoClass *script_class; + + Ref<CSharpScript> base_cache; // TODO what's this for? + + Set<Object *> instances; + + String source; + StringName name; + + SelfList<CSharpScript> script_list; + +#ifdef TOOLS_ENABLED + List<PropertyInfo> exported_members_cache; // members_cache + Map<StringName, Variant> exported_members_defval_cache; // member_default_values_cache + Set<PlaceHolderScriptInstance *> placeholders; + bool source_changed_cache; + bool exports_invalidated; + + void _update_exports_values(Map<StringName, Variant> &values, List<PropertyInfo> &propnames); + virtual void _placeholder_erased(PlaceHolderScriptInstance *p_placeholder); +#endif + +#ifdef DEBUG_ENABLED + Map<ObjectID, List<Pair<StringName, Variant> > > pending_reload_state; +#endif + + Map<StringName, PropertyInfo> member_info; + + void _clear(); + + bool _update_exports(); + CSharpInstance *_create_instance(const Variant **p_args, int p_argcount, Object *p_owner, bool p_isref, Variant::CallError &r_error); + Variant _new(const Variant **p_args, int p_argcount, Variant::CallError &r_error); + + // Do not use unless you know what you are doing + friend void GDMonoInternals::tie_managed_to_unmanaged(MonoObject *, Object *); + static Ref<CSharpScript> create_for_managed_type(GDMonoClass *p_class); + +protected: + static void _bind_methods(); + + Variant call(const StringName &p_method, const Variant **p_args, int p_argcount, Variant::CallError &r_error); + virtual void _resource_path_changed(); + +public: + virtual bool can_instance() 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); + + /* TODO */ virtual bool has_script_signal(const StringName &p_signal) const { return false; } + /* TODO */ virtual void get_script_signal_list(List<MethodInfo> *r_signals) const {} + + /* TODO */ virtual bool get_property_default_value(const StringName &p_property, Variant &r_value) const; + virtual void get_script_property_list(List<PropertyInfo> *p_list) const; + virtual void update_exports(); + + virtual bool is_tool() const { return tool; } + virtual Ref<Script> get_base_script() const; + virtual String get_node_type() const; + virtual ScriptLanguage *get_language() const; + + /* TODO */ virtual void get_script_method_list(List<MethodInfo> *p_list) const {} + bool has_method(const StringName &p_method) const; + /* TODO */ MethodInfo get_method_info(const StringName &p_method) const { return MethodInfo(); } + + virtual int get_member_line(const StringName &p_member) const; + + Error load_source_code(const String &p_path); + + StringName get_script_name() const; + + CSharpScript(); + ~CSharpScript(); +}; + +class CSharpInstance : public ScriptInstance { + + friend class CSharpScript; + friend class CSharpLanguage; + Object *owner; + Ref<CSharpScript> script; + Ref<MonoGCHandle> gchandle; + bool base_ref; + bool ref_dying; + + void _ml_call_reversed(GDMonoClass *klass, const StringName &p_method, const Variant **p_args, int p_argcount); + + void _reference_owner_unsafe(); + void _unreference_owner_unsafe(); + + // Do not use unless you know what you are doing + friend void GDMonoInternals::tie_managed_to_unmanaged(MonoObject *, Object *); + static CSharpInstance *create_for_managed_type(Object *p_owner, CSharpScript *p_script, const Ref<MonoGCHandle> &p_gchandle); + +public: + MonoObject *get_mono_object() const; + + 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) const; + + /* TODO */ 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 call_multilevel(const StringName &p_method, const Variant **p_args, int p_argcount); + virtual void call_multilevel_reversed(const StringName &p_method, const Variant **p_args, int p_argcount); + + void mono_object_disposed(); + + void refcount_incremented(); + bool refcount_decremented(); + + RPCMode get_rpc_mode(const StringName &p_method) const; + RPCMode get_rset_mode(const StringName &p_variable) const; + + virtual void notification(int p_notification); + + virtual Ref<Script> get_script() const; + + virtual ScriptLanguage *get_language(); + + CSharpInstance(); + ~CSharpInstance(); +}; + +class CSharpLanguage : public ScriptLanguage { + + friend class CSharpScript; + friend class CSharpInstance; + + static CSharpLanguage *singleton; + + GDMono *gdmono; + SelfList<CSharpScript>::List script_list; + + Mutex *lock; + Mutex *script_bind_lock; + + Map<Ref<CSharpScript>, Map<ObjectID, List<Pair<StringName, Variant> > > > to_reload; + + Map<Object *, Ref<MonoGCHandle> > gchandle_bindings; + + struct StringNameCache { + + StringName _signal_callback; + StringName _set; + StringName _get; + StringName _notification; + StringName dotctor; // .ctor + + StringNameCache(); + }; + + StringNameCache string_names; + + int lang_idx; + +public: + _FORCE_INLINE_ int get_language_index() { return lang_idx; } + void set_language_index(int p_idx); + + _FORCE_INLINE_ const StringNameCache &get_string_names() { return string_names; } + + _FORCE_INLINE_ static CSharpLanguage *get_singleton() { return singleton; } + + 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); + +#ifdef TOOLS_ENABLED + void reload_assemblies_if_needed(bool p_soft_reload); +#endif + + virtual String get_name() const; + + /* LANGUAGE FUNCTIONS */ + virtual String get_type() const; + virtual String get_extension() const; + virtual Error execute_file(const String &p_path); + virtual void init(); + 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; + /* TODO */ 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) const { return true; } + virtual Script *create_script() const; + virtual bool has_named_classes() const; + /* TODO? */ virtual int find_function(const String &p_function, const String &p_code) const { return -1; } + virtual String make_function(const String &p_class, const String &p_name, const PoolStringArray &p_args) const; + /* TODO? */ Error complete_code(const String &p_code, const String &p_base_path, Object *p_owner, List<String> *r_options, String &r_call_hint) { return ERR_UNAVAILABLE; } + /* TODO? */ virtual void auto_indent_code(String &p_code, int p_from_line, int p_to_line) const {} + /* TODO */ virtual void add_global_constant(const StringName &p_variable, const Variant &p_value) {} + + /* DEBUGGER FUNCTIONS */ + /* TODO */ virtual String debug_get_error() const { return ""; } + /* TODO */ virtual int debug_get_stack_level_count() const { return 1; } + /* TODO */ virtual int debug_get_stack_level_line(int p_level) const { return 1; } + /* TODO */ virtual String debug_get_stack_level_function(int p_level) const { return ""; } + /* TODO */ virtual String debug_get_stack_level_source(int p_level) const { return ""; } + /* TODO */ virtual void debug_get_stack_level_locals(int p_level, List<String> *p_locals, List<Variant> *p_values, int p_max_subitems, int p_max_depth) {} + /* TODO */ virtual void debug_get_stack_level_members(int p_level, List<String> *p_members, List<Variant> *p_values, int p_max_subitems, int p_max_depth) {} + /* TODO */ virtual void debug_get_globals(List<String> *p_locals, List<Variant> *p_values, int p_max_subitems, int p_max_depth) {} + /* TODO */ virtual String debug_parse_stack_level_expression(int p_level, const String &p_expression, int p_max_subitems, int p_max_depth) { return ""; } + /* TODO */ virtual Vector<StackInfo> debug_get_current_stack_info() { return Vector<StackInfo>(); } + + /* PROFILING FUNCTIONS */ + /* TODO */ virtual void profiling_start() {} + /* TODO */ virtual void profiling_stop() {} + /* TODO */ virtual int profiling_get_accumulated_data(ProfilingInfo *p_info_arr, int p_info_max) { return 0; } + /* TODO */ virtual int profiling_get_frame_data(ProfilingInfo *p_info_arr, int p_info_max) { return 0; } + + virtual void frame(); + + /* TODO? */ virtual void get_public_functions(List<MethodInfo> *p_functions) const {} + /* TODO? */ virtual void get_public_constants(List<Pair<String, Variant> > *p_constants) const {} + + 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; + +#ifdef TOOLS_ENABLED + virtual Error open_in_external_editor(const Ref<Script> &p_script, int p_line, int p_col); + virtual bool overrides_external_editor(); +#endif + + /* THREAD ATTACHING */ + virtual void thread_enter(); + virtual void thread_exit(); + + // Don't use these. I'm watching you + virtual void *alloc_instance_binding_data(Object *p_object); + virtual void free_instance_binding_data(void *p_data); + + CSharpLanguage(); + ~CSharpLanguage(); +}; + +class ResourceFormatLoaderCSharpScript : public ResourceFormatLoader { +public: + virtual RES load(const String &p_path, const String &p_original_path = "", Error *r_error = NULL); + virtual void get_recognized_extensions(List<String> *p_extensions) const; + virtual bool handles_type(const String &p_type) const; + virtual String get_resource_type(const String &p_path) const; +}; + +class ResourceFormatSaverCSharpScript : public ResourceFormatSaver { +public: + virtual Error save(const String &p_path, const RES &p_resource, uint32_t p_flags = 0); + virtual void get_recognized_extensions(const RES &p_resource, List<String> *p_extensions) const; + virtual bool recognize(const RES &p_resource) const; +}; + +#endif // CSHARP_SCRIPT_H diff --git a/modules/mono/doc_classes/@C#.xml b/modules/mono/doc_classes/@C#.xml new file mode 100644 index 0000000000..487ba9835f --- /dev/null +++ b/modules/mono/doc_classes/@C#.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<class name="@C#" category="Core" version="3.0.alpha.custom_build"> + <brief_description> + </brief_description> + <description> + </description> + <tutorials> + </tutorials> + <demos> + </demos> + <methods> + </methods> + <constants> + </constants> +</class> diff --git a/modules/mono/doc_classes/CSharpScript.xml b/modules/mono/doc_classes/CSharpScript.xml new file mode 100644 index 0000000000..5f21c9774d --- /dev/null +++ b/modules/mono/doc_classes/CSharpScript.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<class name="CSharpScript" inherits="Script" category="Core" version="3.0.alpha.custom_build"> + <brief_description> + </brief_description> + <description> + </description> + <tutorials> + </tutorials> + <demos> + </demos> + <methods> + <method name="new" qualifiers="vararg"> + <return type="Object"> + </return> + <description> + </description> + </method> + </methods> + <constants> + </constants> +</class> diff --git a/modules/mono/doc_classes/GodotSharp.xml b/modules/mono/doc_classes/GodotSharp.xml new file mode 100644 index 0000000000..e7e06ddd8f --- /dev/null +++ b/modules/mono/doc_classes/GodotSharp.xml @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<class name="GodotSharp" inherits="Object" category="Core" version="3.0.alpha.custom_build"> + <brief_description> + </brief_description> + <description> + </description> + <tutorials> + </tutorials> + <demos> + </demos> + <methods> + <method name="attach_thread"> + <return type="void"> + </return> + <description> + Attaches the current thread to the mono runtime. + </description> + </method> + <method name="detach_thread"> + <return type="void"> + </return> + <description> + Detaches the current thread from the mono runtime. + </description> + </method> + <method name="is_domain_loaded"> + <return type="bool"> + </return> + <description> + Returns whether the scripts domain is loaded. + </description> + </method> + <method name="is_finalizing_domain"> + <return type="bool"> + </return> + <description> + Returns whether the scripts domain is being finalized. + </description> + </method> + </methods> + <constants> + </constants> +</class> diff --git a/modules/mono/editor/GodotSharpTools/Build/BuildSystem.cs b/modules/mono/editor/GodotSharpTools/Build/BuildSystem.cs new file mode 100644 index 0000000000..5544233eb7 --- /dev/null +++ b/modules/mono/editor/GodotSharpTools/Build/BuildSystem.cs @@ -0,0 +1,343 @@ +using System; +using System.Collections.Generic; +using System.Collections.Specialized; +using System.Diagnostics; +using System.IO; +using System.Runtime.CompilerServices; +using System.Security; +using Microsoft.Build.Framework; + +namespace GodotSharpTools.Build +{ + public class BuildInstance : IDisposable + { + [MethodImpl(MethodImplOptions.InternalCall)] + internal extern static void godot_icall_BuildInstance_ExitCallback(string solution, string config, int exitCode); + + [MethodImpl(MethodImplOptions.InternalCall)] + internal extern static string godot_icall_BuildInstance_get_MSBuildPath(); + + private static string MSBuildPath + { + get + { + string ret = godot_icall_BuildInstance_get_MSBuildPath(); + + if (ret == null) + throw new FileNotFoundException("Cannot find the MSBuild executable."); + + return ret; + } + } + + private string solution; + private string config; + + private Process process; + + private int exitCode; + public int ExitCode { get { return exitCode; } } + + public bool IsRunning { get { return process != null && !process.HasExited; } } + + public BuildInstance(string solution, string config) + { + this.solution = solution; + this.config = config; + } + + public bool Build(string loggerAssemblyPath, string loggerOutputDir, string[] customProperties = null) + { + string compilerArgs = BuildArguments(loggerAssemblyPath, loggerOutputDir, customProperties); + + ProcessStartInfo startInfo = new ProcessStartInfo(MSBuildPath, compilerArgs); + + // No console output, thanks + startInfo.RedirectStandardOutput = true; + startInfo.RedirectStandardError = true; + startInfo.UseShellExecute = false; + + // Needed when running from Developer Command Prompt for VS + RemovePlatformVariable(startInfo.EnvironmentVariables); + + using (Process process = new Process()) + { + process.StartInfo = startInfo; + + process.Start(); + + process.BeginOutputReadLine(); + process.BeginErrorReadLine(); + + process.WaitForExit(); + + exitCode = process.ExitCode; + } + + return true; + } + + public bool BuildAsync(string loggerAssemblyPath, string loggerOutputDir, string[] customProperties = null) + { + if (process != null) + throw new InvalidOperationException("Already in use"); + + string compilerArgs = BuildArguments(loggerAssemblyPath, loggerOutputDir, customProperties); + + ProcessStartInfo startInfo = new ProcessStartInfo("msbuild", compilerArgs); + + // No console output, thanks + startInfo.RedirectStandardOutput = true; + startInfo.RedirectStandardError = true; + startInfo.UseShellExecute = false; + + // Needed when running from Developer Command Prompt for VS + RemovePlatformVariable(startInfo.EnvironmentVariables); + + process = new Process(); + process.StartInfo = startInfo; + process.EnableRaisingEvents = true; + process.Exited += new EventHandler(BuildProcess_Exited); + + process.Start(); + + return true; + } + + private string BuildArguments(string loggerAssemblyPath, string loggerOutputDir, string[] customProperties) + { + string arguments = string.Format(@"""{0}"" /v:normal /t:Build ""/p:{1}"" ""/l:{2},{3};{4}""", + solution, + "Configuration=" + config, + typeof(GodotBuildLogger).FullName, + loggerAssemblyPath, + loggerOutputDir + ); + + if (customProperties != null) + { + foreach (string customProperty in customProperties) + { + arguments += " /p:" + customProperty; + } + } + + return arguments; + } + + private void RemovePlatformVariable(StringDictionary environmentVariables) + { + // EnvironmentVariables is case sensitive? Seriously? + + List<string> platformEnvironmentVariables = new List<string>(); + + foreach (string env in environmentVariables.Keys) + { + if (env.ToUpper() == "PLATFORM") + platformEnvironmentVariables.Add(env); + } + + foreach (string env in platformEnvironmentVariables) + environmentVariables.Remove(env); + } + + private void BuildProcess_Exited(object sender, System.EventArgs e) + { + exitCode = process.ExitCode; + + godot_icall_BuildInstance_ExitCallback(solution, config, exitCode); + + Dispose(); + } + + public void Dispose() + { + if (process != null) + { + process.Dispose(); + process = null; + } + } + } + + public class GodotBuildLogger : ILogger + { + public string Parameters { get; set; } + public LoggerVerbosity Verbosity { get; set; } + + public void Initialize(IEventSource eventSource) + { + if (null == Parameters) + throw new LoggerException("Log directory was not set."); + + string[] parameters = Parameters.Split(';'); + + string logDir = parameters[0]; + + if (String.IsNullOrEmpty(logDir)) + throw new LoggerException("Log directory was not set."); + + if (parameters.Length > 1) + throw new LoggerException("Too many parameters passed."); + + string logFile = Path.Combine(logDir, "msbuild_log.txt"); + string issuesFile = Path.Combine(logDir, "msbuild_issues.csv"); + + try + { + if (!Directory.Exists(logDir)) + Directory.CreateDirectory(logDir); + + this.logStreamWriter = new StreamWriter(logFile); + this.issuesStreamWriter = new StreamWriter(issuesFile); + } + catch (Exception ex) + { + if + ( + ex is UnauthorizedAccessException + || ex is ArgumentNullException + || ex is PathTooLongException + || ex is DirectoryNotFoundException + || ex is NotSupportedException + || ex is ArgumentException + || ex is SecurityException + || ex is IOException + ) + { + throw new LoggerException("Failed to create log file: " + ex.Message); + } + else + { + // Unexpected failure + throw; + } + } + + eventSource.ProjectStarted += new ProjectStartedEventHandler(eventSource_ProjectStarted); + eventSource.TaskStarted += new TaskStartedEventHandler(eventSource_TaskStarted); + eventSource.MessageRaised += new BuildMessageEventHandler(eventSource_MessageRaised); + eventSource.WarningRaised += new BuildWarningEventHandler(eventSource_WarningRaised); + eventSource.ErrorRaised += new BuildErrorEventHandler(eventSource_ErrorRaised); + eventSource.ProjectFinished += new ProjectFinishedEventHandler(eventSource_ProjectFinished); + } + + void eventSource_ErrorRaised(object sender, BuildErrorEventArgs e) + { + string line = String.Format("{0}({1},{2}): error {3}: {4}", e.File, e.LineNumber, e.ColumnNumber, e.Code, e.Message); + + if (e.ProjectFile.Length > 0) + line += string.Format(" [{0}]", e.ProjectFile); + + WriteLine(line); + + string errorLine = String.Format(@"error,{0},{1},{2},{3},{4},{5}", + e.File.CsvEscape(), e.LineNumber, e.ColumnNumber, + e.Code.CsvEscape(), e.Message.CsvEscape(), e.ProjectFile.CsvEscape()); + issuesStreamWriter.WriteLine(errorLine); + } + + void eventSource_WarningRaised(object sender, BuildWarningEventArgs e) + { + string line = String.Format("{0}({1},{2}): warning {3}: {4}", e.File, e.LineNumber, e.ColumnNumber, e.Code, e.Message, e.ProjectFile); + + if (e.ProjectFile != null && e.ProjectFile.Length > 0) + line += string.Format(" [{0}]", e.ProjectFile); + + WriteLine(line); + + string warningLine = String.Format(@"warning,{0},{1},{2},{3},{4},{5}", + e.File.CsvEscape(), e.LineNumber, e.ColumnNumber, + e.Code.CsvEscape(), e.Message.CsvEscape(), e.ProjectFile != null ? e.ProjectFile.CsvEscape() : string.Empty); + issuesStreamWriter.WriteLine(warningLine); + } + + void eventSource_MessageRaised(object sender, BuildMessageEventArgs e) + { + // BuildMessageEventArgs adds Importance to BuildEventArgs + // Let's take account of the verbosity setting we've been passed in deciding whether to log the message + if ((e.Importance == MessageImportance.High && IsVerbosityAtLeast(LoggerVerbosity.Minimal)) + || (e.Importance == MessageImportance.Normal && IsVerbosityAtLeast(LoggerVerbosity.Normal)) + || (e.Importance == MessageImportance.Low && IsVerbosityAtLeast(LoggerVerbosity.Detailed)) + ) + { + WriteLineWithSenderAndMessage(String.Empty, e); + } + } + + void eventSource_TaskStarted(object sender, TaskStartedEventArgs e) + { + // TaskStartedEventArgs adds ProjectFile, TaskFile, TaskName + // To keep this log clean, this logger will ignore these events. + } + + void eventSource_ProjectStarted(object sender, ProjectStartedEventArgs e) + { + WriteLine(e.Message); + indent++; + } + + void eventSource_ProjectFinished(object sender, ProjectFinishedEventArgs e) + { + indent--; + WriteLine(e.Message); + } + + /// <summary> + /// Write a line to the log, adding the SenderName + /// </summary> + private void WriteLineWithSender(string line, BuildEventArgs e) + { + if (0 == String.Compare(e.SenderName, "MSBuild", true /*ignore case*/)) + { + // Well, if the sender name is MSBuild, let's leave it out for prettiness + WriteLine(line); + } + else + { + WriteLine(e.SenderName + ": " + line); + } + } + + /// <summary> + /// Write a line to the log, adding the SenderName and Message + /// (these parameters are on all MSBuild event argument objects) + /// </summary> + private void WriteLineWithSenderAndMessage(string line, BuildEventArgs e) + { + if (0 == String.Compare(e.SenderName, "MSBuild", true /*ignore case*/)) + { + // Well, if the sender name is MSBuild, let's leave it out for prettiness + WriteLine(line + e.Message); + } + else + { + WriteLine(e.SenderName + ": " + line + e.Message); + } + } + + private void WriteLine(string line) + { + for (int i = indent; i > 0; i--) + { + logStreamWriter.Write("\t"); + } + logStreamWriter.WriteLine(line); + } + + public void Shutdown() + { + logStreamWriter.Close(); + issuesStreamWriter.Close(); + } + + public bool IsVerbosityAtLeast(LoggerVerbosity checkVerbosity) + { + return this.Verbosity >= checkVerbosity; + } + + private StreamWriter logStreamWriter; + private StreamWriter issuesStreamWriter; + private int indent; + } +} diff --git a/modules/mono/editor/GodotSharpTools/Editor/MonoDevelopInstance.cs b/modules/mono/editor/GodotSharpTools/Editor/MonoDevelopInstance.cs new file mode 100644 index 0000000000..303be3b732 --- /dev/null +++ b/modules/mono/editor/GodotSharpTools/Editor/MonoDevelopInstance.cs @@ -0,0 +1,58 @@ +using System; +using System.IO; +using System.Collections.Generic; +using System.Diagnostics; + +namespace GodotSharpTools.Editor +{ + public class MonoDevelopInstance + { + private Process process; + private string solutionFile; + + public void Execute(string[] files) + { + bool newWindow = process == null || process.HasExited; + + List<string> args = new List<string>(); + + args.Add("--ipc-tcp"); + + if (newWindow) + args.Add("\"" + Path.GetFullPath(solutionFile) + "\""); + + foreach (var file in files) + { + int semicolonIndex = file.IndexOf(';'); + + string filePath = semicolonIndex < 0 ? file : file.Substring(0, semicolonIndex); + string cursor = semicolonIndex < 0 ? string.Empty : file.Substring(semicolonIndex); + + args.Add("\"" + Path.GetFullPath(filePath.NormalizePath()) + cursor + "\""); + } + + if (newWindow) + { + ProcessStartInfo startInfo = new ProcessStartInfo(MonoDevelopFile, string.Join(" ", args)); + process = Process.Start(startInfo); + } + else + { + Process.Start(MonoDevelopFile, string.Join(" ", args)); + } + } + + public MonoDevelopInstance(string solutionFile) + { + this.solutionFile = solutionFile; + } + + private static string MonoDevelopFile + { + get + { + return "monodevelop"; + } + } + } +} diff --git a/modules/mono/editor/GodotSharpTools/GodotSharpTools.csproj b/modules/mono/editor/GodotSharpTools/GodotSharpTools.csproj new file mode 100644 index 0000000000..981083a3c2 --- /dev/null +++ b/modules/mono/editor/GodotSharpTools/GodotSharpTools.csproj @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <PropertyGroup> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <ProjectGuid>{A8CDAD94-C6D4-4B19-A7E7-76C53CC92984}</ProjectGuid> + <OutputType>Library</OutputType> + <RootNamespace>GodotSharpTools</RootNamespace> + <AssemblyName>GodotSharpTools</AssemblyName> + <TargetFrameworkVersion>v4.5</TargetFrameworkVersion> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> + <DebugSymbols>true</DebugSymbols> + <DebugType>full</DebugType> + <Optimize>false</Optimize> + <OutputPath>bin\Debug</OutputPath> + <DefineConstants>DEBUG;</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + <ConsolePause>false</ConsolePause> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> + <DebugType>full</DebugType> + <Optimize>true</Optimize> + <OutputPath>bin\Release</OutputPath> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + <ConsolePause>false</ConsolePause> + </PropertyGroup> + <ItemGroup> + <Reference Include="System" /> + <Reference Include="Microsoft.Build" /> + <Reference Include="Microsoft.Build.Framework" /> + </ItemGroup> + <ItemGroup> + <Compile Include="StringExtensions.cs" /> + <Compile Include="Build\BuildSystem.cs" /> + <Compile Include="Editor\MonoDevelopInstance.cs" /> + <Compile Include="Project\ProjectExtensions.cs" /> + <Compile Include="Project\ProjectGenerator.cs" /> + <Compile Include="Project\ProjectUtils.cs" /> + <Compile Include="Properties\AssemblyInfo.cs" /> + </ItemGroup> + <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> +</Project>
\ No newline at end of file diff --git a/modules/mono/editor/GodotSharpTools/GodotSharpTools.sln b/modules/mono/editor/GodotSharpTools/GodotSharpTools.sln new file mode 100644 index 0000000000..7eabcdff5d --- /dev/null +++ b/modules/mono/editor/GodotSharpTools/GodotSharpTools.sln @@ -0,0 +1,17 @@ +
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2012
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GodotSharpTools", "GodotSharpTools.csproj", "{A8CDAD94-C6D4-4B19-A7E7-76C53CC92984}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {A8CDAD94-C6D4-4B19-A7E7-76C53CC92984}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A8CDAD94-C6D4-4B19-A7E7-76C53CC92984}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A8CDAD94-C6D4-4B19-A7E7-76C53CC92984}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A8CDAD94-C6D4-4B19-A7E7-76C53CC92984}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+EndGlobal
diff --git a/modules/mono/editor/GodotSharpTools/GodotSharpTools.userprefs b/modules/mono/editor/GodotSharpTools/GodotSharpTools.userprefs new file mode 100644 index 0000000000..0cbafdc20d --- /dev/null +++ b/modules/mono/editor/GodotSharpTools/GodotSharpTools.userprefs @@ -0,0 +1,14 @@ +<Properties StartupItem="GodotSharpTools.csproj"> + <MonoDevelop.Ide.Workspace ActiveConfiguration="Debug" /> + <MonoDevelop.Ide.Workbench ActiveDocument="Build/BuildSystem.cs"> + <Files> + <File FileName="Build/ProjectExtensions.cs" Line="1" Column="1" /> + <File FileName="Build/ProjectGenerator.cs" Line="1" Column="1" /> + <File FileName="Build/BuildSystem.cs" Line="37" Column="14" /> + </Files> + </MonoDevelop.Ide.Workbench> + <MonoDevelop.Ide.DebuggingService.Breakpoints> + <BreakpointStore /> + </MonoDevelop.Ide.DebuggingService.Breakpoints> + <MonoDevelop.Ide.DebuggingService.PinnedWatches /> +</Properties>
\ No newline at end of file diff --git a/modules/mono/editor/GodotSharpTools/Project/ProjectExtensions.cs b/modules/mono/editor/GodotSharpTools/Project/ProjectExtensions.cs new file mode 100644 index 0000000000..f00ec5a2ad --- /dev/null +++ b/modules/mono/editor/GodotSharpTools/Project/ProjectExtensions.cs @@ -0,0 +1,52 @@ +using System; +using Microsoft.Build.Construction; + +namespace GodotSharpTools.Project +{ + public static class ProjectExtensions + { + public static bool HasItem(this ProjectRootElement root, string itemType, string include) + { + string includeNormalized = include.NormalizePath(); + + foreach (var itemGroup in root.ItemGroups) + { + if (itemGroup.Condition.Length != 0) + continue; + + foreach (var item in itemGroup.Items) + { + if (item.ItemType == itemType) + { + if (item.Include.NormalizePath() == includeNormalized) + return true; + } + } + } + + return false; + } + + public static bool AddItemChecked(this ProjectRootElement root, string itemType, string include) + { + if (!root.HasItem(itemType, include)) + { + root.AddItem(itemType, include); + return true; + } + + return false; + } + + public static Guid GetGuid(this ProjectRootElement root) + { + foreach (var property in root.Properties) + { + if (property.Name == "ProjectGuid") + return Guid.Parse(property.Value); + } + + return Guid.Empty; + } + } +} diff --git a/modules/mono/editor/GodotSharpTools/Project/ProjectGenerator.cs b/modules/mono/editor/GodotSharpTools/Project/ProjectGenerator.cs new file mode 100644 index 0000000000..6bf54a0156 --- /dev/null +++ b/modules/mono/editor/GodotSharpTools/Project/ProjectGenerator.cs @@ -0,0 +1,216 @@ +using System; +using System.IO; +using Microsoft.Build.Construction; + +namespace GodotSharpTools.Project +{ + public static class ProjectGenerator + { + public static string GenCoreApiProject(string dir, string[] compileItems) + { + string path = Path.Combine(dir, CoreApiProject + ".csproj"); + + ProjectPropertyGroupElement mainGroup; + var root = CreateLibraryProject(CoreApiProject, out mainGroup); + + mainGroup.AddProperty("DocumentationFile", Path.Combine("$(OutputPath)", "$(AssemblyName).xml")); + mainGroup.SetProperty("RootNamespace", "Godot"); + + GenAssemblyInfoFile(root, dir, CoreApiProject, + new string[] { "[assembly: InternalsVisibleTo(\"" + EditorApiProject + "\")]" }, + new string[] { "System.Runtime.CompilerServices" }); + + foreach (var item in compileItems) + { + root.AddItem("Compile", item.RelativeToPath(dir).Replace("/", "\\")); + } + + root.Save(path); + + return root.GetGuid().ToString().ToUpper(); + } + + public static string GenEditorApiProject(string dir, string coreApiHintPath, string[] compileItems) + { + string path = Path.Combine(dir, EditorApiProject + ".csproj"); + + ProjectPropertyGroupElement mainGroup; + var root = CreateLibraryProject(EditorApiProject, out mainGroup); + + mainGroup.AddProperty("DocumentationFile", Path.Combine("$(OutputPath)", "$(AssemblyName).xml")); + mainGroup.SetProperty("RootNamespace", "Godot"); + + GenAssemblyInfoFile(root, dir, EditorApiProject); + + foreach (var item in compileItems) + { + root.AddItem("Compile", item.RelativeToPath(dir).Replace("/", "\\")); + } + + var coreApiRef = root.AddItem("Reference", CoreApiProject); + coreApiRef.AddMetadata("HintPath", coreApiHintPath); + coreApiRef.AddMetadata("Private", "False"); + + root.Save(path); + + return root.GetGuid().ToString().ToUpper(); + } + + public static string GenGameProject(string dir, string name, string[] compileItems) + { + string path = Path.Combine(dir, name + ".csproj"); + + ProjectPropertyGroupElement mainGroup; + var root = CreateLibraryProject(name, out mainGroup); + + mainGroup.SetProperty("OutputPath", Path.Combine(".mono", "temp", "bin", "$(Configuration)")); + mainGroup.SetProperty("BaseIntermediateOutputPath", Path.Combine(".mono", "temp", "obj")); + mainGroup.SetProperty("IntermediateOutputPath", Path.Combine("$(BaseIntermediateOutputPath)", "$(Configuration)")); + + var toolsGroup = root.AddPropertyGroup(); + toolsGroup.Condition = " '$(Configuration)|$(Platform)' == 'Tools|AnyCPU' "; + toolsGroup.AddProperty("DebugSymbols", "true"); + toolsGroup.AddProperty("DebugType", "full"); + toolsGroup.AddProperty("Optimize", "false"); + toolsGroup.AddProperty("DefineConstants", "DEBUG;TOOLS;"); + toolsGroup.AddProperty("ErrorReport", "prompt"); + toolsGroup.AddProperty("WarningLevel", "4"); + toolsGroup.AddProperty("ConsolePause", "false"); + + var coreApiRef = root.AddItem("Reference", CoreApiProject); + coreApiRef.AddMetadata("HintPath", Path.Combine("$(ProjectDir)", ".mono", "assemblies", CoreApiProject + ".dll")); + coreApiRef.AddMetadata("Private", "False"); + + var editorApiRef = root.AddItem("Reference", EditorApiProject); + editorApiRef.Condition = " '$(Configuration)' == 'Tools' "; + editorApiRef.AddMetadata("HintPath", Path.Combine("$(ProjectDir)", ".mono", "assemblies", EditorApiProject + ".dll")); + editorApiRef.AddMetadata("Private", "False"); + + GenAssemblyInfoFile(root, dir, name); + + foreach (var item in compileItems) + { + root.AddItem("Compile", item.RelativeToPath(dir).Replace("/", "\\")); + } + + root.Save(path); + + return root.GetGuid().ToString().ToUpper(); + } + + public static void GenAssemblyInfoFile(ProjectRootElement root, string dir, string name, string[] assemblyLines = null, string[] usingDirectives = null) + { + + string propertiesDir = Path.Combine(dir, "Properties"); + if (!Directory.Exists(propertiesDir)) + Directory.CreateDirectory(propertiesDir); + + string usingDirectivesText = string.Empty; + + if (usingDirectives != null) + { + foreach (var usingDirective in usingDirectives) + usingDirectivesText += "\nusing " + usingDirective + ";"; + } + + string assemblyLinesText = string.Empty; + + if (assemblyLines != null) + { + foreach (var assemblyLine in assemblyLines) + assemblyLinesText += string.Join("\n", assemblyLines) + "\n"; + } + + string content = string.Format(assemblyInfoTemplate, usingDirectivesText, name, assemblyLinesText); + + string assemblyInfoFile = Path.Combine(propertiesDir, "AssemblyInfo.cs"); + + File.WriteAllText(assemblyInfoFile, content); + + root.AddItem("Compile", assemblyInfoFile.RelativeToPath(dir).Replace("/", "\\")); + } + + public static ProjectRootElement CreateLibraryProject(string name, out ProjectPropertyGroupElement mainGroup) + { + var root = ProjectRootElement.Create(); + root.DefaultTargets = "Build"; + + mainGroup = root.AddPropertyGroup(); + mainGroup.AddProperty("Configuration", "Debug").Condition = " '$(Configuration)' == '' "; + mainGroup.AddProperty("Platform", "AnyCPU").Condition = " '$(Platform)' == '' "; + mainGroup.AddProperty("ProjectGuid", "{" + Guid.NewGuid().ToString().ToUpper() + "}"); + mainGroup.AddProperty("OutputType", "Library"); + mainGroup.AddProperty("OutputPath", Path.Combine("bin", "$(Configuration)")); + mainGroup.AddProperty("RootNamespace", name); + mainGroup.AddProperty("AssemblyName", name); + mainGroup.AddProperty("TargetFrameworkVersion", "v4.5"); + + var debugGroup = root.AddPropertyGroup(); + debugGroup.Condition = " '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "; + debugGroup.AddProperty("DebugSymbols", "true"); + debugGroup.AddProperty("DebugType", "full"); + debugGroup.AddProperty("Optimize", "false"); + debugGroup.AddProperty("DefineConstants", "DEBUG;"); + debugGroup.AddProperty("ErrorReport", "prompt"); + debugGroup.AddProperty("WarningLevel", "4"); + debugGroup.AddProperty("ConsolePause", "false"); + + var releaseGroup = root.AddPropertyGroup(); + releaseGroup.Condition = " '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "; + releaseGroup.AddProperty("DebugType", "full"); + releaseGroup.AddProperty("Optimize", "true"); + releaseGroup.AddProperty("ErrorReport", "prompt"); + releaseGroup.AddProperty("WarningLevel", "4"); + releaseGroup.AddProperty("ConsolePause", "false"); + + // References + var referenceGroup = root.AddItemGroup(); + referenceGroup.AddItem("Reference", "System"); + + root.AddImport(Path.Combine("$(MSBuildBinPath)", "Microsoft.CSharp.targets").Replace("/", "\\")); + + return root; + } + + private static void AddItems(ProjectRootElement elem, string groupName, params string[] items) + { + var group = elem.AddItemGroup(); + + foreach (var item in items) + { + group.AddItem(groupName, item); + } + } + + public const string CoreApiProject = "GodotSharp"; + public const string EditorApiProject = "GodotSharpEditor"; + + private const string assemblyInfoTemplate = +@"using System.Reflection;{0} + +// Information about this assembly is defined by the following attributes. +// Change them to the values specific to your project. + +[assembly: AssemblyTitle(""{1}"")] +[assembly: AssemblyDescription("""")] +[assembly: AssemblyConfiguration("""")] +[assembly: AssemblyCompany("""")] +[assembly: AssemblyProduct("""")] +[assembly: AssemblyCopyright("""")] +[assembly: AssemblyTrademark("""")] +[assembly: AssemblyCulture("""")] + +// The assembly version has the format ""{{Major}}.{{Minor}}.{{Build}}.{{Revision}}"". +// The form ""{{Major}}.{{Minor}}.*"" will automatically update the build and revision, +// and ""{{Major}}.{{Minor}}.{{Build}}.*"" will update just the revision. + +[assembly: AssemblyVersion(""1.0.*"")] + +// The following attributes are used to specify the signing key for the assembly, +// if desired. See the Mono documentation for more information about signing. + +//[assembly: AssemblyDelaySign(false)] +//[assembly: AssemblyKeyFile("""")] +{2}"; + } +} diff --git a/modules/mono/editor/GodotSharpTools/Project/ProjectUtils.cs b/modules/mono/editor/GodotSharpTools/Project/ProjectUtils.cs new file mode 100644 index 0000000000..6889ea715f --- /dev/null +++ b/modules/mono/editor/GodotSharpTools/Project/ProjectUtils.cs @@ -0,0 +1,17 @@ +using System; +using System.IO; +using Microsoft.Build.Construction; + +namespace GodotSharpTools.Project +{ + public static class ProjectUtils + { + public static void AddItemToProjectChecked(string projectPath, string itemType, string include) + { + var dir = Directory.GetParent(projectPath).FullName; + var root = ProjectRootElement.Open(projectPath); + if (root.AddItemChecked(itemType, include.RelativeToPath(dir).Replace("/", "\\"))) + root.Save(); + } + } +} diff --git a/modules/mono/editor/GodotSharpTools/Properties/AssemblyInfo.cs b/modules/mono/editor/GodotSharpTools/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000..7115d8fc71 --- /dev/null +++ b/modules/mono/editor/GodotSharpTools/Properties/AssemblyInfo.cs @@ -0,0 +1,27 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +// Information about this assembly is defined by the following attributes. +// Change them to the values specific to your project. + +[assembly: AssemblyTitle("GodotSharpTools")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("")] +[assembly: AssemblyCopyright("ignacio")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}". +// The form "{Major}.{Minor}.*" will automatically update the build and revision, +// and "{Major}.{Minor}.{Build}.*" will update just the revision. + +[assembly: AssemblyVersion("1.0.*")] + +// The following attributes are used to specify the signing key for the assembly, +// if desired. See the Mono documentation for more information about signing. + +//[assembly: AssemblyDelaySign(false)] +//[assembly: AssemblyKeyFile("")] + diff --git a/modules/mono/editor/GodotSharpTools/StringExtensions.cs b/modules/mono/editor/GodotSharpTools/StringExtensions.cs new file mode 100644 index 0000000000..b66c86f8ce --- /dev/null +++ b/modules/mono/editor/GodotSharpTools/StringExtensions.cs @@ -0,0 +1,52 @@ +using System; +using System.IO; + +namespace GodotSharpTools +{ + public static class StringExtensions + { + public static string RelativeToPath(this string path, string dir) + { + // Make sure the directory ends with a path separator + dir = Path.Combine(dir, " ").TrimEnd(); + + if (Path.DirectorySeparatorChar == '\\') + dir = dir.Replace("/", "\\") + "\\"; + + Uri fullPath = new Uri(Path.GetFullPath(path), UriKind.Absolute); + Uri relRoot = new Uri(Path.GetFullPath(dir), UriKind.Absolute); + + return relRoot.MakeRelativeUri(fullPath).ToString(); + } + + public static string NormalizePath(this string path) + { + bool rooted = path.IsAbsolutePath(); + + path = path.Replace('\\', '/'); + + string[] parts = path.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries); + + path = string.Join(Path.DirectorySeparatorChar.ToString(), parts).Trim(); + + return rooted ? Path.DirectorySeparatorChar.ToString() + path : path; + } + + private static readonly string driveRoot = Path.GetPathRoot(Environment.CurrentDirectory); + + public static bool IsAbsolutePath(this string path) + { + return path.StartsWith("/") || path.StartsWith("\\") || path.StartsWith(driveRoot); + } + + public static string CsvEscape(this string value, char delimiter = ',') + { + bool hasSpecialChar = value.IndexOfAny(new char[] { '\"', '\n', '\r', delimiter }) != -1; + + if (hasSpecialChar) + return "\"" + value.Replace("\"", "\"\"") + "\""; + + return value; + } + } +} diff --git a/modules/mono/editor/bindings_generator.cpp b/modules/mono/editor/bindings_generator.cpp new file mode 100644 index 0000000000..95e75f9103 --- /dev/null +++ b/modules/mono/editor/bindings_generator.cpp @@ -0,0 +1,2108 @@ +/*************************************************************************/ +/* bindings_generator.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 "bindings_generator.h" + +#ifdef DEBUG_METHODS_ENABLED + +#include "global_constants.h" +#include "io/compression.h" +#include "os/dir_access.h" +#include "os/file_access.h" +#include "os/os.h" +#include "project_settings.h" +#include "ucaps.h" + +#include "../glue/cs_compressed.gen.h" +#include "../godotsharp_defs.h" +#include "../mono_gd/gd_mono_marshal.h" +#include "../utils/path_utils.h" +#include "../utils/string_utils.h" +#include "csharp_project.h" +#include "net_solution.h" + +#define CS_INDENT " " + +#define INDENT1 CS_INDENT +#define INDENT2 INDENT1 INDENT1 +#define INDENT3 INDENT2 INDENT1 +#define INDENT4 INDENT3 INDENT1 +#define INDENT5 INDENT4 INDENT1 + +#define MEMBER_BEGIN "\n" INDENT2 + +#define OPEN_BLOCK "{\n" +#define CLOSE_BLOCK "}\n" + +#define OPEN_BLOCK_L2 INDENT2 OPEN_BLOCK INDENT3 +#define OPEN_BLOCK_L3 INDENT3 OPEN_BLOCK INDENT4 +#define OPEN_BLOCK_L4 INDENT4 OPEN_BLOCK INDENT5 +#define CLOSE_BLOCK_L2 INDENT2 CLOSE_BLOCK +#define CLOSE_BLOCK_L3 INDENT3 CLOSE_BLOCK +#define CLOSE_BLOCK_L4 INDENT4 CLOSE_BLOCK + +#define LOCAL_RET "ret" + +#define CS_CLASS_NATIVECALLS "NativeCalls" +#define CS_CLASS_NATIVECALLS_EDITOR "EditorNativeCalls" +#define CS_FIELD_MEMORYOWN "memoryOwn" +#define CS_PARAM_METHODBIND "method" +#define CS_PARAM_INSTANCE "ptr" +#define CS_SMETHOD_GETINSTANCE "GetPtr" +#define CS_FIELD_SINGLETON "instance" +#define CS_PROP_SINGLETON "Instance" +#define CS_CLASS_SIGNALAWAITER "SignalAwaiter" +#define CS_METHOD_CALL "Call" + +#define GLUE_HEADER_FILE "glue_header.h" +#define ICALL_PREFIX "godot_icall_" +#define SINGLETON_ICALL_SUFFIX "_get_singleton" +#define ICALL_GET_METHODBIND ICALL_PREFIX "ClassDB_get_method" +#define ICALL_CONNECT_SIGNAL_AWAITER ICALL_PREFIX "Object_connect_signal_awaiter" +#define ICALL_OBJECT_DTOR ICALL_PREFIX "Object_Dtor" +#define C_LOCAL_PTRCALL_ARGS "call_args" +#define C_MACRO_OBJECT_CONSTRUCT "GODOTSHARP_INSTANCE_OBJECT" + +#define C_NS_MONOUTILS "GDMonoUtils" +#define C_NS_MONOINTERNALS "GDMonoInternals" +#define C_METHOD_TIE_MANAGED_TO_UNMANAGED C_NS_MONOINTERNALS "::tie_managed_to_unmanaged" +#define C_METHOD_UNMANAGED_GET_MANAGED C_NS_MONOUTILS "::unmanaged_get_managed" + +#define C_NS_MONOMARSHAL "GDMonoMarshal" +#define C_METHOD_MANAGED_TO_VARIANT C_NS_MONOMARSHAL "::mono_object_to_variant" +#define C_METHOD_MANAGED_FROM_VARIANT C_NS_MONOMARSHAL "::variant_to_mono_object" +#define C_METHOD_MONOSTR_TO_GODOT C_NS_MONOMARSHAL "::mono_string_to_godot" +#define C_METHOD_MONOSTR_FROM_GODOT C_NS_MONOMARSHAL "::mono_string_from_godot" +#define C_METHOD_MONOARRAY_TO(m_type) C_NS_MONOMARSHAL "::mono_array_to_" #m_type +#define C_METHOD_MONOARRAY_FROM(m_type) C_NS_MONOMARSHAL "::" #m_type "_to_mono_array" +#define C_METHOD_MANAGED_TO_DICT C_NS_MONOMARSHAL "::mono_object_to_Dictionary" +#define C_METHOD_MANAGED_FROM_DICT C_NS_MONOMARSHAL "::Dictionary_to_mono_object" + +const char *BindingsGenerator::TypeInterface::DEFAULT_VARARG_C_IN = "\t%0 %1_in = %1;\n"; + +bool BindingsGenerator::verbose_output = false; + +static String snake_to_pascal_case(const String &p_identifier) { + + String ret; + Vector<String> parts = p_identifier.split("_", true); + + for (int i = 0; i < parts.size(); i++) { + String part = parts[i]; + + if (part.length()) { + part[0] = _find_upper(part[0]); + ret += part; + } else { + if (i == 0 || i == (parts.size() - 1)) { + // Preserve underscores at the beginning and end + ret += "_"; + } else { + // Preserve contiguous underscores + if (parts[i - 1].length()) { + ret += "__"; + } else { + ret += "_"; + } + } + } + } + + return ret; +} + +static String snake_to_camel_case(const String &p_identifier) { + + String ret; + Vector<String> parts = p_identifier.split("_", true); + + for (int i = 0; i < parts.size(); i++) { + String part = parts[i]; + + if (part.length()) { + if (i != 0) + part[0] = _find_upper(part[0]); + ret += part; + } else { + if (i == 0 || i == (parts.size() - 1)) { + // Preserve underscores at the beginning and end + ret += "_"; + } else { + // Preserve contiguous underscores + if (parts[i - 1].length()) { + ret += "__"; + } else { + ret += "_"; + } + } + } + } + + return ret; +} + +void BindingsGenerator::_generate_header_icalls() { + + core_custom_icalls.clear(); + + core_custom_icalls.push_back(InternalCall(ICALL_GET_METHODBIND, "IntPtr", "string type, string method")); + core_custom_icalls.push_back(InternalCall(ICALL_OBJECT_DTOR, "void", "IntPtr ptr")); + + core_custom_icalls.push_back(InternalCall(ICALL_CONNECT_SIGNAL_AWAITER, "Error", + "IntPtr source, string signal, IntPtr target, " CS_CLASS_SIGNALAWAITER " awaiter")); + + core_custom_icalls.push_back(InternalCall(ICALL_PREFIX "NodePath_Ctor", "IntPtr", "string path")); + core_custom_icalls.push_back(InternalCall(ICALL_PREFIX "NodePath_Dtor", "void", "IntPtr ptr")); + core_custom_icalls.push_back(InternalCall(ICALL_PREFIX "NodePath_operator_String", "string", "IntPtr ptr")); + + core_custom_icalls.push_back(InternalCall(ICALL_PREFIX "RID_Ctor", "IntPtr", "IntPtr from")); + core_custom_icalls.push_back(InternalCall(ICALL_PREFIX "RID_Dtor", "void", "IntPtr ptr")); + + core_custom_icalls.push_back(InternalCall(ICALL_PREFIX "String_md5_buffer", "byte[]", "string str")); + core_custom_icalls.push_back(InternalCall(ICALL_PREFIX "String_md5_text", "string", "string str")); + core_custom_icalls.push_back(InternalCall(ICALL_PREFIX "String_rfind", "int", "string str, string what, int from")); + core_custom_icalls.push_back(InternalCall(ICALL_PREFIX "String_rfindn", "int", "string str, string what, int from")); + core_custom_icalls.push_back(InternalCall(ICALL_PREFIX "String_sha256_buffer", "byte[]", "string str")); + core_custom_icalls.push_back(InternalCall(ICALL_PREFIX "String_sha256_text", "string", "string str")); + + core_custom_icalls.push_back(InternalCall(ICALL_PREFIX "Godot_bytes2var", "object", "byte[] bytes")); + core_custom_icalls.push_back(InternalCall(ICALL_PREFIX "Godot_convert", "object", "object what, int type")); + core_custom_icalls.push_back(InternalCall(ICALL_PREFIX "Godot_hash", "int", "object var")); + core_custom_icalls.push_back(InternalCall(ICALL_PREFIX "Godot_instance_from_id", "Object", "int instance_id")); + core_custom_icalls.push_back(InternalCall(ICALL_PREFIX "Godot_print", "void", "object[] what")); + core_custom_icalls.push_back(InternalCall(ICALL_PREFIX "Godot_printerr", "void", "object[] what")); + core_custom_icalls.push_back(InternalCall(ICALL_PREFIX "Godot_printraw", "void", "object[] what")); + core_custom_icalls.push_back(InternalCall(ICALL_PREFIX "Godot_prints", "void", "object[] what")); + core_custom_icalls.push_back(InternalCall(ICALL_PREFIX "Godot_printt", "void", "object[] what")); + core_custom_icalls.push_back(InternalCall(ICALL_PREFIX "Godot_seed", "void", "int seed")); + core_custom_icalls.push_back(InternalCall(ICALL_PREFIX "Godot_str", "string", "object[] what")); + core_custom_icalls.push_back(InternalCall(ICALL_PREFIX "Godot_str2var", "object", "string str")); + core_custom_icalls.push_back(InternalCall(ICALL_PREFIX "Godot_type_exists", "bool", "string type")); + core_custom_icalls.push_back(InternalCall(ICALL_PREFIX "Godot_var2bytes", "byte[]", "object what")); + core_custom_icalls.push_back(InternalCall(ICALL_PREFIX "Godot_var2str", "string", "object var")); + core_custom_icalls.push_back(InternalCall(ICALL_PREFIX "Godot_weakref", "WeakRef", "IntPtr obj")); +} + +void BindingsGenerator::_generate_method_icalls(const TypeInterface &p_itype) { + + for (const List<MethodInterface>::Element *E = p_itype.methods.front(); E; E = E->next()) { + const MethodInterface &imethod = E->get(); + + if (imethod.is_virtual) + continue; + + const TypeInterface *return_type = _get_type_by_name_or_placeholder(imethod.return_type); + + String im_sig = "IntPtr " CS_PARAM_METHODBIND ", IntPtr " CS_PARAM_INSTANCE; + String im_unique_sig = imethod.return_type + ",IntPtr,IntPtr"; + + // Get arguments information + int i = 0; + for (const List<ArgumentInterface>::Element *F = imethod.arguments.front(); F; F = F->next()) { + const TypeInterface *arg_type = _get_type_by_name_or_placeholder(F->get().type); + + im_sig += ", "; + im_sig += arg_type->im_type_in; + im_sig += " arg"; + im_sig += itos(i + 1); + + im_unique_sig += ","; + im_unique_sig += get_unique_sig(*arg_type); + + i++; + } + + // godot_icall_{argc}_{icallcount} + String icall_method = ICALL_PREFIX + itos(imethod.arguments.size()) + "_" + itos(method_icalls.size()); + + InternalCall im_icall = InternalCall(p_itype.api_type, icall_method, return_type->im_type_out, im_sig, im_unique_sig); + + List<InternalCall>::Element *match = method_icalls.find(im_icall); + + if (match) { + if (p_itype.api_type != ClassDB::API_EDITOR) + match->get().editor_only = false; + method_icalls_map.insert(&E->get(), &match->get()); + } else { + List<InternalCall>::Element *added = method_icalls.push_back(im_icall); + method_icalls_map.insert(&E->get(), &added->get()); + } + } +} + +Error BindingsGenerator::generate_cs_core_project(const String &p_output_dir, bool p_verbose_output) { + + verbose_output = p_verbose_output; + + DirAccessRef da = DirAccess::create(DirAccess::ACCESS_FILESYSTEM); + ERR_FAIL_COND_V(!da, ERR_CANT_CREATE); + + if (!DirAccess::exists(p_output_dir)) { + Error err = da->make_dir_recursive(p_output_dir); + ERR_FAIL_COND_V(err != OK, ERR_CANT_CREATE); + } + + da->change_dir(p_output_dir); + da->make_dir("Core"); + da->make_dir("ObjectType"); + + String core_dir = path_join(p_output_dir, "Core"); + String obj_type_dir = path_join(p_output_dir, "ObjectType"); + + Vector<String> compile_items; + + NETSolution solution(API_ASSEMBLY_NAME); + + if (!solution.set_path(p_output_dir)) + return ERR_FILE_NOT_FOUND; + + for (Map<String, TypeInterface>::Element *E = obj_types.front(); E; E = E->next()) { + const TypeInterface &itype = E->get(); + + if (itype.api_type == ClassDB::API_EDITOR) + continue; + + String output_file = path_join(obj_type_dir, E->get().proxy_name + ".cs"); + Error err = _generate_cs_type(E->get(), output_file); + + if (err == ERR_SKIP) + continue; + + if (err != OK) + return err; + + compile_items.push_back(output_file); + } + +#define GENERATE_BUILTIN_TYPE(m_name) \ + { \ + String output_file = path_join(core_dir, #m_name ".cs"); \ + Error err = _generate_cs_type(builtin_types[#m_name], output_file); \ + if (err != OK) \ + return err; \ + compile_items.push_back(output_file); \ + } + + GENERATE_BUILTIN_TYPE(NodePath); + GENERATE_BUILTIN_TYPE(RID); + +#undef GENERATE_BUILTIN_TYPE + + // Generate source for GlobalConstants + + String constants_source; + int global_constants_count = GlobalConstants::get_global_constant_count(); + + if (global_constants_count > 0) { + Map<String, DocData::ClassDoc>::Element *match = EditorHelp::get_doc_data()->class_list.find("@Global Scope"); + + ERR_EXPLAIN("Could not find `@Global Scope` in DocData"); + ERR_FAIL_COND_V(!match, ERR_BUG); + + const DocData::ClassDoc &global_scope_doc = match->value(); + + for (int i = 0; i < global_constants_count; i++) { + const DocData::ConstantDoc &const_doc = global_scope_doc.constants[i]; + + if (i > 0) + constants_source += MEMBER_BEGIN; + + if (const_doc.description.size()) { + constants_source += "/// <summary>\n"; + + Vector<String> description_lines = const_doc.description.split("\n"); + + for (int i = 0; i < description_lines.size(); i++) { + if (description_lines[i].size()) { + constants_source += INDENT2 "/// "; + constants_source += description_lines[i].strip_edges().xml_escape(); + constants_source += "\n"; + } + } + + constants_source += INDENT2 "/// </summary>" MEMBER_BEGIN; + } + + constants_source += "public const int "; + constants_source += GlobalConstants::get_global_constant_name(i); + constants_source += " = "; + constants_source += itos(GlobalConstants::get_global_constant_value(i)); + constants_source += ";"; + } + } + + // Generate sources from compressed files + + Map<String, CompressedFile> compressed_files; + get_compressed_files(compressed_files); + + for (Map<String, CompressedFile>::Element *E = compressed_files.front(); E; E = E->next()) { + const String &file_name = E->key(); + const CompressedFile &file_data = E->value(); + + String output_file = path_join(core_dir, file_name); + + Vector<uint8_t> data; + data.resize(file_data.uncompressed_size); + Compression::decompress(data.ptr(), file_data.uncompressed_size, file_data.data, file_data.compressed_size, Compression::MODE_DEFLATE); + + if (file_name.get_basename() == BINDINGS_GLOBAL_SCOPE_CLASS) { + // GD.cs must be formatted to include the generated global constants + String data_str = String::utf8(reinterpret_cast<const char *>(data.ptr()), data.size()); + + Dictionary format_keys; + format_keys["GodotGlobalConstants"] = constants_source; + data_str = data_str.format(format_keys, "/*{_}*/"); + + CharString data_utf8 = data_str.utf8(); + data.resize(data_utf8.length()); + copymem(data.ptr(), reinterpret_cast<const uint8_t *>(data_utf8.get_data()), data_utf8.length()); + } + + FileAccessRef file = FileAccess::open(output_file, FileAccess::WRITE); + ERR_FAIL_COND_V(!file, ERR_FILE_CANT_WRITE); + file->store_buffer(data.ptr(), data.size()); + file->close(); + + compile_items.push_back(output_file); + } + + List<String> cs_icalls_content; + + cs_icalls_content.push_back("using System;\n" + "using System.Runtime.CompilerServices;\n" + "using System.Collections.Generic;\n" + "\n"); + cs_icalls_content.push_back("namespace " BINDINGS_NAMESPACE "\n" OPEN_BLOCK); + cs_icalls_content.push_back(INDENT1 "internal static class " CS_CLASS_NATIVECALLS "\n" INDENT1 OPEN_BLOCK); + +#define ADD_INTERNAL_CALL(m_icall) \ + if (!m_icall.editor_only) { \ + cs_icalls_content.push_back(INDENT2 "[MethodImpl(MethodImplOptions.InternalCall)]\n"); \ + cs_icalls_content.push_back(INDENT2 "internal extern static "); \ + cs_icalls_content.push_back(m_icall.im_type_out + " "); \ + cs_icalls_content.push_back(m_icall.name + "("); \ + cs_icalls_content.push_back(m_icall.im_sig + ");\n"); \ + } + + for (const List<InternalCall>::Element *E = core_custom_icalls.front(); E; E = E->next()) + ADD_INTERNAL_CALL(E->get()); + for (const List<InternalCall>::Element *E = method_icalls.front(); E; E = E->next()) + ADD_INTERNAL_CALL(E->get()); + +#undef ADD_INTERNAL_CALL + + cs_icalls_content.push_back(INDENT1 CLOSE_BLOCK CLOSE_BLOCK); + + String internal_methods_file = path_join(core_dir, CS_CLASS_NATIVECALLS ".cs"); + + Error err = _save_file(internal_methods_file, cs_icalls_content); + if (err != OK) + return err; + + compile_items.push_back(internal_methods_file); + + String guid = CSharpProject::generate_core_api_project(p_output_dir, compile_items); + + solution.add_new_project(API_ASSEMBLY_NAME, guid); + + Error sln_error = solution.save(); + if (sln_error != OK) { + ERR_PRINT("Could not to save .NET solution."); + return sln_error; + } + + return OK; +} + +Error BindingsGenerator::generate_cs_editor_project(const String &p_output_dir, const String &p_core_dll_path, bool p_verbose_output) { + + verbose_output = p_verbose_output; + + DirAccessRef da = DirAccess::create(DirAccess::ACCESS_FILESYSTEM); + ERR_FAIL_COND_V(!da, ERR_CANT_CREATE); + + if (!DirAccess::exists(p_output_dir)) { + Error err = da->make_dir_recursive(p_output_dir); + ERR_FAIL_COND_V(err != OK, ERR_CANT_CREATE); + } + + da->change_dir(p_output_dir); + da->make_dir("Core"); + da->make_dir("ObjectType"); + + String core_dir = path_join(p_output_dir, "Core"); + String obj_type_dir = path_join(p_output_dir, "ObjectType"); + + Vector<String> compile_items; + + NETSolution solution(EDITOR_API_ASSEMBLY_NAME); + + if (!solution.set_path(p_output_dir)) + return ERR_FILE_NOT_FOUND; + + for (Map<String, TypeInterface>::Element *E = obj_types.front(); E; E = E->next()) { + const TypeInterface &itype = E->get(); + + if (itype.api_type != ClassDB::API_EDITOR) + continue; + + String output_file = path_join(obj_type_dir, E->get().proxy_name + ".cs"); + Error err = _generate_cs_type(E->get(), output_file); + + if (err == ERR_SKIP) + continue; + + if (err != OK) + return err; + + compile_items.push_back(output_file); + } + + List<String> cs_icalls_content; + + cs_icalls_content.push_back("using System;\n" + "using System.Runtime.CompilerServices;\n" + "using System.Collections.Generic;\n" + "\n"); + cs_icalls_content.push_back("namespace " BINDINGS_NAMESPACE "\n" OPEN_BLOCK); + cs_icalls_content.push_back(INDENT1 "internal static class " CS_CLASS_NATIVECALLS_EDITOR "\n" INDENT1 OPEN_BLOCK); + +#define ADD_INTERNAL_CALL(m_icall) \ + if (m_icall.editor_only) { \ + cs_icalls_content.push_back(INDENT2 "[MethodImpl(MethodImplOptions.InternalCall)]\n"); \ + cs_icalls_content.push_back(INDENT2 "internal extern static "); \ + cs_icalls_content.push_back(m_icall.im_type_out + " "); \ + cs_icalls_content.push_back(m_icall.name + "("); \ + cs_icalls_content.push_back(m_icall.im_sig + ");\n"); \ + } + + for (const List<InternalCall>::Element *E = editor_custom_icalls.front(); E; E = E->next()) + ADD_INTERNAL_CALL(E->get()); + for (const List<InternalCall>::Element *E = method_icalls.front(); E; E = E->next()) + ADD_INTERNAL_CALL(E->get()); + +#undef ADD_INTERNAL_CALL + + cs_icalls_content.push_back(INDENT1 CLOSE_BLOCK CLOSE_BLOCK); + + String internal_methods_file = path_join(core_dir, CS_CLASS_NATIVECALLS_EDITOR ".cs"); + + Error err = _save_file(internal_methods_file, cs_icalls_content); + if (err != OK) + return err; + + compile_items.push_back(internal_methods_file); + + String guid = CSharpProject::generate_editor_api_project(p_output_dir, p_core_dll_path, compile_items); + + solution.add_new_project(EDITOR_API_ASSEMBLY_NAME, guid); + + Error sln_error = solution.save(); + if (sln_error != OK) { + ERR_PRINT("Could not to save .NET solution."); + return sln_error; + } + + return OK; +} + +// TODO: there are constants that hide inherited members. must explicitly use `new` to avoid warnings +// e.g.: warning CS0108: 'SpriteBase3D.FLAG_MAX' hides inherited member 'GeometryInstance.FLAG_MAX'. Use the new keyword if hiding was intended. +Error BindingsGenerator::_generate_cs_type(const TypeInterface &itype, const String &p_output_file) { + + int method_bind_count = 0; + + bool is_derived_type = itype.base_name.length(); + + List<InternalCall> &custom_icalls = itype.api_type == ClassDB::API_EDITOR ? editor_custom_icalls : core_custom_icalls; + + if (verbose_output) + OS::get_singleton()->print(String("Generating " + itype.proxy_name + ".cs...\n").utf8()); + + String ctor_method(ICALL_PREFIX + itype.proxy_name + "_Ctor"); + + List<String> cs_file; + + cs_file.push_back("using System;\n"); // IntPtr + + if (itype.requires_collections) + cs_file.push_back("using System.Collections.Generic;\n"); // Dictionary + + cs_file.push_back("\nnamespace " BINDINGS_NAMESPACE "\n" OPEN_BLOCK); + + const DocData::ClassDoc *class_doc = itype.class_doc; + + if (class_doc && class_doc->description.size()) { + cs_file.push_back(INDENT1 "/// <summary>\n"); + + Vector<String> description_lines = class_doc->description.split("\n"); + + for (int i = 0; i < description_lines.size(); i++) { + if (description_lines[i].size()) { + cs_file.push_back(INDENT1 "/// "); + cs_file.push_back(description_lines[i].strip_edges().xml_escape()); + cs_file.push_back("\n"); + } + } + + cs_file.push_back(INDENT1 "/// </summary>\n"); + } + + cs_file.push_back(INDENT1 "public "); + cs_file.push_back(itype.is_singleton ? "static class " : "class "); + cs_file.push_back(itype.proxy_name); + + if (itype.is_singleton || !itype.is_object_type) { + cs_file.push_back("\n"); + } else if (!is_derived_type) { + cs_file.push_back(" : IDisposable\n"); + } else if (obj_types.has(itype.base_name)) { + cs_file.push_back(" : "); + cs_file.push_back(obj_types[itype.base_name].proxy_name); + cs_file.push_back("\n"); + } else { + ERR_PRINTS("Base type ' " + itype.base_name + "' does not exist"); + return ERR_INVALID_DATA; + } + + cs_file.push_back(INDENT1 "{"); + + if (class_doc) { + + // Add constants + + for (int i = 0; i < class_doc->constants.size(); i++) { + const DocData::ConstantDoc &const_doc = class_doc->constants[i]; + + if (const_doc.description.size()) { + cs_file.push_back(MEMBER_BEGIN "/// <summary>\n"); + + Vector<String> description_lines = const_doc.description.split("\n"); + + for (int i = 0; i < description_lines.size(); i++) { + if (description_lines[i].size()) { + cs_file.push_back(INDENT2 "/// "); + cs_file.push_back(description_lines[i].strip_edges().xml_escape()); + cs_file.push_back("\n"); + } + } + + cs_file.push_back(INDENT2 "/// </summary>"); + } + + cs_file.push_back(MEMBER_BEGIN "public const int "); + cs_file.push_back(const_doc.name); + cs_file.push_back(" = "); + cs_file.push_back(const_doc.value); + cs_file.push_back(";"); + } + + if (class_doc->constants.size()) + cs_file.push_back("\n"); + + // Add properties + + const Vector<DocData::PropertyDoc> &properties = itype.class_doc->properties; + + for (int i = 0; i < properties.size(); i++) { + const DocData::PropertyDoc &prop_doc = properties[i]; + + const MethodInterface *setter = itype.find_method_by_name(prop_doc.setter); + + // Search it in base types too + const TypeInterface *current_type = &itype; + while (!setter && current_type->base_name.length()) { + Map<String, TypeInterface>::Element *base_match = obj_types.find(current_type->base_name); + ERR_FAIL_NULL_V(base_match, ERR_BUG); + current_type = &base_match->get(); + setter = current_type->find_method_by_name(prop_doc.setter); + } + + const MethodInterface *getter = itype.find_method_by_name(prop_doc.getter); + + // Search it in base types too + current_type = &itype; + while (!getter && current_type->base_name.length()) { + Map<String, TypeInterface>::Element *base_match = obj_types.find(current_type->base_name); + ERR_FAIL_NULL_V(base_match, ERR_BUG); + current_type = &base_match->get(); + getter = current_type->find_method_by_name(prop_doc.getter); + } + + ERR_FAIL_COND_V(!setter && !getter, ERR_BUG); + + bool is_valid = false; + int prop_index = ClassDB::get_property_index(itype.name, prop_doc.name, &is_valid); + ERR_FAIL_COND_V(!is_valid, ERR_BUG); + + if (setter) { + int setter_argc = prop_index != -1 ? 2 : 1; + ERR_FAIL_COND_V(setter->arguments.size() != setter_argc, ERR_BUG); + } + + if (getter) { + int getter_argc = prop_index != -1 ? 1 : 0; + ERR_FAIL_COND_V(getter->arguments.size() != getter_argc, ERR_BUG); + } + + if (getter && setter) { + ERR_FAIL_COND_V(getter->return_type != setter->arguments.back()->get().type, ERR_BUG); + } + + // Let's not trust PropertyDoc::type + String proptype_name = getter ? getter->return_type : setter->arguments.back()->get().type; + + const TypeInterface *prop_itype = _get_type_by_name_or_null(proptype_name); + if (!prop_itype) { + // Try with underscore prefix + prop_itype = _get_type_by_name_or_null("_" + proptype_name); + } + + ERR_FAIL_NULL_V(prop_itype, ERR_BUG); + + String prop_proxy_name = escape_csharp_keyword(snake_to_pascal_case(prop_doc.name)); + + // Prevent property and enclosing type from sharing the same name + if (prop_proxy_name == itype.proxy_name) { + if (verbose_output) { + WARN_PRINTS("Name of property `" + prop_proxy_name + "` is ambiguous with the name of its class `" + + itype.proxy_name + "`. Renaming property to `" + prop_proxy_name + "_`"); + } + + prop_proxy_name += "_"; + } + + if (prop_doc.description.size()) { + cs_file.push_back(MEMBER_BEGIN "/// <summary>\n"); + + Vector<String> description_lines = prop_doc.description.split("\n"); + + for (int i = 0; i < description_lines.size(); i++) { + if (description_lines[i].size()) { + cs_file.push_back(INDENT2 "/// "); + cs_file.push_back(description_lines[i].strip_edges().xml_escape()); + cs_file.push_back("\n"); + } + } + + cs_file.push_back(INDENT2 "/// </summary>"); + } + + cs_file.push_back(MEMBER_BEGIN "public "); + + if (itype.is_singleton) + cs_file.push_back("static "); + + cs_file.push_back(prop_itype->cs_type); + cs_file.push_back(" "); + cs_file.push_back(prop_proxy_name.replace("/", "__")); + cs_file.push_back("\n" INDENT2 OPEN_BLOCK); + + if (getter) { + cs_file.push_back(INDENT3 "get\n" OPEN_BLOCK_L3); + cs_file.push_back("return "); + cs_file.push_back(getter->proxy_name + "("); + if (prop_index != -1) + cs_file.push_back(itos(prop_index)); + cs_file.push_back(");\n" CLOSE_BLOCK_L3); + } + + if (setter) { + cs_file.push_back(INDENT3 "set\n" OPEN_BLOCK_L3); + cs_file.push_back(setter->proxy_name + "("); + if (prop_index != -1) + cs_file.push_back(itos(prop_index) + ", "); + cs_file.push_back("value);\n" CLOSE_BLOCK_L3); + } + + cs_file.push_back(CLOSE_BLOCK_L2); + } + + if (class_doc->properties.size()) + cs_file.push_back("\n"); + } + + if (!itype.is_object_type) { + cs_file.push_back(MEMBER_BEGIN "private const string " BINDINGS_NATIVE_NAME_FIELD " = \"" + itype.name + "\";\n"); + cs_file.push_back(MEMBER_BEGIN "private bool disposed = false;\n"); + cs_file.push_back(MEMBER_BEGIN "internal IntPtr " BINDINGS_PTR_FIELD ";\n"); + + cs_file.push_back(MEMBER_BEGIN "internal static IntPtr " CS_SMETHOD_GETINSTANCE "("); + cs_file.push_back(itype.proxy_name); + cs_file.push_back(" instance)\n" OPEN_BLOCK_L2 "return instance == null ? IntPtr.Zero : instance." BINDINGS_PTR_FIELD ";\n" CLOSE_BLOCK_L2); + + // Add Destructor + cs_file.push_back(MEMBER_BEGIN "~"); + cs_file.push_back(itype.proxy_name); + cs_file.push_back("()\n" OPEN_BLOCK_L2 "Dispose(false);\n" CLOSE_BLOCK_L2); + + // Add the Dispose from IDisposable + cs_file.push_back(MEMBER_BEGIN "public void Dispose()\n" OPEN_BLOCK_L2 "Dispose(true);\n" INDENT3 "GC.SuppressFinalize(this);\n" CLOSE_BLOCK_L2); + + // Add the virtual Dispose + cs_file.push_back(MEMBER_BEGIN "public virtual void Dispose(bool disposing)\n" OPEN_BLOCK_L2 + "if (disposed) return;\n" INDENT3 + "if (" BINDINGS_PTR_FIELD " != IntPtr.Zero)\n" OPEN_BLOCK_L3 "NativeCalls.godot_icall_"); + cs_file.push_back(itype.proxy_name); + cs_file.push_back("_Dtor(" BINDINGS_PTR_FIELD ");\n" INDENT5 BINDINGS_PTR_FIELD " = IntPtr.Zero;\n" CLOSE_BLOCK_L3 INDENT3 + "GC.SuppressFinalize(this);\n" INDENT3 "disposed = true;\n" CLOSE_BLOCK_L2); + + cs_file.push_back(MEMBER_BEGIN "internal "); + cs_file.push_back(itype.proxy_name); + cs_file.push_back("(IntPtr " BINDINGS_PTR_FIELD ")\n" OPEN_BLOCK_L2 "this." BINDINGS_PTR_FIELD " = " BINDINGS_PTR_FIELD ";\n" CLOSE_BLOCK_L2); + + cs_file.push_back(MEMBER_BEGIN "public bool HasValidHandle()\n" OPEN_BLOCK_L2 + "return " BINDINGS_PTR_FIELD " == IntPtr.Zero;\n" CLOSE_BLOCK_L2); + } else if (itype.is_singleton) { + // Add the type name and the singleton pointer as static fields + + cs_file.push_back(MEMBER_BEGIN "private const string " BINDINGS_NATIVE_NAME_FIELD " = \""); + cs_file.push_back(itype.name); + cs_file.push_back("\";\n"); + + cs_file.push_back(INDENT2 "internal static IntPtr " BINDINGS_PTR_FIELD " = "); + cs_file.push_back(itype.api_type == ClassDB::API_EDITOR ? CS_CLASS_NATIVECALLS_EDITOR : CS_CLASS_NATIVECALLS); + cs_file.push_back("." ICALL_PREFIX); + cs_file.push_back(itype.name); + cs_file.push_back(SINGLETON_ICALL_SUFFIX "();\n"); + } else { + // Add member fields + + cs_file.push_back(MEMBER_BEGIN "private const string " BINDINGS_NATIVE_NAME_FIELD " = \""); + cs_file.push_back(itype.name); + cs_file.push_back("\";\n"); + + // Only the base class stores the pointer to the native object + // This pointer is expected to be and must be of type Object* + if (!is_derived_type) { + cs_file.push_back(MEMBER_BEGIN "private bool disposed = false;\n"); + cs_file.push_back(INDENT2 "internal IntPtr " BINDINGS_PTR_FIELD ";\n"); + cs_file.push_back(INDENT2 "internal bool " CS_FIELD_MEMORYOWN ";\n"); + } + + // Add default constructor + if (itype.is_instantiable) { + cs_file.push_back(MEMBER_BEGIN "public "); + cs_file.push_back(itype.proxy_name); + cs_file.push_back("() : this("); + cs_file.push_back(itype.memory_own ? "true" : "false"); + + // The default constructor may also be called by the engine when instancing existing native objects + // The engine will initialize the pointer field of the managed side before calling the constructor + // This is why we only allocate a new native object from the constructor if the pointer field is not set + cs_file.push_back(")\n" OPEN_BLOCK_L2 "if (" BINDINGS_PTR_FIELD " == IntPtr.Zero)\n" INDENT4 BINDINGS_PTR_FIELD " = "); + cs_file.push_back(itype.api_type == ClassDB::API_EDITOR ? CS_CLASS_NATIVECALLS_EDITOR : CS_CLASS_NATIVECALLS); + cs_file.push_back("." + ctor_method); + cs_file.push_back("(this);\n" CLOSE_BLOCK_L2); + } else { + // Hide the constructor + cs_file.push_back(MEMBER_BEGIN "internal "); + cs_file.push_back(itype.proxy_name); + cs_file.push_back("() {}\n"); + } + + // Add.. em.. trick constructor. Sort of. + cs_file.push_back(MEMBER_BEGIN "internal "); + cs_file.push_back(itype.proxy_name); + if (is_derived_type) { + cs_file.push_back("(bool " CS_FIELD_MEMORYOWN ") : base(" CS_FIELD_MEMORYOWN ") {}\n"); + } else { + cs_file.push_back("(bool " CS_FIELD_MEMORYOWN ")\n" OPEN_BLOCK_L2 + "this." CS_FIELD_MEMORYOWN " = " CS_FIELD_MEMORYOWN ";\n" CLOSE_BLOCK_L2); + } + + // Add methods + + if (!is_derived_type) { + cs_file.push_back(MEMBER_BEGIN "public bool HasValidHandle()\n" OPEN_BLOCK_L2 + "return " BINDINGS_PTR_FIELD " == IntPtr.Zero;\n" CLOSE_BLOCK_L2); + + cs_file.push_back(MEMBER_BEGIN "internal static IntPtr " CS_SMETHOD_GETINSTANCE "(Object instance)\n" OPEN_BLOCK_L2 + "return instance == null ? IntPtr.Zero : instance." BINDINGS_PTR_FIELD ";\n" CLOSE_BLOCK_L2); + } + + if (!is_derived_type) { + // Add destructor + cs_file.push_back(MEMBER_BEGIN "~"); + cs_file.push_back(itype.proxy_name); + cs_file.push_back("()\n" OPEN_BLOCK_L2 "Dispose(false);\n" CLOSE_BLOCK_L2); + + // Add the Dispose from IDisposable + cs_file.push_back(MEMBER_BEGIN "public void Dispose()\n" OPEN_BLOCK_L2 "Dispose(true);\n" INDENT3 "GC.SuppressFinalize(this);\n" CLOSE_BLOCK_L2); + + // Add the virtual Dispose + cs_file.push_back(MEMBER_BEGIN "public virtual void Dispose(bool disposing)\n" OPEN_BLOCK_L2 + "if (disposed) return;\n" INDENT3 + "if (" BINDINGS_PTR_FIELD " != IntPtr.Zero)\n" OPEN_BLOCK_L3 + "if (" CS_FIELD_MEMORYOWN ")\n" OPEN_BLOCK_L4 CS_FIELD_MEMORYOWN + " = false;\n" INDENT5 CS_CLASS_NATIVECALLS "." ICALL_OBJECT_DTOR + "(" BINDINGS_PTR_FIELD ");\n" INDENT5 BINDINGS_PTR_FIELD + " = IntPtr.Zero;\n" CLOSE_BLOCK_L4 CLOSE_BLOCK_L3 INDENT3 + "GC.SuppressFinalize(this);\n" INDENT3 "disposed = true;\n" CLOSE_BLOCK_L2); + + Map<String, TypeInterface>::Element *array_itype = builtin_types.find("Array"); + + if (!array_itype) { + ERR_PRINT("BUG: Array type interface not found!"); + return ERR_BUG; + } + + Map<String, TypeInterface>::Element *object_itype = obj_types.find("Object"); + + if (!object_itype) { + ERR_PRINT("BUG: Array type interface not found!"); + return ERR_BUG; + } + + cs_file.push_back(MEMBER_BEGIN "public " CS_CLASS_SIGNALAWAITER " ToSignal("); + cs_file.push_back(object_itype->get().cs_type); + cs_file.push_back(" source, string signal)\n" OPEN_BLOCK_L2 + "return new " CS_CLASS_SIGNALAWAITER "(source, signal, this);\n" CLOSE_BLOCK_L2); + } + } + + Map<String, String>::Element *extra_member = extra_members.find(itype.name); + if (extra_member) + cs_file.push_back(extra_member->get()); + + for (const List<MethodInterface>::Element *E = itype.methods.front(); E; E = E->next()) { + const MethodInterface &imethod = E->get(); + + const TypeInterface *return_type = _get_type_by_name_or_placeholder(imethod.return_type); + + String method_bind_field = "method_bind_" + itos(method_bind_count); + + String icall_params = method_bind_field + ", " + sformat(itype.cs_in, "this"); + String arguments_sig; + String cs_in_statements; + + List<String> default_args_doc; + + // Retrieve information from the arguments + for (const List<ArgumentInterface>::Element *F = imethod.arguments.front(); F; F = F->next()) { + const ArgumentInterface &iarg = F->get(); + const TypeInterface *arg_type = _get_type_by_name_or_placeholder(iarg.type); + + // Add the current arguments to the signature + // If the argument has a default value which is not a constant, we will make it Nullable + { + if (F != imethod.arguments.front()) + arguments_sig += ", "; + + if (iarg.def_param_mode == ArgumentInterface::NULLABLE_VAL) + arguments_sig += "Nullable<"; + + arguments_sig += arg_type->cs_type; + + if (iarg.def_param_mode == ArgumentInterface::NULLABLE_VAL) + arguments_sig += "> "; + else + arguments_sig += " "; + + arguments_sig += iarg.name; + + if (iarg.default_argument.size()) { + if (iarg.def_param_mode != ArgumentInterface::CONSTANT) + arguments_sig += " = null"; + else + arguments_sig += " = " + sformat(iarg.default_argument, arg_type->cs_type); + } + } + + icall_params += ", "; + + if (iarg.default_argument.size() && iarg.def_param_mode != ArgumentInterface::CONSTANT) { + // The default value of an argument must be constant. Otherwise we make it Nullable and do the following: + // Type arg_in = arg.HasValue ? arg.Value : <non-const default value>; + String arg_in = iarg.name; + arg_in += "_in"; + + cs_in_statements += arg_type->cs_type; + cs_in_statements += " "; + cs_in_statements += arg_in; + cs_in_statements += " = "; + cs_in_statements += iarg.name; + + if (iarg.def_param_mode == ArgumentInterface::NULLABLE_VAL) + cs_in_statements += ".HasValue ? "; + else + cs_in_statements += " != null ? "; + + cs_in_statements += iarg.name; + + if (iarg.def_param_mode == ArgumentInterface::NULLABLE_VAL) + cs_in_statements += ".Value : "; + else + cs_in_statements += " : "; + + String def_arg = sformat(iarg.default_argument, arg_type->cs_type); + + cs_in_statements += def_arg; + cs_in_statements += ";\n" INDENT3; + + icall_params += arg_type->cs_in.empty() ? arg_in : sformat(arg_type->cs_in, arg_in); + + default_args_doc.push_back(INDENT2 "/// <param name=\"" + iarg.name + "\">If the param is null, then the default value is " + def_arg + "</param>\n"); + } else { + icall_params += arg_type->cs_in.empty() ? iarg.name : sformat(arg_type->cs_in, iarg.name); + } + } + + // Generate method + { + if (!imethod.is_virtual && !imethod.requires_object_call) { + cs_file.push_back(MEMBER_BEGIN "private "); + cs_file.push_back(itype.is_singleton ? "static IntPtr " : "IntPtr "); + cs_file.push_back(method_bind_field + " = " CS_CLASS_NATIVECALLS "." ICALL_GET_METHODBIND "(" BINDINGS_NATIVE_NAME_FIELD ", \""); + cs_file.push_back(imethod.name); + cs_file.push_back("\");\n"); + } + + if (imethod.method_doc && imethod.method_doc->description.size()) { + cs_file.push_back(MEMBER_BEGIN "/// <summary>\n"); + + Vector<String> description_lines = imethod.method_doc->description.split("\n"); + + for (int i = 0; i < description_lines.size(); i++) { + if (description_lines[i].size()) { + cs_file.push_back(INDENT2 "/// "); + cs_file.push_back(description_lines[i].strip_edges().xml_escape()); + cs_file.push_back("\n"); + } + } + + for (List<String>::Element *E = default_args_doc.front(); E; E = E->next()) { + cs_file.push_back(E->get().xml_escape()); + } + + cs_file.push_back(INDENT2 "/// </summary>"); + } + + if (!imethod.is_internal) { + cs_file.push_back(MEMBER_BEGIN "[GodotMethod(\""); + cs_file.push_back(imethod.name); + cs_file.push_back("\")]"); + } + + cs_file.push_back(MEMBER_BEGIN); + cs_file.push_back(imethod.is_internal ? "internal " : "public "); + + if (itype.is_singleton) { + cs_file.push_back("static "); + } else if (imethod.is_virtual) { + cs_file.push_back("virtual "); + } + + cs_file.push_back(return_type->cs_type + " "); + cs_file.push_back(imethod.proxy_name + "("); + cs_file.push_back(arguments_sig + ")\n" OPEN_BLOCK_L2); + + if (imethod.is_virtual) { + // Godot virtual method must be overridden, therefore we return a default value by default. + + if (return_type->name == "void") { + cs_file.push_back("return;\n" CLOSE_BLOCK_L2); + } else { + cs_file.push_back("return default("); + cs_file.push_back(return_type->cs_type); + cs_file.push_back(");\n" CLOSE_BLOCK_L2); + } + + continue; + } + + if (imethod.requires_object_call) { + // Fallback to Godot's object.Call(string, params) + + cs_file.push_back(CS_METHOD_CALL "(\""); + cs_file.push_back(imethod.name); + cs_file.push_back("\""); + + for (const List<ArgumentInterface>::Element *F = imethod.arguments.front(); F; F = F->next()) { + cs_file.push_back(", "); + cs_file.push_back(F->get().name); + } + + cs_file.push_back(");\n" CLOSE_BLOCK_L2); + + continue; + } + + const Map<const MethodInterface *, const InternalCall *>::Element *match = method_icalls_map.find(&E->get()); + ERR_FAIL_NULL_V(match, ERR_BUG); + + const InternalCall *im_icall = match->value(); + + String im_call = im_icall->editor_only ? CS_CLASS_NATIVECALLS_EDITOR : CS_CLASS_NATIVECALLS; + im_call += "." + im_icall->name + "(" + icall_params + ");\n"; + + if (imethod.arguments.size()) + cs_file.push_back(cs_in_statements); + + if (return_type->name == "void") { + cs_file.push_back(im_call); + } else if (return_type->cs_out.empty()) { + cs_file.push_back("return " + im_call); + } else { + cs_file.push_back(return_type->im_type_out); + cs_file.push_back(" " LOCAL_RET " = "); + cs_file.push_back(im_call); + cs_file.push_back(INDENT3); + cs_file.push_back(sformat(return_type->cs_out, LOCAL_RET) + "\n"); + } + + cs_file.push_back(CLOSE_BLOCK_L2); + } + + method_bind_count++; + } + + if (itype.is_singleton) { + InternalCall singleton_icall = InternalCall(itype.api_type, ICALL_PREFIX + itype.name + SINGLETON_ICALL_SUFFIX, "IntPtr"); + + if (!find_icall_by_name(singleton_icall.name, custom_icalls)) + custom_icalls.push_back(singleton_icall); + } + + if (itype.is_instantiable) { + InternalCall ctor_icall = InternalCall(itype.api_type, ctor_method, "IntPtr", itype.proxy_name + " obj"); + + if (!find_icall_by_name(ctor_icall.name, custom_icalls)) + custom_icalls.push_back(ctor_icall); + } + + cs_file.push_back(INDENT1 CLOSE_BLOCK CLOSE_BLOCK); + + return _save_file(p_output_file, cs_file); +} + +Error BindingsGenerator::generate_glue(const String &p_output_dir) { + + verbose_output = true; + + bool dir_exists = DirAccess::exists(p_output_dir); + ERR_EXPLAIN("The output directory does not exist."); + ERR_FAIL_COND_V(!dir_exists, ERR_FILE_BAD_PATH); + + List<String> cpp_file; + + cpp_file.push_back("#include \"" GLUE_HEADER_FILE "\"\n" + "\n"); + + List<const InternalCall *> generated_icall_funcs; + + for (Map<String, TypeInterface>::Element *type_elem = obj_types.front(); type_elem; type_elem = type_elem->next()) { + const TypeInterface &itype = type_elem->get(); + + List<InternalCall> &custom_icalls = itype.api_type == ClassDB::API_EDITOR ? editor_custom_icalls : core_custom_icalls; + + OS::get_singleton()->print(String("Generating " + itype.name + "...\n").utf8()); + + String ctor_method(ICALL_PREFIX + itype.proxy_name + "_Ctor"); + + for (const List<MethodInterface>::Element *E = itype.methods.front(); E; E = E->next()) { + const MethodInterface &imethod = E->get(); + + if (imethod.is_virtual) + continue; + + bool ret_void = imethod.return_type == "void"; + + const TypeInterface *return_type = _get_type_by_name_or_placeholder(imethod.return_type); + + String argc_str = itos(imethod.arguments.size()); + + String c_func_sig = "MethodBind* " CS_PARAM_METHODBIND ", " + itype.c_type_in + " " CS_PARAM_INSTANCE; + String c_in_statements; + String c_args_var_content; + + // Get arguments information + int i = 0; + for (const List<ArgumentInterface>::Element *F = imethod.arguments.front(); F; F = F->next()) { + const ArgumentInterface &iarg = F->get(); + const TypeInterface *arg_type = _get_type_by_name_or_placeholder(iarg.type); + + String c_param_name = "arg" + itos(i + 1); + + if (imethod.is_vararg) { + if (i < imethod.arguments.size() - 1) { + c_in_statements += sformat(arg_type->c_in.size() ? arg_type->c_in : TypeInterface::DEFAULT_VARARG_C_IN, "Variant", c_param_name); + c_in_statements += "\t" C_LOCAL_PTRCALL_ARGS ".set(0, "; + c_in_statements += sformat("&%s_in", c_param_name); + c_in_statements += ");\n"; + } + } else { + if (i > 0) + c_args_var_content += ", "; + if (arg_type->c_in.size()) + c_in_statements += sformat(arg_type->c_in, arg_type->c_type, c_param_name); + c_args_var_content += sformat(arg_type->c_arg_in, c_param_name); + } + + c_func_sig += ", "; + c_func_sig += arg_type->c_type_in; + c_func_sig += " "; + c_func_sig += c_param_name; + + i++; + } + + const Map<const MethodInterface *, const InternalCall *>::Element *match = method_icalls_map.find(&E->get()); + ERR_FAIL_NULL_V(match, ERR_BUG); + + const InternalCall *im_icall = match->value(); + String icall_method = im_icall->name; + + if (!generated_icall_funcs.find(im_icall)) { + generated_icall_funcs.push_back(im_icall); + + if (im_icall->editor_only) + cpp_file.push_back("#ifdef TOOLS_ENABLED\n"); + + // Generate icall function + + cpp_file.push_back(ret_void ? "void " : return_type->c_type_out + " "); + cpp_file.push_back(icall_method); + cpp_file.push_back("("); + cpp_file.push_back(c_func_sig); + cpp_file.push_back(") " OPEN_BLOCK); + + String fail_ret = ret_void ? "" : ", " + (return_type->c_type_out.ends_with("*") ? "NULL" : return_type->c_type_out + "()"); + + if (!ret_void) { + String ptrcall_return_type; + String initialization; + + if (return_type->is_object_type) { + ptrcall_return_type = return_type->is_reference ? "Ref<Reference>" : return_type->c_type; + initialization = return_type->is_reference ? "" : " = NULL"; + } else { + ptrcall_return_type = return_type->c_type; + } + + cpp_file.push_back("\t" + ptrcall_return_type); + cpp_file.push_back(" " LOCAL_RET); + cpp_file.push_back(initialization + ";\n"); + cpp_file.push_back("\tERR_FAIL_NULL_V(" CS_PARAM_INSTANCE); + cpp_file.push_back(fail_ret); + cpp_file.push_back(");\n"); + } else { + cpp_file.push_back("\tERR_FAIL_NULL(" CS_PARAM_INSTANCE ");\n"); + } + + if (imethod.arguments.size()) { + if (imethod.is_vararg) { + String err_fail_macro = ret_void ? "ERR_FAIL_COND" : "ERR_FAIL_COND_V"; + String vararg_arg = "arg" + argc_str; + String real_argc_str = itos(imethod.arguments.size() - 1); // Arguments count without vararg + + cpp_file.push_back("\tVector<Variant> varargs;\n" + "\tint vararg_length = mono_array_length("); + cpp_file.push_back(vararg_arg); + cpp_file.push_back(");\n\tint total_length = "); + cpp_file.push_back(real_argc_str); + cpp_file.push_back(" + vararg_length;\n\t"); + cpp_file.push_back(err_fail_macro); + cpp_file.push_back("(varargs.resize(vararg_length) != OK"); + cpp_file.push_back(fail_ret); + cpp_file.push_back(");\n\tVector<Variant*> " C_LOCAL_PTRCALL_ARGS ";\n\t"); + cpp_file.push_back(err_fail_macro); + cpp_file.push_back("(call_args.resize(total_length) != OK"); + cpp_file.push_back(fail_ret); + cpp_file.push_back(");\n"); + cpp_file.push_back(c_in_statements); + cpp_file.push_back("\tfor (int i = 0; i < vararg_length; i++) " OPEN_BLOCK + "\t\tMonoObject* elem = mono_array_get("); + cpp_file.push_back(vararg_arg); + cpp_file.push_back(", MonoObject*, i);\n" + "\t\tvarargs.set(i, GDMonoMarshal::mono_object_to_variant(elem));\n" + "\t\t" C_LOCAL_PTRCALL_ARGS ".set("); + cpp_file.push_back(real_argc_str); + cpp_file.push_back(" + i, &varargs[i]);\n\t" CLOSE_BLOCK); + } else { + cpp_file.push_back(c_in_statements); + cpp_file.push_back("\tconst void* " C_LOCAL_PTRCALL_ARGS "["); + cpp_file.push_back(argc_str + "] = { "); + cpp_file.push_back(c_args_var_content + " };\n"); + } + } + + if (imethod.is_vararg) { + cpp_file.push_back("\tVariant::CallError vcall_error;\n\t"); + + if (!ret_void) + cpp_file.push_back(LOCAL_RET " = "); + + cpp_file.push_back(CS_PARAM_METHODBIND "->call(" CS_PARAM_INSTANCE ", "); + cpp_file.push_back(imethod.arguments.size() ? "(const Variant**)" C_LOCAL_PTRCALL_ARGS ".ptr()" : "NULL"); + cpp_file.push_back(", total_length, vcall_error);\n"); + } else { + cpp_file.push_back("\t" CS_PARAM_METHODBIND "->ptrcall(" CS_PARAM_INSTANCE ", "); + cpp_file.push_back(imethod.arguments.size() ? C_LOCAL_PTRCALL_ARGS ", " : "NULL, "); + cpp_file.push_back(!ret_void ? "&" LOCAL_RET ");\n" : "NULL);\n"); + } + + if (!ret_void) { + if (return_type->c_out.empty()) + cpp_file.push_back("\treturn " LOCAL_RET ";\n"); + else + cpp_file.push_back(sformat(return_type->c_out, return_type->c_type_out, LOCAL_RET, return_type->name)); + } + + cpp_file.push_back(CLOSE_BLOCK "\n"); + + if (im_icall->editor_only) + cpp_file.push_back("#endif // TOOLS_ENABLED\n"); + } + } + + if (itype.is_singleton) { + String singleton_icall_name = ICALL_PREFIX + itype.name + SINGLETON_ICALL_SUFFIX; + InternalCall singleton_icall = InternalCall(itype.api_type, singleton_icall_name, "IntPtr"); + + if (!find_icall_by_name(singleton_icall.name, custom_icalls)) + custom_icalls.push_back(singleton_icall); + + cpp_file.push_back("Object* "); + cpp_file.push_back(singleton_icall_name); + cpp_file.push_back("() " OPEN_BLOCK "\treturn ProjectSettings::get_singleton()->get_singleton_object(\""); + cpp_file.push_back(itype.proxy_name); + cpp_file.push_back("\");\n" CLOSE_BLOCK "\n"); + } + + if (itype.is_instantiable) { + InternalCall ctor_icall = InternalCall(itype.api_type, ctor_method, "IntPtr", itype.proxy_name + " obj"); + + if (!find_icall_by_name(ctor_icall.name, custom_icalls)) + custom_icalls.push_back(ctor_icall); + + cpp_file.push_back("Object* "); + cpp_file.push_back(ctor_method); + cpp_file.push_back("(MonoObject* obj) " OPEN_BLOCK + "\t" C_MACRO_OBJECT_CONSTRUCT "(instance, \""); + cpp_file.push_back(itype.name); + cpp_file.push_back("\");\n" + "\t" C_METHOD_TIE_MANAGED_TO_UNMANAGED "(obj, instance);\n" + "\treturn instance;\n" CLOSE_BLOCK "\n"); + } + } + + cpp_file.push_back("namespace GodotSharpBindings\n" OPEN_BLOCK); + cpp_file.push_back("uint64_t get_core_api_hash() { return "); + cpp_file.push_back(itos(GDMono::get_singleton()->get_api_core_hash()) + "; }\n"); + cpp_file.push_back("#ifdef TOOLS_ENABLED\n" + "uint64_t get_editor_api_hash() { return "); + cpp_file.push_back(itos(GDMono::get_singleton()->get_api_editor_hash()) + + "; }\n#endif // TOOLS_ENABLED\n"); + cpp_file.push_back("void register_generated_icalls() " OPEN_BLOCK); + +#define ADD_INTERNAL_CALL_REGISTRATION(m_icall) \ + { \ + cpp_file.push_back("\tmono_add_internal_call("); \ + cpp_file.push_back("\"" BINDINGS_NAMESPACE "."); \ + cpp_file.push_back(m_icall.editor_only ? CS_CLASS_NATIVECALLS_EDITOR : CS_CLASS_NATIVECALLS); \ + cpp_file.push_back("::"); \ + cpp_file.push_back(m_icall.name); \ + cpp_file.push_back("\", (void*)"); \ + cpp_file.push_back(m_icall.name); \ + cpp_file.push_back(");\n"); \ + } + + bool tools_sequence = false; + for (const List<InternalCall>::Element *E = core_custom_icalls.front(); E; E = E->next()) { + + if (tools_sequence) { + if (!E->get().editor_only) { + tools_sequence = false; + cpp_file.push_back("#endif\n"); + } + } else { + if (E->get().editor_only) { + cpp_file.push_back("#ifdef TOOLS_ENABLED\n"); + tools_sequence = true; + } + } + + ADD_INTERNAL_CALL_REGISTRATION(E->get()); + } + + if (tools_sequence) { + tools_sequence = false; + cpp_file.push_back("#endif\n"); + } + + cpp_file.push_back("#ifdef TOOLS_ENABLED\n"); + for (const List<InternalCall>::Element *E = editor_custom_icalls.front(); E; E = E->next()) + ADD_INTERNAL_CALL_REGISTRATION(E->get()); + cpp_file.push_back("#endif // TOOLS_ENABLED\n"); + + for (const List<InternalCall>::Element *E = method_icalls.front(); E; E = E->next()) { + + if (tools_sequence) { + if (!E->get().editor_only) { + tools_sequence = false; + cpp_file.push_back("#endif\n"); + } + } else { + if (E->get().editor_only) { + cpp_file.push_back("#ifdef TOOLS_ENABLED\n"); + tools_sequence = true; + } + } + + ADD_INTERNAL_CALL_REGISTRATION(E->get()); + } + + if (tools_sequence) { + tools_sequence = false; + cpp_file.push_back("#endif\n"); + } + +#undef ADD_INTERNAL_CALL_REGISTRATION + + cpp_file.push_back(CLOSE_BLOCK "}\n"); + + return _save_file(path_join(p_output_dir, "mono_glue.gen.cpp"), cpp_file); +} + +Error BindingsGenerator::_save_file(const String &p_path, const List<String> &p_content) { + + FileAccessRef file = FileAccess::open(p_path, FileAccess::WRITE); + + ERR_FAIL_COND_V(!file, ERR_FILE_CANT_WRITE); + + for (const List<String>::Element *E = p_content.front(); E; E = E->next()) { + file->store_string(E->get()); + } + + file->close(); + + return OK; +} + +const BindingsGenerator::TypeInterface *BindingsGenerator::_get_type_by_name_or_null(const String &p_name) { + + const Map<String, TypeInterface>::Element *match = builtin_types.find(p_name); + + if (match) + return &match->get(); + + match = obj_types.find(p_name); + + if (match) + return &match->get(); + + return NULL; +} + +const BindingsGenerator::TypeInterface *BindingsGenerator::_get_type_by_name_or_placeholder(const String &p_name) { + + const TypeInterface *found = _get_type_by_name_or_null(p_name); + + if (found) + return found; + + ERR_PRINTS(String() + "Type not found. Creating placeholder: " + p_name); + + const Map<String, TypeInterface>::Element *match = placeholder_types.find(p_name); + + if (match) + return &match->get(); + + TypeInterface placeholder; + TypeInterface::create_placeholder_type(placeholder, p_name); + + return &placeholder_types.insert(placeholder.name, placeholder)->get(); +} + +void BindingsGenerator::_populate_object_type_interfaces() { + + obj_types.clear(); + + List<StringName> class_list; + ClassDB::get_class_list(&class_list); + class_list.sort_custom<StringName::AlphCompare>(); + + StringName refclass_name = String("Reference"); + + while (class_list.size()) { + StringName type_cname = class_list.front()->get(); + + ClassDB::APIType api_type = ClassDB::get_api_type(type_cname); + + if (api_type == ClassDB::API_NONE) { + class_list.pop_front(); + continue; + } + + TypeInterface itype = TypeInterface::create_object_type(type_cname, api_type); + + itype.base_name = ClassDB::get_parent_class(type_cname); + itype.is_singleton = ProjectSettings::get_singleton()->has_singleton(itype.proxy_name); + itype.is_instantiable = ClassDB::can_instance(type_cname) && !itype.is_singleton; + itype.is_reference = ClassDB::is_parent_class(type_cname, refclass_name); + itype.memory_own = itype.is_reference; + + if (!ClassDB::is_class_exposed(type_cname)) { + WARN_PRINTS("Ignoring type " + String(type_cname) + " because it's not exposed"); + class_list.pop_front(); + continue; + } + + itype.c_out = "\treturn "; + itype.c_out += C_METHOD_UNMANAGED_GET_MANAGED; + itype.c_out += itype.is_reference ? "(%1.ptr());\n" : "(%1);\n"; + + itype.cs_in = itype.is_singleton ? BINDINGS_PTR_FIELD : "Object." CS_SMETHOD_GETINSTANCE "(%0)"; + + itype.c_type = "Object*"; + itype.c_type_in = itype.c_type; + itype.c_type_out = "MonoObject*"; + itype.cs_type = itype.proxy_name; + itype.im_type_in = "IntPtr"; + itype.im_type_out = itype.proxy_name; + + List<MethodInfo> virtual_method_list; + ClassDB::get_virtual_methods(type_cname, &virtual_method_list, true); + + List<MethodInfo> method_list; + ClassDB::get_method_list(type_cname, &method_list, true); + method_list.sort(); + + for (List<MethodInfo>::Element *E = method_list.front(); E; E = E->next()) { + const MethodInfo &method_info = E->get(); + + int argc = method_info.arguments.size(); + + if (method_info.name.empty()) + continue; + + MethodInterface imethod; + imethod.name = method_info.name; + + if (method_info.flags & METHOD_FLAG_VIRTUAL) + imethod.is_virtual = true; + + PropertyInfo return_info = method_info.return_val; + + MethodBind *m = imethod.is_virtual ? NULL : ClassDB::get_method(type_cname, method_info.name); + + imethod.is_vararg = m && m->is_vararg(); + + if (!m && !imethod.is_virtual) { + if (virtual_method_list.find(method_info)) { + // A virtual method without the virtual flag. This is a special case. + + // This type of method can only be found in Object derived types. + ERR_FAIL_COND(!itype.is_object_type); + + // There is no method bind, so let's fallback to Godot's object.Call(string, params) + imethod.requires_object_call = true; + + // The method Object.free is registered as a virtual method, but without the virtual flag. + // This is because this method is not supposed to be overridden, but called. + // We assume the return type is void. + imethod.return_type = "void"; + + // Actually, more methods like this may be added in the future, + // which could actually will return something differnet. + // Let's put this to notify us if that ever happens. + if (itype.name != "Object" || imethod.name != "free") { + WARN_PRINTS("Notification: New unexpected virtual non-overridable method found.\n" + "We only expected Object.free, but found " + + itype.name + "." + imethod.name); + } + } else { + ERR_PRINTS("Missing MethodBind for non-virtual method: " + itype.name + "." + imethod.name); + } + } else if (return_info.type == Variant::INT && return_info.usage & PROPERTY_USAGE_CLASS_IS_ENUM) { + //imethod.return_type = return_info.class_name; + imethod.return_type = "int"; + } else if (return_info.class_name != StringName()) { + imethod.return_type = return_info.class_name; + } else if (return_info.hint == PROPERTY_HINT_RESOURCE_TYPE) { + imethod.return_type = return_info.hint_string; + } else if (return_info.type == Variant::NIL && return_info.usage & PROPERTY_USAGE_NIL_IS_VARIANT) { + imethod.return_type = "Variant"; + } else if (return_info.type == Variant::NIL) { + imethod.return_type = "void"; + } else { + imethod.return_type = Variant::get_type_name(return_info.type); + } + + if (!itype.requires_collections && imethod.return_type == "Dictionary") + itype.requires_collections = true; + + for (int i = 0; i < argc; i++) { + PropertyInfo arginfo = method_info.arguments[i]; + + ArgumentInterface iarg; + iarg.name = arginfo.name; + + if (arginfo.type == Variant::INT && arginfo.usage & PROPERTY_USAGE_CLASS_IS_ENUM) { + //iarg.type = arginfo.class_name; + iarg.type = "int"; + } else if (arginfo.class_name != StringName()) { + iarg.type = arginfo.class_name; + } else if (arginfo.hint == PROPERTY_HINT_RESOURCE_TYPE) { + iarg.type = arginfo.hint_string; + } else if (arginfo.type == Variant::NIL) { + iarg.type = "Variant"; + } else { + iarg.type = Variant::get_type_name(arginfo.type); + } + + iarg.name = escape_csharp_keyword(snake_to_camel_case(iarg.name)); + + if (!itype.requires_collections && iarg.type == "Dictionary") + itype.requires_collections = true; + + if (m && m->has_default_argument(i)) { + _default_argument_from_variant(m->get_default_argument(i), iarg); + } + + imethod.add_argument(iarg); + } + + if (imethod.is_vararg) { + ArgumentInterface ivararg; + ivararg.type = "VarArg"; + ivararg.name = "@args"; + imethod.add_argument(ivararg); + } + + imethod.proxy_name = escape_csharp_keyword(snake_to_pascal_case(imethod.name)); + + // Prevent naming the property and its enclosing type from sharing the same name + if (imethod.proxy_name == itype.proxy_name) { + if (verbose_output) { + WARN_PRINTS("Name of method `" + imethod.proxy_name + "` is ambiguous with the name of its class `" + + itype.proxy_name + "`. Renaming method to `" + imethod.proxy_name + "_`"); + } + + imethod.proxy_name += "_"; + } + + if (itype.class_doc) { + for (int i = 0; i < itype.class_doc->methods.size(); i++) { + if (itype.class_doc->methods[i].name == imethod.name) { + imethod.method_doc = &itype.class_doc->methods[i]; + break; + } + } + } + + if (!imethod.is_virtual && imethod.name[0] == '_') { + const Vector<DocData::PropertyDoc> &properties = itype.class_doc->properties; + + for (int i = 0; i < properties.size(); i++) { + const DocData::PropertyDoc &prop_doc = properties[i]; + + if (prop_doc.getter == imethod.name || prop_doc.setter == imethod.name) { + imethod.is_internal = true; + itype.methods.push_back(imethod); + break; + } + } + } else { + itype.methods.push_back(imethod); + } + } + + obj_types.insert(itype.name, itype); + + class_list.pop_front(); + } +} + +void BindingsGenerator::_default_argument_from_variant(const Variant &p_val, ArgumentInterface &r_iarg) { + + r_iarg.default_argument = p_val; + + switch (p_val.get_type()) { + case Variant::NIL: + if (ClassDB::class_exists(r_iarg.type)) { + // Object type + r_iarg.default_argument = "null"; + } else { + // Variant + r_iarg.default_argument = "null"; + } + break; + // Atomic types + case Variant::BOOL: + r_iarg.default_argument = bool(p_val) ? "true" : "false"; + break; + case Variant::INT: + break; // Keep it + case Variant::REAL: +#ifndef REAL_T_IS_DOUBLE + r_iarg.default_argument += "f"; +#endif + break; + case Variant::STRING: + case Variant::NODE_PATH: + r_iarg.default_argument = "\"" + r_iarg.default_argument + "\""; + break; + case Variant::TRANSFORM: + if (p_val.operator Transform() == Transform()) + r_iarg.default_argument.clear(); + r_iarg.default_argument = "new %s(" + r_iarg.default_argument + ")"; + r_iarg.def_param_mode = ArgumentInterface::NULLABLE_VAL; + break; + case Variant::PLANE: + case Variant::RECT3: + case Variant::COLOR: + r_iarg.default_argument = "new Color(1, 1, 1, 1)"; + r_iarg.def_param_mode = ArgumentInterface::NULLABLE_VAL; + break; + case Variant::VECTOR2: + case Variant::RECT2: + case Variant::VECTOR3: + r_iarg.default_argument = "new %s" + r_iarg.default_argument; + r_iarg.def_param_mode = ArgumentInterface::NULLABLE_VAL; + break; + case Variant::OBJECT: + if (p_val.is_zero()) { + r_iarg.default_argument = "null"; + break; + } + case Variant::DICTIONARY: + case Variant::_RID: + r_iarg.default_argument = "new %s()"; + r_iarg.def_param_mode = ArgumentInterface::NULLABLE_REF; + break; + case Variant::ARRAY: + case Variant::POOL_BYTE_ARRAY: + case Variant::POOL_INT_ARRAY: + case Variant::POOL_REAL_ARRAY: + case Variant::POOL_STRING_ARRAY: + case Variant::POOL_VECTOR2_ARRAY: + case Variant::POOL_VECTOR3_ARRAY: + case Variant::POOL_COLOR_ARRAY: + r_iarg.default_argument = "new %s {}"; + r_iarg.def_param_mode = ArgumentInterface::NULLABLE_REF; + break; + case Variant::TRANSFORM2D: + case Variant::BASIS: + case Variant::QUAT: + r_iarg.default_argument = Variant::get_type_name(p_val.get_type()) + ".Identity"; + r_iarg.def_param_mode = ArgumentInterface::NULLABLE_VAL; + break; + default: {} + } + + if (r_iarg.def_param_mode == ArgumentInterface::CONSTANT && r_iarg.type == "Variant" && r_iarg.default_argument != "null") + r_iarg.def_param_mode = ArgumentInterface::NULLABLE_REF; +} + +void BindingsGenerator::_populate_builtin_type_interfaces() { + + builtin_types.clear(); + + TypeInterface itype; + +#define INSERT_STRUCT_TYPE(m_type, m_type_in) \ + { \ + itype = TypeInterface::create_value_type(#m_type); \ + itype.c_in = "\tMARSHALLED_IN(" #m_type ", %1, %1_in);\n"; \ + itype.c_out = "\tMARSHALLED_OUT(" #m_type ", %1, ret_out)\n" \ + "\treturn mono_value_box(mono_domain_get(), CACHED_CLASS_RAW(%2), ret_out);\n"; \ + itype.c_arg_in = "&%s_in"; \ + itype.c_type_in = m_type_in; \ + itype.cs_in = "ref %s"; \ + itype.cs_out = "return (" #m_type ")%0;"; \ + itype.im_type_out = "object"; \ + builtin_types.insert(#m_type, itype); \ + } + + INSERT_STRUCT_TYPE(Vector2, "real_t*") + INSERT_STRUCT_TYPE(Rect2, "real_t*") + INSERT_STRUCT_TYPE(Transform2D, "real_t*") + INSERT_STRUCT_TYPE(Vector3, "real_t*") + INSERT_STRUCT_TYPE(Basis, "real_t*") + INSERT_STRUCT_TYPE(Quat, "real_t*") + INSERT_STRUCT_TYPE(Transform, "real_t*") + INSERT_STRUCT_TYPE(Rect3, "real_t*") + INSERT_STRUCT_TYPE(Color, "real_t*") + INSERT_STRUCT_TYPE(Plane, "real_t*") + +#undef INSERT_STRUCT_TYPE + +#define INSERT_PRIMITIVE_TYPE(m_type) \ + { \ + itype = TypeInterface::create_value_type(#m_type); \ + itype.c_arg_in = "&%s"; \ + itype.c_type_in = #m_type; \ + itype.c_type_out = #m_type; \ + itype.im_type_in = #m_type; \ + itype.im_type_out = #m_type; \ + builtin_types.insert(#m_type, itype); \ + } + + INSERT_PRIMITIVE_TYPE(bool) + //INSERT_PRIMITIVE_TYPE(int) + + // int + itype = TypeInterface::create_value_type("int"); + itype.c_arg_in = "&%s_in"; + //* ptrcall only supports int64_t and uint64_t + itype.c_in = "\t%0 %1_in = (%0)%1;\n"; + itype.c_out = "\treturn (%0)%1;\n"; + itype.c_type = "int64_t"; + //*/ + itype.c_type_in = itype.name; + itype.c_type_out = itype.name; + itype.im_type_in = itype.name; + itype.im_type_out = itype.name; + builtin_types.insert(itype.name, itype); + +#undef INSERT_PRIMITIVE_TYPE + + // real_t + itype = TypeInterface(); +#ifdef REAL_T_IS_DOUBLE + itype.name = "double"; +#else + itype.name = "float"; +#endif + itype.proxy_name = itype.name; + itype.c_arg_in = "&%s_in"; + //* ptrcall only supports double + itype.c_in = "\t%0 %1_in = (%0)%1;\n"; + itype.c_out = "\treturn (%0)%1;\n"; + itype.c_type = "double"; + //*/ + itype.c_type_in = "real_t"; + itype.c_type_out = "real_t"; + itype.cs_type = itype.proxy_name; + itype.im_type_in = itype.proxy_name; + itype.im_type_out = itype.proxy_name; + builtin_types.insert(itype.name, itype); + + // String + itype = TypeInterface(); + itype.name = "String"; + itype.proxy_name = "string"; + itype.c_in = "\t%0 %1_in = " C_METHOD_MONOSTR_TO_GODOT "(%1);\n"; + itype.c_out = "\treturn " C_METHOD_MONOSTR_FROM_GODOT "(%1);\n"; + itype.c_arg_in = "&%s_in"; + itype.c_type = itype.name; + itype.c_type_in = "MonoString*"; + itype.c_type_out = "MonoString*"; + itype.cs_type = itype.proxy_name; + itype.im_type_in = itype.proxy_name; + itype.im_type_out = itype.proxy_name; + builtin_types.insert(itype.name, itype); + + // NodePath + itype = TypeInterface(); + itype.name = "NodePath"; + itype.proxy_name = "NodePath"; + itype.c_out = "\treturn memnew(NodePath(%1));\n"; + itype.c_type = itype.name; + itype.c_type_in = itype.c_type + "*"; + itype.c_type_out = itype.c_type + "*"; + itype.cs_type = itype.proxy_name; + itype.cs_in = "NodePath." CS_SMETHOD_GETINSTANCE "(%0)"; + itype.cs_out = "return new NodePath(%0);"; + itype.im_type_in = "IntPtr"; + itype.im_type_out = "IntPtr"; + _populate_builtin_type(itype, Variant::NODE_PATH); + extra_members.insert(itype.name, MEMBER_BEGIN "public NodePath() : this(string.Empty) {}\n" MEMBER_BEGIN "public NodePath(string path)\n" OPEN_BLOCK_L2 + "this." BINDINGS_PTR_FIELD " = NativeCalls.godot_icall_NodePath_Ctor(path);\n" CLOSE_BLOCK_L2 + MEMBER_BEGIN "public static implicit operator NodePath(string from)\n" OPEN_BLOCK_L2 "return new NodePath(from);\n" CLOSE_BLOCK_L2 + MEMBER_BEGIN "public static implicit operator string(NodePath from)\n" OPEN_BLOCK_L2 + "return NativeCalls." ICALL_PREFIX "NodePath_operator_String(NodePath." CS_SMETHOD_GETINSTANCE "(from));\n" CLOSE_BLOCK_L2); + builtin_types.insert(itype.name, itype); + + // RID + itype = TypeInterface(); + itype.name = "RID"; + itype.proxy_name = "RID"; + itype.c_out = "\treturn memnew(RID(%1));\n"; + itype.c_type = itype.name; + itype.c_type_in = itype.c_type + "*"; + itype.c_type_out = itype.c_type + "*"; + itype.cs_type = itype.proxy_name; + itype.cs_in = "RID." CS_SMETHOD_GETINSTANCE "(%0)"; + itype.cs_out = "return new RID(%0);"; + itype.im_type_in = "IntPtr"; + itype.im_type_out = "IntPtr"; + _populate_builtin_type(itype, Variant::_RID); + extra_members.insert(itype.name, MEMBER_BEGIN "internal RID()\n" OPEN_BLOCK_L2 + "this." BINDINGS_PTR_FIELD " = IntPtr.Zero;\n" CLOSE_BLOCK_L2); + builtin_types.insert(itype.name, itype); + + // Variant + itype = TypeInterface(); + itype.name = "Variant"; + itype.proxy_name = "object"; + itype.c_in = "\t%0 %1_in = " C_METHOD_MANAGED_TO_VARIANT "(%1);\n"; + itype.c_out = "\treturn " C_METHOD_MANAGED_FROM_VARIANT "(%1);\n"; + itype.c_arg_in = "&%s_in"; + itype.c_type = itype.name; + itype.c_type_in = "MonoObject*"; + itype.c_type_out = "MonoObject*"; + itype.cs_type = itype.proxy_name; + itype.im_type_in = "object"; + itype.im_type_out = itype.proxy_name; + builtin_types.insert(itype.name, itype); + + // VarArg (fictitious type to represent variable arguments) + itype = TypeInterface(); + itype.name = "VarArg"; + itype.proxy_name = "object[]"; + itype.c_in = "\t%0 %1_in = " C_METHOD_MONOARRAY_TO(Array) "(%1);\n"; + itype.c_arg_in = "&%s_in"; + itype.c_type = "Array"; + itype.c_type_in = "MonoArray*"; + itype.cs_type = "params object[]"; + itype.im_type_in = "object[]"; + builtin_types.insert(itype.name, itype); + +#define INSERT_ARRAY_FULL(m_name, m_type, m_proxy_t) \ + { \ + itype = TypeInterface(); \ + itype.name = #m_name; \ + itype.proxy_name = #m_proxy_t "[]"; \ + itype.c_in = "\t%0 %1_in = " C_METHOD_MONOARRAY_TO(m_type) "(%1);\n"; \ + itype.c_out = "\treturn " C_METHOD_MONOARRAY_FROM(m_type) "(%1);\n"; \ + itype.c_arg_in = "&%s_in"; \ + itype.c_type = #m_type; \ + itype.c_type_in = "MonoArray*"; \ + itype.c_type_out = "MonoArray*"; \ + itype.cs_type = itype.proxy_name; \ + itype.im_type_in = itype.proxy_name; \ + itype.im_type_out = itype.proxy_name; \ + builtin_types.insert(itype.name, itype); \ + } + +#define INSERT_ARRAY(m_type, m_proxy_t) INSERT_ARRAY_FULL(m_type, m_type, m_proxy_t) + + INSERT_ARRAY(Array, object); + INSERT_ARRAY(PoolIntArray, int); + INSERT_ARRAY_FULL(PoolByteArray, PoolByteArray, byte); + +#ifdef REAL_T_IS_DOUBLE + INSERT_ARRAY(PoolRealArray, double); +#else + INSERT_ARRAY(PoolRealArray, float); +#endif + + INSERT_ARRAY(PoolStringArray, string); + + INSERT_ARRAY(PoolColorArray, Color); + INSERT_ARRAY(PoolVector2Array, Vector2); + INSERT_ARRAY(PoolVector3Array, Vector3); + +#undef INSERT_ARRAY + + // Dictionary + itype = TypeInterface(); + itype.name = "Dictionary"; + itype.proxy_name = "Dictionary<object, object>"; + itype.c_in = "\t%0 %1_in = " C_METHOD_MANAGED_TO_DICT "(%1);\n"; + itype.c_out = "\treturn " C_METHOD_MANAGED_FROM_DICT "(%1);\n"; + itype.c_arg_in = "&%s_in"; + itype.c_type = itype.name; + itype.c_type_in = "MonoObject*"; + itype.c_type_out = "MonoObject*"; + itype.cs_type = itype.proxy_name; + itype.im_type_in = itype.proxy_name; + itype.im_type_out = itype.proxy_name; + builtin_types.insert(itype.name, itype); + + // void (fictitious type to represent the return type of methods that do not return anything) + itype = TypeInterface(); + itype.name = "void"; + itype.proxy_name = itype.name; + itype.c_type = itype.name; + itype.c_type_in = itype.c_type; + itype.c_type_out = itype.c_type; + itype.cs_type = itype.proxy_name; + itype.im_type_in = itype.proxy_name; + itype.im_type_out = itype.proxy_name; + builtin_types.insert(itype.name, itype); + + // Error + itype = TypeInterface(); + itype.name = "Error"; + itype.proxy_name = "Error"; + itype.c_type = itype.name; + itype.c_type_in = itype.c_type; + itype.c_type_out = itype.c_type; + itype.cs_type = itype.proxy_name; + itype.cs_in = "(int)%0"; + itype.cs_out = "return (Error)%s;"; + itype.im_type_in = "int"; + itype.im_type_out = "int"; + builtin_types.insert(itype.name, itype); +} + +void BindingsGenerator::_populate_builtin_type(TypeInterface &r_itype, Variant::Type vtype) { + + Variant::CallError cerror; + Variant v = Variant::construct(vtype, NULL, 0, cerror); + + List<MethodInfo> method_list; + v.get_method_list(&method_list); + method_list.sort(); + + for (List<MethodInfo>::Element *E = method_list.front(); E; E = E->next()) { + MethodInfo &mi = E->get(); + MethodInterface imethod; + + imethod.name = mi.name; + imethod.proxy_name = mi.name; + + for (int i = 0; i < mi.arguments.size(); i++) { + ArgumentInterface iarg; + PropertyInfo pi = mi.arguments[i]; + + iarg.name = pi.name; + + if (pi.type == Variant::NIL) + iarg.type = "Variant"; + else + iarg.type = Variant::get_type_name(pi.type); + + if (!r_itype.requires_collections && iarg.type == "Dictionary") + r_itype.requires_collections = true; + + if ((mi.default_arguments.size() - mi.arguments.size() + i) >= 0) + _default_argument_from_variant(Variant::construct(pi.type, NULL, 0, cerror), iarg); + + imethod.add_argument(iarg); + } + + if (mi.return_val.type == Variant::NIL) { + if (mi.return_val.name != "") + imethod.return_type = "Variant"; + } else { + imethod.return_type = Variant::get_type_name(mi.return_val.type); + } + + if (!r_itype.requires_collections && imethod.return_type == "Dictionary") + r_itype.requires_collections = true; + + if (r_itype.class_doc) { + for (int i = 0; i < r_itype.class_doc->methods.size(); i++) { + if (r_itype.class_doc->methods[i].name == imethod.name) { + imethod.method_doc = &r_itype.class_doc->methods[i]; + break; + } + } + } + + r_itype.methods.push_back(imethod); + } +} + +BindingsGenerator::BindingsGenerator() { + + EditorHelp::generate_doc(); + + _populate_object_type_interfaces(); + _populate_builtin_type_interfaces(); + _generate_header_icalls(); + + for (Map<String, TypeInterface>::Element *E = obj_types.front(); E; E = E->next()) + _generate_method_icalls(E->get()); + + _generate_method_icalls(builtin_types["NodePath"]); + _generate_method_icalls(builtin_types["RID"]); +} + +void BindingsGenerator::handle_cmdline_args(const List<String> &p_cmdline_args) { + + int options_count = 3; + + String mono_glue_option = "--generate-mono-glue"; + String cs_core_api_option = "--generate-cs-core-api"; + String cs_editor_api_option = "--generate-cs-editor-api"; + + verbose_output = true; + + const List<String>::Element *elem = p_cmdline_args.front(); + + while (elem && options_count) { + + if (elem->get() == mono_glue_option) { + + const List<String>::Element *path_elem = elem->next(); + + if (path_elem) { + get_singleton().generate_glue(path_elem->get()); + elem = elem->next(); + } else { + ERR_PRINTS("--generate-mono-glue: No output directory specified"); + } + + --options_count; + + } else if (elem->get() == cs_core_api_option) { + + const List<String>::Element *path_elem = elem->next(); + + if (path_elem) { + get_singleton().generate_cs_core_project(path_elem->get()); + elem = elem->next(); + } else { + ERR_PRINTS(cs_core_api_option + ": No output directory specified"); + } + + --options_count; + + } else if (elem->get() == cs_editor_api_option) { + + const List<String>::Element *path_elem = elem->next(); + + if (path_elem) { + if (path_elem->next()) { + get_singleton().generate_cs_editor_project(path_elem->get(), path_elem->next()->get()); + elem = path_elem->next(); + } else { + ERR_PRINTS(cs_editor_api_option + ": No hint path for the Core API dll specified"); + } + } else { + ERR_PRINTS(cs_editor_api_option + ": No output directory specified"); + } + + --options_count; + } + + elem = elem->next(); + } + + verbose_output = false; +} + +#endif diff --git a/modules/mono/editor/bindings_generator.h b/modules/mono/editor/bindings_generator.h new file mode 100644 index 0000000000..437a566556 --- /dev/null +++ b/modules/mono/editor/bindings_generator.h @@ -0,0 +1,429 @@ +/*************************************************************************/ +/* bindings_generator.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 BINDINGS_GENERATOR_H +#define BINDINGS_GENERATOR_H + +#include "class_db.h" +#include "editor/doc/doc_data.h" +#include "editor/editor_help.h" + +#ifdef DEBUG_METHODS_ENABLED + +#include "ustring.h" + +class BindingsGenerator { + struct ArgumentInterface { + enum DefaultParamMode { + CONSTANT, + NULLABLE_VAL, + NULLABLE_REF + }; + + String type; + String name; + String default_argument; + DefaultParamMode def_param_mode; + + ArgumentInterface() { + def_param_mode = CONSTANT; + } + }; + + struct MethodInterface { + String name; + + /** + * Name of the C# method + */ + String proxy_name; + + /** + * [TypeInterface::name] of the return type + */ + String return_type; + + /** + * Determines if the method has a variable number of arguments (VarArg) + */ + bool is_vararg; + + /** + * Virtual methods ("virtual" as defined by the Godot API) are methods that by default do nothing, + * but can be overridden by the user to add custom functionality. + * e.g.: _ready, _process, etc. + */ + bool is_virtual; + + /** + * Determines if the call should fallback to Godot's object.Call(string, params) in C#. + */ + bool requires_object_call; + + /** + * Determines if the method visibility is `internal` (visible only to files in the same assembly). + * Currently, we only use this for methods that are not meant to be exposed, + * but are required by properties as getters or setters. + * Methods that are not meant to be exposed are those that begin with underscore and are not virtual. + */ + bool is_internal; + + List<ArgumentInterface> arguments; + + const DocData::MethodDoc *method_doc; + + void add_argument(const ArgumentInterface &argument) { + arguments.push_back(argument); + } + + MethodInterface() { + return_type = "void"; + is_vararg = false; + is_virtual = false; + requires_object_call = false; + is_internal = false; + method_doc = NULL; + } + }; + + struct TypeInterface { + /** + * Identifier name for this type. + * Also used to format [c_out]. + */ + String name; + + /** + * Identifier name of the base class. + */ + String base_name; + + /** + * Name of the C# class + */ + String proxy_name; + + ClassDB::APIType api_type; + + bool is_object_type; + bool is_singleton; + bool is_reference; + + /** + * Used only by Object-derived types. + * Determines if this type is not virtual (incomplete). + * e.g.: CanvasItem cannot be instantiated. + */ + bool is_instantiable; + + /** + * Used only by Object-derived types. + * Determines if the C# class owns the native handle and must free it somehow when disposed. + * e.g.: Reference types must notify when the C# instance is disposed, for proper refcounting. + */ + bool memory_own; + + /** + * Determines if the file must have a using directive for System.Collections.Generic + * e.g.: When the generated class makes use of Dictionary + */ + bool requires_collections; + + // !! The comments of the following fields make reference to other fields via square brackets, e.g.: [field_name] + // !! When renaming those fields, make sure to rename their references in the comments + + // --- C INTERFACE --- + + static const char *DEFAULT_VARARG_C_IN; + + /** + * One or more statements that manipulate the parameter before being passed as argument of a ptrcall. + * If the statement adds a local that must be passed as the argument instead of the parameter, + * the name of that local must be specified with [c_arg_in]. + * For variadic methods, this field is required and, if empty, [DEFAULT_VARARG_C_IN] is used instead. + * Formatting elements: + * %0: [c_type] of the parameter + * %1: name of the parameter + */ + String c_in; + + /** + * Determines the name of the variable that will be passed as argument to a ptrcall. + * By default the value equals the name of the parameter, + * this varies for types that require special manipulation via [c_in]. + * Formatting elements: + * %0 or %s: name of the parameter + */ + String c_arg_in; + + /** + * One or more statements that determine how a variable of this type is returned from a function. + * It must contain the return statement(s). + * Formatting elements: + * %0: [c_type_out] of the return type + * %1: name of the variable to be returned + * %2: [name] of the return type + */ + String c_out; + + /** + * The actual expected type, as seen (in most cases) in Variant copy constructors + * Used for the type of the return variable and to format [c_in]. + * The value must be the following depending of the type: + * Object-derived types: Object* + * Other types: [name] + * -- Exceptions -- + * VarArg (fictitious type to represent variable arguments): Array + * float: double (because ptrcall only supports double) + * int: int64_t (because ptrcall only supports int64_t and uint64_t) + * Reference types override this for the type of the return variable: Ref<Reference> + */ + String c_type; + + /** + * Determines the type used for parameters in function signatures. + */ + String c_type_in; + + /** + * Determines the return type used for function signatures. + * Also used to construct a default value to return in case of errors, + * and to format [c_out]. + */ + String c_type_out; + + // --- C# INTERFACE --- + + /** + * An expression that overrides the way the parameter is passed to the internal call. + * If empty, the parameter is passed as is. + * Formatting elements: + * %0 or %s: name of the parameter + */ + String cs_in; + + /** + * One or more statements that determine how a variable of this type is returned from a method. + * It must contain the return statement(s). + * Formatting elements: + * %0 or %s: name of the variable to be returned + */ + String cs_out; + + /** + * Type used for method signatures, both for parameters and the return type. + * Same as [proxy_name] except for variable arguments (VarArg). + */ + String cs_type; + + /** + * Type used for parameters of internal call methods. + */ + String im_type_in; + + /** + * Type used for the return type of internal call methods. + * If [cs_out] is not empty and the method return type is not void, + * it is also used for the type of the return variable. + */ + String im_type_out; + + const DocData::ClassDoc *class_doc; + + List<MethodInterface> methods; + + const MethodInterface *find_method_by_name(const String &p_name) const { + + for (const List<MethodInterface>::Element *E = methods.front(); E; E = E->next()) { + if (E->get().name == p_name) + return &E->get(); + } + + return NULL; + } + + static TypeInterface create_value_type(const String &p_name) { + TypeInterface itype; + + itype.name = p_name; + itype.proxy_name = p_name; + + itype.c_type = itype.name; + itype.c_type_in = "void*"; + itype.c_type_out = "MonoObject*"; + itype.cs_type = itype.proxy_name; + itype.im_type_in = "ref " + itype.proxy_name; + itype.im_type_out = itype.proxy_name; + itype.class_doc = &EditorHelp::get_doc_data()->class_list[itype.proxy_name]; + + return itype; + } + + static TypeInterface create_object_type(const String &p_name, ClassDB::APIType p_api_type) { + TypeInterface itype; + + itype.name = p_name; + itype.proxy_name = p_name.begins_with("_") ? p_name.substr(1, p_name.length()) : p_name; + itype.api_type = p_api_type; + itype.is_object_type = true; + itype.class_doc = &EditorHelp::get_doc_data()->class_list[itype.proxy_name]; + + return itype; + } + + static void create_placeholder_type(TypeInterface &r_itype, const String &p_name) { + r_itype.name = p_name; + r_itype.proxy_name = p_name; + + r_itype.c_type = r_itype.name; + r_itype.c_type_in = "MonoObject*"; + r_itype.c_type_out = "MonoObject*"; + r_itype.cs_type = r_itype.proxy_name; + r_itype.im_type_in = r_itype.proxy_name; + r_itype.im_type_out = r_itype.proxy_name; + } + + TypeInterface() { + + api_type = ClassDB::API_NONE; + + is_object_type = false; + is_singleton = false; + is_reference = false; + is_instantiable = false; + + memory_own = false; + requires_collections = false; + + c_arg_in = "%s"; + + class_doc = NULL; + } + }; + + struct InternalCall { + String name; + String im_type_out; // Return type for the C# method declaration. Also used as companion of [unique_siq] + String im_sig; // Signature for the C# method declaration + String unique_sig; // Unique signature to avoid duplicates in containers + bool editor_only; + + InternalCall() {} + + InternalCall(const String &p_name, const String &p_im_type_out, const String &p_im_sig = String(), const String &p_unique_sig = String()) { + name = p_name; + im_type_out = p_im_type_out; + im_sig = p_im_sig; + unique_sig = p_unique_sig; + editor_only = false; + } + + InternalCall(ClassDB::APIType api_type, const String &p_name, const String &p_im_type_out, const String &p_im_sig = String(), const String &p_unique_sig = String()) { + name = p_name; + im_type_out = p_im_type_out; + im_sig = p_im_sig; + unique_sig = p_unique_sig; + editor_only = api_type == ClassDB::API_EDITOR; + } + + inline bool operator==(const InternalCall &p_a) const { + return p_a.unique_sig == unique_sig; + } + }; + + static bool verbose_output; + + Map<String, TypeInterface> placeholder_types; + Map<String, TypeInterface> builtin_types; + Map<String, TypeInterface> obj_types; + + Map<String, String> extra_members; + + List<InternalCall> method_icalls; + Map<const MethodInterface *, const InternalCall *> method_icalls_map; + + List<InternalCall> core_custom_icalls; + List<InternalCall> editor_custom_icalls; + + const List<InternalCall>::Element *find_icall_by_name(const String &p_name, const List<InternalCall> &p_list) { + + const List<InternalCall>::Element *it = p_list.front(); + while (it) { + if (it->get().name == p_name) return it; + it = it->next(); + } + return NULL; + } + + inline String get_unique_sig(const TypeInterface &p_type) { + if (p_type.is_reference) + return "Ref"; + else if (p_type.is_object_type) + return "Obj"; + + return p_type.name; + } + + void _generate_header_icalls(); + void _generate_method_icalls(const TypeInterface &p_itype); + + const TypeInterface *_get_type_by_name_or_null(const String &p_name); + const TypeInterface *_get_type_by_name_or_placeholder(const String &p_name); + + void _default_argument_from_variant(const Variant &p_var, ArgumentInterface &r_iarg); + void _populate_builtin_type(TypeInterface &r_type, Variant::Type vtype); + + void _populate_object_type_interfaces(); + void _populate_builtin_type_interfaces(); + + Error _generate_cs_type(const TypeInterface &itype, const String &p_output_file); + + Error _save_file(const String &path, const List<String> &content); + + BindingsGenerator(); + + BindingsGenerator(const BindingsGenerator &); + BindingsGenerator &operator=(const BindingsGenerator &); + +public: + Error generate_cs_core_project(const String &p_output_dir, bool p_verbose_output = true); + Error generate_cs_editor_project(const String &p_output_dir, const String &p_core_dll_path, bool p_verbose_output = true); + Error generate_glue(const String &p_output_dir); + + static BindingsGenerator &get_singleton() { + static BindingsGenerator singleton; + return singleton; + } + + static void handle_cmdline_args(const List<String> &p_cmdline_args); +}; + +#endif + +#endif // BINDINGS_GENERATOR_H diff --git a/modules/mono/editor/csharp_project.cpp b/modules/mono/editor/csharp_project.cpp new file mode 100644 index 0000000000..bde5f0fd0b --- /dev/null +++ b/modules/mono/editor/csharp_project.cpp @@ -0,0 +1,120 @@ +/*************************************************************************/ +/* csharp_project.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 "csharp_project.h" + +#include "os/os.h" +#include "project_settings.h" + +#include "../mono_gd/gd_mono_class.h" +#include "../mono_gd/gd_mono_marshal.h" + +namespace CSharpProject { + +String generate_core_api_project(const String &p_dir, const Vector<String> &p_files) { + + _GDMONO_SCOPE_DOMAIN_(TOOLS_DOMAIN) + + GDMonoClass *klass = GDMono::get_singleton()->get_editor_tools_assembly()->get_class("GodotSharpTools.Project", "ProjectGenerator"); + + Variant dir = p_dir; + Variant compile_items = p_files; + const Variant *args[2] = { &dir, &compile_items }; + MonoObject *ex = NULL; + MonoObject *ret = klass->get_method("GenCoreApiProject", 2)->invoke(NULL, args, &ex); + + if (ex) { + mono_print_unhandled_exception(ex); + ERR_FAIL_V(String()); + } + + return ret ? GDMonoMarshal::mono_string_to_godot((MonoString *)ret) : ""; +} + +String generate_editor_api_project(const String &p_dir, const String &p_core_dll_path, const Vector<String> &p_files) { + + _GDMONO_SCOPE_DOMAIN_(TOOLS_DOMAIN) + + GDMonoClass *klass = GDMono::get_singleton()->get_editor_tools_assembly()->get_class("GodotSharpTools.Project", "ProjectGenerator"); + + Variant dir = p_dir; + Variant core_dll_path = p_core_dll_path; + Variant compile_items = p_files; + const Variant *args[3] = { &dir, &core_dll_path, &compile_items }; + MonoObject *ex = NULL; + MonoObject *ret = klass->get_method("GenEditorApiProject", 3)->invoke(NULL, args, &ex); + + if (ex) { + mono_print_unhandled_exception(ex); + ERR_FAIL_V(String()); + } + + return ret ? GDMonoMarshal::mono_string_to_godot((MonoString *)ret) : ""; +} + +String generate_game_project(const String &p_dir, const String &p_name, const Vector<String> &p_files) { + + _GDMONO_SCOPE_DOMAIN_(TOOLS_DOMAIN) + + GDMonoClass *klass = GDMono::get_singleton()->get_editor_tools_assembly()->get_class("GodotSharpTools.Project", "ProjectGenerator"); + + Variant dir = p_dir; + Variant name = p_name; + Variant compile_items = p_files; + const Variant *args[3] = { &dir, &name, &compile_items }; + MonoObject *ex = NULL; + MonoObject *ret = klass->get_method("GenGameProject", 3)->invoke(NULL, args, &ex); + + if (ex) { + mono_print_unhandled_exception(ex); + ERR_FAIL_V(String()); + } + + return ret ? GDMonoMarshal::mono_string_to_godot((MonoString *)ret) : ""; +} + +void add_item(const String &p_project_path, const String &p_item_type, const String &p_include) { + + _GDMONO_SCOPE_DOMAIN_(TOOLS_DOMAIN) + + GDMonoClass *klass = GDMono::get_singleton()->get_editor_tools_assembly()->get_class("GodotSharpTools.Project", "ProjectUtils"); + + Variant project_path = p_project_path; + Variant item_type = p_item_type; + Variant include = p_include; + const Variant *args[3] = { &project_path, &item_type, &include }; + MonoObject *ex = NULL; + klass->get_method("AddItemToProjectChecked", 3)->invoke(NULL, args, &ex); + + if (ex) { + mono_print_unhandled_exception(ex); + ERR_FAIL(); + } +} +} // CSharpProject diff --git a/modules/mono/editor/csharp_project.h b/modules/mono/editor/csharp_project.h new file mode 100644 index 0000000000..4832d2251e --- /dev/null +++ b/modules/mono/editor/csharp_project.h @@ -0,0 +1,44 @@ +/*************************************************************************/ +/* csharp_project.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 CSHARP_PROJECT_H +#define CSHARP_PROJECT_H + +#include "ustring.h" + +namespace CSharpProject { + +String generate_core_api_project(const String &p_dir, const Vector<String> &p_files = Vector<String>()); +String generate_editor_api_project(const String &p_dir, const String &p_core_dll_path, const Vector<String> &p_files = Vector<String>()); +String generate_game_project(const String &p_dir, const String &p_name, const Vector<String> &p_files = Vector<String>()); + +void add_item(const String &p_project_path, const String &p_item_type, const String &p_include); +} + +#endif // CSHARP_PROJECT_H diff --git a/modules/mono/editor/godotsharp_builds.cpp b/modules/mono/editor/godotsharp_builds.cpp new file mode 100644 index 0000000000..1bad8a3f85 --- /dev/null +++ b/modules/mono/editor/godotsharp_builds.cpp @@ -0,0 +1,482 @@ +/*************************************************************************/ +/* godotsharp_builds.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 "godotsharp_builds.h" + +#include "main/main.h" + +#include "../godotsharp_dirs.h" +#include "../mono_gd/gd_mono_class.h" +#include "../mono_gd/gd_mono_marshal.h" +#include "../utils/path_utils.h" +#include "bindings_generator.h" +#include "godotsharp_editor.h" + +void godot_icall_BuildInstance_ExitCallback(MonoString *p_solution, MonoString *p_config, int p_exit_code) { + + String solution = GDMonoMarshal::mono_string_to_godot(p_solution); + String config = GDMonoMarshal::mono_string_to_godot(p_config); + GodotSharpBuilds::get_singleton()->build_exit_callback(MonoBuildInfo(solution, config), p_exit_code); +} + +#ifdef UNIX_ENABLED +String _find_build_engine_on_unix(const String &p_name) { + String ret = path_which(p_name); + + if (ret.length()) + return ret; + + const char *locations[] = { +#ifdef OSX_ENABLED + "/Library/Frameworks/Mono.framework/Versions/Current/bin/", +#endif + "/opt/novell/mono/bin/" + }; + + for (int i = 0; i < sizeof(locations) / sizeof(const char *); i++) { + String location = locations[i]; + + if (FileAccess::exists(location + p_name)) { + return location; + } + } + + return String(); +} +#endif + +MonoString *godot_icall_BuildInstance_get_MSBuildPath() { + + GodotSharpBuilds::BuildTool build_tool = GodotSharpBuilds::BuildTool(int(EditorSettings::get_singleton()->get("mono/builds/build_tool"))); + +#if defined(WINDOWS_ENABLED) + switch (build_tool) { + case GodotSharpBuilds::MSBUILD: { + static String msbuild_tools_path = MonoRegUtils::find_msbuild_tools_path(); + + if (msbuild_tools_path.length()) { + if (!msbuild_tools_path.ends_with("\\")) + msbuild_tools_path += "\\"; + + return GDMonoMarshal::mono_string_from_godot(msbuild_tools_path + "MSBuild.exe"); + } + + OS::get_singleton()->print("Cannot find System's MSBuild. Trying with Mono's...\n"); + } + case GodotSharpBuilds::MSBUILD_MONO: { + String msbuild_path = GDMono::get_singleton()->get_mono_reg_info().bin_dir.plus_file("msbuild.bat"); + + if (!FileAccess::exists(msbuild_path)) { + WARN_PRINTS("Cannot find msbuild ('mono/builds/build_tool'). Tried with path: " + msbuild_path); + } + + return GDMonoMarshal::mono_string_from_godot(msbuild_path); + } + case GodotSharpBuilds::XBUILD: { + String xbuild_path = GDMono::get_singleton()->get_mono_reg_info().bin_dir.plus_file("xbuild.bat"); + + if (!FileAccess::exists(xbuild_path)) { + WARN_PRINTS("Cannot find xbuild ('mono/builds/build_tool'). Tried with path: " + xbuild_path); + } + + return GDMonoMarshal::mono_string_from_godot(xbuild_path); + } + default: + ERR_EXPLAIN("You don't deserve to live"); + CRASH_NOW(); + } +#elif defined(UNIX_ENABLED) + static String msbuild_path = _find_build_engine_on_unix("msbuild"); + static String xbuild_path = _find_build_engine_on_unix("xbuild"); + + if (build_tool != GodotSharpBuilds::XBUILD) { + if (msbuild_path.empty()) { + WARN_PRINT("Cannot find msbuild ('mono/builds/build_tool')."); + return NULL; + } + } else { + if (xbuild_path.empty()) { + WARN_PRINT("Cannot find xbuild ('mono/builds/build_tool')."); + return NULL; + } + } + + return GDMonoMarshal::mono_string_from_godot(build_tool != GodotSharpBuilds::XBUILD ? msbuild_path : xbuild_path); +#else + return NULL; +#endif +} + +void GodotSharpBuilds::_register_internal_calls() { + + mono_add_internal_call("GodotSharpTools.Build.BuildSystem::godot_icall_BuildInstance_ExitCallback", (void *)godot_icall_BuildInstance_ExitCallback); + mono_add_internal_call("GodotSharpTools.Build.BuildInstance::godot_icall_BuildInstance_get_MSBuildPath", (void *)godot_icall_BuildInstance_get_MSBuildPath); +} + +void GodotSharpBuilds::show_build_error_dialog(const String &p_message) { + + GodotSharpEditor::get_singleton()->show_error_dialog(p_message, "Build error"); + MonoBottomPanel::get_singleton()->show_build_tab(); +} + +bool GodotSharpBuilds::build_api_sln(const String &p_name, const String &p_api_sln_dir, const String &p_config) { + + String api_sln_file = p_api_sln_dir.plus_file(p_name + ".sln"); + String api_assembly_dir = p_api_sln_dir.plus_file("bin").plus_file(p_config); + String api_assembly_file = api_assembly_dir.plus_file(p_name + ".dll"); + + if (!FileAccess::exists(api_assembly_file)) { + MonoBuildInfo api_build_info(api_sln_file, p_config); + api_build_info.custom_props.push_back("NoWarn=1591"); // Ignore missing documentation warnings + + if (!GodotSharpBuilds::get_singleton()->build(api_build_info)) { + show_build_error_dialog("Failed to build " + p_name + " solution."); + return false; + } + } + + return true; +} + +bool GodotSharpBuilds::copy_api_assembly(const String &p_src_dir, const String &p_dst_dir, const String &p_assembly_name) { + + String assembly_file = p_assembly_name + ".dll"; + String assembly_src = p_src_dir.plus_file(assembly_file); + String assembly_dst = p_dst_dir.plus_file(assembly_file); + + if (!FileAccess::exists(assembly_dst) || FileAccess::get_modified_time(assembly_src) > FileAccess::get_modified_time(assembly_dst)) { + DirAccess *da = DirAccess::create(DirAccess::ACCESS_FILESYSTEM); + + String xml_file = p_assembly_name + ".xml"; + if (da->copy(p_src_dir.plus_file(xml_file), p_dst_dir.plus_file(xml_file)) != OK) + WARN_PRINTS("Failed to copy " + xml_file); + + String pdb_file = p_assembly_name + ".pdb"; + if (da->copy(p_src_dir.plus_file(pdb_file), p_dst_dir.plus_file(pdb_file)) != OK) + WARN_PRINTS("Failed to copy " + pdb_file); + + Error err = da->copy(assembly_src, assembly_dst); + + memdelete(da); + + if (err != OK) { + show_build_error_dialog("Failed to copy " API_ASSEMBLY_NAME ".dll"); + return false; + } + } + + return true; +} + +bool GodotSharpBuilds::make_api_sln(GodotSharpBuilds::APIType p_api_type) { + + String api_name = p_api_type == API_CORE ? API_ASSEMBLY_NAME : EDITOR_API_ASSEMBLY_NAME; + String api_build_config = "Release"; + + EditorProgress pr("mono_build_release_" + api_name, "Building " + api_name + " solution...", 4); + + pr.step("Generating " + api_name + " solution"); + + uint64_t core_hash = GDMono::get_singleton()->get_api_core_hash(); + uint64_t editor_hash = GDMono::get_singleton()->get_api_editor_hash(); + + String core_api_sln_dir = GodotSharpDirs::get_mono_solutions_dir().plus_file(API_ASSEMBLY_NAME "_" + itos(core_hash)); + String editor_api_sln_dir = GodotSharpDirs::get_mono_solutions_dir().plus_file(EDITOR_API_ASSEMBLY_NAME "_" + itos(editor_hash)); + + String api_sln_dir = p_api_type == API_CORE ? core_api_sln_dir : editor_api_sln_dir; + String api_sln_file = api_sln_dir.plus_file(api_name + ".sln"); + + if (!DirAccess::exists(api_sln_dir) || !FileAccess::exists(api_sln_file)) { + String core_api_assembly; + + if (p_api_type == API_EDITOR) { + core_api_assembly = core_api_sln_dir.plus_file("bin") + .plus_file(api_build_config) + .plus_file(API_ASSEMBLY_NAME ".dll"); + } + +#ifndef DEBUG_METHODS_ENABLED +#error "How am I supposed to generate the bindings?" +#endif + + BindingsGenerator &gen = BindingsGenerator::get_singleton(); + bool gen_verbose = OS::get_singleton()->is_stdout_verbose(); + + Error err = p_api_type == API_CORE ? + gen.generate_cs_core_project(api_sln_dir, gen_verbose) : + gen.generate_cs_editor_project(api_sln_dir, core_api_assembly, gen_verbose); + + if (err != OK) { + show_build_error_dialog("Failed to generate " + api_name + " solution. Error: " + itos(err)); + return false; + } + } + + pr.step("Building " + api_name + " solution"); + + if (!GodotSharpBuilds::build_api_sln(api_name, api_sln_dir, api_build_config)) + return false; + + pr.step("Copying " + api_name + " assembly"); + + String res_assemblies_dir = GodotSharpDirs::get_res_assemblies_dir(); + + // Create assemblies directory if needed + if (!DirAccess::exists(res_assemblies_dir)) { + DirAccess *da = DirAccess::create_for_path(res_assemblies_dir); + Error err = da->make_dir_recursive(res_assemblies_dir); + memdelete(da); + + if (err != OK) { + show_build_error_dialog("Failed to create assemblies directory. Error: " + itos(err)); + return false; + } + } + + // Copy the built assembly to the assemblies directory + String api_assembly_dir = api_sln_dir.plus_file("bin").plus_file(api_build_config); + if (!GodotSharpBuilds::copy_api_assembly(api_assembly_dir, res_assemblies_dir, api_name)) + return false; + + pr.step("Done"); + + return true; +} + +bool godotsharp_build_callback() { + + if (!FileAccess::exists(GodotSharpDirs::get_project_sln_path())) + return true; // No solution to build + + if (!GodotSharpBuilds::make_api_sln(GodotSharpBuilds::API_CORE)) + return false; + + if (!GodotSharpBuilds::make_api_sln(GodotSharpBuilds::API_EDITOR)) + return false; + + EditorProgress pr("mono_project_debug_build", "Building project solution...", 2); + + pr.step("Building project solution"); + + MonoBuildInfo build_info(GodotSharpDirs::get_project_sln_path(), "Tools"); + if (!GodotSharpBuilds::get_singleton()->build(build_info)) { + GodotSharpBuilds::show_build_error_dialog("Failed to build project solution"); + return false; + } + + pr.step("Done"); + + return true; +} + +GodotSharpBuilds *GodotSharpBuilds::singleton = NULL; + +void GodotSharpBuilds::build_exit_callback(const MonoBuildInfo &p_build_info, int p_exit_code) { + + BuildProcess *match = builds.getptr(p_build_info); + ERR_FAIL_COND(!match); + + BuildProcess &bp = *match; + bp.on_exit(p_exit_code); +} + +void GodotSharpBuilds::restart_build(MonoBuildTab *p_build_tab) { +} + +void GodotSharpBuilds::stop_build(MonoBuildTab *p_build_tab) { +} + +bool GodotSharpBuilds::build(const MonoBuildInfo &p_build_info) { + + BuildProcess *match = builds.getptr(p_build_info); + + if (match) { + BuildProcess &bp = *match; + bp.start(true); + return bp.exit_code == 0; + } else { + BuildProcess bp = BuildProcess(p_build_info); + bp.start(true); + builds.set(p_build_info, bp); + return bp.exit_code == 0; + } +} + +bool GodotSharpBuilds::build_async(const MonoBuildInfo &p_build_info, GodotSharpBuild_ExitCallback p_callback) { + + BuildProcess *match = builds.getptr(p_build_info); + + if (match) { + BuildProcess &bp = *match; + bp.start(); + return !bp.exited; // failed to start + } else { + BuildProcess bp = BuildProcess(p_build_info, p_callback); + bp.start(); + builds.set(p_build_info, bp); + return !bp.exited; // failed to start + } +} + +GodotSharpBuilds::GodotSharpBuilds() { + + singleton = this; + + EditorNode::get_singleton()->add_build_callback(&godotsharp_build_callback); + + // Build tool settings + EditorSettings *ed_settings = EditorSettings::get_singleton(); + if (!ed_settings->has_setting("mono/builds/build_tool")) { + ed_settings->set_setting("mono/builds/build_tool", MSBUILD); + } + ed_settings->add_property_hint(PropertyInfo(Variant::INT, "mono/builds/build_tool", PROPERTY_HINT_ENUM, "MSBuild (System),MSBuild (Mono),xbuild")); +} + +GodotSharpBuilds::~GodotSharpBuilds() { + + singleton = NULL; +} + +void GodotSharpBuilds::BuildProcess::on_exit(int p_exit_code) { + + exited = true; + exit_code = p_exit_code; + build_tab->on_build_exit(p_exit_code == 0 ? MonoBuildTab::RESULT_SUCCESS : MonoBuildTab::RESULT_ERROR); + build_instance.unref(); + + if (exit_callback) + exit_callback(exit_code); +} + +void GodotSharpBuilds::BuildProcess::start(bool p_blocking) { + + _GDMONO_SCOPE_DOMAIN_(TOOLS_DOMAIN) + + exit_code = -1; + + String logs_dir = GodotSharpDirs::get_build_logs_dir().plus_file(build_info.solution.md5_text() + "_" + build_info.configuration); + + if (build_tab) { + build_tab->on_build_start(); + } else { + build_tab = memnew(MonoBuildTab(build_info, logs_dir)); + MonoBottomPanel::get_singleton()->add_build_tab(build_tab); + } + + if (p_blocking) { + // Required in order to update the build tasks list + Main::iteration(); + } + + if (!exited) { + ERR_PRINT("BuildProcess::start called, but process still running"); + exited = true; + build_tab->on_build_exec_failed("!exited"); + return; + } + + exited = false; + + // Remove old issues file + + String issues_file = "msbuild_issues.csv"; + DirAccessRef d = DirAccess::create_for_path(logs_dir); + if (d->file_exists(issues_file)) { + Error err = d->remove(issues_file); + if (err != OK) { + ERR_PRINTS("Cannot remove file: " + logs_dir.plus_file(issues_file)); + exited = true; + build_tab->on_build_exec_failed("Cannot remove file: " + issues_file); + return; + } + } + + GDMonoClass *klass = GDMono::get_singleton()->get_editor_tools_assembly()->get_class("GodotSharpTools.Build", "BuildInstance"); + + MonoObject *mono_object = mono_object_new(mono_domain_get(), klass->get_raw()); + + // Construct + + Variant solution = build_info.solution; + Variant config = build_info.configuration; + + const Variant *ctor_args[2] = { &solution, &config }; + + MonoObject *ex = NULL; + GDMonoMethod *ctor = klass->get_method(".ctor", 2); + ctor->invoke(mono_object, ctor_args, &ex); + + if (ex) { + exited = true; + build_tab->on_build_exec_failed("The build constructor threw an exception.\n" + GDMonoUtils::get_exception_name_and_message(ex)); + ERR_FAIL(); + } + + // Call Build + + Variant logger_assembly = OS::get_singleton()->get_executable_path().get_base_dir().plus_file(EDITOR_TOOLS_ASSEMBLY_NAME) + ".dll"; + Variant logger_output_dir = logs_dir; + Variant custom_props = build_info.custom_props; + + const Variant *args[3] = { &logger_assembly, &logger_output_dir, &custom_props }; + + ex = NULL; + GDMonoMethod *build_method = klass->get_method(p_blocking ? "Build" : "BuildAsync", 3); + build_method->invoke(mono_object, args, &ex); + + if (ex) { + exited = true; + build_tab->on_build_exec_failed("The build method threw an exception.\n" + GDMonoUtils::get_exception_name_and_message(ex)); + ERR_FAIL(); + } + + // Build returned + + if (p_blocking) { + exited = true; + exit_code = klass->get_field("exitCode")->get_int_value(mono_object); + + if (exit_code != 0 && OS::get_singleton()->is_stdout_verbose()) + OS::get_singleton()->print(String("MSBuild finished with exit code " + itos(exit_code) + "\n").utf8()); + + build_tab->on_build_exit(exit_code == 0 ? MonoBuildTab::RESULT_SUCCESS : MonoBuildTab::RESULT_ERROR); + } else { + build_instance = MonoGCHandle::create_strong(mono_object); + exited = false; + } +} + +GodotSharpBuilds::BuildProcess::BuildProcess(const MonoBuildInfo &p_build_info, GodotSharpBuild_ExitCallback p_callback) { + + build_info = p_build_info; + build_tab = NULL; + exit_callback = p_callback; + exited = true; + exit_code = -1; +} diff --git a/modules/mono/editor/godotsharp_builds.h b/modules/mono/editor/godotsharp_builds.h new file mode 100644 index 0000000000..6d5fa3b44a --- /dev/null +++ b/modules/mono/editor/godotsharp_builds.h @@ -0,0 +1,96 @@ +/*************************************************************************/ +/* godotsharp_builds.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 GODOTSHARP_BUILDS_H +#define GODOTSHARP_BUILDS_H + +#include "mono_bottom_panel.h" +#include "mono_build_info.h" + +typedef void (*GodotSharpBuild_ExitCallback)(int); + +class GodotSharpBuilds { + +private: + struct BuildProcess { + Ref<MonoGCHandle> build_instance; + MonoBuildInfo build_info; + MonoBuildTab *build_tab; + GodotSharpBuild_ExitCallback exit_callback; + bool exited; + int exit_code; + + void on_exit(int p_exit_code); + void start(bool p_blocking = false); + + BuildProcess() {} + BuildProcess(const MonoBuildInfo &p_build_info, GodotSharpBuild_ExitCallback p_callback = NULL); + }; + + HashMap<MonoBuildInfo, BuildProcess, MonoBuildInfo::Hasher> builds; + + static GodotSharpBuilds *singleton; + + friend class GDMono; + static void _register_internal_calls(); + +public: + enum APIType { + API_CORE, + API_EDITOR + }; + + enum BuildTool { + MSBUILD, + MSBUILD_MONO, + XBUILD + }; + + _FORCE_INLINE_ static GodotSharpBuilds *get_singleton() { return singleton; } + + static void show_build_error_dialog(const String &p_message); + + void build_exit_callback(const MonoBuildInfo &p_build_info, int p_exit_code); + + void restart_build(MonoBuildTab *p_build_tab); + void stop_build(MonoBuildTab *p_build_tab); + + bool build(const MonoBuildInfo &p_build_info); + bool build_async(const MonoBuildInfo &p_build_info, GodotSharpBuild_ExitCallback p_callback = NULL); + + static bool build_api_sln(const String &p_name, const String &p_api_sln_dir, const String &p_config); + static bool copy_api_assembly(const String &p_src_dir, const String &p_dst_dir, const String &p_assembly_name); + + static bool make_api_sln(APIType p_api_type); + + GodotSharpBuilds(); + ~GodotSharpBuilds(); +}; + +#endif // GODOTSHARP_BUILDS_H diff --git a/modules/mono/editor/godotsharp_editor.cpp b/modules/mono/editor/godotsharp_editor.cpp new file mode 100644 index 0000000000..30e7653256 --- /dev/null +++ b/modules/mono/editor/godotsharp_editor.cpp @@ -0,0 +1,256 @@ +/*************************************************************************/ +/* godotsharp_editor.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 "godotsharp_editor.h" + +#include "core/os/os.h" +#include "core/project_settings.h" +#include "scene/gui/control.h" +#include "scene/main/node.h" + +#include "../csharp_script.h" +#include "../godotsharp_dirs.h" +#include "../mono_gd/gd_mono.h" +#include "../utils/path_utils.h" +#include "bindings_generator.h" +#include "csharp_project.h" +#include "net_solution.h" + +#ifdef WINDOWS_ENABLED +#include "../utils/mono_reg_utils.h" +#endif + +class MonoReloadNode : public Node { + GDCLASS(MonoReloadNode, Node) + +protected: + void _notification(int p_what) { + switch (p_what) { + case MainLoop::NOTIFICATION_WM_FOCUS_IN: { + CSharpLanguage::get_singleton()->reload_assemblies_if_needed(true); + } break; + default: { + } break; + }; + } +}; + +GodotSharpEditor *GodotSharpEditor::singleton = NULL; + +bool GodotSharpEditor::_create_project_solution() { + + EditorProgress pr("create_csharp_solution", "Generating solution...", 2); + + pr.step("Generating C# project..."); + + String path = OS::get_singleton()->get_resource_dir(); + String name = ProjectSettings::get_singleton()->get("application/config/name"); + String guid = CSharpProject::generate_game_project(path, name); + + if (guid.length()) { + + NETSolution solution(name); + + if (!solution.set_path(path)) { + show_error_dialog("Failed to create solution."); + return false; + } + + Vector<String> extra_configs; + extra_configs.push_back("Tools"); + + solution.add_new_project(name, guid, extra_configs); + + Error sln_error = solution.save(); + + if (sln_error != OK) { + show_error_dialog("Failed to save solution."); + return false; + } + + if (!GodotSharpBuilds::make_api_sln(GodotSharpBuilds::API_CORE)) + return false; + + if (!GodotSharpBuilds::make_api_sln(GodotSharpBuilds::API_EDITOR)) + return false; + + pr.step("Done"); + + // Here, after all calls to progress_task_step + call_deferred("_remove_create_sln_menu_option"); + + } else { + show_error_dialog("Failed to create C# project."); + } + + return true; +} + +void GodotSharpEditor::_remove_create_sln_menu_option() { + + menu_popup->remove_item(menu_popup->get_item_index(MENU_CREATE_SLN)); + + if (menu_popup->get_item_count() == 0) + menu_button->hide(); + + bottom_panel_btn->show(); +} + +void GodotSharpEditor::_menu_option_pressed(int p_id) { + + switch (p_id) { + case MENU_CREATE_SLN: { + + _create_project_solution(); + } break; + default: + ERR_FAIL(); + } +} + +void GodotSharpEditor::_bind_methods() { + + ClassDB::bind_method(D_METHOD("_create_project_solution"), &GodotSharpEditor::_create_project_solution); + ClassDB::bind_method(D_METHOD("_remove_create_sln_menu_option"), &GodotSharpEditor::_remove_create_sln_menu_option); + ClassDB::bind_method(D_METHOD("_menu_option_pressed", "id"), &GodotSharpEditor::_menu_option_pressed); +} + +void GodotSharpEditor::show_error_dialog(const String &p_message, const String &p_title) { + + error_dialog->set_title(p_title); + error_dialog->set_text(p_message); + error_dialog->popup_centered_minsize(); +} + +Error GodotSharpEditor::open_in_external_editor(const Ref<Script> &p_script, int p_line, int p_col) { + + ExternalEditor editor = ExternalEditor(int(EditorSettings::get_singleton()->get("mono/editor/external_editor"))); + + switch (editor) { + case EDITOR_CODE: { + List<String> args; + args.push_back(ProjectSettings::get_singleton()->get_resource_path()); + + String script_path = ProjectSettings::get_singleton()->globalize_path(p_script->get_path()); + + if (p_line >= 0) { + args.push_back("-g"); + args.push_back(script_path + ":" + itos(p_line) + ":" + itos(p_col)); + } else { + args.push_back(script_path); + } + + static String program = path_which("code"); + + Error err = OS::get_singleton()->execute(program.length() ? program : "code", args, false); + + if (err != OK) { + ERR_PRINT("GodotSharp: Could not execute external editor"); + return err; + } + } break; + case EDITOR_MONODEVELOP: { + if (!monodevel_instance) + monodevel_instance = memnew(MonoDevelopInstance(GodotSharpDirs::get_project_sln_path())); + + String script_path = ProjectSettings::get_singleton()->globalize_path(p_script->get_path()); + monodevel_instance->execute(script_path); + } break; + case EDITOR_VISUAL_STUDIO: + // TODO + // devenv <PathToSolutionFolder> + // devenv /edit <PathToCsFile> /command "edit.goto <Line>" + // HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7 + default: + return ERR_UNAVAILABLE; + } + + return OK; +} + +bool GodotSharpEditor::overrides_external_editor() { + + return ExternalEditor(int(EditorSettings::get_singleton()->get("mono/editor/external_editor"))) != EDITOR_NONE; +} + +GodotSharpEditor::GodotSharpEditor(EditorNode *p_editor) { + + singleton = this; + + monodevel_instance = NULL; + + editor = p_editor; + + error_dialog = memnew(AcceptDialog); + editor->get_gui_base()->add_child(error_dialog); + + bottom_panel_btn = editor->add_bottom_panel_item("Mono", memnew(MonoBottomPanel(editor))); + + godotsharp_builds = memnew(GodotSharpBuilds); + + editor->add_child(memnew(MonoReloadNode)); + + menu_button = memnew(MenuButton); + menu_button->set_text("Mono"); + menu_popup = menu_button->get_popup(); + + String sln_path = GodotSharpDirs::get_project_sln_path(); + String csproj_path = GodotSharpDirs::get_project_csproj_path(); + + if (!FileAccess::exists(sln_path) || !FileAccess::exists(csproj_path)) { + bottom_panel_btn->hide(); + menu_popup->add_item("Create C# solution", MENU_CREATE_SLN); + } + + menu_popup->connect("id_pressed", this, "_menu_option_pressed"); + + if (menu_popup->get_item_count() == 0) + menu_button->hide(); + + editor->get_menu_hb()->add_child(menu_button); + + // External editor settings + EditorSettings *ed_settings = EditorSettings::get_singleton(); + if (!ed_settings->has_setting("mono/editor/external_editor")) { + ed_settings->set_setting("mono/editor/external_editor", EDITOR_NONE); + } + ed_settings->add_property_hint(PropertyInfo(Variant::INT, "mono/editor/external_editor", PROPERTY_HINT_ENUM, "None,MonoDevelop,Visual Studio,Visual Studio Code")); +} + +GodotSharpEditor::~GodotSharpEditor() { + + singleton = NULL; + + memdelete(godotsharp_builds); + + if (monodevel_instance) { + memdelete(monodevel_instance); + monodevel_instance = NULL; + } +} diff --git a/modules/mono/editor/godotsharp_editor.h b/modules/mono/editor/godotsharp_editor.h new file mode 100644 index 0000000000..1ecb8c7a94 --- /dev/null +++ b/modules/mono/editor/godotsharp_editor.h @@ -0,0 +1,87 @@ +/*************************************************************************/ +/* godotsharp_editor.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 GODOTSHARP_EDITOR_H +#define GODOTSHARP_EDITOR_H + +#include "godotsharp_builds.h" + +#include "monodevelop_instance.h" + +class GodotSharpEditor : public Node { + GDCLASS(GodotSharpEditor, Object) + + EditorNode *editor; + + MenuButton *menu_button; + PopupMenu *menu_popup; + + AcceptDialog *error_dialog; + + ToolButton *bottom_panel_btn; + + GodotSharpBuilds *godotsharp_builds; + + MonoDevelopInstance *monodevel_instance; + + bool _create_project_solution(); + + void _remove_create_sln_menu_option(); + + void _menu_option_pressed(int p_id); + + static GodotSharpEditor *singleton; + +protected: + static void _bind_methods(); + +public: + enum MenuOptions { + MENU_CREATE_SLN + }; + + enum ExternalEditor { + EDITOR_NONE, + EDITOR_MONODEVELOP, + EDITOR_VISUAL_STUDIO, + EDITOR_CODE, + }; + + _FORCE_INLINE_ static GodotSharpEditor *get_singleton() { return singleton; } + + void show_error_dialog(const String &p_message, const String &p_title = "Error"); + + Error open_in_external_editor(const Ref<Script> &p_script, int p_line, int p_col); + bool overrides_external_editor(); + + GodotSharpEditor(EditorNode *p_editor); + ~GodotSharpEditor(); +}; + +#endif // GODOTSHARP_EDITOR_H diff --git a/modules/mono/editor/mono_bottom_panel.cpp b/modules/mono/editor/mono_bottom_panel.cpp new file mode 100644 index 0000000000..07109eaac7 --- /dev/null +++ b/modules/mono/editor/mono_bottom_panel.cpp @@ -0,0 +1,441 @@ +/*************************************************************************/ +/* mono_bottom_panel.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 "mono_bottom_panel.h" + +#include "../csharp_script.h" +#include "godotsharp_editor.h" + +MonoBottomPanel *MonoBottomPanel::singleton = NULL; + +void MonoBottomPanel::_update_build_tabs_list() { + + build_tabs_list->clear(); + + int current_tab = build_tabs->get_current_tab(); + + bool no_current_tab = current_tab < 0 || current_tab >= build_tabs->get_tab_count(); + + for (int i = 0; i < build_tabs->get_child_count(); i++) { + + MonoBuildTab *tab = Object::cast_to<MonoBuildTab>(build_tabs->get_child(i)); + + if (tab) { + String item_name = tab->build_info.solution.get_file().get_basename(); + item_name += " [" + tab->build_info.configuration + "]"; + + build_tabs_list->add_item(item_name, tab->get_icon_texture()); + + String item_tooltip = String("Solution: ") + tab->build_info.solution; + item_tooltip += String("\nConfiguration: ") + tab->build_info.configuration; + item_tooltip += String("\nStatus: "); + + if (tab->build_exited) { + item_tooltip += tab->build_result == MonoBuildTab::RESULT_SUCCESS ? "Succeeded" : "Errored"; + } else { + item_tooltip += "Running"; + } + + if (!tab->build_exited || !tab->build_result == MonoBuildTab::RESULT_SUCCESS) { + item_tooltip += "\nErrors: " + itos(tab->error_count); + } + + item_tooltip += "\nWarnings: " + itos(tab->warning_count); + + build_tabs_list->set_item_tooltip(i, item_tooltip); + + if (no_current_tab || current_tab == i) { + build_tabs_list->select(i); + _build_tab_item_selected(i); + } + } + } +} + +void MonoBottomPanel::add_build_tab(MonoBuildTab *p_build_tab) { + + build_tabs->add_child(p_build_tab); + raise_build_tab(p_build_tab); +} + +void MonoBottomPanel::raise_build_tab(MonoBuildTab *p_build_tab) { + + ERR_FAIL_COND(p_build_tab->get_parent() != build_tabs); + build_tabs->move_child(p_build_tab, 0); + _update_build_tabs_list(); +} + +void MonoBottomPanel::show_build_tab() { + + for (int i = 0; i < panel_tabs->get_tab_count(); i++) { + if (panel_tabs->get_tab_control(i) == panel_builds_tab) { + panel_tabs->set_current_tab(i); + editor->make_bottom_panel_item_visible(this); + return; + } + } + + ERR_PRINT("Builds tab not found"); +} + +void MonoBottomPanel::_build_tab_item_selected(int p_idx) { + + ERR_FAIL_INDEX(p_idx, build_tabs->get_tab_count()); + build_tabs->set_current_tab(p_idx); +} + +void MonoBottomPanel::_build_tab_changed(int p_idx) { + + if (p_idx < 0 || p_idx >= build_tabs->get_tab_count()) { + warnings_btn->set_visible(false); + errors_btn->set_visible(false); + } else { + warnings_btn->set_visible(true); + errors_btn->set_visible(true); + } +} + +void MonoBottomPanel::_warnings_toggled(bool p_pressed) { + + int current_tab = build_tabs->get_current_tab(); + ERR_FAIL_INDEX(current_tab, build_tabs->get_tab_count()); + MonoBuildTab *build_tab = Object::cast_to<MonoBuildTab>(build_tabs->get_child(current_tab)); + build_tab->warnings_visible = p_pressed; + build_tab->_update_issues_list(); +} + +void MonoBottomPanel::_errors_toggled(bool p_pressed) { + + int current_tab = build_tabs->get_current_tab(); + ERR_FAIL_INDEX(current_tab, build_tabs->get_tab_count()); + MonoBuildTab *build_tab = Object::cast_to<MonoBuildTab>(build_tabs->get_child(current_tab)); + build_tab->errors_visible = p_pressed; + build_tab->_update_issues_list(); +} + +void MonoBottomPanel::_notification(int p_what) { + + switch (p_what) { + + case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: { + panel_tabs->add_style_override("panel", editor->get_gui_base()->get_stylebox("DebuggerPanel", "EditorStyles")); + panel_tabs->add_style_override("tab_fg", editor->get_gui_base()->get_stylebox("DebuggerTabFG", "EditorStyles")); + panel_tabs->add_style_override("tab_bg", editor->get_gui_base()->get_stylebox("DebuggerTabBG", "EditorStyles")); + } break; + } +} + +void MonoBottomPanel::_bind_methods() { + + ClassDB::bind_method(D_METHOD("_warnings_toggled", "pressed"), &MonoBottomPanel::_warnings_toggled); + ClassDB::bind_method(D_METHOD("_errors_toggled", "pressed"), &MonoBottomPanel::_errors_toggled); + ClassDB::bind_method(D_METHOD("_build_tab_item_selected", "idx"), &MonoBottomPanel::_build_tab_item_selected); + ClassDB::bind_method(D_METHOD("_build_tab_changed", "idx"), &MonoBottomPanel::_build_tab_changed); +} + +MonoBottomPanel::MonoBottomPanel(EditorNode *p_editor) { + + singleton = this; + + editor = p_editor; + + set_v_size_flags(SIZE_EXPAND_FILL); + set_anchors_and_margins_preset(Control::PRESET_WIDE); + + panel_tabs = memnew(TabContainer); + panel_tabs->set_tab_align(TabContainer::ALIGN_LEFT); + panel_tabs->add_style_override("panel", editor->get_gui_base()->get_stylebox("DebuggerPanel", "EditorStyles")); + panel_tabs->add_style_override("tab_fg", editor->get_gui_base()->get_stylebox("DebuggerTabFG", "EditorStyles")); + panel_tabs->add_style_override("tab_bg", editor->get_gui_base()->get_stylebox("DebuggerTabBG", "EditorStyles")); + panel_tabs->set_custom_minimum_size(Size2(0, 228) * EDSCALE); + panel_tabs->set_v_size_flags(SIZE_EXPAND_FILL); + add_child(panel_tabs); + + { // Builds + panel_builds_tab = memnew(VBoxContainer); + panel_builds_tab->set_name(TTR("Builds")); + panel_builds_tab->set_h_size_flags(SIZE_EXPAND_FILL); + panel_tabs->add_child(panel_builds_tab); + + HBoxContainer *toolbar_hbc = memnew(HBoxContainer); + toolbar_hbc->set_h_size_flags(SIZE_EXPAND_FILL); + panel_builds_tab->add_child(toolbar_hbc); + + toolbar_hbc->add_spacer(); + + warnings_btn = memnew(ToolButton); + warnings_btn->set_text("Warnings"); + warnings_btn->set_toggle_mode(true); + warnings_btn->set_pressed(true); + warnings_btn->set_visible(false); + warnings_btn->set_focus_mode(FOCUS_NONE); + warnings_btn->connect("toggled", this, "_warnings_toggled"); + toolbar_hbc->add_child(warnings_btn); + + errors_btn = memnew(ToolButton); + errors_btn->set_text("Errors"); + errors_btn->set_toggle_mode(true); + errors_btn->set_pressed(true); + errors_btn->set_visible(false); + errors_btn->set_focus_mode(FOCUS_NONE); + errors_btn->connect("toggled", this, "_errors_toggled"); + toolbar_hbc->add_child(errors_btn); + + HSplitContainer *hsc = memnew(HSplitContainer); + hsc->set_h_size_flags(SIZE_EXPAND_FILL); + hsc->set_v_size_flags(SIZE_EXPAND_FILL); + panel_builds_tab->add_child(hsc); + + build_tabs_list = memnew(ItemList); + build_tabs_list->set_h_size_flags(SIZE_EXPAND_FILL); + build_tabs_list->connect("item_selected", this, "_build_tab_item_selected"); + hsc->add_child(build_tabs_list); + + build_tabs = memnew(TabContainer); + build_tabs->set_tab_align(TabContainer::ALIGN_LEFT); + build_tabs->set_h_size_flags(SIZE_EXPAND_FILL); + build_tabs->set_tabs_visible(false); + build_tabs->connect("tab_changed", this, "_build_tab_changed"); + hsc->add_child(build_tabs); + } +} + +MonoBottomPanel::~MonoBottomPanel() { + + singleton = NULL; +} + +void MonoBuildTab::_load_issues_from_file(const String &p_csv_file) { + + FileAccessRef f = FileAccess::open(p_csv_file, FileAccess::READ); + + if (!f) + return; + + while (!f->eof_reached()) { + Vector<String> csv_line = f->get_csv_line(); + + if (csv_line.size() == 1 && csv_line[0].empty()) + return; + + ERR_CONTINUE(csv_line.size() != 7); + + BuildIssue issue; + issue.warning = csv_line[0] == "warning"; + issue.file = csv_line[1]; + issue.line = csv_line[2].to_int(); + issue.column = csv_line[3].to_int(); + issue.code = csv_line[4]; + issue.message = csv_line[5]; + issue.project_file = csv_line[6]; + + if (issue.warning) + warning_count += 1; + else + error_count += 1; + + issues.push_back(issue); + } +} + +void MonoBuildTab::_update_issues_list() { + + issues_list->clear(); + + Ref<Texture> warning_icon = get_icon("Warning", "EditorIcons"); + Ref<Texture> error_icon = get_icon("Error", "EditorIcons"); + + for (int i = 0; i < issues.size(); i++) { + + const BuildIssue &issue = issues[i]; + + if (!(issue.warning ? warnings_visible : errors_visible)) + continue; + + String tooltip; + tooltip += String("Message: ") + issue.message; + tooltip += String("\nCode: ") + issue.code; + tooltip += String("\nType: ") + (issue.warning ? "warning" : "error"); + + String text; + + if (issue.file.length()) { + String sline = String::num_int64(issue.line); + String scolumn = String::num_int64(issue.column); + + text += issue.file + "("; + text += sline + ","; + text += scolumn + "): "; + + tooltip += "\nFile: " + issue.file; + tooltip += "\nLine: " + sline; + tooltip += "\nColumn: " + scolumn; + } + + if (issue.project_file.length()) { + tooltip += "\nProject: " + issue.project_file; + } + + text += issue.message; + + int line_break_idx = text.find("\n"); + issues_list->add_item(line_break_idx == -1 ? text : text.substr(0, line_break_idx), + issue.warning ? warning_icon : error_icon); + int index = issues_list->get_item_count() - 1; + issues_list->set_item_tooltip(index, tooltip); + issues_list->set_item_metadata(index, i); + } +} + +Ref<Texture> MonoBuildTab::get_icon_texture() const { + + // FIXME these icons were removed... find something better + + if (build_exited) { + if (build_result == RESULT_ERROR) { + return get_icon("DependencyChangedHl", "EditorIcons"); + } else { + return get_icon("DependencyOkHl", "EditorIcons"); + } + } else { + return get_icon("GraphTime", "EditorIcons"); + } +} + +MonoBuildInfo MonoBuildTab::get_build_info() { + + return build_info; +} + +void MonoBuildTab::on_build_start() { + + build_exited = false; + + issues.clear(); + warning_count = 0; + error_count = 0; + _update_issues_list(); + + MonoBottomPanel::get_singleton()->raise_build_tab(this); +} + +void MonoBuildTab::on_build_exit(BuildResult result) { + + build_exited = true; + build_result = result; + + _load_issues_from_file(logs_dir.plus_file("msbuild_issues.csv")); + _update_issues_list(); + + MonoBottomPanel::get_singleton()->raise_build_tab(this); +} + +void MonoBuildTab::on_build_exec_failed(const String &p_cause, const String &p_detailed) { + + build_exited = true; + build_result = RESULT_ERROR; + + issues_list->clear(); + + String tooltip; + + tooltip += "Message: " + (p_detailed.length() ? p_detailed : p_cause); + tooltip += "\nType: error"; + + int line_break_idx = p_cause.find("\n"); + issues_list->add_item(line_break_idx == -1 ? p_cause : p_cause.substr(0, line_break_idx), + get_icon("Error", "EditorIcons")); + int index = issues_list->get_item_count() - 1; + issues_list->set_item_tooltip(index, tooltip); + + MonoBottomPanel::get_singleton()->raise_build_tab(this); +} + +void MonoBuildTab::restart_build() { + + ERR_FAIL_COND(!build_exited); + GodotSharpBuilds::get_singleton()->restart_build(this); +} + +void MonoBuildTab::stop_build() { + + ERR_FAIL_COND(build_exited); + GodotSharpBuilds::get_singleton()->stop_build(this); +} + +void MonoBuildTab::_issue_activated(int p_idx) { + + ERR_FAIL_INDEX(p_idx, issues.size()); + + const BuildIssue &issue = issues[p_idx]; + + if (issue.project_file.empty() && issue.file.empty()) + return; + + String project_dir = issue.project_file.length() ? issue.project_file.get_base_dir() : build_info.solution.get_base_dir(); + + String file = project_dir.simplify_path().plus_file(issue.file.simplify_path()); + + if (!FileAccess::exists(file)) + return; + + file = ProjectSettings::get_singleton()->localize_path(file); + + if (file.begins_with("res://")) { + Ref<Script> script = ResourceLoader::load(file, CSharpLanguage::get_singleton()->get_type()); + + if (script.is_valid() && ScriptEditor::get_singleton()->edit(script, issue.line, issue.column)) { + EditorNode::get_singleton()->call("_editor_select", EditorNode::EDITOR_SCRIPT); + } + } +} + +void MonoBuildTab::_bind_methods() { + + ClassDB::bind_method("_issue_activated", &MonoBuildTab::_issue_activated); +} + +MonoBuildTab::MonoBuildTab(const MonoBuildInfo &p_build_info, const String &p_logs_dir) { + + build_info = p_build_info; + logs_dir = p_logs_dir; + + build_exited = false; + + issues_list = memnew(ItemList); + issues_list->set_v_size_flags(SIZE_EXPAND_FILL); + issues_list->connect("item_activated", this, "_issue_activated"); + add_child(issues_list); + + error_count = 0; + warning_count = 0; + + errors_visible = true; + warnings_visible = true; +} diff --git a/modules/mono/editor/mono_bottom_panel.h b/modules/mono/editor/mono_bottom_panel.h new file mode 100644 index 0000000000..909fa4b385 --- /dev/null +++ b/modules/mono/editor/mono_bottom_panel.h @@ -0,0 +1,145 @@ +/*************************************************************************/ +/* mono_bottom_panel.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 MONO_BOTTOM_PANEL_H +#define MONO_BOTTOM_PANEL_H + +#include "editor/editor_node.h" +#include "scene/gui/control.h" + +#include "mono_build_info.h" + +class MonoBuildTab; + +class MonoBottomPanel : public VBoxContainer { + + GDCLASS(MonoBottomPanel, VBoxContainer) + + EditorNode *editor; + + TabContainer *panel_tabs; + + VBoxContainer *panel_builds_tab; + + ItemList *build_tabs_list; + TabContainer *build_tabs; + + Button *warnings_btn; + Button *errors_btn; + + void _update_build_tabs_list(); + + void _build_tab_item_selected(int p_idx); + void _build_tab_changed(int p_idx); + + void _warnings_toggled(bool p_pressed); + void _errors_toggled(bool p_pressed); + + static MonoBottomPanel *singleton; + +protected: + void _notification(int p_what); + + static void _bind_methods(); + +public: + _FORCE_INLINE_ static MonoBottomPanel *get_singleton() { return singleton; } + + void add_build_tab(MonoBuildTab *p_build_tab); + void raise_build_tab(MonoBuildTab *p_build_tab); + + void show_build_tab(); + + MonoBottomPanel(EditorNode *p_editor = NULL); + ~MonoBottomPanel(); +}; + +class MonoBuildTab : public VBoxContainer { + + GDCLASS(MonoBuildTab, VBoxContainer) + +public: + enum BuildResult { + RESULT_ERROR, + RESULT_SUCCESS + }; + + struct BuildIssue { + bool warning; + String file; + int line; + int column; + String code; + String message; + String project_file; + }; + +private: + friend class MonoBottomPanel; + + bool build_exited; + BuildResult build_result; + + Vector<BuildIssue> issues; + ItemList *issues_list; + + int error_count; + int warning_count; + + bool errors_visible; + bool warnings_visible; + + String logs_dir; + + MonoBuildInfo build_info; + + void _load_issues_from_file(const String &p_csv_file); + void _update_issues_list(); + + void _issue_activated(int p_idx); + +protected: + static void _bind_methods(); + +public: + Ref<Texture> get_icon_texture() const; + + MonoBuildInfo get_build_info(); + + void on_build_start(); + void on_build_exit(BuildResult result); + void on_build_exec_failed(const String &p_cause, const String &p_detailed = String()); + + void restart_build(); + void stop_build(); + + MonoBuildTab(const MonoBuildInfo &p_build_info, const String &p_logs_dir); +}; + +#endif // MONO_BOTTOM_PANEL_H diff --git a/modules/mono/editor/mono_build_info.h b/modules/mono/editor/mono_build_info.h new file mode 100644 index 0000000000..f3b3e43b6d --- /dev/null +++ b/modules/mono/editor/mono_build_info.h @@ -0,0 +1,64 @@ +/*************************************************************************/ +/* mono_build_info.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 MONO_BUILD_INFO_H +#define MONO_BUILD_INFO_H + +#include "../mono_gd/gd_mono_utils.h" + +struct MonoBuildInfo { + + struct Hasher { + static _FORCE_INLINE_ uint32_t hash(const MonoBuildInfo &p_key) { + uint32_t hash = 0; + + GDMonoUtils::hash_combine(hash, p_key.solution.hash()); + GDMonoUtils::hash_combine(hash, p_key.configuration.hash()); + + return hash; + } + }; + + String solution; + String configuration; + Vector<String> custom_props; + + MonoBuildInfo() {} + + MonoBuildInfo(const String &p_solution, const String &p_config) { + solution = p_solution; + configuration = p_config; + } + + bool operator==(const MonoBuildInfo &p_b) const { + return p_b.solution == solution && p_b.configuration == configuration; + } +}; + +#endif // MONO_BUILD_INFO_H diff --git a/modules/mono/editor/monodevelop_instance.cpp b/modules/mono/editor/monodevelop_instance.cpp new file mode 100644 index 0000000000..a34d82ffcb --- /dev/null +++ b/modules/mono/editor/monodevelop_instance.cpp @@ -0,0 +1,81 @@ +/*************************************************************************/ +/* monodevelop_instance.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 "monodevelop_instance.h" + +#include "../mono_gd/gd_mono.h" +#include "../mono_gd/gd_mono_class.h" + +void MonoDevelopInstance::execute(const Vector<String> &p_files) { + + ERR_FAIL_NULL(execute_method); + ERR_FAIL_COND(gc_handle.is_null()); + + MonoObject *ex = NULL; + + Variant files = p_files; + const Variant *args[1] = { &files }; + execute_method->invoke(gc_handle->get_target(), args, &ex); + + if (ex) { + mono_print_unhandled_exception(ex); + ERR_FAIL(); + } +} + +void MonoDevelopInstance::execute(const String &p_file) { + + Vector<String> files; + files.push_back(p_file); + execute(files); +} + +MonoDevelopInstance::MonoDevelopInstance(const String &p_solution) { + + _GDMONO_SCOPE_DOMAIN_(TOOLS_DOMAIN) + + GDMonoClass *klass = GDMono::get_singleton()->get_editor_tools_assembly()->get_class("GodotSharpTools.Editor", "MonoDevelopInstance"); + + MonoObject *obj = mono_object_new(TOOLS_DOMAIN, klass->get_raw()); + + GDMonoMethod *ctor = klass->get_method(".ctor", 1); + MonoObject *ex = NULL; + + Variant solution = p_solution; + const Variant *args[1] = { &solution }; + ctor->invoke(obj, args, &ex); + + if (ex) { + mono_print_unhandled_exception(ex); + ERR_FAIL(); + } + + gc_handle = MonoGCHandle::create_strong(obj); + execute_method = klass->get_method("Execute", 1); +} diff --git a/modules/mono/editor/monodevelop_instance.h b/modules/mono/editor/monodevelop_instance.h new file mode 100644 index 0000000000..9eb154eba1 --- /dev/null +++ b/modules/mono/editor/monodevelop_instance.h @@ -0,0 +1,50 @@ +/*************************************************************************/ +/* monodevelop_instance.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 MONODEVELOP_INSTANCE_H +#define MONODEVELOP_INSTANCE_H + +#include "reference.h" + +#include "../mono_gc_handle.h" +#include "../mono_gd/gd_mono_method.h" + +class MonoDevelopInstance { + + Ref<MonoGCHandle> gc_handle; + GDMonoMethod *execute_method; + +public: + void execute(const Vector<String> &p_files); + void execute(const String &p_files); + + MonoDevelopInstance(const String &p_solution); +}; + +#endif // MONODEVELOP_INSTANCE_H diff --git a/modules/mono/editor/net_solution.cpp b/modules/mono/editor/net_solution.cpp new file mode 100644 index 0000000000..fa60c310db --- /dev/null +++ b/modules/mono/editor/net_solution.cpp @@ -0,0 +1,130 @@ +/*************************************************************************/ +/* net_solution.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 "net_solution.h" + +#include "os/dir_access.h" +#include "os/file_access.h" + +#include "../utils/path_utils.h" +#include "../utils/string_utils.h" +#include "csharp_project.h" + +#define SOLUTION_TEMPLATE \ + "Microsoft Visual Studio Solution File, Format Version 12.00\n" \ + "# Visual Studio 2012\n" \ + "%0\n" \ + "Global\n" \ + "\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n" \ + "%1\n" \ + "\tEndGlobalSection\n" \ + "\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n" \ + "%2\n" \ + "\tEndGlobalSection\n" \ + "EndGlobal\n" + +#define PROJECT_DECLARATION "Project(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"%0\", \"%1\", \"{%2}\"\nEndProject" + +#define SOLUTION_PLATFORMS_CONFIG "\t\%0|Any CPU = %0|Any CPU" + +#define PROJECT_PLATFORMS_CONFIG \ + "\t\t{%0}.%1|Any CPU.ActiveCfg = %1|Any CPU\n" \ + "\t\t{%0}.%1|Any CPU.Build.0 = %1|Any CPU" + +void NETSolution::add_new_project(const String &p_name, const String &p_guid, const Vector<String> &p_extra_configs) { + if (projects.has(p_name)) + WARN_PRINT("Overriding existing project."); + + ProjectInfo procinfo; + procinfo.guid = p_guid; + + procinfo.configs.push_back("Debug"); + procinfo.configs.push_back("Release"); + + for (int i = 0; i < p_extra_configs.size(); i++) { + procinfo.configs.push_back(p_extra_configs[i]); + } + + projects[p_name] = procinfo; +} + +Error NETSolution::save() { + bool dir_exists = DirAccess::exists(path); + ERR_EXPLAIN("The directory does not exist."); + ERR_FAIL_COND_V(!dir_exists, ERR_FILE_BAD_PATH); + + String projs_decl; + String sln_platform_cfg; + String proj_platform_cfg; + + for (Map<String, ProjectInfo>::Element *E = projects.front(); E; E = E->next()) { + const String &name = E->key(); + const ProjectInfo &procinfo = E->value(); + + projs_decl += sformat(PROJECT_DECLARATION, name, name + ".csproj", procinfo.guid); + + for (int i = 0; i < procinfo.configs.size(); i++) { + const String &config = procinfo.configs[i]; + + if (i != 0) { + sln_platform_cfg += "\n"; + proj_platform_cfg += "\n"; + } + + sln_platform_cfg += sformat(SOLUTION_PLATFORMS_CONFIG, config); + proj_platform_cfg += sformat(PROJECT_PLATFORMS_CONFIG, procinfo.guid, config); + } + } + + String content = sformat(SOLUTION_TEMPLATE, projs_decl, sln_platform_cfg, proj_platform_cfg); + + FileAccessRef file = FileAccess::open(path_join(path, name + ".sln"), FileAccess::WRITE); + ERR_FAIL_COND_V(!file, ERR_FILE_CANT_WRITE); + file->store_string(content); + file->close(); + + return OK; +} + +bool NETSolution::set_path(const String &p_existing_path) { + if (p_existing_path.is_abs_path()) { + path = p_existing_path; + } else { + String abspath; + if (!rel_path_to_abs(p_existing_path, abspath)) + return false; + path = abspath; + } + + return true; +} + +NETSolution::NETSolution(const String &p_name) { + name = p_name; +} diff --git a/modules/mono/editor/net_solution.h b/modules/mono/editor/net_solution.h new file mode 100644 index 0000000000..d7ccebb7df --- /dev/null +++ b/modules/mono/editor/net_solution.h @@ -0,0 +1,57 @@ +/*************************************************************************/ +/* net_solution.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 NET_SOLUTION_H +#define NET_SOLUTION_H + +#include "map.h" +#include "ustring.h" + +struct NETSolution { + String name; + + void add_new_project(const String &p_name, const String &p_guid, const Vector<String> &p_extra_configs = Vector<String>()); + + Error save(); + + bool set_path(const String &p_existing_path); + + NETSolution(const String &p_name); + +private: + struct ProjectInfo { + String guid; + Vector<String> configs; + }; + + String path; + Map<String, ProjectInfo> projects; +}; + +#endif // NET_SOLUTION_H diff --git a/modules/mono/glue/cs_files/Basis.cs b/modules/mono/glue/cs_files/Basis.cs new file mode 100644 index 0000000000..c50e783349 --- /dev/null +++ b/modules/mono/glue/cs_files/Basis.cs @@ -0,0 +1,520 @@ +using System; +using System.Runtime.InteropServices; + +namespace Godot +{ + [StructLayout(LayoutKind.Sequential)] + public struct Basis : IEquatable<Basis> + { + private static readonly Basis identity = new Basis + ( + new Vector3(1f, 0f, 0f), + new Vector3(0f, 1f, 0f), + new Vector3(0f, 0f, 1f) + ); + + private static readonly Basis[] orthoBases = new Basis[24] + { + new Basis(1f, 0f, 0f, 0f, 1f, 0f, 0f, 0f, 1f), + new Basis(0f, -1f, 0f, 1f, 0f, 0f, 0f, 0f, 1f), + new Basis(-1f, 0f, 0f, 0f, -1f, 0f, 0f, 0f, 1f), + new Basis(0f, 1f, 0f, -1f, 0f, 0f, 0f, 0f, 1f), + new Basis(1f, 0f, 0f, 0f, 0f, -1f, 0f, 1f, 0f), + new Basis(0f, 0f, 1f, 1f, 0f, 0f, 0f, 1f, 0f), + new Basis(-1f, 0f, 0f, 0f, 0f, 1f, 0f, 1f, 0f), + new Basis(0f, 0f, -1f, -1f, 0f, 0f, 0f, 1f, 0f), + new Basis(1f, 0f, 0f, 0f, -1f, 0f, 0f, 0f, -1f), + new Basis(0f, 1f, 0f, 1f, 0f, 0f, 0f, 0f, -1f), + new Basis(-1f, 0f, 0f, 0f, 1f, 0f, 0f, 0f, -1f), + new Basis(0f, -1f, 0f, -1f, 0f, 0f, 0f, 0f, -1f), + new Basis(1f, 0f, 0f, 0f, 0f, 1f, 0f, -1f, 0f), + new Basis(0f, 0f, -1f, 1f, 0f, 0f, 0f, -1f, 0f), + new Basis(-1f, 0f, 0f, 0f, 0f, -1f, 0f, -1f, 0f), + new Basis(0f, 0f, 1f, -1f, 0f, 0f, 0f, -1f, 0f), + new Basis(0f, 0f, 1f, 0f, 1f, 0f, -1f, 0f, 0f), + new Basis(0f, -1f, 0f, 0f, 0f, 1f, -1f, 0f, 0f), + new Basis(0f, 0f, -1f, 0f, -1f, 0f, -1f, 0f, 0f), + new Basis(0f, 1f, 0f, 0f, 0f, -1f, -1f, 0f, 0f), + new Basis(0f, 0f, 1f, 0f, -1f, 0f, 1f, 0f, 0f), + new Basis(0f, 1f, 0f, 0f, 0f, 1f, 1f, 0f, 0f), + new Basis(0f, 0f, -1f, 0f, 1f, 0f, 1f, 0f, 0f), + new Basis(0f, -1f, 0f, 0f, 0f, -1f, 1f, 0f, 0f) + }; + + public Vector3 x; + public Vector3 y; + public Vector3 z; + + public static Basis Identity + { + get { return identity; } + } + + public Vector3 Scale + { + get + { + return new Vector3 + ( + new Vector3(this[0, 0], this[1, 0], this[2, 0]).length(), + new Vector3(this[0, 1], this[1, 1], this[2, 1]).length(), + new Vector3(this[0, 2], this[1, 2], this[2, 2]).length() + ); + } + } + + public Vector3 this[int index] + { + get + { + switch (index) + { + case 0: + return x; + case 1: + return y; + case 2: + return z; + default: + throw new IndexOutOfRangeException(); + } + } + set + { + switch (index) + { + case 0: + x = value; + return; + case 1: + y = value; + return; + case 2: + z = value; + return; + default: + throw new IndexOutOfRangeException(); + } + } + } + + public float this[int index, int axis] + { + get + { + switch (index) + { + case 0: + return x[axis]; + case 1: + return y[axis]; + case 2: + return z[axis]; + default: + throw new IndexOutOfRangeException(); + } + } + set + { + switch (index) + { + case 0: + x[axis] = value; + return; + case 1: + y[axis] = value; + return; + case 2: + z[axis] = value; + return; + default: + throw new IndexOutOfRangeException(); + } + } + } + + internal static Basis create_from_axes(Vector3 xAxis, Vector3 yAxis, Vector3 zAxis) + { + return new Basis + ( + new Vector3(xAxis.x, yAxis.x, zAxis.x), + new Vector3(xAxis.y, yAxis.y, zAxis.y), + new Vector3(xAxis.z, yAxis.z, zAxis.z) + ); + } + + public float determinant() + { + return this[0, 0] * (this[1, 1] * this[2, 2] - this[2, 1] * this[1, 2]) - + this[1, 0] * (this[0, 1] * this[2, 2] - this[2, 1] * this[0, 2]) + + this[2, 0] * (this[0, 1] * this[1, 2] - this[1, 1] * this[0, 2]); + } + + public Vector3 get_axis(int axis) + { + return new Vector3(this[0, axis], this[1, axis], this[2, axis]); + } + + public Vector3 get_euler() + { + Basis m = this.orthonormalized(); + + Vector3 euler; + euler.z = 0.0f; + + float mxy = m.y[2]; + + + if (mxy < 1.0f) + { + if (mxy > -1.0f) + { + euler.x = Mathf.asin(-mxy); + euler.y = Mathf.atan2(m.x[2], m.z[2]); + euler.z = Mathf.atan2(m.y[0], m.y[1]); + } + else + { + euler.x = Mathf.PI * 0.5f; + euler.y = -Mathf.atan2(-m.x[1], m.x[0]); + } + } + else + { + euler.x = -Mathf.PI * 0.5f; + euler.y = -Mathf.atan2(m.x[1], m.x[0]); + } + + return euler; + } + + public int get_orthogonal_index() + { + Basis orth = this; + + for (int i = 0; i < 3; i++) + { + for (int j = 0; j < 3; j++) + { + float v = orth[i, j]; + + if (v > 0.5f) + v = 1.0f; + else if (v < -0.5f) + v = -1.0f; + else + v = 0f; + + orth[i, j] = v; + } + } + + for (int i = 0; i < 24; i++) + { + if (orthoBases[i] == orth) + return i; + } + + return 0; + } + + public Basis inverse() + { + Basis inv = this; + + float[] co = new float[3] + { + inv[1, 1] * inv[2, 2] - inv[1, 2] * inv[2, 1], + inv[1, 2] * inv[2, 0] - inv[1, 0] * inv[2, 2], + inv[1, 0] * inv[2, 1] - inv[1, 1] * inv[2, 0] + }; + + float det = inv[0, 0] * co[0] + inv[0, 1] * co[1] + inv[0, 2] * co[2]; + + if (det == 0) + { + return new Basis + ( + float.NaN, float.NaN, float.NaN, + float.NaN, float.NaN, float.NaN, + float.NaN, float.NaN, float.NaN + ); + } + + float s = 1.0f / det; + + inv = new Basis + ( + co[0] * s, + inv[0, 2] * inv[2, 1] - inv[0, 1] * inv[2, 2] * s, + inv[0, 1] * inv[1, 2] - inv[0, 2] * inv[1, 1] * s, + co[1] * s, + inv[0, 0] * inv[2, 2] - inv[0, 2] * inv[2, 0] * s, + inv[0, 2] * inv[1, 0] - inv[0, 0] * inv[1, 2] * s, + co[2] * s, + inv[0, 1] * inv[2, 0] - inv[0, 0] * inv[2, 1] * s, + inv[0, 0] * inv[1, 1] - inv[0, 1] * inv[1, 0] * s + ); + + return inv; + } + + public Basis orthonormalized() + { + Vector3 xAxis = get_axis(0); + Vector3 yAxis = get_axis(1); + Vector3 zAxis = get_axis(2); + + xAxis.normalize(); + yAxis = (yAxis - xAxis * (xAxis.dot(yAxis))); + yAxis.normalize(); + zAxis = (zAxis - xAxis * (xAxis.dot(zAxis)) - yAxis * (yAxis.dot(zAxis))); + zAxis.normalize(); + + return Basis.create_from_axes(xAxis, yAxis, zAxis); + } + + public Basis rotated(Vector3 axis, float phi) + { + return new Basis(axis, phi) * this; + } + + public Basis scaled(Vector3 scale) + { + Basis m = this; + + m[0, 0] *= scale.x; + m[0, 1] *= scale.x; + m[0, 2] *= scale.x; + m[1, 0] *= scale.y; + m[1, 1] *= scale.y; + m[1, 2] *= scale.y; + m[2, 0] *= scale.z; + m[2, 1] *= scale.z; + m[2, 2] *= scale.z; + + return m; + } + + public float tdotx(Vector3 with) + { + return this[0, 0] * with[0] + this[1, 0] * with[1] + this[2, 0] * with[2]; + } + + public float tdoty(Vector3 with) + { + return this[0, 1] * with[0] + this[1, 1] * with[1] + this[2, 1] * with[2]; + } + + public float tdotz(Vector3 with) + { + return this[0, 2] * with[0] + this[1, 2] * with[1] + this[2, 2] * with[2]; + } + + public Basis transposed() + { + Basis tr = this; + + float temp = this[0, 1]; + this[0, 1] = this[1, 0]; + this[1, 0] = temp; + + temp = this[0, 2]; + this[0, 2] = this[2, 0]; + this[2, 0] = temp; + + temp = this[1, 2]; + this[1, 2] = this[2, 1]; + this[2, 1] = temp; + + return tr; + } + + public Vector3 xform(Vector3 v) + { + return new Vector3 + ( + this[0].dot(v), + this[1].dot(v), + this[2].dot(v) + ); + } + + public Vector3 xform_inv(Vector3 v) + { + return new Vector3 + ( + (this[0, 0] * v.x) + (this[1, 0] * v.y) + (this[2, 0] * v.z), + (this[0, 1] * v.x) + (this[1, 1] * v.y) + (this[2, 1] * v.z), + (this[0, 2] * v.x) + (this[1, 2] * v.y) + (this[2, 2] * v.z) + ); + } + + public Quat Quat() { + float trace = x[0] + y[1] + z[2]; + + if (trace > 0.0f) { + float s = Mathf.sqrt(trace + 1.0f) * 2f; + float inv_s = 1f / s; + return new Quat( + (z[1] - y[2]) * inv_s, + (x[2] - z[0]) * inv_s, + (y[0] - x[1]) * inv_s, + s * 0.25f + ); + } else if (x[0] > y[1] && x[0] > z[2]) { + float s = Mathf.sqrt(x[0] - y[1] - z[2] + 1.0f) * 2f; + float inv_s = 1f / s; + return new Quat( + s * 0.25f, + (x[1] + y[0]) * inv_s, + (x[2] + z[0]) * inv_s, + (z[1] - y[2]) * inv_s + ); + } else if (y[1] > z[2]) { + float s = Mathf.sqrt(-x[0] + y[1] - z[2] + 1.0f) * 2f; + float inv_s = 1f / s; + return new Quat( + (x[1] + y[0]) * inv_s, + s * 0.25f, + (y[2] + z[1]) * inv_s, + (x[2] - z[0]) * inv_s + ); + } else { + float s = Mathf.sqrt(-x[0] - y[1] + z[2] + 1.0f) * 2f; + float inv_s = 1f / s; + return new Quat( + (x[2] + z[0]) * inv_s, + (y[2] + z[1]) * inv_s, + s * 0.25f, + (y[0] - x[1]) * inv_s + ); + } + } + + public Basis(Quat quat) + { + float s = 2.0f / quat.length_squared(); + + float xs = quat.x * s; + float ys = quat.y * s; + float zs = quat.z * s; + float wx = quat.w * xs; + float wy = quat.w * ys; + float wz = quat.w * zs; + float xx = quat.x * xs; + float xy = quat.x * ys; + float xz = quat.x * zs; + float yy = quat.y * ys; + float yz = quat.y * zs; + float zz = quat.z * zs; + + this.x = new Vector3(1.0f - (yy + zz), xy - wz, xz + wy); + this.y = new Vector3(xy + wz, 1.0f - (xx + zz), yz - wx); + this.z = new Vector3(xz - wy, yz + wx, 1.0f - (xx + yy)); + } + + public Basis(Vector3 axis, float phi) + { + Vector3 axis_sq = new Vector3(axis.x * axis.x, axis.y * axis.y, axis.z * axis.z); + + float cosine = Mathf.cos(phi); + float sine = Mathf.sin(phi); + + this.x = new Vector3 + ( + axis_sq.x + cosine * (1.0f - axis_sq.x), + axis.x * axis.y * (1.0f - cosine) - axis.z * sine, + axis.z * axis.x * (1.0f - cosine) + axis.y * sine + ); + + this.y = new Vector3 + ( + axis.x * axis.y * (1.0f - cosine) + axis.z * sine, + axis_sq.y + cosine * (1.0f - axis_sq.y), + axis.y * axis.z * (1.0f - cosine) - axis.x * sine + ); + + this.z = new Vector3 + ( + axis.z * axis.x * (1.0f - cosine) - axis.y * sine, + axis.y * axis.z * (1.0f - cosine) + axis.x * sine, + axis_sq.z + cosine * (1.0f - axis_sq.z) + ); + } + + public Basis(Vector3 xAxis, Vector3 yAxis, Vector3 zAxis) + { + this.x = xAxis; + this.y = yAxis; + this.z = zAxis; + } + + public Basis(float xx, float xy, float xz, float yx, float yy, float yz, float zx, float zy, float zz) + { + this.x = new Vector3(xx, xy, xz); + this.y = new Vector3(yx, yy, yz); + this.z = new Vector3(zx, zy, zz); + } + + public static Basis operator *(Basis left, Basis right) + { + return new Basis + ( + right.tdotx(left[0]), right.tdoty(left[0]), right.tdotz(left[0]), + right.tdotx(left[1]), right.tdoty(left[1]), right.tdotz(left[1]), + right.tdotx(left[2]), right.tdoty(left[2]), right.tdotz(left[2]) + ); + } + + public static bool operator ==(Basis left, Basis right) + { + return left.Equals(right); + } + + public static bool operator !=(Basis left, Basis right) + { + return !left.Equals(right); + } + + public override bool Equals(object obj) + { + if (obj is Basis) + { + return Equals((Basis)obj); + } + + return false; + } + + public bool Equals(Basis other) + { + return x.Equals(other.x) && y.Equals(other.y) && z.Equals(other.z); + } + + public override int GetHashCode() + { + return x.GetHashCode() ^ y.GetHashCode() ^ z.GetHashCode(); + } + + public override string ToString() + { + return String.Format("({0}, {1}, {2})", new object[] + { + this.x.ToString(), + this.y.ToString(), + this.z.ToString() + }); + } + + public string ToString(string format) + { + return String.Format("({0}, {1}, {2})", new object[] + { + this.x.ToString(format), + this.y.ToString(format), + this.z.ToString(format) + }); + } + } +} diff --git a/modules/mono/glue/cs_files/Color.cs b/modules/mono/glue/cs_files/Color.cs new file mode 100644 index 0000000000..df88a46832 --- /dev/null +++ b/modules/mono/glue/cs_files/Color.cs @@ -0,0 +1,590 @@ +using System;
+
+namespace Godot
+{
+ public struct Color : IEquatable<Color>
+ {
+ public float r;
+ public float g;
+ public float b;
+ public float a;
+
+ public int r8
+ {
+ get
+ {
+ return (int)(r * 255.0f);
+ }
+ }
+
+ public int g8
+ {
+ get
+ {
+ return (int)(g * 255.0f);
+ }
+ }
+
+ public int b8
+ {
+ get
+ {
+ return (int)(b * 255.0f);
+ }
+ }
+
+ public int a8
+ {
+ get
+ {
+ return (int)(a * 255.0f);
+ }
+ }
+
+ public float h
+ {
+ get
+ {
+ float max = Mathf.max(r, Mathf.max(g, b));
+ float min = Mathf.min(r, Mathf.min(g, b));
+
+ float delta = max - min;
+
+ if (delta == 0)
+ return 0;
+
+ float h;
+
+ if (r == max)
+ h = (g - b) / delta; // Between yellow & magenta
+ else if (g == max)
+ h = 2 + (b - r) / delta; // Between cyan & yellow
+ else
+ h = 4 + (r - g) / delta; // Between magenta & cyan
+
+ h /= 6.0f;
+
+ if (h < 0)
+ h += 1.0f;
+
+ return h;
+ }
+ set
+ {
+ this = from_hsv(value, s, v);
+ }
+ }
+
+ public float s
+ {
+ get
+ {
+ float max = Mathf.max(r, Mathf.max(g, b));
+ float min = Mathf.min(r, Mathf.min(g, b));
+
+ float delta = max - min;
+
+ return max != 0 ? delta / max : 0;
+ }
+ set
+ {
+ this = from_hsv(h, value, v);
+ }
+ }
+
+ public float v
+ {
+ get
+ {
+ return Mathf.max(r, Mathf.max(g, b));
+ }
+ set
+ {
+ this = from_hsv(h, s, value);
+ }
+ }
+
+ private static readonly Color black = new Color(0f, 0f, 0f, 1.0f);
+
+ public Color Black
+ {
+ get
+ {
+ return black;
+ }
+ }
+
+ public float this [int index]
+ {
+ get
+ {
+ switch (index)
+ {
+ case 0:
+ return r;
+ case 1:
+ return g;
+ case 2:
+ return b;
+ case 3:
+ return a;
+ default:
+ throw new IndexOutOfRangeException();
+ }
+ }
+ set
+ {
+ switch (index)
+ {
+ case 0:
+ r = value;
+ return;
+ case 1:
+ g = value;
+ return;
+ case 2:
+ b = value;
+ return;
+ case 3:
+ a = value;
+ return;
+ default:
+ throw new IndexOutOfRangeException();
+ }
+ }
+ }
+
+ public static void to_hsv(Color color, out float hue, out float saturation, out float value)
+ {
+ int max = Mathf.max(color.r8, Mathf.max(color.g8, color.b8));
+ int min = Mathf.min(color.r8, Mathf.min(color.g8, color.b8));
+
+ float delta = max - min;
+
+ if (delta == 0)
+ {
+ hue = 0;
+ }
+ else
+ {
+ if (color.r == max)
+ hue = (color.g - color.b) / delta; // Between yellow & magenta
+ else if (color.g == max)
+ hue = 2 + (color.b - color.r) / delta; // Between cyan & yellow
+ else
+ hue = 4 + (color.r - color.g) / delta; // Between magenta & cyan
+
+ hue /= 6.0f;
+
+ if (hue < 0)
+ hue += 1.0f;
+ }
+
+ saturation = (max == 0) ? 0 : 1f - (1f * min / max);
+ value = max / 255f;
+ }
+
+ public static Color from_hsv(float hue, float saturation, float value, float alpha = 1.0f)
+ {
+ if (saturation == 0)
+ {
+ // acp_hromatic (grey)
+ return new Color(value, value, value, alpha);
+ }
+
+ int i;
+ float f, p, q, t;
+
+ hue *= 6.0f;
+ hue %= 6f;
+ i = (int)hue;
+
+ f = hue - i;
+ p = value * (1 - saturation);
+ q = value * (1 - saturation * f);
+ t = value * (1 - saturation * (1 - f));
+
+ switch (i)
+ {
+ case 0: // Red is the dominant color
+ return new Color(value, t, p, alpha);
+ case 1: // Green is the dominant color
+ return new Color(q, value, p, alpha);
+ case 2:
+ return new Color(p, value, t, alpha);
+ case 3: // Blue is the dominant color
+ return new Color(p, q, value, alpha);
+ case 4:
+ return new Color(t, p, value, alpha);
+ default: // (5) Red is the dominant color
+ return new Color(value, p, q, alpha);
+ }
+ }
+
+ public Color blend(Color over)
+ {
+ Color res;
+
+ float sa = 1.0f - over.a;
+ res.a = a * sa + over.a;
+
+ if (res.a == 0)
+ {
+ return new Color(0, 0, 0, 0);
+ }
+ else
+ {
+ res.r = (r * a * sa + over.r * over.a) / res.a;
+ res.g = (g * a * sa + over.g * over.a) / res.a;
+ res.b = (b * a * sa + over.b * over.a) / res.a;
+ }
+
+ return res;
+ }
+
+ public Color contrasted()
+ {
+ return new Color(
+ (r + 0.5f) % 1.0f,
+ (g + 0.5f) % 1.0f,
+ (b + 0.5f) % 1.0f
+ );
+ }
+
+ public float gray()
+ {
+ return (r + g + b) / 3.0f;
+ }
+
+ public Color inverted()
+ {
+ return new Color(
+ 1.0f - r,
+ 1.0f - g,
+ 1.0f - b
+ );
+ }
+
+ public Color linear_interpolate(Color b, float t)
+ {
+ Color res = this;
+
+ res.r += (t * (b.r - this.r));
+ res.g += (t * (b.g - this.g));
+ res.b += (t * (b.b - this.b));
+ res.a += (t * (b.a - this.a));
+
+ return res;
+ }
+
+ public int to_32()
+ {
+ int c = (byte)(a * 255);
+ c <<= 8;
+ c |= (byte)(r * 255);
+ c <<= 8;
+ c |= (byte)(g * 255);
+ c <<= 8;
+ c |= (byte)(b * 255);
+
+ return c;
+ }
+
+ public int to_ARGB32()
+ {
+ int c = (byte)(a * 255);
+ c <<= 8;
+ c |= (byte)(r * 255);
+ c <<= 8;
+ c |= (byte)(g * 255);
+ c <<= 8;
+ c |= (byte)(b * 255);
+
+ return c;
+ }
+
+ public string to_html(bool include_alpha = true)
+ {
+ String txt = string.Empty;
+
+ txt += _to_hex(r);
+ txt += _to_hex(g);
+ txt += _to_hex(b);
+
+ if (include_alpha)
+ txt = _to_hex(a) + txt;
+
+ return txt;
+ }
+
+ public Color(float r, float g, float b, float a = 1.0f)
+ {
+ this.r = r;
+ this.g = g;
+ this.b = b;
+ this.a = a;
+ }
+
+ public Color(int rgba)
+ {
+ this.a = (rgba & 0xFF) / 255.0f;
+ rgba >>= 8;
+ this.b = (rgba & 0xFF) / 255.0f;
+ rgba >>= 8;
+ this.g = (rgba & 0xFF) / 255.0f;
+ rgba >>= 8;
+ this.r = (rgba & 0xFF) / 255.0f;
+ }
+
+ private static float _parse_col(string str, int ofs)
+ {
+ int ig = 0;
+
+ for (int i = 0; i < 2; i++)
+ {
+ int c = str[i + ofs];
+ int v = 0;
+
+ 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
+ {
+ return -1;
+ }
+
+ if (i == 0)
+ ig += v * 16;
+ else
+ ig += v;
+ }
+
+ return ig;
+ }
+
+ private String _to_hex(float val)
+ {
+ int v = (int)Mathf.clamp(val * 255.0f, 0, 255);
+
+ string ret = string.Empty;
+
+ for (int i = 0; i < 2; i++)
+ {
+ char[] c = { (char)0, (char)0 };
+ int lv = v & 0xF;
+
+ if (lv < 10)
+ c[0] = (char)('0' + lv);
+ else
+ c[0] = (char)('a' + lv - 10);
+
+ v >>= 4;
+ ret = c + ret;
+ }
+
+ return ret;
+ }
+
+ internal static bool html_is_valid(string color)
+ {
+ if (color.Length == 0)
+ return false;
+
+ if (color[0] == '#')
+ color = color.Substring(1, color.Length - 1);
+
+ bool alpha = false;
+
+ if (color.Length == 8)
+ alpha = true;
+ else if (color.Length == 6)
+ alpha = false;
+ else
+ return false;
+
+ if (alpha)
+ {
+ if ((int)_parse_col(color, 0) < 0)
+ return false;
+ }
+
+ int from = alpha ? 2 : 0;
+
+ if ((int)_parse_col(color, from + 0) < 0)
+ return false;
+ if ((int)_parse_col(color, from + 2) < 0)
+ return false;
+ if ((int)_parse_col(color, from + 4) < 0)
+ return false;
+
+ return true;
+ }
+
+ public static Color Color8(byte r8, byte g8, byte b8, byte a8)
+ {
+ return new Color((float)r8 / 255f, (float)g8 / 255f, (float)b8 / 255f, (float)a8 / 255f);
+ }
+
+ public Color(string rgba)
+ {
+ if (rgba.Length == 0)
+ {
+ r = 0f;
+ g = 0f;
+ b = 0f;
+ a = 1.0f;
+ return;
+ }
+
+ if (rgba[0] == '#')
+ rgba = rgba.Substring(1);
+
+ bool alpha = false;
+
+ if (rgba.Length == 8)
+ {
+ alpha = true;
+ }
+ else if (rgba.Length == 6)
+ {
+ alpha = false;
+ }
+ else
+ {
+ throw new ArgumentOutOfRangeException("Invalid color code. Length is " + rgba.Length + " but a length of 6 or 8 is expected: " + rgba);
+ }
+
+ if (alpha)
+ {
+ a = _parse_col(rgba, 0);
+
+ if (a < 0)
+ throw new ArgumentOutOfRangeException("Invalid color code. Alpha is " + a + " but zero or greater is expected: " + rgba);
+ }
+ else
+ {
+ a = 1.0f;
+ }
+
+ int from = alpha ? 2 : 0;
+
+ r = _parse_col(rgba, from + 0);
+
+ if (r < 0)
+ throw new ArgumentOutOfRangeException("Invalid color code. Red is " + r + " but zero or greater is expected: " + rgba);
+
+ g = _parse_col(rgba, from + 2);
+
+ if (g < 0)
+ throw new ArgumentOutOfRangeException("Invalid color code. Green is " + g + " but zero or greater is expected: " + rgba);
+
+ b = _parse_col(rgba, from + 4);
+
+ if (b < 0)
+ throw new ArgumentOutOfRangeException("Invalid color code. Blue is " + b + " but zero or greater is expected: " + rgba);
+ }
+
+ public static bool operator ==(Color left, Color right)
+ {
+ return left.Equals(right);
+ }
+
+ public static bool operator !=(Color left, Color right)
+ {
+ return !left.Equals(right);
+ }
+
+ public static bool operator <(Color left, Color right)
+ {
+ if (left.r == right.r)
+ {
+ if (left.g == right.g)
+ {
+ if (left.b == right.b)
+ return (left.a < right.a);
+ else
+ return (left.b < right.b);
+ }
+ else
+ {
+ return left.g < right.g;
+ }
+ }
+
+ return left.r < right.r;
+ }
+
+ public static bool operator >(Color left, Color right)
+ {
+ if (left.r == right.r)
+ {
+ if (left.g == right.g)
+ {
+ if (left.b == right.b)
+ return (left.a > right.a);
+ else
+ return (left.b > right.b);
+ }
+ else
+ {
+ return left.g > right.g;
+ }
+ }
+
+ return left.r > right.r;
+ }
+
+ public override bool Equals(object obj)
+ {
+ if (obj is Color)
+ {
+ return Equals((Color)obj);
+ }
+
+ return false;
+ }
+
+ public bool Equals(Color other)
+ {
+ return r == other.r && g == other.g && b == other.b && a == other.a;
+ }
+
+ public override int GetHashCode()
+ {
+ return r.GetHashCode() ^ g.GetHashCode() ^ b.GetHashCode() ^ a.GetHashCode();
+ }
+
+ public override string ToString()
+ {
+ return String.Format("{0},{1},{2},{3}", new object[]
+ {
+ this.r.ToString(),
+ this.g.ToString(),
+ this.b.ToString(),
+ this.a.ToString()
+ });
+ }
+
+ public string ToString(string format)
+ {
+ return String.Format("{0},{1},{2},{3}", new object[]
+ {
+ this.r.ToString(format),
+ this.g.ToString(format),
+ this.b.ToString(format),
+ this.a.ToString(format)
+ });
+ }
+ }
+}
diff --git a/modules/mono/glue/cs_files/Error.cs b/modules/mono/glue/cs_files/Error.cs new file mode 100644 index 0000000000..3f4a92603d --- /dev/null +++ b/modules/mono/glue/cs_files/Error.cs @@ -0,0 +1,48 @@ +namespace Godot +{ + public enum Error : int + { + OK = 0, + FAILED = 1, + ERR_UNAVAILABLE = 2, + ERR_UNCONFIGURED = 3, + ERR_UNAUTHORIZED = 4, + ERR_PARAMETER_RANGE_ERROR = 5, + ERR_OUT_OF_MEMORY = 6, + ERR_FILE_NOT_FOUND = 7, + ERR_FILE_BAD_DRIVE = 8, + ERR_FILE_BAD_PATH = 9, + ERR_FILE_NO_PERMISSION = 10, + ERR_FILE_ALREADY_IN_USE = 11, + ERR_FILE_CANT_OPEN = 12, + ERR_FILE_CANT_WRITE = 13, + ERR_FILE_CANT_READ = 14, + ERR_FILE_UNRECOGNIZED = 15, + ERR_FILE_CORRUPT = 16, + ERR_FILE_MISSING_DEPENDENCIES = 17, + ERR_FILE_EOF = 18, + ERR_CANT_OPEN = 19, + ERR_CANT_CREATE = 20, + ERR_PARSE_ERROR = 43, + ERROR_QUERY_FAILED = 21, + ERR_ALREADY_IN_USE = 22, + ERR_LOCKED = 23, + ERR_TIMEOUT = 24, + ERR_CANT_AQUIRE_RESOURCE = 28, + ERR_INVALID_DATA = 30, + ERR_INVALID_PARAMETER = 31, + ERR_ALREADY_EXISTS = 32, + ERR_DOES_NOT_EXIST = 33, + ERR_DATABASE_CANT_READ = 34, + ERR_DATABASE_CANT_WRITE = 35, + ERR_COMPILATION_FAILED = 36, + ERR_METHOD_NOT_FOUND = 37, + ERR_LINK_FAILED = 38, + ERR_SCRIPT_FAILED = 39, + ERR_CYCLIC_LINK = 40, + ERR_BUSY = 44, + ERR_HELP = 46, + ERR_BUG = 47, + ERR_WTF = 49 + } +} diff --git a/modules/mono/glue/cs_files/ExportAttribute.cs b/modules/mono/glue/cs_files/ExportAttribute.cs new file mode 100644 index 0000000000..a4e7d447dd --- /dev/null +++ b/modules/mono/glue/cs_files/ExportAttribute.cs @@ -0,0 +1,17 @@ +using System; + +namespace Godot +{ + [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)] + public class ExportAttribute : Attribute + { + private int hint; + private string hint_string; + + public ExportAttribute(int hint = GD.PROPERTY_HINT_NONE, string hint_string = "") + { + this.hint = hint; + this.hint_string = hint_string; + } + } +} diff --git a/modules/mono/glue/cs_files/GD.cs b/modules/mono/glue/cs_files/GD.cs new file mode 100644 index 0000000000..40a42d23b4 --- /dev/null +++ b/modules/mono/glue/cs_files/GD.cs @@ -0,0 +1,191 @@ +using System; + +namespace Godot +{ + public static class GD + { + /*{GodotGlobalConstants}*/ + + public static object bytes2var(byte[] bytes) + { + return NativeCalls.godot_icall_Godot_bytes2var(bytes); + } + + public static object convert(object what, int type) + { + return NativeCalls.godot_icall_Godot_convert(what, type); + } + + public static float db2linear(float db) + { + return (float)Math.Exp(db * 0.11512925464970228420089957273422); + } + + public static float dectime(float value, float amount, float step) + { + float sgn = value < 0 ? -1.0f : 1.0f; + float val = Mathf.abs(value); + val -= amount * step; + if (val < 0.0f) + val = 0.0f; + return val * sgn; + } + + public static FuncRef funcref(Object instance, string funcname) + { + var ret = new FuncRef(); + ret.SetInstance(instance); + ret.SetFunction(funcname); + return ret; + } + + public static int hash(object var) + { + return NativeCalls.godot_icall_Godot_hash(var); + } + + public static Object instance_from_id(int instance_id) + { + return NativeCalls.godot_icall_Godot_instance_from_id(instance_id); + } + + public static double linear2db(double linear) + { + return Math.Log(linear) * 8.6858896380650365530225783783321; + } + + public static Resource load(string path) + { + return ResourceLoader.Load(path); + } + + public static void print(params object[] what) + { + NativeCalls.godot_icall_Godot_print(what); + } + + public static void print_stack() + { + print(System.Environment.StackTrace); + } + + public static void printerr(params object[] what) + { + NativeCalls.godot_icall_Godot_printerr(what); + } + + public static void printraw(params object[] what) + { + NativeCalls.godot_icall_Godot_printraw(what); + } + + public static void prints(params object[] what) + { + NativeCalls.godot_icall_Godot_prints(what); + } + + public static void printt(params object[] what) + { + NativeCalls.godot_icall_Godot_printt(what); + } + + public static int[] range(int length) + { + int[] ret = new int[length]; + + for (int i = 0; i < length; i++) + { + ret[i] = i; + } + + return ret; + } + + public static int[] range(int from, int to) + { + if (to < from) + return new int[0]; + + int[] ret = new int[to - from]; + + for (int i = from; i < to; i++) + { + ret[i - from] = i; + } + + return ret; + } + + public static int[] range(int from, int to, int increment) + { + if (to < from && increment > 0) + return new int[0]; + if (to > from && increment < 0) + return new int[0]; + + // Calculate count + int count = 0; + + if (increment > 0) + count = ((to - from - 1) / increment) + 1; + else + count = ((from - to - 1) / -increment) + 1; + + int[] ret = new int[count]; + + if (increment > 0) + { + int idx = 0; + for (int i = from; i < to; i += increment) + { + ret[idx++] = i; + } + } + else + { + int idx = 0; + for (int i = from; i > to; i += increment) + { + ret[idx++] = i; + } + } + + return ret; + } + + public static void seed(int seed) + { + NativeCalls.godot_icall_Godot_seed(seed); + } + + public static string str(params object[] what) + { + return NativeCalls.godot_icall_Godot_str(what); + } + + public static object str2var(string str) + { + return NativeCalls.godot_icall_Godot_str2var(str); + } + + public static bool type_exists(string type) + { + return NativeCalls.godot_icall_Godot_type_exists(type); + } + + public static byte[] var2bytes(object var) + { + return NativeCalls.godot_icall_Godot_var2bytes(var); + } + + public static string var2str(object var) + { + return NativeCalls.godot_icall_Godot_var2str(var); + } + + public static WeakRef weakref(Object obj) + { + return NativeCalls.godot_icall_Godot_weakref(Object.GetPtr(obj)); + } + } +} diff --git a/modules/mono/glue/cs_files/GodotMethodAttribute.cs b/modules/mono/glue/cs_files/GodotMethodAttribute.cs new file mode 100644 index 0000000000..21333c8dab --- /dev/null +++ b/modules/mono/glue/cs_files/GodotMethodAttribute.cs @@ -0,0 +1,17 @@ +using System; + +namespace Godot +{ + [AttributeUsage(AttributeTargets.Method, Inherited = true)] + internal class GodotMethodAttribute : Attribute + { + private string methodName; + + public string MethodName { get { return methodName; } } + + public GodotMethodAttribute(string methodName) + { + this.methodName = methodName; + } + } +} diff --git a/modules/mono/glue/cs_files/GodotSynchronizationContext.cs b/modules/mono/glue/cs_files/GodotSynchronizationContext.cs new file mode 100644 index 0000000000..eb4d0bed1c --- /dev/null +++ b/modules/mono/glue/cs_files/GodotSynchronizationContext.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Threading; + +namespace Godot +{ + public class GodotSynchronizationContext : SynchronizationContext + { + private readonly BlockingCollection<KeyValuePair<SendOrPostCallback, object>> queue = new BlockingCollection<KeyValuePair<SendOrPostCallback, object>>(); + + public override void Post(SendOrPostCallback d, object state) + { + queue.Add(new KeyValuePair<SendOrPostCallback, object>(d, state)); + } + + public void ExecutePendingContinuations() + { + KeyValuePair<SendOrPostCallback, object> workItem; + while (queue.TryTake(out workItem)) + { + workItem.Key(workItem.Value); + } + } + } +} diff --git a/modules/mono/glue/cs_files/GodotTaskScheduler.cs b/modules/mono/glue/cs_files/GodotTaskScheduler.cs new file mode 100644 index 0000000000..f587645a49 --- /dev/null +++ b/modules/mono/glue/cs_files/GodotTaskScheduler.cs @@ -0,0 +1,94 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; + +namespace Godot +{ + public class GodotTaskScheduler : TaskScheduler + { + private GodotSynchronizationContext Context { get; set; } + private readonly LinkedList<Task> _tasks = new LinkedList<Task>(); + + public GodotTaskScheduler() + { + Context = new GodotSynchronizationContext(); + } + + protected sealed override void QueueTask(Task task) + { + lock (_tasks) + { + _tasks.AddLast(task); + } + } + + protected sealed override bool TryExecuteTaskInline(Task task, bool taskWasPreviouslyQueued) + { + if (SynchronizationContext.Current != Context) + { + return false; + } + + if (taskWasPreviouslyQueued) + { + TryDequeue(task); + } + + return base.TryExecuteTask(task); + } + + protected sealed override bool TryDequeue(Task task) + { + lock (_tasks) + { + return _tasks.Remove(task); + } + } + + protected sealed override IEnumerable<Task> GetScheduledTasks() + { + lock (_tasks) + { + return _tasks.ToArray(); + } + } + + public void Activate() + { + SynchronizationContext.SetSynchronizationContext(Context); + ExecuteQueuedTasks(); + Context.ExecutePendingContinuations(); + } + + private void ExecuteQueuedTasks() + { + while (true) + { + Task task; + + lock (_tasks) + { + if (_tasks.Any()) + { + task = _tasks.First.Value; + _tasks.RemoveFirst(); + } + else + { + break; + } + } + + if (task != null) + { + if (!TryExecuteTask(task)) + { + throw new InvalidOperationException(); + } + } + } + } + } +} diff --git a/modules/mono/glue/cs_files/IAwaitable.cs b/modules/mono/glue/cs_files/IAwaitable.cs new file mode 100644 index 0000000000..0397957d00 --- /dev/null +++ b/modules/mono/glue/cs_files/IAwaitable.cs @@ -0,0 +1,12 @@ +namespace Godot +{ + public interface IAwaitable + { + IAwaiter GetAwaiter(); + } + + public interface IAwaitable<out TResult> + { + IAwaiter<TResult> GetAwaiter(); + } +} diff --git a/modules/mono/glue/cs_files/IAwaiter.cs b/modules/mono/glue/cs_files/IAwaiter.cs new file mode 100644 index 0000000000..73c71b5634 --- /dev/null +++ b/modules/mono/glue/cs_files/IAwaiter.cs @@ -0,0 +1,19 @@ +using System; +using System.Runtime.CompilerServices; + +namespace Godot +{ + public interface IAwaiter : INotifyCompletion + { + bool IsCompleted { get; } + + void GetResult(); + } + + public interface IAwaiter<out TResult> : INotifyCompletion + { + bool IsCompleted { get; } + + TResult GetResult(); + } +} diff --git a/modules/mono/glue/cs_files/MarshalUtils.cs b/modules/mono/glue/cs_files/MarshalUtils.cs new file mode 100644 index 0000000000..5d40111339 --- /dev/null +++ b/modules/mono/glue/cs_files/MarshalUtils.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; + +namespace Godot +{ + internal static class MarshalUtils + { + private static Dictionary<object, object> ArraysToDictionary(object[] keys, object[] values) + { + Dictionary<object, object> ret = new Dictionary<object, object>(); + + for (int i = 0; i < keys.Length; i++) + { + ret.Add(keys[i], values[i]); + } + + return ret; + } + + private static void DictionaryToArrays(Dictionary<object, object> from, out object[] keysTo, out object[] valuesTo) + { + Dictionary<object, object>.KeyCollection keys = from.Keys; + keysTo = new object[keys.Count]; + keys.CopyTo(keysTo, 0); + + Dictionary<object, object>.ValueCollection values = from.Values; + valuesTo = new object[values.Count]; + values.CopyTo(valuesTo, 0); + } + + private static Type GetDictionaryType() + { + return typeof(Dictionary<object, object>); + } + } +} diff --git a/modules/mono/glue/cs_files/Mathf.cs b/modules/mono/glue/cs_files/Mathf.cs new file mode 100644 index 0000000000..cb0eb1acdd --- /dev/null +++ b/modules/mono/glue/cs_files/Mathf.cs @@ -0,0 +1,234 @@ +using System; + +namespace Godot +{ + public static class Mathf + { + public const float PI = 3.14159274f; + public const float Epsilon = 1e-06f; + + private const float Deg2RadConst = 0.0174532924f; + private const float Rad2DegConst = 57.29578f; + + public static float abs(float s) + { + return Math.Abs(s); + } + + public static float acos(float s) + { + return (float)Math.Acos(s); + } + + public static float asin(float s) + { + return (float)Math.Asin(s); + } + + public static float atan(float s) + { + return (float)Math.Atan(s); + } + + public static float atan2(float x, float y) + { + return (float)Math.Atan2(x, y); + } + + public static float ceil(float s) + { + return (float)Math.Ceiling(s); + } + + public static float clamp(float val, float min, float max) + { + if (val < min) + { + return min; + } + else if (val > max) + { + return max; + } + + return val; + } + + public static float cos(float s) + { + return (float)Math.Cos(s); + } + + public static float cosh(float s) + { + return (float)Math.Cosh(s); + } + + public static int decimals(float step) + { + return decimals(step); + } + + public static int decimals(decimal step) + { + return BitConverter.GetBytes(decimal.GetBits(step)[3])[2]; + } + + public static float deg2rad(float deg) + { + return deg * Deg2RadConst; + } + + public static float ease(float s, float curve) + { + if (s < 0f) + { + s = 0f; + } + else if (s > 1.0f) + { + s = 1.0f; + } + + if (curve > 0f) + { + if (curve < 1.0f) + { + return 1.0f - pow(1.0f - s, 1.0f / curve); + } + + return pow(s, curve); + } + else if (curve < 0f) + { + if (s < 0.5f) + { + return pow(s * 2.0f, -curve) * 0.5f; + } + + return (1.0f - pow(1.0f - (s - 0.5f) * 2.0f, -curve)) * 0.5f + 0.5f; + } + + return 0f; + } + + public static float exp(float s) + { + return (float)Math.Exp(s); + } + + public static float floor(float s) + { + return (float)Math.Floor(s); + } + + public static float fposmod(float x, float y) + { + if (x >= 0f) + { + return x % y; + } + else + { + return y - (-x % y); + } + } + + public static float lerp(float from, float to, float weight) + { + return from + (to - from) * clamp(weight, 0f, 1f); + } + + public static float log(float s) + { + return (float)Math.Log(s); + } + + public static int max(int a, int b) + { + return (a > b) ? a : b; + } + + public static float max(float a, float b) + { + return (a > b) ? a : b; + } + + public static int min(int a, int b) + { + return (a < b) ? a : b; + } + + public static float min(float a, float b) + { + return (a < b) ? a : b; + } + + public static int nearest_po2(int val) + { + val--; + val |= val >> 1; + val |= val >> 2; + val |= val >> 4; + val |= val >> 8; + val |= val >> 16; + val++; + return val; + } + + public static float pow(float x, float y) + { + return (float)Math.Pow(x, y); + } + + public static float rad2deg(float rad) + { + return rad * Rad2DegConst; + } + + public static float round(float s) + { + return (float)Math.Round(s); + } + + public static float sign(float s) + { + return (s < 0f) ? -1f : 1f; + } + + public static float sin(float s) + { + return (float)Math.Sin(s); + } + + public static float sinh(float s) + { + return (float)Math.Sinh(s); + } + + public static float sqrt(float s) + { + return (float)Math.Sqrt(s); + } + + public static float stepify(float s, float step) + { + if (step != 0f) + { + s = floor(s / step + 0.5f) * step; + } + + return s; + } + + public static float tan(float s) + { + return (float)Math.Tan(s); + } + + public static float tanh(float s) + { + return (float)Math.Tanh(s); + } + } +} diff --git a/modules/mono/glue/cs_files/Plane.cs b/modules/mono/glue/cs_files/Plane.cs new file mode 100644 index 0000000000..ada6e465ac --- /dev/null +++ b/modules/mono/glue/cs_files/Plane.cs @@ -0,0 +1,209 @@ +using System;
+
+namespace Godot
+{
+ public struct Plane : IEquatable<Plane>
+ {
+ Vector3 normal;
+
+ public float x
+ {
+ get
+ {
+ return normal.x;
+ }
+ set
+ {
+ normal.x = value;
+ }
+ }
+
+ public float y
+ {
+ get
+ {
+ return normal.y;
+ }
+ set
+ {
+ normal.y = value;
+ }
+ }
+
+ public float z
+ {
+ get
+ {
+ return normal.z;
+ }
+ set
+ {
+ normal.z = value;
+ }
+ }
+
+ float d;
+
+ public Vector3 Center
+ {
+ get
+ {
+ return normal * d;
+ }
+ }
+
+ public float distance_to(Vector3 point)
+ {
+ return normal.dot(point) - d;
+ }
+
+ public Vector3 get_any_point()
+ {
+ return normal * d;
+ }
+
+ public bool has_point(Vector3 point, float epsilon = Mathf.Epsilon)
+ {
+ float dist = normal.dot(point) - d;
+ return Mathf.abs(dist) <= epsilon;
+ }
+
+ public Vector3 intersect_3(Plane b, Plane c)
+ {
+ float denom = normal.cross(b.normal).dot(c.normal);
+
+ if (Mathf.abs(denom) <= Mathf.Epsilon)
+ return new Vector3();
+
+ Vector3 result = (b.normal.cross(c.normal) * this.d) +
+ (c.normal.cross(normal) * b.d) +
+ (normal.cross(b.normal) * c.d);
+
+ return result / denom;
+ }
+
+ public Vector3 intersect_ray(Vector3 from, Vector3 dir)
+ {
+ float den = normal.dot(dir);
+
+ if (Mathf.abs(den) <= Mathf.Epsilon)
+ return new Vector3();
+
+ float dist = (normal.dot(from) - d) / den;
+
+ // This is a ray, before the emiting pos (from) does not exist
+ if (dist > Mathf.Epsilon)
+ return new Vector3();
+
+ return from + dir * -dist;
+ }
+
+ public Vector3 intersect_segment(Vector3 begin, Vector3 end)
+ {
+ Vector3 segment = begin - end;
+ float den = normal.dot(segment);
+
+ if (Mathf.abs(den) <= Mathf.Epsilon)
+ return new Vector3();
+
+ float dist = (normal.dot(begin) - d) / den;
+
+ if (dist < -Mathf.Epsilon || dist > (1.0f + Mathf.Epsilon))
+ return new Vector3();
+
+ return begin + segment * -dist;
+ }
+
+ public bool is_point_over(Vector3 point)
+ {
+ return normal.dot(point) > d;
+ }
+
+ public Plane normalized()
+ {
+ float len = normal.length();
+
+ if (len == 0)
+ return new Plane(0, 0, 0, 0);
+
+ return new Plane(normal / len, d / len);
+ }
+
+ public Vector3 project(Vector3 point)
+ {
+ return point - normal * distance_to(point);
+ }
+
+ public Plane(float a, float b, float c, float d)
+ {
+ normal = new Vector3(a, b, c);
+ this.d = d;
+ }
+
+ public Plane(Vector3 normal, float d)
+ {
+ this.normal = normal;
+ this.d = d;
+ }
+
+ public Plane(Vector3 v1, Vector3 v2, Vector3 v3)
+ {
+ normal = (v1 - v3).cross(v1 - v2);
+ normal.normalize();
+ d = normal.dot(v1);
+ }
+
+ public static Plane operator -(Plane plane)
+ {
+ return new Plane(-plane.normal, -plane.d);
+ }
+
+ public static bool operator ==(Plane left, Plane right)
+ {
+ return left.Equals(right);
+ }
+
+ public static bool operator !=(Plane left, Plane right)
+ {
+ return !left.Equals(right);
+ }
+
+ public override bool Equals(object obj)
+ {
+ if (obj is Plane)
+ {
+ return Equals((Plane)obj);
+ }
+
+ return false;
+ }
+
+ public bool Equals(Plane other)
+ {
+ return normal == other.normal && d == other.d;
+ }
+
+ public override int GetHashCode()
+ {
+ return normal.GetHashCode() ^ d.GetHashCode();
+ }
+
+ public override string ToString()
+ {
+ return String.Format("({0}, {1})", new object[]
+ {
+ this.normal.ToString(),
+ this.d.ToString()
+ });
+ }
+
+ public string ToString(string format)
+ {
+ return String.Format("({0}, {1})", new object[]
+ {
+ this.normal.ToString(format),
+ this.d.ToString(format)
+ });
+ }
+ }
+}
diff --git a/modules/mono/glue/cs_files/Quat.cs b/modules/mono/glue/cs_files/Quat.cs new file mode 100644 index 0000000000..9b4b7fb297 --- /dev/null +++ b/modules/mono/glue/cs_files/Quat.cs @@ -0,0 +1,328 @@ +using System; +using System.Runtime.InteropServices; + +namespace Godot +{ + [StructLayout(LayoutKind.Sequential)] + public struct Quat : IEquatable<Quat> + { + private static readonly Quat identity = new Quat(0f, 0f, 0f, 1f); + + public float x; + public float y; + public float z; + public float w; + + public static Quat Identity + { + get { return identity; } + } + + public float this[int index] + { + get + { + switch (index) + { + case 0: + return x; + case 1: + return y; + case 2: + return z; + case 3: + return w; + default: + throw new IndexOutOfRangeException(); + } + } + set + { + switch (index) + { + case 0: + x = value; + break; + case 1: + y = value; + break; + case 2: + z = value; + break; + case 3: + w = value; + break; + default: + throw new IndexOutOfRangeException(); + } + } + } + + public Quat cubic_slerp(Quat b, Quat preA, Quat postB, float t) + { + float t2 = (1.0f - t) * t * 2f; + Quat sp = slerp(b, t); + Quat sq = preA.slerpni(postB, t); + return sp.slerpni(sq, t2); + } + + public float dot(Quat b) + { + return x * b.x + y * b.y + z * b.z + w * b.w; + } + + public Quat inverse() + { + return new Quat(-x, -y, -z, w); + } + + public float length() + { + return Mathf.sqrt(length_squared()); + } + + public float length_squared() + { + return dot(this); + } + + public Quat normalized() + { + return this / length(); + } + + public void set(float x, float y, float z, float w) + { + this.x = x; + this.y = y; + this.z = z; + this.w = w; + } + + public Quat slerp(Quat b, float t) + { + // Calculate cosine + float cosom = x * b.x + y * b.y + z * b.z + w * b.w; + + float[] to1 = new float[4]; + + // Adjust signs if necessary + if (cosom < 0.0) + { + cosom = -cosom; to1[0] = -b.x; + to1[1] = -b.y; + to1[2] = -b.z; + to1[3] = -b.w; + } + else + { + to1[0] = b.x; + to1[1] = b.y; + to1[2] = b.z; + to1[3] = b.w; + } + + float sinom, scale0, scale1; + + // Calculate coefficients + if ((1.0 - cosom) > Mathf.Epsilon) + { + // Standard case (Slerp) + float omega = Mathf.acos(cosom); + sinom = Mathf.sin(omega); + scale0 = Mathf.sin((1.0f - t) * omega) / sinom; + scale1 = Mathf.sin(t * omega) / sinom; + } + else + { + // Quaternions are very close so we can do a linear interpolation + scale0 = 1.0f - t; + scale1 = t; + } + + // Calculate final values + return new Quat + ( + scale0 * x + scale1 * to1[0], + scale0 * y + scale1 * to1[1], + scale0 * z + scale1 * to1[2], + scale0 * w + scale1 * to1[3] + ); + } + + public Quat slerpni(Quat b, float t) + { + float dot = this.dot(b); + + if (Mathf.abs(dot) > 0.9999f) + { + return this; + } + + float theta = Mathf.acos(dot); + float sinT = 1.0f / Mathf.sin(theta); + float newFactor = Mathf.sin(t * theta) * sinT; + float invFactor = Mathf.sin((1.0f - t) * theta) * sinT; + + return new Quat + ( + invFactor * this.x + newFactor * b.x, + invFactor * this.y + newFactor * b.y, + invFactor * this.z + newFactor * b.z, + invFactor * this.w + newFactor * b.w + ); + } + + public Vector3 xform(Vector3 v) + { + Quat q = this * v; + q *= this.inverse(); + return new Vector3(q.x, q.y, q.z); + } + + public Quat(float x, float y, float z, float w) + { + this.x = x; + this.y = y; + this.z = z; + this.w = w; + } + + public Quat(Vector3 axis, float angle) + { + float d = axis.length(); + + if (d == 0f) + { + x = 0f; + y = 0f; + z = 0f; + w = 0f; + } + else + { + float s = Mathf.sin(angle * 0.5f) / d; + + x = axis.x * s; + y = axis.y * s; + z = axis.z * s; + w = Mathf.cos(angle * 0.5f); + } + } + + public static Quat operator *(Quat left, Quat right) + { + return new Quat + ( + left.w * right.x + left.x * right.w + left.y * right.z - left.z * right.y, + left.w * right.y + left.y * right.w + left.z * right.x - left.x * right.z, + left.w * right.z + left.z * right.w + left.x * right.y - left.y * right.x, + left.w * right.w - left.x * right.x - left.y * right.y - left.z * right.z + ); + } + + public static Quat operator +(Quat left, Quat right) + { + return new Quat(left.x + right.x, left.y + right.y, left.z + right.z, left.w + right.w); + } + + public static Quat operator -(Quat left, Quat right) + { + return new Quat(left.x - right.x, left.y - right.y, left.z - right.z, left.w - right.w); + } + + public static Quat operator -(Quat left) + { + return new Quat(-left.x, -left.y, -left.z, -left.w); + } + + public static Quat operator *(Quat left, Vector3 right) + { + return new Quat + ( + left.w * right.x + left.y * right.z - left.z * right.y, + left.w * right.y + left.z * right.x - left.x * right.z, + left.w * right.z + left.x * right.y - left.y * right.x, + -left.x * right.x - left.y * right.y - left.z * right.z + ); + } + + public static Quat operator *(Vector3 left, Quat right) + { + return new Quat + ( + right.w * left.x + right.y * left.z - right.z * left.y, + right.w * left.y + right.z * left.x - right.x * left.z, + right.w * left.z + right.x * left.y - right.y * left.x, + -right.x * left.x - right.y * left.y - right.z * left.z + ); + } + + public static Quat operator *(Quat left, float right) + { + return new Quat(left.x * right, left.y * right, left.z * right, left.w * right); + } + + public static Quat operator *(float left, Quat right) + { + return new Quat(right.x * left, right.y * left, right.z * left, right.w * left); + } + + public static Quat operator /(Quat left, float right) + { + return left * (1.0f / right); + } + + public static bool operator ==(Quat left, Quat right) + { + return left.Equals(right); + } + + public static bool operator !=(Quat left, Quat right) + { + return !left.Equals(right); + } + + public override bool Equals(object obj) + { + if (obj is Vector2) + { + return Equals((Vector2)obj); + } + + return false; + } + + public bool Equals(Quat other) + { + return x == other.x && y == other.y && z == other.z && w == other.w; + } + + public override int GetHashCode() + { + return y.GetHashCode() ^ x.GetHashCode() ^ z.GetHashCode() ^ w.GetHashCode(); + } + + public override string ToString() + { + return String.Format("({0}, {1}, {2}, {3})", new object[] + { + this.x.ToString(), + this.y.ToString(), + this.z.ToString(), + this.w.ToString() + }); + } + + public string ToString(string format) + { + return String.Format("({0}, {1}, {2}, {3})", new object[] + { + this.x.ToString(format), + this.y.ToString(format), + this.z.ToString(format), + this.w.ToString(format) + }); + } + } +} diff --git a/modules/mono/glue/cs_files/RPCAttributes.cs b/modules/mono/glue/cs_files/RPCAttributes.cs new file mode 100644 index 0000000000..08841ffd76 --- /dev/null +++ b/modules/mono/glue/cs_files/RPCAttributes.cs @@ -0,0 +1,16 @@ +using System; + +namespace Godot +{ + [AttributeUsage(AttributeTargets.Method | AttributeTargets.Field)] + public class RemoteAttribute : Attribute {} + + [AttributeUsage(AttributeTargets.Method | AttributeTargets.Field)] + public class SyncAttribute : Attribute {} + + [AttributeUsage(AttributeTargets.Method | AttributeTargets.Field)] + public class MasterAttribute : Attribute {} + + [AttributeUsage(AttributeTargets.Method | AttributeTargets.Field)] + public class SlaveAttribute : Attribute {} +} diff --git a/modules/mono/glue/cs_files/Rect2.cs b/modules/mono/glue/cs_files/Rect2.cs new file mode 100644 index 0000000000..019342134a --- /dev/null +++ b/modules/mono/glue/cs_files/Rect2.cs @@ -0,0 +1,233 @@ +using System; +using System.Runtime.InteropServices; + +namespace Godot +{ + [StructLayout(LayoutKind.Sequential)] + public struct Rect2 : IEquatable<Rect2> + { + private Vector2 position; + private Vector2 size; + + public Vector2 Position + { + get { return position; } + set { position = value; } + } + + public Vector2 Size + { + get { return size; } + set { size = value; } + } + + public Vector2 End + { + get { return position + size; } + } + + public float Area + { + get { return get_area(); } + } + + public Rect2 clip(Rect2 b) + { + Rect2 newRect = b; + + if (!intersects(newRect)) + return new Rect2(); + + newRect.position.x = Mathf.max(b.position.x, position.x); + newRect.position.y = Mathf.max(b.position.y, position.y); + + Vector2 bEnd = b.position + b.size; + Vector2 end = position + size; + + newRect.size.x = Mathf.min(bEnd.x, end.x) - newRect.position.x; + newRect.size.y = Mathf.min(bEnd.y, end.y) - newRect.position.y; + + return newRect; + } + + public bool encloses(Rect2 b) + { + return (b.position.x >= position.x) && (b.position.y >= position.y) && + ((b.position.x + b.size.x) < (position.x + size.x)) && + ((b.position.y + b.size.y) < (position.y + size.y)); + } + + public Rect2 expand(Vector2 to) + { + Rect2 expanded = this; + + Vector2 begin = expanded.position; + Vector2 end = expanded.position + expanded.size; + + if (to.x < begin.x) + begin.x = to.x; + if (to.y < begin.y) + begin.y = to.y; + + if (to.x > end.x) + end.x = to.x; + if (to.y > end.y) + end.y = to.y; + + expanded.position = begin; + expanded.size = end - begin; + + return expanded; + } + + public float get_area() + { + return size.x * size.y; + } + + public Rect2 grow(float by) + { + Rect2 g = this; + + g.position.x -= by; + g.position.y -= by; + g.size.x += by * 2; + g.size.y += by * 2; + + return g; + } + + public Rect2 grow_individual(float left, float top, float right, float bottom) + { + Rect2 g = this; + + g.position.x -= left; + g.position.y -= top; + g.size.x += left + right; + g.size.y += top + bottom; + + return g; + } + + public Rect2 grow_margin(int margin, float by) + { + Rect2 g = this; + + g.grow_individual((GD.MARGIN_LEFT == margin) ? by : 0, + (GD.MARGIN_TOP == margin) ? by : 0, + (GD.MARGIN_RIGHT == margin) ? by : 0, + (GD.MARGIN_BOTTOM == margin) ? by : 0); + + return g; + } + + public bool has_no_area() + { + return size.x <= 0 || size.y <= 0; + } + + public bool has_point(Vector2 point) + { + if (point.x < position.x) + return false; + if (point.y < position.y) + return false; + + if (point.x >= (position.x + size.x)) + return false; + if (point.y >= (position.y + size.y)) + return false; + + return true; + } + + public bool intersects(Rect2 b) + { + if (position.x > (b.position.x + b.size.x)) + return false; + if ((position.x + size.x) < b.position.x) + return false; + if (position.y > (b.position.y + b.size.y)) + return false; + if ((position.y + size.y) < b.position.y) + return false; + + return true; + } + + public Rect2 merge(Rect2 b) + { + Rect2 newRect; + + newRect.position.x = Mathf.min(b.position.x, position.x); + newRect.position.y = Mathf.min(b.position.y, position.y); + + newRect.size.x = Mathf.max(b.position.x + b.size.x, position.x + size.x); + newRect.size.y = Mathf.max(b.position.y + b.size.y, position.y + size.y); + + newRect.size = newRect.size - newRect.position; // Make relative again + + return newRect; + } + + public Rect2(Vector2 position, Vector2 size) + { + this.position = position; + this.size = size; + } + + public Rect2(float x, float y, float width, float height) + { + this.position = new Vector2(x, y); + this.size = new Vector2(width, height); + } + + public static bool operator ==(Rect2 left, Rect2 right) + { + return left.Equals(right); + } + + public static bool operator !=(Rect2 left, Rect2 right) + { + return !left.Equals(right); + } + + public override bool Equals(object obj) + { + if (obj is Rect2) + { + return Equals((Rect2)obj); + } + + return false; + } + + public bool Equals(Rect2 other) + { + return position.Equals(other.position) && size.Equals(other.size); + } + + public override int GetHashCode() + { + return position.GetHashCode() ^ size.GetHashCode(); + } + + public override string ToString() + { + return String.Format("({0}, {1})", new object[] + { + this.position.ToString(), + this.size.ToString() + }); + } + + public string ToString(string format) + { + return String.Format("({0}, {1})", new object[] + { + this.position.ToString(format), + this.size.ToString(format) + }); + } + } +}
\ No newline at end of file diff --git a/modules/mono/glue/cs_files/Rect3.cs b/modules/mono/glue/cs_files/Rect3.cs new file mode 100644 index 0000000000..0d25de1ec6 --- /dev/null +++ b/modules/mono/glue/cs_files/Rect3.cs @@ -0,0 +1,477 @@ +using System;
+
+// file: core/math/rect3.h
+// commit: 7ad14e7a3e6f87ddc450f7e34621eb5200808451
+// file: core/math/rect3.cpp
+// commit: bd282ff43f23fe845f29a3e25c8efc01bd65ffb0
+// file: core/variant_call.cpp
+// commit: 5ad9be4c24e9d7dc5672fdc42cea896622fe5685
+
+namespace Godot
+{
+ public struct Rect3 : IEquatable<Rect3>
+ {
+ private Vector3 position;
+ private Vector3 size;
+
+ public Vector3 Position
+ {
+ get
+ {
+ return position;
+ }
+ }
+
+ public Vector3 Size
+ {
+ get
+ {
+ return size;
+ }
+ }
+
+ public Vector3 End
+ {
+ get
+ {
+ return position + size;
+ }
+ }
+
+ public bool encloses(Rect3 with)
+ {
+ Vector3 src_min = position;
+ Vector3 src_max = position + size;
+ Vector3 dst_min = with.position;
+ Vector3 dst_max = with.position + with.size;
+
+ return ((src_min.x <= dst_min.x) &&
+ (src_max.x > dst_max.x) &&
+ (src_min.y <= dst_min.y) &&
+ (src_max.y > dst_max.y) &&
+ (src_min.z <= dst_min.z) &&
+ (src_max.z > dst_max.z));
+ }
+
+ public Rect3 expand(Vector3 to_point)
+ {
+ Vector3 begin = position;
+ Vector3 end = position + size;
+
+ if (to_point.x < begin.x)
+ begin.x = to_point.x;
+ if (to_point.y < begin.y)
+ begin.y = to_point.y;
+ if (to_point.z < begin.z)
+ begin.z = to_point.z;
+
+ if (to_point.x > end.x)
+ end.x = to_point.x;
+ if (to_point.y > end.y)
+ end.y = to_point.y;
+ if (to_point.z > end.z)
+ end.z = to_point.z;
+
+ return new Rect3(begin, end - begin);
+ }
+
+ public float get_area()
+ {
+ return size.x * size.y * size.z;
+ }
+
+ public Vector3 get_endpoint(int idx)
+ {
+ switch (idx)
+ {
+ case 0:
+ return new Vector3(position.x, position.y, position.z);
+ case 1:
+ return new Vector3(position.x, position.y, position.z + size.z);
+ case 2:
+ return new Vector3(position.x, position.y + size.y, position.z);
+ case 3:
+ return new Vector3(position.x, position.y + size.y, position.z + size.z);
+ case 4:
+ return new Vector3(position.x + size.x, position.y, position.z);
+ case 5:
+ return new Vector3(position.x + size.x, position.y, position.z + size.z);
+ case 6:
+ return new Vector3(position.x + size.x, position.y + size.y, position.z);
+ case 7:
+ return new Vector3(position.x + size.x, position.y + size.y, position.z + size.z);
+ default:
+ throw new ArgumentOutOfRangeException(nameof(idx), String.Format("Index is {0}, but a value from 0 to 7 is expected.", idx));
+ }
+ }
+
+ public Vector3 get_longest_axis()
+ {
+ Vector3 axis = new Vector3(1f, 0f, 0f);
+ float max_size = size.x;
+
+ if (size.y > max_size)
+ {
+ axis = new Vector3(0f, 1f, 0f);
+ max_size = size.y;
+ }
+
+ if (size.z > max_size)
+ {
+ axis = new Vector3(0f, 0f, 1f);
+ max_size = size.z;
+ }
+
+ return axis;
+ }
+
+ public Vector3.Axis get_longest_axis_index()
+ {
+ Vector3.Axis axis = Vector3.Axis.X;
+ float max_size = size.x;
+
+ if (size.y > max_size)
+ {
+ axis = Vector3.Axis.Y;
+ max_size = size.y;
+ }
+
+ if (size.z > max_size)
+ {
+ axis = Vector3.Axis.Z;
+ max_size = size.z;
+ }
+
+ return axis;
+ }
+
+ public float get_longest_axis_size()
+ {
+ float max_size = size.x;
+
+ if (size.y > max_size)
+ max_size = size.y;
+
+ if (size.z > max_size)
+ max_size = size.z;
+
+ return max_size;
+ }
+
+ public Vector3 get_shortest_axis()
+ {
+ Vector3 axis = new Vector3(1f, 0f, 0f);
+ float max_size = size.x;
+
+ if (size.y < max_size)
+ {
+ axis = new Vector3(0f, 1f, 0f);
+ max_size = size.y;
+ }
+
+ if (size.z < max_size)
+ {
+ axis = new Vector3(0f, 0f, 1f);
+ max_size = size.z;
+ }
+
+ return axis;
+ }
+
+ public Vector3.Axis get_shortest_axis_index()
+ {
+ Vector3.Axis axis = Vector3.Axis.X;
+ float max_size = size.x;
+
+ if (size.y < max_size)
+ {
+ axis = Vector3.Axis.Y;
+ max_size = size.y;
+ }
+
+ if (size.z < max_size)
+ {
+ axis = Vector3.Axis.Z;
+ max_size = size.z;
+ }
+
+ return axis;
+ }
+
+ public float get_shortest_axis_size()
+ {
+ float max_size = size.x;
+
+ if (size.y < max_size)
+ max_size = size.y;
+
+ if (size.z < max_size)
+ max_size = size.z;
+
+ return max_size;
+ }
+
+ public Vector3 get_support(Vector3 dir)
+ {
+ Vector3 half_extents = size * 0.5f;
+ Vector3 ofs = position + half_extents;
+
+ return ofs + new Vector3(
+ (dir.x > 0f) ? -half_extents.x : half_extents.x,
+ (dir.y > 0f) ? -half_extents.y : half_extents.y,
+ (dir.z > 0f) ? -half_extents.z : half_extents.z);
+ }
+
+ public Rect3 grow(float by)
+ {
+ Rect3 res = this;
+
+ res.position.x -= by;
+ res.position.y -= by;
+ res.position.z -= by;
+ res.size.x += 2.0f * by;
+ res.size.y += 2.0f * by;
+ res.size.z += 2.0f * by;
+
+ return res;
+ }
+
+ public bool has_no_area()
+ {
+ return size.x <= 0f || size.y <= 0f || size.z <= 0f;
+ }
+
+ public bool has_no_surface()
+ {
+ return size.x <= 0f && size.y <= 0f && size.z <= 0f;
+ }
+
+ public bool has_point(Vector3 point)
+ {
+ if (point.x < position.x)
+ return false;
+ if (point.y < position.y)
+ return false;
+ if (point.z < position.z)
+ return false;
+ if (point.x > position.x + size.x)
+ return false;
+ if (point.y > position.y + size.y)
+ return false;
+ if (point.z > position.z + size.z)
+ return false;
+
+ return true;
+ }
+
+ public Rect3 intersection(Rect3 with)
+ {
+ Vector3 src_min = position;
+ Vector3 src_max = position + size;
+ Vector3 dst_min = with.position;
+ Vector3 dst_max = with.position + with.size;
+
+ Vector3 min, max;
+
+ if (src_min.x > dst_max.x || src_max.x < dst_min.x)
+ {
+ return new Rect3();
+ }
+ else
+ {
+ min.x = (src_min.x > dst_min.x) ? src_min.x : dst_min.x;
+ max.x = (src_max.x < dst_max.x) ? src_max.x : dst_max.x;
+ }
+
+ if (src_min.y > dst_max.y || src_max.y < dst_min.y)
+ {
+ return new Rect3();
+ }
+ else
+ {
+ min.y = (src_min.y > dst_min.y) ? src_min.y : dst_min.y;
+ max.y = (src_max.y < dst_max.y) ? src_max.y : dst_max.y;
+ }
+
+ if (src_min.z > dst_max.z || src_max.z < dst_min.z)
+ {
+ return new Rect3();
+ }
+ else
+ {
+ min.z = (src_min.z > dst_min.z) ? src_min.z : dst_min.z;
+ max.z = (src_max.z < dst_max.z) ? src_max.z : dst_max.z;
+ }
+
+ return new Rect3(min, max - min);
+ }
+
+ public bool intersects(Rect3 with)
+ {
+ if (position.x >= (with.position.x + with.size.x))
+ return false;
+ if ((position.x + size.x) <= with.position.x)
+ return false;
+ if (position.y >= (with.position.y + with.size.y))
+ return false;
+ if ((position.y + size.y) <= with.position.y)
+ return false;
+ if (position.z >= (with.position.z + with.size.z))
+ return false;
+ if ((position.z + size.z) <= with.position.z)
+ return false;
+
+ return true;
+ }
+
+ public bool intersects_plane(Plane plane)
+ {
+ Vector3[] points =
+ {
+ new Vector3(position.x, position.y, position.z),
+ new Vector3(position.x, position.y, position.z + size.z),
+ new Vector3(position.x, position.y + size.y, position.z),
+ new Vector3(position.x, position.y + size.y, position.z + size.z),
+ new Vector3(position.x + size.x, position.y, position.z),
+ new Vector3(position.x + size.x, position.y, position.z + size.z),
+ new Vector3(position.x + size.x, position.y + size.y, position.z),
+ new Vector3(position.x + size.x, position.y + size.y, position.z + size.z),
+ };
+
+ bool over = false;
+ bool under = false;
+
+ for (int i = 0; i < 8; i++)
+ {
+ if (plane.distance_to(points[i]) > 0)
+ over = true;
+ else
+ under = true;
+ }
+
+ return under && over;
+ }
+
+ public bool intersects_segment(Vector3 from, Vector3 to)
+ {
+ float min = 0f;
+ float max = 1f;
+
+ for (int i = 0; i < 3; i++)
+ {
+ float seg_from = from[i];
+ float seg_to = to[i];
+ float box_begin = position[i];
+ float box_end = box_begin + size[i];
+ float cmin, cmax;
+
+ if (seg_from < seg_to)
+ {
+ if (seg_from > box_end || seg_to < box_begin)
+ return false;
+
+ float length = seg_to - seg_from;
+ cmin = seg_from < box_begin ? (box_begin - seg_from) / length : 0f;
+ cmax = seg_to > box_end ? (box_end - seg_from) / length : 1f;
+ }
+ else
+ {
+ if (seg_to > box_end || seg_from < box_begin)
+ return false;
+
+ float length = seg_to - seg_from;
+ cmin = seg_from > box_end ? (box_end - seg_from) / length : 0f;
+ cmax = seg_to < box_begin ? (box_begin - seg_from) / length : 1f;
+ }
+
+ if (cmin > min)
+ {
+ min = cmin;
+ }
+
+ if (cmax < max)
+ max = cmax;
+ if (max < min)
+ return false;
+ }
+
+ return true;
+ }
+
+ public Rect3 merge(Rect3 with)
+ {
+ Vector3 beg_1 = position;
+ Vector3 beg_2 = with.position;
+ Vector3 end_1 = new Vector3(size.x, size.y, size.z) + beg_1;
+ Vector3 end_2 = new Vector3(with.size.x, with.size.y, with.size.z) + beg_2;
+
+ Vector3 min = new Vector3(
+ (beg_1.x < beg_2.x) ? beg_1.x : beg_2.x,
+ (beg_1.y < beg_2.y) ? beg_1.y : beg_2.y,
+ (beg_1.z < beg_2.z) ? beg_1.z : beg_2.z
+ );
+
+ Vector3 max = new Vector3(
+ (end_1.x > end_2.x) ? end_1.x : end_2.x,
+ (end_1.y > end_2.y) ? end_1.y : end_2.y,
+ (end_1.z > end_2.z) ? end_1.z : end_2.z
+ );
+
+ return new Rect3(min, max - min);
+ }
+
+ public Rect3(Vector3 position, Vector3 size)
+ {
+ this.position = position;
+ this.size = size;
+ }
+
+ public static bool operator ==(Rect3 left, Rect3 right)
+ {
+ return left.Equals(right);
+ }
+
+ public static bool operator !=(Rect3 left, Rect3 right)
+ {
+ return !left.Equals(right);
+ }
+
+ public override bool Equals(object obj)
+ {
+ if (obj is Rect3)
+ {
+ return Equals((Rect3)obj);
+ }
+
+ return false;
+ }
+
+ public bool Equals(Rect3 other)
+ {
+ return position == other.position && size == other.size;
+ }
+
+ public override int GetHashCode()
+ {
+ return position.GetHashCode() ^ size.GetHashCode();
+ }
+
+ public override string ToString()
+ {
+ return String.Format("{0} - {1}", new object[]
+ {
+ this.position.ToString(),
+ this.size.ToString()
+ });
+ }
+
+ public string ToString(string format)
+ {
+ return String.Format("{0} - {1}", new object[]
+ {
+ this.position.ToString(format),
+ this.size.ToString(format)
+ });
+ }
+ }
+}
diff --git a/modules/mono/glue/cs_files/SignalAwaiter.cs b/modules/mono/glue/cs_files/SignalAwaiter.cs new file mode 100644 index 0000000000..19ccc26e79 --- /dev/null +++ b/modules/mono/glue/cs_files/SignalAwaiter.cs @@ -0,0 +1,59 @@ +using System; + +namespace Godot +{ + public class SignalAwaiter : IAwaiter<object[]>, IAwaitable<object[]> + { + private bool completed = false; + private object[] result = null; + private Action action = null; + + public SignalAwaiter(Godot.Object source, string signal, Godot.Object target) + { + NativeCalls.godot_icall_Object_connect_signal_awaiter( + Godot.Object.GetPtr(source), + signal, Godot.Object.GetPtr(target), this + ); + } + + public bool IsCompleted + { + get + { + return completed; + } + } + + public void OnCompleted(Action action) + { + this.action = action; + } + + public object[] GetResult() + { + return result; + } + + public IAwaiter<object[]> GetAwaiter() + { + return this; + } + + internal void SignalCallback(object[] args) + { + completed = true; + result = args; + + if (action != null) + { + action(); + } + } + + internal void FailureCallback() + { + action = null; + completed = true; + } + } +} diff --git a/modules/mono/glue/cs_files/StringExtensions.cs b/modules/mono/glue/cs_files/StringExtensions.cs new file mode 100644 index 0000000000..96041827aa --- /dev/null +++ b/modules/mono/glue/cs_files/StringExtensions.cs @@ -0,0 +1,962 @@ +//using System; +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Security; +using System.Text; +using System.Text.RegularExpressions; + +namespace Godot +{ + public static class StringExtensions + { + private static int get_slice_count(this string instance, string splitter) + { + if (instance.empty() || splitter.empty()) + return 0; + + int pos = 0; + int slices = 1; + + while ((pos = instance.find(splitter, pos)) >= 0) + { + slices++; + pos += splitter.Length; + } + + return slices; + } + + private static string get_slicec(this string instance, char splitter, int slice) + { + if (!instance.empty() && slice >= 0) + { + int i = 0; + int prev = 0; + int count = 0; + + while (true) + { + if (instance[i] == 0 || instance[i] == splitter) + { + if (slice == count) + { + return instance.Substring(prev, i - prev); + } + else + { + count++; + prev = i + 1; + } + } + + i++; + } + } + + return string.Empty; + } + + // <summary> + // If the string is a path to a file, return the path to the file without the extension. + // </summary> + public static string basename(this string instance) + { + int index = instance.LastIndexOf('.'); + + if (index > 0) + return instance.Substring(0, index); + + return instance; + } + + // <summary> + // Return true if the strings begins with the given string. + // </summary> + public static bool begins_with(this string instance, string text) + { + return instance.StartsWith(text); + } + + // <summary> + // Return the bigrams (pairs of consecutive letters) of this string. + // </summary> + public static string[] bigrams(this string instance) + { + string[] b = new string[instance.Length - 1]; + + for (int i = 0; i < b.Length; i++) + { + b[i] = instance.Substring(i, 2); + } + + return b; + } + + // <summary> + // Return a copy of the string with special characters escaped using the C language standard. + // </summary> + public static string c_escape(this string instance) + { + StringBuilder sb = new StringBuilder(string.Copy(instance)); + + sb.Replace("\\", "\\\\"); + sb.Replace("\a", "\\a"); + sb.Replace("\b", "\\b"); + sb.Replace("\f", "\\f"); + sb.Replace("\n", "\\n"); + sb.Replace("\r", "\\r"); + sb.Replace("\t", "\\t"); + sb.Replace("\v", "\\v"); + sb.Replace("\'", "\\'"); + sb.Replace("\"", "\\\""); + sb.Replace("?", "\\?"); + + return sb.ToString(); + } + + // <summary> + // Return a copy of the string with escaped characters replaced by their meanings according to the C language standard. + // </summary> + public static string c_unescape(this string instance) + { + StringBuilder sb = new StringBuilder(string.Copy(instance)); + + sb.Replace("\\a", "\a"); + sb.Replace("\\b", "\b"); + sb.Replace("\\f", "\f"); + sb.Replace("\\n", "\n"); + sb.Replace("\\r", "\r"); + sb.Replace("\\t", "\t"); + sb.Replace("\\v", "\v"); + sb.Replace("\\'", "\'"); + sb.Replace("\\\"", "\""); + sb.Replace("\\?", "?"); + sb.Replace("\\\\", "\\"); + + return sb.ToString(); + } + + // <summary> + // Change the case of some letters. Replace underscores with spaces, convert all letters to lowercase then capitalize first and every letter following the space character. For [code]capitalize camelCase mixed_with_underscores[/code] it will return [code]Capitalize Camelcase Mixed With Underscores[/code]. + // </summary> + public static string capitalize(this string instance) + { + string aux = instance.Replace("_", " ").ToLower(); + string cap = string.Empty; + + for (int i = 0; i < aux.get_slice_count(" "); i++) + { + string slice = aux.get_slicec(' ', i); + if (slice.Length > 0) + { + slice = char.ToUpper(slice[0]) + slice.Substring(1); + if (i > 0) + cap += " "; + cap += slice; + } + } + + return cap; + } + + // <summary> + // Perform a case-sensitive comparison to another string, return -1 if less, 0 if equal and +1 if greater. + // </summary> + public static int casecmp_to(this string instance, string to) + { + if (instance.empty()) + return to.empty() ? 0 : -1; + + if (to.empty()) + return 1; + + int instance_idx = 0; + int to_idx = 0; + + while (true) + { + if (to[to_idx] == 0 && instance[instance_idx] == 0) + return 0; // We're equal + else if (instance[instance_idx] == 0) + return -1; // If this is empty, and the other one is not, then we're less... I think? + else if (to[to_idx] == 0) + return 1; // Otherwise the other one is smaller... + else if (instance[instance_idx] < to[to_idx]) // More than + return -1; + else if (instance[instance_idx] > to[to_idx]) // Less than + return 1; + + instance_idx++; + to_idx++; + } + } + + // <summary> + // Return true if the string is empty. + // </summary> + public static bool empty(this string instance) + { + return string.IsNullOrEmpty(instance); + } + + // <summary> + // Return true if the strings ends with the given string. + // </summary> + public static bool ends_with(this string instance, string text) + { + return instance.EndsWith(text); + } + + // <summary> + // Erase [code]chars[/code] characters from the string starting from [code]pos[/code]. + // </summary> + public static void erase(this StringBuilder instance, int pos, int chars) + { + instance.Remove(pos, chars); + } + + // <summary> + // If the string is a path to a file, return the extension. + // </summary> + public static string extension(this string instance) + { + int pos = instance.find_last("."); + + if (pos < 0) + return instance; + + return instance.Substring(pos + 1, instance.Length); + } + + // <summary> + // Find the first occurrence of a substring, return the starting position of the substring or -1 if not found. Optionally, the initial search index can be passed. + // </summary> + public static int find(this string instance, string what, int from = 0) + { + return instance.IndexOf(what, StringComparison.OrdinalIgnoreCase); + } + + // <summary> + // Find the last occurrence of a substring, return the starting position of the substring or -1 if not found. Optionally, the initial search index can be passed. + // </summary> + public static int find_last(this string instance, string what) + { + return instance.LastIndexOf(what, StringComparison.OrdinalIgnoreCase); + } + + // <summary> + // Find the first occurrence of a substring but search as case-insensitive, return the starting position of the substring or -1 if not found. Optionally, the initial search index can be passed. + // </summary> + public static int findn(this string instance, string what, int from = 0) + { + return instance.IndexOf(what, StringComparison.Ordinal); + } + + // <summary> + // If the string is a path to a file, return the base directory. + // </summary> + public static string get_base_dir(this string instance) + { + int basepos = instance.find("://"); + + string rs = string.Empty; + string @base = string.Empty; + + if (basepos != -1) + { + int end = basepos + 3; + rs = instance.Substring(end, instance.Length); + @base = instance.Substring(0, end); + } + else + { + if (instance.begins_with("/")) + { + rs = instance.Substring(1, instance.Length); + @base = "/"; + } + else + { + rs = instance; + } + } + + int sep = Mathf.max(rs.find_last("/"), rs.find_last("\\")); + + if (sep == -1) + return @base; + + return @base + rs.substr(0, sep); + } + + // <summary> + // If the string is a path to a file, return the file and ignore the base directory. + // </summary> + public static string get_file(this string instance) + { + int sep = Mathf.max(instance.find_last("/"), instance.find_last("\\")); + + if (sep == -1) + return instance; + + return instance.Substring(sep + 1, instance.Length); + } + + // <summary> + // Hash the string and return a 32 bits integer. + // </summary> + public static int hash(this string instance) + { + int index = 0; + int hashv = 5381; + int c; + + while ((c = (int)instance[index++]) != 0) + hashv = ((hashv << 5) + hashv) + c; // hash * 33 + c + + return hashv; + } + + // <summary> + // Convert a string containing an hexadecimal number into an int. + // </summary> + public static int hex_to_int(this string instance) + { + int sign = 1; + + if (instance[0] == '-') + { + sign = -1; + instance = instance.Substring(1); + } + + if (!instance.StartsWith("0x")) + return 0; + + return sign * int.Parse(instance.Substring(2), NumberStyles.HexNumber); + } + + // <summary> + // Insert a substring at a given position. + // </summary> + public static string insert(this string instance, int pos, string what) + { + return instance.Insert(pos, what); + } + + // <summary> + // If the string is a path to a file or directory, return true if the path is absolute. + // </summary> + public static bool is_abs_path(this string instance) + { + return System.IO.Path.IsPathRooted(instance); + } + + // <summary> + // If the string is a path to a file or directory, return true if the path is relative. + // </summary> + public static bool is_rel_path(this string instance) + { + return !System.IO.Path.IsPathRooted(instance); + } + + // <summary> + // Check whether this string is a subsequence of the given string. + // </summary> + public static bool is_subsequence_of(this string instance, string text, bool case_insensitive) + { + int len = instance.Length; + + if (len == 0) + return true; // Technically an empty string is subsequence of any string + + if (len > text.Length) + return false; + + int src = 0; + int tgt = 0; + + while (instance[src] != 0 && text[tgt] != 0) + { + bool match = false; + + if (case_insensitive) + { + char srcc = char.ToLower(instance[src]); + char tgtc = char.ToLower(text[tgt]); + match = srcc == tgtc; + } + else + { + match = instance[src] == text[tgt]; + } + if (match) + { + src++; + if (instance[src] == 0) + return true; + } + + tgt++; + } + + return false; + } + + // <summary> + // Check whether this string is a subsequence of the given string, considering case. + // </summary> + public static bool is_subsequence_of(this string instance, string text) + { + return instance.is_subsequence_of(text, false); + } + + // <summary> + // Check whether this string is a subsequence of the given string, without considering case. + // </summary> + public static bool is_subsequence_ofi(this string instance, string text) + { + return instance.is_subsequence_of(text, true); + } + + // <summary> + // Check whether the string contains a valid float. + // </summary> + public static bool is_valid_float(this string instance) + { + float f; + return float.TryParse(instance, out f); + } + + // <summary> + // Check whether the string contains a valid color in HTML notation. + // </summary> + public static bool is_valid_html_color(this string instance) + { + return Color.html_is_valid(instance); + } + + // <summary> + // Check whether the string is a valid identifier. As is common in programming languages, a valid identifier may contain only letters, digits and underscores (_) and the first character may not be a digit. + // </summary> + public static bool is_valid_identifier(this string instance) + { + int len = instance.Length; + + if (len == 0) + return false; + + for (int i = 0; i < len; i++) + { + if (i == 0) + { + if (instance[0] >= '0' && instance[0] <= '9') + return false; // Don't start with number plz + } + + bool valid_char = (instance[i] >= '0' && instance[i] <= '9') || (instance[i] >= 'a' && instance[i] <= 'z') || (instance[i] >= 'A' && instance[i] <= 'Z') || instance[i] == '_'; + + if (!valid_char) + return false; + } + + return true; + } + + // <summary> + // Check whether the string contains a valid integer. + // </summary> + public static bool is_valid_integer(this string instance) + { + int f; + return int.TryParse(instance, out f); + } + + // <summary> + // Check whether the string contains a valid IP address. + // </summary> + public static bool is_valid_ip_address(this string instance) + { + string[] ip = instance.split("."); + + if (ip.Length != 4) + return false; + + for (int i = 0; i < ip.Length; i++) + { + string n = ip[i]; + if (!n.is_valid_integer()) + return false; + + int val = n.to_int(); + if (val < 0 || val > 255) + return false; + } + + return true; + } + + // <summary> + // Return a copy of the string with special characters escaped using the JSON standard. + // </summary> + public static string json_escape(this string instance) + { + StringBuilder sb = new StringBuilder(string.Copy(instance)); + + sb.Replace("\\", "\\\\"); + sb.Replace("\b", "\\b"); + sb.Replace("\f", "\\f"); + sb.Replace("\n", "\\n"); + sb.Replace("\r", "\\r"); + sb.Replace("\t", "\\t"); + sb.Replace("\v", "\\v"); + sb.Replace("\"", "\\\""); + + return sb.ToString(); + } + + // <summary> + // Return an amount of characters from the left of the string. + // </summary> + public static string left(this string instance, int pos) + { + if (pos <= 0) + return string.Empty; + + if (pos >= instance.Length) + return instance; + + return instance.Substring(0, pos); + } + + /// <summary> + /// Return the length of the string in characters. + /// </summary> + public static int length(this string instance) + { + return instance.Length; + } + + // <summary> + // Do a simple expression match, where '*' matches zero or more arbitrary characters and '?' matches any single character except '.'. + // </summary> + public static bool expr_match(this string instance, string expr, bool case_sensitive) + { + if (expr.Length == 0 || instance.Length == 0) + return false; + + switch (expr[0]) + { + case '\0': + return instance[0] == 0; + case '*': + return expr_match(expr + 1, instance, case_sensitive) || (instance[0] != 0 && expr_match(expr, instance + 1, case_sensitive)); + case '?': + return instance[0] != 0 && instance[0] != '.' && expr_match(expr + 1, instance + 1, case_sensitive); + default: + return (case_sensitive ? instance[0] == expr[0] : char.ToUpper(instance[0]) == char.ToUpper(expr[0])) && + expr_match(expr + 1, instance + 1, case_sensitive); + } + } + + // <summary> + // Do a simple case sensitive expression match, using ? and * wildcards (see [method expr_match]). + // </summary> + public static bool match(this string instance, string expr) + { + return instance.expr_match(expr, true); + } + + // <summary> + // Do a simple case insensitive expression match, using ? and * wildcards (see [method expr_match]). + // </summary> + public static bool matchn(this string instance, string expr) + { + return instance.expr_match(expr, false); + } + + // <summary> + // Return the MD5 hash of the string as an array of bytes. + // </summary> + public static byte[] md5_buffer(this string instance) + { + return NativeCalls.godot_icall_String_md5_buffer(instance); + } + + // <summary> + // Return the MD5 hash of the string as a string. + // </summary> + public static string md5_text(this string instance) + { + return NativeCalls.godot_icall_String_md5_text(instance); + } + + // <summary> + // Perform a case-insensitive comparison to another string, return -1 if less, 0 if equal and +1 if greater. + // </summary> + public static int nocasecmp_to(this string instance, string to) + { + if (instance.empty()) + return to.empty() ? 0 : -1; + + if (to.empty()) + return 1; + + int instance_idx = 0; + int to_idx = 0; + + while (true) + { + if (to[to_idx] == 0 && instance[instance_idx] == 0) + return 0; // We're equal + else if (instance[instance_idx] == 0) + return -1; // If this is empty, and the other one is not, then we're less... I think? + else if (to[to_idx] == 0) + return 1; // Otherwise the other one is smaller.. + else if (char.ToUpper(instance[instance_idx]) < char.ToUpper(to[to_idx])) // More than + return -1; + else if (char.ToUpper(instance[instance_idx]) > char.ToUpper(to[to_idx])) // Less than + return 1; + + instance_idx++; + to_idx++; + } + } + + // <summary> + // Return the character code at position [code]at[/code]. + // </summary> + public static int ord_at(this string instance, int at) + { + return instance[at]; + } + + // <summary> + // Format a number to have an exact number of [code]digits[/code] after the decimal point. + // </summary> + public static string pad_decimals(this string instance, int digits) + { + int c = instance.find("."); + + if (c == -1) + { + if (digits <= 0) + return instance; + + instance += "."; + c = instance.Length - 1; + } + else + { + if (digits <= 0) + return instance.Substring(0, c); + } + + if (instance.Length - (c + 1) > digits) + { + instance = instance.Substring(0, c + digits + 1); + } + else + { + while (instance.Length - (c + 1) < digits) + { + instance += "0"; + } + } + + return instance; + } + + // <summary> + // Format a number to have an exact number of [code]digits[/code] before the decimal point. + // </summary> + public static string pad_zeros(this string instance, int digits) + { + string s = instance; + int end = s.find("."); + + if (end == -1) + end = s.Length; + + if (end == 0) + return s; + + int begin = 0; + + while (begin < end && (s[begin] < '0' || s[begin] > '9')) + { + begin++; + } + + if (begin >= end) + return s; + + while (end - begin < digits) + { + s = s.Insert(begin, "0"); + end++; + } + + return s; + } + + // <summary> + // Decode a percent-encoded string. See [method percent_encode]. + // </summary> + public static string percent_decode(this string instance) + { + return Uri.UnescapeDataString(instance); + } + + // <summary> + // Percent-encode a string. This is meant to encode parameters in a URL when sending a HTTP GET request and bodies of form-urlencoded POST request. + // </summary> + public static string percent_encode(this string instance) + { + return Uri.EscapeDataString(instance); + } + + // <summary> + // If the string is a path, this concatenates [code]file[/code] at the end of the string as a subpath. E.g. [code]"this/is".plus_file("path") == "this/is/path"[/code]. + // </summary> + public static string plus_file(this string instance, string file) + { + if (instance.Length > 0 && instance[instance.Length - 1] == '/') + return instance + file; + else + return instance + "/" + file; + } + + // <summary> + // Replace occurrences of a substring for different ones inside the string. + // </summary> + public static string replace(this string instance, string what, string forwhat) + { + return instance.Replace(what, forwhat); + } + + // <summary> + // Replace occurrences of a substring for different ones inside the string, but search case-insensitive. + // </summary> + public static string replacen(this string instance, string what, string forwhat) + { + return Regex.Replace(instance, what, forwhat, RegexOptions.IgnoreCase); + } + + // <summary> + // Perform a search for a substring, but start from the end of the string instead of the beginning. + // </summary> + public static int rfind(this string instance, string what, int from = -1) + { + return NativeCalls.godot_icall_String_rfind(instance, what, from); + } + + // <summary> + // Perform a search for a substring, but start from the end of the string instead of the beginning. Also search case-insensitive. + // </summary> + public static int rfindn(this string instance, string what, int from = -1) + { + return NativeCalls.godot_icall_String_rfindn(instance, what, from); + } + + // <summary> + // Return the right side of the string from a given position. + // </summary> + public static string right(this string instance, int pos) + { + if (pos >= instance.Length) + return instance; + + if (pos < 0) + return string.Empty; + + return instance.Substring(pos, (instance.Length - pos)); + } + + public static byte[] sha256_buffer(this string instance) + { + return NativeCalls.godot_icall_String_sha256_buffer(instance); + } + + // <summary> + // Return the SHA-256 hash of the string as a string. + // </summary> + public static string sha256_text(this string instance) + { + return NativeCalls.godot_icall_String_sha256_text(instance); + } + + // <summary> + // Return the similarity index of the text compared to this string. 1 means totally similar and 0 means totally dissimilar. + // </summary> + public static float similarity(this string instance, string text) + { + if (instance == text) + { + // Equal strings are totally similar + return 1.0f; + } + if (instance.Length < 2 || text.Length < 2) + { + // No way to calculate similarity without a single bigram + return 0.0f; + } + + string[] src_bigrams = instance.bigrams(); + string[] tgt_bigrams = text.bigrams(); + + int src_size = src_bigrams.Length; + int tgt_size = tgt_bigrams.Length; + + float sum = src_size + tgt_size; + float inter = 0; + + for (int i = 0; i < src_size; i++) + { + for (int j = 0; j < tgt_size; j++) + { + if (src_bigrams[i] == tgt_bigrams[j]) + { + inter++; + break; + } + } + } + + return (2.0f * inter) / sum; + } + + // <summary> + // Split the string by a divisor string, return an array of the substrings. Example "One,Two,Three" will return ["One","Two","Three"] if split by ",". + // </summary> + public static string[] split(this string instance, string divisor, bool allow_empty = true) + { + return instance.Split(new string[] { divisor }, StringSplitOptions.RemoveEmptyEntries); + } + + // <summary> + // Split the string in floats by using a divisor string, return an array of the substrings. Example "1,2.5,3" will return [1,2.5,3] if split by ",". + // </summary> + public static float[] split_floats(this string instance, string divisor, bool allow_empty = true) + { + List<float> ret = new List<float>(); + int from = 0; + int len = instance.Length; + + while (true) + { + int end = instance.find(divisor, from); + if (end < 0) + end = len; + if (allow_empty || (end > from)) + ret.Add(float.Parse(instance.Substring(from))); + if (end == len) + break; + + from = end + divisor.Length; + } + + return ret.ToArray(); + } + + private static readonly char[] non_printable = { + (char)00, (char)01, (char)02, (char)03, (char)04, (char)05, + (char)06, (char)07, (char)08, (char)09, (char)10, (char)11, + (char)12, (char)13, (char)14, (char)15, (char)16, (char)17, + (char)18, (char)19, (char)20, (char)21, (char)22, (char)23, + (char)24, (char)25, (char)26, (char)27, (char)28, (char)29, + (char)30, (char)31, (char)32 + }; + + // <summary> + // Return a copy of the string stripped of any non-printable character at the beginning and the end. The optional arguments are used to toggle stripping on the left and right edges respectively. + // </summary> + public static string strip_edges(this string instance, bool left = true, bool right = true) + { + if (left) + { + if (right) + return instance.Trim(non_printable); + else + return instance.TrimStart(non_printable); + } + else + { + return instance.TrimEnd(non_printable); + } + } + + // <summary> + // Return part of the string from the position [code]from[/code], with length [code]len[/code]. + // </summary> + public static string substr(this string instance, int from, int len) + { + return instance.Substring(from, len); + } + + // <summary> + // Convert the String (which is a character array) to PoolByteArray (which is an array of bytes). The conversion is speeded up in comparison to to_utf8() with the assumption that all the characters the String contains are only ASCII characters. + // </summary> + public static byte[] to_ascii(this string instance) + { + return Encoding.ASCII.GetBytes(instance); + } + + // <summary> + // Convert a string, containing a decimal number, into a [code]float[/code]. + // </summary> + public static float to_float(this string instance) + { + return float.Parse(instance); + } + + // <summary> + // Convert a string, containing an integer number, into an [code]int[/code]. + // </summary> + public static int to_int(this string instance) + { + return int.Parse(instance); + } + + // <summary> + // Return the string converted to lowercase. + // </summary> + public static string to_lower(this string instance) + { + return instance.ToLower(); + } + + // <summary> + // Return the string converted to uppercase. + // </summary> + public static string to_upper(this string instance) + { + return instance.ToUpper(); + } + + // <summary> + // Convert the String (which is an array of characters) to PoolByteArray (which is an array of bytes). The conversion is a bit slower than to_ascii(), but supports all UTF-8 characters. Therefore, you should prefer this function over to_ascii(). + // </summary> + public static byte[] to_utf8(this string instance) + { + return Encoding.UTF8.GetBytes(instance); + } + + // <summary> + // Return a copy of the string with special characters escaped using the XML standard. + // </summary> + public static string xml_escape(this string instance) + { + return SecurityElement.Escape(instance); + } + + // <summary> + // Return a copy of the string with escaped characters replaced by their meanings according to the XML standard. + // </summary> + public static string xml_unescape(this string instance) + { + return SecurityElement.FromString(instance).Text; + } + } +} diff --git a/modules/mono/glue/cs_files/ToolAttribute.cs b/modules/mono/glue/cs_files/ToolAttribute.cs new file mode 100644 index 0000000000..0275982c7f --- /dev/null +++ b/modules/mono/glue/cs_files/ToolAttribute.cs @@ -0,0 +1,7 @@ +using System; + +namespace Godot +{ + [AttributeUsage(AttributeTargets.Class)] + public class ToolAttribute : Attribute {} +} diff --git a/modules/mono/glue/cs_files/Transform.cs b/modules/mono/glue/cs_files/Transform.cs new file mode 100644 index 0000000000..74271e758b --- /dev/null +++ b/modules/mono/glue/cs_files/Transform.cs @@ -0,0 +1,174 @@ +using System; +using System.Runtime.InteropServices; + +namespace Godot +{ + [StructLayout(LayoutKind.Sequential)] + public struct Transform : IEquatable<Transform> + { + public Basis basis; + public Vector3 origin; + + public Transform affine_inverse() + { + Basis basisInv = basis.inverse(); + return new Transform(basisInv, basisInv.xform(-origin)); + } + + public Transform inverse() + { + Basis basisTr = basis.transposed(); + return new Transform(basisTr, basisTr.xform(-origin)); + } + + public Transform looking_at(Vector3 target, Vector3 up) + { + Transform t = this; + t.set_look_at(origin, target, up); + return t; + } + + public Transform orthonormalized() + { + return new Transform(basis.orthonormalized(), origin); + } + + public Transform rotated(Vector3 axis, float phi) + { + return new Transform(new Basis(axis, phi), new Vector3()) * this; + } + + public Transform scaled(Vector3 scale) + { + return new Transform(basis.scaled(scale), origin * scale); + } + + public void set_look_at(Vector3 eye, Vector3 target, Vector3 up) + { + // Make rotation matrix + // Z vector + Vector3 zAxis = eye - target; + + zAxis.normalize(); + + Vector3 yAxis = up; + + Vector3 xAxis = yAxis.cross(zAxis); + + // Recompute Y = Z cross X + yAxis = zAxis.cross(xAxis); + + xAxis.normalize(); + yAxis.normalize(); + + basis = Basis.create_from_axes(xAxis, yAxis, zAxis); + + origin = eye; + } + + public Transform translated(Vector3 ofs) + { + return new Transform(basis, new Vector3 + ( + origin[0] += basis[0].dot(ofs), + origin[1] += basis[1].dot(ofs), + origin[2] += basis[2].dot(ofs) + )); + } + + public Vector3 xform(Vector3 v) + { + return new Vector3 + ( + basis[0].dot(v) + origin.x, + basis[1].dot(v) + origin.y, + basis[2].dot(v) + origin.z + ); + } + + public Vector3 xform_inv(Vector3 v) + { + Vector3 vInv = v - origin; + + return new Vector3 + ( + (basis[0, 0] * vInv.x) + (basis[1, 0] * vInv.y) + (basis[2, 0] * vInv.z), + (basis[0, 1] * vInv.x) + (basis[1, 1] * vInv.y) + (basis[2, 1] * vInv.z), + (basis[0, 2] * vInv.x) + (basis[1, 2] * vInv.y) + (basis[2, 2] * vInv.z) + ); + } + + public Transform(Vector3 xAxis, Vector3 yAxis, Vector3 zAxis, Vector3 origin) + { + this.basis = Basis.create_from_axes(xAxis, yAxis, zAxis); + this.origin = origin; + } + + public Transform(Quat quat, Vector3 origin) + { + this.basis = new Basis(quat); + this.origin = origin; + } + + public Transform(Basis basis, Vector3 origin) + { + this.basis = basis; + this.origin = origin; + } + + public static Transform operator *(Transform left, Transform right) + { + left.origin = left.xform(right.origin); + left.basis *= right.basis; + return left; + } + + public static bool operator ==(Transform left, Transform right) + { + return left.Equals(right); + } + + public static bool operator !=(Transform left, Transform right) + { + return !left.Equals(right); + } + + public override bool Equals(object obj) + { + if (obj is Transform) + { + return Equals((Transform)obj); + } + + return false; + } + + public bool Equals(Transform other) + { + return basis.Equals(other.basis) && origin.Equals(other.origin); + } + + public override int GetHashCode() + { + return basis.GetHashCode() ^ origin.GetHashCode(); + } + + public override string ToString() + { + return String.Format("{0} - {1}", new object[] + { + this.basis.ToString(), + this.origin.ToString() + }); + } + + public string ToString(string format) + { + return String.Format("{0} - {1}", new object[] + { + this.basis.ToString(format), + this.origin.ToString(format) + }); + } + } +} diff --git a/modules/mono/glue/cs_files/Transform2D.cs b/modules/mono/glue/cs_files/Transform2D.cs new file mode 100644 index 0000000000..526dc767c6 --- /dev/null +++ b/modules/mono/glue/cs_files/Transform2D.cs @@ -0,0 +1,356 @@ +using System; +using System.Runtime.InteropServices; + +namespace Godot +{ + [StructLayout(LayoutKind.Sequential)] + public struct Transform2D : IEquatable<Transform2D> + { + private static readonly Transform2D identity = new Transform2D + ( + new Vector2(1f, 0f), + new Vector2(0f, 1f), + new Vector2(0f, 0f) + ); + + public Vector2 x; + public Vector2 y; + public Vector2 o; + + public static Transform2D Identity + { + get { return identity; } + } + + public Vector2 Origin + { + get { return o; } + } + + public float Rotation + { + get { return Mathf.atan2(y.x, o.y); } + } + + public Vector2 Scale + { + get { return new Vector2(x.length(), y.length()); } + } + + public Vector2 this[int index] + { + get + { + switch (index) + { + case 0: + return x; + case 1: + return y; + case 2: + return o; + default: + throw new IndexOutOfRangeException(); + } + } + set + { + switch (index) + { + case 0: + x = value; + return; + case 1: + y = value; + return; + case 2: + o = value; + return; + default: + throw new IndexOutOfRangeException(); + } + } + } + + + public float this[int index, int axis] + { + get + { + switch (index) + { + case 0: + return x[axis]; + case 1: + return y[axis]; + default: + throw new IndexOutOfRangeException(); + } + } + set + { + switch (index) + { + case 0: + x[axis] = value; + return; + case 1: + y[axis] = value; + return; + default: + throw new IndexOutOfRangeException(); + } + } + } + + public Transform2D affine_inverse() + { + Transform2D inv = this; + + float det = this[0, 0] * this[1, 1] - this[1, 0] * this[0, 1]; + + if (det == 0) + { + return new Transform2D + ( + float.NaN, float.NaN, + float.NaN, float.NaN, + float.NaN, float.NaN + ); + } + + float idet = 1.0f / det; + + float temp = this[0, 0]; + this[0, 0] = this[1, 1]; + this[1, 1] = temp; + + this[0] *= new Vector2(idet, -idet); + this[1] *= new Vector2(-idet, idet); + + this[2] = basis_xform(-this[2]); + + return inv; + } + + public Vector2 basis_xform(Vector2 v) + { + return new Vector2(tdotx(v), tdoty(v)); + } + + public Vector2 basis_xform_inv(Vector2 v) + { + return new Vector2(x.dot(v), y.dot(v)); + } + + public Transform2D interpolate_with(Transform2D m, float c) + { + float r1 = Rotation; + float r2 = m.Rotation; + + Vector2 s1 = Scale; + Vector2 s2 = m.Scale; + + // Slerp rotation + Vector2 v1 = new Vector2(Mathf.cos(r1), Mathf.sin(r1)); + Vector2 v2 = new Vector2(Mathf.cos(r2), Mathf.sin(r2)); + + float dot = v1.dot(v2); + + // Clamp dot to [-1, 1] + dot = (dot < -1.0f) ? -1.0f : ((dot > 1.0f) ? 1.0f : dot); + + Vector2 v = new Vector2(); + + if (dot > 0.9995f) + { + // Linearly interpolate to avoid numerical precision issues + v = v1.linear_interpolate(v2, c).normalized(); + } + else + { + float angle = c * Mathf.acos(dot); + Vector2 v3 = (v2 - v1 * dot).normalized(); + v = v1 * Mathf.cos(angle) + v3 * Mathf.sin(angle); + } + + // Extract parameters + Vector2 p1 = Origin; + Vector2 p2 = m.Origin; + + // Construct matrix + Transform2D res = new Transform2D(Mathf.atan2(v.y, v.x), p1.linear_interpolate(p2, c)); + Vector2 scale = s1.linear_interpolate(s2, c); + res.x *= scale; + res.y *= scale; + + return res; + } + + public Transform2D inverse() + { + Transform2D inv = this; + + // Swap + float temp = inv.x.y; + inv.x.y = inv.y.x; + inv.y.x = temp; + + inv.o = inv.basis_xform(-inv.o); + + return inv; + } + + public Transform2D orthonormalized() + { + Transform2D on = this; + + Vector2 onX = on.x; + Vector2 onY = on.y; + + onX.normalize(); + onY = onY - onX * (onX.dot(onY)); + onY.normalize(); + + on.x = onX; + on.y = onY; + + return on; + } + + public Transform2D rotated(float phi) + { + return this * new Transform2D(phi, new Vector2()); + } + + public Transform2D scaled(Vector2 scale) + { + Transform2D copy = this; + copy.x *= scale; + copy.y *= scale; + copy.o *= scale; + return copy; + } + + private float tdotx(Vector2 with) + { + return this[0, 0] * with[0] + this[1, 0] * with[1]; + } + + private float tdoty(Vector2 with) + { + return this[0, 1] * with[0] + this[1, 1] * with[1]; + } + + public Transform2D translated(Vector2 offset) + { + Transform2D copy = this; + copy.o += copy.basis_xform(offset); + return copy; + } + + public Vector2 xform(Vector2 v) + { + return new Vector2(tdotx(v), tdoty(v)) + o; + } + + public Vector2 xform_inv(Vector2 v) + { + Vector2 vInv = v - o; + return new Vector2(x.dot(vInv), y.dot(vInv)); + } + + public Transform2D(Vector2 xAxis, Vector2 yAxis, Vector2 origin) + { + this.x = xAxis; + this.y = yAxis; + this.o = origin; + } + public Transform2D(float xx, float xy, float yx, float yy, float ox, float oy) + { + this.x = new Vector2(xx, xy); + this.y = new Vector2(yx, yy); + this.o = new Vector2(ox, oy); + } + + public Transform2D(float rot, Vector2 pos) + { + float cr = Mathf.cos(rot); + float sr = Mathf.sin(rot); + x.x = cr; + y.y = cr; + x.y = -sr; + y.x = sr; + o = pos; + } + + public static Transform2D operator *(Transform2D left, Transform2D right) + { + left.o = left.xform(right.o); + + float x0, x1, y0, y1; + + x0 = left.tdotx(right.x); + x1 = left.tdoty(right.x); + y0 = left.tdotx(right.y); + y1 = left.tdoty(right.y); + + left.x.x = x0; + left.x.y = x1; + left.y.x = y0; + left.y.y = y1; + + return left; + } + + public static bool operator ==(Transform2D left, Transform2D right) + { + return left.Equals(right); + } + + public static bool operator !=(Transform2D left, Transform2D right) + { + return !left.Equals(right); + } + + public override bool Equals(object obj) + { + if (obj is Transform2D) + { + return Equals((Transform2D)obj); + } + + return false; + } + + public bool Equals(Transform2D other) + { + return x.Equals(other.x) && y.Equals(other.y) && o.Equals(other.o); + } + + public override int GetHashCode() + { + return x.GetHashCode() ^ y.GetHashCode() ^ o.GetHashCode(); + } + + public override string ToString() + { + return String.Format("({0}, {1}, {2})", new object[] + { + this.x.ToString(), + this.y.ToString(), + this.o.ToString() + }); + } + + public string ToString(string format) + { + return String.Format("({0}, {1}, {2})", new object[] + { + this.x.ToString(format), + this.y.ToString(format), + this.o.ToString(format) + }); + } + } +} diff --git a/modules/mono/glue/cs_files/Vector2.cs b/modules/mono/glue/cs_files/Vector2.cs new file mode 100644 index 0000000000..28fedc365b --- /dev/null +++ b/modules/mono/glue/cs_files/Vector2.cs @@ -0,0 +1,362 @@ +using System; +using System.Runtime.InteropServices; + +// file: core/math/math_2d.h +// commit: 7ad14e7a3e6f87ddc450f7e34621eb5200808451 +// file: core/math/math_2d.cpp +// commit: 7ad14e7a3e6f87ddc450f7e34621eb5200808451 +// file: core/variant_call.cpp +// commit: 5ad9be4c24e9d7dc5672fdc42cea896622fe5685 + +namespace Godot +{ + [StructLayout(LayoutKind.Sequential)] + public struct Vector2 : IEquatable<Vector2> + { + public float x; + public float y; + + public float this[int index] + { + get + { + switch (index) + { + case 0: + return x; + case 1: + return y; + default: + throw new IndexOutOfRangeException(); + } + } + set + { + switch (index) + { + case 0: + x = value; + return; + case 1: + y = value; + return; + default: + throw new IndexOutOfRangeException(); + } + } + } + + internal void normalize() + { + float length = x * x + y * y; + + if (length != 0f) + { + length = Mathf.sqrt(length); + x /= length; + y /= length; + } + } + + private float cross(Vector2 b) + { + return x * b.y - y * b.x; + } + + public Vector2 abs() + { + return new Vector2(Mathf.abs(x), Mathf.abs(y)); + } + + public float angle() + { + return Mathf.atan2(y, x); + } + + public float angle_to(Vector2 to) + { + return Mathf.atan2(cross(to), dot(to)); + } + + public float angle_to_point(Vector2 to) + { + return Mathf.atan2(x - to.x, y - to.y); + } + + public float aspect() + { + return x / y; + } + + public Vector2 bounce(Vector2 n) + { + return -reflect(n); + } + + public Vector2 clamped(float length) + { + Vector2 v = this; + float l = this.length(); + + if (l > 0 && length < l) + { + v /= l; + v *= length; + } + + return v; + } + + public Vector2 cubic_interpolate(Vector2 b, Vector2 preA, Vector2 postB, float t) + { + Vector2 p0 = preA; + Vector2 p1 = this; + Vector2 p2 = b; + Vector2 p3 = postB; + + float t2 = t * t; + float t3 = t2 * t; + + return 0.5f * ((p1 * 2.0f) + + (-p0 + p2) * t + + (2.0f * p0 - 5.0f * p1 + 4 * p2 - p3) * t2 + + (-p0 + 3.0f * p1 - 3.0f * p2 + p3) * t3); + } + + public float distance_squared_to(Vector2 to) + { + return (x - to.x) * (x - to.x) + (y - to.y) * (y - to.y); + } + + public float distance_to(Vector2 to) + { + return Mathf.sqrt((x - to.x) * (x - to.x) + (y - to.y) * (y - to.y)); + } + + public float dot(Vector2 with) + { + return x * with.x + y * with.y; + } + + public Vector2 floor() + { + return new Vector2(Mathf.floor(x), Mathf.floor(y)); + } + + public bool is_normalized() + { + return Mathf.abs(length_squared() - 1.0f) < Mathf.Epsilon; + } + + public float length() + { + return Mathf.sqrt(x * x + y * y); + } + + public float length_squared() + { + return x * x + y * y; + } + + public Vector2 linear_interpolate(Vector2 b, float t) + { + Vector2 res = this; + + res.x += (t * (b.x - x)); + res.y += (t * (b.y - y)); + + return res; + } + + public Vector2 normalized() + { + Vector2 result = this; + result.normalize(); + return result; + } + + public Vector2 reflect(Vector2 n) + { + return 2.0f * n * dot(n) - this; + } + + public Vector2 rotated(float phi) + { + float rads = angle() + phi; + return new Vector2(Mathf.cos(rads), Mathf.sin(rads)) * length(); + } + + public Vector2 slide(Vector2 n) + { + return this - n * dot(n); + } + + public Vector2 snapped(Vector2 by) + { + return new Vector2(Mathf.stepify(x, by.x), Mathf.stepify(y, by.y)); + } + + public Vector2 tangent() + { + return new Vector2(y, -x); + } + + public Vector2(float x, float y) + { + this.x = x; + this.y = y; + } + + public static Vector2 operator +(Vector2 left, Vector2 right) + { + left.x += right.x; + left.y += right.y; + return left; + } + + public static Vector2 operator -(Vector2 left, Vector2 right) + { + left.x -= right.x; + left.y -= right.y; + return left; + } + + public static Vector2 operator -(Vector2 vec) + { + vec.x = -vec.x; + vec.y = -vec.y; + return vec; + } + + public static Vector2 operator *(Vector2 vec, float scale) + { + vec.x *= scale; + vec.y *= scale; + return vec; + } + + public static Vector2 operator *(float scale, Vector2 vec) + { + vec.x *= scale; + vec.y *= scale; + return vec; + } + + public static Vector2 operator *(Vector2 left, Vector2 right) + { + left.x *= right.x; + left.y *= right.y; + return left; + } + + public static Vector2 operator /(Vector2 vec, float scale) + { + vec.x /= scale; + vec.y /= scale; + return vec; + } + + public static Vector2 operator /(Vector2 left, Vector2 right) + { + left.x /= right.x; + left.y /= right.y; + return left; + } + + public static bool operator ==(Vector2 left, Vector2 right) + { + return left.Equals(right); + } + + public static bool operator !=(Vector2 left, Vector2 right) + { + return !left.Equals(right); + } + + public static bool operator <(Vector2 left, Vector2 right) + { + if (left.x.Equals(right.x)) + { + return left.y < right.y; + } + else + { + return left.x < right.x; + } + } + + public static bool operator >(Vector2 left, Vector2 right) + { + if (left.x.Equals(right.x)) + { + return left.y > right.y; + } + else + { + return left.x > right.x; + } + } + + public static bool operator <=(Vector2 left, Vector2 right) + { + if (left.x.Equals(right.x)) + { + return left.y <= right.y; + } + else + { + return left.x <= right.x; + } + } + + public static bool operator >=(Vector2 left, Vector2 right) + { + if (left.x.Equals(right.x)) + { + return left.y >= right.y; + } + else + { + return left.x >= right.x; + } + } + + public override bool Equals(object obj) + { + if (obj is Vector2) + { + return Equals((Vector2)obj); + } + + return false; + } + + public bool Equals(Vector2 other) + { + return x == other.x && y == other.y; + } + + public override int GetHashCode() + { + return y.GetHashCode() ^ x.GetHashCode(); + } + + public override string ToString() + { + return String.Format("({0}, {1})", new object[] + { + this.x.ToString(), + this.y.ToString() + }); + } + + public string ToString(string format) + { + return String.Format("({0}, {1})", new object[] + { + this.x.ToString(format), + this.y.ToString(format) + }); + } + } +} diff --git a/modules/mono/glue/cs_files/Vector3.cs b/modules/mono/glue/cs_files/Vector3.cs new file mode 100644 index 0000000000..c023cd83cf --- /dev/null +++ b/modules/mono/glue/cs_files/Vector3.cs @@ -0,0 +1,420 @@ +using System; +using System.Runtime.InteropServices; + +// file: core/math/vector3.h +// commit: bd282ff43f23fe845f29a3e25c8efc01bd65ffb0 +// file: core/math/vector3.cpp +// commit: 7ad14e7a3e6f87ddc450f7e34621eb5200808451 +// file: core/variant_call.cpp +// commit: 5ad9be4c24e9d7dc5672fdc42cea896622fe5685 + +namespace Godot +{ + [StructLayout(LayoutKind.Sequential)] + public struct Vector3 : IEquatable<Vector3> + { + public enum Axis + { + X = 0, + Y, + Z + } + + public float x; + public float y; + public float z; + + public float this[int index] + { + get + { + switch (index) + { + case 0: + return x; + case 1: + return y; + case 2: + return z; + default: + throw new IndexOutOfRangeException(); + } + } + set + { + switch (index) + { + case 0: + x = value; + return; + case 1: + y = value; + return; + case 2: + z = value; + return; + default: + throw new IndexOutOfRangeException(); + } + } + } + + internal void normalize() + { + float length = this.length(); + + if (length == 0f) + { + x = y = z = 0f; + } + else + { + x /= length; + y /= length; + z /= length; + } + } + + public Vector3 abs() + { + return new Vector3(Mathf.abs(x), Mathf.abs(y), Mathf.abs(z)); + } + + public float angle_to(Vector3 to) + { + return Mathf.atan2(cross(to).length(), dot(to)); + } + + public Vector3 bounce(Vector3 n) + { + return -reflect(n); + } + + public Vector3 ceil() + { + return new Vector3(Mathf.ceil(x), Mathf.ceil(y), Mathf.ceil(z)); + } + + public Vector3 cross(Vector3 b) + { + return new Vector3 + ( + (y * b.z) - (z * b.y), + (z * b.x) - (x * b.z), + (x * b.y) - (y * b.x) + ); + } + + public Vector3 cubic_interpolate(Vector3 b, Vector3 preA, Vector3 postB, float t) + { + Vector3 p0 = preA; + Vector3 p1 = this; + Vector3 p2 = b; + Vector3 p3 = postB; + + float t2 = t * t; + float t3 = t2 * t; + + return 0.5f * ( + (p1 * 2.0f) + (-p0 + p2) * t + + (2.0f * p0 - 5.0f * p1 + 4f * p2 - p3) * t2 + + (-p0 + 3.0f * p1 - 3.0f * p2 + p3) * t3 + ); + } + + public float distance_squared_to(Vector3 b) + { + return (b - this).length_squared(); + } + + public float distance_to(Vector3 b) + { + return (b - this).length(); + } + + public float dot(Vector3 b) + { + return x * b.x + y * b.y + z * b.z; + } + + public Vector3 floor() + { + return new Vector3(Mathf.floor(x), Mathf.floor(y), Mathf.floor(z)); + } + + public Vector3 inverse() + { + return new Vector3(1.0f / x, 1.0f / y, 1.0f / z); + } + + public bool is_normalized() + { + return Mathf.abs(length_squared() - 1.0f) < Mathf.Epsilon; + } + + public float length() + { + float x2 = x * x; + float y2 = y * y; + float z2 = z * z; + + return Mathf.sqrt(x2 + y2 + z2); + } + + public float length_squared() + { + float x2 = x * x; + float y2 = y * y; + float z2 = z * z; + + return x2 + y2 + z2; + } + + public Vector3 linear_interpolate(Vector3 b, float t) + { + return new Vector3 + ( + x + (t * (b.x - x)), + y + (t * (b.y - y)), + z + (t * (b.z - z)) + ); + } + + public Axis max_axis() + { + return x < y ? (y < z ? Axis.Z : Axis.Y) : (x < z ? Axis.Z : Axis.X); + } + + public Axis min_axis() + { + return x < y ? (x < z ? Axis.X : Axis.Z) : (y < z ? Axis.Y : Axis.Z); + } + + public Vector3 normalized() + { + Vector3 v = this; + v.normalize(); + return v; + } + + public Basis outer(Vector3 b) + { + return new Basis( + new Vector3(x * b.x, x * b.y, x * b.z), + new Vector3(y * b.x, y * b.y, y * b.z), + new Vector3(z * b.x, z * b.y, z * b.z) + ); + } + + public Vector3 reflect(Vector3 n) + { +#if DEBUG + if (!n.is_normalized()) + throw new ArgumentException(String.Format("{0} is not normalized", n), nameof(n)); +#endif + return 2.0f * n * dot(n) - this; + } + + public Vector3 rotated(Vector3 axis, float phi) + { + return new Basis(axis, phi).xform(this); + } + + public Vector3 slide(Vector3 n) + { + return this - n * dot(n); + } + + public Vector3 snapped(Vector3 by) + { + return new Vector3 + ( + Mathf.stepify(x, by.x), + Mathf.stepify(y, by.y), + Mathf.stepify(z, by.z) + ); + } + + public Basis to_diagonal_matrix() + { + return new Basis( + x, 0f, 0f, + 0f, y, 0f, + 0f, 0f, z + ); + } + + public Vector3(float x, float y, float z) + { + this.x = x; + this.y = y; + this.z = z; + } + + public static Vector3 operator +(Vector3 left, Vector3 right) + { + left.x += right.x; + left.y += right.y; + left.z += right.z; + return left; + } + + public static Vector3 operator -(Vector3 left, Vector3 right) + { + left.x -= right.x; + left.y -= right.y; + left.z -= right.z; + return left; + } + + public static Vector3 operator -(Vector3 vec) + { + vec.x = -vec.x; + vec.y = -vec.y; + vec.z = -vec.z; + return vec; + } + + public static Vector3 operator *(Vector3 vec, float scale) + { + vec.x *= scale; + vec.y *= scale; + vec.z *= scale; + return vec; + } + + public static Vector3 operator *(float scale, Vector3 vec) + { + vec.x *= scale; + vec.y *= scale; + vec.z *= scale; + return vec; + } + + public static Vector3 operator *(Vector3 left, Vector3 right) + { + left.x *= right.x; + left.y *= right.y; + left.z *= right.z; + return left; + } + + public static Vector3 operator /(Vector3 vec, float scale) + { + vec.x /= scale; + vec.y /= scale; + vec.z /= scale; + return vec; + } + + public static Vector3 operator /(Vector3 left, Vector3 right) + { + left.x /= right.x; + left.y /= right.y; + left.z /= right.z; + return left; + } + + public static bool operator ==(Vector3 left, Vector3 right) + { + return left.Equals(right); + } + + public static bool operator !=(Vector3 left, Vector3 right) + { + return !left.Equals(right); + } + + public static bool operator <(Vector3 left, Vector3 right) + { + if (left.x == right.x) + { + if (left.y == right.y) + return left.z < right.z; + else + return left.y < right.y; + } + + return left.x < right.x; + } + + public static bool operator >(Vector3 left, Vector3 right) + { + if (left.x == right.x) + { + if (left.y == right.y) + return left.z > right.z; + else + return left.y > right.y; + } + + return left.x > right.x; + } + + public static bool operator <=(Vector3 left, Vector3 right) + { + if (left.x == right.x) + { + if (left.y == right.y) + return left.z <= right.z; + else + return left.y < right.y; + } + + return left.x < right.x; + } + + public static bool operator >=(Vector3 left, Vector3 right) + { + if (left.x == right.x) + { + if (left.y == right.y) + return left.z >= right.z; + else + return left.y > right.y; + } + + return left.x > right.x; + } + + public override bool Equals(object obj) + { + if (obj is Vector3) + { + return Equals((Vector3)obj); + } + + return false; + } + + public bool Equals(Vector3 other) + { + return x == other.x && y == other.y && z == other.z; + } + + public override int GetHashCode() + { + return y.GetHashCode() ^ x.GetHashCode() ^ z.GetHashCode(); + } + + public override string ToString() + { + return String.Format("({0}, {1}, {2})", new object[] + { + this.x.ToString(), + this.y.ToString(), + this.z.ToString() + }); + } + + public string ToString(string format) + { + return String.Format("({0}, {1}, {2})", new object[] + { + this.x.ToString(format), + this.y.ToString(format), + this.z.ToString(format) + }); + } + } +} diff --git a/modules/mono/glue/glue_header.h b/modules/mono/glue/glue_header.h new file mode 100644 index 0000000000..0751a0160f --- /dev/null +++ b/modules/mono/glue/glue_header.h @@ -0,0 +1,302 @@ +/*************************************************************************/ +/* glue_header.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 "../csharp_script.h" +#include "../mono_gd/gd_mono_class.h" +#include "../mono_gd/gd_mono_internals.h" +#include "../mono_gd/gd_mono_marshal.h" +#include "../signal_awaiter_utils.h" + +#include "bind/core_bind.h" +#include "class_db.h" +#include "io/marshalls.h" +#include "object.h" +#include "os/os.h" +#include "project_settings.h" +#include "reference.h" +#include "variant_parser.h" + +#ifdef TOOLS_ENABLED +#include "editor/editor_node.h" +#endif + +#define GODOTSHARP_INSTANCE_OBJECT(m_instance, m_type) \ + static ClassDB::ClassInfo *ci = NULL; \ + if (!ci) { \ + ci = ClassDB::classes.getptr(m_type); \ + } \ + Object *m_instance = ci->creation_func(); + +void godot_icall_Object_Dtor(Object *ptr) { + ERR_FAIL_NULL(ptr); + _GodotSharp::get_singleton()->queue_dispose(ptr); +} + +// -- ClassDB -- + +MethodBind *godot_icall_ClassDB_get_method(MonoString *p_type, MonoString *p_method) { + StringName type(GDMonoMarshal::mono_string_to_godot(p_type)); + StringName method(GDMonoMarshal::mono_string_to_godot(p_method)); + return ClassDB::get_method(type, method); +} + +// -- SignalAwaiter -- + +Error godot_icall_Object_connect_signal_awaiter(Object *p_source, MonoString *p_signal, Object *p_target, MonoObject *p_awaiter) { + String signal = GDMonoMarshal::mono_string_to_godot(p_signal); + return SignalAwaiterUtils::connect_signal_awaiter(p_source, signal, p_target, p_awaiter); +} + +// -- NodePath -- + +NodePath *godot_icall_NodePath_Ctor(MonoString *p_path) { + return memnew(NodePath(GDMonoMarshal::mono_string_to_godot(p_path))); +} + +void godot_icall_NodePath_Dtor(NodePath *p_ptr) { + ERR_FAIL_NULL(p_ptr); + _GodotSharp::get_singleton()->queue_dispose(p_ptr); +} + +MonoString *godot_icall_NodePath_operator_String(NodePath *p_np) { + return GDMonoMarshal::mono_string_from_godot(p_np->operator String()); +} + +MonoArray *godot_icall_String_md5_buffer(MonoString *p_str) { + Vector<uint8_t> ret = GDMonoMarshal::mono_string_to_godot(p_str).md5_buffer(); + // TODO Check possible Array/Vector<uint8_t> problem? + return GDMonoMarshal::Array_to_mono_array(Variant(ret)); +} + +// -- RID -- + +RID *godot_icall_RID_Ctor(Object *p_from) { + Resource *res_from = Object::cast_to<Resource>(p_from); + + if (res_from) + return memnew(RID(res_from->get_rid())); + + return memnew(RID); +} + +void godot_icall_RID_Dtor(RID *p_ptr) { + ERR_FAIL_NULL(p_ptr); + _GodotSharp::get_singleton()->queue_dispose(p_ptr); +} + +// -- String -- + +MonoString *godot_icall_String_md5_text(MonoString *p_str) { + String ret = GDMonoMarshal::mono_string_to_godot(p_str).md5_text(); + return GDMonoMarshal::mono_string_from_godot(ret); +} + +int godot_icall_String_rfind(MonoString *p_str, MonoString *p_what, int p_from) { + String what = GDMonoMarshal::mono_string_to_godot(p_what); + return GDMonoMarshal::mono_string_to_godot(p_str).rfind(what, p_from); +} + +int godot_icall_String_rfindn(MonoString *p_str, MonoString *p_what, int p_from) { + String what = GDMonoMarshal::mono_string_to_godot(p_what); + return GDMonoMarshal::mono_string_to_godot(p_str).rfindn(what, p_from); +} + +MonoArray *godot_icall_String_sha256_buffer(MonoString *p_str) { + Vector<uint8_t> ret = GDMonoMarshal::mono_string_to_godot(p_str).sha256_buffer(); + return GDMonoMarshal::Array_to_mono_array(Variant(ret)); +} + +MonoString *godot_icall_String_sha256_text(MonoString *p_str) { + String ret = GDMonoMarshal::mono_string_to_godot(p_str).sha256_text(); + return GDMonoMarshal::mono_string_from_godot(ret); +} + +// -- Global Scope -- + +MonoObject *godot_icall_Godot_bytes2var(MonoArray *p_bytes) { + Variant ret; + PoolByteArray varr = GDMonoMarshal::mono_array_to_PoolByteArray(p_bytes); + PoolByteArray::Read r = varr.read(); + Error err = decode_variant(ret, r.ptr(), varr.size(), NULL); + if (err != OK) { + ret = RTR("Not enough bytes for decoding bytes, or invalid format."); + } + return GDMonoMarshal::variant_to_mono_object(ret); +} + +MonoObject *godot_icall_Godot_convert(MonoObject *p_what, int p_type) { + Variant what = GDMonoMarshal::mono_object_to_variant(p_what); + const Variant *args[1] = { &what }; + Variant::CallError ce; + Variant ret = Variant::construct(Variant::Type(p_type), args, 1, ce); + ERR_FAIL_COND_V(ce.error != Variant::CallError::CALL_OK, NULL); + return GDMonoMarshal::variant_to_mono_object(ret); +} + +int godot_icall_Godot_hash(MonoObject *p_var) { + return GDMonoMarshal::mono_object_to_variant(p_var).hash(); +} + +MonoObject *godot_icall_Godot_instance_from_id(int p_instance_id) { + return GDMonoUtils::unmanaged_get_managed(ObjectDB::get_instance(p_instance_id)); +} + +void godot_icall_Godot_print(MonoArray *p_what) { + Array what = GDMonoMarshal::mono_array_to_Array(p_what); + String str; + for (int i = 0; i < what.size(); i++) + str += what[i].operator String(); + print_line(str); +} + +void godot_icall_Godot_printerr(MonoArray *p_what) { + Array what = GDMonoMarshal::mono_array_to_Array(p_what); + String str; + for (int i = 0; i < what.size(); i++) + str += what[i].operator String(); + OS::get_singleton()->printerr("%s\n", str.utf8().get_data()); +} + +void godot_icall_Godot_printraw(MonoArray *p_what) { + Array what = GDMonoMarshal::mono_array_to_Array(p_what); + String str; + for (int i = 0; i < what.size(); i++) + str += what[i].operator String(); + OS::get_singleton()->print("%s", str.utf8().get_data()); +} + +void godot_icall_Godot_prints(MonoArray *p_what) { + Array what = GDMonoMarshal::mono_array_to_Array(p_what); + String str; + for (int i = 0; i < what.size(); i++) { + if (i) + str += " "; + str += what[i].operator String(); + } + print_line(str); +} + +void godot_icall_Godot_printt(MonoArray *p_what) { + Array what = GDMonoMarshal::mono_array_to_Array(p_what); + String str; + for (int i = 0; i < what.size(); i++) { + if (i) + str += "\t"; + str += what[i].operator String(); + } + print_line(str); +} + +void godot_icall_Godot_seed(int p_seed) { + Math::seed(p_seed); +} + +MonoString *godot_icall_Godot_str(MonoArray *p_what) { + String str; + Array what = GDMonoMarshal::mono_array_to_Array(p_what); + + for (int i = 0; i < what.size(); i++) { + String os = what[i].operator String(); + + if (i == 0) + str = os; + else + str += os; + } + + return GDMonoMarshal::mono_string_from_godot(str); +} + +MonoObject *godot_icall_Godot_str2var(MonoString *p_str) { + Variant ret; + + VariantParser::StreamString ss; + ss.s = GDMonoMarshal::mono_string_to_godot(p_str); + + String errs; + int line; + Error err = VariantParser::parse(&ss, ret, errs, line); + if (err != OK) { + String err_str = "Parse error at line " + itos(line) + ": " + errs; + ERR_PRINTS(err_str); + ret = err_str; + } + + return GDMonoMarshal::variant_to_mono_object(ret); +} + +bool godot_icall_Godot_type_exists(MonoString *p_type) { + return ClassDB::class_exists(GDMonoMarshal::mono_string_to_godot(p_type)); +} + +MonoArray *godot_icall_Godot_var2bytes(MonoObject *p_var) { + Variant var = GDMonoMarshal::mono_object_to_variant(p_var); + + PoolByteArray barr; + int len; + Error err = encode_variant(var, NULL, len); + ERR_EXPLAIN("Unexpected error encoding variable to bytes, likely unserializable type found (Object or RID)."); + ERR_FAIL_COND_V(err != OK, NULL); + + barr.resize(len); + { + PoolByteArray::Write w = barr.write(); + encode_variant(var, w.ptr(), len); + } + + return GDMonoMarshal::PoolByteArray_to_mono_array(barr); +} + +MonoString *godot_icall_Godot_var2str(MonoObject *p_var) { + String vars; + VariantWriter::write_to_string(GDMonoMarshal::mono_object_to_variant(p_var), vars); + return GDMonoMarshal::mono_string_from_godot(vars); +} + +MonoObject *godot_icall_Godot_weakref(Object *p_obj) { + if (!p_obj) + return NULL; + + Ref<WeakRef> wref; + Reference *ref = Object::cast_to<Reference>(p_obj); + + if (ref) { + REF r = ref; + if (!r.is_valid()) + return NULL; + + wref.instance(); + wref->set_ref(r); + } else { + wref.instance(); + wref->set_obj(p_obj); + } + + return GDMonoUtils::create_managed_for_godot_object(CACHED_CLASS(WeakRef), Reference::get_class_static(), Object::cast_to<Object>(wref.ptr())); +} diff --git a/modules/mono/godotsharp_defs.h b/modules/mono/godotsharp_defs.h new file mode 100644 index 0000000000..f941a4d6c5 --- /dev/null +++ b/modules/mono/godotsharp_defs.h @@ -0,0 +1,41 @@ +/*************************************************************************/ +/* godotsharp_defs.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 GODOTSHARP_DEFS_H +#define GODOTSHARP_DEFS_H + +#define BINDINGS_NAMESPACE "Godot" +#define BINDINGS_GLOBAL_SCOPE_CLASS "GD" +#define BINDINGS_PTR_FIELD "ptr" +#define BINDINGS_NATIVE_NAME_FIELD "nativeName" +#define API_ASSEMBLY_NAME "GodotSharp" +#define EDITOR_API_ASSEMBLY_NAME "GodotSharpEditor" +#define EDITOR_TOOLS_ASSEMBLY_NAME "GodotSharpTools" + +#endif // GODOTSHARP_DEFS_H diff --git a/modules/mono/godotsharp_dirs.cpp b/modules/mono/godotsharp_dirs.cpp new file mode 100644 index 0000000000..6bcf0e2355 --- /dev/null +++ b/modules/mono/godotsharp_dirs.cpp @@ -0,0 +1,194 @@ +/*************************************************************************/ +/* godotsharp_dirs.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 "godotsharp_dirs.h" + +#include "os/os.h" + +#ifdef TOOLS_ENABLED +#include "editor/editor_settings.h" +#include "os/dir_access.h" +#include "project_settings.h" +#include "version.h" +#endif + +namespace GodotSharpDirs { + +String _get_expected_build_config() { +#ifdef TOOLS_ENABLED + return "Tools"; +#else + +#ifdef DEBUG_ENABLED + return "Debug"; +#else + return "Release"; +#endif + +#endif +} + +String _get_mono_user_dir() { +#ifdef TOOLS_ENABLED + if (EditorSettings::get_singleton()) { + return EditorSettings::get_singleton()->get_settings_path().plus_file("mono"); + } else { + String settings_path; + + String exe_dir = OS::get_singleton()->get_executable_path().get_base_dir(); + DirAccessRef d = DirAccess::create_for_path(exe_dir); + + if (d->file_exists("._sc_") || d->file_exists("_sc_")) { + // contain yourself + settings_path = exe_dir.plus_file("editor_data"); + } else { + if (OS::get_singleton()->has_environment("APPDATA")) { + String app_data = OS::get_singleton()->get_environment("APPDATA").replace("\\", "/"); + settings_path = app_data.plus_file(String(_MKSTR(VERSION_SHORT_NAME)).capitalize()); + } else if (OS::get_singleton()->has_environment("HOME")) { + String home = OS::get_singleton()->get_environment("HOME"); + settings_path = home.plus_file("." + String(_MKSTR(VERSION_SHORT_NAME)).to_lower()); + } + } + + return settings_path.plus_file("mono"); + } +#else + return OS::get_singleton()->get_data_dir().plus_file("mono"); +#endif +} + +class _GodotSharpDirs { + +public: + String res_data_dir; + String res_metadata_dir; + String res_assemblies_dir; + String res_config_dir; + String res_temp_dir; + String res_temp_assemblies_base_dir; + String res_temp_assemblies_dir; + String mono_user_dir; + String mono_logs_dir; + +#ifdef TOOLS_ENABLED + String mono_solutions_dir; + String build_logs_dir; + String sln_filepath; + String csproj_filepath; +#endif + +private: + _GodotSharpDirs() { + res_data_dir = "res://.mono"; + res_metadata_dir = res_data_dir.plus_file("metadata"); + res_assemblies_dir = res_data_dir.plus_file("assemblies"); + res_config_dir = res_data_dir.plus_file("etc").plus_file("mono"); + + // TODO use paths from csproj + res_temp_dir = res_data_dir.plus_file("temp"); + res_temp_assemblies_base_dir = res_temp_dir.plus_file("bin"); + res_temp_assemblies_dir = res_temp_assemblies_base_dir.plus_file(_get_expected_build_config()); + + mono_user_dir = _get_mono_user_dir(); + mono_logs_dir = mono_user_dir.plus_file("mono_logs"); + +#ifdef TOOLS_ENABLED + mono_solutions_dir = mono_user_dir.plus_file("solutions"); + build_logs_dir = mono_user_dir.plus_file("build_logs"); + String base_path = String("res://") + ProjectSettings::get_singleton()->get("application/config/name"); + sln_filepath = ProjectSettings::get_singleton()->globalize_path(base_path + ".sln"); + csproj_filepath = ProjectSettings::get_singleton()->globalize_path(base_path + ".csproj"); +#endif + } + + _GodotSharpDirs(const _GodotSharpDirs &); + _GodotSharpDirs &operator=(const _GodotSharpDirs &); + +public: + static _GodotSharpDirs &get_singleton() { + static _GodotSharpDirs singleton; + return singleton; + } +}; + +String get_res_data_dir() { + return _GodotSharpDirs::get_singleton().res_data_dir; +} + +String get_res_metadata_dir() { + return _GodotSharpDirs::get_singleton().res_metadata_dir; +} + +String get_res_assemblies_dir() { + return _GodotSharpDirs::get_singleton().res_assemblies_dir; +} + +String get_res_config_dir() { + return _GodotSharpDirs::get_singleton().res_config_dir; +} + +String get_res_temp_dir() { + return _GodotSharpDirs::get_singleton().res_temp_dir; +} + +String get_res_temp_assemblies_base_dir() { + return _GodotSharpDirs::get_singleton().res_temp_assemblies_base_dir; +} + +String get_res_temp_assemblies_dir() { + return _GodotSharpDirs::get_singleton().res_temp_assemblies_dir; +} + +String get_mono_user_dir() { + return _GodotSharpDirs::get_singleton().mono_user_dir; +} + +String get_mono_logs_dir() { + return _GodotSharpDirs::get_singleton().mono_logs_dir; +} + +#ifdef TOOLS_ENABLED +String get_mono_solutions_dir() { + return _GodotSharpDirs::get_singleton().mono_solutions_dir; +} + +String get_build_logs_dir() { + return _GodotSharpDirs::get_singleton().build_logs_dir; +} + +String get_project_sln_path() { + return _GodotSharpDirs::get_singleton().sln_filepath; +} + +String get_project_csproj_path() { + return _GodotSharpDirs::get_singleton().csproj_filepath; +} +#endif +} diff --git a/modules/mono/godotsharp_dirs.h b/modules/mono/godotsharp_dirs.h new file mode 100644 index 0000000000..ba2c065210 --- /dev/null +++ b/modules/mono/godotsharp_dirs.h @@ -0,0 +1,58 @@ +/*************************************************************************/ +/* godotsharp_dirs.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 GODOTSHARP_DIRS_H +#define GODOTSHARP_DIRS_H + +#include "ustring.h" + +namespace GodotSharpDirs { + +String get_res_data_dir(); +String get_res_metadata_dir(); +String get_res_assemblies_dir(); +String get_res_config_dir(); +String get_res_temp_dir(); +String get_res_temp_assemblies_base_dir(); +String get_res_temp_assemblies_dir(); + +String get_mono_user_dir(); +String get_mono_logs_dir(); + +#ifdef TOOLS_ENABLED +String get_mono_solutions_dir(); +String get_build_logs_dir(); +String get_custom_project_settings_dir(); +#endif + +String get_project_sln_path(); +String get_project_csproj_path(); +} + +#endif // GODOTSHARP_DIRS_H diff --git a/modules/mono/mono_gc_handle.cpp b/modules/mono/mono_gc_handle.cpp new file mode 100644 index 0000000000..d3ad968135 --- /dev/null +++ b/modules/mono/mono_gc_handle.cpp @@ -0,0 +1,77 @@ +/*************************************************************************/ +/* mono_gc_handle.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 "mono_gc_handle.h" + +#include "mono_gd/gd_mono.h" + +uint32_t MonoGCHandle::make_strong_handle(MonoObject *p_object) { + + return mono_gchandle_new( + p_object, + false /* do not pin the object */ + ); +} + +uint32_t MonoGCHandle::make_weak_handle(MonoObject *p_object) { + + return mono_gchandle_new_weakref( + p_object, + true /* track_resurrection: allows us to invoke _notification(NOTIFICATION_PREDELETE) while disposing */ + ); +} + +Ref<MonoGCHandle> MonoGCHandle::create_strong(MonoObject *p_object) { + + return memnew(MonoGCHandle(make_strong_handle(p_object))); +} + +Ref<MonoGCHandle> MonoGCHandle::create_weak(MonoObject *p_object) { + + return memnew(MonoGCHandle(make_weak_handle(p_object))); +} + +void MonoGCHandle::release() { + + if (!released && GDMono::get_singleton()->is_runtime_initialized()) { + mono_gchandle_free(handle); + released = true; + } +} + +MonoGCHandle::MonoGCHandle(uint32_t p_handle) { + + released = false; + handle = p_handle; +} + +MonoGCHandle::~MonoGCHandle() { + + release(); +} diff --git a/modules/mono/mono_gc_handle.h b/modules/mono/mono_gc_handle.h new file mode 100644 index 0000000000..cf5b6cec21 --- /dev/null +++ b/modules/mono/mono_gc_handle.h @@ -0,0 +1,63 @@ +/*************************************************************************/ +/* mono_gc_handle.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 CSHARP_GC_HANDLE_H +#define CSHARP_GC_HANDLE_H + +#include <mono/jit/jit.h> + +#include "reference.h" + +class MonoGCHandle : public Reference { + + GDCLASS(MonoGCHandle, Reference) + + bool released; + uint32_t handle; + +public: + static uint32_t make_strong_handle(MonoObject *p_object); + static uint32_t make_weak_handle(MonoObject *p_object); + + static Ref<MonoGCHandle> create_strong(MonoObject *p_object); + static Ref<MonoGCHandle> create_weak(MonoObject *p_object); + + _FORCE_INLINE_ MonoObject *get_target() const { return released ? NULL : mono_gchandle_get_target(handle); } + + _FORCE_INLINE_ void set_handle(uint32_t p_handle) { + handle = p_handle; + released = false; + } + void release(); + + MonoGCHandle(uint32_t p_handle); + ~MonoGCHandle(); +}; + +#endif // CSHARP_GC_HANDLE_H diff --git a/modules/mono/mono_gd/gd_mono.cpp b/modules/mono/mono_gd/gd_mono.cpp new file mode 100644 index 0000000000..d7aedbbcf0 --- /dev/null +++ b/modules/mono/mono_gd/gd_mono.cpp @@ -0,0 +1,767 @@ +/*************************************************************************/ +/* gd_mono.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 "gd_mono.h" + +#include <mono/metadata/mono-config.h> +#include <mono/metadata/mono-debug.h> +#include <mono/metadata/mono-gc.h> + +#include "os/dir_access.h" +#include "os/file_access.h" +#include "os/os.h" +#include "os/thread.h" +#include "project_settings.h" + +#include "../csharp_script.h" +#include "../utils/path_utils.h" +#include "gd_mono_utils.h" + +#ifdef TOOLS_ENABLED +#include "../editor/godotsharp_editor.h" +#endif + +#ifdef MONO_PRINT_HANDLER_ENABLED +void gdmono_MonoPrintCallback(const char *string, mono_bool is_stdout) { + + if (is_stdout) { + OS::get_singleton()->print(string); + } else { + OS::get_singleton()->printerr(string); + } +} +#endif + +GDMono *GDMono::singleton = NULL; + +#ifdef DEBUG_ENABLED +static bool _wait_for_debugger_msecs(uint32_t p_msecs) { + + do { + if (mono_is_debugger_attached()) + return true; + + int last_tick = OS::get_singleton()->get_ticks_msec(); + + OS::get_singleton()->delay_usec((p_msecs < 25 ? p_msecs : 25) * 1000); + + int tdiff = OS::get_singleton()->get_ticks_msec() - last_tick; + + if (tdiff > p_msecs) { + p_msecs = 0; + } else { + p_msecs -= tdiff; + } + } while (p_msecs > 0); + + return mono_is_debugger_attached(); +} +#endif + +#ifdef TOOLS_ENABLED +// temporary workaround. should be provided from Main::setup/setup2 instead +bool _is_project_manager_requested() { + + List<String> cmdline_args = OS::get_singleton()->get_cmdline_args(); + for (List<String>::Element *E = cmdline_args.front(); E; E = E->next()) { + const String &arg = E->get(); + if (arg == "-p" || arg == "--project-manager") + return true; + } + + return false; +} +#endif + +#ifdef DEBUG_ENABLED +void gdmono_debug_init() { + + mono_debug_init(MONO_DEBUG_FORMAT_MONO); + + int da_port = GLOBAL_DEF("mono/debugger_agent/port", 23685); + bool da_suspend = GLOBAL_DEF("mono/debugger_agent/wait_for_debugger", false); + int da_timeout = GLOBAL_DEF("mono/debugger_agent/wait_timeout", 3000); + +#ifdef TOOLS_ENABLED + if (Engine::get_singleton()->is_editor_hint() || + ProjectSettings::get_singleton()->get_resource_path().empty() || + _is_project_manager_requested()) { + return; + } +#endif + + CharString da_args = String("--debugger-agent=transport=dt_socket,address=127.0.0.1:" + itos(da_port) + + ",embedding=1,server=y,suspend=" + (da_suspend ? "y,timeout=" + itos(da_timeout) : "n")) + .utf8(); + // --debugger-agent=help + const char *options[] = { + "--soft-breakpoints", + da_args.get_data() + }; + mono_jit_parse_options(2, (char **)options); +} +#endif + +void GDMono::initialize() { + + ERR_FAIL_NULL(Engine::get_singleton()); + + OS::get_singleton()->print("Mono: Initializing module...\n"); + +#ifdef DEBUG_METHODS_ENABLED + _initialize_and_check_api_hashes(); +#endif + + GDMonoLog::get_singleton()->initialize(); + +#ifdef MONO_PRINT_HANDLER_ENABLED + mono_trace_set_print_handler(gdmono_MonoPrintCallback); + mono_trace_set_printerr_handler(gdmono_MonoPrintCallback); +#endif + +#ifdef WINDOWS_ENABLED + mono_reg_info = MonoRegUtils::find_mono(); + + CharString assembly_dir; + CharString config_dir; + + if (mono_reg_info.assembly_dir.length() && DirAccess::exists(mono_reg_info.assembly_dir)) { + assembly_dir = mono_reg_info.assembly_dir.utf8(); + } + + if (mono_reg_info.config_dir.length() && DirAccess::exists(mono_reg_info.config_dir)) { + config_dir = mono_reg_info.config_dir.utf8(); + } + + mono_set_dirs(assembly_dir.length() ? assembly_dir.get_data() : NULL, + config_dir.length() ? config_dir.get_data() : NULL); +#else + mono_set_dirs(NULL, NULL); +#endif + + GDMonoAssembly::initialize(); + +#ifdef DEBUG_ENABLED + gdmono_debug_init(); +#endif + + mono_config_parse(NULL); + + root_domain = mono_jit_init_version("GodotEngine.RootDomain", "v4.0.30319"); + + ERR_EXPLAIN("Mono: Failed to initialize runtime"); + ERR_FAIL_NULL(root_domain); + + GDMonoUtils::set_main_thread(GDMonoUtils::get_current_thread()); + + runtime_initialized = true; + + OS::get_singleton()->print("Mono: Runtime initialized\n"); + + // mscorlib assembly MUST be present at initialization + ERR_EXPLAIN("Mono: Failed to load mscorlib assembly"); + ERR_FAIL_COND(!_load_corlib_assembly()); + +#ifdef TOOLS_ENABLED + // The tools domain must be loaded here, before the scripts domain. + // Otherwise domain unload on the scripts domain will hang indefinitely. + + ERR_EXPLAIN("Mono: Failed to load tools domain"); + ERR_FAIL_COND(_load_tools_domain() != OK); + + // TODO move to editor init callback, and do it lazily when required before editor init (e.g.: bindings generation) + ERR_EXPLAIN("Mono: Failed to load Editor Tools assembly"); + ERR_FAIL_COND(!_load_editor_tools_assembly()); +#endif + + ERR_EXPLAIN("Mono: Failed to load scripts domain"); + ERR_FAIL_COND(_load_scripts_domain() != OK); + +#ifdef DEBUG_ENABLED + bool debugger_attached = _wait_for_debugger_msecs(500); + if (!debugger_attached && OS::get_singleton()->is_stdout_verbose()) + OS::get_singleton()->printerr("Mono: Debugger wait timeout\n"); +#endif + + _register_internal_calls(); + + // The following assemblies are not required at initialization + _load_all_script_assemblies(); + + OS::get_singleton()->print("Mono: ALL IS GOOD\n"); +} + +#ifndef MONO_GLUE_DISABLED +namespace GodotSharpBindings { + +uint64_t get_core_api_hash(); +uint64_t get_editor_api_hash(); + +void register_generated_icalls(); +} // namespace GodotSharpBindings +#endif + +void GDMono::_register_internal_calls() { +#ifndef MONO_GLUE_DISABLED + GodotSharpBindings::register_generated_icalls(); +#endif + +#ifdef TOOLS_ENABLED + GodotSharpBuilds::_register_internal_calls(); +#endif +} + +#ifdef DEBUG_METHODS_ENABLED +void GDMono::_initialize_and_check_api_hashes() { + + api_core_hash = ClassDB::get_api_hash(ClassDB::API_CORE); + +#ifndef MONO_GLUE_DISABLED + if (api_core_hash != GodotSharpBindings::get_core_api_hash()) { + ERR_PRINT("Mono: Core API hash mismatch!"); + } +#endif + +#ifdef TOOLS_ENABLED + api_editor_hash = ClassDB::get_api_hash(ClassDB::API_EDITOR); + +#ifndef MONO_GLUE_DISABLED + if (api_editor_hash != GodotSharpBindings::get_editor_api_hash()) { + ERR_PRINT("Mono: Editor API hash mismatch!"); + } +#endif + +#endif // TOOLS_ENABLED +} +#endif // DEBUG_METHODS_ENABLED + +void GDMono::add_assembly(uint32_t p_domain_id, GDMonoAssembly *p_assembly) { + + assemblies[p_domain_id][p_assembly->get_name()] = p_assembly; +} + +GDMonoAssembly **GDMono::get_loaded_assembly(const String &p_name) { + + MonoDomain *domain = mono_domain_get(); + uint32_t domain_id = domain ? mono_domain_get_id(domain) : 0; + return assemblies[domain_id].getptr(p_name); +} + +bool GDMono::_load_assembly(const String &p_name, GDMonoAssembly **r_assembly) { + + CRASH_COND(!r_assembly); + + if (OS::get_singleton()->is_stdout_verbose()) + OS::get_singleton()->print((String() + "Mono: Loading assembly " + p_name + "...\n").utf8()); + + MonoImageOpenStatus status = MONO_IMAGE_OK; + MonoAssemblyName *aname = mono_assembly_name_new(p_name.utf8()); + MonoAssembly *assembly = mono_assembly_load_full(aname, NULL, &status, false); + mono_assembly_name_free(aname); + + if (!assembly) + return false; + + uint32_t domain_id = mono_domain_get_id(mono_domain_get()); + + GDMonoAssembly **stored_assembly = assemblies[domain_id].getptr(p_name); + + ERR_FAIL_COND_V(status != MONO_IMAGE_OK, false); + ERR_FAIL_COND_V(stored_assembly == NULL, false); + + ERR_FAIL_COND_V((*stored_assembly)->get_assembly() != assembly, false); + *r_assembly = *stored_assembly; + + if (OS::get_singleton()->is_stdout_verbose()) + OS::get_singleton()->print(String("Mono: Assembly " + p_name + " loaded from path: " + (*r_assembly)->get_path() + "\n").utf8()); + + return true; +} + +bool GDMono::_load_corlib_assembly() { + + if (corlib_assembly) + return true; + + bool success = _load_assembly("mscorlib", &corlib_assembly); + + if (success) + GDMonoUtils::update_corlib_cache(); + + return success; +} + +bool GDMono::_load_core_api_assembly() { + + if (api_assembly) + return true; + + bool success = _load_assembly(API_ASSEMBLY_NAME, &api_assembly); + + if (success) + GDMonoUtils::update_godot_api_cache(); + + return success; +} + +#ifdef TOOLS_ENABLED +bool GDMono::_load_editor_api_assembly() { + + if (editor_api_assembly) + return true; + + return _load_assembly(EDITOR_API_ASSEMBLY_NAME, &editor_api_assembly); +} +#endif + +#ifdef TOOLS_ENABLED +bool GDMono::_load_editor_tools_assembly() { + + if (editor_tools_assembly) + return true; + + _GDMONO_SCOPE_DOMAIN_(tools_domain) + + return _load_assembly(EDITOR_TOOLS_ASSEMBLY_NAME, &editor_tools_assembly); +} +#endif + +bool GDMono::_load_project_assembly() { + + if (project_assembly) + return true; + + String project_assembly_name = ProjectSettings::get_singleton()->get("application/config/name"); + + bool success = _load_assembly(project_assembly_name, &project_assembly); + + if (success) + mono_assembly_set_main(project_assembly->get_assembly()); + + return success; +} + +bool GDMono::_load_all_script_assemblies() { + +#ifndef MONO_GLUE_DISABLED + if (!_load_core_api_assembly()) { + if (OS::get_singleton()->is_stdout_verbose()) + OS::get_singleton()->printerr("Mono: Failed to load Core API assembly\n"); + return false; + } else { +#ifdef TOOLS_ENABLED + if (!_load_editor_api_assembly()) { + if (OS::get_singleton()->is_stdout_verbose()) + OS::get_singleton()->printerr("Mono: Failed to load Editor API assembly\n"); + return false; + } +#endif + } + + if (!_load_project_assembly()) { + if (OS::get_singleton()->is_stdout_verbose()) + OS::get_singleton()->printerr("Mono: Failed to load project assembly\n"); + return false; + } + + return true; +#else + if (OS::get_singleton()->is_stdout_verbose()) + OS::get_singleton()->print("Mono: Glue disbled, ignoring script assemblies\n"); + + return true; +#endif +} + +Error GDMono::_load_scripts_domain() { + + ERR_FAIL_COND_V(scripts_domain != NULL, ERR_BUG); + + if (OS::get_singleton()->is_stdout_verbose()) { + OS::get_singleton()->print("Mono: Loading scripts domain...\n"); + } + + scripts_domain = GDMonoUtils::create_domain("GodotEngine.ScriptsDomain"); + + ERR_EXPLAIN("Mono: Could not create scripts app domain"); + ERR_FAIL_NULL_V(scripts_domain, ERR_CANT_CREATE); + + mono_domain_set(scripts_domain, true); + + return OK; +} + +Error GDMono::_unload_scripts_domain() { + + ERR_FAIL_NULL_V(scripts_domain, ERR_BUG); + + if (OS::get_singleton()->is_stdout_verbose()) { + OS::get_singleton()->print("Mono: Unloading scripts domain...\n"); + } + + _GodotSharp::get_singleton()->_dispose_callback(); + + if (mono_domain_get() != root_domain) + mono_domain_set(root_domain, true); + + mono_gc_collect(mono_gc_max_generation()); + + finalizing_scripts_domain = true; + mono_domain_finalize(scripts_domain, 2000); + finalizing_scripts_domain = false; + + mono_gc_collect(mono_gc_max_generation()); + + _domain_assemblies_cleanup(mono_domain_get_id(scripts_domain)); + + api_assembly = NULL; + project_assembly = NULL; +#ifdef TOOLS_ENABLED + editor_api_assembly = NULL; +#endif + + MonoDomain *domain = scripts_domain; + scripts_domain = NULL; + + _GodotSharp::get_singleton()->_dispose_callback(); + + MonoObject *ex = NULL; + mono_domain_try_unload(domain, &ex); + + if (ex) { + ERR_PRINT("Exception thrown when unloading scripts domain:"); + mono_print_unhandled_exception(ex); + return FAILED; + } + + return OK; +} + +#ifdef TOOLS_ENABLED +Error GDMono::_load_tools_domain() { + + ERR_FAIL_COND_V(tools_domain != NULL, ERR_BUG); + + if (OS::get_singleton()->is_stdout_verbose()) { + OS::get_singleton()->print("Mono: Loading tools domain...\n"); + } + + tools_domain = GDMonoUtils::create_domain("GodotEngine.ToolsDomain"); + + ERR_EXPLAIN("Mono: Could not create tools app domain"); + ERR_FAIL_NULL_V(tools_domain, ERR_CANT_CREATE); + + return OK; +} +#endif + +#ifdef TOOLS_ENABLED +Error GDMono::reload_scripts_domain() { + + ERR_FAIL_COND_V(!runtime_initialized, ERR_BUG); + + if (scripts_domain) { + Error err = _unload_scripts_domain(); + if (err != OK) { + ERR_PRINT("Mono: Failed to unload scripts domain"); + return err; + } + } + + Error err = _load_scripts_domain(); + if (err != OK) { + ERR_PRINT("Mono: Failed to load scripts domain"); + return err; + } + + if (!_load_all_script_assemblies()) { + if (OS::get_singleton()->is_stdout_verbose()) + OS::get_singleton()->printerr("Mono: Failed to load script assemblies\n"); + return ERR_CANT_OPEN; + } + + return OK; +} +#endif + +GDMonoClass *GDMono::get_class(MonoClass *p_raw_class) { + + MonoImage *image = mono_class_get_image(p_raw_class); + + if (image == corlib_assembly->get_image()) + return corlib_assembly->get_class(p_raw_class); + + uint32_t domain_id = mono_domain_get_id(mono_domain_get()); + HashMap<String, GDMonoAssembly *> &domain_assemblies = assemblies[domain_id]; + + const String *k = NULL; + while ((k = domain_assemblies.next(k))) { + GDMonoAssembly *assembly = domain_assemblies.get(*k); + if (assembly->get_image() == image) { + GDMonoClass *klass = assembly->get_class(p_raw_class); + + if (klass) + return klass; + } + } + + return NULL; +} + +void GDMono::_domain_assemblies_cleanup(uint32_t p_domain_id) { + + HashMap<String, GDMonoAssembly *> &domain_assemblies = assemblies[p_domain_id]; + + const String *k = NULL; + while ((k = domain_assemblies.next(k))) { + memdelete(domain_assemblies.get(*k)); + } + + assemblies.erase(p_domain_id); +} + +GDMono::GDMono() { + + singleton = this; + + gdmono_log = memnew(GDMonoLog); + + runtime_initialized = false; + finalizing_scripts_domain = false; + + root_domain = NULL; + scripts_domain = NULL; +#ifdef TOOLS_ENABLED + tools_domain = NULL; +#endif + + corlib_assembly = NULL; + api_assembly = NULL; + project_assembly = NULL; +#ifdef TOOLS_ENABLED + editor_api_assembly = NULL; + editor_tools_assembly = NULL; +#endif + +#ifdef DEBUG_METHODS_ENABLED + api_core_hash = 0; +#ifdef TOOLS_ENABLED + api_editor_hash = 0; +#endif +#endif +} + +GDMono::~GDMono() { + + if (runtime_initialized) { + + if (scripts_domain) { + + Error err = _unload_scripts_domain(); + if (err != OK) { + WARN_PRINT("Mono: Failed to unload scripts domain"); + } + } + + const uint32_t *k = NULL; + while ((k = assemblies.next(k))) { + HashMap<String, GDMonoAssembly *> &domain_assemblies = assemblies.get(*k); + + const String *kk = NULL; + while ((kk = domain_assemblies.next(kk))) { + memdelete(domain_assemblies.get(*kk)); + } + } + assemblies.clear(); + + GDMonoUtils::clear_cache(); + + OS::get_singleton()->print("Mono: Runtime cleanup...\n"); + + runtime_initialized = false; + mono_jit_cleanup(root_domain); + } + + if (gdmono_log) + memdelete(gdmono_log); +} + +_GodotSharp *_GodotSharp::singleton = NULL; + +void _GodotSharp::_dispose_object(Object *p_object) { + + if (p_object->get_script_instance()) { + CSharpInstance *cs_instance = CAST_CSHARP_INSTANCE(p_object->get_script_instance()); + if (cs_instance) { + cs_instance->mono_object_disposed(); + return; + } + } + + // Unsafe refcount decrement. The managed instance also counts as a reference. + // See: CSharpLanguage::alloc_instance_binding_data(Object *p_object) + if (Object::cast_to<Reference>(p_object)->unreference()) { + memdelete(p_object); + } +} + +void _GodotSharp::_dispose_callback() { + +#ifndef NO_THREADS + queue_mutex->lock(); +#endif + + for (List<Object *>::Element *E = obj_delete_queue.front(); E; E = E->next()) { + _dispose_object(E->get()); + } + + for (List<NodePath *>::Element *E = np_delete_queue.front(); E; E = E->next()) { + memdelete(E->get()); + } + + for (List<RID *>::Element *E = rid_delete_queue.front(); E; E = E->next()) { + memdelete(E->get()); + } + + obj_delete_queue.clear(); + np_delete_queue.clear(); + rid_delete_queue.clear(); + queue_empty = true; + +#ifndef NO_THREADS + queue_mutex->unlock(); +#endif +} + +void _GodotSharp::attach_thread() { + + GDMonoUtils::attach_current_thread(); +} + +void _GodotSharp::detach_thread() { + + GDMonoUtils::detach_current_thread(); +} + +bool _GodotSharp::is_finalizing_domain() { + + return GDMono::get_singleton()->is_finalizing_scripts_domain(); +} + +bool _GodotSharp::is_domain_loaded() { + + return GDMono::get_singleton()->get_scripts_domain() != NULL; +} + +#define ENQUEUE_FOR_DISPOSAL(m_queue, m_inst) \ + m_queue.push_back(m_inst); \ + if (queue_empty) { \ + queue_empty = false; \ + call_deferred("_dispose_callback"); \ + } + +void _GodotSharp::queue_dispose(Object *p_object) { + + if (Thread::get_main_id() == Thread::get_caller_id() && !GDMono::get_singleton()->is_finalizing_scripts_domain()) { + _dispose_object(p_object); + } else { +#ifndef NO_THREADS + queue_mutex->lock(); +#endif + + ENQUEUE_FOR_DISPOSAL(obj_delete_queue, p_object); + +#ifndef NO_THREADS + queue_mutex->unlock(); +#endif + } +} + +void _GodotSharp::queue_dispose(NodePath *p_node_path) { + + if (Thread::get_main_id() == Thread::get_caller_id() && !GDMono::get_singleton()->is_finalizing_scripts_domain()) { + memdelete(p_node_path); + } else { +#ifndef NO_THREADS + queue_mutex->lock(); +#endif + + ENQUEUE_FOR_DISPOSAL(np_delete_queue, p_node_path); + +#ifndef NO_THREADS + queue_mutex->unlock(); +#endif + } +} + +void _GodotSharp::queue_dispose(RID *p_rid) { + + if (Thread::get_main_id() == Thread::get_caller_id() && !GDMono::get_singleton()->is_finalizing_scripts_domain()) { + memdelete(p_rid); + } else { +#ifndef NO_THREADS + queue_mutex->lock(); +#endif + + ENQUEUE_FOR_DISPOSAL(rid_delete_queue, p_rid); + +#ifndef NO_THREADS + queue_mutex->unlock(); +#endif + } +} + +void _GodotSharp::_bind_methods() { + + ClassDB::bind_method(D_METHOD("attach_thread"), &_GodotSharp::attach_thread); + ClassDB::bind_method(D_METHOD("detach_thread"), &_GodotSharp::detach_thread); + + ClassDB::bind_method(D_METHOD("is_finalizing_domain"), &_GodotSharp::is_finalizing_domain); + ClassDB::bind_method(D_METHOD("is_domain_loaded"), &_GodotSharp::is_domain_loaded); + + ClassDB::bind_method(D_METHOD("_dispose_callback"), &_GodotSharp::_dispose_callback); +} + +_GodotSharp::_GodotSharp() { + + singleton = this; + queue_empty = true; +#ifndef NO_THREADS + queue_mutex = Mutex::create(); +#endif +} + +_GodotSharp::~_GodotSharp() { + + singleton = NULL; + + if (queue_mutex) { + memdelete(queue_mutex); + } +} diff --git a/modules/mono/mono_gd/gd_mono.h b/modules/mono/mono_gd/gd_mono.h new file mode 100644 index 0000000000..b188c0730a --- /dev/null +++ b/modules/mono/mono_gd/gd_mono.h @@ -0,0 +1,226 @@ +/*************************************************************************/ +/* gd_mono.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 GD_MONO_H +#define GD_MONO_H + +#include "../godotsharp_defs.h" +#include "gd_mono_assembly.h" +#include "gd_mono_log.h" + +#ifdef WINDOWS_ENABLED +#include "../utils/mono_reg_utils.h" +#endif + +#define SCRIPTS_DOMAIN GDMono::get_singleton()->get_scripts_domain() +#ifdef TOOLS_ENABLED +#define TOOLS_DOMAIN GDMono::get_singleton()->get_tools_domain() +#endif + +class GDMono { + + bool runtime_initialized; + bool finalizing_scripts_domain; + + MonoDomain *root_domain; + MonoDomain *scripts_domain; +#ifdef TOOLS_ENABLED + MonoDomain *tools_domain; +#endif + + GDMonoAssembly *corlib_assembly; + GDMonoAssembly *api_assembly; + GDMonoAssembly *project_assembly; +#ifdef TOOLS_ENABLED + GDMonoAssembly *editor_api_assembly; + GDMonoAssembly *editor_tools_assembly; +#endif + + HashMap<uint32_t, HashMap<String, GDMonoAssembly *> > assemblies; + + void _domain_assemblies_cleanup(uint32_t p_domain_id); + + bool _load_corlib_assembly(); + bool _load_core_api_assembly(); +#ifdef TOOLS_ENABLED + bool _load_editor_api_assembly(); + bool _load_editor_tools_assembly(); +#endif + bool _load_project_assembly(); + + bool _load_all_script_assemblies(); + + void _register_internal_calls(); + + Error _load_scripts_domain(); + Error _unload_scripts_domain(); + +#ifdef TOOLS_ENABLED + Error _load_tools_domain(); +#endif + +#ifdef DEBUG_METHODS_ENABLED + uint64_t api_core_hash; +#ifdef TOOLS_ENABLED + uint64_t api_editor_hash; +#endif + void _initialize_and_check_api_hashes(); +#endif + + bool _load_assembly(const String &p_name, GDMonoAssembly **r_assembly); + + GDMonoLog *gdmono_log; + +#ifdef WINDOWS_ENABLED + MonoRegInfo mono_reg_info; +#endif + +protected: + static GDMono *singleton; + +public: +#ifdef DEBUG_METHODS_ENABLED + uint64_t get_api_core_hash() { return api_core_hash; } +#ifdef TOOLS_ENABLED + uint64_t get_api_editor_hash() { return api_editor_hash; } +#endif +#endif + + enum MemberVisibility { + PRIVATE, + PROTECTED_AND_INTERNAL, // FAM_AND_ASSEM + INTERNAL, // ASSEMBLY + PROTECTED, // FAMILY + PUBLIC + }; + + static GDMono *get_singleton() { return singleton; } + + // Do not use these, unless you know what you're doing + void add_assembly(uint32_t p_domain_id, GDMonoAssembly *p_assembly); + GDMonoAssembly **get_loaded_assembly(const String &p_name); + + _FORCE_INLINE_ bool is_runtime_initialized() const { return runtime_initialized; } + _FORCE_INLINE_ bool is_finalizing_scripts_domain() const { return finalizing_scripts_domain; } + + _FORCE_INLINE_ MonoDomain *get_scripts_domain() { return scripts_domain; } +#ifdef TOOLS_ENABLED + _FORCE_INLINE_ MonoDomain *get_tools_domain() { return tools_domain; } +#endif + + _FORCE_INLINE_ GDMonoAssembly *get_corlib_assembly() const { return corlib_assembly; } + _FORCE_INLINE_ GDMonoAssembly *get_api_assembly() const { return api_assembly; } + _FORCE_INLINE_ GDMonoAssembly *get_project_assembly() const { return project_assembly; } +#ifdef TOOLS_ENABLED + _FORCE_INLINE_ GDMonoAssembly *get_editor_api_assembly() const { return editor_api_assembly; } + _FORCE_INLINE_ GDMonoAssembly *get_editor_tools_assembly() const { return editor_tools_assembly; } +#endif + +#ifdef WINDOWS_ENABLED + const MonoRegInfo &get_mono_reg_info() { return mono_reg_info; } +#endif + + GDMonoClass *get_class(MonoClass *p_raw_class); + +#ifdef TOOLS_ENABLED + Error reload_scripts_domain(); +#endif + + void initialize(); + + GDMono(); + ~GDMono(); +}; + +class GDMonoScopeDomain { + + MonoDomain *prev_domain; + +public: + GDMonoScopeDomain(MonoDomain *p_domain) { + MonoDomain *prev_domain = mono_domain_get(); + if (prev_domain != p_domain) { + this->prev_domain = prev_domain; + mono_domain_set(p_domain, false); + } else { + this->prev_domain = NULL; + } + } + + ~GDMonoScopeDomain() { + if (prev_domain) + mono_domain_set(prev_domain, false); + } +}; + +#define _GDMONO_SCOPE_DOMAIN_(m_mono_domain) \ + GDMonoScopeDomain __gdmono__scope__domain__(m_mono_domain); \ + (void)__gdmono__scope__domain__; + +class _GodotSharp : public Object { + GDCLASS(_GodotSharp, Object) + + friend class GDMono; + + void _dispose_object(Object *p_object); + + void _dispose_callback(); + + List<Object *> obj_delete_queue; + List<NodePath *> np_delete_queue; + List<RID *> rid_delete_queue; + + bool queue_empty; + +#ifndef NO_THREADS + Mutex *queue_mutex; +#endif + +protected: + static _GodotSharp *singleton; + static void _bind_methods(); + +public: + static _GodotSharp *get_singleton() { return singleton; } + + void attach_thread(); + void detach_thread(); + + bool is_finalizing_domain(); + bool is_domain_loaded(); + + void queue_dispose(Object *p_object); + void queue_dispose(NodePath *p_node_path); + void queue_dispose(RID *p_rid); + + _GodotSharp(); + ~_GodotSharp(); +}; + +#endif // GD_MONO_H diff --git a/modules/mono/mono_gd/gd_mono_assembly.cpp b/modules/mono/mono_gd/gd_mono_assembly.cpp new file mode 100644 index 0000000000..4b370295f3 --- /dev/null +++ b/modules/mono/mono_gd/gd_mono_assembly.cpp @@ -0,0 +1,356 @@ +/*************************************************************************/ +/* gd_mono_assembly.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 "gd_mono_assembly.h" + +#include <mono/metadata/mono-debug.h> +#include <mono/metadata/tokentype.h> + +#include "list.h" +#include "os/file_access.h" +#include "os/os.h" + +#include "../godotsharp_dirs.h" +#include "gd_mono_class.h" + +bool GDMonoAssembly::no_search = false; +Vector<String> GDMonoAssembly::search_dirs; + +MonoAssembly *GDMonoAssembly::_search_hook(MonoAssemblyName *aname, void *user_data) { + + (void)user_data; // UNUSED + + String name = mono_assembly_name_get_name(aname); + bool has_extension = name.ends_with(".dll") || name.ends_with(".exe"); + + if (no_search) + return NULL; + + GDMonoAssembly **loaded_asm = GDMono::get_singleton()->get_loaded_assembly(has_extension ? name.get_basename() : name); + if (loaded_asm) + return (*loaded_asm)->get_assembly(); + + no_search = true; // Avoid the recursion madness + + String path; + MonoAssembly *res = NULL; + + for (int i = 0; i < search_dirs.size(); i++) { + const String &search_dir = search_dirs[i]; + + if (has_extension) { + path = search_dir.plus_file(name); + if (FileAccess::exists(path)) { + res = _load_assembly_from(name.get_basename(), path); + break; + } + } else { + path = search_dir.plus_file(name + ".dll"); + if (FileAccess::exists(path)) { + res = _load_assembly_from(name, path); + break; + } + + path = search_dir.plus_file(name + ".exe"); + if (FileAccess::exists(path)) { + res = _load_assembly_from(name, path); + break; + } + } + } + + no_search = false; + + return res; +} + +MonoAssembly *GDMonoAssembly::_preload_hook(MonoAssemblyName *aname, char **assemblies_path, void *user_data) { + + (void)user_data; // UNUSED + + if (search_dirs.empty()) { + search_dirs.push_back(GodotSharpDirs::get_res_temp_assemblies_dir()); + search_dirs.push_back(GodotSharpDirs::get_res_assemblies_dir()); + search_dirs.push_back(OS::get_singleton()->get_resource_dir()); + search_dirs.push_back(OS::get_singleton()->get_executable_path().get_base_dir()); + + const char *rootdir = mono_assembly_getrootdir(); + if (rootdir) { + search_dirs.push_back(String(rootdir).plus_file("mono").plus_file("4.5")); + } + + while (assemblies_path) { + if (*assemblies_path) + search_dirs.push_back(*assemblies_path); + ++assemblies_path; + } + } + + return NULL; +} + +MonoAssembly *GDMonoAssembly::_load_assembly_from(const String &p_name, const String &p_path) { + + GDMonoAssembly *assembly = memnew(GDMonoAssembly(p_name, p_path)); + + MonoDomain *domain = mono_domain_get(); + + Error err = assembly->load(domain); + + if (err != OK) { + memdelete(assembly); + ERR_FAIL_V(NULL); + } + + GDMono::get_singleton()->add_assembly(domain ? mono_domain_get_id(domain) : 0, assembly); + + return assembly->get_assembly(); +} + +void GDMonoAssembly::initialize() { + + // TODO refonly as well? + mono_install_assembly_preload_hook(&GDMonoAssembly::_preload_hook, NULL); + mono_install_assembly_search_hook(&GDMonoAssembly::_search_hook, NULL); +} + +Error GDMonoAssembly::load(MonoDomain *p_domain) { + + ERR_FAIL_COND_V(loaded, ERR_FILE_ALREADY_IN_USE); + + uint64_t last_modified_time = FileAccess::get_modified_time(path); + + Vector<uint8_t> data = FileAccess::get_file_as_array(path); + ERR_FAIL_COND_V(data.empty(), ERR_FILE_CANT_READ); + + String image_filename(path); + + MonoImageOpenStatus status; + + image = mono_image_open_from_data_with_name( + (char *)&data[0], data.size(), + true, &status, false, + image_filename.utf8().get_data()); + + ERR_FAIL_COND_V(status != MONO_IMAGE_OK || image == NULL, ERR_FILE_CANT_OPEN); + +#ifdef DEBUG_ENABLED + String pdb_path(path + ".pdb"); + + if (!FileAccess::exists(pdb_path)) { + pdb_path = path.get_basename() + ".pdb"; // without .dll + + if (!FileAccess::exists(pdb_path)) + goto no_pdb; + } + + pdb_data.clear(); + pdb_data = FileAccess::get_file_as_array(pdb_path); + mono_debug_open_image_from_memory(image, &pdb_data[0], pdb_data.size()); + +no_pdb: + +#endif + + assembly = mono_assembly_load_from_full(image, image_filename.utf8().get_data(), &status, false); + + ERR_FAIL_COND_V(status != MONO_IMAGE_OK || assembly == NULL, ERR_FILE_CANT_OPEN); + + if (p_domain && mono_image_get_entry_point(image)) { + // TODO should this be removed? do we want to call main? what other effects does this have? + mono_jit_exec(p_domain, assembly, 0, NULL); + } + + loaded = true; + modified_time = last_modified_time; + + return OK; +} + +Error GDMonoAssembly::wrapper_for_image(MonoImage *p_image) { + + ERR_FAIL_COND_V(loaded, ERR_FILE_ALREADY_IN_USE); + + assembly = mono_image_get_assembly(p_image); + ERR_FAIL_NULL_V(assembly, FAILED); + + image = p_image; + + mono_image_addref(image); + + loaded = true; + + return OK; +} + +void GDMonoAssembly::unload() { + + ERR_FAIL_COND(!loaded); + +#ifdef DEBUG_ENABLED + if (pdb_data.size()) { + mono_debug_close_image(image); + pdb_data.clear(); + } +#endif + + for (Map<MonoClass *, GDMonoClass *>::Element *E = cached_raw.front(); E; E = E->next()) { + memdelete(E->value()); + } + + cached_classes.clear(); + cached_raw.clear(); + + mono_image_close(image); + + assembly = NULL; + image = NULL; + loaded = false; +} + +GDMonoClass *GDMonoAssembly::get_class(const StringName &p_namespace, const StringName &p_name) { + + ERR_FAIL_COND_V(!loaded, NULL); + + ClassKey key(p_namespace, p_name); + + GDMonoClass **match = cached_classes.getptr(key); + + if (match) + return *match; + + MonoClass *mono_class = mono_class_from_name(image, String(p_namespace).utf8(), String(p_name).utf8()); + + if (!mono_class) + return NULL; + + GDMonoClass *wrapped_class = memnew(GDMonoClass(p_namespace, p_name, mono_class, this)); + + cached_classes[key] = wrapped_class; + cached_raw[mono_class] = wrapped_class; + + return wrapped_class; +} + +GDMonoClass *GDMonoAssembly::get_class(MonoClass *p_mono_class) { + + ERR_FAIL_COND_V(!loaded, NULL); + + Map<MonoClass *, GDMonoClass *>::Element *match = cached_raw.find(p_mono_class); + + if (match) + return match->value(); + + StringName namespace_name = mono_class_get_namespace(p_mono_class); + StringName class_name = mono_class_get_name(p_mono_class); + + GDMonoClass *wrapped_class = memnew(GDMonoClass(namespace_name, class_name, p_mono_class, this)); + + cached_classes[ClassKey(namespace_name, class_name)] = wrapped_class; + cached_raw[p_mono_class] = wrapped_class; + + return wrapped_class; +} + +GDMonoClass *GDMonoAssembly::get_object_derived_class(const StringName &p_class) { + + GDMonoClass *match = NULL; + + if (gdobject_class_cache_updated) { + Map<StringName, GDMonoClass *>::Element *result = gdobject_class_cache.find(p_class); + + if (result) + match = result->get(); + } else { + List<GDMonoClass *> nested_classes; + + int rows = mono_image_get_table_rows(image, MONO_TABLE_TYPEDEF); + + for (int i = 1; i < rows; i++) { + MonoClass *mono_class = mono_class_get(image, (i + 1) | MONO_TOKEN_TYPE_DEF); + + if (!mono_class_is_assignable_from(CACHED_CLASS_RAW(GodotObject), mono_class)) + continue; + + GDMonoClass *current = get_class(mono_class); + + if (!current) + continue; + + nested_classes.push_back(current); + + if (!match && current->get_name() == p_class) + match = current; + + while (!nested_classes.empty()) { + GDMonoClass *current_nested = nested_classes.front()->get(); + nested_classes.pop_back(); + + void *iter = NULL; + + while (true) { + MonoClass *raw_nested = mono_class_get_nested_types(current_nested->get_raw(), &iter); + + if (!raw_nested) + break; + + GDMonoClass *nested_class = get_class(raw_nested); + + if (nested_class) { + gdobject_class_cache.insert(nested_class->get_name(), nested_class); + nested_classes.push_back(nested_class); + } + } + } + + gdobject_class_cache.insert(current->get_name(), current); + } + + gdobject_class_cache_updated = true; + } + + return match; +} + +GDMonoAssembly::GDMonoAssembly(const String &p_name, const String &p_path) { + + loaded = false; + gdobject_class_cache_updated = false; + name = p_name; + path = p_path; + modified_time = 0; + assembly = NULL; + image = NULL; +} + +GDMonoAssembly::~GDMonoAssembly() { + + if (loaded) + unload(); +} diff --git a/modules/mono/mono_gd/gd_mono_assembly.h b/modules/mono/mono_gd/gd_mono_assembly.h new file mode 100644 index 0000000000..710b674622 --- /dev/null +++ b/modules/mono/mono_gd/gd_mono_assembly.h @@ -0,0 +1,121 @@ +/*************************************************************************/ +/* gd_mono_assembly.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 GD_MONO_ASSEMBLY_H +#define GD_MONO_ASSEMBLY_H + +#include <mono/jit/jit.h> +#include <mono/metadata/assembly.h> + +#include "gd_mono_utils.h" +#include "hash_map.h" +#include "map.h" +#include "ustring.h" + +class GDMonoAssembly { + + struct ClassKey { + struct Hasher { + static _FORCE_INLINE_ uint32_t hash(const ClassKey &p_key) { + uint32_t hash = 0; + + GDMonoUtils::hash_combine(hash, p_key.namespace_name.hash()); + GDMonoUtils::hash_combine(hash, p_key.class_name.hash()); + + return hash; + } + }; + + _FORCE_INLINE_ bool operator==(const ClassKey &p_a) const { + return p_a.class_name == class_name && p_a.namespace_name == namespace_name; + } + + ClassKey() {} + + ClassKey(const StringName &p_namespace_name, const StringName &p_class_name) { + namespace_name = p_namespace_name; + class_name = p_class_name; + } + + StringName namespace_name; + StringName class_name; + }; + + MonoAssembly *assembly; + MonoImage *image; + + bool loaded; + + String name; + String path; + uint64_t modified_time; + + HashMap<ClassKey, GDMonoClass *, ClassKey::Hasher> cached_classes; + Map<MonoClass *, GDMonoClass *> cached_raw; + + bool gdobject_class_cache_updated; + Map<StringName, GDMonoClass *> gdobject_class_cache; + +#ifdef DEBUG_ENABLED + Vector<uint8_t> pdb_data; +#endif + + static bool no_search; + static Vector<String> search_dirs; + + static MonoAssembly *_search_hook(MonoAssemblyName *aname, void *user_data); + static MonoAssembly *_preload_hook(MonoAssemblyName *aname, char **assemblies_path, void *user_data); + + static MonoAssembly *_load_assembly_from(const String &p_name, const String &p_path); + + friend class GDMono; + static void initialize(); + +public: + Error load(MonoDomain *p_domain); + Error wrapper_for_image(MonoImage *p_image); + void unload(); + + _FORCE_INLINE_ bool is_loaded() const { return loaded; } + _FORCE_INLINE_ MonoImage *get_image() const { return image; } + _FORCE_INLINE_ MonoAssembly *get_assembly() const { return assembly; } + _FORCE_INLINE_ String get_name() const { return name; } + _FORCE_INLINE_ String get_path() const { return path; } + _FORCE_INLINE_ uint64_t get_modified_time() const { return modified_time; } + + GDMonoClass *get_class(const StringName &p_namespace, const StringName &p_class); + GDMonoClass *get_class(MonoClass *p_mono_class); + + GDMonoClass *get_object_derived_class(const StringName &p_class); + + GDMonoAssembly(const String &p_name, const String &p_path = String()); + ~GDMonoAssembly(); +}; + +#endif // GD_MONO_ASSEMBLY_H diff --git a/modules/mono/mono_gd/gd_mono_class.cpp b/modules/mono/mono_gd/gd_mono_class.cpp new file mode 100644 index 0000000000..77ba0ee90e --- /dev/null +++ b/modules/mono/mono_gd/gd_mono_class.cpp @@ -0,0 +1,413 @@ +/*************************************************************************/ +/* gd_mono_class.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 "gd_mono_class.h" + +#include <mono/metadata/attrdefs.h> + +#include "gd_mono_assembly.h" + +MonoType *GDMonoClass::get_raw_type(GDMonoClass *p_class) { + + return mono_class_get_type(p_class->get_raw()); +} + +bool GDMonoClass::is_assignable_from(GDMonoClass *p_from) const { + + return mono_class_is_assignable_from(mono_class, p_from->mono_class); +} + +String GDMonoClass::get_full_name() const { + + String res = namespace_name; + if (res.length()) + res += "."; + return res + class_name; +} + +GDMonoClass *GDMonoClass::get_parent_class() { + + if (assembly) { + MonoClass *parent_mono_class = mono_class_get_parent(mono_class); + + if (parent_mono_class) { + return GDMono::get_singleton()->get_class(parent_mono_class); + } + } + + return NULL; +} + +#ifdef TOOLS_ENABLED +Vector<MonoClassField *> GDMonoClass::get_enum_fields() { + + bool class_is_enum = mono_class_is_enum(mono_class); + ERR_FAIL_COND_V(!class_is_enum, Vector<MonoClassField *>()); + + Vector<MonoClassField *> enum_fields; + + void *iter = NULL; + MonoClassField *raw_field = NULL; + while ((raw_field = mono_class_get_fields(get_raw(), &iter)) != NULL) { + uint32_t field_flags = mono_field_get_flags(raw_field); + + // Enums have an instance field named value__ which holds the value of the enum. + // Enum constants are static, so we will use this to ignore the value__ field. + if (field_flags & MONO_FIELD_ATTR_PUBLIC && field_flags & MONO_FIELD_ATTR_STATIC) { + enum_fields.push_back(raw_field); + } + } + + return enum_fields; +} +#endif + +bool GDMonoClass::has_method(const StringName &p_name) { + + return get_method(p_name) != NULL; +} + +bool GDMonoClass::has_attribute(GDMonoClass *p_attr_class) { + +#ifdef DEBUG_ENABLED + ERR_FAIL_NULL_V(p_attr_class, false); +#endif + + if (!attrs_fetched) + fetch_attributes(); + + if (!attributes) + return false; + + return mono_custom_attrs_has_attr(attributes, p_attr_class->get_raw()); +} + +MonoObject *GDMonoClass::get_attribute(GDMonoClass *p_attr_class) { + +#ifdef DEBUG_ENABLED + ERR_FAIL_NULL_V(p_attr_class, NULL); +#endif + + if (!attrs_fetched) + fetch_attributes(); + + if (!attributes) + return NULL; + + return mono_custom_attrs_get_attr(attributes, p_attr_class->get_raw()); +} + +void GDMonoClass::fetch_attributes() { + + ERR_FAIL_COND(attributes != NULL); + + attributes = mono_custom_attrs_from_class(get_raw()); + attrs_fetched = true; +} + +void GDMonoClass::fetch_methods_with_godot_api_checks(GDMonoClass *p_native_base) { + + CRASH_COND(!CACHED_CLASS(GodotObject)->is_assignable_from(this)); + + if (methods_fetched) + return; + + void *iter = NULL; + MonoMethod *raw_method = NULL; + while ((raw_method = mono_class_get_methods(get_raw(), &iter)) != NULL) { + StringName name = mono_method_get_name(raw_method); + + GDMonoMethod *method = get_method(raw_method, name); + ERR_CONTINUE(!method); + + if (method->get_name() != name) { + +#ifdef DEBUG_ENABLED + String fullname = method->get_ret_type_full_name() + " " + name + "(" + method->get_signature_desc(true) + ")"; + WARN_PRINTS("Method `" + fullname + "` is hidden by Godot API method. Should be `" + + method->get_full_name_no_class() + "`. In class `" + namespace_name + "." + class_name + "`."); +#endif + continue; + } + +#ifdef DEBUG_ENABLED + // For debug builds, we also fetched from native base classes as well before if this is not a native base class. + // This allows us to warn the user here if he is using snake_case by mistake. + + if (p_native_base != this) { + + GDMonoClass *native_top = p_native_base; + while (native_top) { + GDMonoMethod *m = native_top->get_method(name, method->get_parameters_count()); + + if (m && m->get_name() != name) { + // found + String fullname = m->get_ret_type_full_name() + " " + name + "(" + m->get_signature_desc(true) + ")"; + WARN_PRINTS("Method `" + fullname + "` should be `" + m->get_full_name_no_class() + + "`. In class `" + namespace_name + "." + class_name + "`."); + break; + } + + if (native_top == CACHED_CLASS(GodotObject)) + break; + + native_top = native_top->get_parent_class(); + } + } +#endif + + uint32_t flags = mono_method_get_flags(method->mono_method, NULL); + + if (!(flags & MONO_METHOD_ATTR_VIRTUAL)) + continue; + + // Virtual method of Godot Object derived type, let's try to find GodotMethod attribute + + GDMonoClass *top = p_native_base; + + while (top) { + GDMonoMethod *base_method = top->get_method(name, method->get_parameters_count()); + + if (base_method && base_method->has_attribute(CACHED_CLASS(GodotMethodAttribute))) { + // Found base method with GodotMethod attribute. + // We get the original API method name from this attribute. + // This name must point to the virtual method. + + MonoObject *attr = base_method->get_attribute(CACHED_CLASS(GodotMethodAttribute)); + + StringName godot_method_name = CACHED_FIELD(GodotMethodAttribute, methodName)->get_string_value(attr); +#ifdef DEBUG_ENABLED + CRASH_COND(godot_method_name == StringName()); +#endif + MethodKey key = MethodKey(godot_method_name, method->get_parameters_count()); + GDMonoMethod **existing_method = methods.getptr(key); + if (existing_method) + memdelete(*existing_method); // Must delete old one + methods.set(key, method); + + break; + } + + if (top == CACHED_CLASS(GodotObject)) + break; + + top = top->get_parent_class(); + } + } + + methods_fetched = true; +} + +GDMonoMethod *GDMonoClass::get_method(const StringName &p_name) { + + ERR_FAIL_COND_V(!methods_fetched, NULL); + + const MethodKey *k = NULL; + + while ((k = methods.next(k))) { + if (k->name == p_name) + return methods.get(*k); + } + + return NULL; +} + +GDMonoMethod *GDMonoClass::get_method(const StringName &p_name, int p_params_count) { + + MethodKey key = MethodKey(p_name, p_params_count); + + GDMonoMethod **match = methods.getptr(key); + + if (match) + return *match; + + if (methods_fetched) + return NULL; + + MonoMethod *raw_method = mono_class_get_method_from_name(mono_class, String(p_name).utf8().get_data(), p_params_count); + + if (raw_method) { + GDMonoMethod *method = memnew(GDMonoMethod(p_name, raw_method)); + methods.set(key, method); + + return method; + } + + return NULL; +} + +GDMonoMethod *GDMonoClass::get_method(MonoMethod *p_raw_method) { + + MonoMethodSignature *sig = mono_method_signature(p_raw_method); + + int params_count = mono_signature_get_param_count(sig); + StringName method_name = mono_method_get_name(p_raw_method); + + return get_method(p_raw_method, method_name, params_count); +} + +GDMonoMethod *GDMonoClass::get_method(MonoMethod *p_raw_method, const StringName &p_name) { + + MonoMethodSignature *sig = mono_method_signature(p_raw_method); + int params_count = mono_signature_get_param_count(sig); + return get_method(p_raw_method, p_name, params_count); +} + +GDMonoMethod *GDMonoClass::get_method(MonoMethod *p_raw_method, const StringName &p_name, int p_params_count) { + + ERR_FAIL_NULL_V(p_raw_method, NULL); + + MethodKey key = MethodKey(p_name, p_params_count); + + GDMonoMethod **match = methods.getptr(key); + + if (match) + return *match; + + GDMonoMethod *method = memnew(GDMonoMethod(p_name, p_raw_method)); + methods.set(key, method); + + return method; +} + +GDMonoMethod *GDMonoClass::get_method_with_desc(const String &p_description, bool p_include_namespace) { + + MonoMethodDesc *desc = mono_method_desc_new(p_description.utf8().get_data(), p_include_namespace); + MonoMethod *method = mono_method_desc_search_in_class(desc, mono_class); + mono_method_desc_free(desc); + + return get_method(method); +} + +GDMonoField *GDMonoClass::get_field(const StringName &p_name) { + + Map<StringName, GDMonoField *>::Element *result = fields.find(p_name); + + if (result) + return result->value(); + + if (fields_fetched) + return NULL; + + MonoClassField *raw_field = mono_class_get_field_from_name(mono_class, String(p_name).utf8().get_data()); + + if (raw_field) { + GDMonoField *field = memnew(GDMonoField(raw_field, this)); + fields.insert(p_name, field); + + return field; + } + + return NULL; +} + +const Vector<GDMonoField *> &GDMonoClass::get_all_fields() { + + if (fields_fetched) + return fields_list; + + void *iter = NULL; + MonoClassField *raw_field = NULL; + while ((raw_field = mono_class_get_fields(get_raw(), &iter)) != NULL) { + StringName name = mono_field_get_name(raw_field); + + Map<StringName, GDMonoField *>::Element *match = fields.find(name); + + if (match) { + fields_list.push_back(match->get()); + } else { + GDMonoField *field = memnew(GDMonoField(raw_field, this)); + fields.insert(name, field); + fields_list.push_back(field); + } + } + + fields_fetched = true; + + return fields_list; +} + +GDMonoClass::GDMonoClass(const StringName &p_namespace, const StringName &p_name, MonoClass *p_class, GDMonoAssembly *p_assembly) { + + namespace_name = p_namespace; + class_name = p_name; + mono_class = p_class; + assembly = p_assembly; + + attrs_fetched = false; + attributes = NULL; + + methods_fetched = false; + fields_fetched = false; +} + +GDMonoClass::~GDMonoClass() { + + if (attributes) { + mono_custom_attrs_free(attributes); + } + + for (Map<StringName, GDMonoField *>::Element *E = fields.front(); E; E = E->next()) { + memdelete(E->value()); + } + + { + // Ugly workaround... + // We may have duplicated values, because we redirect snake_case methods to PascalCasel (only Godot API methods). + // This way, we end with both the snake_case name and the PascalCasel name paired with the same method. + // Therefore, we must avoid deleting the same pointer twice. + + int offset = 0; + Vector<GDMonoMethod *> deleted_methods; + deleted_methods.resize(methods.size()); + + const MethodKey *k = NULL; + while ((k = methods.next(k))) { + GDMonoMethod *method = methods.get(*k); + + if (method) { + for (int i = 0; i < offset; i++) { + if (deleted_methods[i] == method) { + // Already deleted + goto already_deleted; + } + } + + deleted_methods[offset] = method; + ++offset; + + memdelete(method); + } + + already_deleted:; + } + + methods.clear(); + } +} diff --git a/modules/mono/mono_gd/gd_mono_class.h b/modules/mono/mono_gd/gd_mono_class.h new file mode 100644 index 0000000000..ef1ca425a7 --- /dev/null +++ b/modules/mono/mono_gd/gd_mono_class.h @@ -0,0 +1,130 @@ +/*************************************************************************/ +/* gd_mono_class.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 GD_MONO_CLASS_H +#define GD_MONO_CLASS_H + +#include <mono/metadata/debug-helpers.h> + +#include "map.h" +#include "ustring.h" + +#include "gd_mono_field.h" +#include "gd_mono_header.h" +#include "gd_mono_method.h" +#include "gd_mono_utils.h" + +class GDMonoClass { + struct MethodKey { + struct Hasher { + static _FORCE_INLINE_ uint32_t hash(const MethodKey &p_key) { + uint32_t hash = 0; + + GDMonoUtils::hash_combine(hash, p_key.name.hash()); + GDMonoUtils::hash_combine(hash, HashMapHasherDefault::hash(p_key.params_count)); + + return hash; + } + }; + + _FORCE_INLINE_ bool operator==(const MethodKey &p_a) const { + return p_a.params_count == params_count && p_a.name == name; + } + + MethodKey() {} + + MethodKey(const StringName &p_name, int p_params_count) { + name = p_name; + params_count = p_params_count; + } + + StringName name; + int params_count; + }; + + StringName namespace_name; + StringName class_name; + + MonoClass *mono_class; + GDMonoAssembly *assembly; + + bool attrs_fetched; + MonoCustomAttrInfo *attributes; + + bool methods_fetched; + HashMap<MethodKey, GDMonoMethod *, MethodKey::Hasher> methods; + + bool fields_fetched; + Map<StringName, GDMonoField *> fields; + Vector<GDMonoField *> fields_list; + + friend class GDMonoAssembly; + GDMonoClass(const StringName &p_namespace, const StringName &p_name, MonoClass *p_class, GDMonoAssembly *p_assembly); + +public: + static MonoType *get_raw_type(GDMonoClass *p_class); + + bool is_assignable_from(GDMonoClass *p_from) const; + + _FORCE_INLINE_ StringName get_namespace() const { return namespace_name; } + _FORCE_INLINE_ StringName get_name() const { return class_name; } + + _FORCE_INLINE_ MonoClass *get_raw() const { return mono_class; } + _FORCE_INLINE_ const GDMonoAssembly *get_assembly() const { return assembly; } + + String get_full_name() const; + + GDMonoClass *get_parent_class(); + +#ifdef TOOLS_ENABLED + Vector<MonoClassField *> get_enum_fields(); +#endif + + bool has_method(const StringName &p_name); + + bool has_attribute(GDMonoClass *p_attr_class); + MonoObject *get_attribute(GDMonoClass *p_attr_class); + + void fetch_attributes(); + void fetch_methods_with_godot_api_checks(GDMonoClass *p_native_base); + + GDMonoMethod *get_method(const StringName &p_name); + GDMonoMethod *get_method(const StringName &p_name, int p_params_count); + GDMonoMethod *get_method(MonoMethod *p_raw_method); + GDMonoMethod *get_method(MonoMethod *p_raw_method, const StringName &p_name); + GDMonoMethod *get_method(MonoMethod *p_raw_method, const StringName &p_name, int p_params_count); + GDMonoMethod *get_method_with_desc(const String &p_description, bool p_includes_namespace); + + GDMonoField *get_field(const StringName &p_name); + const Vector<GDMonoField *> &get_all_fields(); + + ~GDMonoClass(); +}; + +#endif // GD_MONO_CLASS_H diff --git a/modules/mono/mono_gd/gd_mono_field.cpp b/modules/mono/mono_gd/gd_mono_field.cpp new file mode 100644 index 0000000000..81315ee87a --- /dev/null +++ b/modules/mono/mono_gd/gd_mono_field.cpp @@ -0,0 +1,366 @@ +/*************************************************************************/ +/* gd_mono_field.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 "gd_mono_field.h" + +#include <mono/metadata/attrdefs.h> + +#include "gd_mono_class.h" +#include "gd_mono_marshal.h" + +void GDMonoField::set_value_raw(MonoObject *p_object, void *p_ptr) { + mono_field_set_value(p_object, mono_field, &p_ptr); +} + +void GDMonoField::set_value(MonoObject *p_object, const Variant &p_value) { +#define SET_FROM_STRUCT_AND_BREAK(m_type) \ + { \ + const m_type &val = p_value.operator m_type(); \ + MARSHALLED_OUT(m_type, val, raw); \ + mono_field_set_value(p_object, mono_field, raw); \ + break; \ + } + +#define SET_FROM_PRIMITIVE(m_type) \ + { \ + m_type val = p_value.operator m_type(); \ + mono_field_set_value(p_object, mono_field, &val); \ + break; \ + } + +#define SET_FROM_ARRAY_AND_BREAK(m_type) \ + { \ + MonoArray *managed = GDMonoMarshal::m_type##_to_mono_array(p_value.operator m_type()); \ + mono_field_set_value(p_object, mono_field, &managed); \ + break; \ + } + + switch (type.type_encoding) { + case MONO_TYPE_BOOLEAN: { + SET_FROM_PRIMITIVE(bool); + } break; + + case MONO_TYPE_I1: { + SET_FROM_PRIMITIVE(signed char); + } break; + case MONO_TYPE_I2: { + SET_FROM_PRIMITIVE(signed short); + } break; + case MONO_TYPE_I4: { + SET_FROM_PRIMITIVE(signed int); + } break; + case MONO_TYPE_I8: { + SET_FROM_PRIMITIVE(int64_t); + } break; + + case MONO_TYPE_U1: { + SET_FROM_PRIMITIVE(unsigned char); + } break; + case MONO_TYPE_U2: { + SET_FROM_PRIMITIVE(unsigned short); + } break; + case MONO_TYPE_U4: { + SET_FROM_PRIMITIVE(unsigned int); + } break; + case MONO_TYPE_U8: { + SET_FROM_PRIMITIVE(uint64_t); + } break; + + case MONO_TYPE_R4: { + SET_FROM_PRIMITIVE(float); + } break; + + case MONO_TYPE_R8: { + SET_FROM_PRIMITIVE(double); + } break; + + case MONO_TYPE_STRING: { + MonoString *mono_string = GDMonoMarshal::mono_string_from_godot(p_value); + mono_field_set_value(p_object, mono_field, mono_string); + } break; + + case MONO_TYPE_VALUETYPE: { + GDMonoClass *tclass = type.type_class; + + if (tclass == CACHED_CLASS(Vector2)) + SET_FROM_STRUCT_AND_BREAK(Vector2); + + if (tclass == CACHED_CLASS(Rect2)) + SET_FROM_STRUCT_AND_BREAK(Rect2); + + if (tclass == CACHED_CLASS(Transform2D)) + SET_FROM_STRUCT_AND_BREAK(Transform2D); + + if (tclass == CACHED_CLASS(Vector3)) + SET_FROM_STRUCT_AND_BREAK(Vector3); + + if (tclass == CACHED_CLASS(Basis)) + SET_FROM_STRUCT_AND_BREAK(Basis); + + if (tclass == CACHED_CLASS(Quat)) + SET_FROM_STRUCT_AND_BREAK(Quat); + + if (tclass == CACHED_CLASS(Transform)) + SET_FROM_STRUCT_AND_BREAK(Transform); + + if (tclass == CACHED_CLASS(Rect3)) + SET_FROM_STRUCT_AND_BREAK(Rect3); + + if (tclass == CACHED_CLASS(Color)) + SET_FROM_STRUCT_AND_BREAK(Color); + + if (tclass == CACHED_CLASS(Plane)) + SET_FROM_STRUCT_AND_BREAK(Plane); + + if (mono_class_is_enum(tclass->get_raw())) + SET_FROM_PRIMITIVE(signed int); + + ERR_EXPLAIN(String() + "Attempted to set the value of a field of unmarshallable type: " + tclass->get_name()); + ERR_FAIL(); + } break; + + case MONO_TYPE_ARRAY: + case MONO_TYPE_SZARRAY: { + MonoArrayType *array_type = mono_type_get_array_type(GDMonoClass::get_raw_type(type.type_class)); + + if (array_type->eklass == CACHED_CLASS_RAW(MonoObject)) + SET_FROM_ARRAY_AND_BREAK(Array); + + if (array_type->eklass == CACHED_CLASS_RAW(uint8_t)) + SET_FROM_ARRAY_AND_BREAK(PoolByteArray); + + if (array_type->eklass == CACHED_CLASS_RAW(int32_t)) + SET_FROM_ARRAY_AND_BREAK(PoolIntArray); + + if (array_type->eklass == REAL_T_MONOCLASS) + SET_FROM_ARRAY_AND_BREAK(PoolRealArray); + + if (array_type->eklass == CACHED_CLASS_RAW(String)) + SET_FROM_ARRAY_AND_BREAK(PoolStringArray); + + if (array_type->eklass == CACHED_CLASS_RAW(Vector2)) + SET_FROM_ARRAY_AND_BREAK(PoolVector2Array); + + if (array_type->eklass == CACHED_CLASS_RAW(Vector3)) + SET_FROM_ARRAY_AND_BREAK(PoolVector3Array); + + if (array_type->eklass == CACHED_CLASS_RAW(Color)) + SET_FROM_ARRAY_AND_BREAK(PoolColorArray); + + ERR_EXPLAIN(String() + "Attempted to convert Variant to a managed array of unmarshallable element type."); + ERR_FAIL(); + } break; + + case MONO_TYPE_CLASS: { + GDMonoClass *type_class = type.type_class; + + // GodotObject + if (CACHED_CLASS(GodotObject)->is_assignable_from(type_class)) { + MonoObject *managed = GDMonoUtils::unmanaged_get_managed(p_value.operator Object *()); + mono_field_set_value(p_object, mono_field, &managed); + break; + } + + if (CACHED_CLASS(NodePath) == type_class) { + MonoObject *managed = GDMonoUtils::create_managed_from(p_value.operator NodePath()); + mono_field_set_value(p_object, mono_field, &managed); + break; + } + + if (CACHED_CLASS(RID) == type_class) { + MonoObject *managed = GDMonoUtils::create_managed_from(p_value.operator RID()); + mono_field_set_value(p_object, mono_field, &managed); + break; + } + + ERR_EXPLAIN(String() + "Attempted to set the value of a field of unmarshallable type: " + type_class->get_name()); + ERR_FAIL(); + } break; + + case MONO_TYPE_OBJECT: { + GDMonoClass *type_class = type.type_class; + + // Variant + switch (p_value.get_type()) { + case Variant::BOOL: { + SET_FROM_PRIMITIVE(bool); + } break; + case Variant::INT: { + SET_FROM_PRIMITIVE(int); + } break; + case Variant::REAL: { +#ifdef REAL_T_IS_DOUBLE + SET_FROM_PRIMITIVE(double); +#else + SET_FROM_PRIMITIVE(float); +#endif + } break; + case Variant::STRING: { + MonoString *mono_string = GDMonoMarshal::mono_string_from_godot(p_value); + mono_field_set_value(p_object, mono_field, mono_string); + } break; + case Variant::VECTOR2: SET_FROM_STRUCT_AND_BREAK(Vector2); + case Variant::RECT2: SET_FROM_STRUCT_AND_BREAK(Rect2); + case Variant::VECTOR3: SET_FROM_STRUCT_AND_BREAK(Vector3); + case Variant::TRANSFORM2D: SET_FROM_STRUCT_AND_BREAK(Transform2D); + case Variant::PLANE: SET_FROM_STRUCT_AND_BREAK(Plane); + case Variant::QUAT: SET_FROM_STRUCT_AND_BREAK(Quat); + case Variant::RECT3: SET_FROM_STRUCT_AND_BREAK(Rect3); + case Variant::BASIS: SET_FROM_STRUCT_AND_BREAK(Basis); + case Variant::TRANSFORM: SET_FROM_STRUCT_AND_BREAK(Transform); + case Variant::COLOR: SET_FROM_STRUCT_AND_BREAK(Color); + case Variant::NODE_PATH: { + MonoObject *managed = GDMonoUtils::create_managed_from(p_value.operator NodePath()); + mono_field_set_value(p_object, mono_field, &managed); + } break; + case Variant::_RID: { + MonoObject *managed = GDMonoUtils::create_managed_from(p_value.operator RID()); + mono_field_set_value(p_object, mono_field, &managed); + } break; + case Variant::OBJECT: { + MonoObject *managed = GDMonoUtils::unmanaged_get_managed(p_value.operator Object *()); + mono_field_set_value(p_object, mono_field, managed); + break; + } + case Variant::DICTIONARY: { + MonoObject *managed = GDMonoMarshal::Dictionary_to_mono_object(p_value.operator Dictionary()); + mono_field_set_value(p_object, mono_field, &managed); + } break; + case Variant::ARRAY: SET_FROM_ARRAY_AND_BREAK(Array); + case Variant::POOL_BYTE_ARRAY: SET_FROM_ARRAY_AND_BREAK(PoolByteArray); + case Variant::POOL_INT_ARRAY: SET_FROM_ARRAY_AND_BREAK(PoolIntArray); + case Variant::POOL_REAL_ARRAY: SET_FROM_ARRAY_AND_BREAK(PoolRealArray); + case Variant::POOL_STRING_ARRAY: SET_FROM_ARRAY_AND_BREAK(PoolStringArray); + case Variant::POOL_VECTOR2_ARRAY: SET_FROM_ARRAY_AND_BREAK(PoolVector2Array); + case Variant::POOL_VECTOR3_ARRAY: SET_FROM_ARRAY_AND_BREAK(PoolVector3Array); + case Variant::POOL_COLOR_ARRAY: SET_FROM_ARRAY_AND_BREAK(PoolColorArray); +#undef SET_FROM_ARRAY_AND_BREAK + default: break; + } + } break; + + case MONO_TYPE_GENERICINST: { + if (CACHED_RAW_MONO_CLASS(Dictionary) == type.type_class->get_raw()) { + MonoObject *managed = GDMonoMarshal::Dictionary_to_mono_object(p_value.operator Dictionary()); + mono_field_set_value(p_object, mono_field, &managed); + break; + } + } break; + + default: { + ERR_PRINTS(String() + "Attempted to set the value of a field of unexpected type encoding: " + itos(type.type_encoding)); + } break; + } + +#undef SET_FROM_STRUCT_AND_BREAK +#undef SET_FROM_PRIMITIVE +} + +bool GDMonoField::get_bool_value(MonoObject *p_object) { + return (bool)GDMonoMarshal::unbox<MonoBoolean>(get_value(p_object)); +} + +int GDMonoField::get_int_value(MonoObject *p_object) { + return GDMonoMarshal::unbox<int32_t>(get_value(p_object)); +} + +String GDMonoField::get_string_value(MonoObject *p_object) { + MonoObject *val = get_value(p_object); + return val ? GDMonoMarshal::mono_string_to_godot((MonoString *)val) : String(); +} + +bool GDMonoField::has_attribute(GDMonoClass *p_attr_class) { + ERR_FAIL_NULL_V(p_attr_class, false); + + if (!attrs_fetched) + fetch_attributes(); + + if (!attributes) + return false; + + return mono_custom_attrs_has_attr(attributes, p_attr_class->get_raw()); +} + +MonoObject *GDMonoField::get_attribute(GDMonoClass *p_attr_class) { + ERR_FAIL_NULL_V(p_attr_class, NULL); + + if (!attrs_fetched) + fetch_attributes(); + + if (!attributes) + return NULL; + + return mono_custom_attrs_get_attr(attributes, p_attr_class->get_raw()); +} + +void GDMonoField::fetch_attributes() { + ERR_FAIL_COND(attributes != NULL); + attributes = mono_custom_attrs_from_field(owner->get_raw(), get_raw()); + attrs_fetched = true; +} + +bool GDMonoField::is_static() { + return mono_field_get_flags(mono_field) & MONO_FIELD_ATTR_STATIC; +} + +GDMono::MemberVisibility GDMonoField::get_visibility() { + switch (mono_field_get_flags(mono_field) & MONO_FIELD_ATTR_FIELD_ACCESS_MASK) { + case MONO_FIELD_ATTR_PRIVATE: + return GDMono::PRIVATE; + case MONO_FIELD_ATTR_FAM_AND_ASSEM: + return GDMono::PROTECTED_AND_INTERNAL; + case MONO_FIELD_ATTR_ASSEMBLY: + return GDMono::INTERNAL; + case MONO_FIELD_ATTR_FAMILY: + return GDMono::PROTECTED; + case MONO_FIELD_ATTR_PUBLIC: + return GDMono::PUBLIC; + default: + ERR_FAIL_V(GDMono::PRIVATE); + } +} + +GDMonoField::GDMonoField(MonoClassField *p_raw_field, GDMonoClass *p_owner) { + owner = p_owner; + mono_field = p_raw_field; + name = mono_field_get_name(mono_field); + MonoType *field_type = mono_field_get_type(mono_field); + type.type_encoding = mono_type_get_type(field_type); + MonoClass *field_type_class = mono_class_from_mono_type(field_type); + type.type_class = GDMono::get_singleton()->get_class(field_type_class); + + attrs_fetched = false; + attributes = NULL; +} + +GDMonoField::~GDMonoField() { + if (attributes) { + mono_custom_attrs_free(attributes); + } +} diff --git a/modules/mono/mono_gd/gd_mono_field.h b/modules/mono/mono_gd/gd_mono_field.h new file mode 100644 index 0000000000..b7e1942d71 --- /dev/null +++ b/modules/mono/mono_gd/gd_mono_field.h @@ -0,0 +1,74 @@ +/*************************************************************************/ +/* gd_mono_field.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 GDMONOFIELD_H +#define GDMONOFIELD_H + +#include "gd_mono.h" +#include "gd_mono_header.h" + +class GDMonoField { + GDMonoClass *owner; + MonoClassField *mono_field; + + String name; + ManagedType type; + + bool attrs_fetched; + MonoCustomAttrInfo *attributes; + +public: + _FORCE_INLINE_ String get_name() const { return name; } + _FORCE_INLINE_ ManagedType get_type() const { return type; } + + _FORCE_INLINE_ MonoClassField *get_raw() const { return mono_field; } + + void set_value_raw(MonoObject *p_object, void *p_ptr); + void set_value(MonoObject *p_object, const Variant &p_value); + + _FORCE_INLINE_ MonoObject *get_value(MonoObject *p_object) { + return mono_field_get_value_object(mono_domain_get(), mono_field, p_object); + } + + bool get_bool_value(MonoObject *p_object); + int get_int_value(MonoObject *p_object); + String get_string_value(MonoObject *p_object); + + bool has_attribute(GDMonoClass *p_attr_class); + MonoObject *get_attribute(GDMonoClass *p_attr_class); + void fetch_attributes(); + + bool is_static(); + GDMono::MemberVisibility get_visibility(); + + GDMonoField(MonoClassField *p_raw_field, GDMonoClass *p_owner); + ~GDMonoField(); +}; + +#endif // GDMONOFIELD_H diff --git a/modules/mono/mono_gd/gd_mono_header.h b/modules/mono/mono_gd/gd_mono_header.h new file mode 100644 index 0000000000..803d394f96 --- /dev/null +++ b/modules/mono/mono_gd/gd_mono_header.h @@ -0,0 +1,59 @@ +/*************************************************************************/ +/* gd_mono_header.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 GD_MONO_HEADER_H +#define GD_MONO_HEADER_H + +#include "int_types.h" + +class GDMonoAssembly; +class GDMonoClass; +class GDMonoMethod; +class GDMonoField; + +struct ManagedType { + int type_encoding; + GDMonoClass *type_class; + + ManagedType() { + type_class = 0; + } +}; + +typedef union { + uint32_t _uint32; + float _float; +} mono_float; + +typedef union { + uint64_t _uint64; + float _double; +} mono_double; + +#endif // GD_MONO_HEADER_H diff --git a/modules/mono/mono_gd/gd_mono_internals.cpp b/modules/mono/mono_gd/gd_mono_internals.cpp new file mode 100644 index 0000000000..cfe2148b80 --- /dev/null +++ b/modules/mono/mono_gd/gd_mono_internals.cpp @@ -0,0 +1,66 @@ +/*************************************************************************/ +/* godotsharp_internals.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 "gd_mono_internals.h" + +#include "../csharp_script.h" +#include "../mono_gc_handle.h" +#include "gd_mono_utils.h" + +namespace GDMonoInternals { + +void tie_managed_to_unmanaged(MonoObject *managed, Object *unmanaged) { + + // This method should not fail + + CRASH_COND(!unmanaged); + + // All mono objects created from the managed world (e.g.: `new Player()`) + // need to have a CSharpScript in order for their methods to be callable from the unmanaged side + + Reference *ref = Object::cast_to<Reference>(unmanaged); + + GDMonoClass *klass = GDMonoUtils::get_object_class(managed); + + CRASH_COND(!klass); + + Ref<MonoGCHandle> gchandle = ref ? MonoGCHandle::create_weak(managed) : + MonoGCHandle::create_strong(managed); + + Ref<CSharpScript> script = CSharpScript::create_for_managed_type(klass); + + CRASH_COND(script.is_null()); + + ScriptInstance *si = CSharpInstance::create_for_managed_type(unmanaged, script.ptr(), gchandle); + + unmanaged->set_script_and_instance(script.get_ref_ptr(), si); + + return; +} +} diff --git a/modules/mono/mono_gd/gd_mono_internals.h b/modules/mono/mono_gd/gd_mono_internals.h new file mode 100644 index 0000000000..6bdf4a6c46 --- /dev/null +++ b/modules/mono/mono_gd/gd_mono_internals.h @@ -0,0 +1,42 @@ +/*************************************************************************/ +/* godotsharp_internals.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 GD_MONO_INTERNALS_H +#define GD_MONO_INTERNALS_H + +#include <mono/jit/jit.h> + +#include "core/object.h" + +namespace GDMonoInternals { + +void tie_managed_to_unmanaged(MonoObject *managed, Object *unmanaged); +} + +#endif // GD_MONO_INTERNALS_H diff --git a/modules/mono/mono_gd/gd_mono_log.cpp b/modules/mono/mono_gd/gd_mono_log.cpp new file mode 100644 index 0000000000..e473348897 --- /dev/null +++ b/modules/mono/mono_gd/gd_mono_log.cpp @@ -0,0 +1,175 @@ +/*************************************************************************/ +/* gd_mono_log.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 "gd_mono_log.h" + +#include <mono/utils/mono-logger.h> +#include <stdlib.h> // abort + +#include "os/dir_access.h" +#include "os/os.h" + +#include "../godotsharp_dirs.h" + +static int log_level_get_id(const char *p_log_level) { + + const char *valid_log_levels[] = { "error", "critical", "warning", "message", "info", "debug", NULL }; + + int i = 0; + while (valid_log_levels[i]) { + if (!strcmp(valid_log_levels[i], p_log_level)) + return i; + i++; + } + + return -1; +} + +void gdmono_MonoLogCallback(const char *log_domain, const char *log_level, const char *message, mono_bool fatal, void *user_data) { + + FileAccess *f = GDMonoLog::get_singleton()->get_log_file(); + + if (GDMonoLog::get_singleton()->get_log_level_id() >= log_level_get_id(log_level)) { + String text(message); + text += " (in domain "; + text += log_domain; + if (log_level) { + text += ", "; + text += log_level; + } + text += ")\n"; + + f->seek_end(); + f->store_string(text); + } + + if (fatal) { + ERR_PRINTS("Mono: FALTAL ERROR, ABORTING! Logfile: " + GDMonoLog::get_singleton()->get_log_file_path() + "\n"); + abort(); + } +} + +GDMonoLog *GDMonoLog::singleton = NULL; + +bool GDMonoLog::_try_create_logs_dir(const String &p_logs_dir) { + + if (!DirAccess::exists(p_logs_dir)) { + DirAccessRef diraccess = DirAccess::create(DirAccess::ACCESS_FILESYSTEM); + ERR_FAIL_COND_V(!diraccess, false); + Error logs_mkdir_err = diraccess->make_dir_recursive(p_logs_dir); + ERR_EXPLAIN("Failed to create mono logs directory"); + ERR_FAIL_COND_V(logs_mkdir_err != OK, false); + } + + return true; +} + +void GDMonoLog::_open_log_file(const String &p_file_path) { + + log_file = FileAccess::open(p_file_path, FileAccess::WRITE); + + ERR_EXPLAIN("Failed to create log file"); + ERR_FAIL_COND(!log_file); +} + +void GDMonoLog::_delete_old_log_files(const String &p_logs_dir) { + + static const uint64_t MAX_SECS = 5 * 86400; + + DirAccessRef da = DirAccess::create(DirAccess::ACCESS_FILESYSTEM); + ERR_FAIL_COND(!da); + + Error err = da->change_dir(p_logs_dir); + ERR_FAIL_COND(err != OK); + + ERR_FAIL_COND(da->list_dir_begin() != OK); + + String current; + while ((current = da->get_next()).length()) { + if (da->current_is_dir()) + continue; + if (!current.ends_with(".txt")) + continue; + + String name = current.get_basename(); + uint64_t unixtime = (uint64_t)name.to_int64(); + + if (OS::get_singleton()->get_unix_time() - unixtime > MAX_SECS) { + da->remove(current); + } + } + + da->list_dir_end(); +} + +void GDMonoLog::initialize() { + +#ifdef DEBUG_ENABLED + const char *log_level = "debug"; +#else + const char *log_level = "warning"; +#endif + + String logs_dir = GodotSharpDirs::get_mono_logs_dir(); + + if (_try_create_logs_dir(logs_dir)) { + _delete_old_log_files(logs_dir); + + log_file_path = logs_dir.plus_file(String::num_int64(OS::get_singleton()->get_unix_time()) + ".txt"); + _open_log_file(log_file_path); + } + + mono_trace_set_level_string(log_level); + log_level_id = log_level_get_id(log_level); + + if (log_file) { + if (OS::get_singleton()->is_stdout_verbose()) + OS::get_singleton()->print(String("Mono: Logfile is " + log_file_path + "\n").utf8()); + mono_trace_set_log_handler(gdmono_MonoLogCallback, this); + } else { + OS::get_singleton()->printerr("Mono: No log file, using default log handler\n"); + } +} + +GDMonoLog::GDMonoLog() { + + singleton = this; + + log_level_id = -1; +} + +GDMonoLog::~GDMonoLog() { + + singleton = NULL; + + if (log_file) { + log_file->close(); + memdelete(log_file); + } +} diff --git a/platform/iphone/audio_driver_iphone.h b/modules/mono/mono_gd/gd_mono_log.h index 930ed168f7..497f1e5317 100644 --- a/platform/iphone/audio_driver_iphone.h +++ b/modules/mono/mono_gd/gd_mono_log.h @@ -1,5 +1,5 @@ /*************************************************************************/ -/* audio_driver_iphone.h */ +/* gd_mono_log.h */ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ @@ -27,40 +27,35 @@ /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ +#ifndef GD_MONO_LOG_H +#define GD_MONO_LOG_H -#include "servers/audio_server.h" +#include "os/file_access.h" -#include <AudioUnit/AudioUnit.h> +class GDMonoLog { -class AudioDriverIphone : public AudioDriver { + int log_level_id; - AudioComponentInstance audio_unit; - bool active; - Mutex *mutex; + FileAccess *log_file; + String log_file_path; - int channels; - int32_t *samples_in; - int buffer_frames; + bool _try_create_logs_dir(const String &p_logs_dir); + void _open_log_file(const String &p_file_path); + void _delete_old_log_files(const String &p_logs_dir); - static OSStatus output_callback(void *inRefCon, - AudioUnitRenderActionFlags *ioActionFlags, - const AudioTimeStamp *inTimeStamp, - UInt32 inBusNumber, UInt32 inNumberFrames, - AudioBufferList *ioData); + static GDMonoLog *singleton; public: - const char *get_name() const { - return "IPhone"; - }; + _FORCE_INLINE_ static GDMonoLog *get_singleton() { return singleton; } - virtual Error init(); - virtual void start(); - virtual int get_mix_rate() const; - virtual SpeakerMode get_speaker_mode() const; - virtual void lock(); - virtual void unlock(); - virtual void finish(); + void initialize(); - AudioDriverIphone(); - ~AudioDriverIphone(); + _FORCE_INLINE_ FileAccess *get_log_file() { return log_file; } + _FORCE_INLINE_ String get_log_file_path() { return log_file_path; } + _FORCE_INLINE_ int get_log_level_id() { return log_level_id; } + + GDMonoLog(); + ~GDMonoLog(); }; + +#endif // GD_MONO_LOG_H diff --git a/modules/mono/mono_gd/gd_mono_marshal.cpp b/modules/mono/mono_gd/gd_mono_marshal.cpp new file mode 100644 index 0000000000..77a1ef3cb0 --- /dev/null +++ b/modules/mono/mono_gd/gd_mono_marshal.cpp @@ -0,0 +1,859 @@ +/*************************************************************************/ +/* gd_mono_marshal.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 "gd_mono_marshal.h" + +#include "gd_mono.h" +#include "gd_mono_class.h" + +namespace GDMonoMarshal { + +#define RETURN_BOXED_STRUCT(m_t, m_var_in) \ + { \ + const m_t &m_in = m_var_in->operator m_t(); \ + MARSHALLED_OUT(m_t, m_in, raw); \ + return mono_value_box(mono_domain_get(), CACHED_CLASS_RAW(m_t), raw); \ + } + +#define RETURN_UNBOXED_STRUCT(m_t, m_var_in) \ + { \ + float *raw = (float *)mono_object_unbox(m_var_in); \ + MARSHALLED_IN(m_t, raw, ret); \ + return ret; \ + } + +Variant::Type managed_to_variant_type(const ManagedType &p_type) { + switch (p_type.type_encoding) { + case MONO_TYPE_BOOLEAN: + return Variant::BOOL; + + case MONO_TYPE_I1: + return Variant::INT; + case MONO_TYPE_I2: + return Variant::INT; + case MONO_TYPE_I4: + return Variant::INT; + case MONO_TYPE_I8: + return Variant::INT; + + case MONO_TYPE_U1: + return Variant::INT; + case MONO_TYPE_U2: + return Variant::INT; + case MONO_TYPE_U4: + return Variant::INT; + case MONO_TYPE_U8: + return Variant::INT; + + case MONO_TYPE_R4: + return Variant::REAL; + case MONO_TYPE_R8: + return Variant::REAL; + + case MONO_TYPE_STRING: { + return Variant::STRING; + } break; + + case MONO_TYPE_VALUETYPE: { + GDMonoClass *tclass = p_type.type_class; + + if (tclass == CACHED_CLASS(Vector2)) + return Variant::VECTOR2; + + if (tclass == CACHED_CLASS(Rect2)) + return Variant::RECT2; + + if (tclass == CACHED_CLASS(Transform2D)) + return Variant::TRANSFORM2D; + + if (tclass == CACHED_CLASS(Vector3)) + return Variant::VECTOR3; + + if (tclass == CACHED_CLASS(Basis)) + return Variant::BASIS; + + if (tclass == CACHED_CLASS(Quat)) + return Variant::QUAT; + + if (tclass == CACHED_CLASS(Transform)) + return Variant::TRANSFORM; + + if (tclass == CACHED_CLASS(Rect3)) + return Variant::RECT3; + + if (tclass == CACHED_CLASS(Color)) + return Variant::COLOR; + + if (tclass == CACHED_CLASS(Plane)) + return Variant::PLANE; + + if (mono_class_is_enum(tclass->get_raw())) + return Variant::INT; + } break; + + case MONO_TYPE_ARRAY: + case MONO_TYPE_SZARRAY: { + MonoArrayType *array_type = mono_type_get_array_type(GDMonoClass::get_raw_type(p_type.type_class)); + + if (array_type->eklass == CACHED_CLASS_RAW(MonoObject)) + return Variant::ARRAY; + + if (array_type->eklass == CACHED_CLASS_RAW(uint8_t)) + return Variant::POOL_BYTE_ARRAY; + + if (array_type->eklass == CACHED_CLASS_RAW(int32_t)) + return Variant::POOL_INT_ARRAY; + + if (array_type->eklass == REAL_T_MONOCLASS) + return Variant::POOL_REAL_ARRAY; + + if (array_type->eklass == CACHED_CLASS_RAW(String)) + return Variant::POOL_STRING_ARRAY; + + if (array_type->eklass == CACHED_CLASS_RAW(Vector2)) + return Variant::POOL_VECTOR2_ARRAY; + + if (array_type->eklass == CACHED_CLASS_RAW(Vector3)) + return Variant::POOL_VECTOR3_ARRAY; + + if (array_type->eklass == CACHED_CLASS_RAW(Color)) + return Variant::POOL_COLOR_ARRAY; + } break; + + case MONO_TYPE_CLASS: { + GDMonoClass *type_class = p_type.type_class; + + // GodotObject + if (CACHED_CLASS(GodotObject)->is_assignable_from(type_class)) { + return Variant::OBJECT; + } + + if (CACHED_CLASS(NodePath) == type_class) { + return Variant::NODE_PATH; + } + + if (CACHED_CLASS(RID) == type_class) { + return Variant::_RID; + } + } break; + + case MONO_TYPE_GENERICINST: { + if (CACHED_RAW_MONO_CLASS(Dictionary) == p_type.type_class->get_raw()) { + return Variant::DICTIONARY; + } + } break; + + default: { + } break; + } + + // Unknown + return Variant::NIL; +} + +String mono_to_utf8_string(MonoString *p_mono_string) { + MonoError error; + char *utf8 = mono_string_to_utf8_checked(p_mono_string, &error); + + ERR_EXPLAIN("Conversion of MonoString to UTF8 failed."); + ERR_FAIL_COND_V(!mono_error_ok(&error), String()); + + String ret = String::utf8(utf8); + + mono_free(utf8); + + return ret; +} + +String mono_to_utf16_string(MonoString *p_mono_string) { + int len = mono_string_length(p_mono_string); + String ret; + + if (len == 0) + return ret; + + ret.resize(len + 1); + ret.set(len, 0); + + CharType *src = (CharType *)mono_string_chars(p_mono_string); + CharType *dst = &(ret.operator[](0)); + + for (int i = 0; i < len; i++) { + dst[i] = src[i]; + } + + return ret; +} + +MonoObject *variant_to_mono_object(const Variant *p_var) { + ManagedType type; + + type.type_encoding = MONO_TYPE_OBJECT; + + return variant_to_mono_object(p_var, type); +} + +MonoObject *variant_to_mono_object(const Variant *p_var, const ManagedType &p_type) { + switch (p_type.type_encoding) { + case MONO_TYPE_BOOLEAN: { + MonoBoolean val = p_var->operator bool(); + return BOX_BOOLEAN(val); + } + + case MONO_TYPE_I1: { + char val = p_var->operator signed char(); + return BOX_INT8(val); + } + case MONO_TYPE_I2: { + short val = p_var->operator signed short(); + return BOX_INT16(val); + } + case MONO_TYPE_I4: { + int val = p_var->operator signed int(); + return BOX_INT32(val); + } + case MONO_TYPE_I8: { + int64_t val = p_var->operator int64_t(); + return BOX_INT64(val); + } + + case MONO_TYPE_U1: { + char val = p_var->operator unsigned char(); + return BOX_UINT8(val); + } + case MONO_TYPE_U2: { + short val = p_var->operator unsigned short(); + return BOX_UINT16(val); + } + case MONO_TYPE_U4: { + int val = p_var->operator unsigned int(); + return BOX_UINT32(val); + } + case MONO_TYPE_U8: { + uint64_t val = p_var->operator uint64_t(); + return BOX_UINT64(val); + } + + case MONO_TYPE_R4: { + float val = p_var->operator float(); + return BOX_FLOAT(val); + } + case MONO_TYPE_R8: { + double val = p_var->operator double(); + return BOX_DOUBLE(val); + } + + case MONO_TYPE_STRING: { + return (MonoObject *)mono_string_from_godot(p_var->operator String()); + } break; + + case MONO_TYPE_VALUETYPE: { + GDMonoClass *tclass = p_type.type_class; + + if (tclass == CACHED_CLASS(Vector2)) + RETURN_BOXED_STRUCT(Vector2, p_var); + + if (tclass == CACHED_CLASS(Rect2)) + RETURN_BOXED_STRUCT(Rect2, p_var); + + if (tclass == CACHED_CLASS(Transform2D)) + RETURN_BOXED_STRUCT(Transform2D, p_var); + + if (tclass == CACHED_CLASS(Vector3)) + RETURN_BOXED_STRUCT(Vector3, p_var); + + if (tclass == CACHED_CLASS(Basis)) + RETURN_BOXED_STRUCT(Basis, p_var); + + if (tclass == CACHED_CLASS(Quat)) + RETURN_BOXED_STRUCT(Quat, p_var); + + if (tclass == CACHED_CLASS(Transform)) + RETURN_BOXED_STRUCT(Transform, p_var); + + if (tclass == CACHED_CLASS(Rect3)) + RETURN_BOXED_STRUCT(Rect3, p_var); + + if (tclass == CACHED_CLASS(Color)) + RETURN_BOXED_STRUCT(Color, p_var); + + if (tclass == CACHED_CLASS(Plane)) + RETURN_BOXED_STRUCT(Plane, p_var); + + if (mono_class_is_enum(tclass->get_raw())) { + int val = p_var->operator signed int(); + return BOX_ENUM(tclass->get_raw(), val); + } + } break; + + case MONO_TYPE_ARRAY: + case MONO_TYPE_SZARRAY: { + MonoArrayType *array_type = mono_type_get_array_type(GDMonoClass::get_raw_type(p_type.type_class)); + + if (array_type->eklass == CACHED_CLASS_RAW(MonoObject)) + return (MonoObject *)Array_to_mono_array(p_var->operator Array()); + + if (array_type->eklass == CACHED_CLASS_RAW(uint8_t)) + return (MonoObject *)PoolByteArray_to_mono_array(p_var->operator PoolByteArray()); + + if (array_type->eklass == CACHED_CLASS_RAW(int32_t)) + return (MonoObject *)PoolIntArray_to_mono_array(p_var->operator PoolIntArray()); + + if (array_type->eklass == REAL_T_MONOCLASS) + return (MonoObject *)PoolRealArray_to_mono_array(p_var->operator PoolRealArray()); + + if (array_type->eklass == CACHED_CLASS_RAW(String)) + return (MonoObject *)PoolStringArray_to_mono_array(p_var->operator PoolStringArray()); + + if (array_type->eklass == CACHED_CLASS_RAW(Vector2)) + return (MonoObject *)PoolVector2Array_to_mono_array(p_var->operator PoolVector2Array()); + + if (array_type->eklass == CACHED_CLASS_RAW(Vector3)) + return (MonoObject *)PoolVector3Array_to_mono_array(p_var->operator PoolVector3Array()); + + if (array_type->eklass == CACHED_CLASS_RAW(Color)) + return (MonoObject *)PoolColorArray_to_mono_array(p_var->operator PoolColorArray()); + + ERR_EXPLAIN(String() + "Attempted to convert Variant to a managed array of unmarshallable element type."); + ERR_FAIL_V(NULL); + } break; + + case MONO_TYPE_CLASS: { + GDMonoClass *type_class = p_type.type_class; + + // GodotObject + if (CACHED_CLASS(GodotObject)->is_assignable_from(type_class)) { + return GDMonoUtils::unmanaged_get_managed(p_var->operator Object *()); + } + + if (CACHED_CLASS(NodePath) == type_class) { + return GDMonoUtils::create_managed_from(p_var->operator NodePath()); + } + + if (CACHED_CLASS(RID) == type_class) { + return GDMonoUtils::create_managed_from(p_var->operator RID()); + } + } break; + case MONO_TYPE_OBJECT: { + // Variant + switch (p_var->get_type()) { + case Variant::BOOL: { + MonoBoolean val = p_var->operator bool(); + return BOX_BOOLEAN(val); + } + case Variant::INT: { + int val = p_var->operator signed int(); + return BOX_INT32(val); + } + case Variant::REAL: { +#ifdef REAL_T_IS_DOUBLE + double val = p_var->operator double(); + return BOX_DOUBLE(val); +#else + float val = p_var->operator float(); + return BOX_FLOAT(val); +#endif + } + case Variant::STRING: + return (MonoObject *)mono_string_from_godot(p_var->operator String()); + case Variant::VECTOR2: + RETURN_BOXED_STRUCT(Vector2, p_var); + case Variant::RECT2: + RETURN_BOXED_STRUCT(Rect2, p_var); + case Variant::VECTOR3: + RETURN_BOXED_STRUCT(Vector3, p_var); + case Variant::TRANSFORM2D: + RETURN_BOXED_STRUCT(Transform2D, p_var); + case Variant::PLANE: + RETURN_BOXED_STRUCT(Plane, p_var); + case Variant::QUAT: + RETURN_BOXED_STRUCT(Quat, p_var); + case Variant::RECT3: + RETURN_BOXED_STRUCT(Rect3, p_var); + case Variant::BASIS: + RETURN_BOXED_STRUCT(Basis, p_var); + case Variant::TRANSFORM: + RETURN_BOXED_STRUCT(Transform, p_var); + case Variant::COLOR: + RETURN_BOXED_STRUCT(Color, p_var); + case Variant::NODE_PATH: + return GDMonoUtils::create_managed_from(p_var->operator NodePath()); + case Variant::_RID: + return GDMonoUtils::create_managed_from(p_var->operator RID()); + case Variant::OBJECT: { + return GDMonoUtils::unmanaged_get_managed(p_var->operator Object *()); + } + case Variant::DICTIONARY: + return Dictionary_to_mono_object(p_var->operator Dictionary()); + case Variant::ARRAY: + return (MonoObject *)Array_to_mono_array(p_var->operator Array()); + case Variant::POOL_BYTE_ARRAY: + return (MonoObject *)PoolByteArray_to_mono_array(p_var->operator PoolByteArray()); + case Variant::POOL_INT_ARRAY: + return (MonoObject *)PoolIntArray_to_mono_array(p_var->operator PoolIntArray()); + case Variant::POOL_REAL_ARRAY: + return (MonoObject *)PoolRealArray_to_mono_array(p_var->operator PoolRealArray()); + case Variant::POOL_STRING_ARRAY: + return (MonoObject *)PoolStringArray_to_mono_array(p_var->operator PoolStringArray()); + case Variant::POOL_VECTOR2_ARRAY: + return (MonoObject *)PoolVector2Array_to_mono_array(p_var->operator PoolVector2Array()); + case Variant::POOL_VECTOR3_ARRAY: + return (MonoObject *)PoolVector3Array_to_mono_array(p_var->operator PoolVector3Array()); + case Variant::POOL_COLOR_ARRAY: + return (MonoObject *)PoolColorArray_to_mono_array(p_var->operator PoolColorArray()); + default: + return NULL; + } + break; + case MONO_TYPE_GENERICINST: { + if (CACHED_RAW_MONO_CLASS(Dictionary) == p_type.type_class->get_raw()) { + return Dictionary_to_mono_object(p_var->operator Dictionary()); + } + } break; + } break; + } + + ERR_EXPLAIN(String() + "Attempted to convert Variant to an unmarshallable managed type. Name: \'" + + p_type.type_class->get_name() + "\' Encoding: " + itos(p_type.type_encoding)); + ERR_FAIL_V(NULL); +} + +Variant mono_object_to_variant(MonoObject *p_obj) { + if (!p_obj) + return Variant(); + + GDMonoClass *tclass = GDMono::get_singleton()->get_class(mono_object_get_class(p_obj)); + ERR_FAIL_COND_V(!tclass, Variant()); + + MonoType *raw_type = tclass->get_raw_type(tclass); + + ManagedType type; + + type.type_encoding = mono_type_get_type(raw_type); + type.type_class = tclass; + + return mono_object_to_variant(p_obj, type); +} + +Variant mono_object_to_variant(MonoObject *p_obj, const ManagedType &p_type) { + switch (p_type.type_encoding) { + case MONO_TYPE_BOOLEAN: + return (bool)unbox<MonoBoolean>(p_obj); + + case MONO_TYPE_I1: + return unbox<int8_t>(p_obj); + case MONO_TYPE_I2: + return unbox<int16_t>(p_obj); + case MONO_TYPE_I4: + return unbox<int32_t>(p_obj); + case MONO_TYPE_I8: + return unbox<int64_t>(p_obj); + + case MONO_TYPE_U1: + return unbox<uint8_t>(p_obj); + case MONO_TYPE_U2: + return unbox<uint16_t>(p_obj); + case MONO_TYPE_U4: + return unbox<uint32_t>(p_obj); + case MONO_TYPE_U8: + return unbox<uint64_t>(p_obj); + + case MONO_TYPE_R4: + return unbox<float>(p_obj); + case MONO_TYPE_R8: + return unbox<double>(p_obj); + + case MONO_TYPE_STRING: { + String str = mono_string_to_godot((MonoString *)p_obj); + return str; + } break; + + case MONO_TYPE_VALUETYPE: { + GDMonoClass *tclass = p_type.type_class; + + if (tclass == CACHED_CLASS(Vector2)) + RETURN_UNBOXED_STRUCT(Vector2, p_obj); + + if (tclass == CACHED_CLASS(Rect2)) + RETURN_UNBOXED_STRUCT(Rect2, p_obj); + + if (tclass == CACHED_CLASS(Transform2D)) + RETURN_UNBOXED_STRUCT(Transform2D, p_obj); + + if (tclass == CACHED_CLASS(Vector3)) + RETURN_UNBOXED_STRUCT(Vector3, p_obj); + + if (tclass == CACHED_CLASS(Basis)) + RETURN_UNBOXED_STRUCT(Basis, p_obj); + + if (tclass == CACHED_CLASS(Quat)) + RETURN_UNBOXED_STRUCT(Quat, p_obj); + + if (tclass == CACHED_CLASS(Transform)) + RETURN_UNBOXED_STRUCT(Transform, p_obj); + + if (tclass == CACHED_CLASS(Rect3)) + RETURN_UNBOXED_STRUCT(Rect3, p_obj); + + if (tclass == CACHED_CLASS(Color)) + RETURN_UNBOXED_STRUCT(Color, p_obj); + + if (tclass == CACHED_CLASS(Plane)) + RETURN_UNBOXED_STRUCT(Plane, p_obj); + + if (mono_class_is_enum(tclass->get_raw())) + return unbox<int32_t>(p_obj); + } break; + + case MONO_TYPE_ARRAY: + case MONO_TYPE_SZARRAY: { + MonoArrayType *array_type = mono_type_get_array_type(GDMonoClass::get_raw_type(p_type.type_class)); + + if (array_type->eklass == CACHED_CLASS_RAW(MonoObject)) + return mono_array_to_Array((MonoArray *)p_obj); + + if (array_type->eklass == CACHED_CLASS_RAW(uint8_t)) + return mono_array_to_PoolByteArray((MonoArray *)p_obj); + + if (array_type->eklass == CACHED_CLASS_RAW(int32_t)) + return mono_array_to_PoolIntArray((MonoArray *)p_obj); + + if (array_type->eklass == REAL_T_MONOCLASS) + return mono_array_to_PoolRealArray((MonoArray *)p_obj); + + if (array_type->eklass == CACHED_CLASS_RAW(String)) + return mono_array_to_PoolStringArray((MonoArray *)p_obj); + + if (array_type->eklass == CACHED_CLASS_RAW(Vector2)) + return mono_array_to_PoolVector2Array((MonoArray *)p_obj); + + if (array_type->eklass == CACHED_CLASS_RAW(Vector3)) + return mono_array_to_PoolVector3Array((MonoArray *)p_obj); + + if (array_type->eklass == CACHED_CLASS_RAW(Color)) + return mono_array_to_PoolColorArray((MonoArray *)p_obj); + + ERR_EXPLAIN(String() + "Attempted to convert a managed array of unmarshallable element type to Variant."); + ERR_FAIL_V(Variant()); + } break; + + case MONO_TYPE_CLASS: { + GDMonoClass *type_class = p_type.type_class; + + // GodotObject + if (CACHED_CLASS(GodotObject)->is_assignable_from(type_class)) { + Object *ptr = unbox<Object *>(CACHED_FIELD(GodotObject, ptr)->get_value(p_obj)); + return ptr ? Variant(ptr) : Variant(); + } + + if (CACHED_CLASS(NodePath) == type_class) { + NodePath *ptr = unbox<NodePath *>(CACHED_FIELD(NodePath, ptr)->get_value(p_obj)); + return ptr ? Variant(*ptr) : Variant(); + } + + if (CACHED_CLASS(RID) == type_class) { + RID *ptr = unbox<RID *>(CACHED_FIELD(RID, ptr)->get_value(p_obj)); + return ptr ? Variant(*ptr) : Variant(); + } + } break; + + case MONO_TYPE_GENERICINST: { + if (CACHED_RAW_MONO_CLASS(Dictionary) == p_type.type_class->get_raw()) { + return mono_object_to_Dictionary(p_obj); + } + } break; + } + + ERR_EXPLAIN(String() + "Attempted to convert an unmarshallable managed type to Variant. Name: \'" + + p_type.type_class->get_name() + "\' Encoding: " + itos(p_type.type_encoding)); + ERR_FAIL_V(Variant()); +} + +MonoArray *Array_to_mono_array(const Array &p_array) { + MonoArray *ret = mono_array_new(mono_domain_get(), CACHED_CLASS_RAW(MonoObject), p_array.size()); + + for (int i = 0; i < p_array.size(); i++) { + MonoObject *boxed = variant_to_mono_object(p_array[i]); + mono_array_set(ret, MonoObject *, i, boxed); + } + + return ret; +} + +Array mono_array_to_Array(MonoArray *p_array) { + Array ret; + int length = mono_array_length(p_array); + + for (int i = 0; i < length; i++) { + MonoObject *elem = mono_array_get(p_array, MonoObject *, i); + ret.push_back(mono_object_to_variant(elem)); + } + + return ret; +} + +// TODO Optimize reading/writing from/to PoolArrays + +MonoArray *PoolIntArray_to_mono_array(const PoolIntArray &p_array) { + MonoArray *ret = mono_array_new(mono_domain_get(), CACHED_CLASS_RAW(int32_t), p_array.size()); + + for (int i = 0; i < p_array.size(); i++) { + mono_array_set(ret, int32_t, i, p_array[i]); + } + + return ret; +} + +PoolIntArray mono_array_to_PoolIntArray(MonoArray *p_array) { + PoolIntArray ret; + int length = mono_array_length(p_array); + + for (int i = 0; i < length; i++) { + int32_t elem = mono_array_get(p_array, int32_t, i); + ret.push_back(elem); + } + + return ret; +} + +MonoArray *PoolByteArray_to_mono_array(const PoolByteArray &p_array) { + MonoArray *ret = mono_array_new(mono_domain_get(), CACHED_CLASS_RAW(uint8_t), p_array.size()); + + for (int i = 0; i < p_array.size(); i++) { + mono_array_set(ret, uint8_t, i, p_array[i]); + } + + return ret; +} + +PoolByteArray mono_array_to_PoolByteArray(MonoArray *p_array) { + PoolByteArray ret; + int length = mono_array_length(p_array); + + for (int i = 0; i < length; i++) { + uint8_t elem = mono_array_get(p_array, uint8_t, i); + ret.push_back(elem); + } + + return ret; +} + +MonoArray *PoolRealArray_to_mono_array(const PoolRealArray &p_array) { + MonoArray *ret = mono_array_new(mono_domain_get(), REAL_T_MONOCLASS, p_array.size()); + + for (int i = 0; i < p_array.size(); i++) { + mono_array_set(ret, real_t, i, p_array[i]); + } + + return ret; +} + +PoolRealArray mono_array_to_PoolRealArray(MonoArray *p_array) { + PoolRealArray ret; + int length = mono_array_length(p_array); + + for (int i = 0; i < length; i++) { + real_t elem = mono_array_get(p_array, real_t, i); + ret.push_back(elem); + } + + return ret; +} + +MonoArray *PoolStringArray_to_mono_array(const PoolStringArray &p_array) { + MonoArray *ret = mono_array_new(mono_domain_get(), CACHED_CLASS_RAW(String), p_array.size()); + + for (int i = 0; i < p_array.size(); i++) { + MonoString *boxed = mono_string_from_godot(p_array[i]); + mono_array_set(ret, MonoString *, i, boxed); + } + + return ret; +} + +PoolStringArray mono_array_to_PoolStringArray(MonoArray *p_array) { + PoolStringArray ret; + int length = mono_array_length(p_array); + + for (int i = 0; i < length; i++) { + MonoString *elem = mono_array_get(p_array, MonoString *, i); + ret.push_back(mono_string_to_godot(elem)); + } + + return ret; +} + +MonoArray *PoolColorArray_to_mono_array(const PoolColorArray &p_array) { + MonoArray *ret = mono_array_new(mono_domain_get(), CACHED_CLASS_RAW(Color), p_array.size()); + + for (int i = 0; i < p_array.size(); i++) { +#ifdef YOLOCOPY + mono_array_set(ret, Color, i, p_array[i]); +#else + real_t *raw = (real_t *)mono_array_addr_with_size(ret, sizeof(real_t) * 4, i); + const Color &elem = p_array[i]; + raw[0] = elem.r; + raw[1] = elem.g; + raw[2] = elem.b; + raw[3] = elem.a; +#endif + } + + return ret; +} + +PoolColorArray mono_array_to_PoolColorArray(MonoArray *p_array) { + PoolColorArray ret; + int length = mono_array_length(p_array); + + for (int i = 0; i < length; i++) { + real_t *raw_elem = (real_t *)mono_array_addr_with_size(p_array, sizeof(real_t) * 4, i); + MARSHALLED_IN(Color, raw_elem, elem); + ret.push_back(elem); + } + + return ret; +} + +MonoArray *PoolVector2Array_to_mono_array(const PoolVector2Array &p_array) { + MonoArray *ret = mono_array_new(mono_domain_get(), CACHED_CLASS_RAW(Vector2), p_array.size()); + + for (int i = 0; i < p_array.size(); i++) { +#ifdef YOLOCOPY + mono_array_set(ret, Vector2, i, p_array[i]); +#else + real_t *raw = (real_t *)mono_array_addr_with_size(ret, sizeof(real_t) * 2, i); + const Vector2 &elem = p_array[i]; + raw[0] = elem.x; + raw[1] = elem.y; +#endif + } + + return ret; +} + +PoolVector2Array mono_array_to_PoolVector2Array(MonoArray *p_array) { + PoolVector2Array ret; + int length = mono_array_length(p_array); + + for (int i = 0; i < length; i++) { + real_t *raw_elem = (real_t *)mono_array_addr_with_size(p_array, sizeof(real_t) * 2, i); + MARSHALLED_IN(Vector2, raw_elem, elem); + ret.push_back(elem); + } + + return ret; +} + +MonoArray *PoolVector3Array_to_mono_array(const PoolVector3Array &p_array) { + MonoArray *ret = mono_array_new(mono_domain_get(), CACHED_CLASS_RAW(Vector3), p_array.size()); + + for (int i = 0; i < p_array.size(); i++) { +#ifdef YOLOCOPY + mono_array_set(ret, Vector3, i, p_array[i]); +#else + real_t *raw = (real_t *)mono_array_addr_with_size(ret, sizeof(real_t) * 3, i); + const Vector3 &elem = p_array[i]; + raw[0] = elem.x; + raw[1] = elem.y; + raw[2] = elem.z; +#endif + } + + return ret; +} + +PoolVector3Array mono_array_to_PoolVector3Array(MonoArray *p_array) { + PoolVector3Array ret; + int length = mono_array_length(p_array); + + for (int i = 0; i < length; i++) { + real_t *raw_elem = (real_t *)mono_array_addr_with_size(p_array, sizeof(real_t) * 3, i); + MARSHALLED_IN(Vector3, raw_elem, elem); + ret.push_back(elem); + } + + return ret; +} + +MonoObject *Dictionary_to_mono_object(const Dictionary &p_dict) { + MonoArray *keys = mono_array_new(mono_domain_get(), CACHED_CLASS_RAW(MonoObject), p_dict.size()); + MonoArray *values = mono_array_new(mono_domain_get(), CACHED_CLASS_RAW(MonoObject), p_dict.size()); + + int i = 0; + const Variant *dkey = NULL; + while ((dkey = p_dict.next(dkey))) { + mono_array_set(keys, MonoObject *, i, variant_to_mono_object(dkey)); + mono_array_set(values, MonoObject *, i, variant_to_mono_object(p_dict[*dkey])); + i++; + } + + GDMonoUtils::MarshalUtils_ArraysToDict arrays_to_dict = CACHED_METHOD_THUNK(MarshalUtils, ArraysToDictionary); + + MonoObject *ex = NULL; + MonoObject *ret = arrays_to_dict(keys, values, &ex); + + if (ex) { + mono_print_unhandled_exception(ex); + ERR_FAIL_V(NULL); + } + + return ret; +} + +Dictionary mono_object_to_Dictionary(MonoObject *p_dict) { + Dictionary ret; + + GDMonoUtils::MarshalUtils_DictToArrays dict_to_arrays = CACHED_METHOD_THUNK(MarshalUtils, DictionaryToArrays); + + MonoArray *keys = NULL; + MonoArray *values = NULL; + MonoObject *ex = NULL; + dict_to_arrays(p_dict, &keys, &values, &ex); + + if (ex) { + mono_print_unhandled_exception(ex); + ERR_FAIL_V(Dictionary()); + } + + int length = mono_array_length(keys); + + for (int i = 0; i < length; i++) { + MonoObject *key_obj = mono_array_get(keys, MonoObject *, i); + MonoObject *value_obj = mono_array_get(values, MonoObject *, i); + + Variant key = key_obj ? mono_object_to_variant(key_obj) : Variant(); + Variant value = value_obj ? mono_object_to_variant(value_obj) : Variant(); + + ret[key] = value; + } + + return ret; +} +} diff --git a/modules/mono/mono_gd/gd_mono_marshal.h b/modules/mono/mono_gd/gd_mono_marshal.h new file mode 100644 index 0000000000..9f403b787f --- /dev/null +++ b/modules/mono/mono_gd/gd_mono_marshal.h @@ -0,0 +1,219 @@ +/*************************************************************************/ +/* gd_mono_marshal.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 GDMONOMARSHAL_H +#define GDMONOMARSHAL_H + +#include "gd_mono.h" +#include "gd_mono_utils.h" +#include "variant.h" + +namespace GDMonoMarshal { + +template <typename T> +T unbox(MonoObject *p_obj) { + return *(T *)mono_object_unbox(p_obj); +} + +#define BOX_DOUBLE(x) mono_value_box(mono_domain_get(), CACHED_CLASS_RAW(double), &x) +#define BOX_FLOAT(x) mono_value_box(mono_domain_get(), CACHED_CLASS_RAW(float), &x) +#define BOX_INT64(x) mono_value_box(mono_domain_get(), CACHED_CLASS_RAW(int64_t), &x) +#define BOX_INT32(x) mono_value_box(mono_domain_get(), CACHED_CLASS_RAW(int32_t), &x) +#define BOX_INT16(x) mono_value_box(mono_domain_get(), CACHED_CLASS_RAW(int16_t), &x) +#define BOX_INT8(x) mono_value_box(mono_domain_get(), CACHED_CLASS_RAW(int8_t), &x) +#define BOX_UINT64(x) mono_value_box(mono_domain_get(), CACHED_CLASS_RAW(uint64_t), &x) +#define BOX_UINT32(x) mono_value_box(mono_domain_get(), CACHED_CLASS_RAW(uint32_t), &x) +#define BOX_UINT16(x) mono_value_box(mono_domain_get(), CACHED_CLASS_RAW(uint16_t), &x) +#define BOX_UINT8(x) mono_value_box(mono_domain_get(), CACHED_CLASS_RAW(uint8_t), &x) +#define BOX_BOOLEAN(x) mono_value_box(mono_domain_get(), CACHED_CLASS_RAW(bool), &x) +#define BOX_PTR(x) mono_value_box(mono_domain_get(), CACHED_CLASS_RAW(IntPtr), x) +#define BOX_ENUM(m_enum_class, x) mono_value_box(mono_domain_get(), m_enum_class, &x) + +Variant::Type managed_to_variant_type(const ManagedType &p_type); + +// String + +String mono_to_utf8_string(MonoString *p_mono_string); +String mono_to_utf16_string(MonoString *p_mono_string); + +_FORCE_INLINE_ String mono_string_to_godot(MonoString *p_mono_string) { + if (sizeof(CharType) == 2) + return mono_to_utf16_string(p_mono_string); + + return mono_to_utf8_string(p_mono_string); +} + +_FORCE_INLINE_ MonoString *mono_from_utf8_string(const String &p_string) { + return mono_string_new(mono_domain_get(), p_string.utf8().get_data()); +} + +_FORCE_INLINE_ MonoString *mono_from_utf16_string(const String &p_string) { + return mono_string_from_utf16((mono_unichar2 *)p_string.c_str()); +} + +_FORCE_INLINE_ MonoString *mono_string_from_godot(const String &p_string) { + if (sizeof(CharType) == 2) + return mono_from_utf16_string(p_string); + + return mono_from_utf8_string(p_string); +} + +// Variant + +MonoObject *variant_to_mono_object(const Variant *p_var, const ManagedType &p_type); +MonoObject *variant_to_mono_object(const Variant *p_var); + +_FORCE_INLINE_ MonoObject *variant_to_mono_object(Variant p_var) { + return variant_to_mono_object(&p_var); +} + +Variant mono_object_to_variant(MonoObject *p_obj); +Variant mono_object_to_variant(MonoObject *p_obj, const ManagedType &p_type); + +// Array + +MonoArray *Array_to_mono_array(const Array &p_array); +Array mono_array_to_Array(MonoArray *p_array); + +// PoolIntArray + +MonoArray *PoolIntArray_to_mono_array(const PoolIntArray &p_array); +PoolIntArray mono_array_to_PoolIntArray(MonoArray *p_array); + +// PoolByteArray + +MonoArray *PoolByteArray_to_mono_array(const PoolByteArray &p_array); +PoolByteArray mono_array_to_PoolByteArray(MonoArray *p_array); + +// PoolRealArray + +MonoArray *PoolRealArray_to_mono_array(const PoolRealArray &p_array); +PoolRealArray mono_array_to_PoolRealArray(MonoArray *p_array); + +// PoolStringArray + +MonoArray *PoolStringArray_to_mono_array(const PoolStringArray &p_array); +PoolStringArray mono_array_to_PoolStringArray(MonoArray *p_array); + +// PoolColorArray + +MonoArray *PoolColorArray_to_mono_array(const PoolColorArray &p_array); +PoolColorArray mono_array_to_PoolColorArray(MonoArray *p_array); + +// PoolVector2Array + +MonoArray *PoolVector2Array_to_mono_array(const PoolVector2Array &p_array); +PoolVector2Array mono_array_to_PoolVector2Array(MonoArray *p_array); + +// PoolVector3Array + +MonoArray *PoolVector3Array_to_mono_array(const PoolVector3Array &p_array); +PoolVector3Array mono_array_to_PoolVector3Array(MonoArray *p_array); + +// Dictionary + +MonoObject *Dictionary_to_mono_object(const Dictionary &p_dict); +Dictionary mono_object_to_Dictionary(MonoObject *p_dict); + +#ifdef YOLO_COPY +#define MARSHALLED_OUT(m_t, m_in, m_out) m_t *m_out = (m_t *)&m_in; +#define MARSHALLED_IN(m_t, m_in, m_out) m_t m_out = *reinterpret_cast<m_t *>(m_in); +#else + +// Expects m_in to be of type float* + +#define MARSHALLED_OUT(m_t, m_in, m_out) MARSHALLED_OUT_##m_t(m_in, m_out) +#define MARSHALLED_IN(m_t, m_in, m_out) MARSHALLED_IN_##m_t(m_in, m_out) + +// Vector2 + +#define MARSHALLED_OUT_Vector2(m_in, m_out) real_t m_out[2] = { m_in.x, m_in.y }; +#define MARSHALLED_IN_Vector2(m_in, m_out) Vector2 m_out(m_in[0], m_in[1]); + +// Rect2 + +#define MARSHALLED_OUT_Rect2(m_in, m_out) real_t m_out[4] = { m_in.position.x, m_in.position.y, m_in.size.width, m_in.size.height }; +#define MARSHALLED_IN_Rect2(m_in, m_out) Rect2 m_out(m_in[0], m_in[1], m_in[2], m_in[3]); + +// Transform2D + +#define MARSHALLED_OUT_Transform2D(m_in, m_out) real_t m_out[6] = { m_in[0].x, m_in[0].y, m_in[1].x, m_in[1].y, m_in[2].x, m_in[2].y }; +#define MARSHALLED_IN_Transform2D(m_in, m_out) Transform2D m_out(m_in[0], m_in[1], m_in[2], m_in[3], m_in[4], m_in[5]); + +// Vector3 + +#define MARSHALLED_OUT_Vector3(m_in, m_out) real_t m_out[3] = { m_in.x, m_in.y, m_in.z }; +#define MARSHALLED_IN_Vector3(m_in, m_out) Vector3 m_out(m_in[0], m_in[1], m_in[2]); + +// Basis + +#define MARSHALLED_OUT_Basis(m_in, m_out) real_t m_out[9] = { \ + m_in[0].x, m_in[0].y, m_in[0].z, \ + m_in[1].x, m_in[1].y, m_in[1].z, \ + m_in[2].x, m_in[2].y, m_in[2].z \ +}; +#define MARSHALLED_IN_Basis(m_in, m_out) Basis m_out(m_in[0], m_in[1], m_in[2], m_in[3], m_in[4], m_in[5], m_in[6], m_in[7], m_in[8]); + +// Quat + +#define MARSHALLED_OUT_Quat(m_in, m_out) real_t m_out[4] = { m_in.x, m_in.y, m_in.z, m_in.w }; +#define MARSHALLED_IN_Quat(m_in, m_out) Quat m_out(m_in[0], m_in[1], m_in[2], m_in[3]); + +// Transform + +#define MARSHALLED_OUT_Transform(m_in, m_out) real_t m_out[12] = { \ + m_in.basis[0].x, m_in.basis[0].y, m_in.basis[0].z, \ + m_in.basis[1].x, m_in.basis[1].y, m_in.basis[1].z, \ + m_in.basis[2].x, m_in.basis[2].y, m_in.basis[2].z, \ + m_in.origin.x, m_in.origin.y, m_in.origin.z \ +}; +#define MARSHALLED_IN_Transform(m_in, m_out) Transform m_out( \ + Basis(m_in[0], m_in[1], m_in[2], m_in[3], m_in[4], m_in[5], m_in[6], m_in[7], m_in[8]), \ + Vector3(m_in[9], m_in[10], m_in[11])); + +// Rect3 + +#define MARSHALLED_OUT_Rect3(m_in, m_out) real_t m_out[6] = { m_in.position.x, m_in.position.y, m_in.position.z, m_in.size.x, m_in.size.y, m_in.size.z }; +#define MARSHALLED_IN_Rect3(m_in, m_out) Rect3 m_out(Vector3(m_in[0], m_in[1], m_in[2]), Vector3(m_in[3], m_in[4], m_in[5])); + +// Color + +#define MARSHALLED_OUT_Color(m_in, m_out) real_t m_out[4] = { m_in.r, m_in.g, m_in.b, m_in.a }; +#define MARSHALLED_IN_Color(m_in, m_out) Color m_out(m_in[0], m_in[1], m_in[2], m_in[3]); + +// Plane + +#define MARSHALLED_OUT_Plane(m_in, m_out) real_t m_out[4] = { m_in.normal.x, m_in.normal.y, m_in.normal.z, m_in.d }; +#define MARSHALLED_IN_Plane(m_in, m_out) Plane m_out(m_in[0], m_in[1], m_in[2], m_in[3]); + +#endif + +} // GDMonoMarshal + +#endif // GDMONOMARSHAL_H diff --git a/modules/mono/mono_gd/gd_mono_method.cpp b/modules/mono/mono_gd/gd_mono_method.cpp new file mode 100644 index 0000000000..6468e0d3d9 --- /dev/null +++ b/modules/mono/mono_gd/gd_mono_method.cpp @@ -0,0 +1,192 @@ +/*************************************************************************/ +/* gd_mono_method.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 "gd_mono_method.h" + +#include "gd_mono_class.h" +#include "gd_mono_marshal.h" + +void GDMonoMethod::_update_signature() { + // Apparently MonoMethodSignature needs not to be freed. + // mono_method_signature caches the result, we don't need to cache it ourselves. + + MonoMethodSignature *method_sig = mono_method_signature(mono_method); + _update_signature(method_sig); +} + +void GDMonoMethod::_update_signature(MonoMethodSignature *p_method_sig) { + is_instance = mono_signature_is_instance(p_method_sig); + params_count = mono_signature_get_param_count(p_method_sig); + + MonoType *ret_type = mono_signature_get_return_type(p_method_sig); + if (ret_type) { + return_type.type_encoding = mono_type_get_type(ret_type); + + if (return_type.type_encoding != MONO_TYPE_VOID) { + MonoClass *ret_type_class = mono_class_from_mono_type(ret_type); + return_type.type_class = GDMono::get_singleton()->get_class(ret_type_class); + } + } + + void *iter = NULL; + MonoType *param_raw_type; + while ((param_raw_type = mono_signature_get_params(p_method_sig, &iter)) != NULL) { + ManagedType param_type; + + param_type.type_encoding = mono_type_get_type(param_raw_type); + + if (param_type.type_encoding != MONO_TYPE_VOID) { + MonoClass *param_type_class = mono_class_from_mono_type(param_raw_type); + param_type.type_class = GDMono::get_singleton()->get_class(param_type_class); + } + + param_types.push_back(param_type); + } +} + +void *GDMonoMethod::get_thunk() { + return mono_method_get_unmanaged_thunk(mono_method); +} + +MonoObject *GDMonoMethod::invoke(MonoObject *p_object, const Variant **p_params, MonoObject **r_exc) { + if (get_return_type().type_encoding != MONO_TYPE_VOID || get_parameters_count() > 0) { + MonoArray *params = mono_array_new(mono_domain_get(), CACHED_CLASS_RAW(MonoObject), get_parameters_count()); + + for (int i = 0; i < params_count; i++) { + MonoObject *boxed_param = GDMonoMarshal::variant_to_mono_object(p_params[i], param_types[i]); + mono_array_set(params, MonoObject *, i, boxed_param); + } + + return mono_runtime_invoke_array(mono_method, p_object, params, r_exc); + } else { + mono_runtime_invoke(mono_method, p_object, NULL, r_exc); + return NULL; + } +} + +MonoObject *GDMonoMethod::invoke(MonoObject *p_object, MonoObject **r_exc) { + ERR_FAIL_COND_V(get_parameters_count() > 0, NULL); + return invoke_raw(p_object, NULL, r_exc); +} + +MonoObject *GDMonoMethod::invoke_raw(MonoObject *p_object, void **p_params, MonoObject **r_exc) { + return mono_runtime_invoke(mono_method, p_object, p_params, r_exc); +} + +bool GDMonoMethod::has_attribute(GDMonoClass *p_attr_class) { + ERR_FAIL_NULL_V(p_attr_class, false); + + if (!attrs_fetched) + fetch_attributes(); + + if (!attributes) + return false; + + return mono_custom_attrs_has_attr(attributes, p_attr_class->get_raw()); +} + +MonoObject *GDMonoMethod::get_attribute(GDMonoClass *p_attr_class) { + ERR_FAIL_NULL_V(p_attr_class, NULL); + + if (!attrs_fetched) + fetch_attributes(); + + if (!attributes) + return NULL; + + return mono_custom_attrs_get_attr(attributes, p_attr_class->get_raw()); +} + +void GDMonoMethod::fetch_attributes() { + ERR_FAIL_COND(attributes != NULL); + attributes = mono_custom_attrs_from_method(mono_method); + attrs_fetched = true; +} + +String GDMonoMethod::get_full_name(bool p_signature) const { + char *res = mono_method_full_name(mono_method, p_signature); + String full_name(res); + mono_free(res); + return full_name; +} + +String GDMonoMethod::get_full_name_no_class() const { + String res; + + MonoMethodSignature *method_sig = mono_method_signature(mono_method); + + char *ret_str = mono_type_full_name(mono_signature_get_return_type(method_sig)); + res += ret_str; + mono_free(ret_str); + + res += " "; + res += name; + res += "("; + + char *sig_desc = mono_signature_get_desc(method_sig, true); + res += sig_desc; + mono_free(sig_desc); + + res += ")"; + + return res; +} + +String GDMonoMethod::get_ret_type_full_name() const { + MonoMethodSignature *method_sig = mono_method_signature(mono_method); + char *ret_str = mono_type_full_name(mono_signature_get_return_type(method_sig)); + String res = ret_str; + mono_free(ret_str); + return res; +} + +String GDMonoMethod::get_signature_desc(bool p_namespaces) const { + MonoMethodSignature *method_sig = mono_method_signature(mono_method); + char *sig_desc = mono_signature_get_desc(method_sig, p_namespaces); + String res = sig_desc; + mono_free(sig_desc); + return res; +} + +GDMonoMethod::GDMonoMethod(StringName p_name, MonoMethod *p_method) { + name = p_name; + + mono_method = p_method; + + attrs_fetched = false; + attributes = NULL; + + _update_signature(); +} + +GDMonoMethod::~GDMonoMethod() { + if (attributes) { + mono_custom_attrs_free(attributes); + } +} diff --git a/modules/mono/mono_gd/gd_mono_method.h b/modules/mono/mono_gd/gd_mono_method.h new file mode 100644 index 0000000000..ea4bc8e707 --- /dev/null +++ b/modules/mono/mono_gd/gd_mono_method.h @@ -0,0 +1,81 @@ +/*************************************************************************/ +/* gd_mono_method.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 GD_MONO_METHOD_H +#define GD_MONO_METHOD_H + +#include "gd_mono.h" +#include "gd_mono_header.h" + +class GDMonoMethod { + + StringName name; + + bool is_instance; + int params_count; + ManagedType return_type; + Vector<ManagedType> param_types; + + bool attrs_fetched; + MonoCustomAttrInfo *attributes; + + void _update_signature(); + void _update_signature(MonoMethodSignature *p_method_sig); + + friend class GDMonoClass; + + MonoMethod *mono_method; + +public: + _FORCE_INLINE_ StringName get_name() { return name; } + + _FORCE_INLINE_ bool is_static() { return !is_instance; } + _FORCE_INLINE_ int get_parameters_count() { return params_count; } + _FORCE_INLINE_ ManagedType get_return_type() { return return_type; } + + void *get_thunk(); + + MonoObject *invoke(MonoObject *p_object, const Variant **p_params, MonoObject **r_exc = NULL); + MonoObject *invoke(MonoObject *p_object, MonoObject **r_exc = NULL); + MonoObject *invoke_raw(MonoObject *p_object, void **p_params, MonoObject **r_exc = NULL); + + bool has_attribute(GDMonoClass *p_attr_class); + MonoObject *get_attribute(GDMonoClass *p_attr_class); + void fetch_attributes(); + + String get_full_name(bool p_signature = false) const; + String get_full_name_no_class() const; + String get_ret_type_full_name() const; + String get_signature_desc(bool p_namespaces = false) const; + + GDMonoMethod(StringName p_name, MonoMethod *p_method); + ~GDMonoMethod(); +}; + +#endif // GD_MONO_METHOD_H diff --git a/modules/mono/mono_gd/gd_mono_utils.cpp b/modules/mono/mono_gd/gd_mono_utils.cpp new file mode 100644 index 0000000000..53e45002c4 --- /dev/null +++ b/modules/mono/mono_gd/gd_mono_utils.cpp @@ -0,0 +1,367 @@ +/*************************************************************************/ +/* gd_mono_utils.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 "gd_mono_utils.h" + +#include "os/dir_access.h" +#include "project_settings.h" +#include "reference.h" + +#include "../csharp_script.h" +#include "gd_mono.h" +#include "gd_mono_class.h" +#include "gd_mono_marshal.h" + +namespace GDMonoUtils { + +MonoCache mono_cache; + +#define CACHE_AND_CHECK(m_var, m_val) \ + { \ + m_var = m_val; \ + if (!m_var) ERR_PRINT("Mono Cache: Member " #m_var " is null. This is really bad!"); \ + } + +#define CACHE_CLASS_AND_CHECK(m_class, m_val) CACHE_AND_CHECK(GDMonoUtils::mono_cache.class_##m_class, m_val) +#define CACHE_NS_CLASS_AND_CHECK(m_ns, m_class, m_val) CACHE_AND_CHECK(GDMonoUtils::mono_cache.class_##m_ns##_##m_class, m_val) +#define CACHE_RAW_MONO_CLASS_AND_CHECK(m_class, m_val) CACHE_AND_CHECK(GDMonoUtils::mono_cache.rawclass_##m_class, m_val) +#define CACHE_FIELD_AND_CHECK(m_class, m_field, m_val) CACHE_AND_CHECK(GDMonoUtils::mono_cache.field_##m_class##_##m_field, m_val) +#define CACHE_METHOD_THUNK_AND_CHECK(m_class, m_method, m_val) CACHE_AND_CHECK(GDMonoUtils::mono_cache.methodthunk_##m_class##_##m_method, m_val) + +void MonoCache::clear_members() { + + class_MonoObject = NULL; + class_bool = NULL; + class_int8_t = NULL; + class_int16_t = NULL; + class_int32_t = NULL; + class_int64_t = NULL; + class_uint8_t = NULL; + class_uint16_t = NULL; + class_uint32_t = NULL; + class_uint64_t = NULL; + class_float = NULL; + class_double = NULL; + class_String = NULL; + class_IntPtr = NULL; + + rawclass_Dictionary = NULL; + + class_Vector2 = NULL; + class_Rect2 = NULL; + class_Transform2D = NULL; + class_Vector3 = NULL; + class_Basis = NULL; + class_Quat = NULL; + class_Transform = NULL; + class_Rect3 = NULL; + class_Color = NULL; + class_Plane = NULL; + class_NodePath = NULL; + class_RID = NULL; + class_GodotObject = NULL; + class_GodotReference = NULL; + class_Node = NULL; + class_Control = NULL; + class_Spatial = NULL; + class_WeakRef = NULL; + class_MarshalUtils = NULL; + + class_ExportAttribute = NULL; + field_ExportAttribute_hint = NULL; + field_ExportAttribute_hint_string = NULL; + class_ToolAttribute = NULL; + class_RemoteAttribute = NULL; + class_SyncAttribute = NULL; + class_MasterAttribute = NULL; + class_SlaveAttribute = NULL; + class_GodotMethodAttribute = NULL; + field_GodotMethodAttribute_methodName = NULL; + + field_GodotObject_ptr = NULL; + field_NodePath_ptr = NULL; + field_Image_ptr = NULL; + field_RID_ptr = NULL; + + methodthunk_MarshalUtils_DictionaryToArrays = NULL; + methodthunk_MarshalUtils_ArraysToDictionary = NULL; + methodthunk_SignalAwaiter_SignalCallback = NULL; + methodthunk_SignalAwaiter_FailureCallback = NULL; + methodthunk_GodotTaskScheduler_Activate = NULL; + + task_scheduler_handle = Ref<MonoGCHandle>(); +} + +#define GODOT_API_CLASS(m_class) (GDMono::get_singleton()->get_api_assembly()->get_class(BINDINGS_NAMESPACE, #m_class)) + +void update_corlib_cache() { + + CACHE_CLASS_AND_CHECK(MonoObject, GDMono::get_singleton()->get_corlib_assembly()->get_class(mono_get_object_class())); + CACHE_CLASS_AND_CHECK(bool, GDMono::get_singleton()->get_corlib_assembly()->get_class(mono_get_boolean_class())); + CACHE_CLASS_AND_CHECK(int8_t, GDMono::get_singleton()->get_corlib_assembly()->get_class(mono_get_sbyte_class())); + CACHE_CLASS_AND_CHECK(int16_t, GDMono::get_singleton()->get_corlib_assembly()->get_class(mono_get_int16_class())); + CACHE_CLASS_AND_CHECK(int32_t, GDMono::get_singleton()->get_corlib_assembly()->get_class(mono_get_int32_class())); + CACHE_CLASS_AND_CHECK(int64_t, GDMono::get_singleton()->get_corlib_assembly()->get_class(mono_get_int64_class())); + CACHE_CLASS_AND_CHECK(uint8_t, GDMono::get_singleton()->get_corlib_assembly()->get_class(mono_get_byte_class())); + CACHE_CLASS_AND_CHECK(uint16_t, GDMono::get_singleton()->get_corlib_assembly()->get_class(mono_get_uint16_class())); + CACHE_CLASS_AND_CHECK(uint32_t, GDMono::get_singleton()->get_corlib_assembly()->get_class(mono_get_uint32_class())); + CACHE_CLASS_AND_CHECK(uint64_t, GDMono::get_singleton()->get_corlib_assembly()->get_class(mono_get_uint64_class())); + CACHE_CLASS_AND_CHECK(float, GDMono::get_singleton()->get_corlib_assembly()->get_class(mono_get_single_class())); + CACHE_CLASS_AND_CHECK(double, GDMono::get_singleton()->get_corlib_assembly()->get_class(mono_get_double_class())); + CACHE_CLASS_AND_CHECK(String, GDMono::get_singleton()->get_corlib_assembly()->get_class(mono_get_string_class())); + CACHE_CLASS_AND_CHECK(IntPtr, GDMono::get_singleton()->get_corlib_assembly()->get_class(mono_get_intptr_class())); +} + +void update_godot_api_cache() { + + CACHE_CLASS_AND_CHECK(Vector2, GODOT_API_CLASS(Vector2)); + CACHE_CLASS_AND_CHECK(Rect2, GODOT_API_CLASS(Rect2)); + CACHE_CLASS_AND_CHECK(Transform2D, GODOT_API_CLASS(Transform2D)); + CACHE_CLASS_AND_CHECK(Vector3, GODOT_API_CLASS(Vector3)); + CACHE_CLASS_AND_CHECK(Basis, GODOT_API_CLASS(Basis)); + CACHE_CLASS_AND_CHECK(Quat, GODOT_API_CLASS(Quat)); + CACHE_CLASS_AND_CHECK(Transform, GODOT_API_CLASS(Transform)); + CACHE_CLASS_AND_CHECK(Rect3, GODOT_API_CLASS(Rect3)); + CACHE_CLASS_AND_CHECK(Color, GODOT_API_CLASS(Color)); + CACHE_CLASS_AND_CHECK(Plane, GODOT_API_CLASS(Plane)); + CACHE_CLASS_AND_CHECK(NodePath, GODOT_API_CLASS(NodePath)); + CACHE_CLASS_AND_CHECK(RID, GODOT_API_CLASS(NodePath)); + CACHE_CLASS_AND_CHECK(GodotObject, GODOT_API_CLASS(Object)); + CACHE_CLASS_AND_CHECK(GodotReference, GODOT_API_CLASS(Reference)); + CACHE_CLASS_AND_CHECK(Node, GODOT_API_CLASS(Node)); + CACHE_CLASS_AND_CHECK(Control, GODOT_API_CLASS(Control)); + CACHE_CLASS_AND_CHECK(Spatial, GODOT_API_CLASS(Spatial)); + CACHE_CLASS_AND_CHECK(WeakRef, GODOT_API_CLASS(WeakRef)); + CACHE_CLASS_AND_CHECK(MarshalUtils, GODOT_API_CLASS(MarshalUtils)); + + // Attributes + CACHE_CLASS_AND_CHECK(ExportAttribute, GODOT_API_CLASS(ExportAttribute)); + CACHE_FIELD_AND_CHECK(ExportAttribute, hint, CACHED_CLASS(ExportAttribute)->get_field("hint")); + CACHE_FIELD_AND_CHECK(ExportAttribute, hint_string, CACHED_CLASS(ExportAttribute)->get_field("hint_string")); + CACHE_CLASS_AND_CHECK(ToolAttribute, GODOT_API_CLASS(ToolAttribute)); + CACHE_CLASS_AND_CHECK(RemoteAttribute, GODOT_API_CLASS(RemoteAttribute)); + CACHE_CLASS_AND_CHECK(SyncAttribute, GODOT_API_CLASS(SyncAttribute)); + CACHE_CLASS_AND_CHECK(MasterAttribute, GODOT_API_CLASS(MasterAttribute)); + CACHE_CLASS_AND_CHECK(SlaveAttribute, GODOT_API_CLASS(SlaveAttribute)); + CACHE_CLASS_AND_CHECK(GodotMethodAttribute, GODOT_API_CLASS(GodotMethodAttribute)); + CACHE_FIELD_AND_CHECK(GodotMethodAttribute, methodName, CACHED_CLASS(GodotMethodAttribute)->get_field("methodName")); + + CACHE_FIELD_AND_CHECK(GodotObject, ptr, CACHED_CLASS(GodotObject)->get_field(BINDINGS_PTR_FIELD)); + CACHE_FIELD_AND_CHECK(NodePath, ptr, CACHED_CLASS(NodePath)->get_field(BINDINGS_PTR_FIELD)); + CACHE_FIELD_AND_CHECK(RID, ptr, CACHED_CLASS(RID)->get_field(BINDINGS_PTR_FIELD)); + + CACHE_METHOD_THUNK_AND_CHECK(MarshalUtils, DictionaryToArrays, (MarshalUtils_DictToArrays)CACHED_CLASS(MarshalUtils)->get_method("DictionaryToArrays", 3)->get_thunk()); + CACHE_METHOD_THUNK_AND_CHECK(MarshalUtils, ArraysToDictionary, (MarshalUtils_ArraysToDict)CACHED_CLASS(MarshalUtils)->get_method("ArraysToDictionary", 2)->get_thunk()); + CACHE_METHOD_THUNK_AND_CHECK(SignalAwaiter, SignalCallback, (SignalAwaiter_SignalCallback)GODOT_API_CLASS(SignalAwaiter)->get_method("SignalCallback", 1)->get_thunk()); + CACHE_METHOD_THUNK_AND_CHECK(SignalAwaiter, FailureCallback, (SignalAwaiter_FailureCallback)GODOT_API_CLASS(SignalAwaiter)->get_method("FailureCallback", 0)->get_thunk()); + CACHE_METHOD_THUNK_AND_CHECK(GodotTaskScheduler, Activate, (GodotTaskScheduler_Activate)GODOT_API_CLASS(GodotTaskScheduler)->get_method("Activate", 0)->get_thunk()); + + { + /* + * TODO Right now we only support Dictionary<object, object>. + * It would be great if we could support other key/value types + * without forcing the user to copy the entries. + */ + GDMonoMethod *method_get_dict_type = CACHED_CLASS(MarshalUtils)->get_method("GetDictionaryType", 0); + ERR_FAIL_NULL(method_get_dict_type); + MonoReflectionType *dict_refl_type = (MonoReflectionType *)method_get_dict_type->invoke(NULL); + ERR_FAIL_NULL(dict_refl_type); + MonoType *dict_type = mono_reflection_type_get_type(dict_refl_type); + ERR_FAIL_NULL(dict_type); + + CACHE_RAW_MONO_CLASS_AND_CHECK(Dictionary, mono_class_from_mono_type(dict_type)); + } + + MonoObject *task_scheduler = mono_object_new(SCRIPTS_DOMAIN, GODOT_API_CLASS(GodotTaskScheduler)->get_raw()); + mono_runtime_object_init(task_scheduler); + mono_cache.task_scheduler_handle = MonoGCHandle::create_strong(task_scheduler); +} + +void clear_cache() { + mono_cache.cleanup(); + mono_cache.clear_members(); +} + +MonoObject *unmanaged_get_managed(Object *unmanaged) { + if (unmanaged) { + if (unmanaged->get_script_instance()) { + CSharpInstance *cs_instance = CAST_CSHARP_INSTANCE(unmanaged->get_script_instance()); + + if (cs_instance) { + return cs_instance->get_mono_object(); + } + } + + // Only called if the owner does not have a CSharpInstance + void *data = unmanaged->get_script_instance_binding(CSharpLanguage::get_singleton()->get_language_index()); + + if (data) { + return ((Map<Object *, Ref<MonoGCHandle> >::Element *)data)->value()->get_target(); + } + } + + return NULL; +} + +void set_main_thread(MonoThread *p_thread) { + mono_thread_set_main(p_thread); +} + +void attach_current_thread() { + ERR_FAIL_COND(!GDMono::get_singleton()->is_runtime_initialized()); + MonoThread *mono_thread = mono_thread_attach(SCRIPTS_DOMAIN); + ERR_FAIL_NULL(mono_thread); +} + +void detach_current_thread() { + ERR_FAIL_COND(!GDMono::get_singleton()->is_runtime_initialized()); + MonoThread *mono_thread = mono_thread_current(); + ERR_FAIL_NULL(mono_thread); + mono_thread_detach(mono_thread); +} + +MonoThread *get_current_thread() { + return mono_thread_current(); +} + +GDMonoClass *get_object_class(MonoObject *p_object) { + return GDMono::get_singleton()->get_class(mono_object_get_class(p_object)); +} + +GDMonoClass *type_get_proxy_class(const StringName &p_type) { + String class_name = p_type; + + if (class_name[0] == '_') + class_name = class_name.substr(1, class_name.length()); + + GDMonoClass *klass = GDMono::get_singleton()->get_api_assembly()->get_class(BINDINGS_NAMESPACE, class_name); + +#ifdef TOOLS_ENABLED + if (!klass) { + return GDMono::get_singleton()->get_editor_api_assembly()->get_class(BINDINGS_NAMESPACE, class_name); + } +#endif + + return klass; +} + +GDMonoClass *get_class_native_base(GDMonoClass *p_class) { + GDMonoClass *klass = p_class; + + do { + const GDMonoAssembly *assembly = klass->get_assembly(); + if (assembly == GDMono::get_singleton()->get_api_assembly()) + return klass; +#ifdef TOOLS_ENABLED + if (assembly == GDMono::get_singleton()->get_editor_api_assembly()) + return klass; +#endif + } while ((klass = klass->get_parent_class()) != NULL); + + return NULL; +} + +MonoObject *create_managed_for_godot_object(GDMonoClass *p_class, const StringName &p_native, Object *p_object) { + String object_type = p_object->get_class_name(); + + if (object_type[0] == '_') + object_type = object_type.substr(1, object_type.length()); + + if (!ClassDB::is_parent_class(object_type, p_native)) { + ERR_EXPLAIN("Type inherits from native type '" + p_native + "', so it can't be instanced in object of type: '" + p_object->get_class() + "'"); + ERR_FAIL_V(NULL); + } + + MonoObject *mono_object = mono_object_new(SCRIPTS_DOMAIN, p_class->get_raw()); + ERR_FAIL_NULL_V(mono_object, NULL); + + CACHED_FIELD(GodotObject, ptr)->set_value_raw(mono_object, p_object); + + // Construct + mono_runtime_object_init(mono_object); + + return mono_object; +} + +MonoObject *create_managed_from(const NodePath &p_from) { + MonoObject *mono_object = mono_object_new(SCRIPTS_DOMAIN, CACHED_CLASS_RAW(NodePath)); + ERR_FAIL_NULL_V(mono_object, NULL); + + // Construct + mono_runtime_object_init(mono_object); + + CACHED_FIELD(NodePath, ptr)->set_value_raw(mono_object, memnew(NodePath(p_from))); + + return mono_object; +} + +MonoObject *create_managed_from(const RID &p_from) { + MonoObject *mono_object = mono_object_new(SCRIPTS_DOMAIN, CACHED_CLASS_RAW(RID)); + ERR_FAIL_NULL_V(mono_object, NULL); + + // Construct + mono_runtime_object_init(mono_object); + + CACHED_FIELD(RID, ptr)->set_value_raw(mono_object, memnew(RID(p_from))); + + return mono_object; +} + +MonoDomain *create_domain(const String &p_friendly_name) { + MonoDomain *domain = mono_domain_create_appdomain((char *)p_friendly_name.utf8().get_data(), NULL); + + if (domain) { + // Workaround to avoid this exception: + // System.Configuration.ConfigurationErrorsException: Error Initializing the configuration system. + // ---> System.ArgumentException: The 'ExeConfigFilename' argument cannot be null. + mono_domain_set_config(domain, ".", ""); + } + + return domain; +} + +String get_exception_name_and_message(MonoObject *p_ex) { + String res; + + MonoClass *klass = mono_object_get_class(p_ex); + MonoType *type = mono_class_get_type(klass); + + char *full_name = mono_type_full_name(type); + res += full_name; + mono_free(full_name); + + res += ": "; + + MonoProperty *prop = mono_class_get_property_from_name(klass, "Message"); + MonoString *msg = (MonoString *)mono_property_get_value(prop, p_ex, NULL, NULL); + res += GDMonoMarshal::mono_string_to_godot(msg); + + return res; +} +} diff --git a/modules/mono/mono_gd/gd_mono_utils.h b/modules/mono/mono_gd/gd_mono_utils.h new file mode 100644 index 0000000000..e3af57e78a --- /dev/null +++ b/modules/mono/mono_gd/gd_mono_utils.h @@ -0,0 +1,182 @@ +/*************************************************************************/ +/* gd_mono_utils.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 GD_MONOUTILS_H +#define GD_MONOUTILS_H + +#include <mono/metadata/threads.h> + +#include "../mono_gc_handle.h" +#include "gd_mono_header.h" + +#include "object.h" +#include "reference.h" + +namespace GDMonoUtils { + +typedef MonoObject *(*MarshalUtils_DictToArrays)(MonoObject *, MonoArray **, MonoArray **, MonoObject **); +typedef MonoObject *(*MarshalUtils_ArraysToDict)(MonoArray *, MonoArray *, MonoObject **); +typedef MonoObject *(*SignalAwaiter_SignalCallback)(MonoObject *, MonoArray **, MonoObject **); +typedef MonoObject *(*SignalAwaiter_FailureCallback)(MonoObject *, MonoObject **); +typedef MonoObject *(*GodotTaskScheduler_Activate)(MonoObject *, MonoObject **); + +struct MonoCache { + // Format for cached classes in the Godot namespace: class_<Class> + // Macro: CACHED_CLASS(<Class>) + + // Format for cached classes in a different namespace: class_<Namespace>_<Class> + // Macro: CACHED_NS_CLASS(<Namespace>, <Class>) + + // ----------------------------------------------- + // corlib classes + + // Let's use the no-namespace format for these too + GDMonoClass *class_MonoObject; + GDMonoClass *class_bool; + GDMonoClass *class_int8_t; + GDMonoClass *class_int16_t; + GDMonoClass *class_int32_t; + GDMonoClass *class_int64_t; + GDMonoClass *class_uint8_t; + GDMonoClass *class_uint16_t; + GDMonoClass *class_uint32_t; + GDMonoClass *class_uint64_t; + GDMonoClass *class_float; + GDMonoClass *class_double; + GDMonoClass *class_String; + GDMonoClass *class_IntPtr; + + MonoClass *rawclass_Dictionary; + // ----------------------------------------------- + + GDMonoClass *class_Vector2; + GDMonoClass *class_Rect2; + GDMonoClass *class_Transform2D; + GDMonoClass *class_Vector3; + GDMonoClass *class_Basis; + GDMonoClass *class_Quat; + GDMonoClass *class_Transform; + GDMonoClass *class_Rect3; + GDMonoClass *class_Color; + GDMonoClass *class_Plane; + GDMonoClass *class_NodePath; + GDMonoClass *class_RID; + GDMonoClass *class_GodotObject; + GDMonoClass *class_GodotReference; + GDMonoClass *class_Node; + GDMonoClass *class_Control; + GDMonoClass *class_Spatial; + GDMonoClass *class_WeakRef; + GDMonoClass *class_MarshalUtils; + + GDMonoClass *class_ExportAttribute; + GDMonoField *field_ExportAttribute_hint; + GDMonoField *field_ExportAttribute_hint_string; + GDMonoClass *class_ToolAttribute; + GDMonoClass *class_RemoteAttribute; + GDMonoClass *class_SyncAttribute; + GDMonoClass *class_MasterAttribute; + GDMonoClass *class_SlaveAttribute; + GDMonoClass *class_GodotMethodAttribute; + GDMonoField *field_GodotMethodAttribute_methodName; + + GDMonoField *field_GodotObject_ptr; + GDMonoField *field_NodePath_ptr; + GDMonoField *field_Image_ptr; + GDMonoField *field_RID_ptr; + + MarshalUtils_DictToArrays methodthunk_MarshalUtils_DictionaryToArrays; + MarshalUtils_ArraysToDict methodthunk_MarshalUtils_ArraysToDictionary; + SignalAwaiter_SignalCallback methodthunk_SignalAwaiter_SignalCallback; + SignalAwaiter_FailureCallback methodthunk_SignalAwaiter_FailureCallback; + GodotTaskScheduler_Activate methodthunk_GodotTaskScheduler_Activate; + + Ref<MonoGCHandle> task_scheduler_handle; + + void clear_members(); + void cleanup() {} + + MonoCache() { + clear_members(); + } +}; + +extern MonoCache mono_cache; + +void update_corlib_cache(); +void update_godot_api_cache(); +void clear_cache(); + +_FORCE_INLINE_ void hash_combine(uint32_t &p_hash, const uint32_t &p_with_hash) { + p_hash ^= p_with_hash + 0x9e3779b9 + (p_hash << 6) + (p_hash >> 2); +} + +/** + * If the object has a csharp script, returns the target of the gchandle stored in the script instance + * Otherwise returns a newly constructed MonoObject* which is attached to the object + * Returns NULL on error + */ +MonoObject *unmanaged_get_managed(Object *unmanaged); + +void set_main_thread(MonoThread *p_thread); +void attach_current_thread(); +void detach_current_thread(); +MonoThread *get_current_thread(); + +GDMonoClass *get_object_class(MonoObject *p_object); +GDMonoClass *type_get_proxy_class(const StringName &p_type); +GDMonoClass *get_class_native_base(GDMonoClass *p_class); + +MonoObject *create_managed_for_godot_object(GDMonoClass *p_class, const StringName &p_native, Object *p_object); + +MonoObject *create_managed_from(const NodePath &p_from); +MonoObject *create_managed_from(const RID &p_from); + +MonoDomain *create_domain(const String &p_friendly_name); + +String get_exception_name_and_message(MonoObject *p_ex); + +} // GDMonoUtils + +#define NATIVE_GDMONOCLASS_NAME(m_class) (GDMonoMarshal::mono_string_to_godot((MonoString *)m_class->get_field(BINDINGS_NATIVE_NAME_FIELD)->get_value(NULL))) + +#define CACHED_CLASS(m_class) (GDMonoUtils::mono_cache.class_##m_class) +#define CACHED_CLASS_RAW(m_class) (GDMonoUtils::mono_cache.class_##m_class->get_raw()) +#define CACHED_NS_CLASS(m_ns, m_class) (GDMonoUtils::mono_cache.class_##m_ns##_##m_class) +#define CACHED_RAW_MONO_CLASS(m_class) (GDMonoUtils::mono_cache.rawclass_##m_class) +#define CACHED_FIELD(m_class, m_field) (GDMonoUtils::mono_cache.field_##m_class##_##m_field) +#define CACHED_METHOD_THUNK(m_class, m_method) (GDMonoUtils::mono_cache.methodthunk_##m_class##_##m_method) + +#ifdef REAL_T_IS_DOUBLE +#define REAL_T_MONOCLASS CACHED_CLASS_RAW(double) +#else +#define REAL_T_MONOCLASS CACHED_CLASS_RAW(float) +#endif + +#endif // GD_MONOUTILS_H diff --git a/modules/mono/mono_reg_utils.py b/modules/mono/mono_reg_utils.py new file mode 100644 index 0000000000..e9988625f5 --- /dev/null +++ b/modules/mono/mono_reg_utils.py @@ -0,0 +1,58 @@ +import os + +if os.name == 'nt': + import sys + if sys.version_info < (3,): + import _winreg as winreg + else: + import winreg + + +def _reg_open_key(key, subkey): + try: + return winreg.OpenKey(key, subkey) + except (WindowsError, EnvironmentError) as e: + import platform + if platform.architecture()[0] == '32bit': + bitness_sam = winreg.KEY_WOW64_64KEY + else: + bitness_sam = winreg.KEY_WOW64_32KEY + return winreg.OpenKey(key, subkey, 0, winreg.KEY_READ | bitness_sam) + + +def _find_mono_in_reg(subkey): + try: + with _reg_open_key(winreg.HKEY_LOCAL_MACHINE, subkey) as hKey: + value, regtype = winreg.QueryValueEx(hKey, 'SdkInstallRoot') + return value + except (WindowsError, EnvironmentError) as e: + return None + +def _find_mono_in_reg_old(subkey): + try: + with _reg_open_key(winreg.HKEY_LOCAL_MACHINE, subkey) as hKey: + default_clr, regtype = winreg.QueryValueEx(hKey, 'DefaultCLR') + if default_clr: + return _find_mono_in_reg(subkey + '\\' + default_clr) + return None + except (WindowsError, EnvironmentError): + return None + + +def find_mono_root_dir(): + dir = _find_mono_in_reg(r'SOFTWARE\Mono') + if dir: + return dir + dir = _find_mono_in_reg_old(r'SOFTWARE\Novell\Mono') + if dir: + return dir + return None + + +def find_msbuild_tools_path_reg(): + try: + with _reg_open_key(winreg.HKEY_LOCAL_MACHINE, r'SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0') as hKey: + value, regtype = winreg.QueryValueEx(hKey, 'MSBuildToolsPath') + return value + except (WindowsError, EnvironmentError) as e: + return None diff --git a/modules/mono/register_types.cpp b/modules/mono/register_types.cpp new file mode 100644 index 0000000000..2656de5b14 --- /dev/null +++ b/modules/mono/register_types.cpp @@ -0,0 +1,72 @@ +/*************************************************************************/ +/* register_types.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 "project_settings.h" + +#include "csharp_script.h" + +CSharpLanguage *script_language_cs = NULL; +ResourceFormatLoaderCSharpScript *resource_loader_cs = NULL; +ResourceFormatSaverCSharpScript *resource_saver_cs = NULL; + +_GodotSharp *_godotsharp = NULL; + +void register_mono_types() { + ClassDB::register_class<CSharpScript>(); + + _godotsharp = memnew(_GodotSharp); + + ClassDB::register_class<_GodotSharp>(); + ProjectSettings::get_singleton()->add_singleton(ProjectSettings::Singleton("GodotSharp", _GodotSharp::get_singleton())); + + script_language_cs = memnew(CSharpLanguage); + script_language_cs->set_language_index(ScriptServer::get_language_count()); + ScriptServer::register_language(script_language_cs); + + resource_loader_cs = memnew(ResourceFormatLoaderCSharpScript); + ResourceLoader::add_resource_format_loader(resource_loader_cs); + resource_saver_cs = memnew(ResourceFormatSaverCSharpScript); + ResourceSaver::add_resource_format_saver(resource_saver_cs); +} + +void unregister_mono_types() { + ScriptServer::unregister_language(script_language_cs); + + if (script_language_cs) + memdelete(script_language_cs); + if (resource_loader_cs) + memdelete(resource_loader_cs); + if (resource_saver_cs) + memdelete(resource_saver_cs); + + if (_godotsharp) + memdelete(_godotsharp); +} diff --git a/modules/mono/register_types.h b/modules/mono/register_types.h new file mode 100644 index 0000000000..6cf706b944 --- /dev/null +++ b/modules/mono/register_types.h @@ -0,0 +1,31 @@ +/*************************************************************************/ +/* register_types.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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_mono_types(); +void unregister_mono_types(); diff --git a/modules/mono/signal_awaiter_utils.cpp b/modules/mono/signal_awaiter_utils.cpp new file mode 100644 index 0000000000..7e99df29a1 --- /dev/null +++ b/modules/mono/signal_awaiter_utils.cpp @@ -0,0 +1,144 @@ +/*************************************************************************/ +/* signal_awaiter_utils.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 "signal_awaiter_utils.h" + +#include "csharp_script.h" +#include "mono_gd/gd_mono_class.h" +#include "mono_gd/gd_mono_marshal.h" +#include "mono_gd/gd_mono_utils.h" + +namespace SignalAwaiterUtils { + +Error connect_signal_awaiter(Object *p_source, const String &p_signal, Object *p_target, MonoObject *p_awaiter) { + + ERR_FAIL_NULL_V(p_source, ERR_INVALID_DATA); + ERR_FAIL_NULL_V(p_target, ERR_INVALID_DATA); + + uint32_t awaiter_handle = MonoGCHandle::make_strong_handle(p_awaiter); + Ref<SignalAwaiterHandle> sa_con = memnew(SignalAwaiterHandle(awaiter_handle)); +#ifdef DEBUG_ENABLED + sa_con->set_connection_target(p_target); +#endif + + Vector<Variant> binds; + binds.push_back(sa_con); + + Error err = p_source->connect(p_signal, sa_con.ptr(), + CSharpLanguage::get_singleton()->get_string_names()._signal_callback, + binds, Object::CONNECT_ONESHOT); + + if (err != OK) { + // Set it as completed to prevent it from calling the failure callback when released. + // The awaiter will be aware of the failure by checking the returned error. + sa_con->set_completed(true); + } + + return err; +} +} + +Variant SignalAwaiterHandle::_signal_callback(const Variant **p_args, int p_argcount, Variant::CallError &r_error) { + +#ifdef DEBUG_ENABLED + if (conn_target_id && !ObjectDB::get_instance(conn_target_id)) { + ERR_EXPLAIN("Resumed after await, but class instance is gone"); + ERR_FAIL_V(Variant()); + } +#endif + + if (p_argcount < 1) { + r_error.error = Variant::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS; + r_error.argument = 1; + return Variant(); + } + + Ref<SignalAwaiterHandle> self = *p_args[p_argcount - 1]; + + 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(); + } + + set_completed(true); + + int signal_argc = p_argcount - 1; + MonoArray *signal_args = mono_array_new(SCRIPTS_DOMAIN, CACHED_CLASS_RAW(MonoObject), signal_argc); + + for (int i = 0; i < signal_argc; i++) { + MonoObject *boxed = GDMonoMarshal::variant_to_mono_object(*p_args[i]); + mono_array_set(signal_args, MonoObject *, i, boxed); + } + + GDMonoUtils::SignalAwaiter_SignalCallback thunk = CACHED_METHOD_THUNK(SignalAwaiter, SignalCallback); + + MonoObject *ex = NULL; + thunk(get_target(), &signal_args, &ex); + + if (ex) { + mono_print_unhandled_exception(ex); + ERR_FAIL_V(Variant()); + } + + return Variant(); +} + +void SignalAwaiterHandle::_bind_methods() { + + ClassDB::bind_vararg_method(METHOD_FLAGS_DEFAULT, "_signal_callback", &SignalAwaiterHandle::_signal_callback, MethodInfo("_signal_callback")); +} + +SignalAwaiterHandle::SignalAwaiterHandle(uint32_t p_managed_handle) + : MonoGCHandle(p_managed_handle) { + +#ifdef DEBUG_ENABLED + conn_target_id = 0; +#endif +} + +SignalAwaiterHandle::~SignalAwaiterHandle() { + + if (!completed) { + GDMonoUtils::SignalAwaiter_FailureCallback thunk = CACHED_METHOD_THUNK(SignalAwaiter, FailureCallback); + + MonoObject *awaiter = get_target(); + + if (awaiter) { + MonoObject *ex = NULL; + thunk(awaiter, &ex); + + if (ex) { + mono_print_unhandled_exception(ex); + ERR_FAIL_V(); + } + } + } +} diff --git a/modules/mono/signal_awaiter_utils.h b/modules/mono/signal_awaiter_utils.h new file mode 100644 index 0000000000..0d615b5826 --- /dev/null +++ b/modules/mono/signal_awaiter_utils.h @@ -0,0 +1,70 @@ +/*************************************************************************/ +/* signal_awaiter_utils.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 SIGNAL_AWAITER_UTILS_H +#define SIGNAL_AWAITER_UTILS_H + +#include "mono_gc_handle.h" +#include "reference.h" + +namespace SignalAwaiterUtils { + +Error connect_signal_awaiter(Object *p_source, const String &p_signal, Object *p_target, MonoObject *p_awaiter); +} + +class SignalAwaiterHandle : public MonoGCHandle { + + GDCLASS(SignalAwaiterHandle, MonoGCHandle) + + bool completed; + +#ifdef DEBUG_ENABLED + ObjectID conn_target_id; +#endif + + Variant _signal_callback(const Variant **p_args, int p_argcount, Variant::CallError &r_error); + +protected: + static void _bind_methods(); + +public: + _FORCE_INLINE_ bool is_completed() { return completed; } + _FORCE_INLINE_ void set_completed(bool p_completed) { completed = p_completed; } + +#ifdef DEBUG_ENABLED + _FORCE_INLINE_ void set_connection_target(Object *p_target) { + conn_target_id = p_target->get_instance_id(); + } +#endif + + SignalAwaiterHandle(uint32_t p_managed_handle); + ~SignalAwaiterHandle(); +}; + +#endif // SIGNAL_AWAITER_UTILS_H diff --git a/modules/mono/utils/mono_reg_utils.cpp b/modules/mono/utils/mono_reg_utils.cpp new file mode 100644 index 0000000000..2e90b3b716 --- /dev/null +++ b/modules/mono/utils/mono_reg_utils.cpp @@ -0,0 +1,228 @@ +/*************************************************************************/ +/* mono_reg_utils.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 "mono_reg_utils.h" + +#ifdef WINDOWS_ENABLED + +#include "os/os.h" + +// Here, after os/os.h +#include <windows.h> + +namespace MonoRegUtils { + +template <int> +REGSAM bitness_sam_impl(); + +template <> +REGSAM bitness_sam_impl<4>() { + return KEY_WOW64_64KEY; +} + +template <> +REGSAM bitness_sam_impl<8>() { + return KEY_WOW64_32KEY; +} + +REGSAM _get_bitness_sam() { + return bitness_sam_impl<sizeof(size_t)>(); +} + +LONG _RegOpenKey(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult) { + + LONG res = RegOpenKeyExW(hKey, lpSubKey, 0, KEY_READ, phkResult); + + if (res != ERROR_SUCCESS) + res = RegOpenKeyExW(hKey, lpSubKey, 0, KEY_READ | _get_bitness_sam(), phkResult); + + return res; +} + +LONG _RegKeyQueryString(HKEY hKey, const String &p_value_name, String &r_value) { + + Vector<WCHAR> buffer; + buffer.resize(512); + DWORD dwBufferSize = buffer.size(); + + LONG res = RegQueryValueExW(hKey, p_value_name.c_str(), 0, NULL, (LPBYTE)buffer.ptr(), &dwBufferSize); + + if (res == ERROR_MORE_DATA) { + // dwBufferSize now contains the actual size + Vector<WCHAR> buffer; + buffer.resize(dwBufferSize); + res = RegQueryValueExW(hKey, p_value_name.c_str(), 0, NULL, (LPBYTE)buffer.ptr(), &dwBufferSize); + } + + if (res == ERROR_SUCCESS) { + r_value = String(buffer.ptr(), buffer.size()); + } else { + r_value = String(); + } + + return res; +} + +LONG _find_mono_in_reg(const String &p_subkey, MonoRegInfo &r_info, bool p_old_reg = false) { + + HKEY hKey; + LONG res = _RegOpenKey(HKEY_LOCAL_MACHINE, p_subkey.c_str(), &hKey); + + if (res != ERROR_SUCCESS) + goto cleanup; + + if (!p_old_reg) { + res = _RegKeyQueryString(hKey, "Version", r_info.version); + if (res != ERROR_SUCCESS) + goto cleanup; + } + + res = _RegKeyQueryString(hKey, "SdkInstallRoot", r_info.install_root_dir); + if (res != ERROR_SUCCESS) + goto cleanup; + + res = _RegKeyQueryString(hKey, "FrameworkAssemblyDirectory", r_info.assembly_dir); + if (res != ERROR_SUCCESS) + goto cleanup; + + res = _RegKeyQueryString(hKey, "MonoConfigDir", r_info.config_dir); + if (res != ERROR_SUCCESS) + goto cleanup; + + if (r_info.install_root_dir.ends_with("\\")) + r_info.bin_dir = r_info.install_root_dir + "bin"; + else + r_info.bin_dir = r_info.install_root_dir + "\\bin"; + +cleanup: + RegCloseKey(hKey); + return res; +} + +LONG _find_mono_in_reg_old(const String &p_subkey, MonoRegInfo &r_info) { + + String default_clr; + + HKEY hKey; + LONG res = _RegOpenKey(HKEY_LOCAL_MACHINE, p_subkey.c_str(), &hKey); + + if (res != ERROR_SUCCESS) + goto cleanup; + + res = _RegKeyQueryString(hKey, "DefaultCLR", default_clr); + + if (res == ERROR_SUCCESS && default_clr.length()) { + r_info.version = default_clr; + res = _find_mono_in_reg(p_subkey + "\\" + default_clr, r_info, true); + } + +cleanup: + RegCloseKey(hKey); + return res; +} + +MonoRegInfo find_mono() { + + MonoRegInfo info; + + if (_find_mono_in_reg("Software\\Mono", info) == ERROR_SUCCESS) + return info; + + if (_find_mono_in_reg_old("Software\\Novell\\Mono", info) == ERROR_SUCCESS) + return info; + + ERR_PRINT("Cannot find mono in the registry"); + + return MonoRegInfo(); +} + +String find_msbuild_tools_path() { + + String msbuild_tools_path; + + // Try to find 15.0 with vswhere + + String vswhere_path = OS::get_singleton()->get_environment(sizeof(size_t) == 8 ? "ProgramFiles(x86)" : "ProgramFiles"); + vswhere_path += "\\Microsoft Visual Studio\\Installer\\vswhere.exe"; + + List<String> vswhere_args; + vswhere_args.push_back("-latest"); + vswhere_args.push_back("-requires"); + vswhere_args.push_back("Microsoft.Component.MSBuild"); + + String output; + int exit_code; + OS::get_singleton()->execute(vswhere_path, vswhere_args, true, NULL, &output, &exit_code); + + if (exit_code == 0) { + Vector<String> lines = output.split("\n"); + + for (int i = 0; i < lines.size(); i++) { + const String &line = lines[i]; + int sep_idx = line.find(":"); + + if (sep_idx > 0) { + String key = line.substr(0, sep_idx); // No need to trim + + if (key == "installationPath") { + String val = line.substr(sep_idx + 1, line.length()).strip_edges(); + + ERR_BREAK(val.empty()); + + if (!val.ends_with("\\")) { + val += "\\"; + } + + return val + "MSBuild\\15.0\\Bin"; + } + } + } + } + + // Try to find 14.0 in the Registry + + HKEY hKey; + LONG res = _RegOpenKey(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\MSBuild\\ToolsVersions\\14.0", &hKey); + + if (res != ERROR_SUCCESS) + goto cleanup; + + res = _RegKeyQueryString(hKey, "MSBuildToolsPath", msbuild_tools_path); + + if (res != ERROR_SUCCESS) + goto cleanup; + +cleanup: + RegCloseKey(hKey); + + return msbuild_tools_path; +} +} // namespace MonoRegUtils + +#endif WINDOWS_ENABLED diff --git a/modules/mono/utils/mono_reg_utils.h b/modules/mono/utils/mono_reg_utils.h new file mode 100644 index 0000000000..4cc4965acb --- /dev/null +++ b/modules/mono/utils/mono_reg_utils.h @@ -0,0 +1,54 @@ +/*************************************************************************/ +/* mono_reg_utils.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 MONO_REG_UTILS_H +#define MONO_REG_UTILS_H + +#ifdef WINDOWS_ENABLED + +#include "ustring.h" + +struct MonoRegInfo { + + String version; + String install_root_dir; + String assembly_dir; + String config_dir; + String bin_dir; +}; + +namespace MonoRegUtils { + +MonoRegInfo find_mono(); +String find_msbuild_tools_path(); +} // MonoRegUtils + +#endif // WINDOWS_ENABLED + +#endif // MONO_REG_UTILS_H diff --git a/modules/mono/utils/path_utils.cpp b/modules/mono/utils/path_utils.cpp new file mode 100644 index 0000000000..c8581f6122 --- /dev/null +++ b/modules/mono/utils/path_utils.cpp @@ -0,0 +1,111 @@ +/*************************************************************************/ +/* path_utils.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 "path_utils.h" + +#include "os/dir_access.h" +#include "os/file_access.h" +#include "os/os.h" +#include "project_settings.h" + +#ifdef WINDOWS_ENABLED +#define ENV_PATH_SEP ";" +#else +#define ENV_PATH_SEP ":" +#include <limits.h> +#endif + +#include <stdlib.h> + +String path_which(const String &p_name) { + +#ifdef WINDOWS_ENABLED + Vector<String> exts = OS::get_singleton()->get_environment("PATHEXT").split(ENV_PATH_SEP, false); +#endif + Vector<String> env_path = OS::get_singleton()->get_environment("PATH").split(ENV_PATH_SEP, false); + + if (env_path.empty()) + return String(); + + for (int i = 0; i < env_path.size(); i++) { + String p = path_join(env_path[i], p_name); + + if (FileAccess::exists(p)) + return p; + +#ifdef WINDOWS_ENABLED + for (int j = 0; j < exts.size(); j++) { + String p2 = p + exts[j]; + + if (FileAccess::exists(p2)) + return p2; + } +#endif + } + + return String(); +} + +void fix_path(const String &p_path, String &r_out) { + r_out = p_path.replace("\\", "/"); + + while (true) { // in case of using 2 or more slash + String compare = r_out.replace("//", "/"); + if (r_out == compare) + break; + else + r_out = compare; + } +} + +bool rel_path_to_abs(const String &p_existing_path, String &r_abs_path) { +#ifdef WINDOWS_ENABLED + CharType ret[_MAX_PATH]; + if (_wfullpath(ret, p_existing_path.c_str(), _MAX_PATH)) { + String abspath = String(ret).replace("\\", "/"); + int pos = abspath.find(":/"); + if (pos != -1) { + r_abs_path = abspath.substr(pos - 1, abspath.length()); + } else { + r_abs_path = abspath; + } + return true; + } +#else + char ret[PATH_MAX]; + if (realpath(p_existing_path.utf8().get_data(), ret)) { + String retstr; + if (!retstr.parse_utf8(ret)) { + r_abs_path = retstr; + return true; + } + } +#endif + return false; +} diff --git a/modules/mono/utils/path_utils.h b/modules/mono/utils/path_utils.h new file mode 100644 index 0000000000..445604300d --- /dev/null +++ b/modules/mono/utils/path_utils.h @@ -0,0 +1,53 @@ +/*************************************************************************/ +/* path_utils.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 PATH_UTILS_H +#define PATH_UTILS_H + +#include "ustring.h" + +_FORCE_INLINE_ String path_join(const String &e1, const String &e2) { + return e1.plus_file(e2); +} + +_FORCE_INLINE_ String path_join(const String &e1, const String &e2, const String &e3) { + return e1.plus_file(e2).plus_file(e3); +} + +_FORCE_INLINE_ String path_join(const String &e1, const String &e2, const String &e3, const String &e4) { + return e1.plus_file(e2).plus_file(e3).plus_file(e4); +} + +String path_which(const String &p_name); + +void fix_path(const String &p_path, String &r_out); + +bool rel_path_to_abs(const String &p_existing_path, String &r_abs_path); + +#endif // PATH_UTILS_H diff --git a/modules/mono/utils/string_utils.cpp b/modules/mono/utils/string_utils.cpp new file mode 100644 index 0000000000..f26663ea11 --- /dev/null +++ b/modules/mono/utils/string_utils.cpp @@ -0,0 +1,157 @@ +/*************************************************************************/ +/* string_utils.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 "string_utils.h" + +namespace { + +int sfind(const String &p_text, int p_from) { + if (p_from < 0) + return -1; + + int src_len = 2; + int len = p_text.length(); + + if (src_len == 0 || len == 0) + return -1; + + const CharType *src = p_text.c_str(); + + for (int i = p_from; i <= (len - src_len); i++) { + bool found = true; + + for (int j = 0; j < src_len; j++) { + int read_pos = i + j; + + if (read_pos >= len) { + ERR_PRINT("read_pos >= len"); + return -1; + }; + + switch (j) { + case 0: + found = src[read_pos] == '%'; + break; + case 1: { + CharType c = src[read_pos]; + found = src[read_pos] == 's' || (c >= '0' || c <= '4'); + break; + } + default: + found = false; + } + + if (!found) { + break; + } + } + + if (found) + return i; + } + + return -1; +} +} + +String sformat(const String &p_text, const Variant &p1, const Variant &p2, const Variant &p3, const Variant &p4, const Variant &p5) { + if (p_text.length() < 2) + return p_text; + + Array args; + + if (p1.get_type() != Variant::NIL) { + args.push_back(p1); + + if (p2.get_type() != Variant::NIL) { + args.push_back(p2); + + if (p3.get_type() != Variant::NIL) { + args.push_back(p3); + + if (p4.get_type() != Variant::NIL) { + args.push_back(p4); + + if (p5.get_type() != Variant::NIL) { + args.push_back(p5); + } + } + } + } + } + + String new_string; + + int findex = 0; + int search_from = 0; + int result = 0; + + while ((result = sfind(p_text, search_from)) >= 0) { + CharType c = p_text[result + 1]; + + int req_index = (c == 's' ? findex++ : c - '0'); + + new_string += p_text.substr(search_from, result - search_from); + new_string += args[req_index].operator String(); + search_from = result + 2; + } + + new_string += p_text.substr(search_from, p_text.length() - search_from); + + return new_string; +} + +bool is_csharp_keyword(const String &p_name) { + + // Reserved keywords + + return p_name == "abstract" || p_name == "as" || p_name == "base" || p_name == "bool" || + p_name == "break" || p_name == "byte" || p_name == "case" || p_name == "catch" || + p_name == "char" || p_name == "checked" || p_name == "class" || p_name == "const" || + p_name == "continue" || p_name == "decimal" || p_name == "default" || p_name == "delegate" || + p_name == "do" || p_name == "double" || p_name == "else" || p_name == "enum" || + p_name == "event" || p_name == "explicit" || p_name == "extern" || p_name == "false" || + p_name == "finally" || p_name == "fixed" || p_name == "float" || p_name == "for" || + p_name == "forech" || p_name == "goto" || p_name == "if" || p_name == "implicit" || + p_name == "in" || p_name == "int" || p_name == "interface" || p_name == "internal" || + p_name == "is" || p_name == "lock" || p_name == "long" || p_name == "namespace" || + p_name == "new" || p_name == "null" || p_name == "object" || p_name == "operator" || + p_name == "out" || p_name == "override" || p_name == "params" || p_name == "private" || + p_name == "protected" || p_name == "public" || p_name == "readonly" || p_name == "ref" || + p_name == "return" || p_name == "sbyte" || p_name == "sealed" || p_name == "short" || + p_name == "sizeof" || p_name == "stackalloc" || p_name == "static" || p_name == "string" || + p_name == "struct" || p_name == "switch" || p_name == "this" || p_name == "throw" || + p_name == "true" || p_name == "try" || p_name == "typeof" || p_name == "uint" || p_name == "ulong" || + p_name == "unchecked" || p_name == "unsafe" || p_name == "ushort" || p_name == "using" || + p_name == "virtual" || p_name == "volatile" || p_name == "void" || p_name == "while"; +} + +String escape_csharp_keyword(const String &p_name) { + return is_csharp_keyword(p_name) ? "@" + p_name : p_name; +} diff --git a/modules/mono/utils/string_utils.h b/modules/mono/utils/string_utils.h new file mode 100644 index 0000000000..a0d66ebdc3 --- /dev/null +++ b/modules/mono/utils/string_utils.h @@ -0,0 +1,44 @@ +/*************************************************************************/ +/* string_utils.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 STRING_FORMAT_H +#define STRING_FORMAT_H + +#include "ustring.h" +#include "variant.h" + +String sformat(const String &p_text, const Variant &p1 = Variant(), const Variant &p2 = Variant(), const Variant &p3 = Variant(), const Variant &p4 = Variant(), const Variant &p5 = Variant()); + +#ifdef TOOLS_ENABLED +bool is_csharp_keyword(const String &p_name); + +String escape_csharp_keyword(const String &p_name); +#endif + +#endif // STRING_FORMAT_H diff --git a/modules/ogg/SCsub b/modules/ogg/SCsub index 5eabaf6f2b..5e559bd4db 100644 --- a/modules/ogg/SCsub +++ b/modules/ogg/SCsub @@ -6,7 +6,7 @@ Import('env_modules') env_ogg = env_modules.Clone() # Thirdparty source files -if (env['builtin_libogg'] != 'no'): +if env['builtin_libogg']: thirdparty_dir = "#thirdparty/libogg/" thirdparty_sources = [ "bitwise.c", diff --git a/modules/openssl/SCsub b/modules/openssl/SCsub index eb3c0e64d8..84c5e68439 100644 --- a/modules/openssl/SCsub +++ b/modules/openssl/SCsub @@ -6,7 +6,7 @@ Import('env_modules') env_openssl = env_modules.Clone() # Thirdparty source files -if (env['builtin_openssl'] != 'no'): +if env['builtin_openssl']: thirdparty_dir = "#thirdparty/openssl/" thirdparty_sources = [ diff --git a/modules/openssl/stream_peer_openssl.cpp b/modules/openssl/stream_peer_openssl.cpp index d40bf73883..6d1d5485f3 100644 --- a/modules/openssl/stream_peer_openssl.cpp +++ b/modules/openssl/stream_peer_openssl.cpp @@ -29,6 +29,17 @@ /*************************************************************************/ #include "stream_peer_openssl.h" +// Compatibility with OpenSSL 1.1.0. +#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER) +#define BIO_set_num(b, n) +#else +#define BIO_set_num(b, n) ((b)->num = (n)) + +#define BIO_set_init(b, i) ((b)->init = (i)) +#define BIO_set_data(b, p) ((b)->ptr = (p)) +#define BIO_get_data(b) ((b)->ptr) +#endif + //hostname matching code from curl bool StreamPeerOpenSSL::_match_host_name(const char *name, const char *hostname) { @@ -157,10 +168,10 @@ int StreamPeerOpenSSL::_cert_verify_callback(X509_STORE_CTX *x509_ctx, void *arg } int StreamPeerOpenSSL::_bio_create(BIO *b) { - b->init = 1; - b->num = 0; - b->ptr = NULL; - b->flags = 0; + BIO_set_init(b, 1); + BIO_set_num(b, 0); + BIO_set_data(b, NULL); + BIO_clear_flags(b, ~0); return 1; } @@ -168,9 +179,9 @@ int StreamPeerOpenSSL::_bio_destroy(BIO *b) { if (b == NULL) return 0; - b->ptr = NULL; /* sb_tls_remove() will free it */ - b->init = 0; - b->flags = 0; + BIO_set_data(b, NULL); /* sb_tls_remove() will free it */ + BIO_set_init(b, 0); + BIO_clear_flags(b, ~0); return 1; } @@ -178,7 +189,7 @@ int StreamPeerOpenSSL::_bio_read(BIO *b, char *buf, int len) { if (buf == NULL || len <= 0) return 0; - StreamPeerOpenSSL *sp = (StreamPeerOpenSSL *)b->ptr; + StreamPeerOpenSSL *sp = (StreamPeerOpenSSL *)BIO_get_data(b); ERR_FAIL_COND_V(sp == NULL, 0); @@ -212,7 +223,7 @@ int StreamPeerOpenSSL::_bio_write(BIO *b, const char *buf, int len) { if (buf == NULL || len <= 0) return 0; - StreamPeerOpenSSL *sp = (StreamPeerOpenSSL *)b->ptr; + StreamPeerOpenSSL *sp = (StreamPeerOpenSSL *)BIO_get_data(b); ERR_FAIL_COND_V(sp == NULL, 0); @@ -258,6 +269,26 @@ int StreamPeerOpenSSL::_bio_puts(BIO *b, const char *str) { return _bio_write(b, str, strlen(str)); } +#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER) +BIO_METHOD *StreamPeerOpenSSL::_bio_method = NULL; + +BIO_METHOD *StreamPeerOpenSSL::_get_bio_method() { + if (_bio_method) // already initialized. + return _bio_method; + + /* it's a source/sink BIO */ + _bio_method = BIO_meth_new(100 | 0x400, "streampeer glue"); + BIO_meth_set_write(_bio_method, _bio_write); + BIO_meth_set_read(_bio_method, _bio_read); + BIO_meth_set_puts(_bio_method, _bio_puts); + BIO_meth_set_gets(_bio_method, _bio_gets); + BIO_meth_set_ctrl(_bio_method, _bio_ctrl); + BIO_meth_set_create(_bio_method, _bio_create); + BIO_meth_set_destroy(_bio_method, _bio_destroy); + + return _bio_method; +} +#else BIO_METHOD StreamPeerOpenSSL::_bio_method = { /* it's a source/sink BIO */ (100 | 0x400), @@ -271,6 +302,11 @@ BIO_METHOD StreamPeerOpenSSL::_bio_method = { _bio_destroy }; +BIO_METHOD *StreamPeerOpenSSL::_get_bio_method() { + return &_bio_method; +} +#endif + Error StreamPeerOpenSSL::connect_to_stream(Ref<StreamPeer> p_base, bool p_validate_certs, const String &p_for_hostname) { if (connected) @@ -330,8 +366,8 @@ Error StreamPeerOpenSSL::connect_to_stream(Ref<StreamPeer> p_base, bool p_valida } ssl = SSL_new(ctx); - bio = BIO_new(&_bio_method); - bio->ptr = this; + bio = BIO_new(_get_bio_method()); + BIO_set_data(bio, this); SSL_set_bio(ssl, bio, bio); if (p_for_hostname != String()) { @@ -532,7 +568,9 @@ void StreamPeerOpenSSL::initialize_ssl() { load_certs_func = _load_certs; _create = _create_func; +#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) CRYPTO_malloc_init(); // Initialize malloc, free, etc for OpenSSL's use +#endif SSL_library_init(); // Initialize OpenSSL's SSL libraries SSL_load_error_strings(); // Load SSL error strings ERR_load_BIO_strings(); // Load BIO error strings diff --git a/modules/openssl/stream_peer_openssl.h b/modules/openssl/stream_peer_openssl.h index 1e445ef681..ad09564447 100644 --- a/modules/openssl/stream_peer_openssl.h +++ b/modules/openssl/stream_peer_openssl.h @@ -53,7 +53,12 @@ private: static int _bio_gets(BIO *b, char *buf, int len); static int _bio_puts(BIO *b, const char *str); +#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER) + static BIO_METHOD *_bio_method; +#else static BIO_METHOD _bio_method; +#endif + static BIO_METHOD *_get_bio_method(); static bool _match_host_name(const char *name, const char *hostname); static Error _match_common_name(const char *hostname, const X509 *server_cert); diff --git a/modules/opus/SCsub b/modules/opus/SCsub index 4d3053c7ec..fee06bd267 100644 --- a/modules/opus/SCsub +++ b/modules/opus/SCsub @@ -6,7 +6,7 @@ Import('env_modules') env_opus = env_modules.Clone() # Thirdparty source files -if (env['builtin_opus'] != 'no'): +if env['builtin_opus']: thirdparty_dir = "#thirdparty/opus/" thirdparty_sources = [ @@ -209,7 +209,7 @@ if (env['builtin_opus'] != 'no'): env_opus.Append(CPPPATH=[thirdparty_dir + "/" + dir for dir in thirdparty_include_paths]) # also requires libogg - if (env['builtin_libogg'] != 'no'): + if env['builtin_libogg']: env_opus.Append(CPPPATH=["#thirdparty/libogg"]) # Module files diff --git a/modules/opus/audio_stream_opus.cpp b/modules/opus/audio_stream_opus.cpp index 1dac890eb8..c7748b9b21 100644 --- a/modules/opus/audio_stream_opus.cpp +++ b/modules/opus/audio_stream_opus.cpp @@ -56,7 +56,7 @@ int AudioStreamPlaybackOpus::_op_seek_func(void *_stream, opus_int64 _offset, in fa->seek(_offset); } break; case SEEK_CUR: { - fa->seek(fa->get_pos() + _offset); + fa->seek(fa->get_position() + _offset); } break; case SEEK_END: { fa->seek_end(_offset); @@ -83,7 +83,7 @@ int AudioStreamPlaybackOpus::_op_close_func(void *_stream) { opus_int64 AudioStreamPlaybackOpus::_op_tell_func(void *_stream) { FileAccess *_fa = (FileAccess *)_stream; - return (opus_int64)_fa->get_pos(); + return (opus_int64)_fa->get_position(); } void AudioStreamPlaybackOpus::_clear_stream() { @@ -247,7 +247,7 @@ void AudioStreamPlaybackOpus::play(float p_from) { frames_mixed = pre_skip; playing = true; if (p_from > 0) { - seek_pos(p_from); + seek(p_from); } } @@ -256,7 +256,7 @@ void AudioStreamPlaybackOpus::stop() { playing = false; } -void AudioStreamPlaybackOpus::seek_pos(float p_time) { +void AudioStreamPlaybackOpus::seek(float p_time) { if (!playing) return; ogg_int64_t pcm_offset = (ogg_int64_t)(p_time * osrate); bool ok = op_pcm_seek(opus_file, pcm_offset) == 0; @@ -340,7 +340,7 @@ float AudioStreamPlaybackOpus::get_length() const { return length; } -float AudioStreamPlaybackOpus::get_pos() const { +float AudioStreamPlaybackOpus::get_playback_position() const { int32_t frames = int32_t(frames_mixed); if (frames < 0) diff --git a/modules/opus/audio_stream_opus.h b/modules/opus/audio_stream_opus.h index ccfe04e84e..7b7740a804 100644 --- a/modules/opus/audio_stream_opus.h +++ b/modules/opus/audio_stream_opus.h @@ -99,8 +99,8 @@ public: virtual int get_loop_count() const { return repeats; } - virtual float get_pos() const; - virtual void seek_pos(float p_time); + virtual float get_playback_position() const; + virtual void seek(float p_time); virtual int get_channels() const { return stream_channels; } virtual int get_mix_rate() const { return osrate; } diff --git a/modules/pvr/texture_loader_pvr.cpp b/modules/pvr/texture_loader_pvr.cpp index 90ee164b6f..03592047ad 100644 --- a/modules/pvr/texture_loader_pvr.cpp +++ b/modules/pvr/texture_loader_pvr.cpp @@ -74,7 +74,7 @@ RES ResourceFormatPVR::load(const String &p_path, const String &p_original_path, uint32_t mipmaps = f->get_32(); uint32_t flags = f->get_32(); uint32_t surfsize = f->get_32(); - f->seek(f->get_pos() + 20); // bpp, rmask, gmask, bmask, amask + f->seek(f->get_position() + 20); // bpp, rmask, gmask, bmask, amask uint8_t pvrid[5] = { 0, 0, 0, 0, 0 }; f->get_buffer(pvrid, 4); ERR_FAIL_COND_V(String((char *)pvrid) != "PVR!", RES()); diff --git a/modules/recast/SCsub b/modules/recast/SCsub index 349bd22efb..500c0ec055 100644 --- a/modules/recast/SCsub +++ b/modules/recast/SCsub @@ -5,7 +5,7 @@ Import('env') # Not building in a separate env as core needs it # Thirdparty source files -if (env['builtin_recast'] != 'no'): +if env['builtin_recast']: thirdparty_dir = "#thirdparty/recastnavigation/Recast/" thirdparty_sources = [ "Source/Recast.cpp", @@ -24,10 +24,6 @@ if (env['builtin_recast'] != 'no'): env.Append(CPPPATH=[thirdparty_dir, thirdparty_dir + "/Include"]) - # also requires recast headers - if (env['builtin_recast'] != 'no'): - env.Append(CPPPATH=["#thirdparty/recastnavigation/Recast"]) - lib = env.Library("recast_builtin", thirdparty_sources) env.Append(LIBS=[lib]) diff --git a/modules/recast/config.py b/modules/recast/config.py index fb920482f5..d42f07b2a9 100644 --- a/modules/recast/config.py +++ b/modules/recast/config.py @@ -1,6 +1,6 @@ def can_build(platform): - return True + return platform != "android" def configure(env): diff --git a/modules/regex/SCsub b/modules/regex/SCsub index 2dfc2739e9..2bab144a28 100644 --- a/modules/regex/SCsub +++ b/modules/regex/SCsub @@ -7,7 +7,7 @@ env_regex = env_modules.Clone() env_regex.Append(CPPFLAGS=["-DPCRE2_CODE_UNIT_WIDTH=0"]) env_regex.add_source_files(env.modules_sources, "*.cpp") -if (env['builtin_pcre2'] != 'no'): +if env['builtin_pcre2']: jit_blacklist = ['javascript'] thirdparty_dir = '#thirdparty/pcre2/src/' thirdparty_flags = ['-DPCRE2_STATIC', '-DHAVE_CONFIG_H'] diff --git a/modules/squish/SCsub b/modules/squish/SCsub index cca7c038f1..127f22d798 100644 --- a/modules/squish/SCsub +++ b/modules/squish/SCsub @@ -6,7 +6,7 @@ Import('env_modules') env_squish = env_modules.Clone() # Thirdparty source files -if (env['builtin_squish'] != 'no'): +if env['builtin_squish']: thirdparty_dir = "#thirdparty/squish/" thirdparty_sources = [ "alpha.cpp", diff --git a/modules/squish/config.py b/modules/squish/config.py index cc8f098010..9b7729bda4 100644 --- a/modules/squish/config.py +++ b/modules/squish/config.py @@ -6,6 +6,6 @@ def can_build(platform): def configure(env): # Tools only, disabled for non-tools # TODO: Find a cleaner way to achieve that - if (env["tools"] == "no"): - env["module_squish_enabled"] = "no" + if not env['tools']: + env['module_squish_enabled'] = False env.disabled_modules.append("squish") diff --git a/modules/stb_vorbis/audio_stream_ogg_vorbis.cpp b/modules/stb_vorbis/audio_stream_ogg_vorbis.cpp index 9457fbfaf6..5c252bda86 100644 --- a/modules/stb_vorbis/audio_stream_ogg_vorbis.cpp +++ b/modules/stb_vorbis/audio_stream_ogg_vorbis.cpp @@ -58,7 +58,7 @@ void AudioStreamPlaybackOGGVorbis::_mix_internal(AudioFrame *p_buffer, int p_fra //end of file! if (vorbis_stream->loop) { //loop - seek_pos(vorbis_stream->loop_offset); + seek(vorbis_stream->loop_offset); loops++; } else { for (int i = mixed; i < p_frames; i++) { @@ -78,7 +78,7 @@ float AudioStreamPlaybackOGGVorbis::get_stream_sampling_rate() { void AudioStreamPlaybackOGGVorbis::start(float p_from_pos) { active = true; - seek_pos(p_from_pos); + seek(p_from_pos); loops = 0; _begin_resample(); } @@ -97,11 +97,11 @@ int AudioStreamPlaybackOGGVorbis::get_loop_count() const { return loops; } -float AudioStreamPlaybackOGGVorbis::get_pos() const { +float AudioStreamPlaybackOGGVorbis::get_playback_position() const { return float(frames_mixed) / vorbis_stream->sample_rate; } -void AudioStreamPlaybackOGGVorbis::seek_pos(float p_time) { +void AudioStreamPlaybackOGGVorbis::seek(float p_time) { if (!active) return; @@ -129,7 +129,6 @@ AudioStreamPlaybackOGGVorbis::~AudioStreamPlaybackOGGVorbis() { Ref<AudioStreamPlayback> AudioStreamOGGVorbis::instance_playback() { Ref<AudioStreamPlaybackOGGVorbis> ovs; - printf("instance at %p, data %p\n", this, data); ERR_FAIL_COND_V(data == NULL, ovs); @@ -208,8 +207,6 @@ void AudioStreamOGGVorbis::set_data(const PoolVector<uint8_t> &p_data) { break; } } - - printf("create at %p, data %p\n", this, data); } PoolVector<uint8_t> AudioStreamOGGVorbis::get_data() const { diff --git a/modules/stb_vorbis/audio_stream_ogg_vorbis.h b/modules/stb_vorbis/audio_stream_ogg_vorbis.h index bcd829a56a..f4d381897b 100644 --- a/modules/stb_vorbis/audio_stream_ogg_vorbis.h +++ b/modules/stb_vorbis/audio_stream_ogg_vorbis.h @@ -67,8 +67,8 @@ public: virtual int get_loop_count() const; //times it looped - virtual float get_pos() const; - virtual void seek_pos(float p_time); + virtual float get_playback_position() const; + virtual void seek(float p_time); virtual float get_length() const; //if supported, otherwise return 0 diff --git a/modules/svg/image_loader_svg.cpp b/modules/svg/image_loader_svg.cpp index e27452354b..9c198ea98e 100644 --- a/modules/svg/image_loader_svg.cpp +++ b/modules/svg/image_loader_svg.cpp @@ -51,7 +51,7 @@ inline void change_nsvg_paint_color(NSVGpaint *p_paint, const uint32_t p_old, co if (p_paint->type == NSVG_PAINT_COLOR) { if (p_paint->color << 8 == p_old << 8) { - p_paint->color = p_new; + p_paint->color = (p_paint->color & 0xFF000000) | (p_new & 0x00FFFFFF); } } diff --git a/modules/tga/image_loader_tga.cpp b/modules/tga/image_loader_tga.cpp index 7c7cf5bcbe..d7a1ce7308 100644 --- a/modules/tga/image_loader_tga.cpp +++ b/modules/tga/image_loader_tga.cpp @@ -253,7 +253,7 @@ Error ImageLoaderTGA::load_image(Ref<Image> p_image, FileAccess *f, bool p_force err = FAILED; if (err == OK) { - f->seek(f->get_pos() + tga_header.id_length); + f->seek(f->get_position() + tga_header.id_length); PoolVector<uint8_t> palette; @@ -269,7 +269,7 @@ Error ImageLoaderTGA::load_image(Ref<Image> p_image, FileAccess *f, bool p_force } PoolVector<uint8_t>::Write src_image_w = src_image.write(); - f->get_buffer(&src_image_w[0], src_image_len - f->get_pos()); + f->get_buffer(&src_image_w[0], src_image_len - f->get_position()); PoolVector<uint8_t>::Read src_image_r = src_image.read(); diff --git a/modules/theora/SCsub b/modules/theora/SCsub index 2de4d29640..9015c2c354 100644 --- a/modules/theora/SCsub +++ b/modules/theora/SCsub @@ -6,7 +6,7 @@ Import('env_modules') env_theora = env_modules.Clone() # Thirdparty source files -if (env['builtin_libtheora'] != 'no'): +if env['builtin_libtheora']: thirdparty_dir = "#thirdparty/libtheora/" thirdparty_sources = [ #"analyze.c", @@ -74,9 +74,9 @@ if (env['builtin_libtheora'] != 'no'): env_theora.Append(CPPPATH=[thirdparty_dir]) # also requires libogg and libvorbis - if (env['builtin_libogg'] != 'no'): + if env['builtin_libogg']: env_theora.Append(CPPPATH=["#thirdparty/libogg"]) - if (env['builtin_libvorbis'] != 'no'): + if env['builtin_libvorbis']: env_theora.Append(CPPPATH=["#thirdparty/libvorbis"]) # Godot source files diff --git a/modules/theora/video_stream_theora.cpp b/modules/theora/video_stream_theora.cpp index 02b994f8db..c75bec31df 100644 --- a/modules/theora/video_stream_theora.cpp +++ b/modules/theora/video_stream_theora.cpp @@ -634,12 +634,12 @@ int VideoStreamPlaybackTheora::get_loop_count() const { return 0; }; -float VideoStreamPlaybackTheora::get_pos() const { +float VideoStreamPlaybackTheora::get_playback_position() const { return get_time(); }; -void VideoStreamPlaybackTheora::seek_pos(float p_time){ +void VideoStreamPlaybackTheora::seek(float p_time){ // no }; diff --git a/modules/theora/video_stream_theora.h b/modules/theora/video_stream_theora.h index f04e49c662..484a1a7fb9 100644 --- a/modules/theora/video_stream_theora.h +++ b/modules/theora/video_stream_theora.h @@ -140,8 +140,8 @@ public: virtual int get_loop_count() const; - virtual float get_pos() const; - virtual void seek_pos(float p_time); + virtual float get_playback_position() const; + virtual void seek(float p_time); void set_file(const String &p_file); diff --git a/modules/tinyexr/config.py b/modules/tinyexr/config.py index 2e4b96a6b0..3e16fd725e 100644 --- a/modules/tinyexr/config.py +++ b/modules/tinyexr/config.py @@ -6,6 +6,6 @@ def can_build(platform): def configure(env): # Tools only, disabled for non-tools # TODO: Find a cleaner way to achieve that - if (env["tools"] == "no"): - env["module_tinyexr_enabled"] = "no" + if not env['tools']: + env['module_tinyexr_enabled'] = False env.disabled_modules.append("tinyexr") diff --git a/modules/visual_script/visual_script.cpp b/modules/visual_script/visual_script.cpp index 88012d2031..48145495e4 100644 --- a/modules/visual_script/visual_script.cpp +++ b/modules/visual_script/visual_script.cpp @@ -125,6 +125,7 @@ void VisualScriptNode::_bind_methods() { ClassDB::bind_method(D_METHOD("get_visual_script"), &VisualScriptNode::get_visual_script); ClassDB::bind_method(D_METHOD("set_default_input_value", "port_idx", "value"), &VisualScriptNode::set_default_input_value); ClassDB::bind_method(D_METHOD("get_default_input_value", "port_idx"), &VisualScriptNode::get_default_input_value); + ClassDB::bind_method(D_METHOD("ports_changed_notify"), &VisualScriptNode::ports_changed_notify); ClassDB::bind_method(D_METHOD("_set_default_input_values", "values"), &VisualScriptNode::_set_default_input_values); ClassDB::bind_method(D_METHOD("_get_default_input_values"), &VisualScriptNode::_get_default_input_values); @@ -423,7 +424,7 @@ Ref<VisualScriptNode> VisualScript::get_node(const StringName &p_func, int p_id) return func.nodes[p_id].node; } -void VisualScript::set_node_pos(const StringName &p_func, int p_id, const Point2 &p_pos) { +void VisualScript::set_node_position(const StringName &p_func, int p_id, const Point2 &p_pos) { ERR_FAIL_COND(instances.size()); ERR_FAIL_COND(!functions.has(p_func)); @@ -433,7 +434,7 @@ void VisualScript::set_node_pos(const StringName &p_func, int p_id, const Point2 func.nodes[p_id].pos = p_pos; } -Point2 VisualScript::get_node_pos(const StringName &p_func, int p_id) const { +Point2 VisualScript::get_node_position(const StringName &p_func, int p_id) const { ERR_FAIL_COND_V(!functions.has(p_func), Point2()); const Function &func = functions[p_func]; @@ -1273,14 +1274,14 @@ void VisualScript::_bind_methods() { ClassDB::bind_method(D_METHOD("set_function_scroll", "name", "ofs"), &VisualScript::set_function_scroll); ClassDB::bind_method(D_METHOD("get_function_scroll", "name"), &VisualScript::get_function_scroll); - ClassDB::bind_method(D_METHOD("add_node", "func", "id", "node", "pos"), &VisualScript::add_node, DEFVAL(Point2())); + ClassDB::bind_method(D_METHOD("add_node", "func", "id", "node", "position"), &VisualScript::add_node, DEFVAL(Point2())); ClassDB::bind_method(D_METHOD("remove_node", "func", "id"), &VisualScript::remove_node); ClassDB::bind_method(D_METHOD("get_function_node_id", "name"), &VisualScript::get_function_node_id); ClassDB::bind_method(D_METHOD("get_node", "func", "id"), &VisualScript::get_node); ClassDB::bind_method(D_METHOD("has_node", "func", "id"), &VisualScript::has_node); - ClassDB::bind_method(D_METHOD("set_node_pos", "func", "id", "pos"), &VisualScript::set_node_pos); - ClassDB::bind_method(D_METHOD("get_node_pos", "func", "id"), &VisualScript::get_node_pos); + ClassDB::bind_method(D_METHOD("set_node_position", "func", "id", "position"), &VisualScript::set_node_position); + ClassDB::bind_method(D_METHOD("get_node_position", "func", "id"), &VisualScript::get_node_position); ClassDB::bind_method(D_METHOD("sequence_connect", "func", "from_node", "from_output", "to_node"), &VisualScript::sequence_connect); ClassDB::bind_method(D_METHOD("sequence_disconnect", "func", "from_node", "from_output", "to_node"), &VisualScript::sequence_disconnect); @@ -2008,8 +2009,8 @@ void VisualScriptInstance::create(const Ref<VisualScript> &p_script, Object *p_o Node *node = Object::cast_to<Node>(p_owner); 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("_physics_process")) + node->set_physics_process(true); if (p_script->functions.has("_input")) node->set_process_input(true); if (p_script->functions.has("_unhandled_input")) diff --git a/modules/visual_script/visual_script.h b/modules/visual_script/visual_script.h index 297e9e510f..4ae50ee829 100644 --- a/modules/visual_script/visual_script.h +++ b/modules/visual_script/visual_script.h @@ -278,8 +278,8 @@ public: 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 set_node_position(const StringName &p_func, int p_id, const Point2 &p_pos); + Point2 get_node_position(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); diff --git a/modules/visual_script/visual_script_builtin_funcs.cpp b/modules/visual_script/visual_script_builtin_funcs.cpp index 972be5f5a4..4b294325dc 100644 --- a/modules/visual_script/visual_script_builtin_funcs.cpp +++ b/modules/visual_script/visual_script_builtin_funcs.cpp @@ -65,6 +65,8 @@ const char *VisualScriptBuiltinFunc::func_name[VisualScriptBuiltinFunc::FUNC_MAX "decimals", "stepify", "lerp", + "inverse_lerp", + "range_lerp", "dectime", "randomize", "randi", @@ -194,9 +196,12 @@ int VisualScriptBuiltinFunc::get_func_argument_count(BuiltinFunc p_func) { case COLORN: return 2; case MATH_LERP: + case MATH_INVERSE_LERP: case MATH_DECTIME: case LOGIC_CLAMP: return 3; + case MATH_RANGE_LERP: + return 5; case FUNC_MAX: { } } @@ -297,7 +302,26 @@ PropertyInfo VisualScriptBuiltinFunc::get_input_value_port_info(int p_idx) const return PropertyInfo(Variant::REAL, "to"); else return PropertyInfo(Variant::REAL, "weight"); - + } break; + case MATH_INVERSE_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, "value"); + } break; + case MATH_RANGE_LERP: { + if (p_idx == 0) + return PropertyInfo(Variant::REAL, "value"); + else if (p_idx == 1) + return PropertyInfo(Variant::REAL, "istart"); + else if (p_idx == 2) + return PropertyInfo(Variant::REAL, "istop"); + else if (p_idx == 3) + return PropertyInfo(Variant::REAL, "ostart"); + else + return PropertyInfo(Variant::REAL, "ostop"); } break; case MATH_DECTIME: { if (p_idx == 0) @@ -495,6 +519,8 @@ PropertyInfo VisualScriptBuiltinFunc::get_output_value_port_info(int p_idx) cons } break; case MATH_STEPIFY: case MATH_LERP: + case MATH_INVERSE_LERP: + case MATH_RANGE_LERP: case MATH_DECTIME: { t = Variant::REAL; @@ -795,6 +821,22 @@ void VisualScriptBuiltinFunc::exec_func(BuiltinFunc p_func, const Variant **p_in VALIDATE_ARG_NUM(2); *r_return = Math::lerp((double)*p_inputs[0], (double)*p_inputs[1], (double)*p_inputs[2]); } break; + case VisualScriptBuiltinFunc::MATH_INVERSE_LERP: { + + VALIDATE_ARG_NUM(0); + VALIDATE_ARG_NUM(1); + VALIDATE_ARG_NUM(2); + *r_return = Math::inverse_lerp((double)*p_inputs[0], (double)*p_inputs[1], (double)*p_inputs[2]); + } break; + case VisualScriptBuiltinFunc::MATH_RANGE_LERP: { + + VALIDATE_ARG_NUM(0); + VALIDATE_ARG_NUM(1); + VALIDATE_ARG_NUM(2); + VALIDATE_ARG_NUM(3); + VALIDATE_ARG_NUM(4); + *r_return = Math::range_lerp((double)*p_inputs[0], (double)*p_inputs[1], (double)*p_inputs[2], (double)*p_inputs[3], (double)*p_inputs[4]); + } break; case VisualScriptBuiltinFunc::MATH_DECTIME: { VALIDATE_ARG_NUM(0); @@ -1203,6 +1245,8 @@ void VisualScriptBuiltinFunc::_bind_methods() { BIND_ENUM_CONSTANT(MATH_DECIMALS); BIND_ENUM_CONSTANT(MATH_STEPIFY); BIND_ENUM_CONSTANT(MATH_LERP); + BIND_ENUM_CONSTANT(MATH_INVERSE_LERP); + BIND_ENUM_CONSTANT(MATH_RANGE_LERP); BIND_ENUM_CONSTANT(MATH_DECTIME); BIND_ENUM_CONSTANT(MATH_RANDOMIZE); BIND_ENUM_CONSTANT(MATH_RAND); @@ -1236,6 +1280,11 @@ void VisualScriptBuiltinFunc::_bind_methods() { BIND_ENUM_CONSTANT(FUNC_MAX); } +VisualScriptBuiltinFunc::VisualScriptBuiltinFunc(VisualScriptBuiltinFunc::BuiltinFunc func) { + + this->func = func; +} + VisualScriptBuiltinFunc::VisualScriptBuiltinFunc() { func = MATH_SIN; @@ -1244,9 +1293,7 @@ VisualScriptBuiltinFunc::VisualScriptBuiltinFunc() { template <VisualScriptBuiltinFunc::BuiltinFunc func> static Ref<VisualScriptNode> create_builtin_func_node(const String &p_name) { - Ref<VisualScriptBuiltinFunc> node; - node.instance(); - node->set_func(func); + Ref<VisualScriptBuiltinFunc> node = memnew(VisualScriptBuiltinFunc(func)); return node; } @@ -1282,6 +1329,8 @@ void register_visual_script_builtin_func_node() { 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/inverse_lerp", create_builtin_func_node<VisualScriptBuiltinFunc::MATH_INVERSE_LERP>); + VisualScriptLanguage::singleton->add_register_func("functions/built_in/range_lerp", create_builtin_func_node<VisualScriptBuiltinFunc::MATH_RANGE_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>); diff --git a/modules/visual_script/visual_script_builtin_funcs.h b/modules/visual_script/visual_script_builtin_funcs.h index 97ab307039..5758d23e8f 100644 --- a/modules/visual_script/visual_script_builtin_funcs.h +++ b/modules/visual_script/visual_script_builtin_funcs.h @@ -64,6 +64,8 @@ public: MATH_DECIMALS, MATH_STEPIFY, MATH_LERP, + MATH_INVERSE_LERP, + MATH_RANGE_LERP, MATH_DECTIME, MATH_RANDOMIZE, MATH_RAND, @@ -130,6 +132,7 @@ public: virtual VisualScriptNodeInstance *instance(VisualScriptInstance *p_instance); + VisualScriptBuiltinFunc(VisualScriptBuiltinFunc::BuiltinFunc func); VisualScriptBuiltinFunc(); }; diff --git a/modules/visual_script/visual_script_editor.cpp b/modules/visual_script/visual_script_editor.cpp index ee83c44793..03015df844 100644 --- a/modules/visual_script/visual_script_editor.cpp +++ b/modules/visual_script/visual_script_editor.cpp @@ -331,44 +331,83 @@ public: VisualScriptEditorVariableEdit() { undo_redo = NULL; } }; -static Color _color_from_type(Variant::Type p_type) { +static Color _color_from_type(Variant::Type p_type, bool dark_theme = true) { 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::TRANSFORM2D: color = Color::html("c4ec69"); break; - case Variant::PLANE: color = Color::html("f77070"); break; - case Variant::QUAT: color = Color::html("ec69a3"); break; - case Variant::RECT3: color = Color::html("ee7991"); break; - case Variant::BASIS: color = Color::html("e3ec69"); break; - case Variant::TRANSFORM: color = Color::html("f6a86e"); break; - - case Variant::COLOR: color = Color::html("9dff70"); 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::DICTIONARY: color = Color::html("77edb1"); break; - - case Variant::ARRAY: color = Color::html("e0e0e0"); break; - case Variant::POOL_BYTE_ARRAY: color = Color::html("aaf4c8"); break; - case Variant::POOL_INT_ARRAY: color = Color::html("afdcf5"); break; - case Variant::POOL_REAL_ARRAY: color = Color::html("97e7f8"); break; - case Variant::POOL_STRING_ARRAY: color = Color::html("9dc4f2"); break; - case Variant::POOL_VECTOR2_ARRAY: color = Color::html("d1b3f5"); break; - case Variant::POOL_VECTOR3_ARRAY: color = Color::html("df9bf2"); break; - case Variant::POOL_COLOR_ARRAY: color = Color::html("e9ff97"); break; - - default: - color.set_hsv(p_type / float(Variant::VARIANT_MAX), 0.7, 0.7); - } + if (dark_theme) + 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::TRANSFORM2D: color = Color::html("#c4ec69"); break; + case Variant::PLANE: color = Color::html("#f77070"); break; + case Variant::QUAT: color = Color::html("#ec69a3"); break; + case Variant::RECT3: color = Color::html("#ee7991"); break; + case Variant::BASIS: color = Color::html("#e3ec69"); break; + case Variant::TRANSFORM: color = Color::html("#f6a86e"); break; + + case Variant::COLOR: color = Color::html("#9dff70"); 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::DICTIONARY: color = Color::html("#77edb1"); break; + + case Variant::ARRAY: color = Color::html("#e0e0e0"); break; + case Variant::POOL_BYTE_ARRAY: color = Color::html("#aaf4c8"); break; + case Variant::POOL_INT_ARRAY: color = Color::html("#afdcf5"); break; + case Variant::POOL_REAL_ARRAY: color = Color::html("#97e7f8"); break; + case Variant::POOL_STRING_ARRAY: color = Color::html("#9dc4f2"); break; + case Variant::POOL_VECTOR2_ARRAY: color = Color::html("#d1b3f5"); break; + case Variant::POOL_VECTOR3_ARRAY: color = Color::html("#df9bf2"); break; + case Variant::POOL_COLOR_ARRAY: color = Color::html("#e9ff97"); break; + + default: + color.set_hsv(p_type / float(Variant::VARIANT_MAX), 0.7, 0.7); + } + else + switch (p_type) { + case Variant::NIL: color = Color::html("#25e3a0"); break; + + case Variant::BOOL: color = Color::html("#6d8eeb"); break; + case Variant::INT: color = Color::html("#4fb2e9"); break; + case Variant::REAL: color = Color::html("#27ccf0"); break; + case Variant::STRING: color = Color::html("#4690e7"); break; + + case Variant::VECTOR2: color = Color::html("#ad76ee"); break; + case Variant::RECT2: color = Color::html("#ee758e"); break; + case Variant::VECTOR3: color = Color::html("#dc6aed"); break; + case Variant::TRANSFORM2D: color = Color::html("#96ce1a"); break; + case Variant::PLANE: color = Color::html("#f77070"); break; + case Variant::QUAT: color = Color::html("#ec69a3"); break; + case Variant::RECT3: color = Color::html("#ee7991"); break; + case Variant::BASIS: color = Color::html("#b2bb19"); break; + case Variant::TRANSFORM: color = Color::html("#f49047"); break; + + case Variant::COLOR: color = Color::html("#3cbf00"); break; + case Variant::NODE_PATH: color = Color::html("#6993ec"); break; + case Variant::_RID: color = Color::html("#2ce573"); break; + case Variant::OBJECT: color = Color::html("#12d5c3"); break; + case Variant::DICTIONARY: color = Color::html("#57e99f"); break; + + case Variant::ARRAY: color = Color::html("#737373"); break; + case Variant::POOL_BYTE_ARRAY: color = Color::html("#61ea98"); break; + case Variant::POOL_INT_ARRAY: color = Color::html("#61baeb"); break; + case Variant::POOL_REAL_ARRAY: color = Color::html("#40d3f2"); break; + case Variant::POOL_STRING_ARRAY: color = Color::html("#609fea"); break; + case Variant::POOL_VECTOR2_ARRAY: color = Color::html("#9d5dea"); break; + case Variant::POOL_VECTOR3_ARRAY: color = Color::html("#ca5aea"); break; + case Variant::POOL_COLOR_ARRAY: color = Color::html("#92ba00"); break; + + default: + color.set_hsv(p_type / float(Variant::VARIANT_MAX), 0.3, 0.3); + } + return color; } @@ -481,7 +520,7 @@ void VisualScriptEditor::_update_graph(int p_only_id) { continue; Ref<VisualScriptNode> node = script->get_node(edited_func, E->get()); - Vector2 pos = script->get_node_pos(edited_func, E->get()); + Vector2 pos = script->get_node_position(edited_func, E->get()); GraphNode *gnode = memnew(GraphNode); gnode->set_title(node->get_caption()); @@ -531,7 +570,7 @@ void VisualScriptEditor::_update_graph(int p_only_id) { Color c = sbf->get_border_color(MARGIN_TOP); c.a = 1; if (EditorSettings::get_singleton()->get("interface/theme/use_graph_node_headers")) { - Color mono_color = ((c.r + c.g + c.b) / 3) < 0.5 ? Color(1.0, 1.0, 1.0) : Color(0, 0, 0); + Color mono_color = ((c.r + c.g + c.b) / 3) < 0.7 ? Color(1.0, 1.0, 1.0) : Color(0.0, 0.0, 0.0); mono_color.a = 0.85; c = mono_color; } @@ -542,10 +581,12 @@ void VisualScriptEditor::_update_graph(int p_only_id) { gnode->add_style_override("frame", sbf); } + const Color mono_color = get_color("mono_color", "Editor"); + 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_slot(0, node->has_input_sequence_port(), TYPE_SEQUENCE, mono_color, single_seq_output, TYPE_SEQUENCE, mono_color, seq_port, seq_port); gnode->set_offset(pos * EDSCALE); slot_idx++; @@ -562,7 +603,7 @@ void VisualScriptEditor::_update_graph(int p_only_id) { 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); + gnode->set_slot(slot_idx, false, 0, Color(), true, TYPE_SEQUENCE, mono_color, seq_port, seq_port); slot_idx++; } } @@ -677,10 +718,11 @@ void VisualScriptEditor::_update_graph(int p_only_id) { gnode->add_child(hbc); + bool dark_theme = get_constant("dark_theme", "Editor"); 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); + gnode->set_slot(slot_idx, left_ok, left_type, _color_from_type(left_type, dark_theme), true, TYPE_SEQUENCE, mono_color, 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)); + gnode->set_slot(slot_idx, left_ok, left_type, _color_from_type(left_type, dark_theme), right_ok, right_type, _color_from_type(right_type, dark_theme)); } slot_idx++; @@ -710,7 +752,7 @@ void VisualScriptEditor::_update_members() { 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")); + functions->set_custom_color(0, Control::get_color("mono_color", "Editor")); List<StringName> func_names; script->get_function_list(&func_names); @@ -719,13 +761,7 @@ void VisualScriptEditor::_update_members() { 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); } @@ -734,7 +770,7 @@ void VisualScriptEditor::_update_members() { 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")); + variables->set_custom_color(0, Control::get_color("mono_color", "Editor")); Ref<Texture> type_icons[Variant::VARIANT_MAX] = { Control::get_icon("MiniVariant", "EditorIcons"), @@ -773,13 +809,11 @@ void VisualScriptEditor::_update_members() { ti->set_text(0, E->get()); Variant var = script->get_variable_default_value(E->get()); - ti->set_suffix(0, "=" + String(var)); + 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); @@ -789,7 +823,7 @@ void VisualScriptEditor::_update_members() { _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")); + _signals->set_custom_color(0, Control::get_color("mono_color", "Editor")); List<StringName> signal_names; script->get_custom_signal_list(&signal_names); @@ -798,8 +832,6 @@ void VisualScriptEditor::_update_members() { 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); @@ -1065,7 +1097,7 @@ void VisualScriptEditor::_available_node_doubleclicked() { 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()); + Point2 pos = script->get_node_position(edited_func, E->get()); if (pos.distance_to(ofs) < 15) { ofs += Vector2(graph->get_snap(), graph->get_snap()); exists = true; @@ -1186,7 +1218,7 @@ void VisualScriptEditor::_on_nodes_delete() { 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())); + undo_redo->add_undo_method(script.ptr(), "add_node", edited_func, F->get(), script->get_node(edited_func, F->get()), script->get_node_position(edited_func, F->get())); List<VisualScript::SequenceConnection> sequence_conns; script->get_sequence_connection_list(edited_func, &sequence_conns); @@ -1243,7 +1275,7 @@ void VisualScriptEditor::_on_nodes_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_do_method(script.ptr(), "add_node", edited_func, new_id, dupe, script->get_node_position(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"); @@ -1277,7 +1309,7 @@ Variant VisualScriptEditor::get_drag_data_fw(const Point2 &p_point, Control *p_f if (p_from == nodes) { - TreeItem *it = nodes->get_item_at_pos(p_point); + TreeItem *it = nodes->get_item_at_position(p_point); if (!it) return Variant(); String type = it->get_metadata(0); @@ -1296,7 +1328,7 @@ Variant VisualScriptEditor::get_drag_data_fw(const Point2 &p_point, Control *p_f if (p_from == members) { - TreeItem *it = members->get_item_at_pos(p_point); + TreeItem *it = members->get_item_at_position(p_point); if (!it) return Variant(); @@ -2197,7 +2229,7 @@ void VisualScriptEditor::_move_node(String func, int p_id, const Vector2 &p_to) if (Object::cast_to<GraphNode>(node)) Object::cast_to<GraphNode>(node)->set_offset(p_to); } - script->set_node_pos(edited_func, p_id, p_to / EDSCALE); + script->set_node_position(edited_func, p_id, p_to / EDSCALE); } void VisualScriptEditor::_node_moved(Vector2 p_from, Vector2 p_to, int p_id) { @@ -2211,7 +2243,7 @@ void VisualScriptEditor::_remove_node(int p_id) { undo_redo->create_action(TTR("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)); + undo_redo->add_undo_method(script.ptr(), "add_node", edited_func, p_id, script->get_node(edited_func, p_id), script->get_node_position(edited_func, p_id)); List<VisualScript::SequenceConnection> sequence_conns; script->get_sequence_connection_list(edited_func, &sequence_conns); @@ -2767,18 +2799,30 @@ void VisualScriptEditor::_notification(int p_what) { variable_editor->connect("changed", this, "_update_members"); signal_editor->connect("changed", this, "_update_members"); + Ref<Theme> tm = EditorNode::get_singleton()->get_theme_base()->get_theme(); + + bool dark_theme = tm->get_constant("dark_theme", "Editor"); + List<Pair<String, Color> > colors; - colors.push_back(Pair<String, Color>("flow_control", Color::html("#f4f4f4"))); - colors.push_back(Pair<String, Color>("functions", Color::html("#f58581"))); - colors.push_back(Pair<String, Color>("data", Color::html("#80f6cf"))); - colors.push_back(Pair<String, Color>("operators", Color::html("#ab97df"))); - colors.push_back(Pair<String, Color>("custom", Color::html("#80bbf6"))); - colors.push_back(Pair<String, Color>("constants", Color::html("#f680b0"))); + if (dark_theme) { + colors.push_back(Pair<String, Color>("flow_control", Color::html("#f4f4f4"))); + colors.push_back(Pair<String, Color>("functions", Color::html("#f58581"))); + colors.push_back(Pair<String, Color>("data", Color::html("#80f6cf"))); + colors.push_back(Pair<String, Color>("operators", Color::html("#ab97df"))); + colors.push_back(Pair<String, Color>("custom", Color::html("#80bbf6"))); + colors.push_back(Pair<String, Color>("constants", Color::html("#f680b0"))); + } else { + colors.push_back(Pair<String, Color>("flow_control", Color::html("#424242"))); + colors.push_back(Pair<String, Color>("functions", Color::html("#f26661"))); + colors.push_back(Pair<String, Color>("data", Color::html("#13bb83"))); + colors.push_back(Pair<String, Color>("operators", Color::html("#8265d0"))); + colors.push_back(Pair<String, Color>("custom", Color::html("#4ea0f2"))); + colors.push_back(Pair<String, Color>("constants", Color::html("#f02f7d"))); + } for (List<Pair<String, Color> >::Element *E = colors.front(); E; E = E->next()) { - print_line(E->get().first); - Ref<StyleBoxFlat> sb = EditorNode::get_singleton()->get_theme_base()->get_theme()->get_stylebox("frame", "GraphNode"); - if (sb != NULL) { + Ref<StyleBoxFlat> sb = tm->get_stylebox("frame", "GraphNode"); + if (!sb.is_null()) { Ref<StyleBoxFlat> frame_style = sb->duplicate(); Color c = sb->get_border_color(MARGIN_TOP); Color cn = E->get().second; @@ -2895,7 +2939,7 @@ void VisualScriptEditor::_menu_option(int p_what) { } if (node.is_valid()) { clipboard->nodes[id] = node->duplicate(); - clipboard->nodes_positions[id] = script->get_node_pos(edited_func, id); + clipboard->nodes_positions[id] = script->get_node_position(edited_func, id); } } } @@ -2955,7 +2999,7 @@ void VisualScriptEditor::_menu_option(int p_what) { 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)); + Vector2 pos = script->get_node_position(edited_func, E->get()).snapped(Vector2(2, 2)); existing_positions.insert(pos); } } @@ -3069,7 +3113,7 @@ void VisualScriptEditor::_member_option(int p_option) { 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())); + undo_redo->add_undo_method(script.ptr(), "add_node", name, E->get(), script->get_node(name, E->get()), script->get_node_position(name, E->get())); } List<VisualScript::SequenceConnection> seq_connections; @@ -3267,8 +3311,7 @@ VisualScriptEditor::VisualScriptEditor() { graph = memnew(GraphEdit); add_child(graph); - graph->set_area_as_parent_rect(); - graph->set_h_size_flags(SIZE_EXPAND_FILL); + graph->set_anchors_and_margins_preset(Control::PRESET_WIDE); 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"); diff --git a/modules/visual_script/visual_script_func_nodes.cpp b/modules/visual_script/visual_script_func_nodes.cpp index f02e797fe6..8d73de9889 100644 --- a/modules/visual_script/visual_script_func_nodes.cpp +++ b/modules/visual_script/visual_script_func_nodes.cpp @@ -42,7 +42,7 @@ int VisualScriptFunctionCall::get_output_sequence_port_count() const { - if (method_cache.flags & METHOD_FLAG_CONST || call_mode == CALL_MODE_BASIC_TYPE) + if (method_cache.flags & METHOD_FLAG_CONST || (call_mode == CALL_MODE_BASIC_TYPE && Variant::is_method_const(basic_type, function))) return 0; else return 1; @@ -50,7 +50,7 @@ int VisualScriptFunctionCall::get_output_sequence_port_count() const { bool VisualScriptFunctionCall::has_input_sequence_port() const { - if (method_cache.flags & METHOD_FLAG_CONST || call_mode == CALL_MODE_BASIC_TYPE) + if (method_cache.flags & METHOD_FLAG_CONST || (call_mode == CALL_MODE_BASIC_TYPE && Variant::is_method_const(basic_type, function))) return false; else return true; @@ -763,7 +763,7 @@ public: NodePath node_path; int input_args; bool validate; - bool returns; + int returns; VisualScriptFunctionCall::RPCCallMode rpc_mode; StringName function; StringName singleton; @@ -856,7 +856,13 @@ public: } } else if (returns) { if (call_mode == VisualScriptFunctionCall::CALL_MODE_INSTANCE) { - *p_outputs[1] = v.call(function, p_inputs + 1, input_args, r_error); + if (returns >= 2) { + *p_outputs[1] = v.call(function, p_inputs + 1, input_args, r_error); + } else { + r_error.error = Variant::CallError::CALL_ERROR_INVALID_METHOD; + r_error_str = "Invalid returns count for call_mode == CALL_MODE_INSTANCE"; + return 0; + } } else { *p_outputs[0] = v.call(function, p_inputs + 1, input_args, r_error); } diff --git a/modules/visual_script/visual_script_nodes.cpp b/modules/visual_script/visual_script_nodes.cpp index 16aec76e57..d3cd839cf3 100644 --- a/modules/visual_script/visual_script_nodes.cpp +++ b/modules/visual_script/visual_script_nodes.cpp @@ -532,6 +532,7 @@ String VisualScriptOperator::get_text() const { L"A or B", //OP_OR, L"A xor B", //OP_XOR, L"not A", //OP_NOT, + L"A in B", //OP_IN, }; return op_names[op]; @@ -1109,7 +1110,7 @@ void VisualScriptConstant::_bind_methods() { } ADD_PROPERTY(PropertyInfo(Variant::INT, "type", PROPERTY_HINT_ENUM, argt), "set_constant_type", "get_constant_type"); - ADD_PROPERTY(PropertyInfo(Variant::NIL, "value"), "set_constant_value", "get_constant_value"); + ADD_PROPERTY(PropertyInfo(Variant::NIL, "value", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NIL_IS_VARIANT), "set_constant_value", "get_constant_value"); } class VisualScriptNodeInstanceConstant : public VisualScriptNodeInstance { @@ -1598,7 +1599,7 @@ VisualScriptNodeInstance *VisualScriptClassConstant::instance(VisualScriptInstan void VisualScriptClassConstant::_validate_property(PropertyInfo &property) const { - if (property.name == "constant/constant") { + if (property.name == "constant") { List<String> constants; ClassDB::get_integer_constant_list(base_type, &constants, true); @@ -1727,7 +1728,7 @@ VisualScriptNodeInstance *VisualScriptBasicTypeConstant::instance(VisualScriptIn void VisualScriptBasicTypeConstant::_validate_property(PropertyInfo &property) const { - if (property.name == "constant/constant") { + if (property.name == "constant") { List<StringName> constants; Variant::get_numeric_constants_for_type(type, &constants); @@ -2689,7 +2690,7 @@ VisualScriptNodeInstance *VisualScriptCustomNode::instance(VisualScriptInstance } void VisualScriptCustomNode::_script_changed() { - ports_changed_notify(); + call_deferred("ports_changed_notify"); } void VisualScriptCustomNode::_bind_methods() { diff --git a/modules/visual_script/visual_script_yield_nodes.cpp b/modules/visual_script/visual_script_yield_nodes.cpp index b6d4021ca3..3c9076246d 100644 --- a/modules/visual_script/visual_script_yield_nodes.cpp +++ b/modules/visual_script/visual_script_yield_nodes.cpp @@ -82,7 +82,7 @@ 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_PHYSICS_FRAME: return "Next Physics Frame"; break; case YIELD_WAIT: return rtos(wait_time) + " sec(s)"; break; } @@ -122,7 +122,7 @@ public: 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_PHYSICS_FRAME: state->connect_to_signal(tree, "physics_frame", Array()); break; case VisualScriptYield::YIELD_WAIT: state->connect_to_signal(tree->create_timer(wait_time).ptr(), "timeout", Array()); break; } @@ -186,11 +186,11 @@ void VisualScriptYield::_bind_methods() { ClassDB::bind_method(D_METHOD("set_wait_time", "sec"), &VisualScriptYield::set_wait_time); ClassDB::bind_method(D_METHOD("get_wait_time"), &VisualScriptYield::get_wait_time); - ADD_PROPERTY(PropertyInfo(Variant::INT, "mode", PROPERTY_HINT_ENUM, "Frame,FixedFrame,Time", PROPERTY_USAGE_NOEDITOR), "set_yield_mode", "get_yield_mode"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "mode", PROPERTY_HINT_ENUM, "Frame,Physics Frame,Time", PROPERTY_USAGE_NOEDITOR), "set_yield_mode", "get_yield_mode"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "wait_time"), "set_wait_time", "get_wait_time"); BIND_ENUM_CONSTANT(YIELD_FRAME); - BIND_ENUM_CONSTANT(YIELD_FIXED_FRAME); + BIND_ENUM_CONSTANT(YIELD_PHYSICS_FRAME); BIND_ENUM_CONSTANT(YIELD_WAIT); } @@ -597,7 +597,7 @@ static Ref<VisualScriptNode> create_yield_signal_node(const String &p_name) { 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_physics_frame", create_yield_node<VisualScriptYield::YIELD_PHYSICS_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>); diff --git a/modules/visual_script/visual_script_yield_nodes.h b/modules/visual_script/visual_script_yield_nodes.h index d074962471..4a595a875a 100644 --- a/modules/visual_script/visual_script_yield_nodes.h +++ b/modules/visual_script/visual_script_yield_nodes.h @@ -39,7 +39,7 @@ public: enum YieldMode { YIELD_RETURN, YIELD_FRAME, - YIELD_FIXED_FRAME, + YIELD_PHYSICS_FRAME, YIELD_WAIT }; diff --git a/modules/vorbis/SCsub b/modules/vorbis/SCsub index d3e4f7e15a..9d2d0feb92 100644 --- a/modules/vorbis/SCsub +++ b/modules/vorbis/SCsub @@ -6,7 +6,7 @@ Import('env_modules') env_vorbis = env_modules.Clone() # Thirdparty source files -if (env['builtin_libvorbis'] != 'no'): +if env['builtin_libvorbis']: thirdparty_dir = "#thirdparty/libvorbis/" thirdparty_sources = [ #"analysis.c", @@ -42,7 +42,7 @@ if (env['builtin_libvorbis'] != 'no'): env_vorbis.Append(CPPPATH=[thirdparty_dir]) # also requires libogg - if (env['builtin_libogg'] != 'no'): + if env['builtin_libogg']: env_vorbis.Append(CPPPATH=["#thirdparty/libogg"]) # Godot source files diff --git a/modules/vorbis/audio_stream_ogg_vorbis.cpp b/modules/vorbis/audio_stream_ogg_vorbis.cpp index 6389c286c2..0afb889199 100644 --- a/modules/vorbis/audio_stream_ogg_vorbis.cpp +++ b/modules/vorbis/audio_stream_ogg_vorbis.cpp @@ -58,7 +58,7 @@ int AudioStreamPlaybackOGGVorbis::_ov_seek_func(void *_f, ogg_int64_t offs, int fa->seek(offs); } else if (whence == SEEK_CUR) { - fa->seek(fa->get_pos() + offs); + fa->seek(fa->get_position() + offs); } else if (whence == SEEK_END) { fa->seek_end(offs); @@ -89,7 +89,7 @@ long AudioStreamPlaybackOGGVorbis::_ov_tell_func(void *_f) { //printf("close %p\n",_f); FileAccess *fa = (FileAccess *)_f; - return fa->get_pos(); + return fa->get_position(); } int AudioStreamPlaybackOGGVorbis::mix(int16_t *p_bufer, int p_frames) { @@ -180,7 +180,7 @@ void AudioStreamPlaybackOGGVorbis::play(float p_from) { frames_mixed = 0; playing = true; if (p_from > 0) { - seek_pos(p_from); + seek(p_from); } } @@ -203,7 +203,7 @@ void AudioStreamPlaybackOGGVorbis::stop() { //_clear(); } -float AudioStreamPlaybackOGGVorbis::get_pos() const { +float AudioStreamPlaybackOGGVorbis::get_playback_position() const { int32_t frames = int32_t(frames_mixed); if (frames < 0) @@ -211,7 +211,7 @@ float AudioStreamPlaybackOGGVorbis::get_pos() const { return double(frames) / stream_srate; } -void AudioStreamPlaybackOGGVorbis::seek_pos(float p_time) { +void AudioStreamPlaybackOGGVorbis::seek(float p_time) { if (!playing) return; diff --git a/modules/vorbis/audio_stream_ogg_vorbis.h b/modules/vorbis/audio_stream_ogg_vorbis.h index 03b3726b52..929b2651e9 100644 --- a/modules/vorbis/audio_stream_ogg_vorbis.h +++ b/modules/vorbis/audio_stream_ogg_vorbis.h @@ -96,8 +96,8 @@ public: virtual int get_loop_count() const; - virtual float get_pos() const; - virtual void seek_pos(float p_time); + virtual float get_playback_position() const; + virtual void seek(float p_time); virtual int get_channels() const { return stream_channels; } virtual int get_mix_rate() const { return stream_srate; } diff --git a/modules/webm/SCsub b/modules/webm/SCsub index 889f5e83aa..2f1a28a54c 100644 --- a/modules/webm/SCsub +++ b/modules/webm/SCsub @@ -19,14 +19,14 @@ env_webm.add_source_files(env.modules_sources, thirdparty_libsimplewebm_sources) env_webm.Append(CPPPATH=[thirdparty_libsimplewebm_dir, thirdparty_libsimplewebm_dir + "libwebm/"]) # also requires libogg, libvorbis and libopus -if (env['builtin_libogg'] != 'no'): +if env['builtin_libogg']: env_webm.Append(CPPPATH=["#thirdparty/libogg"]) -if (env['builtin_libvorbis'] != 'no'): +if env['builtin_libvorbis']: env_webm.Append(CPPPATH=["#thirdparty/libvorbis"]) -if (env['builtin_opus'] != 'no'): +if env['builtin_opus']: env_webm.Append(CPPPATH=["#thirdparty/opus"]) -if (env['builtin_libvpx'] != 'no'): +if env['builtin_libvpx']: Export('env_webm') SConscript("libvpx/SCsub") diff --git a/modules/webm/libvpx/SCsub b/modules/webm/libvpx/SCsub index 0ee2ed45b8..fd8d762a5e 100644 --- a/modules/webm/libvpx/SCsub +++ b/modules/webm/libvpx/SCsub @@ -265,7 +265,7 @@ if env["platform"] == 'uwp': else: import platform is_x11_or_server_arm = ((env["platform"] == 'x11' or env["platform"] == 'server') and platform.machine().startswith('arm')) - is_ios_x86 = (env["platform"] == 'iphone' and env["ios_sim"] == "yes") + is_ios_x86 = (env["platform"] == 'iphone' and env["ios_sim"]) is_android_x86 = (env["platform"] == 'android' and env["android_arch"] == 'x86') if is_android_x86: cpu_bits = '32' diff --git a/modules/webm/video_stream_webm.cpp b/modules/webm/video_stream_webm.cpp index 0178ebab84..2ec6b27471 100644 --- a/modules/webm/video_stream_webm.cpp +++ b/modules/webm/video_stream_webm.cpp @@ -59,7 +59,7 @@ public: if (file) { - if (file->get_pos() != (size_t)pos) + if (file->get_position() != (size_t)pos) file->seek(pos); if (file->get_buffer(buf, len) == len) return 0; @@ -204,11 +204,11 @@ float VideoStreamPlaybackWebm::get_length() const { return 0.0f; } -float VideoStreamPlaybackWebm::get_pos() const { +float VideoStreamPlaybackWebm::get_playback_position() const { return video_pos; } -void VideoStreamPlaybackWebm::seek_pos(float p_time) { +void VideoStreamPlaybackWebm::seek(float p_time) { //Not implemented } diff --git a/modules/webm/video_stream_webm.h b/modules/webm/video_stream_webm.h index 9a331849be..fc0720967a 100644 --- a/modules/webm/video_stream_webm.h +++ b/modules/webm/video_stream_webm.h @@ -81,8 +81,8 @@ public: virtual float get_length() const; - virtual float get_pos() const; - virtual void seek_pos(float p_time); + virtual float get_playback_position() const; + virtual void seek(float p_time); virtual void set_audio_track(int p_idx); diff --git a/modules/webp/SCsub b/modules/webp/SCsub index aa3486a2c5..f9295fed47 100644 --- a/modules/webp/SCsub +++ b/modules/webp/SCsub @@ -6,7 +6,7 @@ Import('env_modules') env_webp = env_modules.Clone() # Thirdparty source files -if (env['builtin_libwebp'] != 'no'): +if env['builtin_libwebp']: thirdparty_dir = "#thirdparty/libwebp/" thirdparty_sources = [ "dec/alpha_dec.c", diff --git a/platform/android/AndroidManifest.xml.template b/platform/android/AndroidManifest.xml.template index be5afb406a..9d8eb951c4 100644 --- a/platform/android/AndroidManifest.xml.template +++ b/platform/android/AndroidManifest.xml.template @@ -17,7 +17,7 @@ android:launchMode="singleTask" android:screenOrientation="landscape" android:configChanges="orientation|keyboardHidden|screenSize|smallestScreenSize"> - + <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> @@ -26,7 +26,7 @@ <service android:name="org.godotengine.godot.GodotDownloaderService" /> - + $$ADD_APPLICATION_CHUNKS$$ @@ -200,6 +200,6 @@ $$ADD_PERMISSION_CHUNKS$$ <uses-permission android:name="godot.custom.18"/> <uses-permission android:name="godot.custom.19"/> -<uses-sdk android:minSdkVersion="10" android:targetSdkVersion="23"/> - -</manifest> +<uses-sdk android:minSdkVersion="18" android:targetSdkVersion="23"/> + +</manifest> diff --git a/platform/android/SCsub b/platform/android/SCsub index 87e7ee4747..7fa0262359 100644 --- a/platform/android/SCsub +++ b/platform/android/SCsub @@ -46,8 +46,18 @@ gradle_baseout = open_utf8(abspath + "/java/build.gradle", "w") gradle_text = gradle_basein.read() - +gradle_maven_flat_text = "" +if len(env.android_flat_dirs) > 0: + gradle_maven_flat_text += "flatDir {\n" + gradle_maven_flat_text += "\tdirs " + for x in env.android_flat_dirs: + gradle_maven_flat_text += "'" + x + "'," + + gradle_maven_flat_text = gradle_maven_flat_text[:-1] + gradle_maven_flat_text += "\n\t}\n" + gradle_maven_repos_text = "" +gradle_maven_repos_text += gradle_maven_flat_text if len(env.android_maven_repos) > 0: gradle_maven_repos_text += "" @@ -73,7 +83,7 @@ for x in env.android_gradle_plugins: gradle_classpath = "" for x in env.android_gradle_classpath: gradle_classpath += "\t\tclasspath \"" + x + "\"\n" - + gradle_res_dirs_text = "" for x in env.android_res_dirs: @@ -93,13 +103,13 @@ gradle_asset_dirs_text = "" gradle_default_config_text = "" -minSdk = 14 +minSdk = 18 targetSdk = 23 for x in env.android_default_config: - if x.startswith("minSdkVersion") and int(x.split(" ")[-1]) < minSdk: + if x.startswith("minSdkVersion") and int(x.split(" ")[-1]) < minSdk: x = "minSdkVersion " + str(minSdk) - if x.startswith("targetSdkVersion") and int(x.split(" ")[-1]) > targetSdk: + if x.startswith("targetSdkVersion") and int(x.split(" ")[-1]) > targetSdk: x = "targetSdkVersion " + str(targetSdk) gradle_default_config_text += x + "\n\t\t" diff --git a/platform/android/build.gradle.template b/platform/android/build.gradle.template index 1df56ce621..7cb6cf860a 100644 --- a/platform/android/build.gradle.template +++ b/platform/android/build.gradle.template @@ -1,6 +1,7 @@ buildscript { repositories { jcenter() + $$GRADLE_REPOSITORY_URLS$$ } dependencies { classpath 'com.android.tools.build:gradle:2.3.3' @@ -54,11 +55,11 @@ android { ] res.srcDirs = [ 'res' - $$GRADLE_RES_DIRS$$ + $$GRADLE_RES_DIRS$$ ] aidl.srcDirs = [ 'aidl' - $$GRADLE_AIDL_DIRS$$ + $$GRADLE_AIDL_DIRS$$ ] assets.srcDirs = [ 'assets' diff --git a/platform/android/detect.py b/platform/android/detect.py index c1ac54c587..13fc4ee810 100644 --- a/platform/android/detect.py +++ b/platform/android/detect.py @@ -18,20 +18,21 @@ def can_build(): def get_opts(): + from SCons.Variables import BoolVariable, EnumVariable return [ ('ANDROID_NDK_ROOT', 'Path to the Android NDK', os.environ.get("ANDROID_NDK_ROOT", 0)), ('ndk_platform', 'Target platform (android-<api>, e.g. "android-18")', "android-18"), - ('android_arch', 'Target architecture (armv7/armv6/arm64v8/x86)', "armv7"), - ('android_neon', 'Enable NEON support (armv7 only)', "yes"), - ('android_stl', 'Enable Android STL support (for modules)', "no") + EnumVariable('android_arch', 'Target architecture', "armv7", ('armv7', 'armv6', 'arm64v8', 'x86')), + BoolVariable('android_neon', 'Enable NEON support (armv7 only)', True), + BoolVariable('android_stl', 'Enable Android STL support (for modules)', False), ] def get_flags(): return [ - ('tools', 'no'), + ('tools', False), ] @@ -93,7 +94,7 @@ def configure(env): env['android_arch'] = 'armv7' neon_text = "" - if env["android_arch"] == "armv7" and env['android_neon'] == 'yes': + if env["android_arch"] == "armv7" and env['android_neon']: neon_text = " (with NEON)" print("Building for Android (" + env['android_arch'] + ")" + neon_text) @@ -117,7 +118,7 @@ def configure(env): target_subpath = "arm-linux-androideabi-4.9" abi_subpath = "arm-linux-androideabi" arch_subpath = "armeabi-v7a" - if env['android_neon'] == 'yes': + if env['android_neon']: env.extra_suffix = ".armv7.neon" + env.extra_suffix else: env.extra_suffix = ".armv7" + env.extra_suffix @@ -199,7 +200,7 @@ def configure(env): elif env["android_arch"] == "armv7": target_opts = ['-target', 'armv7-none-linux-androideabi'] env.Append(CPPFLAGS='-D__ARM_ARCH_7__ -D__ARM_ARCH_7A__ -march=armv7-a -mfloat-abi=softfp'.split()) - if env['android_neon'] == 'yes': + if env['android_neon']: env['neon_enabled'] = True env.Append(CPPFLAGS=['-mfpu=neon', '-D__ARM_NEON__']) else: @@ -213,7 +214,7 @@ def configure(env): env.Append(CPPFLAGS=target_opts) env.Append(CPPFLAGS=common_opts) - if (env['android_stl'] == 'yes'): + if env['android_stl']: env.Append(CPPPATH=[env["ANDROID_NDK_ROOT"] + "/sources/cxx-stl/gnu-libstdc++/4.9/include"]) env.Append(CPPPATH=[env["ANDROID_NDK_ROOT"] + "/sources/cxx-stl/gnu-libstdc++/4.9/libs/" + arch_subpath + "/include"]) env.Append(LIBPATH=[env["ANDROID_NDK_ROOT"] + "/sources/cxx-stl/gnu-libstdc++/4.9/libs/" + arch_subpath]) @@ -243,7 +244,7 @@ def configure(env): env.Append(LIBS=['OpenSLES', 'EGL', 'GLESv3', 'android', 'log', 'z', 'dl']) # TODO: Move that to opus module's config - if("module_opus_enabled" in env and env["module_opus_enabled"] != "no"): + if 'module_opus_enabled' in env and env['module_opus_enabled']: if (env["android_arch"] == "armv6" or env["android_arch"] == "armv7"): env.Append(CFLAGS=["-DOPUS_ARM_OPT"]) env.opus_fixed_point = "yes" diff --git a/platform/android/export/export.cpp b/platform/android/export/export.cpp index e3615e2298..79be1501a7 100644 --- a/platform/android/export/export.cpp +++ b/platform/android/export/export.cpp @@ -267,7 +267,6 @@ class EditorExportAndroid : public EditorExportPlatform { if (different) { - print_line("DIFFERENT!"); Vector<Device> ndevices; for (int i = 0; i < ldevices.size(); i++) { @@ -871,7 +870,7 @@ class EditorExportAndroid : public EditorExportPlatform { String lang = str.substr(str.find_last("-") + 1, str.length()).replace("-", "_"); String prop = "application/config/name_" + lang; - if (ProjectSettings::get_singleton()->has(prop)) { + if (ProjectSettings::get_singleton()->has_setting(prop)) { str = ProjectSettings::get_singleton()->get(prop); } else { str = get_project_name(package_name); diff --git a/platform/android/file_access_android.cpp b/platform/android/file_access_android.cpp index f207b81b4b..0fdf9002d7 100644 --- a/platform/android/file_access_android.cpp +++ b/platform/android/file_access_android.cpp @@ -95,7 +95,7 @@ void FileAccessAndroid::seek_end(int64_t p_position) { pos = len + p_position; } -size_t FileAccessAndroid::get_pos() const { +size_t FileAccessAndroid::get_position() const { return pos; } @@ -146,6 +146,11 @@ Error FileAccessAndroid::get_error() const { return eof ? ERR_FILE_EOF : OK; //not sure what else it may happen } +void FileAccessAndroid::flush() { + + ERR_FAIL(); +} + void FileAccessAndroid::store_8(uint8_t p_dest) { ERR_FAIL(); diff --git a/platform/android/file_access_android.h b/platform/android/file_access_android.h index c2ce2b0bfe..c8fedbe684 100644 --- a/platform/android/file_access_android.h +++ b/platform/android/file_access_android.h @@ -53,7 +53,7 @@ public: virtual void seek(size_t p_position); ///< seek to a given position virtual void seek_end(int64_t p_position = 0); ///< seek from the end of file - virtual size_t get_pos() const; ///< get position in the file + virtual size_t get_position() const; ///< get position in the file virtual size_t get_len() const; ///< get size of the file virtual bool eof_reached() const; ///< reading passed EOF @@ -63,6 +63,7 @@ public: virtual Error get_error() const; ///< get last error + virtual void flush(); virtual void store_8(uint8_t p_dest); ///< store a byte virtual bool file_exists(const String &p_path); ///< return true if a file exists diff --git a/platform/android/file_access_jandroid.cpp b/platform/android/file_access_jandroid.cpp index ad855c790d..980afd8f46 100644 --- a/platform/android/file_access_jandroid.cpp +++ b/platform/android/file_access_jandroid.cpp @@ -106,7 +106,7 @@ void FileAccessJAndroid::seek_end(int64_t p_position) { seek(get_len()); } -size_t FileAccessJAndroid::get_pos() const { +size_t FileAccessJAndroid::get_position() const { JNIEnv *env = ThreadAndroid::get_env(); ERR_FAIL_COND_V(!is_open(), 0); @@ -157,6 +157,9 @@ Error FileAccessJAndroid::get_error() const { return OK; } +void FileAccessJAndroid::flush() { +} + void FileAccessJAndroid::store_8(uint8_t p_dest) { } diff --git a/platform/android/file_access_jandroid.h b/platform/android/file_access_jandroid.h index 8060312182..368d2c98fa 100644 --- a/platform/android/file_access_jandroid.h +++ b/platform/android/file_access_jandroid.h @@ -57,7 +57,7 @@ public: virtual void seek(size_t p_position); ///< seek to a given position virtual void seek_end(int64_t p_position = 0); ///< seek from the end of file - virtual size_t get_pos() const; ///< get position in the file + virtual size_t get_position() const; ///< get position in the file virtual size_t get_len() const; ///< get size of the file virtual bool eof_reached() const; ///< reading passed EOF @@ -67,6 +67,7 @@ public: virtual Error get_error() const; ///< get last error + virtual void flush(); virtual void store_8(uint8_t p_dest); ///< store a byte virtual bool file_exists(const String &p_path); ///< return true if a file exists diff --git a/platform/android/java/src/org/godotengine/godot/Godot.java b/platform/android/java/src/org/godotengine/godot/Godot.java index 53a90e4cfe..59fefc498f 100644 --- a/platform/android/java/src/org/godotengine/godot/Godot.java +++ b/platform/android/java/src/org/godotengine/godot/Godot.java @@ -191,6 +191,7 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC protected void onMainPause() {} protected void onMainResume() {} protected void onMainDestroy() {} + protected boolean onMainBackPressed() { return false; } protected void onGLDrawFrame(GL10 gl) {} protected void onGLSurfaceChanged(GL10 gl, int width, int height) {} // singletons will always miss first onGLSurfaceChanged call @@ -277,6 +278,21 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC edittext.setView(mView); io.setEdit(edittext); + final Godot godot = this; + mView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { + @Override + public void onGlobalLayout() { + Point fullSize = new Point(); + godot.getWindowManager().getDefaultDisplay().getSize(fullSize); + Rect gameSize = new Rect(); + godot.mView.getWindowVisibleDisplayFrame(gameSize); + + final int keyboardHeight = fullSize.y - gameSize.bottom; + Log.d("GODOT", "setVirtualKeyboardHeight: " + keyboardHeight); + GodotLib.setVirtualKeyboardHeight(keyboardHeight); + } + }); + // Ad layout adLayout = new RelativeLayout(this); adLayout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT)); @@ -752,9 +768,16 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC */ @Override public void onBackPressed() { + boolean shouldQuit = true; + + for(int i=0;i<singleton_count;i++) { + if (singletons[i].onMainBackPressed()) { + shouldQuit = false; + } + } System.out.printf("** BACK REQUEST!\n"); - if (mView != null) { + if (shouldQuit && mView != null) { mView.queueEvent(new Runnable() { @Override public void run() { diff --git a/platform/android/java/src/org/godotengine/godot/GodotLib.java b/platform/android/java/src/org/godotengine/godot/GodotLib.java index 47a690140f..e0ed4cd38c 100644 --- a/platform/android/java/src/org/godotengine/godot/GodotLib.java +++ b/platform/android/java/src/org/godotengine/godot/GodotLib.java @@ -69,4 +69,6 @@ public class GodotLib { public static native void callobject(int p_ID, String p_method, Object[] p_params); public static native void calldeferred(int p_ID, String p_method, Object[] p_params); + public static native void setVirtualKeyboardHeight(int p_height); + } diff --git a/platform/android/java/src/org/godotengine/godot/GodotView.java b/platform/android/java/src/org/godotengine/godot/GodotView.java index 3c2ad7cc59..b807b952d4 100644 --- a/platform/android/java/src/org/godotengine/godot/GodotView.java +++ b/platform/android/java/src/org/godotengine/godot/GodotView.java @@ -285,13 +285,7 @@ public class GodotView extends GLSurfaceView implements InputDeviceListener { @Override public boolean onKeyDown(final int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { - queueEvent(new Runnable() { - @Override - public void run() { - GodotLib.back(); - } - }); - + activity.onBackPressed(); // press 'back' button should not terminate program //normal handle 'back' event in game logic return true; diff --git a/platform/android/java/src/org/godotengine/godot/input/GodotTextInputWrapper.java b/platform/android/java/src/org/godotengine/godot/input/GodotTextInputWrapper.java index 04669a3b0c..ac424ab9f8 100644 --- a/platform/android/java/src/org/godotengine/godot/input/GodotTextInputWrapper.java +++ b/platform/android/java/src/org/godotengine/godot/input/GodotTextInputWrapper.java @@ -88,79 +88,48 @@ public class GodotTextInputWrapper implements TextWatcher, OnEditorActionListene public void beforeTextChanged(final CharSequence pCharSequence, final int start, final int count, final int after) { //Log.d(TAG, "beforeTextChanged(" + pCharSequence + ")start: " + start + ",count: " + count + ",after: " + after); - for (int i=0;i<count;i++){ - mView.queueEvent(new Runnable() { - @Override - public void run() { + mView.queueEvent(new Runnable() { + @Override + public void run() { + for (int i = 0; i < count; ++i) { GodotLib.key(KeyEvent.KEYCODE_DEL, 0, true); GodotLib.key(KeyEvent.KEYCODE_DEL, 0, false); } - }); - } + } + }); } @Override public void onTextChanged(final CharSequence pCharSequence, final int start, final int before, final int count) { //Log.d(TAG, "onTextChanged(" + pCharSequence + ")start: " + start + ",count: " + count + ",before: " + before); - for (int i=start;i<start+count;i++){ - final int ch = pCharSequence.charAt(i); - mView.queueEvent(new Runnable() { - @Override - public void run() { + mView.queueEvent(new Runnable() { + @Override + public void run() { + for (int i = start; i < start + count; ++i) { + final int ch = pCharSequence.charAt(i); GodotLib.key(0, ch, true); GodotLib.key(0, ch, false); } - }); - } - + } + }); } @Override public boolean onEditorAction(final TextView pTextView, final int pActionID, final KeyEvent pKeyEvent) { if (this.mEdit == pTextView && this.isFullScreenEdit()) { - // user press the action button, delete all old text and insert new text - for (int i = this.mOriginText.length(); i > 0; i--) { - mView.queueEvent(new Runnable() { - @Override - public void run() { - GodotLib.key(KeyEvent.KEYCODE_DEL, 0, true); - GodotLib.key(KeyEvent.KEYCODE_DEL, 0, false); - } - }); + final String characters = pKeyEvent.getCharacters(); - /* - if (BuildConfig.DEBUG) { - Log.d(TAG, "deleteBackward"); - } - */ - } - String text = pTextView.getText().toString(); - - /* If user input nothing, translate "\n" to engine. */ - if (text.compareTo("") == 0) { - text = "\n"; - } - - if ('\n' != text.charAt(text.length() - 1)) { - text += '\n'; - } - - for(int i = 0; i < text.length(); i++) { - final int ch = text.codePointAt(i); - mView.queueEvent(new Runnable() { - @Override - public void run() { + mView.queueEvent(new Runnable() { + @Override + public void run() { + for (int i = 0; i < characters.length(); i++) { + final int ch = characters.codePointAt(i); GodotLib.key(0, ch, true); GodotLib.key(0, ch, false); } - }); - } - /* - if (BuildConfig.DEBUG) { - Log.d(TAG, "insertText(" + insertText + ")"); - } - */ + } + }); } if (pActionID == EditorInfo.IME_ACTION_DONE) { diff --git a/platform/android/java/src/org/godotengine/godot/utils/CustomSSLSocketFactory.java b/platform/android/java/src/org/godotengine/godot/utils/CustomSSLSocketFactory.java index c9532a5d01..3fc8c48397 100644 --- a/platform/android/java/src/org/godotengine/godot/utils/CustomSSLSocketFactory.java +++ b/platform/android/java/src/org/godotengine/godot/utils/CustomSSLSocketFactory.java @@ -36,12 +36,9 @@ import java.security.KeyStore; import java.security.KeyStoreException; import java.security.NoSuchAlgorithmException; import java.security.UnrecoverableKeyException; -import java.security.cert.CertificateException; -import java.security.cert.X509Certificate; import javax.net.ssl.SSLContext; -import javax.net.ssl.TrustManager; -import javax.net.ssl.X509TrustManager; +import javax.net.ssl.TrustManagerFactory; import org.apache.http.conn.ssl.SSLSocketFactory; @@ -56,19 +53,10 @@ public class CustomSSLSocketFactory extends SSLSocketFactory { public CustomSSLSocketFactory(KeyStore truststore) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException { super(truststore); - TrustManager tm = new X509TrustManager() { - public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { - } + TrustManagerFactory tmf = TrustManagerFactory.getInstance("X509"); + tmf.init(truststore); - public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { - } - - public X509Certificate[] getAcceptedIssuers() { - return null; - } - }; - - sslContext.init(null, new TrustManager[] { tm }, null); + sslContext.init(null, tmf.getTrustManagers(), null); } @Override diff --git a/platform/android/java_glue.cpp b/platform/android/java_glue.cpp index 509d1bf123..0b193f5882 100644 --- a/platform/android/java_glue.cpp +++ b/platform/android/java_glue.cpp @@ -602,21 +602,10 @@ struct TST { TST tst; -struct JAndroidPointerEvent { - - Vector<OS_Android::TouchPos> points; - int pointer; - int what; -}; - -static List<JAndroidPointerEvent> pointer_events; -static List<Ref<InputEvent> > key_events; -static List<OS_Android::JoypadEvent> joy_events; static bool initialized = false; static int step = 0; static bool resized = false; static bool resized_reload = false; -static bool go_back_request = false; static Size2 new_size; static Vector3 accelerometer; static Vector3 magnetometer; @@ -624,8 +613,6 @@ static Vector3 gyroscope; static HashMap<String, JNISingleton *> jni_singletons; static jobject godot_io; -static Vector<int> joy_device_ids; - typedef void (*GFXInitFunc)(void *ud, bool gl2); static jmethodID _on_video_init = 0; @@ -754,6 +741,18 @@ static void _alert(const String &p_message, const String &p_title) { env->CallVoidMethod(_godot_instance, _alertDialog, jStrMessage, jStrTitle); } +// volatile because it can be changed from non-main thread and we need to +// ensure the change is immediately visible to other threads. +static volatile int virtual_keyboard_height; + +static int _get_vk_height() { + return virtual_keyboard_height; +} + +JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_setVirtualKeyboardHeight(JNIEnv *env, jobject obj, jint p_height) { + virtual_keyboard_height = p_height; +} + JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_initialize(JNIEnv *env, jobject obj, jobject activity, jboolean p_need_reload_hook, jobject p_asset_manager, jboolean p_use_apk_expansion) { __android_log_print(ANDROID_LOG_INFO, "godot", "**INIT EVENT! - %p\n", env); @@ -824,7 +823,7 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_initialize(JNIEnv *en AudioDriverAndroid::setup(gob); } - os_android = new OS_Android(_gfx_init_func, env, _open_uri, _get_data_dir, _get_locale, _get_model, _get_screen_dpi, _show_vk, _hide_vk, _set_screen_orient, _get_unique_id, _get_system_dir, _play_video, _is_video_playing, _pause_video, _stop_video, _set_keep_screen_on, _alert, p_use_apk_expansion); + os_android = new OS_Android(_gfx_init_func, env, _open_uri, _get_data_dir, _get_locale, _get_model, _get_screen_dpi, _show_vk, _hide_vk, _get_vk_height, _set_screen_orient, _get_unique_id, _get_system_dir, _play_video, _is_video_playing, _pause_video, _stop_video, _set_keep_screen_on, _alert, p_use_apk_expansion); os_android->set_need_reload_hooks(p_need_reload_hook); char wd[500]; @@ -841,7 +840,7 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_initialize(JNIEnv *en static void _initialize_java_modules() { - if (!ProjectSettings::get_singleton()->has("android/modules")) { + if (!ProjectSettings::get_singleton()->has_setting("android/modules")) { print_line("ANDROID MODULES: Nothing to load, aborting"); return; } @@ -986,7 +985,7 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_newcontext(JNIEnv *en } JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_back(JNIEnv *env, jobject obj) { - go_back_request = true; + os_android->main_loop_request_go_back(); } JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_step(JNIEnv *env, jobject obj) { @@ -1011,36 +1010,6 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_step(JNIEnv *env, job //__android_log_print(ANDROID_LOG_INFO,"godot","**STEP EVENT! - %p-%i\n",env,Thread::get_caller_id()); - while (pointer_events.size()) { - - JAndroidPointerEvent jpe = pointer_events.front()->get(); - os_android->process_touch(jpe.what, jpe.pointer, jpe.points); - - pointer_events.pop_front(); - } - - while (key_events.size()) { - - Ref<InputEvent> event = key_events.front()->get(); - os_android->process_event(event); - - key_events.pop_front(); - }; - - while (joy_events.size()) { - - OS_Android::JoypadEvent event = joy_events.front()->get(); - os_android->process_joy_event(event); - - joy_events.pop_front(); - } - - if (go_back_request) { - - os_android->main_loop_request_go_back(); - go_back_request = false; - } - os_android->process_accelerometer(accelerometer); os_android->process_magnetometer(magnetometer); @@ -1071,12 +1040,8 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_touch(JNIEnv *env, jo points.push_back(tp); } - JAndroidPointerEvent jpe; - jpe.pointer = pointer; - jpe.points = points; - jpe.what = ev; + os_android->process_touch(ev, pointer, points); - pointer_events.push_back(jpe); /* if (os_android) os_android->process_touch(ev,pointer,points); @@ -1346,7 +1311,7 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_joybutton(JNIEnv *env jevent.index = p_button; jevent.pressed = p_pressed; - joy_events.push_back(jevent); + os_android->process_joy_event(jevent); } JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_joyaxis(JNIEnv *env, jobject obj, jint p_device, jint p_axis, jfloat p_value) { @@ -1357,7 +1322,7 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_joyaxis(JNIEnv *env, jevent.index = p_axis; jevent.value = p_value; - joy_events.push_back(jevent); + os_android->process_joy_event(jevent); } JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_joyhat(JNIEnv *env, jobject obj, jint p_device, jint p_hat_x, jint p_hat_y) { @@ -1378,7 +1343,8 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_joyhat(JNIEnv *env, j hat |= InputDefault::HAT_MASK_DOWN; } jevent.hat = hat; - joy_events.push_back(jevent); + + os_android->process_joy_event(jevent); } JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_joyconnectionchanged(JNIEnv *env, jobject obj, jint p_device, jboolean p_connected, jstring p_name) { @@ -1391,6 +1357,7 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_joyconnectionchanged( JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_key(JNIEnv *env, jobject obj, jint p_scancode, jint p_unicode_char, jboolean p_pressed) { Ref<InputEventKey> ievent; + ievent.instance(); int val = p_unicode_char; int scancode = android_get_keysym(p_scancode); ievent->set_scancode(scancode); @@ -1409,10 +1376,10 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_key(JNIEnv *env, jobj ievent->set_unicode(KEY_ENTER); } else if (p_scancode == 4) { - go_back_request = true; + os_android->main_loop_request_go_back(); } - key_events.push_back(ievent); + os_android->process_event(ievent); } JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_accelerometer(JNIEnv *env, jobject obj, jfloat x, jfloat y, jfloat z) { diff --git a/platform/android/java_glue.h b/platform/android/java_glue.h index ec8ae9a0a6..0aa2489813 100644 --- a/platform/android/java_glue.h +++ b/platform/android/java_glue.h @@ -59,6 +59,7 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_method(JNIEnv *env, j JNIEXPORT jstring JNICALL Java_org_godotengine_godot_GodotLib_getGlobal(JNIEnv *env, jobject obj, jstring path); JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_callobject(JNIEnv *env, jobject p_obj, jint ID, jstring method, jobjectArray params); JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_calldeferred(JNIEnv *env, jobject p_obj, jint ID, jstring method, jobjectArray params); +JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_setVirtualKeyboardHeight(JNIEnv *env, jobject obj, jint p_height); } #endif diff --git a/platform/android/os_android.cpp b/platform/android/os_android.cpp index dbea2d7531..473a093077 100644 --- a/platform/android/os_android.cpp +++ b/platform/android/os_android.cpp @@ -47,6 +47,15 @@ #include "file_access_jandroid.h" #endif +class AndroidLogger : public Logger { +public: + virtual void logv(const char *p_format, va_list p_list, bool p_err) { + __android_log_vprint(p_err ? ANDROID_LOG_ERROR : ANDROID_LOG_INFO, "godot", p_format, p_list); + } + + virtual ~AndroidLogger() {} +}; + int OS_Android::get_video_driver_count() const { return 1; @@ -111,6 +120,13 @@ void OS_Android::initialize_core() { #endif } +void OS_Android::initialize_logger() { + Vector<Logger *> loggers; + loggers.push_back(memnew(AndroidLogger)); + loggers.push_back(memnew(RotatedFileLogger("user://logs/log.txt"))); + _set_logger(memnew(CompositeLogger(loggers))); +} + void OS_Android::set_opengl_extensions(const char *p_gl_extensions) { ERR_FAIL_COND(!p_gl_extensions); @@ -162,23 +178,9 @@ void OS_Android::delete_main_loop() { } void OS_Android::finalize() { - memdelete(input); } -void OS_Android::vprint(const char *p_format, va_list p_list, bool p_stderr) { - - __android_log_vprint(p_stderr ? ANDROID_LOG_ERROR : ANDROID_LOG_INFO, "godot", p_format, p_list); -} - -void OS_Android::print(const char *p_format, ...) { - - va_list argp; - va_start(argp, p_format); - __android_log_vprint(ANDROID_LOG_INFO, "godot", p_format, argp); - va_end(argp); -} - void OS_Android::alert(const String &p_alert, const String &p_title) { //print("ALERT: %s\n", p_alert.utf8().get_data()); @@ -517,6 +519,15 @@ bool OS_Android::has_virtual_keyboard() const { return true; } +int OS_Android::get_virtual_keyboard_height() const { + if (get_virtual_keyboard_height_func) { + return get_virtual_keyboard_height_func(); + } + + ERR_PRINT("Cannot obtain virtual keyboard height."); + return 0; +} + void OS_Android::show_virtual_keyboard(const String &p_existing_text, const Rect2 &p_screen_rect) { if (show_virtual_keyboard_func) { @@ -702,7 +713,7 @@ bool OS_Android::_check_internal_feature_support(const String &p_feature) { return p_feature == "mobile" || p_feature == "etc" || p_feature == "etc2"; //TODO support etc2 only if GLES3 driver is selected } -OS_Android::OS_Android(GFXInitFunc p_gfx_init_func, void *p_gfx_init_ud, OpenURIFunc p_open_uri_func, GetDataDirFunc p_get_data_dir_func, GetLocaleFunc p_get_locale_func, GetModelFunc p_get_model_func, GetScreenDPIFunc p_get_screen_dpi_func, ShowVirtualKeyboardFunc p_show_vk, HideVirtualKeyboardFunc p_hide_vk, SetScreenOrientationFunc p_screen_orient, GetUniqueIDFunc p_get_unique_id, GetSystemDirFunc p_get_sdir_func, VideoPlayFunc p_video_play_func, VideoIsPlayingFunc p_video_is_playing_func, VideoPauseFunc p_video_pause_func, VideoStopFunc p_video_stop_func, SetKeepScreenOnFunc p_set_keep_screen_on_func, AlertFunc p_alert_func, bool p_use_apk_expansion) { +OS_Android::OS_Android(GFXInitFunc p_gfx_init_func, void *p_gfx_init_ud, OpenURIFunc p_open_uri_func, GetDataDirFunc p_get_data_dir_func, GetLocaleFunc p_get_locale_func, GetModelFunc p_get_model_func, GetScreenDPIFunc p_get_screen_dpi_func, ShowVirtualKeyboardFunc p_show_vk, HideVirtualKeyboardFunc p_hide_vk, VirtualKeyboardHeightFunc p_vk_height_func, SetScreenOrientationFunc p_screen_orient, GetUniqueIDFunc p_get_unique_id, GetSystemDirFunc p_get_sdir_func, VideoPlayFunc p_video_play_func, VideoIsPlayingFunc p_video_is_playing_func, VideoPauseFunc p_video_pause_func, VideoStopFunc p_video_stop_func, SetKeepScreenOnFunc p_set_keep_screen_on_func, AlertFunc p_alert_func, bool p_use_apk_expansion) { use_apk_expansion = p_use_apk_expansion; default_videomode.width = 800; @@ -732,11 +743,14 @@ OS_Android::OS_Android(GFXInitFunc p_gfx_init_func, void *p_gfx_init_ud, OpenURI show_virtual_keyboard_func = p_show_vk; hide_virtual_keyboard_func = p_hide_vk; + get_virtual_keyboard_height_func = p_vk_height_func; set_screen_orientation_func = p_screen_orient; set_keep_screen_on_func = p_set_keep_screen_on_func; alert_func = p_alert_func; use_reload_hooks = false; + + _set_logger(memnew(AndroidLogger)); } OS_Android::~OS_Android() { diff --git a/platform/android/os_android.h b/platform/android/os_android.h index 119c14bff3..0c78c198a8 100644 --- a/platform/android/os_android.h +++ b/platform/android/os_android.h @@ -67,6 +67,7 @@ typedef void (*VideoPauseFunc)(); typedef void (*VideoStopFunc)(); typedef void (*SetKeepScreenOnFunc)(bool p_enabled); typedef void (*AlertFunc)(const String &, const String &); +typedef int (*VirtualKeyboardHeightFunc)(); class OS_Android : public OS_Unix { public: @@ -126,6 +127,7 @@ private: GetScreenDPIFunc get_screen_dpi_func; ShowVirtualKeyboardFunc show_virtual_keyboard_func; HideVirtualKeyboardFunc hide_virtual_keyboard_func; + VirtualKeyboardHeightFunc get_virtual_keyboard_height_func; SetScreenOrientationFunc set_screen_orientation_func; GetUniqueIDFunc get_unique_id_func; GetSystemDirFunc get_system_dir_func; @@ -149,6 +151,7 @@ public: virtual int get_audio_driver_count() const; virtual const char *get_audio_driver_name(int p_driver) const; + virtual void initialize_logger(); virtual void initialize_core(); virtual void initialize(const VideoMode &p_desired, int p_video_driver, int p_audio_driver); @@ -161,8 +164,6 @@ public: static OS *get_singleton(); - virtual void vprint(const char *p_format, va_list p_list, bool p_stderr = false); - virtual void print(const char *p_format, ...); virtual void alert(const String &p_alert, const String &p_title = "ALERT!"); virtual void set_mouse_show(bool p_show); @@ -202,6 +203,7 @@ public: 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 int get_virtual_keyboard_height() const; void set_opengl_extensions(const char *p_gl_extensions); void set_display_size(Size2 p_size); @@ -241,7 +243,7 @@ public: void joy_connection_changed(int p_device, bool p_connected, String p_name); virtual bool _check_internal_feature_support(const String &p_feature); - OS_Android(GFXInitFunc p_gfx_init_func, void *p_gfx_init_ud, OpenURIFunc p_open_uri_func, GetDataDirFunc p_get_data_dir_func, GetLocaleFunc p_get_locale_func, GetModelFunc p_get_model_func, GetScreenDPIFunc p_get_screen_dpi_func, ShowVirtualKeyboardFunc p_show_vk, HideVirtualKeyboardFunc p_hide_vk, SetScreenOrientationFunc p_screen_orient, GetUniqueIDFunc p_get_unique_id, GetSystemDirFunc p_get_sdir_func, VideoPlayFunc p_video_play_func, VideoIsPlayingFunc p_video_is_playing_func, VideoPauseFunc p_video_pause_func, VideoStopFunc p_video_stop_func, SetKeepScreenOnFunc p_set_keep_screen_on_func, AlertFunc p_alert_func, bool p_use_apk_expansion); + OS_Android(GFXInitFunc p_gfx_init_func, void *p_gfx_init_ud, OpenURIFunc p_open_uri_func, GetDataDirFunc p_get_data_dir_func, GetLocaleFunc p_get_locale_func, GetModelFunc p_get_model_func, GetScreenDPIFunc p_get_screen_dpi_func, ShowVirtualKeyboardFunc p_show_vk, HideVirtualKeyboardFunc p_hide_vk, VirtualKeyboardHeightFunc p_vk_height_func, SetScreenOrientationFunc p_screen_orient, GetUniqueIDFunc p_get_unique_id, GetSystemDirFunc p_get_sdir_func, VideoPlayFunc p_video_play_func, VideoIsPlayingFunc p_video_is_playing_func, VideoPauseFunc p_video_pause_func, VideoStopFunc p_video_stop_func, SetKeepScreenOnFunc p_set_keep_screen_on_func, AlertFunc p_alert_func, bool p_use_apk_expansion); ~OS_Android(); }; diff --git a/platform/haiku/context_gl_haiku.cpp b/platform/haiku/context_gl_haiku.cpp index 2b943df5ba..80d0bd78d5 100644 --- a/platform/haiku/context_gl_haiku.cpp +++ b/platform/haiku/context_gl_haiku.cpp @@ -29,7 +29,7 @@ /*************************************************************************/ #include "context_gl_haiku.h" -#if defined(OPENGL_ENABLED) || defined(LEGACYGL_ENABLED) +#if defined(OPENGL_ENABLED) ContextGL_Haiku::ContextGL_Haiku(HaikuDirectWindow *p_window) { window = p_window; diff --git a/platform/haiku/context_gl_haiku.h b/platform/haiku/context_gl_haiku.h index 40daf43ab9..a9a13a2b7f 100644 --- a/platform/haiku/context_gl_haiku.h +++ b/platform/haiku/context_gl_haiku.h @@ -30,7 +30,7 @@ #ifndef CONTEXT_GL_HAIKU_H #define CONTEXT_GL_HAIKU_H -#if defined(OPENGL_ENABLED) || defined(LEGACYGL_ENABLED) +#if defined(OPENGL_ENABLED) #include "drivers/gl_context/context_gl.h" diff --git a/platform/haiku/detect.py b/platform/haiku/detect.py index c0e003a3d2..50f9783dd2 100644 --- a/platform/haiku/detect.py +++ b/platform/haiku/detect.py @@ -19,9 +19,10 @@ def can_build(): def get_opts(): + from SCons.Variables import EnumVariable return [ - ('debug_release', 'Add debug symbols to release version', 'no') + EnumVariable('debug_symbols', 'Add debug symbols to release version', 'yes', ('yes', 'no', 'full')), ] @@ -36,16 +37,21 @@ def configure(env): ## Build type if (env["target"] == "release"): - if (env["debug_release"] == "yes"): + env.Prepend(CCFLAGS=['-O3', '-ffast-math']) + if (env["debug_symbols"] == "yes"): + env.Prepend(CCFLAGS=['-g1']) + if (env["debug_symbols"] == "full"): env.Prepend(CCFLAGS=['-g2']) - else: - env.Prepend(CCFLAGS=['-O3', '-ffast-math']) elif (env["target"] == "release_debug"): env.Prepend(CCFLAGS=['-O2', '-ffast-math', '-DDEBUG_ENABLED']) + if (env["debug_symbols"] == "yes"): + env.Prepend(CCFLAGS=['-g1']) + if (env["debug_symbols"] == "full"): + env.Prepend(CCFLAGS=['-g2']) elif (env["target"] == "debug"): - env.Prepend(CCFLAGS=['-g2', '-DDEBUG_ENABLED', '-DDEBUG_MEMORY_ENABLED']) + env.Prepend(CCFLAGS=['-g3', '-DDEBUG_ENABLED', '-DDEBUG_MEMORY_ENABLED']) ## Architecture diff --git a/platform/haiku/haiku_direct_window.cpp b/platform/haiku/haiku_direct_window.cpp index 572df493ff..24a8a4b17b 100644 --- a/platform/haiku/haiku_direct_window.cpp +++ b/platform/haiku/haiku_direct_window.cpp @@ -157,8 +157,8 @@ void HaikuDirectWindow::HandleMouseButton(BMessage *message) { mouse_event.mouse_button.mod = GetKeyModifierState(modifiers); mouse_event->get_button_mask() = GetMouseButtonState(buttons); - mouse_event->get_pos().x = where.x; - mouse_event->get_pos().y = where.y; + mouse_event->get_position().x = where.x; + mouse_event->get_position().y = where.y; mouse_event.mouse_button.global_x = where.x; mouse_event.mouse_button.global_y = where.y; @@ -242,8 +242,8 @@ void HaikuDirectWindow::HandleMouseWheelChanged(BMessage *message) { mouse_event->get_button_index() = wheel_delta_y < 0 ? 4 : 5; mouse_event.mouse_button.mod = GetKeyModifierState(last_key_modifier_state); mouse_event->get_button_mask() = last_button_mask; - mouse_event->get_pos().x = last_mouse_position.x; - mouse_event->get_pos().y = last_mouse_position.y; + mouse_event->get_position().x = last_mouse_position.x; + mouse_event->get_position().y = last_mouse_position.y; mouse_event.mouse_button.global_x = last_mouse_position.x; mouse_event.mouse_button.global_y = last_mouse_position.y; diff --git a/platform/haiku/os_haiku.cpp b/platform/haiku/os_haiku.cpp index 9f2f88bb4e..1d52752f21 100644 --- a/platform/haiku/os_haiku.cpp +++ b/platform/haiku/os_haiku.cpp @@ -105,7 +105,7 @@ void OS_Haiku::initialize(const VideoMode &p_desired, int p_video_driver, int p_ window->SetFlags(flags); } -#if defined(OPENGL_ENABLED) || defined(LEGACYGL_ENABLED) +#if defined(OPENGL_ENABLED) context_gl = memnew(ContextGL_Haiku(window)); context_gl->initialize(); context_gl->make_current(); @@ -161,7 +161,7 @@ void OS_Haiku::finalize() { memdelete(input); -#if defined(OPENGL_ENABLED) || defined(LEGACYGL_ENABLED) +#if defined(OPENGL_ENABLED) memdelete(context_gl); #endif } diff --git a/platform/haiku/os_haiku.h b/platform/haiku/os_haiku.h index d2fafb9129..d929f7e43b 100644 --- a/platform/haiku/os_haiku.h +++ b/platform/haiku/os_haiku.h @@ -60,7 +60,7 @@ private: AudioDriverMediaKit driver_media_kit; #endif -#if defined(OPENGL_ENABLED) || defined(LEGACYGL_ENABLED) +#if defined(OPENGL_ENABLED) ContextGL_Haiku *context_gl; #endif diff --git a/platform/iphone/SCsub b/platform/iphone/SCsub index 998d0a3f0d..61798c5f87 100644 --- a/platform/iphone/SCsub +++ b/platform/iphone/SCsub @@ -5,7 +5,6 @@ Import('env') iphone_lib = [ 'os_iphone.cpp', - 'audio_driver_iphone.cpp', 'sem_iphone.cpp', 'gl_view.mm', 'main.m', diff --git a/platform/iphone/app_delegate.mm b/platform/iphone/app_delegate.mm index c7b65b476b..65cafbd6d4 100644 --- a/platform/iphone/app_delegate.mm +++ b/platform/iphone/app_delegate.mm @@ -29,8 +29,8 @@ /*************************************************************************/ #import "app_delegate.h" -#include "audio_driver_iphone.h" #include "core/project_settings.h" +#include "drivers/coreaudio/audio_driver_coreaudio.h" #import "gl_view.h" #include "main/main.h" #include "os_iphone.h" @@ -81,7 +81,7 @@ void _set_keep_screen_on(bool p_enabled) { extern int gargc; extern char **gargv; -extern int iphone_main(int, int, int, char **); +extern int iphone_main(int, int, int, char **, String); extern void iphone_finish(); CMMotionManager *motionManager; @@ -393,15 +393,6 @@ static int frame_count = 0; }; ++frame_count; - NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, - NSUserDomainMask, YES); - NSString *documentsDirectory = [paths objectAtIndex:0]; - // NSString *documentsDirectory = [[[NSFileManager defaultManager] - // URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] - // lastObject]; - OSIPhone::get_singleton()->set_data_dir( - String::utf8([documentsDirectory UTF8String])); - NSString *locale_code = [[NSLocale currentLocale] localeIdentifier]; OSIPhone::get_singleton()->set_locale( String::utf8([locale_code UTF8String])); @@ -604,7 +595,11 @@ static int frame_count = 0; glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_HEIGHT_OES, &backingHeight); - int err = iphone_main(backingWidth, backingHeight, gargc, gargv); + NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, + NSUserDomainMask, YES); + NSString *documentsDirectory = [paths objectAtIndex:0]; + + int err = iphone_main(backingWidth, backingHeight, gargc, gargv, String::utf8([documentsDirectory UTF8String])); if (err != 0) { // bail, things did not go very well for us, should probably output a message on screen with our error code... exit(0); @@ -736,8 +731,8 @@ static int frame_count = 0; }; // Fixed audio can not resume if it is interrupted cause by an incoming phone call - if (AudioDriverIphone::get_singleton() != NULL) - AudioDriverIphone::get_singleton()->start(); + if (AudioDriverCoreAudio::get_singleton() != NULL) + AudioDriverCoreAudio::get_singleton()->start(); } - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { diff --git a/platform/iphone/audio_driver_iphone.cpp b/platform/iphone/audio_driver_iphone.cpp deleted file mode 100644 index dbc5bdb654..0000000000 --- a/platform/iphone/audio_driver_iphone.cpp +++ /dev/null @@ -1,187 +0,0 @@ -/*************************************************************************/ -/* audio_driver_iphone.cpp */ -/*************************************************************************/ -/* This file is part of: */ -/* GODOT ENGINE */ -/* https://godotengine.org */ -/*************************************************************************/ -/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ -/* */ -/* 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_iphone.h" - -Error AudioDriverIphone::init() { - - active = false; - channels = 2; - - AudioStreamBasicDescription strdesc; - strdesc.mFormatID = kAudioFormatLinearPCM; - strdesc.mFormatFlags = kLinearPCMFormatFlagIsSignedInteger | kLinearPCMFormatFlagIsPacked; - strdesc.mChannelsPerFrame = channels; - strdesc.mSampleRate = 44100; - strdesc.mFramesPerPacket = 1; - strdesc.mBitsPerChannel = 16; - strdesc.mBytesPerFrame = - strdesc.mBitsPerChannel * strdesc.mChannelsPerFrame / 8; - strdesc.mBytesPerPacket = - strdesc.mBytesPerFrame * strdesc.mFramesPerPacket; - - AURenderCallbackStruct callback; - AudioComponentDescription desc; - const AudioUnitElement output_bus = 0; - const AudioUnitElement bus = output_bus; - const AudioUnitScope scope = kAudioUnitScope_Input; - - zeromem(&desc, sizeof(desc)); - desc.componentType = kAudioUnitType_Output; - desc.componentSubType = kAudioUnitSubType_RemoteIO; /* !!! FIXME: ? */ - AudioComponent comp = AudioComponentFindNext(NULL, &desc); - desc.componentManufacturer = kAudioUnitManufacturer_Apple; - - OSStatus result = AudioComponentInstanceNew(comp, &audio_unit); - ERR_FAIL_COND_V(result != noErr, FAILED); - ERR_FAIL_COND_V(comp == NULL, FAILED); - - result = AudioUnitSetProperty(audio_unit, - kAudioUnitProperty_StreamFormat, - scope, bus, &strdesc, sizeof(strdesc)); - ERR_FAIL_COND_V(result != noErr, FAILED); - - zeromem(&callback, sizeof(AURenderCallbackStruct)); - callback.inputProc = &AudioDriverIphone::output_callback; - callback.inputProcRefCon = this; - result = AudioUnitSetProperty(audio_unit, - kAudioUnitProperty_SetRenderCallback, - scope, bus, &callback, sizeof(callback)); - ERR_FAIL_COND_V(result != noErr, FAILED); - - result = AudioUnitInitialize(audio_unit); - ERR_FAIL_COND_V(result != noErr, FAILED); - - result = AudioOutputUnitStart(audio_unit); - ERR_FAIL_COND_V(result != noErr, FAILED); - - const int samples = 1024; - samples_in = memnew_arr(int32_t, samples); // whatever - buffer_frames = samples / channels; - - return FAILED; -}; - -OSStatus AudioDriverIphone::output_callback(void *inRefCon, - AudioUnitRenderActionFlags *ioActionFlags, - const AudioTimeStamp *inTimeStamp, - UInt32 inBusNumber, UInt32 inNumberFrames, - AudioBufferList *ioData) { - - AudioBuffer *abuf; - AudioDriverIphone *ad = (AudioDriverIphone *)inRefCon; - - bool mix = true; - - if (!ad->active) - mix = false; - else if (ad->mutex) { - mix = ad->mutex->try_lock() == OK; - }; - - if (!mix) { - for (unsigned int i = 0; i < ioData->mNumberBuffers; i++) { - abuf = &ioData->mBuffers[i]; - zeromem(abuf->mData, abuf->mDataByteSize); - }; - return 0; - }; - - int frames_left; - - for (unsigned int i = 0; i < ioData->mNumberBuffers; i++) { - - abuf = &ioData->mBuffers[i]; - frames_left = inNumberFrames; - int16_t *out = (int16_t *)abuf->mData; - - while (frames_left) { - - int frames = MIN(frames_left, ad->buffer_frames); - //ad->lock(); - ad->audio_server_process(frames, ad->samples_in); - //ad->unlock(); - - for (int i = 0; i < frames * ad->channels; i++) { - - out[i] = ad->samples_in[i] >> 16; - } - - frames_left -= frames; - out += frames * ad->channels; - }; - }; - - if (ad->mutex) - ad->mutex->unlock(); - - return 0; -}; - -void AudioDriverIphone::start() { - active = true; - // Resume audio - // iOS audio-thread stoped if it is interrupted cause by an incoming phone call - // Use AudioOutputUnitStart to re-create audio-thread - OSStatus result = AudioOutputUnitStart(audio_unit); - ERR_FAIL_COND(result != noErr); -}; - -int AudioDriverIphone::get_mix_rate() const { - return 44100; -}; - -AudioDriver::SpeakerMode AudioDriverIphone::get_speaker_mode() const { - return SPEAKER_MODE_STEREO; -}; - -void AudioDriverIphone::lock() { - - if (active && mutex) - mutex->lock(); -}; - -void AudioDriverIphone::unlock() { - if (active && mutex) - mutex->unlock(); -}; - -void AudioDriverIphone::finish() { - - memdelete_arr(samples_in); -}; - -AudioDriverIphone::AudioDriverIphone() { - - mutex = Mutex::create(); //NULL; -}; - -AudioDriverIphone::~AudioDriverIphone(){ - -}; diff --git a/platform/iphone/detect.py b/platform/iphone/detect.py index 0b81422fa3..00d8a59f74 100644 --- a/platform/iphone/detect.py +++ b/platform/iphone/detect.py @@ -20,24 +20,24 @@ def can_build(): def get_opts(): - + from SCons.Variables import BoolVariable return [ ('IPHONEPLATFORM', 'Name of the iPhone platform', 'iPhoneOS'), ('IPHONEPATH', 'Path to iPhone toolchain', '/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain'), ('IPHONESDK', 'Path to the iPhone SDK', '/Applications/Xcode.app/Contents/Developer/Platforms/${IPHONEPLATFORM}.platform/Developer/SDKs/${IPHONEPLATFORM}.sdk/'), - ('game_center', 'Support for game center', 'yes'), - ('store_kit', 'Support for in-app store', 'yes'), - ('icloud', 'Support for iCloud', 'yes'), - ('ios_exceptions', 'Enable exceptions', 'no'), + BoolVariable('game_center', 'Support for game center', True), + BoolVariable('store_kit', 'Support for in-app store', True), + BoolVariable('icloud', 'Support for iCloud', True), + BoolVariable('ios_exceptions', 'Enable exceptions', False), ('ios_triple', 'Triple for ios toolchain', ''), - ('ios_sim', 'Build simulator binary', 'no'), + BoolVariable('ios_sim', 'Build simulator binary', False), ] def get_flags(): return [ - ('tools', 'no'), + ('tools', False), ] @@ -58,7 +58,7 @@ def configure(env): ## Architecture - if (env["ios_sim"] == "yes" or env["arch"] == "x86"): # i386, simulator + if env["ios_sim"] or env["arch"] == "x86": # i386, simulator env["arch"] = "x86" env["bits"] = "32" elif (env["arch"] == "arm" or env["arch"] == "arm32" or env["arch"] == "armv7" or env["bits"] == "32"): # arm @@ -91,7 +91,7 @@ def configure(env): env.Append(CPPFLAGS=['-DNEED_LONG_INT']) env.Append(CPPFLAGS=['-DLIBYUV_DISABLE_NEON']) - if env['ios_exceptions'] == 'yes': + if env['ios_exceptions']: env.Append(CPPFLAGS=['-fexceptions']) else: env.Append(CPPFLAGS=['-fno-exceptions']) @@ -129,15 +129,15 @@ def configure(env): ]) # Feature options - if env['game_center'] == 'yes': + if env['game_center']: env.Append(CPPFLAGS=['-DGAME_CENTER_ENABLED']) env.Append(LINKFLAGS=['-framework', 'GameKit']) - if env['store_kit'] == 'yes': + if env['store_kit']: env.Append(CPPFLAGS=['-DSTOREKIT_ENABLED']) env.Append(LINKFLAGS=['-framework', 'StoreKit']) - if env['icloud'] == 'yes': + if env['icloud']: env.Append(CPPFLAGS=['-DICLOUD_ENABLED']) env.Append(CPPPATH=['$IPHONESDK/usr/include', @@ -148,10 +148,10 @@ def configure(env): env['ENV']['CODESIGN_ALLOCATE'] = '/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/codesign_allocate' env.Append(CPPPATH=['#platform/iphone']) - env.Append(CPPFLAGS=['-DIPHONE_ENABLED', '-DUNIX_ENABLED', '-DGLES2_ENABLED', '-DMPC_FIXED_POINT']) + env.Append(CPPFLAGS=['-DIPHONE_ENABLED', '-DUNIX_ENABLED', '-DGLES2_ENABLED', '-DMPC_FIXED_POINT', '-DCOREAUDIO_ENABLED']) # TODO: Move that to opus module's config - if("module_opus_enabled" in env and env["module_opus_enabled"] != "no"): + if 'module_opus_enabled' in env and env['module_opus_enabled']: env.opus_fixed_point = "yes" if (env["arch"] == "arm"): env.Append(CFLAGS=["-DOPUS_ARM_OPT"]) diff --git a/platform/iphone/export/export.cpp b/platform/iphone/export/export.cpp index 8bb7f23ead..0507ef19d6 100644 --- a/platform/iphone/export/export.cpp +++ b/platform/iphone/export/export.cpp @@ -52,7 +52,14 @@ class EditorExportPlatformIOS : public EditorExportPlatform { Ref<ImageTexture> logo; - void _fix_config_file(const Ref<EditorExportPreset> &p_preset, Vector<uint8_t> &pfile, const String &p_name, const String &p_binary); + typedef Error (*FileHandler)(String p_file, void *p_userdata); + static Error _walk_dir_recursive(DirAccess *p_da, FileHandler p_handler, void *p_userdata); + static Error _codesign(String p_file, void *p_userdata); + + void _fix_config_file(const Ref<EditorExportPreset> &p_preset, Vector<uint8_t> &pfile, const String &p_name, const String &p_binary, bool p_debug); + static Error _export_dylibs(void *p_userdata, const String &p_path, const Vector<uint8_t> &p_data, int p_file, int p_total); + Error _export_loading_screens(const Ref<EditorExportPreset> &p_preset, const String &p_dest_dir); + Error _export_icons(const Ref<EditorExportPreset> &p_preset, const String &p_iconset_dir); protected: virtual void get_preset_features(const Ref<EditorExportPreset> &p_preset, List<String> *r_features); @@ -63,7 +70,7 @@ public: virtual String get_os_name() const { return "iOS"; } virtual Ref<Texture> get_logo() const { return logo; } - virtual String get_binary_extension() const { return "xcodeproj"; } + virtual String get_binary_extension() const { return "ipa"; } virtual Error export_project(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path, int p_flags = 0); virtual bool can_export(const Ref<EditorExportPreset> &p_preset, String &r_error, bool &r_missing_templates) const; @@ -96,16 +103,44 @@ void EditorExportPlatformIOS::get_export_options(List<ExportOption> *r_options) r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "custom_package/debug", PROPERTY_HINT_GLOBAL_FILE, "zip"), "")); r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "custom_package/release", PROPERTY_HINT_GLOBAL_FILE, "zip"), "")); + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "application/app_store_team_id"), "")); + + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "application/provisioning_profile_uuid_debug"), "")); + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "application/code_sign_identity_debug"), "iPhone Developer")); + r_options->push_back(ExportOption(PropertyInfo(Variant::INT, "application/export_method_debug", PROPERTY_HINT_ENUM, "App Store,Development,Ad-Hoc,Enterprise"), 1)); + + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "application/provisioning_profile_uuid_release"), "")); + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "application/code_sign_identity_release"), "iPhone Distribution")); + r_options->push_back(ExportOption(PropertyInfo(Variant::INT, "application/export_method_release", PROPERTY_HINT_ENUM, "App Store,Development,Ad-Hoc,Enterprise"), 0)); + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "application/name"), "")); r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "application/info"), "Made with Godot Engine")); - // r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "application/icon", PROPERTY_HINT_FILE, "png"), "")); r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "application/identifier"), "org.godotengine.iosgame")); - r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "application/signature"), "godotiosgame")); + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "application/signature"), "????")); r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "application/short_version"), "1.0")); r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "application/version"), "1.0")); r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "application/copyright"), "")); r_options->push_back(ExportOption(PropertyInfo(Variant::INT, "application/bits_mode", PROPERTY_HINT_ENUM, "Fat (32 & 64 bits),64 bits,32 bits"), 1)); + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "required_icons/iphone_120x120", PROPERTY_HINT_FILE, "png"), "")); // Home screen on iPhone/iPod Touch with retina display + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "required_icons/ipad_76x76", PROPERTY_HINT_FILE, "png"), "")); // Home screen on iPad + + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "optional_icons/iphone_180x180", PROPERTY_HINT_FILE, "png"), "")); // Home screen on iPhone with retina HD display + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "optional_icons/ipad_152x152", PROPERTY_HINT_FILE, "png"), "")); // Home screen on iPad with retina display + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "optional_icons/ipad_167x167", PROPERTY_HINT_FILE, "png"), "")); // Home screen on iPad Pro + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "optional_icons/spotlight_40x40", PROPERTY_HINT_FILE, "png"), "")); // Spotlight + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "optional_icons/spotlight_80x80", PROPERTY_HINT_FILE, "png"), "")); // Spotlight on devices with retina display + + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "landscape_launch_screens/iphone_2208x1242", PROPERTY_HINT_FILE, "png"), "")); // iPhone 6 Plus, 6s Plus, 7 Plus + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "landscape_launch_screens/ipad_2732x2048", PROPERTY_HINT_FILE, "png"), "")); // 12.9-inch iPad Pro + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "landscape_launch_screens/ipad_2048x1536", PROPERTY_HINT_FILE, "png"), "")); // Other iPads + + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "portrait_launch_screens/iphone_640x1136", PROPERTY_HINT_FILE, "png"), "")); // iPhone 5, 5s, SE + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "portrait_launch_screens/iphone_750x1334", PROPERTY_HINT_FILE, "png"), "")); // iPhone 6, 6s, 7 + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "portrait_launch_screens/iphone_1242x2208", PROPERTY_HINT_FILE, "png"), "")); // iPhone 6 Plus, 6s Plus, 7 Plus + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "portrait_launch_screens/ipad_2048x2732", PROPERTY_HINT_FILE, "png"), "")); // 12.9-inch iPad Pro + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "portrait_launch_screens/ipad_1536x2048", PROPERTY_HINT_FILE, "png"), "")); // Other iPads + r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "texture_format/s3tc"), false)); r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "texture_format/etc"), false)); r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "texture_format/etc2"), true)); @@ -113,11 +148,17 @@ void EditorExportPlatformIOS::get_export_options(List<ExportOption> *r_options) /* probably need some more info */ } -void EditorExportPlatformIOS::_fix_config_file(const Ref<EditorExportPreset> &p_preset, Vector<uint8_t> &pfile, const String &p_name, const String &p_binary) { - +void EditorExportPlatformIOS::_fix_config_file(const Ref<EditorExportPreset> &p_preset, Vector<uint8_t> &pfile, const String &p_name, const String &p_binary, bool p_debug) { + static const String export_method_string[] = { + "app-store", + "development", + "ad-hoc", + "enterprise" + }; String str; String strnew; str.parse_utf8((const char *)pfile.ptr(), pfile.size()); + print_line(str); Vector<String> lines = str.split("\n"); for (int i = 0; i < lines.size(); i++) { if (lines[i].find("$binary") != -1) { @@ -136,6 +177,19 @@ void EditorExportPlatformIOS::_fix_config_file(const Ref<EditorExportPreset> &p_ strnew += lines[i].replace("$signature", p_preset->get("application/signature")) + "\n"; } else if (lines[i].find("$copyright") != -1) { strnew += lines[i].replace("$copyright", p_preset->get("application/copyright")) + "\n"; + } else if (lines[i].find("$team_id") != -1) { + strnew += lines[i].replace("$team_id", p_preset->get("application/app_store_team_id")) + "\n"; + } else if (lines[i].find("$export_method") != -1) { + int export_method = p_preset->get(p_debug ? "application/export_method_debug" : "application/export_method_release"); + strnew += lines[i].replace("$export_method", export_method_string[export_method]) + "\n"; + } else if (lines[i].find("$provisioning_profile_uuid_release") != -1) { + strnew += lines[i].replace("$provisioning_profile_uuid_release", p_preset->get("application/provisioning_profile_uuid_release")) + "\n"; + } else if (lines[i].find("$provisioning_profile_uuid_debug") != -1) { + strnew += lines[i].replace("$provisioning_profile_uuid_debug", p_preset->get("application/provisioning_profile_uuid_debug")) + "\n"; + } else if (lines[i].find("$code_sign_identity_debug") != -1) { + strnew += lines[i].replace("$code_sign_identity_debug", p_preset->get("application/code_sign_identity_debug")) + "\n"; + } else if (lines[i].find("$code_sign_identity_release") != -1) { + strnew += lines[i].replace("$code_sign_identity_release", p_preset->get("application/code_sign_identity_release")) + "\n"; } else { strnew += lines[i] + "\n"; } @@ -150,12 +204,214 @@ void EditorExportPlatformIOS::_fix_config_file(const Ref<EditorExportPreset> &p_ } } +Error EditorExportPlatformIOS::_export_dylibs(void *p_userdata, const String &p_path, const Vector<uint8_t> &p_data, int p_file, int p_total) { + if (!p_path.ends_with(".dylib")) return OK; + const String &dest_dir = *(String *)p_userdata; + String rel_path = p_path.replace_first("res://", "dylibs/"); + DirAccess *dest_dir_access = DirAccess::open(dest_dir); + ERR_FAIL_COND_V(!dest_dir_access, ERR_CANT_OPEN); + + String base_dir = rel_path.get_base_dir(); + Error make_dir_err = OK; + if (!dest_dir_access->dir_exists(base_dir)) { + make_dir_err = dest_dir_access->make_dir_recursive(base_dir); + } + if (make_dir_err != OK) { + memdelete(dest_dir_access); + return make_dir_err; + } + + Error copy_err = dest_dir_access->copy(p_path, dest_dir + rel_path); + memdelete(dest_dir_access); + + return copy_err; +} + +struct IconInfo { + const char *preset_key; + const char *idiom; + const char *export_name; + const char *actual_size_side; + const char *scale; + const char *unscaled_size; + bool is_required; +}; + +static const IconInfo icon_infos[] = { + { "required_icons/iphone_120x120", "iphone", "Icon-120.png", "120", "2x", "60x60", true }, + { "required_icons/iphone_120x120", "iphone", "Icon-120.png", "120", "3x", "40x40", true }, + + { "required_icons/ipad_76x76", "ipad", "Icon-76.png", "76", "1x", "76x76", false }, + + { "optional_icons/iphone_180x180", "iphone", "Icon-180.png", "180", "3x", "60x60", false }, + + { "optional_icons/ipad_152x152", "ipad", "Icon-152.png", "152", "2x", "76x76", false }, + + { "optional_icons/ipad_167x167", "ipad", "Icon-167.png", "167", "2x", "83.5x83.5", false }, + + { "optional_icons/spotlight_40x40", "ipad", "Icon-40.png", "40", "1x", "40x40", false }, + + { "optional_icons/spotlight_80x80", "iphone", "Icon-80.png", "80", "2x", "40x40", false }, + { "optional_icons/spotlight_80x80", "ipad", "Icon-80.png", "80", "2x", "40x40", false } + +}; + +Error EditorExportPlatformIOS::_export_icons(const Ref<EditorExportPreset> &p_preset, const String &p_iconset_dir) { + String json_description = "{\"images\":["; + String sizes; + + DirAccess *da = DirAccess::open(p_iconset_dir); + ERR_FAIL_COND_V(!da, ERR_CANT_OPEN); + + for (int i = 0; i < (sizeof(icon_infos) / sizeof(icon_infos[0])); ++i) { + IconInfo info = icon_infos[i]; + String icon_path = p_preset->get(info.preset_key); + if (icon_path.length() == 0) { + if (info.is_required) { + ERR_PRINT("Required icon is not specified in the preset"); + return ERR_UNCONFIGURED; + } + continue; + } + Error err = da->copy(icon_path, p_iconset_dir + info.export_name); + if (err) { + memdelete(da); + String err_str = String("Failed to export icon: ") + icon_path; + ERR_PRINT(err_str.utf8().get_data()); + return err; + } + sizes += String(info.actual_size_side) + "\n"; + if (i > 0) { + json_description += ","; + } + json_description += String("{"); + json_description += String("\"idiom\":") + "\"" + info.idiom + "\","; + json_description += String("\"size\":") + "\"" + info.unscaled_size + "\","; + json_description += String("\"scale\":") + "\"" + info.scale + "\","; + json_description += String("\"filename\":") + "\"" + info.export_name + "\""; + json_description += String("}"); + } + json_description += "]}"; + memdelete(da); + + FileAccess *json_file = FileAccess::open(p_iconset_dir + "Contents.json", FileAccess::WRITE); + ERR_FAIL_COND_V(!json_file, ERR_CANT_CREATE); + CharString json_utf8 = json_description.utf8(); + json_file->store_buffer((const uint8_t *)json_utf8.get_data(), json_utf8.length()); + memdelete(json_file); + + FileAccess *sizes_file = FileAccess::open(p_iconset_dir + "sizes", FileAccess::WRITE); + ERR_FAIL_COND_V(!sizes_file, ERR_CANT_CREATE); + CharString sizes_utf8 = sizes.utf8(); + sizes_file->store_buffer((const uint8_t *)sizes_utf8.get_data(), sizes_utf8.length()); + memdelete(sizes_file); + + return OK; +} + +struct LoadingScreenInfo { + const char *preset_key; + const char *export_name; +}; + +static const LoadingScreenInfo loading_screen_infos[] = { + { "landscape_launch_screens/iphone_2208x1242", "Default-Landscape-736h@3x.png" }, + { "landscape_launch_screens/ipad_2732x2048", "Default-Landscape-1366h@2x.png" }, + { "landscape_launch_screens/ipad_2048x1536", "Default-Landscape@2x.png" }, + + { "portrait_launch_screens/iphone_640x1136", "Default-568h@2x.png" }, + { "portrait_launch_screens/iphone_750x1334", "Default-667h@2x.png" }, + { "portrait_launch_screens/iphone_1242x2208", "Default-Portrait-736h@3x.png" }, + { "portrait_launch_screens/ipad_2048x2732", "Default-Portrait-1366h@2x.png" }, + { "portrait_launch_screens/ipad_1536x2048", "Default-Portrait@2x.png" } +}; + +Error EditorExportPlatformIOS::_export_loading_screens(const Ref<EditorExportPreset> &p_preset, const String &p_dest_dir) { + DirAccess *da = DirAccess::open(p_dest_dir); + ERR_FAIL_COND_V(!da, ERR_CANT_OPEN); + + for (int i = 0; i < sizeof(loading_screen_infos) / sizeof(loading_screen_infos[0]); ++i) { + LoadingScreenInfo info = loading_screen_infos[i]; + String loading_screen_file = p_preset->get(info.preset_key); + Error err = da->copy(loading_screen_file, p_dest_dir + info.export_name); + if (err) { + memdelete(da); + String err_str = String("Failed to export loading screen: ") + loading_screen_file; + ERR_PRINT(err_str.utf8().get_data()); + return err; + } + } + memdelete(da); + + return OK; +} + +Error EditorExportPlatformIOS::_walk_dir_recursive(DirAccess *p_da, FileHandler p_handler, void *p_userdata) { + Vector<String> dirs; + String path; + String current_dir = p_da->get_current_dir(); + p_da->list_dir_begin(); + while ((path = p_da->get_next()).length() != 0) { + if (p_da->current_is_dir()) { + if (path != "." && path != "..") { + dirs.push_back(path); + } + } else { + Error err = p_handler(current_dir + "/" + path, p_userdata); + if (err) { + p_da->list_dir_end(); + return err; + } + } + } + p_da->list_dir_end(); + + for (int i = 0; i < dirs.size(); ++i) { + String dir = dirs[i]; + p_da->change_dir(dir); + Error err = _walk_dir_recursive(p_da, p_handler, p_userdata); + p_da->change_dir(".."); + if (err) { + return err; + } + } + + return OK; +} + +struct CodesignData { + const Ref<EditorExportPreset> &preset; + bool debug; + + CodesignData(const Ref<EditorExportPreset> &p_preset, bool p_debug) + : preset(p_preset), debug(p_debug) { + } +}; + +Error EditorExportPlatformIOS::_codesign(String p_file, void *p_userdata) { + if (p_file.ends_with(".dylib")) { + CodesignData *data = (CodesignData *)p_userdata; + print_line(String("Signing ") + p_file); + List<String> codesign_args; + codesign_args.push_back("-f"); + codesign_args.push_back("-s"); + codesign_args.push_back(data->preset->get(data->debug ? "application/code_sign_identity_debug" : "application/code_sign_identity_release")); + codesign_args.push_back(p_file); + return OS::get_singleton()->execute("codesign", codesign_args, true); + } + return OK; +} + Error EditorExportPlatformIOS::export_project(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path, int p_flags) { String src_pkg_name; String dest_dir = p_path.get_base_dir() + "/"; String binary_name = p_path.get_file().get_basename(); - EditorProgress ep("export", "Exporting for iOS", 3); + EditorProgress ep("export", "Exporting for iOS", 5); + + String team_id = p_preset->get("application/app_store_team_id"); + ERR_EXPLAIN("App Store Team ID not specified - cannot configure the project."); + ERR_FAIL_COND_V(team_id.length() == 0, ERR_CANT_OPEN); if (p_debug) src_pkg_name = p_preset->get("custom_package/debug"); @@ -206,6 +462,15 @@ Error EditorExportPlatformIOS::export_project(const Ref<EditorExportPreset> &p_p bool found_binary = false; int total_size = 0; + Set<String> files_to_parse; + files_to_parse.insert("godot_ios/godot_ios-Info.plist"); + files_to_parse.insert("godot_ios.xcodeproj/project.pbxproj"); + files_to_parse.insert("export_options.plist"); + files_to_parse.insert("godot_ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata"); + files_to_parse.insert("godot_ios.xcodeproj/xcshareddata/xcschemes/godot_ios.xcscheme"); + + print_line("Unzipping..."); + while (ret == UNZ_OK) { bool is_execute = false; @@ -229,12 +494,9 @@ Error EditorExportPlatformIOS::export_project(const Ref<EditorExportPreset> &p_p file = file.replace_first("iphone/", ""); - if (file == "godot_ios.xcodeproj/project.pbxproj") { - print_line("parse pbxproj"); - _fix_config_file(p_preset, data, pkg_name, binary_name); - } else if (file == "godot_ios/godot_ios-Info.plist") { - print_line("parse plist"); - _fix_config_file(p_preset, data, pkg_name, binary_name); + if (files_to_parse.has(file)) { + print_line(String("parse ") + file); + _fix_config_file(p_preset, data, pkg_name, binary_name, p_debug); } else if (file.begins_with("godot.iphone")) { if (file != binary_to_use) { ret = unzGoToNextFile(src_pkg_zip); @@ -264,6 +526,7 @@ Error EditorExportPlatformIOS::export_project(const Ref<EditorExportPreset> &p_p if (dir_err) { ERR_PRINTS("Can't create '" + dir_name + "'."); unzClose(src_pkg_zip); + memdelete(tmp_app_path); return ERR_CANT_CREATE; } } @@ -273,6 +536,7 @@ Error EditorExportPlatformIOS::export_project(const Ref<EditorExportPreset> &p_p if (!f) { ERR_PRINTS("Can't write '" + file + "'."); unzClose(src_pkg_zip); + memdelete(tmp_app_path); return ERR_CANT_CREATE; }; f->store_buffer(data.ptr(), data.size()); @@ -295,26 +559,79 @@ Error EditorExportPlatformIOS::export_project(const Ref<EditorExportPreset> &p_p if (!found_binary) { ERR_PRINTS("Requested template binary '" + binary_to_use + "' not found. It might be missing from your template archive."); - unzClose(src_pkg_zip); + memdelete(tmp_app_path); return ERR_FILE_NOT_FOUND; } - ep.step("Making PKG", 1); + String iconset_dir = dest_dir + binary_name + "/Images.xcassets/AppIcon.appiconset/"; + Error err = OK; + if (!tmp_app_path->dir_exists(iconset_dir)) { + Error err = tmp_app_path->make_dir_recursive(iconset_dir); + } + memdelete(tmp_app_path); + if (err) + return err; + + err = _export_icons(p_preset, iconset_dir); + if (err) + return err; + + err = _export_loading_screens(p_preset, dest_dir + binary_name + "/"); + if (err) + return err; + + ep.step("Making .pck", 1); String pack_path = dest_dir + binary_name + ".pck"; - Error err = save_pack(p_preset, pack_path); + err = save_pack(p_preset, pack_path); + if (err) + return err; - if (err) { + err = export_project_files(p_preset, _export_dylibs, &dest_dir); + if (err) return err; - } #ifdef OSX_ENABLED - /* and open up xcode with our new project.... */ - List<String> args; - args.push_back(p_path); - err = OS::get_singleton()->execute("/usr/bin/open", args, false); + ep.step("Code-signing dylibs", 2); + DirAccess *dylibs_dir = DirAccess::open(dest_dir + "dylibs"); + ERR_FAIL_COND_V(!dylibs_dir, ERR_CANT_OPEN); + CodesignData codesign_data(p_preset, p_debug); + err = _walk_dir_recursive(dylibs_dir, _codesign, &codesign_data); + memdelete(dylibs_dir); ERR_FAIL_COND_V(err, err); + ep.step("Making .xcarchive", 3); + String archive_path = p_path.get_basename() + ".xcarchive"; + List<String> archive_args; + archive_args.push_back("-project"); + archive_args.push_back(dest_dir + binary_name + ".xcodeproj"); + archive_args.push_back("-scheme"); + archive_args.push_back(binary_name); + archive_args.push_back("-sdk"); + archive_args.push_back("iphoneos"); + archive_args.push_back("-configuration"); + archive_args.push_back(p_debug ? "Debug" : "Release"); + archive_args.push_back("-destination"); + archive_args.push_back("generic/platform=iOS"); + archive_args.push_back("archive"); + archive_args.push_back("-archivePath"); + archive_args.push_back(archive_path); + err = OS::get_singleton()->execute("xcodebuild", archive_args, true); + ERR_FAIL_COND_V(err, err); + + ep.step("Making .ipa", 4); + List<String> export_args; + export_args.push_back("-exportArchive"); + export_args.push_back("-archivePath"); + export_args.push_back(archive_path); + export_args.push_back("-exportOptionsPlist"); + export_args.push_back(dest_dir + "export_options.plist"); + export_args.push_back("-exportPath"); + export_args.push_back(dest_dir); + err = OS::get_singleton()->execute("xcodebuild", export_args, true); + ERR_FAIL_COND_V(err, err); +#else + print_line(".ipa can only be built on macOS. Leaving XCode project without building the package."); #endif return OK; diff --git a/platform/iphone/game_center.h b/platform/iphone/game_center.h index c0a7830fe9..21f40fa362 100644 --- a/platform/iphone/game_center.h +++ b/platform/iphone/game_center.h @@ -43,11 +43,13 @@ class GameCenter : public Object { List<Variant> pending_events; - bool connected; + bool authenticated; + + void return_connect_error(const char *p_error_description); public: - Error connect(); - bool is_connected(); + void connect(); + bool is_authenticated(); Error post_score(Variant p_score); Error award_achievement(Variant p_params); @@ -55,6 +57,7 @@ public: void request_achievements(); void request_achievement_descriptions(); Error show_game_center(Variant p_params); + Error request_identity_verification_signature(); void game_center_closed(); diff --git a/platform/iphone/game_center.mm b/platform/iphone/game_center.mm index c05bdea005..531b80eee3 100644 --- a/platform/iphone/game_center.mm +++ b/platform/iphone/game_center.mm @@ -49,8 +49,7 @@ extern "C" { GameCenter *GameCenter::instance = NULL; void GameCenter::_bind_methods() { - ClassDB::bind_method(D_METHOD("connect"), &GameCenter::connect); - ClassDB::bind_method(D_METHOD("is_connected"), &GameCenter::is_connected); + ClassDB::bind_method(D_METHOD("is_authenticated"), &GameCenter::is_authenticated); ClassDB::bind_method(D_METHOD("post_score"), &GameCenter::post_score); ClassDB::bind_method(D_METHOD("award_achievement"), &GameCenter::award_achievement); @@ -58,24 +57,41 @@ void GameCenter::_bind_methods() { ClassDB::bind_method(D_METHOD("request_achievements"), &GameCenter::request_achievements); ClassDB::bind_method(D_METHOD("request_achievement_descriptions"), &GameCenter::request_achievement_descriptions); ClassDB::bind_method(D_METHOD("show_game_center"), &GameCenter::show_game_center); + ClassDB::bind_method(D_METHOD("request_identity_verification_signature"), &GameCenter::request_identity_verification_signature); ClassDB::bind_method(D_METHOD("get_pending_event_count"), &GameCenter::get_pending_event_count); ClassDB::bind_method(D_METHOD("pop_pending_event"), &GameCenter::pop_pending_event); }; -Error GameCenter::connect() { +void GameCenter::return_connect_error(const char *p_error_description) { + authenticated = false; + Dictionary ret; + ret["type"] = "authentication"; + ret["result"] = "error"; + ret["error_code"] = 0; + ret["error_description"] = p_error_description; + pending_events.push_back(ret); +} + +void GameCenter::connect() { //if this class isn't available, game center isn't implemented if ((NSClassFromString(@"GKLocalPlayer")) == nil) { - GameCenter::get_singleton()->connected = false; - return ERR_UNAVAILABLE; + return_connect_error("GameCenter not available"); + return; } GKLocalPlayer *player = [GKLocalPlayer localPlayer]; - ERR_FAIL_COND_V(![player respondsToSelector:@selector(authenticateHandler)], ERR_UNAVAILABLE); + if (![player respondsToSelector:@selector(authenticateHandler)]) { + return_connect_error("GameCenter doesn't respond to 'authenticateHandler'"); + return; + } ViewController *root_controller = (ViewController *)((AppDelegate *)[[UIApplication sharedApplication] delegate]).window.rootViewController; - ERR_FAIL_COND_V(!root_controller, FAILED); + if (!root_controller) { + return_connect_error("Window doesn't have root ViewController"); + return; + } // This handler is called several times. First when the view needs to be shown, then again // after the view is cancelled or the user logs in. Or if the user's already logged in, it's @@ -89,23 +105,22 @@ Error GameCenter::connect() { ret["type"] = "authentication"; if (player.isAuthenticated) { ret["result"] = "ok"; - GameCenter::get_singleton()->connected = true; + ret["player_id"] = [player.playerID UTF8String]; + GameCenter::get_singleton()->authenticated = true; } else { ret["result"] = "error"; ret["error_code"] = error.code; ret["error_description"] = [error.localizedDescription UTF8String]; - GameCenter::get_singleton()->connected = false; + GameCenter::get_singleton()->authenticated = false; }; pending_events.push_back(ret); }; }); - - return OK; }; -bool GameCenter::is_connected() { - return connected; +bool GameCenter::is_authenticated() { + return authenticated; }; Error GameCenter::post_score(Variant p_score) { @@ -116,7 +131,7 @@ Error GameCenter::post_score(Variant p_score) { String category = params["category"]; NSString *cat_str = [[[NSString alloc] initWithUTF8String:category.utf8().get_data()] autorelease]; - GKScore *reporter = [[[GKScore alloc] initWithCategory:cat_str] autorelease]; + GKScore *reporter = [[[GKScore alloc] initWithLeaderboardIdentifier:cat_str] autorelease]; reporter.value = score; ERR_FAIL_COND_V([GKScore respondsToSelector:@selector(reportScores)], ERR_UNAVAILABLE); @@ -325,6 +340,34 @@ Error GameCenter::show_game_center(Variant p_params) { return OK; }; +Error GameCenter::request_identity_verification_signature() { + + ERR_FAIL_COND_V(!is_authenticated(), ERR_UNAUTHORIZED); + + GKLocalPlayer *player = [GKLocalPlayer localPlayer]; + [player generateIdentityVerificationSignatureWithCompletionHandler:^(NSURL *publicKeyUrl, NSData *signature, NSData *salt, uint64_t timestamp, NSError *error) { + + Dictionary ret; + ret["type"] = "identity_verification_signature"; + if (error == nil) { + ret["result"] = "ok"; + ret["public_key_url"] = [publicKeyUrl.absoluteString UTF8String]; + ret["signature"] = [[signature base64EncodedStringWithOptions:0] UTF8String]; + ret["salt"] = [[salt base64EncodedStringWithOptions:0] UTF8String]; + ret["timestamp"] = timestamp; + ret["player_id"] = [player.playerID UTF8String]; + } else { + ret["result"] = "error"; + ret["error_code"] = error.code; + ret["error_description"] = [error.localizedDescription UTF8String]; + }; + + pending_events.push_back(ret); + }]; + + return OK; +}; + void GameCenter::game_center_closed() { Dictionary ret; @@ -353,7 +396,7 @@ GameCenter *GameCenter::get_singleton() { GameCenter::GameCenter() { ERR_FAIL_COND(instance != NULL); instance = this; - connected = false; + authenticated = false; }; GameCenter::~GameCenter(){}; diff --git a/platform/iphone/gl_view.h b/platform/iphone/gl_view.h index a9fd8d5711..f7309396c6 100644 --- a/platform/iphone/gl_view.h +++ b/platform/iphone/gl_view.h @@ -100,6 +100,8 @@ - (void)destroyFramebuffer; - (void)audioRouteChangeListenerCallback:(NSNotification *)notification; +- (void)keyboardOnScreen:(NSNotification *)notification; +- (void)keyboardHidden:(NSNotification *)notification; @property NSTimeInterval animationInterval; @property(nonatomic, assign) BOOL useCADisplayLink; diff --git a/platform/iphone/gl_view.mm b/platform/iphone/gl_view.mm index 3e206c3a2c..02da706cc5 100644 --- a/platform/iphone/gl_view.mm +++ b/platform/iphone/gl_view.mm @@ -63,6 +63,7 @@ void _pause_video(); void _focus_out_video(); void _unpause_video(); void _stop_video(); +CGFloat _points_to_pixels(CGFloat); void _show_keyboard(String p_existing) { keyboard_text = p_existing; @@ -174,6 +175,19 @@ void _stop_video() { video_playing = false; } +CGFloat _points_to_pixels(CGFloat points) { + float pixelPerInch; + if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { + pixelPerInch = 132; + } else if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) { + pixelPerInch = 163; + } else { + pixelPerInch = 160; + } + CGFloat pointsPerInch = 72.0; + return (points / pointsPerInch * pixelPerInch); +} + @implementation GLView @synthesize animationInterval; @@ -537,6 +551,20 @@ static void clear_touches() { [self resignFirstResponder]; }; +- (void)keyboardOnScreen:(NSNotification *)notification { + NSDictionary *info = notification.userInfo; + NSValue *value = info[UIKeyboardFrameEndUserInfoKey]; + + CGRect rawFrame = [value CGRectValue]; + CGRect keyboardFrame = [self convertRect:rawFrame fromView:nil]; + + OSIPhone::get_singleton()->set_virtual_keyboard_height(_points_to_pixels(keyboardFrame.size.height)); +} + +- (void)keyboardHidden:(NSNotification *)notification { + OSIPhone::get_singleton()->set_virtual_keyboard_height(0); +} + - (void)deleteBackward { if (keyboard_text.length()) keyboard_text.erase(keyboard_text.length() - 1, 1); @@ -606,6 +634,18 @@ static void clear_touches() { name:AVAudioSessionRouteChangeNotification object:nil]; + printf("******** adding observer for keyboard show/hide\n"); + [[NSNotificationCenter defaultCenter] + addObserver:self + selector:@selector(keyboardOnScreen:) + name:UIKeyboardDidShowNotification + object:nil]; + [[NSNotificationCenter defaultCenter] + addObserver:self + selector:@selector(keyboardHidden:) + name:UIKeyboardDidHideNotification + object:nil]; + //self.autoresizesSubviews = YES; //[self setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleWidth]; diff --git a/platform/iphone/godot_iphone.cpp b/platform/iphone/godot_iphone.cpp index 8c6d6d8da4..7d21d35e18 100644 --- a/platform/iphone/godot_iphone.cpp +++ b/platform/iphone/godot_iphone.cpp @@ -29,6 +29,7 @@ /*************************************************************************/ #include "main/main.h" #include "os_iphone.h" +#include "ustring.h" #include <stdio.h> #include <string.h> @@ -41,9 +42,9 @@ int add_path(int p_argc, char **p_args); int add_cmdline(int p_argc, char **p_args); }; -int iphone_main(int, int, int, char **); +int iphone_main(int, int, int, char **, String); -int iphone_main(int width, int height, int argc, char **argv) { +int iphone_main(int width, int height, int argc, char **argv, String data_dir) { int len = strlen(argv[0]); @@ -63,7 +64,7 @@ int iphone_main(int width, int height, int argc, char **argv) { char cwd[512]; getcwd(cwd, sizeof(cwd)); printf("cwd %s\n", cwd); - os = new OSIPhone(width, height); + os = new OSIPhone(width, height, data_dir); char *fargv[64]; for (int i = 0; i < argc; i++) { diff --git a/platform/iphone/os_iphone.cpp b/platform/iphone/os_iphone.cpp index 0e3eeed114..08792b8631 100644 --- a/platform/iphone/os_iphone.cpp +++ b/platform/iphone/os_iphone.cpp @@ -35,13 +35,13 @@ #include "servers/visual/visual_server_raster.h" //#include "servers/visual/visual_server_wrap_mt.h" -#include "audio_driver_iphone.h" #include "main/main.h" #include "core/io/file_access_pack.h" #include "core/os/dir_access.h" #include "core/os/file_access.h" #include "core/project_settings.h" +#include "drivers/unix/syslog_logger.h" #include "sem_iphone.h" @@ -97,8 +97,17 @@ void OSIPhone::initialize_core() { OS_Unix::initialize_core(); SemaphoreIphone::make_default(); + + set_data_dir(data_dir); }; +void OSIPhone::initialize_logger() { + Vector<Logger *> loggers; + loggers.push_back(memnew(SyslogLogger)); + loggers.push_back(memnew(RotatedFileLogger("user://logs/log.txt"))); + _set_logger(memnew(CompositeLogger(loggers))); +} + void OSIPhone::initialize(const VideoMode &p_desired, int p_video_driver, int p_audio_driver) { supported_orientations = 0; @@ -124,9 +133,8 @@ void OSIPhone::initialize(const VideoMode &p_desired, int p_video_driver, int p_ // reset this to what it should be, it will have been set to 0 after visual_server->init() is called RasterizerStorageGLES3::system_fbo = gl_view_base_fb; - audio_driver = memnew(AudioDriverIphone); - audio_driver->set_singleton(); - audio_driver->init(); + AudioDriverManager::add_driver(&audio_driver); + AudioDriverManager::initialize(p_audio_driver); // init physics servers physics_server = memnew(PhysicsServerSW); @@ -457,6 +465,14 @@ void OSIPhone::hide_virtual_keyboard() { _hide_keyboard(); }; +void OSIPhone::set_virtual_keyboard_height(int p_height) { + virtual_keyboard_height = p_height; +} + +int OSIPhone::get_virtual_keyboard_height() const { + return virtual_keyboard_height; +} + Error OSIPhone::shell_open(String p_uri) { return _shell_open(p_uri); }; @@ -558,7 +574,7 @@ bool OSIPhone::_check_internal_feature_support(const String &p_feature) { return p_feature == "mobile" || p_feature == "etc" || p_feature == "pvrtc" || p_feature == "etc2"; } -OSIPhone::OSIPhone(int width, int height) { +OSIPhone::OSIPhone(int width, int height, String p_data_dir) { main_loop = NULL; visual_server = NULL; @@ -570,6 +586,13 @@ OSIPhone::OSIPhone(int width, int height) { vm.resizable = false; set_video_mode(vm); event_count = 0; + virtual_keyboard_height = 0; + + // can't call set_data_dir from here, since it requires DirAccess + // which is initialized in initialize_core + data_dir = p_data_dir; + + _set_logger(memnew(SyslogLogger)); }; OSIPhone::~OSIPhone() { diff --git a/platform/iphone/os_iphone.h b/platform/iphone/os_iphone.h index 475dceebf2..e70ac9ba98 100644 --- a/platform/iphone/os_iphone.h +++ b/platform/iphone/os_iphone.h @@ -32,6 +32,7 @@ #ifndef OS_IPHONE_H #define OS_IPHONE_H +#include "drivers/coreaudio/audio_driver_coreaudio.h" #include "drivers/unix/os_unix.h" #include "os/input.h" @@ -46,8 +47,6 @@ #include "servers/visual/rasterizer.h" #include "servers/visual_server.h" -class AudioDriverIphone; - class OSIPhone : public OS_Unix { public: @@ -70,7 +69,7 @@ private: PhysicsServer *physics_server; Physics2DServer *physics_2d_server; - AudioDriverIphone *audio_driver; + AudioDriverCoreAudio audio_driver; #ifdef GAME_CENTER_ENABLED GameCenter *game_center; @@ -91,6 +90,7 @@ private: virtual VideoMode get_default_video_mode() const; + virtual void initialize_logger(); virtual void initialize_core(); virtual void initialize(const VideoMode &p_desired, int p_video_driver, int p_audio_driver); @@ -124,6 +124,8 @@ private: InputDefault *input; + int virtual_keyboard_height; + public: bool iterate(); @@ -133,6 +135,7 @@ public: void mouse_move(int p_idx, int p_prev_x, int p_prev_y, int p_x, int p_y, bool p_use_as_mouse); void touches_cancelled(); void key(uint32_t p_key, bool p_pressed); + void set_virtual_keyboard_height(int p_height); int set_base_framebuffer(int p_fb); @@ -168,6 +171,7 @@ public: 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 int get_virtual_keyboard_height() const; virtual void set_cursor_shape(CursorShape p_shape); @@ -197,7 +201,7 @@ public: virtual void native_video_stop(); virtual bool _check_internal_feature_support(const String &p_feature); - OSIPhone(int width, int height); + OSIPhone(int width, int height, String p_data_dir); ~OSIPhone(); }; diff --git a/platform/javascript/SCsub b/platform/javascript/SCsub index e282041745..f01d9367d2 100644 --- a/platform/javascript/SCsub +++ b/platform/javascript/SCsub @@ -29,7 +29,7 @@ zip_dir = target_dir.Dir('.javascript_zip') zip_files = env.InstallAs(zip_dir.File('godot.html'), '#misc/dist/html/default.html') implicit_targets = [] -if env['wasm'] == 'yes': +if env['wasm']: wasm = target_dir.File(basename + '.wasm') implicit_targets.append(wasm) zip_files.append(InstallAs(zip_dir.File('godot.wasm'), wasm)) diff --git a/platform/javascript/detect.py b/platform/javascript/detect.py index bea8f156af..cc29ad8956 100644 --- a/platform/javascript/detect.py +++ b/platform/javascript/detect.py @@ -17,18 +17,18 @@ def can_build(): def get_opts(): - + from SCons.Variables import BoolVariable return [ - ['wasm', 'Compile to WebAssembly', 'no'], - ['javascript_eval', 'Enable JavaScript eval interface', 'yes'], + BoolVariable('wasm', 'Compile to WebAssembly', False), + BoolVariable('javascript_eval', 'Enable JavaScript eval interface', True), ] def get_flags(): return [ - ('tools', 'no'), - ('module_theora_enabled', 'no'), + ('tools', False), + ('module_theora_enabled', False), ] @@ -95,7 +95,7 @@ def configure(env): # These flags help keep the file size down env.Append(CPPFLAGS=["-fno-exceptions", '-DNO_SAFE_CAST', '-fno-rtti']) - if env['javascript_eval'] == 'yes': + if env['javascript_eval']: env.Append(CPPFLAGS=['-DJAVASCRIPT_EVAL_ENABLED']) ## Link flags @@ -103,7 +103,7 @@ def configure(env): env.Append(LINKFLAGS=['-s', 'EXTRA_EXPORTED_RUNTIME_METHODS="[\'FS\']"']) env.Append(LINKFLAGS=['-s', 'USE_WEBGL2=1']) - if (env['wasm'] == 'yes'): + if env['wasm']: env.Append(LINKFLAGS=['-s', 'BINARYEN=1']) # In contrast to asm.js, enabling memory growth on WebAssembly has no # major performance impact, and causes only a negligible increase in @@ -116,5 +116,5 @@ def configure(env): env.Append(LINKFLAGS=['--memory-init-file', '1']) # TODO: Move that to opus module's config - if("module_opus_enabled" in env and env["module_opus_enabled"] != "no"): + if 'module_opus_enabled' in env and env['module_opus_enabled']: env.opus_fixed_point = "yes" diff --git a/platform/javascript/engine.js b/platform/javascript/engine.js index 552f5a7e02..99d1c20bbd 100644 --- a/platform/javascript/engine.js +++ b/platform/javascript/engine.js @@ -84,10 +84,10 @@ rtenvOpts.print = stdout; if (typeof stderr === 'function') rtenvOpts.printErr = stderr; - if (typeof WebAssembly === 'object' && initializer instanceof WebAssembly.Module) { + if (typeof WebAssembly === 'object' && initializer instanceof ArrayBuffer) { rtenvOpts.instantiateWasm = function(imports, onSuccess) { WebAssembly.instantiate(initializer, imports).then(function(result) { - onSuccess(result); + onSuccess(result.instance); }); return {}; }; @@ -241,7 +241,7 @@ return Promise.reject(new Error("Browser doesn't support WebAssembly")); // TODO cache/retrieve module to/from idb engineLoadPromise = loadPromise(basePath + '.wasm').then(function(xhr) { - return WebAssembly.compile(xhr.response); + return xhr.response; }); } else { var asmjsPromise = loadPromise(basePath + '.asm.js').then(function(xhr) { diff --git a/platform/javascript/javascript_eval.cpp b/platform/javascript/javascript_eval.cpp index 74f8d80a76..1d737879f6 100644 --- a/platform/javascript/javascript_eval.cpp +++ b/platform/javascript/javascript_eval.cpp @@ -39,24 +39,41 @@ JavaScript *JavaScript::get_singleton() { return singleton; } +extern "C" EMSCRIPTEN_KEEPALIVE uint8_t *resize_poolbytearray_and_open_write(PoolByteArray *p_arr, PoolByteArray::Write *r_write, int p_len) { + + p_arr->resize(p_len); + *r_write = p_arr->write(); + return r_write->ptr(); +} + Variant JavaScript::eval(const String &p_code, bool p_use_global_exec_context) { union { - int i; + bool b; double d; char *s; } js_data[4]; + + PoolByteArray arr; + PoolByteArray::Write arr_write; + /* clang-format off */ Variant::Type return_type = static_cast<Variant::Type>(EM_ASM_INT({ + const CODE = $0; + const USE_GLOBAL_EXEC_CONTEXT = $1; + const PTR = $2; + const ELEM_LEN = $3; + const BYTEARRAY_PTR = $4; + const BYTEARRAY_WRITE_PTR = $5; var eval_ret; try { - if ($3) { // p_use_global_exec_context + if (USE_GLOBAL_EXEC_CONTEXT) { // indirect eval call grants global execution context var global_eval = eval; - eval_ret = global_eval(UTF8ToString($2)); + eval_ret = global_eval(UTF8ToString(CODE)); } else { - eval_ret = eval(UTF8ToString($2)); + eval_ret = eval(UTF8ToString(CODE)); } } catch (e) { Module.printErr(e); @@ -66,16 +83,11 @@ Variant JavaScript::eval(const String &p_code, bool p_use_global_exec_context) { switch (typeof eval_ret) { case 'boolean': - // bitwise op yields 32-bit int - setValue($0, eval_ret|0, 'i32'); + setValue(PTR, eval_ret, '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'); + setValue(PTR, eval_ret, 'double'); return 3; // REAL case 'string': @@ -85,7 +97,7 @@ Variant JavaScript::eval(const String &p_code, bool p_use_global_exec_context) { if (array_ptr===0) { throw new Error('String allocation failed (probably out of memory)'); } - setValue($0, array_ptr|0 , '*'); + setValue(PTR, array_ptr , '*'); stringToUTF8(eval_ret, array_ptr, array_len); return 4; // STRING } catch (e) { @@ -102,41 +114,50 @@ Variant JavaScript::eval(const String &p_code, bool p_use_global_exec_context) { 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 (ArrayBuffer.isView(eval_ret) && !(eval_ret instanceof Uint8Array)) { + eval_ret = new Uint8Array(eval_ret.buffer); + } + else if (eval_ret instanceof ArrayBuffer) { + eval_ret = new Uint8Array(eval_ret); + } + if (eval_ret instanceof Uint8Array) { + var bytes_ptr = ccall('resize_poolbytearray_and_open_write', 'number', ['number', 'number' ,'number'], [BYTEARRAY_PTR, BYTEARRAY_WRITE_PTR, eval_ret.length]); + HEAPU8.set(eval_ret, bytes_ptr); + return 20; // POOL_BYTE_ARRAY + } + + if (typeof eval_ret.x==='number' && typeof eval_ret.y==='number') { + setValue(PTR, eval_ret.x, 'double'); + setValue(PTR + ELEM_LEN, eval_ret.y, 'double'); if (typeof eval_ret.z==='number') { - setValue($0+$1*2, eval_ret.z, 'double'); + setValue(PTR + ELEM_LEN*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'); + setValue(PTR + ELEM_LEN*2, eval_ret.width, 'double'); + setValue(PTR + ELEM_LEN*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'); + if (typeof eval_ret.r === 'number' && typeof eval_ret.g === 'number' && typeof eval_ret.b === 'number') { + setValue(PTR, eval_ret.r, 'double'); + setValue(PTR + ELEM_LEN, eval_ret.g, 'double'); + setValue(PTR + ELEM_LEN*2, eval_ret.b, 'double'); + setValue(PTR + ELEM_LEN*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)); + }, p_code.utf8().get_data(), p_use_global_exec_context, js_data, sizeof *js_data, &arr, &arr_write)); /* clang-format on */ switch (return_type) { case Variant::BOOL: - return !!js_data->i; - case Variant::INT: - return js_data->i; + return js_data->b; case Variant::REAL: return js_data->d; case Variant::STRING: { @@ -153,7 +174,10 @@ Variant JavaScript::eval(const String &p_code, bool p_use_global_exec_context) { 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 Color(js_data[0].d, js_data[1].d, js_data[2].d, js_data[3].d); + case Variant::POOL_BYTE_ARRAY: + arr_write = PoolByteArray::Write(); + return arr; } return Variant(); } diff --git a/platform/javascript/javascript_main.cpp b/platform/javascript/javascript_main.cpp index 4c948bf181..ed4f416cfd 100644 --- a/platform/javascript/javascript_main.cpp +++ b/platform/javascript/javascript_main.cpp @@ -39,8 +39,13 @@ static void main_loop() { os->main_loop_iterate(); } -extern "C" void main_after_fs_sync() { +extern "C" void main_after_fs_sync(char *p_idbfs_err) { + String idbfs_err = String::utf8(p_idbfs_err); + if (!idbfs_err.empty()) { + print_line("IndexedDB not available: " + idbfs_err); + } + os->set_idbfs_available(idbfs_err.empty()); // Ease up compatibility ResourceLoader::set_abort_on_missing_resources(false); Main::start(); @@ -60,14 +65,7 @@ int main(int argc, char *argv[]) { FS.mkdir('/userfs'); FS.mount(IDBFS, {}, '/userfs'); FS.syncfs(true, function(err) { - if (err) { - Module.setStatus('Failed to load persistent data\nPlease allow (third-party) cookies'); - Module.printErr('Failed to populate IDB file system: ' + err.message); - Module.noExitRuntime = false; - } else { - Module.print('Successfully populated IDB file system'); - ccall('main_after_fs_sync', null); - } + Module['ccall']('main_after_fs_sync', null, ['string'], [err ? err.message : ""]) }); ); /* clang-format on */ diff --git a/platform/javascript/os_javascript.cpp b/platform/javascript/os_javascript.cpp index f103035b27..f6446e77da 100644 --- a/platform/javascript/os_javascript.cpp +++ b/platform/javascript/os_javascript.cpp @@ -85,6 +85,10 @@ void OS_JavaScript::initialize_core() { FileAccess::make_default<FileAccessBufferedFA<FileAccessUnix> >(FileAccess::ACCESS_RESOURCES); } +void OS_JavaScript::initialize_logger() { + _set_logger(memnew(StdLogger)); +} + void OS_JavaScript::set_opengl_extensions(const char *p_gl_extensions) { ERR_FAIL_COND(!p_gl_extensions); @@ -821,7 +825,7 @@ bool OS_JavaScript::main_loop_iterate() { if (!main_loop) return false; - if (time_to_save_sync >= 0) { + if (idbfs_available && time_to_save_sync >= 0) { int64_t newtime = get_ticks_msec(); int64_t elapsed = newtime - last_sync_time; last_sync_time = newtime; @@ -911,10 +915,10 @@ String OS_JavaScript::get_executable_path() const { void OS_JavaScript::_close_notification_funcs(const String &p_file, int p_flags) { - print_line("close " + p_file + " flags " + itos(p_flags)); - if (p_file.begins_with("/userfs") && p_flags & FileAccess::WRITE) { - static_cast<OS_JavaScript *>(get_singleton())->last_sync_time = OS::get_singleton()->get_ticks_msec(); - static_cast<OS_JavaScript *>(get_singleton())->time_to_save_sync = 5000; //five seconds since last save + OS_JavaScript *os = static_cast<OS_JavaScript *>(get_singleton()); + if (os->idbfs_available && p_file.begins_with("/userfs") && p_flags & FileAccess::WRITE) { + os->last_sync_time = OS::get_singleton()->get_ticks_msec(); + os->time_to_save_sync = 5000; //five seconds since last save } } @@ -989,6 +993,16 @@ bool OS_JavaScript::_check_internal_feature_support(const String &p_feature) { return p_feature == "web" || p_feature == "s3tc"; // TODO check for these features really being available } +void OS_JavaScript::set_idbfs_available(bool p_idbfs_available) { + + idbfs_available = p_idbfs_available; +} + +bool OS_JavaScript::is_userfs_persistent() const { + + return idbfs_available; +} + OS_JavaScript::OS_JavaScript(const char *p_execpath, GetDataDirFunc p_get_data_dir_func) { set_cmdline(p_execpath, get_cmdline_args()); main_loop = NULL; @@ -1000,6 +1014,7 @@ OS_JavaScript::OS_JavaScript(const char *p_execpath, GetDataDirFunc p_get_data_d get_data_dir_func = p_get_data_dir_func; FileAccessUnix::close_notification_func = _close_notification_funcs; + idbfs_available = false; time_to_save_sync = -1; } diff --git a/platform/javascript/os_javascript.h b/platform/javascript/os_javascript.h index 4c6469cb58..1c939d3fd5 100644 --- a/platform/javascript/os_javascript.h +++ b/platform/javascript/os_javascript.h @@ -49,6 +49,7 @@ typedef String (*GetDataDirFunc)(); class OS_JavaScript : public OS_Unix { + bool idbfs_available; int64_t time_to_save_sync; int64_t last_sync_time; @@ -92,6 +93,7 @@ public: virtual int get_audio_driver_count() const; virtual const char *get_audio_driver_name(int p_driver) const; + virtual void initialize_logger(); virtual void initialize_core(); virtual void initialize(const VideoMode &p_desired, int p_video_driver, int p_audio_driver); @@ -104,11 +106,6 @@ public: //static OS* get_singleton(); - virtual 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) { - - OS::print_error(p_function, p_file, p_line, p_code, p_rationale, p_type); - } - virtual void alert(const String &p_alert, const String &p_title = "ALERT!"); virtual void set_mouse_mode(MouseMode p_mode); @@ -140,6 +137,8 @@ public: virtual bool can_draw() const; + virtual bool is_userfs_persistent() const; + virtual void set_cursor_shape(CursorShape p_shape); void main_loop_begin(); @@ -171,6 +170,8 @@ public: virtual bool _check_internal_feature_support(const String &p_feature); + void set_idbfs_available(bool p_idbfs_available); + OS_JavaScript(const char *p_execpath, GetDataDirFunc p_get_data_dir_func); ~OS_JavaScript(); }; diff --git a/platform/osx/SCsub b/platform/osx/SCsub index 5b2de54535..be3950bc6d 100644 --- a/platform/osx/SCsub +++ b/platform/osx/SCsub @@ -1,20 +1,22 @@ #!/usr/bin/env python +import os Import('env') +def make_debug(target, source, env): + os.system('dsymutil %s -o %s.dSYM' % (target[0], target[0])) + files = [ 'crash_handler_osx.mm', 'os_osx.mm', 'godot_main_osx.mm', - 'audio_driver_osx.cpp', 'sem_osx.cpp', 'dir_access_osx.mm', 'joypad_osx.cpp', 'power_osx.cpp', ] -prog = env.Program('#bin/godot', files) -if (env['target'] == "debug" or env['target'] == "release_debug"): - # Build the .dSYM file for atos - action = "dsymutil " + File(prog)[0].path + " -o " + File(prog)[0].path + ".dSYM" - env.AddPostAction(prog, action) +binary = env.Program('#bin/godot', files) +if env["debug_symbols"] == "full" or env["debug_symbols"] == "yes": + env.AddPostAction(binary, make_debug) + diff --git a/platform/osx/detect.py b/platform/osx/detect.py index d3ebdfe992..31032659b6 100644 --- a/platform/osx/detect.py +++ b/platform/osx/detect.py @@ -19,9 +19,11 @@ def can_build(): def get_opts(): + from SCons.Variables import EnumVariable return [ ('osxcross_sdk', 'OSXCross SDK version', 'darwin14'), + EnumVariable('debug_symbols', 'Add debug symbols to release version', 'yes', ('yes', 'no', 'full')), ] @@ -36,10 +38,18 @@ def configure(env): ## Build type if (env["target"] == "release"): - env.Prepend(CCFLAGS=['-O2', '-ffast-math', '-fomit-frame-pointer', '-ftree-vectorize', '-msse2']) + env.Prepend(CCFLAGS=['-O3', '-ffast-math', '-fomit-frame-pointer', '-ftree-vectorize', '-msse2']) + if (env["debug_symbols"] == "yes"): + env.Prepend(CCFLAGS=['-g1']) + if (env["debug_symbols"] == "full"): + env.Prepend(CCFLAGS=['-g2']) elif (env["target"] == "release_debug"): env.Prepend(CCFLAGS=['-O2', '-DDEBUG_ENABLED']) + if (env["debug_symbols"] == "yes"): + env.Prepend(CCFLAGS=['-g1']) + if (env["debug_symbols"] == "full"): + env.Prepend(CCFLAGS=['-g2']) elif (env["target"] == "debug"): env.Prepend(CCFLAGS=['-g3', '-DDEBUG_ENABLED', '-DDEBUG_MEMORY_ENABLED']) @@ -52,7 +62,7 @@ def configure(env): ## Compiler configuration - if (not os.environ.has_key("OSXCROSS_ROOT")): # regular native build + if "OSXCROSS_ROOT" not in os.environ: # regular native build if (env["bits"] == "fat"): env.Append(CCFLAGS=['-arch', 'i386', '-arch', 'x86_64']) env.Append(LINKFLAGS=['-arch', 'i386', '-arch', 'x86_64']) @@ -87,13 +97,13 @@ def configure(env): ## Dependencies - if (env['builtin_libtheora'] != 'no'): + if env['builtin_libtheora']: env["x86_libtheora_opt_gcc"] = True ## Flags env.Append(CPPPATH=['#platform/osx']) - env.Append(CPPFLAGS=['-DOSX_ENABLED', '-DUNIX_ENABLED', '-DGLES2_ENABLED', '-DAPPLE_STYLE_KEYS']) + env.Append(CPPFLAGS=['-DOSX_ENABLED', '-DUNIX_ENABLED', '-DGLES2_ENABLED', '-DAPPLE_STYLE_KEYS', '-DCOREAUDIO_ENABLED']) env.Append(LINKFLAGS=['-framework', 'Cocoa', '-framework', 'Carbon', '-framework', 'OpenGL', '-framework', 'AGL', '-framework', 'AudioUnit', '-framework', 'CoreAudio', '-lz', '-framework', 'IOKit', '-framework', 'ForceFeedback']) env.Append(LIBS=['pthread']) diff --git a/platform/osx/export/export.cpp b/platform/osx/export/export.cpp index 2ec76fe0dd..8a6f1dc04c 100644 --- a/platform/osx/export/export.cpp +++ b/platform/osx/export/export.cpp @@ -53,9 +53,16 @@ class EditorExportPlatformOSX : public EditorExportPlatform { void _fix_plist(const Ref<EditorExportPreset> &p_preset, Vector<uint8_t> &plist, const String &p_binary); void _make_icon(const Ref<Image> &p_icon, Vector<uint8_t> &p_data); -#ifdef OSX_ENABLED + Error _code_sign(const Ref<EditorExportPreset> &p_preset, const String &p_path); Error _create_dmg(const String &p_dmg_path, const String &p_pkg_name, const String &p_app_path_name); + +#ifdef OSX_ENABLED + bool use_codesign() const { return true; } + bool use_dmg() const { return true; } +#else + bool use_codesign() const { return false; } + bool use_dmg() const { return false; } #endif protected: @@ -67,11 +74,7 @@ public: virtual String get_os_name() const { return "OSX"; } virtual Ref<Texture> get_logo() const { return logo; } -#ifdef OSX_ENABLED - virtual String get_binary_extension() const { return "dmg"; } -#else - virtual String get_binary_extension() const { return "zip"; } -#endif + virtual String get_binary_extension() const { return use_dmg() ? "dmg" : "zip"; } virtual Error export_project(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path, int p_flags = 0); virtual bool can_export(const Ref<EditorExportPreset> &p_preset, String &r_error, bool &r_missing_templates) const; @@ -97,6 +100,16 @@ void EditorExportPlatformOSX::get_preset_features(const Ref<EditorExportPreset> if (p_preset->get("texture_format/etc2")) { r_features->push_back("etc2"); } + + int bits = p_preset->get("application/bits_mode"); + + if (bits == 0 || bits == 1) { + r_features->push_back("64"); + } + + if (bits == 0 || bits == 2) { + r_features->push_back("32"); + } } void EditorExportPlatformOSX::get_export_options(List<ExportOption> *r_options) { @@ -210,7 +223,6 @@ void EditorExportPlatformOSX::_fix_plist(const Ref<EditorExportPreset> &p_preset } } -#ifdef OSX_ENABLED /** If we're running the OSX version of the Godot editor we'll: - export our application bundle to a temporary folder @@ -220,6 +232,7 @@ void EditorExportPlatformOSX::_fix_plist(const Ref<EditorExportPreset> &p_preset Error EditorExportPlatformOSX::_code_sign(const Ref<EditorExportPreset> &p_preset, const String &p_path) { List<String> args; + if (p_preset->get("codesign/entitlements") != "") { /* this should point to our entitlements.plist file that sandboxes our application, I don't know if this should also be placed in our app bundle */ args.push_back("-entitlements"); @@ -229,14 +242,25 @@ Error EditorExportPlatformOSX::_code_sign(const Ref<EditorExportPreset> &p_prese args.push_back(p_preset->get("codesign/identity")); args.push_back("-v"); /* provide some more feedback */ args.push_back(p_path); - Error err = OS::get_singleton()->execute("/usr/bin/codesign", args, true); - ERR_FAIL_COND_V(err, err); + + String str; + Error err = OS::get_singleton()->execute("codesign", args, true, NULL, &str, NULL, true); + ERR_FAIL_COND_V(err != OK, err); + + print_line("codesign: " + str); + if (str.find("no identity found") != -1) { + EditorNode::add_io_error("codesign: no identity found"); + return FAILED; + } return OK; } Error EditorExportPlatformOSX::_create_dmg(const String &p_dmg_path, const String &p_pkg_name, const String &p_app_path_name) { List<String> args; + + OS::get_singleton()->move_to_trash(p_dmg_path); + args.push_back("create"); args.push_back(p_dmg_path); args.push_back("-volname"); @@ -245,8 +269,20 @@ Error EditorExportPlatformOSX::_create_dmg(const String &p_dmg_path, const Strin args.push_back("HFS+"); args.push_back("-srcfolder"); args.push_back(p_app_path_name); - Error err = OS::get_singleton()->execute("/usr/bin/hdiutil", args, true); - ERR_FAIL_COND_V(err, err); + + String str; + Error err = OS::get_singleton()->execute("hdiutil", args, true, NULL, &str, NULL, true); + ERR_FAIL_COND_V(err != OK, err); + + print_line("hdiutil returned: " + str); + if (str.find("create failed") != -1) { + if (str.find("File exists") != -1) { + EditorNode::add_io_error("hdiutil: create failed - file exists"); + } else { + EditorNode::add_io_error("hdiutil: create failed"); + } + return FAILED; + } return OK; } @@ -299,28 +335,45 @@ Error EditorExportPlatformOSX::export_project(const Ref<EditorExportPreset> &p_p else pkg_name = "Unnamed"; - // We're on OSX so we can export to DMG, but first we create our application bundle - String tmp_app_path_name = p_path.get_base_dir() + "/" + pkg_name + ".app"; - print_line("Exporting to " + tmp_app_path_name); - DirAccess *tmp_app_path = DirAccess::create_for_path(tmp_app_path_name); - ERR_FAIL_COND_V(!tmp_app_path, ERR_CANT_CREATE) + Error err = OK; + String tmp_app_path_name = ""; + zlib_filefunc_def io2 = io; + FileAccess *dst_f = NULL; + io2.opaque = &dst_f; + zipFile dst_pkg_zip = NULL; + + if (use_dmg()) { + // We're on OSX so we can export to DMG, but first we create our application bundle + tmp_app_path_name = EditorSettings::get_singleton()->get_settings_path() + "/tmp/" + pkg_name + ".app"; + print_line("Exporting to " + tmp_app_path_name); + DirAccess *tmp_app_path = DirAccess::create_for_path(tmp_app_path_name); + if (!tmp_app_path) { + err = ERR_CANT_CREATE; + } - ///@TODO We should delete the existing application bundle especially if we attempt to code sign it, but what is a safe way to do this? Maybe call system function so it moves to trash? - // tmp_app_path->erase_contents_recursive(); + // Create our folder structure or rely on unzip? + if (err == OK) { + print_line("Creating " + tmp_app_path_name + "/Contents/MacOS"); + err = tmp_app_path->make_dir_recursive(tmp_app_path_name + "/Contents/MacOS"); + } - // Create our folder structure or rely on unzip? - print_line("Creating " + tmp_app_path_name + "/Contents/MacOS"); - Error dir_err = tmp_app_path->make_dir_recursive(tmp_app_path_name + "/Contents/MacOS"); - ERR_FAIL_COND_V(dir_err, ERR_CANT_CREATE) - print_line("Creating " + tmp_app_path_name + "/Contents/Resources"); - dir_err = tmp_app_path->make_dir_recursive(tmp_app_path_name + "/Contents/Resources"); - ERR_FAIL_COND_V(dir_err, ERR_CANT_CREATE) + if (err == OK) { + print_line("Creating " + tmp_app_path_name + "/Contents/Resources"); + err = tmp_app_path->make_dir_recursive(tmp_app_path_name + "/Contents/Resources"); + } + } else { + // Open our destination zip file + dst_pkg_zip = zipOpen2(p_path.utf8().get_data(), APPEND_STATUS_CREATE, NULL, &io2); + if (!dst_pkg_zip) { + err = ERR_CANT_CREATE; + } + } - /* Now process our template */ + // Now process our template bool found_binary = false; int total_size = 0; - while (ret == UNZ_OK) { + while (ret == UNZ_OK && err == OK) { bool is_execute = false; //get filename @@ -382,287 +435,152 @@ Error EditorExportPlatformOSX::export_project(const Ref<EditorExportPreset> &p_p print_line("ADDING: " + file + " size: " + itos(data.size())); total_size += data.size(); - /* write it into our application bundle */ - file = tmp_app_path_name + "/" + file; - - /* write the file, need to add chmod */ - FileAccess *f = FileAccess::open(file, FileAccess::WRITE); - ERR_FAIL_COND_V(!f, ERR_CANT_CREATE) - f->store_buffer(data.ptr(), data.size()); - f->close(); - memdelete(f); - - if (is_execute) { - // we need execute rights on this file - chmod(file.utf8().get_data(), 0755); + if (use_dmg()) { + // write it into our application bundle + file = tmp_app_path_name + "/" + file; + + // write the file, need to add chmod + FileAccess *f = FileAccess::open(file, FileAccess::WRITE); + if (f) { + f->store_buffer(data.ptr(), data.size()); + f->close(); + if (is_execute) { + // Chmod with 0755 if the file is executable + f->_chmod(file, 0755); + } + memdelete(f); + } else { + err = ERR_CANT_CREATE; + } } else { - // seems to already be set correctly - // chmod(file.utf8().get_data(), 0644); + // add it to our zip file + file = pkg_name + ".app/" + file; + + zip_fileinfo fi; + fi.tmz_date.tm_hour = info.tmu_date.tm_hour; + fi.tmz_date.tm_min = info.tmu_date.tm_min; + fi.tmz_date.tm_sec = info.tmu_date.tm_sec; + fi.tmz_date.tm_mon = info.tmu_date.tm_mon; + fi.tmz_date.tm_mday = info.tmu_date.tm_mday; + fi.tmz_date.tm_year = info.tmu_date.tm_year; + fi.dosDate = info.dosDate; + fi.internal_fa = info.internal_fa; + fi.external_fa = info.external_fa; + + int zerr = zipOpenNewFileInZip(dst_pkg_zip, + file.utf8().get_data(), + &fi, + NULL, + 0, + NULL, + 0, + NULL, + Z_DEFLATED, + Z_DEFAULT_COMPRESSION); + + print_line("OPEN ERR: " + itos(zerr)); + zerr = zipWriteInFileInZip(dst_pkg_zip, data.ptr(), data.size()); + print_line("WRITE ERR: " + itos(zerr)); + zipCloseFileInZip(dst_pkg_zip); } } ret = unzGoToNextFile(src_pkg_zip); } - /* we're done with our source zip */ + // we're done with our source zip unzClose(src_pkg_zip); if (!found_binary) { ERR_PRINTS("Requested template binary '" + binary_to_use + "' not found. It might be missing from your template archive."); - unzClose(src_pkg_zip); - return ERR_FILE_NOT_FOUND; - } - - ep.step("Making PKG", 1); - - String pack_path = tmp_app_path_name + "/Contents/Resources/" + pkg_name + ".pck"; - Error err = save_pack(p_preset, pack_path); - // chmod(pack_path.utf8().get_data(), 0644); - - if (err) { - return err; - } - - /* see if we can code sign our new package */ - if (p_preset->get("codesign/identity") != "") { - ep.step("Code signing bundle", 2); - - /* the order in which we code sign is important, this is a bit of a shame or we could do this in our loop that extracts the files from our ZIP */ - - // start with our application - err = _code_sign(p_preset, tmp_app_path_name + "/Contents/MacOS/" + pkg_name); - ERR_FAIL_COND_V(err, err); - - ///@TODO we should check the contents of /Contents/Frameworks for frameworks to sign - - // we should probably loop through all resources and sign them? - err = _code_sign(p_preset, tmp_app_path_name + "/Contents/Resources/icon.icns"); - ERR_FAIL_COND_V(err, err); - err = _code_sign(p_preset, pack_path); - ERR_FAIL_COND_V(err, err); - err = _code_sign(p_preset, tmp_app_path_name + "/Contents/Info.plist"); - ERR_FAIL_COND_V(err, err); - } - - /* and finally create a DMG */ - ep.step("Making DMG", 3); - err = _create_dmg(p_path, pkg_name, tmp_app_path_name); - ERR_FAIL_COND_V(err, err); - - return OK; -} - -#else - -/** - When exporting for OSX from any other platform we don't have access to code signing or creating DMGs so we'll wrap the bundle into a zip file. - - Should probably find a nicer way to have just one export method instead of duplicating the method like this but I would the code got very - messy with switches inside of it. -**/ -Error EditorExportPlatformOSX::export_project(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path, int p_flags) { - - String src_pkg_name; - - EditorProgress ep("export", "Exporting for OSX", 104); - - if (p_debug) - src_pkg_name = p_preset->get("custom_package/debug"); - else - src_pkg_name = p_preset->get("custom_package/release"); - - if (src_pkg_name == "") { - String err; - src_pkg_name = find_export_template("osx.zip", &err); - if (src_pkg_name == "") { - EditorNode::add_io_error(err); - return ERR_FILE_NOT_FOUND; - } - } - - FileAccess *src_f = NULL; - zlib_filefunc_def io = zipio_create_io_from_file(&src_f); - - ep.step("Creating app", 0); - - unzFile src_pkg_zip = unzOpen2(src_pkg_name.utf8().get_data(), &io); - if (!src_pkg_zip) { - - EditorNode::add_io_error("Could not find template app to export:\n" + src_pkg_name); - return ERR_FILE_NOT_FOUND; + err = ERR_FILE_NOT_FOUND; } - ERR_FAIL_COND_V(!src_pkg_zip, ERR_CANT_OPEN); - int ret = unzGoToFirstFile(src_pkg_zip); + if (err == OK) { + ep.step("Making PKG", 1); - String binary_to_use = "godot_osx_" + String(p_debug ? "debug" : "release") + "."; - int bits_mode = p_preset->get("application/bits_mode"); - binary_to_use += String(bits_mode == 0 ? "fat" : bits_mode == 1 ? "64" : "32"); + if (use_dmg()) { + String pack_path = tmp_app_path_name + "/Contents/Resources/" + pkg_name + ".pck"; + err = save_pack(p_preset, pack_path); - print_line("binary: " + binary_to_use); - String pkg_name; - if (p_preset->get("application/name") != "") - pkg_name = p_preset->get("application/name"); // app_name - else if (String(ProjectSettings::get_singleton()->get("application/config/name")) != "") - pkg_name = String(ProjectSettings::get_singleton()->get("application/config/name")); - else - pkg_name = "Unnamed"; - - /* Open our destination zip file */ - zlib_filefunc_def io2 = io; - FileAccess *dst_f = NULL; - io2.opaque = &dst_f; - zipFile dst_pkg_zip = zipOpen2(p_path.utf8().get_data(), APPEND_STATUS_CREATE, NULL, &io2); + // see if we can code sign our new package + String identity = p_preset->get("codesign/identity"); + if (err == OK && identity != "") { + ep.step("Code signing bundle", 2); - bool found_binary = false; + // the order in which we code sign is important, this is a bit of a shame or we could do this in our loop that extracts the files from our ZIP - while (ret == UNZ_OK) { - - //get filename - unz_file_info info; - char fname[16384]; - ret = unzGetCurrentFileInfo(src_pkg_zip, &info, fname, 16384, NULL, 0, NULL, 0); + // start with our application + err = _code_sign(p_preset, tmp_app_path_name + "/Contents/MacOS/" + pkg_name); - String file = fname; - - print_line("READ: " + file); - Vector<uint8_t> data; - data.resize(info.uncompressed_size); - - //read - unzOpenCurrentFile(src_pkg_zip); - unzReadCurrentFile(src_pkg_zip, data.ptr(), data.size()); - unzCloseCurrentFile(src_pkg_zip); - - //write + ///@TODO we should check the contents of /Contents/Frameworks for frameworks to sign + } - file = file.replace_first("osx_template.app/", ""); + if (err == OK && identity != "") { + // we should probably loop through all resources and sign them? + err = _code_sign(p_preset, tmp_app_path_name + "/Contents/Resources/icon.icns"); + } - if (file == "Contents/Info.plist") { - print_line("parse plist"); - _fix_plist(p_preset, data, pkg_name); - } + if (err == OK && identity != "") { + err = _code_sign(p_preset, pack_path); + } - if (file.begins_with("Contents/MacOS/godot_")) { - if (file != "Contents/MacOS/" + binary_to_use) { - ret = unzGoToNextFile(src_pkg_zip); - continue; //ignore! + if (err == OK && identity != "") { + err = _code_sign(p_preset, tmp_app_path_name + "/Contents/Info.plist"); } - found_binary = true; - file = "Contents/MacOS/" + pkg_name; - } - if (file == "Contents/Resources/icon.icns") { - //see if there is an icon - String iconpath; - if (p_preset->get("application/icon") != "") - iconpath = p_preset->get("application/icon"); - else - iconpath = ProjectSettings::get_singleton()->get("application/config/icon"); - print_line("icon? " + iconpath); - if (iconpath != "") { - Ref<Image> icon; - icon.instance(); - icon->load(iconpath); - if (!icon->empty()) { - print_line("loaded?"); - _make_icon(icon, data); - } + // and finally create a DMG + if (err == OK) { + ep.step("Making DMG", 3); + err = _create_dmg(p_path, pkg_name, tmp_app_path_name); } - //bleh? - } - if (data.size() > 0) { - print_line("ADDING: " + file + " size: " + itos(data.size())); + // Clean up temporary .app dir + OS::get_singleton()->move_to_trash(tmp_app_path_name); + } else { - /* add it to our zip file */ - file = pkg_name + ".app/" + file; - - zip_fileinfo fi; - fi.tmz_date.tm_hour = info.tmu_date.tm_hour; - fi.tmz_date.tm_min = info.tmu_date.tm_min; - fi.tmz_date.tm_sec = info.tmu_date.tm_sec; - fi.tmz_date.tm_mon = info.tmu_date.tm_mon; - fi.tmz_date.tm_mday = info.tmu_date.tm_mday; - fi.tmz_date.tm_year = info.tmu_date.tm_year; - fi.dosDate = info.dosDate; - fi.internal_fa = info.internal_fa; - fi.external_fa = info.external_fa; - - int err = zipOpenNewFileInZip(dst_pkg_zip, - file.utf8().get_data(), - &fi, - NULL, - 0, - NULL, - 0, - NULL, - Z_DEFLATED, - Z_DEFAULT_COMPRESSION); - - print_line("OPEN ERR: " + itos(err)); - err = zipWriteInFileInZip(dst_pkg_zip, data.ptr(), data.size()); - print_line("WRITE ERR: " + itos(err)); - zipCloseFileInZip(dst_pkg_zip); + String pack_path = EditorSettings::get_singleton()->get_settings_path() + "/tmp/" + pkg_name + ".pck"; + Error err = save_pack(p_preset, pack_path); + + if (err == OK) { + zipOpenNewFileInZip(dst_pkg_zip, + (pkg_name + ".app/Contents/Resources/" + pkg_name + ".pck").utf8().get_data(), + NULL, + NULL, + 0, + NULL, + 0, + NULL, + Z_DEFLATED, + Z_DEFAULT_COMPRESSION); + + FileAccess *pf = FileAccess::open(pack_path, FileAccess::READ); + if (pf) { + const int BSIZE = 16384; + uint8_t buf[BSIZE]; + + while (true) { + + int r = pf->get_buffer(buf, BSIZE); + if (r <= 0) + break; + zipWriteInFileInZip(dst_pkg_zip, buf, r); + } + zipCloseFileInZip(dst_pkg_zip); + memdelete(pf); + } else { + err = ERR_CANT_OPEN; + } + } } - - ret = unzGoToNextFile(src_pkg_zip); - } - - if (!found_binary) { - ERR_PRINTS("Requested template binary '" + binary_to_use + "' not found. It might be missing from your template archive."); - zipClose(dst_pkg_zip, NULL); - unzClose(src_pkg_zip); - return ERR_FILE_NOT_FOUND; } - ep.step("Making PKG", 1); - - String pack_path = EditorSettings::get_singleton()->get_settings_path() + "/tmp/" + pkg_name + ".pck"; - Error err = save_pack(p_preset, pack_path); - - if (err) { + if (dst_pkg_zip) { zipClose(dst_pkg_zip, NULL); - unzClose(src_pkg_zip); - return err; } - { - //write datapack - - zipOpenNewFileInZip(dst_pkg_zip, - (pkg_name + ".app/Contents/Resources/" + pkg_name + ".pck").utf8().get_data(), - NULL, - NULL, - 0, - NULL, - 0, - NULL, - Z_DEFLATED, - Z_DEFAULT_COMPRESSION); - - FileAccess *pf = FileAccess::open(pack_path, FileAccess::READ); - ERR_FAIL_COND_V(!pf, ERR_CANT_OPEN); - const int BSIZE = 16384; - uint8_t buf[BSIZE]; - - while (true) { - - int r = pf->get_buffer(buf, BSIZE); - if (r <= 0) - break; - zipWriteInFileInZip(dst_pkg_zip, buf, r); - } - zipCloseFileInZip(dst_pkg_zip); - memdelete(pf); - } - - zipClose(dst_pkg_zip, NULL); - unzClose(src_pkg_zip); - return OK; } -#endif bool EditorExportPlatformOSX::can_export(const Ref<EditorExportPreset> &p_preset, String &r_error, bool &r_missing_templates) const { diff --git a/platform/osx/os_osx.h b/platform/osx/os_osx.h index 059dd5afd0..05adfeb0f5 100644 --- a/platform/osx/os_osx.h +++ b/platform/osx/os_osx.h @@ -31,13 +31,11 @@ #define OS_OSX_H #include "crash_handler_osx.h" -#include "drivers/alsa/audio_driver_alsa.h" -#include "drivers/rtaudio/audio_driver_rtaudio.h" +#include "drivers/coreaudio/audio_driver_coreaudio.h" #include "drivers/unix/os_unix.h" #include "joypad_osx.h" #include "main/input_default.h" #include "os/input.h" -#include "platform/osx/audio_driver_osx.h" #include "power_osx.h" #include "servers/audio_server.h" #include "servers/physics_2d/physics_2d_server_sw.h" @@ -69,7 +67,7 @@ public: IP_Unix *ip_unix; - AudioDriverOSX audio_driver_osx; + AudioDriverCoreAudio audio_driver; InputDefault *input; JoypadOSX *joypad_osx; @@ -114,21 +112,23 @@ public: CrashHandler crash_handler; float _mouse_scale(float p_scale) { - if (display_scale > 1.0) + if (_display_scale() > 1.0) return p_scale; else return 1.0; } - void _update_window(); + float _display_scale() const; + float _display_scale(id screen) const; - float display_scale; + void _update_window(); protected: virtual int get_video_driver_count() const; virtual const char *get_video_driver_name(int p_driver) const; virtual VideoMode get_default_video_mode() const; + virtual void initialize_logger(); virtual void initialize_core(); virtual void initialize(const VideoMode &p_desired, int p_video_driver, int p_audio_driver); virtual void finalize(); @@ -143,8 +143,6 @@ public: virtual String get_name(); - virtual 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 = ERR_ERROR); - virtual void alert(const String &p_alert, const String &p_title = "ALERT!"); virtual void set_cursor_shape(CursorShape p_shape); @@ -152,7 +150,7 @@ public: virtual void set_mouse_show(bool p_show); virtual void set_mouse_grab(bool p_grab); virtual bool is_mouse_grab_enabled() const; - virtual void warp_mouse_pos(const Point2 &p_to); + virtual void warp_mouse_position(const Point2 &p_to); virtual Point2 get_mouse_position() const; virtual int get_mouse_button_state() const; virtual void set_window_title(const String &p_title); @@ -184,7 +182,6 @@ public: virtual void get_fullscreen_mode_list(List<VideoMode> *p_list, int p_screen = 0) const; virtual String get_executable_path() const; - virtual String get_resource_dir() const; virtual LatinKeyboardVariant get_latin_keyboard_variant() const; @@ -230,6 +227,8 @@ public: void disable_crash_handler(); bool is_disable_crash_handler() const; + virtual Error move_to_trash(const String &p_path); + OS_OSX(); }; diff --git a/platform/osx/os_osx.mm b/platform/osx/os_osx.mm index 111cdb0cf1..2c81a02014 100644 --- a/platform/osx/os_osx.mm +++ b/platform/osx/os_osx.mm @@ -180,13 +180,13 @@ static bool mouse_down_control = false; if (newBackingScaleFactor != oldBackingScaleFactor) { //Set new display scale and window size - OS_OSX::singleton->display_scale = newBackingScaleFactor; + float newDisplayScale = OS_OSX::singleton->is_hidpi_allowed() ? newBackingScaleFactor : 1.0; const NSRect contentRect = [OS_OSX::singleton->window_view frame]; const NSRect fbRect = contentRect; //convertRectToBacking(contentRect); - OS_OSX::singleton->window_size.width = fbRect.size.width * OS_OSX::singleton->display_scale; - OS_OSX::singleton->window_size.height = fbRect.size.height * OS_OSX::singleton->display_scale; + OS_OSX::singleton->window_size.width = fbRect.size.width * newDisplayScale; + OS_OSX::singleton->window_size.height = fbRect.size.height * newDisplayScale; //Update context if (OS_OSX::singleton->main_loop) { @@ -206,8 +206,9 @@ static bool mouse_down_control = false; const NSRect contentRect = [OS_OSX::singleton->window_view frame]; const NSRect fbRect = contentRect; //convertRectToBacking(contentRect); - OS_OSX::singleton->window_size.width = fbRect.size.width * OS_OSX::singleton->display_scale; - OS_OSX::singleton->window_size.height = fbRect.size.height * OS_OSX::singleton->display_scale; + float displayScale = OS_OSX::singleton->_display_scale(); + OS_OSX::singleton->window_size.width = fbRect.size.width * displayScale; + OS_OSX::singleton->window_size.height = fbRect.size.height * displayScale; if (OS_OSX::singleton->main_loop) { Main::force_redraw(); @@ -352,7 +353,8 @@ static const NSRange kEmptyRange = { NSNotFound, 0 }; - (NSRect)firstRectForCharacterRange:(NSRange)aRange actualRange:(NSRangePointer)actualRange { const NSRect contentRect = [OS_OSX::singleton->window_view frame]; - NSRect pointInWindowRect = NSMakeRect(OS_OSX::singleton->im_position.x / OS_OSX::singleton->display_scale, contentRect.size.height - (OS_OSX::singleton->im_position.y / OS_OSX::singleton->display_scale) - 1, 0, 0); + float displayScale = OS_OSX::singleton->_display_scale(); + NSRect pointInWindowRect = NSMakeRect(OS_OSX::singleton->im_position.x / displayScale, contentRect.size.height - (OS_OSX::singleton->im_position.y / displayScale) - 1, 0, 0); NSPoint pointOnScreen = [[OS_OSX::singleton->window_view window] convertRectToScreen:pointInWindowRect].origin; return NSMakeRect(pointOnScreen.x, pointOnScreen.y, 0, 0); @@ -940,15 +942,6 @@ void OS_OSX::initialize(const VideoMode &p_desired, int p_video_driver, int p_au kTISNotifySelectedKeyboardInputSourceChanged, NULL, CFNotificationSuspensionBehaviorDeliverImmediately); - if (is_hidpi_allowed() && [[NSScreen mainScreen] respondsToSelector:@selector(backingScaleFactor)]) { - for (NSScreen *screen in [NSScreen screens]) { - float s = [screen backingScaleFactor]; - if (s > display_scale) { - display_scale = s; - } - } - } - window_delegate = [[GodotWindowDelegate alloc] init]; // Don't use accumulation buffer support; it's not accelerated @@ -972,10 +965,19 @@ void OS_OSX::initialize(const VideoMode &p_desired, int p_video_driver, int p_au window_view = [[GodotContentView alloc] init]; - window_size.width = p_desired.width * display_scale; - window_size.height = p_desired.height * display_scale; + float displayScale = 1.0; + if (is_hidpi_allowed()) { + // note that mainScreen is not screen #0 but the one with the keyboard focus. + NSScreen *screen = [NSScreen mainScreen]; + if ([screen respondsToSelector:@selector(backingScaleFactor)]) { + displayScale = fmax(displayScale, [screen backingScaleFactor]); + } + } + + window_size.width = p_desired.width * displayScale; + window_size.height = p_desired.height * displayScale; - if (floor(NSAppKitVersionNumber) > NSAppKitVersionNumber10_6 && display_scale > 1) { + if (floor(NSAppKitVersionNumber) > NSAppKitVersionNumber10_6 && displayScale > 1.0) { [window_view setWantsBestResolutionOpenGLSurface:YES]; //if (current_videomode.resizable) [window_object setCollectionBehavior:NSWindowCollectionBehaviorFullScreenPrimary]; @@ -1071,7 +1073,7 @@ void OS_OSX::initialize(const VideoMode &p_desired, int p_video_driver, int p_au bool use_gl2 = p_video_driver != 1; - AudioDriverManager::add_driver(&audio_driver_osx); + AudioDriverManager::add_driver(&audio_driver); // only opengl support here... RasterizerGLES3::register_config(); @@ -1145,43 +1147,67 @@ String OS_OSX::get_name() { return "OSX"; } -void OS_OSX::print_error(const char *p_function, const char *p_file, int p_line, const char *p_code, const char *p_rationale, ErrorType p_type) { - #if MAC_OS_X_VERSION_MAX_ALLOWED >= 101200 - if (!_print_error_enabled) - return; - - const char *err_details; - if (p_rationale && p_rationale[0]) - err_details = p_rationale; - else - err_details = p_code; +class OSXTerminalLogger : public StdLogger { +public: + virtual void log_error(const char *p_function, const char *p_file, int p_line, const char *p_code, const char *p_rationale, ErrorType p_type = ERR_ERROR) { + if (!should_log(true)) { + return; + } - switch (p_type) { - case ERR_ERROR: - os_log_error(OS_LOG_DEFAULT, "ERROR: %{public}s: %{public}s\nAt: %{public}s:%i.", p_function, err_details, p_file, p_line); - print("\E[1;31mERROR: %s: \E[0m\E[1m%s\n", p_function, err_details); - print("\E[0;31m At: %s:%i.\E[0m\n", p_file, p_line); - break; - case ERR_WARNING: - os_log_info(OS_LOG_DEFAULT, "WARNING: %{public}s: %{public}s\nAt: %{public}s:%i.", p_function, err_details, p_file, p_line); - print("\E[1;33mWARNING: %s: \E[0m\E[1m%s\n", p_function, err_details); - print("\E[0;33m At: %s:%i.\E[0m\n", p_file, p_line); - break; - case ERR_SCRIPT: - os_log_error(OS_LOG_DEFAULT, "SCRIPT ERROR: %{public}s: %{public}s\nAt: %{public}s:%i.", p_function, err_details, p_file, p_line); - print("\E[1;35mSCRIPT ERROR: %s: \E[0m\E[1m%s\n", p_function, err_details); - print("\E[0;35m At: %s:%i.\E[0m\n", p_file, p_line); - break; - case ERR_SHADER: - os_log_error(OS_LOG_DEFAULT, "SHADER ERROR: %{public}s: %{public}s\nAt: %{public}s:%i.", p_function, err_details, p_file, p_line); - print("\E[1;36mSHADER ERROR: %s: \E[0m\E[1m%s\n", p_function, err_details); - print("\E[0;36m At: %s:%i.\E[0m\n", p_file, p_line); - break; + const char *err_details; + if (p_rationale && p_rationale[0]) + err_details = p_rationale; + else + err_details = p_code; + + switch (p_type) { + case ERR_WARNING: + os_log_info(OS_LOG_DEFAULT, + "WARNING: %{public}s: %{public}s\nAt: %{public}s:%i.", + p_function, err_details, p_file, p_line); + logf_error("\E[1;33mWARNING: %s: \E[0m\E[1m%s\n", p_function, + err_details); + logf_error("\E[0;33m At: %s:%i.\E[0m\n", p_file, p_line); + break; + case ERR_SCRIPT: + os_log_error(OS_LOG_DEFAULT, + "SCRIPT ERROR: %{public}s: %{public}s\nAt: %{public}s:%i.", + p_function, err_details, p_file, p_line); + logf_error("\E[1;35mSCRIPT ERROR: %s: \E[0m\E[1m%s\n", p_function, + err_details); + logf_error("\E[0;35m At: %s:%i.\E[0m\n", p_file, p_line); + break; + case ERR_SHADER: + os_log_error(OS_LOG_DEFAULT, + "SHADER ERROR: %{public}s: %{public}s\nAt: %{public}s:%i.", + p_function, err_details, p_file, p_line); + logf_error("\E[1;36mSHADER ERROR: %s: \E[0m\E[1m%s\n", p_function, + err_details); + logf_error("\E[0;36m At: %s:%i.\E[0m\n", p_file, p_line); + break; + case ERR_ERROR: + default: + os_log_error(OS_LOG_DEFAULT, + "ERROR: %{public}s: %{public}s\nAt: %{public}s:%i.", + p_function, err_details, p_file, p_line); + logf_error("\E[1;31mERROR: %s: \E[0m\E[1m%s\n", p_function, err_details); + logf_error("\E[0;31m At: %s:%i.\E[0m\n", p_file, p_line); + break; + } } +}; + #else - OS_Unix::print_error(p_function, p_file, p_line, p_code, p_rationale, p_type); + +typedef UnixTerminalLogger OSXTerminalLogger; #endif + +void OS_OSX::initialize_logger() { + Vector<Logger *> loggers; + loggers.push_back(memnew(OSXTerminalLogger)); + loggers.push_back(memnew(RotatedFileLogger("user://logs/log.txt"))); + _set_logger(memnew(CompositeLogger(loggers))); } void OS_OSX::alert(const String &p_alert, const String &p_title) { @@ -1240,7 +1266,7 @@ bool OS_OSX::is_mouse_grab_enabled() const { return mouse_grab; } -void OS_OSX::warp_mouse_pos(const Point2 &p_to) { +void OS_OSX::warp_mouse_position(const Point2 &p_to) { //copied from windows impl with osx native calls if (mouse_mode == MOUSE_MODE_CAPTURED) { @@ -1250,7 +1276,8 @@ void OS_OSX::warp_mouse_pos(const Point2 &p_to) { //local point in window coords const NSRect contentRect = [window_view frame]; - NSRect pointInWindowRect = NSMakeRect(p_to.x / display_scale, contentRect.size.height - (p_to.y / display_scale) - 1, 0, 0); + float displayScale = _display_scale(); + NSRect pointInWindowRect = NSMakeRect(p_to.x / displayScale, contentRect.size.height - (p_to.y / displayScale) - 1, 0, 0); NSPoint pointOnScreen = [[window_view window] convertRectToScreen:pointInWindowRect].origin; //point in scren coords @@ -1451,17 +1478,17 @@ int OS_OSX::get_screen_count() const { return [screenArray count]; }; +static int get_screen_index(NSScreen *screen) { + const NSUInteger index = [[NSScreen screens] indexOfObject:screen]; + return index == NSNotFound ? 0 : index; +} + int OS_OSX::get_current_screen() const { - Vector2 wpos = get_window_position(); - - int count = get_screen_count(); - for (int i = 0; i < count; i++) { - Point2 pos = get_screen_position(i); - Size2 size = get_screen_size(i); - if ((wpos.x >= pos.x && wpos.x < pos.x + size.width) && (wpos.y >= pos.y && wpos.y < pos.y + size.height)) - return i; + if (window_object) { + return get_screen_index([window_object screen]); + } else { + return get_screen_index([NSScreen mainScreen]); } - return 0; }; void OS_OSX::set_current_screen(int p_screen) { @@ -1476,12 +1503,7 @@ Point2 OS_OSX::get_screen_position(int p_screen) const { NSArray *screenArray = [NSScreen screens]; if (p_screen < [screenArray count]) { - float displayScale = 1.0; - - if (display_scale > 1.0 && [[screenArray objectAtIndex:p_screen] respondsToSelector:@selector(backingScaleFactor)]) { - displayScale = [[screenArray objectAtIndex:p_screen] backingScaleFactor]; - } - + float displayScale = _display_scale([screenArray objectAtIndex:p_screen]); NSRect nsrect = [[screenArray objectAtIndex:p_screen] frame]; return Point2(nsrect.origin.x, nsrect.origin.y) * displayScale; } @@ -1496,12 +1518,7 @@ int OS_OSX::get_screen_dpi(int p_screen) const { NSArray *screenArray = [NSScreen screens]; if (p_screen < [screenArray count]) { - float displayScale = 1.0; - - if (display_scale > 1.0 && [[screenArray objectAtIndex:p_screen] respondsToSelector:@selector(backingScaleFactor)]) { - displayScale = [[screenArray objectAtIndex:p_screen] backingScaleFactor]; - } - + float displayScale = _display_scale([screenArray objectAtIndex:p_screen]); NSDictionary *description = [[screenArray objectAtIndex:p_screen] deviceDescription]; NSSize displayPixelSize = [[description objectForKey:NSDeviceSize] sizeValue]; CGSize displayPhysicalSize = CGDisplayScreenSize( @@ -1520,12 +1537,7 @@ Size2 OS_OSX::get_screen_size(int p_screen) const { NSArray *screenArray = [NSScreen screens]; if (p_screen < [screenArray count]) { - float displayScale = 1.0; - - if (display_scale > 1.0 && [[screenArray objectAtIndex:p_screen] respondsToSelector:@selector(backingScaleFactor)]) { - displayScale = [[screenArray objectAtIndex:p_screen] backingScaleFactor]; - } - + float displayScale = _display_scale([screenArray objectAtIndex:p_screen]); // Note: Use frame to get the whole screen size NSRect nsrect = [[screenArray objectAtIndex:p_screen] frame]; return Size2(nsrect.size.width, nsrect.size.height) * displayScale; @@ -1559,10 +1571,28 @@ void OS_OSX::_update_window() { } } +float OS_OSX::_display_scale() const { + if (window_object) { + return _display_scale([window_object screen]); + } else { + return _display_scale([NSScreen mainScreen]); + } +} + +float OS_OSX::_display_scale(id screen) const { + if (is_hidpi_allowed()) { + if ([screen respondsToSelector:@selector(backingScaleFactor)]) { + return fmax(1.0, [screen backingScaleFactor]); + } + } else { + return 1.0; + } +} + Point2 OS_OSX::get_window_position() const { Size2 wp([window_object frame].origin.x, [window_object frame].origin.y); - wp *= display_scale; + wp *= _display_scale(); return wp; }; @@ -1570,10 +1600,11 @@ void OS_OSX::set_window_position(const Point2 &p_position) { Size2 scr = get_screen_size(); NSPoint pos; + float displayScale = _display_scale(); - pos.x = p_position.x / display_scale; + pos.x = p_position.x / displayScale; // For OS X the y starts at the bottom - pos.y = (scr.height - p_position.y) / display_scale; + pos.y = (scr.height - p_position.y) / displayScale; [window_object setFrameTopLeftPoint:pos]; @@ -1733,17 +1764,6 @@ String OS_OSX::get_executable_path() const { } } -String OS_OSX::get_resource_dir() const { - // start with our executable path - String path = get_executable_path(); - - int pos = path.find_last("/Contents/MacOS/"); - if (pos < 0) - return OS::get_resource_dir(); - - return path.substr(0, pos) + "/Contents/Resources/"; -} - // Returns string representation of keys, if they are printable. // static NSString *createStringForKeys(const CGKeyCode *keyCode, int length) { @@ -1921,6 +1941,19 @@ int OS_OSX::get_power_percent_left() { return power_manager->get_power_percent_left(); } +Error OS_OSX::move_to_trash(const String &p_path) { + NSFileManager *fm = [NSFileManager defaultManager]; + NSURL *url = [NSURL fileURLWithPath:@(p_path.utf8().get_data())]; + NSError *err; + + if (![fm trashItemAtURL:url resultingItemURL:nil error:&err]) { + ERR_PRINTS("trashItemAtURL error: " + String(err.localizedDescription.UTF8String)); + return FAILED; + } + + return OK; +} + OS_OSX *OS_OSX::singleton = NULL; OS_OSX::OS_OSX() { @@ -2013,7 +2046,8 @@ OS_OSX::OS_OSX() { minimized = false; window_size = Vector2(1024, 600); zoomed = false; - display_scale = 1.0; + + _set_logger(memnew(OSXTerminalLogger)); } bool OS_OSX::_check_internal_feature_support(const String &p_feature) { diff --git a/platform/server/detect.py b/platform/server/detect.py index 2bb4b59e94..ffec2af933 100644 --- a/platform/server/detect.py +++ b/platform/server/detect.py @@ -12,6 +12,9 @@ def get_name(): def can_build(): + # Doesn't build against Godot 3.0 for now, disable to avoid confusing users + return False + if (os.name != "posix" or sys.platform == "darwin"): return False @@ -19,9 +22,9 @@ def can_build(): def get_opts(): - + from SCons.Variables import BoolVariable return [ - ('use_llvm', 'Use the LLVM compiler', 'no'), + BoolVariable('use_llvm', 'Use the LLVM compiler', False), ] @@ -52,7 +55,7 @@ def configure(env): ## Compiler configuration - if (env["use_llvm"] == "yes"): + if env['use_llvm']: if ('clang++' not in env['CXX']): env["CC"] = "clang" env["CXX"] = "clang++" @@ -64,66 +67,60 @@ def configure(env): # FIXME: Check for existence of the libs before parsing their flags with pkg-config - if (env['builtin_openssl'] == 'no'): - # Currently not compatible with OpenSSL 1.1.0+ - # https://github.com/godotengine/godot/issues/8624 - import subprocess - openssl_version = subprocess.check_output(['pkg-config', 'openssl', '--modversion']).strip('\n') - if (openssl_version >= "1.1.0"): - print("Error: Found system-installed OpenSSL %s, currently only supporting version 1.0.x." % openssl_version) - print("Aborting.. You can compile with 'builtin_openssl=yes' to use the bundled version.\n") - sys.exit(255) - + if not env['builtin_openssl']: env.ParseConfig('pkg-config openssl --cflags --libs') - if (env['builtin_libwebp'] == 'no'): + if not env['builtin_libwebp']: env.ParseConfig('pkg-config libwebp --cflags --libs') # freetype depends on libpng and zlib, so bundling one of them while keeping others # as shared libraries leads to weird issues - if (env['builtin_freetype'] == 'yes' or env['builtin_libpng'] == 'yes' or env['builtin_zlib'] == 'yes'): - env['builtin_freetype'] = 'yes' - env['builtin_libpng'] = 'yes' - env['builtin_zlib'] = 'yes' + if env['builtin_freetype'] or env['builtin_libpng'] or env['builtin_zlib']: + env['builtin_freetype'] = True + env['builtin_libpng'] = True + env['builtin_zlib'] = True - if (env['builtin_freetype'] == 'no'): + if not env['builtin_freetype']: env.ParseConfig('pkg-config freetype2 --cflags --libs') - if (env['builtin_libpng'] == 'no'): + if not env['builtin_libpng']: env.ParseConfig('pkg-config libpng --cflags --libs') - if (env['builtin_enet'] == 'no'): + if not env['builtin_enet']: env.ParseConfig('pkg-config libenet --cflags --libs') - if (env['builtin_squish'] == 'no' and env["tools"] == "yes"): + if not env['builtin_squish'] and env['tools']: env.ParseConfig('pkg-config libsquish --cflags --libs') + if not env['builtin_zstd']: + env.ParseConfig('pkg-config libzstd --cflags --libs') + # Sound and video libraries # Keep the order as it triggers chained dependencies (ogg needed by others, etc.) - if (env['builtin_libtheora'] == 'no'): - env['builtin_libogg'] = 'no' # Needed to link against system libtheora - env['builtin_libvorbis'] = 'no' # Needed to link against system libtheora + if not env['builtin_libtheora']: + env['builtin_libogg'] = False # Needed to link against system libtheora + env['builtin_libvorbis'] = False # Needed to link against system libtheora env.ParseConfig('pkg-config theora theoradec --cflags --libs') - if (env['builtin_libvpx'] == 'no'): + if not env['builtin_libvpx']: env.ParseConfig('pkg-config vpx --cflags --libs') - if (env['builtin_libvorbis'] == 'no'): - env['builtin_libogg'] = 'no' # Needed to link against system libvorbis + if not env['builtin_libvorbis']: + env['builtin_libogg'] = False # Needed to link against system libvorbis env.ParseConfig('pkg-config vorbis vorbisfile --cflags --libs') - if (env['builtin_opus'] == 'no'): - env['builtin_libogg'] = 'no' # Needed to link against system opus + if not env['builtin_opus']: + env['builtin_libogg'] = False # Needed to link against system opus env.ParseConfig('pkg-config opus opusfile --cflags --libs') - if (env['builtin_libogg'] == 'no'): + if not env['builtin_libogg']: env.ParseConfig('pkg-config ogg --cflags --libs') ## Flags # Linkflags below this line should typically stay the last ones - if (env['builtin_zlib'] == 'no'): + if not env['builtin_zlib']: env.ParseConfig('pkg-config zlib --cflags --libs') env.Append(CPPPATH=['#platform/server']) diff --git a/platform/uwp/detect.py b/platform/uwp/detect.py index 23929dd804..af53f97446 100644 --- a/platform/uwp/detect.py +++ b/platform/uwp/detect.py @@ -33,8 +33,8 @@ def get_opts(): def get_flags(): return [ - ('tools', 'no'), - ('xaudio2', 'yes'), + ('tools', False), + ('xaudio2', True), ] diff --git a/platform/uwp/export/export.cpp b/platform/uwp/export/export.cpp index 25d44c24b5..d66bcaa91c 100644 --- a/platform/uwp/export/export.cpp +++ b/platform/uwp/export/export.cpp @@ -471,7 +471,7 @@ void AppxPackager::add_file(String p_file_name, const uint8_t *p_buffer, size_t meta.uncompressed_size = p_len; meta.compressed_size = p_len; meta.compressed = p_compress; - meta.zip_offset = package->get_pos(); + meta.zip_offset = package->get_position(); Vector<uint8_t> file_buffer; @@ -619,11 +619,11 @@ void AppxPackager::finish() { // Write central directory EditorNode::progress_task_step("export", "Finishing package...", 6); - central_dir_offset = package->get_pos(); + central_dir_offset = package->get_position(); package->store_buffer(central_dir_data.ptr(), central_dir_data.size()); // End record - end_of_central_dir_offset = package->get_pos(); + end_of_central_dir_offset = package->get_position(); Vector<uint8_t> end_record = make_end_of_central_record(); package->store_buffer(end_record.ptr(), end_record.size()); diff --git a/platform/uwp/gl_context_egl.cpp b/platform/uwp/gl_context_egl.cpp index dd186c97d6..ed3db65cdf 100644 --- a/platform/uwp/gl_context_egl.cpp +++ b/platform/uwp/gl_context_egl.cpp @@ -31,7 +31,7 @@ #include "EGL/eglext.h" -using namespace Platform; +using Platform::Exception; void ContextEGL::release_current() { @@ -103,23 +103,23 @@ Error ContextEGL::initialize() { const EGLint displayAttributes[] = { - /*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, + /*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, }; PFNEGLGETPLATFORMDISPLAYEXTPROC eglGetPlatformDisplayEXT = reinterpret_cast<PFNEGLGETPLATFORMDISPLAYEXTPROC>(eglGetProcAddress("eglGetPlatformDisplayEXT")); diff --git a/platform/uwp/os_uwp.cpp b/platform/uwp/os_uwp.cpp index b909ccccd6..ff5a935229 100644 --- a/platform/uwp/os_uwp.cpp +++ b/platform/uwp/os_uwp.cpp @@ -40,6 +40,7 @@ #include "platform/windows/packet_peer_udp_winsock.h" #include "platform/windows/stream_peer_winsock.h" #include "platform/windows/tcp_server_winsock.h" +#include "platform/windows/windows_terminal_logger.h" #include "project_settings.h" #include "servers/audio_server.h" #include "servers/visual/visual_server_raster.h" @@ -182,6 +183,13 @@ void OSUWP::initialize_core() { cursor_shape = CURSOR_ARROW; } +void OSUWP::initialize_logger() { + Vector<Logger *> loggers; + loggers.push_back(memnew(WindowsTerminalLogger)); + loggers.push_back(memnew(RotatedFileLogger("user://logs/log.txt"))); + _set_logger(memnew(CompositeLogger(loggers))); +} + bool OSUWP::can_draw() const { return !minimized; @@ -371,32 +379,6 @@ void OSUWP::finalize() { void OSUWP::finalize_core() { } -void OSUWP::vprint(const char *p_format, va_list p_list, bool p_stderr) { - - char buf[16384 + 1]; - int len = vsnprintf(buf, 16384, p_format, p_list); - if (len <= 0) - return; - buf[len] = 0; - - int wlen = MultiByteToWideChar(CP_UTF8, 0, buf, len, NULL, 0); - if (wlen < 0) - return; - - wchar_t *wbuf = (wchar_t *)malloc((len + 1) * sizeof(wchar_t)); - MultiByteToWideChar(CP_UTF8, 0, buf, len, wbuf, wlen); - wbuf[wlen] = 0; - - if (p_stderr) - fwprintf(stderr, L"%s", wbuf); - else - wprintf(L"%s", wbuf); - - free(wbuf); - - fflush(stdout); -}; - void OSUWP::alert(const String &p_alert, const String &p_title) { Platform::String ^ alert = ref new Platform::String(p_alert.c_str()); @@ -520,30 +502,6 @@ OS::VideoMode OSUWP::get_video_mode(int p_screen) const { void OSUWP::get_fullscreen_mode_list(List<VideoMode> *p_list, int p_screen) const { } -void OSUWP::print_error(const char *p_function, const char *p_file, int p_line, const char *p_code, const char *p_rationale, ErrorType p_type) { - - const char *err_details; - if (p_rationale && p_rationale[0]) - err_details = p_rationale; - else - err_details = p_code; - - switch (p_type) { - case ERR_ERROR: - print("ERROR: %s: %s\n", p_function, err_details); - print(" At: %s:%i\n", p_file, p_line); - break; - case ERR_WARNING: - print("WARNING: %s: %s\n", p_function, err_details); - print(" At: %s:%i\n", p_file, p_line); - break; - case ERR_SCRIPT: - print("SCRIPT ERROR: %s: %s\n", p_function, err_details); - print(" At: %s:%i\n", p_file, p_line); - break; - } -} - String OSUWP::get_name() { return "UWP"; @@ -716,7 +674,7 @@ void OSUWP::set_cursor_shape(CursorShape p_shape) { cursor_shape = p_shape; } -Error OSUWP::execute(const String &p_path, const List<String> &p_arguments, bool p_blocking, ProcessID *r_child_id, String *r_pipe, int *r_exitcode) { +Error OSUWP::execute(const String &p_path, const List<String> &p_arguments, bool p_blocking, ProcessID *r_child_id, String *r_pipe, int *r_exitcode, bool read_stderr) { return FAILED; }; @@ -890,6 +848,8 @@ OSUWP::OSUWP() { mouse_mode_changed = CreateEvent(NULL, TRUE, FALSE, L"os_mouse_mode_changed"); AudioDriverManager::add_driver(&audio_driver); + + _set_logger(memnew(WindowsTerminalLogger)); } OSUWP::~OSUWP() { diff --git a/platform/uwp/os_uwp.h b/platform/uwp/os_uwp.h index a7a5d32cb9..22f8938049 100644 --- a/platform/uwp/os_uwp.h +++ b/platform/uwp/os_uwp.h @@ -163,6 +163,7 @@ protected: virtual int get_audio_driver_count() const; virtual const char *get_audio_driver_name(int p_driver) const; + virtual void initialize_logger(); virtual void initialize_core(); virtual void initialize(const VideoMode &p_desired, int p_video_driver, int p_audio_driver); @@ -180,9 +181,6 @@ 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); virtual void alert(const String &p_alert, const String &p_title = "ALERT!"); String get_stdin_string(bool p_block); @@ -217,7 +215,7 @@ public: virtual void delay_usec(uint32_t p_usec) const; virtual uint64_t get_ticks_usec() const; - virtual Error execute(const String &p_path, const List<String> &p_arguments, bool p_blocking, ProcessID *r_child_id = NULL, String *r_pipe = NULL, int *r_exitcode = NULL); + virtual Error execute(const String &p_path, const List<String> &p_arguments, bool p_blocking, ProcessID *r_child_id = NULL, String *r_pipe = NULL, int *r_exitcode = NULL, bool read_stderr = false); virtual Error kill(const ProcessID &p_pid); virtual bool has_environment(const String &p_var) const; diff --git a/platform/windows/SCsub b/platform/windows/SCsub index b56a5c6a80..aa9eb3e69b 100644 --- a/platform/windows/SCsub +++ b/platform/windows/SCsub @@ -1,7 +1,12 @@ #!/usr/bin/env python +import os Import('env') +def make_debug_mingw(target, source, env): + os.system('objcopy --only-keep-debug %s %s.debug' % (target[0], target[0])) + os.system('strip --strip-debug --strip-unneeded %s' % (target[0])) + os.system('objcopy --add-gnu-debuglink=%s.debug %s' % (target[0], target[0])) common_win = [ "context_gl_win.cpp", @@ -14,6 +19,7 @@ common_win = [ "stream_peer_winsock.cpp", "joypad.cpp", "power_windows.cpp", + "windows_terminal_logger.cpp" ] restarget = "godot_res" + env["OBJSUFFIX"] @@ -22,10 +28,14 @@ obj = env.RES(restarget, 'godot_res.rc') common_win.append(obj) -env.Program('#bin/godot', ['godot_win.cpp'] + common_win, PROGSUFFIX=env["PROGSUFFIX"]) +binary = env.Program('#bin/godot', ['godot_win.cpp'] + common_win, PROGSUFFIX=env["PROGSUFFIX"]) # Microsoft Visual Studio Project Generation -if (env['vsproj']) == "yes": +if env['vsproj']: env.vs_srcs = env.vs_srcs + ["platform/windows/godot_win.cpp"] for x in common_win: env.vs_srcs = env.vs_srcs + ["platform/windows/" + str(x)] + +if not os.getenv("VCINSTALLDIR"): + if env["debug_symbols"] == "full" or env["debug_symbols"] == "yes": + env.AddPostAction(binary, make_debug_mingw) diff --git a/platform/windows/context_gl_win.cpp b/platform/windows/context_gl_win.cpp index 8640f27699..64b6d202a1 100644 --- a/platform/windows/context_gl_win.cpp +++ b/platform/windows/context_gl_win.cpp @@ -27,7 +27,7 @@ /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ -#if defined(OPENGL_ENABLED) || defined(LEGACYGL_ENABLED) || defined(GLES2_ENABLED) +#if defined(OPENGL_ENABLED) || defined(GLES2_ENABLED) // // C++ Implementation: context_gl_x11 diff --git a/platform/windows/context_gl_win.h b/platform/windows/context_gl_win.h index 912d4d0133..0059cbc311 100644 --- a/platform/windows/context_gl_win.h +++ b/platform/windows/context_gl_win.h @@ -27,7 +27,7 @@ /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ -#if defined(OPENGL_ENABLED) || defined(LEGACYGL_ENABLED) || defined(GLES2_ENABLED) +#if defined(OPENGL_ENABLED) || defined(GLES2_ENABLED) // // C++ Interface: context_gl_x11 // diff --git a/platform/windows/detect.py b/platform/windows/detect.py index 5bd9a78f49..cd4230acd4 100644 --- a/platform/windows/detect.py +++ b/platform/windows/detect.py @@ -44,11 +44,11 @@ def can_build(): if (os.system(mingw64 + test) == 0 or os.system(mingw32 + test) == 0): return True - print("Could not detect MinGW. Ensure its binaries are in your PATH or that MINGW32_PREFIX or MINGW64_PREFIX are properly defined.") return False def get_opts(): + from SCons.Variables import BoolVariable, EnumVariable mingw32 = "" mingw64 = "" @@ -64,6 +64,8 @@ def get_opts(): return [ ('mingw_prefix_32', 'MinGW prefix (Win32)', mingw32), ('mingw_prefix_64', 'MinGW prefix (Win64)', mingw64), + BoolVariable('use_lto', 'Use link time optimization (when using MingW)', False), + EnumVariable('debug_symbols', 'Add debug symbols to release version', 'yes', ('yes', 'no', 'full')), ] @@ -213,11 +215,20 @@ def configure(env): env.Append(LINKFLAGS=['-Wl,--subsystem,windows']) + if (env["debug_symbols"] == "yes"): + env.Prepend(CCFLAGS=['-g1']) + if (env["debug_symbols"] == "full"): + env.Prepend(CCFLAGS=['-g2']) + elif (env["target"] == "release_debug"): env.Append(CCFLAGS=['-O2', '-DDEBUG_ENABLED']) + if (env["debug_symbols"] == "yes"): + env.Prepend(CCFLAGS=['-g1']) + if (env["debug_symbols"] == "full"): + env.Prepend(CCFLAGS=['-g2']) elif (env["target"] == "debug"): - env.Append(CCFLAGS=['-g', '-DDEBUG_ENABLED', '-DDEBUG_MEMORY_ENABLED']) + env.Append(CCFLAGS=['-g3', '-DDEBUG_ENABLED', '-DDEBUG_MEMORY_ENABLED']) ## Compiler configuration @@ -246,11 +257,18 @@ def configure(env): env["CC"] = mingw_prefix + "gcc" env['AS'] = mingw_prefix + "as" env['CXX'] = mingw_prefix + "g++" - env['AR'] = mingw_prefix + "ar" - env['RANLIB'] = mingw_prefix + "ranlib" + env['AR'] = mingw_prefix + "gcc-ar" + env['RANLIB'] = mingw_prefix + "gcc-ranlib" env['LD'] = mingw_prefix + "g++" env["x86_libtheora_opt_gcc"] = True + if env['use_lto']: + env.Append(CCFLAGS=['-flto']) + if not env['use_llvm'] and env.GetOption("num_jobs") > 1: + env.Append(LINKFLAGS=['-flto=' + str(env.GetOption("num_jobs"))]) + else: + env.Append(LINKFLAGS=['-flto']) + ## Compile flags env.Append(CCFLAGS=['-DWINDOWS_ENABLED', '-mwindows']) diff --git a/platform/windows/key_mapping_win.cpp b/platform/windows/key_mapping_win.cpp index 57f8e965de..76bb5d5723 100644 --- a/platform/windows/key_mapping_win.cpp +++ b/platform/windows/key_mapping_win.cpp @@ -50,7 +50,7 @@ static _WinTranslatePair _vk_to_keycode[] = { { KEY_CONTROL, VK_CONTROL }, //(0x11) - { KEY_MENU, VK_MENU }, //(0x12) + { KEY_ALT, VK_MENU }, //(0x12) { KEY_PAUSE, VK_PAUSE }, //(0x13) diff --git a/platform/windows/os_windows.cpp b/platform/windows/os_windows.cpp index 461caf479c..c27e7c0d2b 100644 --- a/platform/windows/os_windows.cpp +++ b/platform/windows/os_windows.cpp @@ -48,6 +48,7 @@ #include "servers/visual/visual_server_wrap_mt.h" #include "stream_peer_winsock.h" #include "tcp_server_winsock.h" +#include "windows_terminal_logger.h" #include <process.h> #include <regstr.h> @@ -205,6 +206,13 @@ void OS_Windows::initialize_core() { cursor_shape = CURSOR_ARROW; } +void OS_Windows::initialize_logger() { + Vector<Logger *> loggers; + loggers.push_back(memnew(WindowsTerminalLogger)); + loggers.push_back(memnew(RotatedFileLogger("user://logs/log.txt"))); + _set_logger(memnew(CompositeLogger(loggers))); +} + bool OS_Windows::can_draw() const { return !minimized; @@ -1231,38 +1239,6 @@ void OS_Windows::finalize_core() { StreamPeerWinsock::cleanup(); } -void OS_Windows::vprint(const char *p_format, va_list p_list, bool p_stderr) { - - const unsigned int BUFFER_SIZE = 16384; - char buf[BUFFER_SIZE + 1]; // +1 for the terminating character - int len = vsnprintf(buf, BUFFER_SIZE, p_format, p_list); - if (len <= 0) - return; - if (len >= BUFFER_SIZE) - len = BUFFER_SIZE; // Output is too big, will be truncated - buf[len] = 0; - - int wlen = MultiByteToWideChar(CP_UTF8, 0, buf, len, NULL, 0); - if (wlen < 0) - return; - - wchar_t *wbuf = (wchar_t *)malloc((len + 1) * sizeof(wchar_t)); - MultiByteToWideChar(CP_UTF8, 0, buf, len, wbuf, wlen); - wbuf[wlen] = 0; - - if (p_stderr) - fwprintf(stderr, L"%ls", wbuf); - else - wprintf(L"%ls", wbuf); - -#ifdef STDOUT_FILE -//vwfprintf(stdo,p_format,p_list); -#endif - free(wbuf); - - fflush(stdout); -}; - void OS_Windows::alert(const String &p_alert, const String &p_title) { if (!is_no_window_mode_enabled()) @@ -1304,7 +1280,7 @@ OS_Windows::MouseMode OS_Windows::get_mouse_mode() const { return mouse_mode; } -void OS_Windows::warp_mouse_pos(const Point2 &p_to) { +void OS_Windows::warp_mouse_position(const Point2 &p_to) { if (mouse_mode == MOUSE_MODE_CAPTURED) { @@ -1676,107 +1652,6 @@ void OS_Windows::request_attention() { FlashWindowEx(&info); } -void OS_Windows::print_error(const char *p_function, const char *p_file, int p_line, const char *p_code, const char *p_rationale, ErrorType p_type) { - - HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE); - if (!hCon || hCon == INVALID_HANDLE_VALUE) { - - const char *err_details; - if (p_rationale && p_rationale[0]) - err_details = p_rationale; - else - err_details = p_code; - - switch (p_type) { - case ERR_ERROR: - print("ERROR: %s: %s\n", p_function, err_details); - print(" At: %s:%i\n", p_file, p_line); - break; - case ERR_WARNING: - print("WARNING: %s: %s\n", p_function, err_details); - print(" At: %s:%i\n", p_file, p_line); - break; - case ERR_SCRIPT: - print("SCRIPT ERROR: %s: %s\n", p_function, err_details); - print(" At: %s:%i\n", p_file, p_line); - break; - case ERR_SHADER: - print("SHADER ERROR: %s: %s\n", p_function, err_details); - print(" At: %s:%i\n", p_file, p_line); - break; - } - - } else { - - CONSOLE_SCREEN_BUFFER_INFO sbi; //original - GetConsoleScreenBufferInfo(hCon, &sbi); - - WORD current_fg = sbi.wAttributes & (FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY); - WORD current_bg = sbi.wAttributes & (BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE | BACKGROUND_INTENSITY); - - uint32_t basecol = 0; - switch (p_type) { - case ERR_ERROR: basecol = FOREGROUND_RED; break; - case ERR_WARNING: basecol = FOREGROUND_RED | FOREGROUND_GREEN; break; - case ERR_SCRIPT: basecol = FOREGROUND_RED | FOREGROUND_BLUE; break; - case ERR_SHADER: basecol = FOREGROUND_GREEN | FOREGROUND_BLUE; break; - } - - basecol |= current_bg; - - if (p_rationale && p_rationale[0]) { - - SetConsoleTextAttribute(hCon, basecol | FOREGROUND_INTENSITY); - switch (p_type) { - case ERR_ERROR: print("ERROR: "); break; - case ERR_WARNING: print("WARNING: "); break; - case ERR_SCRIPT: print("SCRIPT ERROR: "); break; - case ERR_SHADER: print("SHADER ERROR: "); break; - } - - SetConsoleTextAttribute(hCon, current_fg | current_bg | FOREGROUND_INTENSITY); - print("%s\n", p_rationale); - - SetConsoleTextAttribute(hCon, basecol); - switch (p_type) { - case ERR_ERROR: print(" At: "); break; - case ERR_WARNING: print(" At: "); break; - case ERR_SCRIPT: print(" At: "); break; - case ERR_SHADER: print(" At: "); break; - } - - SetConsoleTextAttribute(hCon, current_fg | current_bg); - print("%s:%i\n", p_file, p_line); - - } else { - - SetConsoleTextAttribute(hCon, basecol | FOREGROUND_INTENSITY); - switch (p_type) { - case ERR_ERROR: print("ERROR: %s: ", p_function); break; - case ERR_WARNING: print("WARNING: %s: ", p_function); break; - case ERR_SCRIPT: print("SCRIPT ERROR: %s: ", p_function); break; - case ERR_SHADER: print("SCRIPT ERROR: %s: ", p_function); break; - } - - SetConsoleTextAttribute(hCon, current_fg | current_bg | FOREGROUND_INTENSITY); - print("%s\n", p_code); - - SetConsoleTextAttribute(hCon, basecol); - switch (p_type) { - case ERR_ERROR: print(" At: "); break; - case ERR_WARNING: print(" At: "); break; - case ERR_SCRIPT: print(" At: "); break; - case ERR_SHADER: print(" At: "); break; - } - - SetConsoleTextAttribute(hCon, current_fg | current_bg); - print("%s:%i\n", p_file, p_line); - } - - SetConsoleTextAttribute(hCon, sbi.wAttributes); - } -} - String OS_Windows::get_name() { return "Windows"; @@ -1937,7 +1812,7 @@ void OS_Windows::set_cursor_shape(CursorShape p_shape) { cursor_shape = p_shape; } -Error OS_Windows::execute(const String &p_path, const List<String> &p_arguments, bool p_blocking, ProcessID *r_child_id, String *r_pipe, int *r_exitcode) { +Error OS_Windows::execute(const String &p_path, const List<String> &p_arguments, bool p_blocking, ProcessID *r_child_id, String *r_pipe, int *r_exitcode, bool read_stderr) { if (p_blocking && r_pipe) { @@ -2373,6 +2248,33 @@ bool OS_Windows::is_disable_crash_handler() const { return crash_handler.is_disabled(); } +Error OS_Windows::move_to_trash(const String &p_path) { + SHFILEOPSTRUCTA sf; + TCHAR *from = new TCHAR[p_path.length() + 2]; + strcpy(from, p_path.utf8().get_data()); + from[p_path.length()] = 0; + from[p_path.length() + 1] = 0; + + sf.hwnd = hWnd; + sf.wFunc = FO_DELETE; + sf.pFrom = from; + sf.pTo = NULL; + sf.fFlags = FOF_ALLOWUNDO | FOF_NOCONFIRMATION; + sf.fAnyOperationsAborted = FALSE; + sf.hNameMappings = NULL; + sf.lpszProgressTitle = NULL; + + int ret = SHFileOperation(&sf); + delete[] from; + + if (ret) { + ERR_PRINTS("SHFileOperation error: " + itos(ret)); + return FAILED; + } + + return OK; +} + OS_Windows::OS_Windows(HINSTANCE _hInstance) { key_event_pos = 0; @@ -2402,6 +2304,8 @@ OS_Windows::OS_Windows(HINSTANCE _hInstance) { #ifdef XAUDIO2_ENABLED AudioDriverManager::add_driver(&driver_xaudio2); #endif + + _set_logger(memnew(WindowsTerminalLogger)); } OS_Windows::~OS_Windows() { diff --git a/platform/windows/os_windows.h b/platform/windows/os_windows.h index 1a01ac950d..c0b8dfc691 100644 --- a/platform/windows/os_windows.h +++ b/platform/windows/os_windows.h @@ -152,6 +152,7 @@ protected: virtual int get_audio_driver_count() const; virtual const char *get_audio_driver_name(int p_driver) const; + virtual void initialize_logger(); virtual void initialize_core(); virtual void initialize(const VideoMode &p_desired, int p_video_driver, int p_audio_driver); @@ -180,16 +181,13 @@ protected: public: LRESULT WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); - 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); virtual void alert(const String &p_alert, const String &p_title = "ALERT!"); String get_stdin_string(bool p_block); void set_mouse_mode(MouseMode p_mode); MouseMode get_mouse_mode() const; - virtual void warp_mouse_pos(const Point2 &p_to); + virtual void warp_mouse_position(const Point2 &p_to); virtual Point2 get_mouse_position() const; virtual int get_mouse_button_state() const; virtual void set_window_title(const String &p_title); @@ -242,7 +240,7 @@ public: virtual void delay_usec(uint32_t p_usec) const; virtual uint64_t get_ticks_usec() const; - virtual Error execute(const String &p_path, const List<String> &p_arguments, bool p_blocking, ProcessID *r_child_id = NULL, String *r_pipe = NULL, int *r_exitcode = NULL); + virtual Error execute(const String &p_path, const List<String> &p_arguments, bool p_blocking, ProcessID *r_child_id = NULL, String *r_pipe = NULL, int *r_exitcode = NULL, bool read_stderr = false); virtual Error kill(const ProcessID &p_pid); virtual int get_process_id() const; @@ -290,6 +288,8 @@ public: void disable_crash_handler(); bool is_disable_crash_handler() const; + virtual Error move_to_trash(const String &p_path); + OS_Windows(HINSTANCE _hInstance); ~OS_Windows(); }; diff --git a/platform/windows/windows_terminal_logger.cpp b/platform/windows/windows_terminal_logger.cpp new file mode 100644 index 0000000000..ef8140ffa7 --- /dev/null +++ b/platform/windows/windows_terminal_logger.cpp @@ -0,0 +1,157 @@ +/*************************************************************************/ +/* windows_terminal_logger.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 "windows_terminal_logger.h" + +#ifdef WINDOWS_ENABLED + +#include <stdio.h> +#include <windows.h> + +void WindowsTerminalLogger::logv(const char *p_format, va_list p_list, bool p_err) { + if (!should_log(p_err)) { + return; + } + + const unsigned int BUFFER_SIZE = 16384; + char buf[BUFFER_SIZE + 1]; // +1 for the terminating character + int len = vsnprintf(buf, BUFFER_SIZE, p_format, p_list); + if (len <= 0) + return; + if (len >= BUFFER_SIZE) + len = BUFFER_SIZE; // Output is too big, will be truncated + buf[len] = 0; + + int wlen = MultiByteToWideChar(CP_UTF8, 0, buf, len, NULL, 0); + if (wlen < 0) + return; + + wchar_t *wbuf = (wchar_t *)malloc((len + 1) * sizeof(wchar_t)); + MultiByteToWideChar(CP_UTF8, 0, buf, len, wbuf, wlen); + wbuf[wlen] = 0; + + if (p_err) + fwprintf(stderr, L"%ls", wbuf); + else + wprintf(L"%ls", wbuf); + + free(wbuf); + +#ifdef DEBUG_ENABLED + fflush(stdout); +#endif +} + +void WindowsTerminalLogger::log_error(const char *p_function, const char *p_file, int p_line, const char *p_code, const char *p_rationale, ErrorType p_type) { + if (!should_log(true)) { + return; + } + +#ifndef UWP_ENABLED + HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE); + if (!hCon || hCon == INVALID_HANDLE_VALUE) { +#endif + StdLogger::log_error(p_function, p_file, p_line, p_code, p_rationale, p_type); +#ifndef UWP_ENABLED + } else { + + CONSOLE_SCREEN_BUFFER_INFO sbi; //original + GetConsoleScreenBufferInfo(hCon, &sbi); + + WORD current_fg = sbi.wAttributes & (FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY); + WORD current_bg = sbi.wAttributes & (BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE | BACKGROUND_INTENSITY); + + uint32_t basecol = 0; + switch (p_type) { + case ERR_ERROR: basecol = FOREGROUND_RED; break; + case ERR_WARNING: basecol = FOREGROUND_RED | FOREGROUND_GREEN; break; + case ERR_SCRIPT: basecol = FOREGROUND_RED | FOREGROUND_BLUE; break; + case ERR_SHADER: basecol = FOREGROUND_GREEN | FOREGROUND_BLUE; break; + } + + basecol |= current_bg; + + if (p_rationale && p_rationale[0]) { + + SetConsoleTextAttribute(hCon, basecol | FOREGROUND_INTENSITY); + switch (p_type) { + case ERR_ERROR: logf("ERROR: "); break; + case ERR_WARNING: logf("WARNING: "); break; + case ERR_SCRIPT: logf("SCRIPT ERROR: "); break; + case ERR_SHADER: logf("SHADER ERROR: "); break; + } + + SetConsoleTextAttribute(hCon, current_fg | current_bg | FOREGROUND_INTENSITY); + logf("%s\n", p_rationale); + + SetConsoleTextAttribute(hCon, basecol); + switch (p_type) { + case ERR_ERROR: logf(" At: "); break; + case ERR_WARNING: logf(" At: "); break; + case ERR_SCRIPT: logf(" At: "); break; + case ERR_SHADER: logf(" At: "); break; + } + + SetConsoleTextAttribute(hCon, current_fg | current_bg); + logf("%s:%i\n", p_file, p_line); + + } else { + + SetConsoleTextAttribute(hCon, basecol | FOREGROUND_INTENSITY); + switch (p_type) { + case ERR_ERROR: logf("ERROR: %s: ", p_function); break; + case ERR_WARNING: logf("WARNING: %s: ", p_function); break; + case ERR_SCRIPT: logf("SCRIPT ERROR: %s: ", p_function); break; + case ERR_SHADER: logf("SCRIPT ERROR: %s: ", p_function); break; + } + + SetConsoleTextAttribute(hCon, current_fg | current_bg | FOREGROUND_INTENSITY); + logf("%s\n", p_code); + + SetConsoleTextAttribute(hCon, basecol); + switch (p_type) { + case ERR_ERROR: logf(" At: "); break; + case ERR_WARNING: logf(" At: "); break; + case ERR_SCRIPT: logf(" At: "); break; + case ERR_SHADER: logf(" At: "); break; + } + + SetConsoleTextAttribute(hCon, current_fg | current_bg); + logf("%s:%i\n", p_file, p_line); + } + + SetConsoleTextAttribute(hCon, sbi.wAttributes); + } +#endif +} + +WindowsTerminalLogger::~WindowsTerminalLogger() {} + +#endif
\ No newline at end of file diff --git a/platform/windows/windows_terminal_logger.h b/platform/windows/windows_terminal_logger.h new file mode 100644 index 0000000000..f6b1a68d18 --- /dev/null +++ b/platform/windows/windows_terminal_logger.h @@ -0,0 +1,47 @@ +/*************************************************************************/ +/* windows_terminal_logger.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* 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 WINDOWS_TERMINAL_LOGGER_H +#define WINDOWS_TERMINAL_LOGGER_H + +#ifdef WINDOWS_ENABLED + +#include "io/logger.h" + +class WindowsTerminalLogger : public StdLogger { +public: + virtual void logv(const char *p_format, va_list p_list, bool p_err); + virtual void log_error(const char *p_function, const char *p_file, int p_line, const char *p_code, const char *p_rationale, ErrorType p_type = ERR_ERROR); + virtual ~WindowsTerminalLogger(); +}; + +#endif + +#endif
\ No newline at end of file diff --git a/platform/x11/SCsub b/platform/x11/SCsub index 62717f3221..aabc49149f 100644 --- a/platform/x11/SCsub +++ b/platform/x11/SCsub @@ -1,7 +1,12 @@ #!/usr/bin/env python +import os Import('env') +def make_debug(target, source, env): + os.system('objcopy --only-keep-debug %s %s.debug' % (target[0], target[0])) + os.system('strip --strip-debug --strip-unneeded %s' % (target[0])) + os.system('objcopy --add-gnu-debuglink=%s.debug %s' % (target[0], target[0])) common_x11 = [ "context_gl_x11.cpp", @@ -12,4 +17,6 @@ common_x11 = [ "power_x11.cpp", ] -env.Program('#bin/godot', ['godot_x11.cpp'] + common_x11) +binary = env.Program('#bin/godot', ['godot_x11.cpp'] + common_x11) +if env["debug_symbols"] == "full" or env["debug_symbols"] == "yes": + env.AddPostAction(binary, make_debug) diff --git a/platform/x11/context_gl_x11.cpp b/platform/x11/context_gl_x11.cpp index 0cc9734119..4f9d4a84b9 100644 --- a/platform/x11/context_gl_x11.cpp +++ b/platform/x11/context_gl_x11.cpp @@ -30,7 +30,7 @@ #include "context_gl_x11.h" #ifdef X11_ENABLED -#if defined(OPENGL_ENABLED) || defined(LEGACYGL_ENABLED) +#if defined(OPENGL_ENABLED) #include <stdio.h> #include <stdlib.h> #include <unistd.h> diff --git a/platform/x11/context_gl_x11.h b/platform/x11/context_gl_x11.h index ba01b51d59..c37bac5e9b 100644 --- a/platform/x11/context_gl_x11.h +++ b/platform/x11/context_gl_x11.h @@ -35,7 +35,7 @@ */ #ifdef X11_ENABLED -#if defined(OPENGL_ENABLED) || defined(LEGACYGL_ENABLED) +#if defined(OPENGL_ENABLED) #include "drivers/gl_context/context_gl.h" #include "os/os.h" diff --git a/platform/x11/detect.py b/platform/x11/detect.py index d61175da60..8c68c9ffd1 100644 --- a/platform/x11/detect.py +++ b/platform/x11/detect.py @@ -44,28 +44,28 @@ def can_build(): return True - def get_opts(): + from SCons.Variables import BoolVariable, EnumVariable return [ - ('use_llvm', 'Use the LLVM compiler', 'no'), - ('use_static_cpp', 'Link stdc++ statically', 'no'), - ('use_sanitizer', 'Use LLVM compiler address sanitizer', 'no'), - ('use_leak_sanitizer', 'Use LLVM compiler memory leaks sanitizer (implies use_sanitizer)', 'no'), - ('use_lto', 'Use link time optimization', 'no'), - ('pulseaudio', 'Detect & use pulseaudio', 'yes'), - ('udev', 'Use udev for gamepad connection callbacks', 'no'), - ('debug_release', 'Add debug symbols to release version', 'no'), + BoolVariable('use_llvm', 'Use the LLVM compiler', False), + BoolVariable('use_static_cpp', 'Link stdc++ statically', False), + BoolVariable('use_sanitizer', 'Use LLVM compiler address sanitizer', False), + BoolVariable('use_leak_sanitizer', 'Use LLVM compiler memory leaks sanitizer (implies use_sanitizer)', False), + BoolVariable('use_lto', 'Use link time optimization', False), + BoolVariable('pulseaudio', 'Detect & use pulseaudio', True), + BoolVariable('udev', 'Use udev for gamepad connection callbacks', False), + EnumVariable('debug_symbols', 'Add debug symbols to release version', 'yes', ('yes', 'no', 'full')), ] def get_flags(): return [ - ('builtin_freetype', 'no'), - ('builtin_libpng', 'no'), - ('builtin_openssl', 'no'), - ('builtin_zlib', 'no'), + ('builtin_freetype', False), + ('builtin_libpng', False), + ('builtin_openssl', False), + ('builtin_zlib', False), ] @@ -77,16 +77,20 @@ def configure(env): # -O3 -ffast-math is identical to -Ofast. We need to split it out so we can selectively disable # -ffast-math in code for which it generates wrong results. env.Prepend(CCFLAGS=['-O3', '-ffast-math']) - if (env["debug_release"] == "yes"): + if (env["debug_symbols"] == "yes"): + env.Prepend(CCFLAGS=['-g1']) + if (env["debug_symbols"] == "full"): env.Prepend(CCFLAGS=['-g2']) elif (env["target"] == "release_debug"): env.Prepend(CCFLAGS=['-O2', '-ffast-math', '-DDEBUG_ENABLED']) - if (env["debug_release"] == "yes"): + if (env["debug_symbols"] == "yes"): + env.Prepend(CCFLAGS=['-g1']) + if (env["debug_symbols"] == "full"): env.Prepend(CCFLAGS=['-g2']) elif (env["target"] == "debug"): - env.Prepend(CCFLAGS=['-g2', '-DDEBUG_ENABLED', '-DDEBUG_MEMORY_ENABLED']) + env.Prepend(CCFLAGS=['-g3', '-DDEBUG_ENABLED', '-DDEBUG_MEMORY_ENABLED']) env.Append(LINKFLAGS=['-rdynamic']) ## Architecture @@ -97,7 +101,7 @@ def configure(env): ## Compiler configuration - if (env["use_llvm"] == "yes"): + if env['use_llvm']: if ('clang++' not in env['CXX']): env["CC"] = "clang" env["CXX"] = "clang++" @@ -106,17 +110,23 @@ def configure(env): env.extra_suffix = ".llvm" + env.extra_suffix # leak sanitizer requires (address) sanitizer - if (env["use_sanitizer"] == "yes" or env["use_leak_sanitizer"] == "yes"): + if env['use_sanitizer'] or env['use_leak_sanitizer']: env.Append(CCFLAGS=['-fsanitize=address', '-fno-omit-frame-pointer']) env.Append(LINKFLAGS=['-fsanitize=address']) env.extra_suffix += "s" - if (env["use_leak_sanitizer"] == "yes"): + if env['use_leak_sanitizer']: env.Append(CCFLAGS=['-fsanitize=leak']) env.Append(LINKFLAGS=['-fsanitize=leak']) - if (env["use_lto"] == "yes"): + if env['use_lto']: env.Append(CCFLAGS=['-flto']) - env.Append(LINKFLAGS=['-flto']) + if not env['use_llvm'] and env.GetOption("num_jobs") > 1: + env.Append(LINKFLAGS=['-flto=' + str(env.GetOption("num_jobs"))]) + else: + env.Append(LINKFLAGS=['-flto']) + if not env['use_llvm']: + env['RANLIB'] = 'gcc-ranlib' + env['AR'] = 'gcc-ar' env.Append(CCFLAGS=['-pipe']) env.Append(LINKFLAGS=['-pipe']) @@ -130,70 +140,64 @@ def configure(env): # FIXME: Check for existence of the libs before parsing their flags with pkg-config - if (env['builtin_openssl'] == 'no'): - # Currently not compatible with OpenSSL 1.1.0+ - # https://github.com/godotengine/godot/issues/8624 - import subprocess - openssl_version = subprocess.check_output(['pkg-config', 'openssl', '--modversion']).strip('\n') - if (openssl_version >= "1.1.0"): - print("Error: Found system-installed OpenSSL %s, currently only supporting version 1.0.x." % openssl_version) - print("Aborting.. You can compile with 'builtin_openssl=yes' to use the bundled version.\n") - sys.exit(255) - + if not env['builtin_openssl']: env.ParseConfig('pkg-config openssl --cflags --libs') - if (env['builtin_libwebp'] == 'no'): + if not env['builtin_libwebp']: env.ParseConfig('pkg-config libwebp --cflags --libs') # freetype depends on libpng and zlib, so bundling one of them while keeping others # as shared libraries leads to weird issues - if (env['builtin_freetype'] == 'yes' or env['builtin_libpng'] == 'yes' or env['builtin_zlib'] == 'yes'): - env['builtin_freetype'] = 'yes' - env['builtin_libpng'] = 'yes' - env['builtin_zlib'] = 'yes' + if env['builtin_freetype'] or env['builtin_libpng'] or env['builtin_zlib']: + env['builtin_freetype'] = True + env['builtin_libpng'] = True + env['builtin_zlib'] = True - if (env['builtin_freetype'] == 'no'): + if not env['builtin_freetype']: env.ParseConfig('pkg-config freetype2 --cflags --libs') - if (env['builtin_libpng'] == 'no'): + if not env['builtin_libpng']: env.ParseConfig('pkg-config libpng --cflags --libs') - if (env['builtin_enet'] == 'no'): + if not env['builtin_enet']: env.ParseConfig('pkg-config libenet --cflags --libs') - if (env['builtin_squish'] == 'no' and env["tools"] == "yes"): + if not env['builtin_squish'] and env['tools']: env.ParseConfig('pkg-config libsquish --cflags --libs') + if not env['builtin_zstd']: + env.ParseConfig('pkg-config libzstd --cflags --libs') + # Sound and video libraries # Keep the order as it triggers chained dependencies (ogg needed by others, etc.) - if (env['builtin_libtheora'] == 'no'): - env['builtin_libogg'] = 'no' # Needed to link against system libtheora - env['builtin_libvorbis'] = 'no' # Needed to link against system libtheora + if not env['builtin_libtheora']: + env['builtin_libogg'] = False # Needed to link against system libtheora + env['builtin_libvorbis'] = False # Needed to link against system libtheora env.ParseConfig('pkg-config theora theoradec --cflags --libs') - if (env['builtin_libvpx'] == 'no'): + if not env['builtin_libvpx']: env.ParseConfig('pkg-config vpx --cflags --libs') - if (env['builtin_libvorbis'] == 'no'): - env['builtin_libogg'] = 'no' # Needed to link against system libvorbis + if not env['builtin_libvorbis']: + env['builtin_libogg'] = False # Needed to link against system libvorbis env.ParseConfig('pkg-config vorbis vorbisfile --cflags --libs') - if (env['builtin_opus'] == 'no'): - env['builtin_libogg'] = 'no' # Needed to link against system opus + if not env['builtin_opus']: + env['builtin_libogg'] = False # Needed to link against system opus env.ParseConfig('pkg-config opus opusfile --cflags --libs') - if (env['builtin_libogg'] == 'no'): + if not env['builtin_libogg']: env.ParseConfig('pkg-config ogg --cflags --libs') - if (env['builtin_libtheora'] != 'no'): + if env['builtin_libtheora']: list_of_x86 = ['x86_64', 'x86', 'i386', 'i586'] if any(platform.machine() in s for s in list_of_x86): env["x86_libtheora_opt_gcc"] = True # On Linux wchar_t should be 32-bits # 16-bit library shouldn't be required due to compiler optimisations - if (env['builtin_pcre2'] == 'no'): + if not env['builtin_pcre2']: env.ParseConfig('pkg-config libpcre2-32 --cflags --libs') ## Flags @@ -205,7 +209,7 @@ def configure(env): else: print("ALSA libraries not found, disabling driver") - if (env["pulseaudio"] == "yes"): + if env['pulseaudio']: if (os.system("pkg-config --exists libpulse-simple") == 0): # 0 means found print("Enabling PulseAudio") env.Append(CPPFLAGS=["-DPULSEAUDIO_ENABLED"]) @@ -216,7 +220,7 @@ def configure(env): if (platform.system() == "Linux"): env.Append(CPPFLAGS=["-DJOYDEV_ENABLED"]) - if (env["udev"] == "yes"): + if env['udev']: if (os.system("pkg-config --exists libudev") == 0): # 0 means found print("Enabling udev support") env.Append(CPPFLAGS=["-DUDEV_ENABLED"]) @@ -225,7 +229,7 @@ def configure(env): print("libudev development libraries not found, disabling udev support") # Linkflags below this line should typically stay the last ones - if (env['builtin_zlib'] == 'no'): + if not env['builtin_zlib']: env.ParseConfig('pkg-config zlib --cflags --libs') env.Append(CPPPATH=['#platform/x11']) @@ -235,6 +239,9 @@ def configure(env): if (platform.system() == "Linux"): env.Append(LIBS=['dl']) + if (platform.system().find("BSD") >= 0): + env.Append(LIBS=['execinfo']) + ## Cross-compilation if (is64 and env["bits"] == "32"): @@ -244,5 +251,5 @@ def configure(env): env.Append(CPPFLAGS=['-m64']) env.Append(LINKFLAGS=['-m64', '-L/usr/lib/i686-linux-gnu']) - if (env["use_static_cpp"] == "yes"): + if env['use_static_cpp']: env.Append(LINKFLAGS=['-static-libstdc++']) diff --git a/platform/x11/os_x11.cpp b/platform/x11/os_x11.cpp index 3e8709a11e..48e2d8f81e 100644 --- a/platform/x11/os_x11.cpp +++ b/platform/x11/os_x11.cpp @@ -35,6 +35,11 @@ #include "servers/physics/physics_server_sw.h" #include "servers/visual/visual_server_raster.h" #include "servers/visual/visual_server_wrap_mt.h" + +#ifdef HAVE_MNTENT +#include <mntent.h> +#endif + #include <stdio.h> #include <stdlib.h> #include <string.h> @@ -234,7 +239,7 @@ void OS_X11::initialize(const VideoMode &p_desired, int p_video_driver, int p_au // maybe contextgl wants to be in charge of creating the window //print_line("def videomode "+itos(current_videomode.width)+","+itos(current_videomode.height)); -#if defined(OPENGL_ENABLED) || defined(LEGACYGL_ENABLED) +#if defined(OPENGL_ENABLED) context_gl = memnew(ContextGL_X11(x11_display, x11_window, current_videomode, true)); context_gl->initialize(); @@ -532,7 +537,7 @@ void OS_X11::finalize() { XUnmapWindow(x11_display, x11_window); XDestroyWindow(x11_display, x11_window); -#if defined(OPENGL_ENABLED) || defined(LEGACYGL_ENABLED) +#if defined(OPENGL_ENABLED) memdelete(context_gl); #endif for (int i = 0; i < CURSOR_MAX; i++) { @@ -613,7 +618,7 @@ void OS_X11::set_mouse_mode(MouseMode p_mode) { XFlush(x11_display); } -void OS_X11::warp_mouse_pos(const Point2 &p_to) { +void OS_X11::warp_mouse_position(const Point2 &p_to) { if (mouse_mode == MOUSE_MODE_CAPTURED) { @@ -708,6 +713,16 @@ void OS_X11::set_wm_fullscreen(bool p_enabled) { XSetWMNormalHints(x11_display, x11_window, xsh); XFree(xsh); } + + if (!p_enabled && !get_borderless_window()) { + // put decorations back if the window wasn't suppoesed to be borderless + Hints hints; + Atom property; + hints.flags = 2; + hints.decorations = 1; + property = XInternAtom(x11_display, "_MOTIF_WM_HINTS", True); + XChangeProperty(x11_display, x11_window, property, property, 32, PropModeReplace, (unsigned char *)&hints, 5); + } } int OS_X11::get_screen_count() const { @@ -1928,7 +1943,7 @@ Error OS_X11::shell_open(String p_uri) { Error ok; List<String> args; args.push_back(p_uri); - ok = execute("/usr/bin/xdg-open", args, false); + ok = execute("xdg-open", args, false); if (ok == OK) return OK; ok = execute("gnome-open", args, false); @@ -1992,7 +2007,7 @@ String OS_X11::get_system_dir(SystemDir p_dir) const { String pipe; List<String> arg; arg.push_back(xdgparam); - Error err = const_cast<OS_X11 *>(this)->execute("/usr/bin/xdg-user-dir", arg, true, NULL, &pipe); + Error err = const_cast<OS_X11 *>(this)->execute("xdg-user-dir", arg, true, NULL, &pipe); if (err != OK) return "."; return pipe.strip_edges(); @@ -2042,7 +2057,7 @@ void OS_X11::alert(const String &p_alert, const String &p_title) { args.push_back(p_title); args.push_back(p_alert); - execute("/usr/bin/xmessage", args, true); + execute("xmessage", args, true); } void OS_X11::set_icon(const Ref<Image> &p_icon) { @@ -2165,6 +2180,79 @@ bool OS_X11::is_disable_crash_handler() const { return crash_handler.is_disabled(); } +static String get_mountpoint(const String &p_path) { + struct stat s; + if (stat(p_path.utf8().get_data(), &s)) { + return ""; + } + +#ifdef HAVE_MNTENT + dev_t dev = s.st_dev; + FILE *fd = setmntent("/proc/mounts", "r"); + if (!fd) { + return ""; + } + + struct mntent mnt; + char buf[1024]; + size_t buflen = 1024; + while (getmntent_r(fd, &mnt, buf, buflen)) { + if (!stat(mnt.mnt_dir, &s) && s.st_dev == dev) { + endmntent(fd); + return String(mnt.mnt_dir); + } + } + + endmntent(fd); +#endif + return ""; +} + +Error OS_X11::move_to_trash(const String &p_path) { + String trashcan = ""; + String mnt = get_mountpoint(p_path); + + if (mnt != "") { + String path(mnt + "/.Trash-" + itos(getuid()) + "/files"); + struct stat s; + if (!stat(path.utf8().get_data(), &s)) { + trashcan = path; + } + } + + if (trashcan == "") { + char *dhome = getenv("XDG_DATA_HOME"); + if (dhome) { + trashcan = String(dhome) + "/Trash/files"; + } + } + + if (trashcan == "") { + char *home = getenv("HOME"); + if (home) { + trashcan = String(home) + "/.local/share/Trash/files"; + } + } + + if (trashcan == "") { + ERR_PRINTS("move_to_trash: Could not determine trashcan location"); + return FAILED; + } + + List<String> args; + args.push_back("-p"); + args.push_back(trashcan); + Error err = execute("mkdir", args, true); + if (err == OK) { + List<String> args2; + args2.push_back(p_path); + args2.push_back(trashcan); + err = execute("mv", args2, true); + } + + return err; +} + OS_X11::OS_X11() { #ifdef PULSEAUDIO_ENABLED diff --git a/platform/x11/os_x11.h b/platform/x11/os_x11.h index 0e2430c650..36355f11bc 100644 --- a/platform/x11/os_x11.h +++ b/platform/x11/os_x11.h @@ -94,7 +94,7 @@ class OS_X11 : public OS_Unix { int xdnd_version; -#if defined(OPENGL_ENABLED) || defined(LEGACYGL_ENABLED) +#if defined(OPENGL_ENABLED) ContextGL_X11 *context_gl; #endif //Rasterizer *rasterizer; @@ -201,7 +201,7 @@ public: void set_mouse_mode(MouseMode p_mode); MouseMode get_mouse_mode() const; - virtual void warp_mouse_pos(const Point2 &p_to); + virtual void warp_mouse_position(const Point2 &p_to); virtual Point2 get_mouse_position() const; virtual int get_mouse_button_state() const; virtual void set_window_title(const String &p_title); @@ -273,6 +273,8 @@ public: void disable_crash_handler(); bool is_disable_crash_handler() const; + virtual Error move_to_trash(const String &p_path); + OS_X11(); }; diff --git a/scene/2d/animated_sprite.cpp b/scene/2d/animated_sprite.cpp index 26241df660..5982556c18 100644 --- a/scene/2d/animated_sprite.cpp +++ b/scene/2d/animated_sprite.cpp @@ -223,7 +223,7 @@ void SpriteFrames::_bind_methods() { ClassDB::bind_method(D_METHOD("set_animation_loop", "anim", "loop"), &SpriteFrames::set_animation_loop); ClassDB::bind_method(D_METHOD("get_animation_loop", "anim"), &SpriteFrames::get_animation_loop); - ClassDB::bind_method(D_METHOD("add_frame", "anim", "frame", "atpos"), &SpriteFrames::add_frame, DEFVAL(-1)); + ClassDB::bind_method(D_METHOD("add_frame", "anim", "frame", "at_position"), &SpriteFrames::add_frame, DEFVAL(-1)); ClassDB::bind_method(D_METHOD("get_frame_count", "anim"), &SpriteFrames::get_frame_count); ClassDB::bind_method(D_METHOD("get_frame", "anim", "idx"), &SpriteFrames::get_frame); ClassDB::bind_method(D_METHOD("set_frame", "anim", "idx", "txt"), &SpriteFrames::set_frame); @@ -298,10 +298,8 @@ void AnimatedSprite::_validate_property(PropertyInfo &property) const { property.hint = PROPERTY_HINT_SPRITE_FRAME; - if (frames->has_animation(animation)) { + if (frames->has_animation(animation) && frames->get_frame_count(animation) > 1) { property.hint_string = "0," + itos(frames->get_frame_count(animation) - 1) + ",1"; - } else { - property.hint_string = "0,0,0"; } } } diff --git a/scene/2d/area_2d.cpp b/scene/2d/area_2d.cpp index 9fc6c8d23a..9ee77a710c 100644 --- a/scene/2d/area_2d.cpp +++ b/scene/2d/area_2d.cpp @@ -557,12 +557,12 @@ bool Area2D::is_overriding_audio_bus() const { return audio_bus_override; } -void Area2D::set_audio_bus(const StringName &p_audio_bus) { +void Area2D::set_audio_bus_name(const StringName &p_audio_bus) { audio_bus = p_audio_bus; } -StringName Area2D::get_audio_bus() const { +StringName Area2D::get_audio_bus_name() const { for (int i = 0; i < AudioServer::get_singleton()->get_bus_count(); i++) { if (AudioServer::get_singleton()->get_bus_name(i) == audio_bus) { @@ -644,8 +644,8 @@ void Area2D::_bind_methods() { ClassDB::bind_method(D_METHOD("overlaps_body", "body"), &Area2D::overlaps_body); ClassDB::bind_method(D_METHOD("overlaps_area", "area"), &Area2D::overlaps_area); - ClassDB::bind_method(D_METHOD("set_audio_bus", "name"), &Area2D::set_audio_bus); - ClassDB::bind_method(D_METHOD("get_audio_bus"), &Area2D::get_audio_bus); + ClassDB::bind_method(D_METHOD("set_audio_bus_name", "name"), &Area2D::set_audio_bus_name); + ClassDB::bind_method(D_METHOD("get_audio_bus_name"), &Area2D::get_audio_bus_name); ClassDB::bind_method(D_METHOD("set_audio_bus_override", "enable"), &Area2D::set_audio_bus_override); ClassDB::bind_method(D_METHOD("is_overriding_audio_bus"), &Area2D::is_overriding_audio_bus); @@ -679,7 +679,7 @@ void Area2D::_bind_methods() { ADD_GROUP("Audio Bus", "audio_bus_"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "audio_bus_override"), "set_audio_bus_override", "is_overriding_audio_bus"); - ADD_PROPERTY(PropertyInfo(Variant::STRING, "audio_bus_name", PROPERTY_HINT_ENUM, ""), "set_audio_bus", "get_audio_bus"); + ADD_PROPERTY(PropertyInfo(Variant::STRING, "audio_bus_name", PROPERTY_HINT_ENUM, ""), "set_audio_bus_name", "get_audio_bus_name"); BIND_ENUM_CONSTANT(SPACE_OVERRIDE_DISABLED); BIND_ENUM_CONSTANT(SPACE_OVERRIDE_COMBINE); diff --git a/scene/2d/area_2d.h b/scene/2d/area_2d.h index c56cf651a1..09ccb364e6 100644 --- a/scene/2d/area_2d.h +++ b/scene/2d/area_2d.h @@ -186,8 +186,8 @@ public: void set_audio_bus_override(bool p_override); bool is_overriding_audio_bus() const; - void set_audio_bus(const StringName &p_audio_bus); - StringName get_audio_bus() const; + void set_audio_bus_name(const StringName &p_audio_bus); + StringName get_audio_bus_name() const; Area2D(); ~Area2D(); diff --git a/scene/2d/audio_stream_player_2d.cpp b/scene/2d/audio_stream_player_2d.cpp index b6abe90035..73e633139b 100644 --- a/scene/2d/audio_stream_player_2d.cpp +++ b/scene/2d/audio_stream_player_2d.cpp @@ -113,7 +113,7 @@ void AudioStreamPlayer2D::_notification(int p_what) { AudioServer::get_singleton()->remove_callback(_mix_audios, this); } - if (p_what == NOTIFICATION_INTERNAL_FIXED_PROCESS) { + if (p_what == NOTIFICATION_INTERNAL_PHYSICS_PROCESS) { //update anything related to position first, if possible of course @@ -145,7 +145,7 @@ void AudioStreamPlayer2D::_notification(int p_what) { if (!area2d->is_overriding_audio_bus()) continue; - StringName bus_name = area2d->get_audio_bus(); + StringName bus_name = area2d->get_audio_bus_name(); bus_index = AudioServer::get_singleton()->thread_find_bus_index(bus_name); break; } @@ -203,7 +203,7 @@ void AudioStreamPlayer2D::_notification(int p_what) { //stop playing if no longer active if (!active) { - set_fixed_process_internal(false); + set_physics_process_internal(false); //do not update, this makes it easier to animate (will shut off otherise) //_change_notify("playing"); //update property in editor emit_signal("finished"); @@ -255,7 +255,7 @@ void AudioStreamPlayer2D::play(float p_from_pos) { if (stream_playback.is_valid()) { setplay = p_from_pos; output_ready = false; - set_fixed_process_internal(true); + set_physics_process_internal(true); } } @@ -270,7 +270,7 @@ void AudioStreamPlayer2D::stop() { if (stream_playback.is_valid()) { active = false; - set_fixed_process_internal(false); + set_physics_process_internal(false); setplay = -1; } } @@ -284,10 +284,10 @@ bool AudioStreamPlayer2D::is_playing() const { return false; } -float AudioStreamPlayer2D::get_pos() { +float AudioStreamPlayer2D::get_playback_position() { if (stream_playback.is_valid()) { - return stream_playback->get_pos(); + return stream_playback->get_playback_position(); } return 0; @@ -390,12 +390,12 @@ void AudioStreamPlayer2D::_bind_methods() { ClassDB::bind_method(D_METHOD("set_volume_db", "volume_db"), &AudioStreamPlayer2D::set_volume_db); ClassDB::bind_method(D_METHOD("get_volume_db"), &AudioStreamPlayer2D::get_volume_db); - ClassDB::bind_method(D_METHOD("play", "from_pos"), &AudioStreamPlayer2D::play, DEFVAL(0.0)); - ClassDB::bind_method(D_METHOD("seek", "to_pos"), &AudioStreamPlayer2D::seek); + ClassDB::bind_method(D_METHOD("play", "from_position"), &AudioStreamPlayer2D::play, DEFVAL(0.0)); + ClassDB::bind_method(D_METHOD("seek", "to_position"), &AudioStreamPlayer2D::seek); ClassDB::bind_method(D_METHOD("stop"), &AudioStreamPlayer2D::stop); ClassDB::bind_method(D_METHOD("is_playing"), &AudioStreamPlayer2D::is_playing); - ClassDB::bind_method(D_METHOD("get_pos"), &AudioStreamPlayer2D::get_pos); + ClassDB::bind_method(D_METHOD("get_playback_position"), &AudioStreamPlayer2D::get_playback_position); ClassDB::bind_method(D_METHOD("set_bus", "bus"), &AudioStreamPlayer2D::set_bus); ClassDB::bind_method(D_METHOD("get_bus"), &AudioStreamPlayer2D::get_bus); diff --git a/scene/2d/audio_stream_player_2d.h b/scene/2d/audio_stream_player_2d.h index 25eff61b76..85104fce21 100644 --- a/scene/2d/audio_stream_player_2d.h +++ b/scene/2d/audio_stream_player_2d.h @@ -72,7 +72,7 @@ public: void seek(float p_seconds); void stop(); bool is_playing() const; - float get_pos(); + float get_playback_position(); void set_bus(const StringName &p_bus); StringName get_bus() const; diff --git a/scene/2d/camera_2d.cpp b/scene/2d/camera_2d.cpp index e39e6fc6da..d65a3bfe80 100644 --- a/scene/2d/camera_2d.cpp +++ b/scene/2d/camera_2d.cpp @@ -138,7 +138,7 @@ Transform2D Camera2D::get_camera_transform() { if (smoothing_enabled && !Engine::get_singleton()->is_editor_hint()) { - float c = smoothing * get_fixed_process_delta_time(); + float c = smoothing * get_physics_process_delta_time(); smoothed_camera_pos = ((camera_pos - smoothed_camera_pos) * c) + smoothed_camera_pos; ret_camera_pos = smoothed_camera_pos; //camera_pos=camera_pos*(1.0-smoothing)+new_camera_pos*smoothing; @@ -212,14 +212,14 @@ void Camera2D::_notification(int p_what) { switch (p_what) { - case NOTIFICATION_FIXED_PROCESS: { + case NOTIFICATION_PHYSICS_PROCESS: { _update_scroll(); } break; case NOTIFICATION_TRANSFORM_CHANGED: { - if (!is_fixed_processing()) + if (!is_physics_processing()) _update_scroll(); } break; @@ -241,7 +241,7 @@ void Camera2D::_notification(int p_what) { add_to_group(canvas_group_name); if (Engine::get_singleton()->is_editor_hint()) { - set_fixed_process(false); + set_physics_process(false); } _update_scroll(); @@ -452,7 +452,7 @@ float Camera2D::get_drag_margin(Margin p_margin) const { return drag_margin[p_margin]; } -Vector2 Camera2D::get_camera_pos() const { +Vector2 Camera2D::get_camera_position() const { return camera_pos; } @@ -498,9 +498,9 @@ void Camera2D::set_follow_smoothing(float p_speed) { smoothing = p_speed; if (smoothing > 0 && !(is_inside_tree() && Engine::get_singleton()->is_editor_hint())) - set_fixed_process(true); + set_physics_process(true); else - set_fixed_process(false); + set_physics_process(false); } float Camera2D::get_follow_smoothing() const { @@ -673,7 +673,7 @@ void Camera2D::_bind_methods() { ClassDB::bind_method(D_METHOD("set_drag_margin", "margin", "drag_margin"), &Camera2D::set_drag_margin); ClassDB::bind_method(D_METHOD("get_drag_margin", "margin"), &Camera2D::get_drag_margin); - ClassDB::bind_method(D_METHOD("get_camera_pos"), &Camera2D::get_camera_pos); + ClassDB::bind_method(D_METHOD("get_camera_position"), &Camera2D::get_camera_position); ClassDB::bind_method(D_METHOD("get_camera_screen_center"), &Camera2D::get_camera_screen_center); ClassDB::bind_method(D_METHOD("set_zoom", "zoom"), &Camera2D::set_zoom); @@ -735,8 +735,8 @@ void Camera2D::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::BOOL, "editor_draw_limits"), "set_limit_drawing_enabled", "is_limit_drawing_enabled"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "editor_draw_drag_margin"), "set_margin_drawing_enabled", "is_margin_drawing_enabled"); - BIND_ENUM_CONSTANT(ANCHOR_MODE_DRAG_CENTER); BIND_ENUM_CONSTANT(ANCHOR_MODE_FIXED_TOP_LEFT); + BIND_ENUM_CONSTANT(ANCHOR_MODE_DRAG_CENTER); } Camera2D::Camera2D() { diff --git a/scene/2d/camera_2d.h b/scene/2d/camera_2d.h index dfcadf65a6..13b6be3978 100644 --- a/scene/2d/camera_2d.h +++ b/scene/2d/camera_2d.h @@ -137,7 +137,7 @@ public: void set_custom_viewport(Node *p_viewport); Node *get_custom_viewport() const; - Vector2 get_camera_pos() const; + Vector2 get_camera_position() const; void force_update_scroll(); void reset_smoothing(); void align(); diff --git a/scene/2d/canvas_item.cpp b/scene/2d/canvas_item.cpp index ec1ea7df38..b41ba7f590 100644 --- a/scene/2d/canvas_item.cpp +++ b/scene/2d/canvas_item.cpp @@ -902,7 +902,7 @@ Ref<Material> CanvasItem::get_material() const { return material; } -Vector2 CanvasItem::make_canvas_pos_local(const Vector2 &screen_point) const { +Vector2 CanvasItem::make_canvas_position_local(const Vector2 &screen_point) const { ERR_FAIL_COND_V(!is_inside_tree(), screen_point); @@ -923,7 +923,8 @@ Vector2 CanvasItem::get_global_mouse_position() const { ERR_FAIL_COND_V(!get_viewport(), Vector2()); return get_canvas_transform().affine_inverse().xform(get_viewport()->get_mouse_position()); } -Vector2 CanvasItem::get_local_mouse_pos() const { + +Vector2 CanvasItem::get_local_mouse_position() const { ERR_FAIL_COND_V(!get_viewport(), Vector2()); @@ -976,18 +977,18 @@ void CanvasItem::_bind_methods() { ClassDB::bind_method(D_METHOD("draw_polyline", "points", "color", "width", "antialiased"), &CanvasItem::draw_polyline, DEFVAL(1.0), DEFVAL(false)); ClassDB::bind_method(D_METHOD("draw_polyline_colors", "points", "colors", "width", "antialiased"), &CanvasItem::draw_polyline_colors, DEFVAL(1.0), DEFVAL(false)); ClassDB::bind_method(D_METHOD("draw_rect", "rect", "color", "filled"), &CanvasItem::draw_rect, DEFVAL(true)); - ClassDB::bind_method(D_METHOD("draw_circle", "pos", "radius", "color"), &CanvasItem::draw_circle); - ClassDB::bind_method(D_METHOD("draw_texture", "texture", "pos", "modulate", "normal_map"), &CanvasItem::draw_texture, DEFVAL(Color(1, 1, 1, 1)), DEFVAL(Variant())); + ClassDB::bind_method(D_METHOD("draw_circle", "position", "radius", "color"), &CanvasItem::draw_circle); + ClassDB::bind_method(D_METHOD("draw_texture", "texture", "position", "modulate", "normal_map"), &CanvasItem::draw_texture, DEFVAL(Color(1, 1, 1, 1)), DEFVAL(Variant())); ClassDB::bind_method(D_METHOD("draw_texture_rect", "texture", "rect", "tile", "modulate", "transpose", "normal_map"), &CanvasItem::draw_texture_rect, DEFVAL(Color(1, 1, 1)), DEFVAL(false), DEFVAL(Variant())); ClassDB::bind_method(D_METHOD("draw_texture_rect_region", "texture", "rect", "src_rect", "modulate", "transpose", "normal_map", "clip_uv"), &CanvasItem::draw_texture_rect_region, DEFVAL(Color(1, 1, 1)), DEFVAL(false), DEFVAL(Variant()), DEFVAL(true)); ClassDB::bind_method(D_METHOD("draw_style_box", "style_box", "rect"), &CanvasItem::draw_style_box); ClassDB::bind_method(D_METHOD("draw_primitive", "points", "colors", "uvs", "texture", "width", "normal_map"), &CanvasItem::draw_primitive, DEFVAL(Variant()), DEFVAL(1.0), DEFVAL(Variant())); ClassDB::bind_method(D_METHOD("draw_polygon", "points", "colors", "uvs", "texture", "normal_map", "antialiased"), &CanvasItem::draw_polygon, DEFVAL(PoolVector2Array()), DEFVAL(Variant()), DEFVAL(Variant()), DEFVAL(false)); ClassDB::bind_method(D_METHOD("draw_colored_polygon", "points", "color", "uvs", "texture", "normal_map", "antialiased"), &CanvasItem::draw_colored_polygon, DEFVAL(PoolVector2Array()), DEFVAL(Variant()), DEFVAL(Variant()), DEFVAL(false)); - ClassDB::bind_method(D_METHOD("draw_string", "font", "pos", "text", "modulate", "clip_w"), &CanvasItem::draw_string, DEFVAL(Color(1, 1, 1)), DEFVAL(-1)); - ClassDB::bind_method(D_METHOD("draw_char", "font", "pos", "char", "next", "modulate"), &CanvasItem::draw_char, DEFVAL(Color(1, 1, 1))); + ClassDB::bind_method(D_METHOD("draw_string", "font", "position", "text", "modulate", "clip_w"), &CanvasItem::draw_string, DEFVAL(Color(1, 1, 1)), DEFVAL(-1)); + ClassDB::bind_method(D_METHOD("draw_char", "font", "position", "char", "next", "modulate"), &CanvasItem::draw_char, DEFVAL(Color(1, 1, 1))); - ClassDB::bind_method(D_METHOD("draw_set_transform", "pos", "rot", "scale"), &CanvasItem::draw_set_transform); + ClassDB::bind_method(D_METHOD("draw_set_transform", "position", "rotation", "scale"), &CanvasItem::draw_set_transform); ClassDB::bind_method(D_METHOD("draw_set_transform_matrix", "xform"), &CanvasItem::draw_set_transform_matrix); ClassDB::bind_method(D_METHOD("get_transform"), &CanvasItem::get_transform); ClassDB::bind_method(D_METHOD("get_global_transform"), &CanvasItem::get_global_transform); @@ -995,7 +996,7 @@ void CanvasItem::_bind_methods() { ClassDB::bind_method(D_METHOD("get_viewport_transform"), &CanvasItem::get_viewport_transform); ClassDB::bind_method(D_METHOD("get_viewport_rect"), &CanvasItem::get_viewport_rect); ClassDB::bind_method(D_METHOD("get_canvas_transform"), &CanvasItem::get_canvas_transform); - ClassDB::bind_method(D_METHOD("get_local_mouse_pos"), &CanvasItem::get_local_mouse_pos); + ClassDB::bind_method(D_METHOD("get_local_mouse_position"), &CanvasItem::get_local_mouse_position); ClassDB::bind_method(D_METHOD("get_global_mouse_position"), &CanvasItem::get_global_mouse_position); ClassDB::bind_method(D_METHOD("get_canvas"), &CanvasItem::get_canvas); ClassDB::bind_method(D_METHOD("get_world_2d"), &CanvasItem::get_world_2d); @@ -1013,8 +1014,7 @@ void CanvasItem::_bind_methods() { ClassDB::bind_method(D_METHOD("set_notify_transform", "enable"), &CanvasItem::set_notify_transform); ClassDB::bind_method(D_METHOD("is_transform_notification_enabled"), &CanvasItem::is_transform_notification_enabled); - ClassDB::bind_method(D_METHOD("make_canvas_pos_local", "screen_point"), - &CanvasItem::make_canvas_pos_local); + ClassDB::bind_method(D_METHOD("make_canvas_position_local", "screen_point"), &CanvasItem::make_canvas_position_local); ClassDB::bind_method(D_METHOD("make_input_local", "event"), &CanvasItem::make_input_local); BIND_VMETHOD(MethodInfo("_draw")); @@ -1045,11 +1045,11 @@ void CanvasItem::_bind_methods() { BIND_ENUM_CONSTANT(BLEND_MODE_MUL); BIND_ENUM_CONSTANT(BLEND_MODE_PREMULT_ALPHA); + BIND_CONSTANT(NOTIFICATION_TRANSFORM_CHANGED); BIND_CONSTANT(NOTIFICATION_DRAW); BIND_CONSTANT(NOTIFICATION_VISIBILITY_CHANGED); BIND_CONSTANT(NOTIFICATION_ENTER_CANVAS); BIND_CONSTANT(NOTIFICATION_EXIT_CANVAS); - BIND_CONSTANT(NOTIFICATION_TRANSFORM_CHANGED); } Transform2D CanvasItem::get_canvas_transform() const { diff --git a/scene/2d/canvas_item.h b/scene/2d/canvas_item.h index 5a0a9c6e6a..1afbd150a2 100644 --- a/scene/2d/canvas_item.h +++ b/scene/2d/canvas_item.h @@ -298,10 +298,10 @@ public: bool get_use_parent_material() const; Ref<InputEvent> make_input_local(const Ref<InputEvent> &p_event) const; - Vector2 make_canvas_pos_local(const Vector2 &screen_point) const; + Vector2 make_canvas_position_local(const Vector2 &screen_point) const; Vector2 get_global_mouse_position() const; - Vector2 get_local_mouse_pos() const; + Vector2 get_local_mouse_position() const; void set_notify_local_transform(bool p_enable); bool is_local_transform_notification_enabled() const; diff --git a/scene/2d/collision_object_2d.cpp b/scene/2d/collision_object_2d.cpp index ce56b85a9e..73e5dc6021 100644 --- a/scene/2d/collision_object_2d.cpp +++ b/scene/2d/collision_object_2d.cpp @@ -82,7 +82,7 @@ uint32_t CollisionObject2D::create_shape_owner(Object *p_owner) { uint32_t id; if (shapes.size() == 0) { - id = 1; + id = 0; } else { id = shapes.back()->key() + 1; } diff --git a/scene/2d/line_2d.cpp b/scene/2d/line_2d.cpp index d8cef5b937..9131223ff3 100644 --- a/scene/2d/line_2d.cpp +++ b/scene/2d/line_2d.cpp @@ -68,12 +68,12 @@ PoolVector<Vector2> Line2D::get_points() const { return _points; } -void Line2D::set_point_pos(int i, Vector2 pos) { +void Line2D::set_point_position(int i, Vector2 pos) { _points.set(i, pos); update(); } -Vector2 Line2D::get_point_pos(int i) const { +Vector2 Line2D::get_point_position(int i) const { return _points.get(i); } @@ -270,12 +270,12 @@ void Line2D::_bind_methods() { ClassDB::bind_method(D_METHOD("set_points", "points"), &Line2D::set_points); ClassDB::bind_method(D_METHOD("get_points"), &Line2D::get_points); - ClassDB::bind_method(D_METHOD("set_point_pos", "i", "pos"), &Line2D::set_point_pos); - ClassDB::bind_method(D_METHOD("get_point_pos", "i"), &Line2D::get_point_pos); + ClassDB::bind_method(D_METHOD("set_point_position", "i", "position"), &Line2D::set_point_position); + ClassDB::bind_method(D_METHOD("get_point_position", "i"), &Line2D::get_point_position); ClassDB::bind_method(D_METHOD("get_point_count"), &Line2D::get_point_count); - ClassDB::bind_method(D_METHOD("add_point", "pos"), &Line2D::add_point); + ClassDB::bind_method(D_METHOD("add_point", "position"), &Line2D::add_point); ClassDB::bind_method(D_METHOD("remove_point", "i"), &Line2D::remove_point); ClassDB::bind_method(D_METHOD("set_width", "width"), &Line2D::set_width); diff --git a/scene/2d/line_2d.h b/scene/2d/line_2d.h index 36aadfd265..6426484f02 100644 --- a/scene/2d/line_2d.h +++ b/scene/2d/line_2d.h @@ -60,8 +60,8 @@ public: void set_points(const PoolVector<Vector2> &p_points); PoolVector<Vector2> get_points() const; - void set_point_pos(int i, Vector2 pos); - Vector2 get_point_pos(int i) const; + void set_point_position(int i, Vector2 pos); + Vector2 get_point_position(int i) const; int get_point_count() const; diff --git a/scene/2d/navigation_polygon.cpp b/scene/2d/navigation_polygon.cpp index 352ec3b300..35f94bff59 100644 --- a/scene/2d/navigation_polygon.cpp +++ b/scene/2d/navigation_polygon.cpp @@ -329,7 +329,7 @@ void NavigationPolygonInstance::_notification(int p_what) { break; } - c = Object::cast_to<Node2D>(get_parent()); + c = Object::cast_to<Node2D>(c->get_parent()); } } break; diff --git a/scene/2d/node_2d.cpp b/scene/2d/node_2d.cpp index 0c7685a858..e62b59dd4d 100644 --- a/scene/2d/node_2d.cpp +++ b/scene/2d/node_2d.cpp @@ -414,7 +414,7 @@ void Node2D::_bind_methods() { ClassDB::bind_method(D_METHOD("_get_rotd"), &Node2D::_get_rotd); ClassDB::bind_method(D_METHOD("_set_rotd", "degrees"), &Node2D::_set_rotd); - ClassDB::bind_method(D_METHOD("set_position", "pos"), &Node2D::set_position); + ClassDB::bind_method(D_METHOD("set_position", "position"), &Node2D::set_position); ClassDB::bind_method(D_METHOD("set_rotation", "radians"), &Node2D::set_rotation); ClassDB::bind_method(D_METHOD("set_rotation_in_degrees", "degrees"), &Node2D::set_rotation_in_degrees); ClassDB::bind_method(D_METHOD("set_scale", "scale"), &Node2D::set_scale); @@ -431,7 +431,7 @@ void Node2D::_bind_methods() { ClassDB::bind_method(D_METHOD("global_translate", "offset"), &Node2D::global_translate); ClassDB::bind_method(D_METHOD("apply_scale", "ratio"), &Node2D::apply_scale); - ClassDB::bind_method(D_METHOD("set_global_position", "pos"), &Node2D::set_global_position); + ClassDB::bind_method(D_METHOD("set_global_position", "position"), &Node2D::set_global_position); ClassDB::bind_method(D_METHOD("get_global_position"), &Node2D::get_global_position); ClassDB::bind_method(D_METHOD("set_global_rotation", "radians"), &Node2D::set_global_rotation); ClassDB::bind_method(D_METHOD("get_global_rotation"), &Node2D::get_global_rotation); diff --git a/scene/2d/parallax_background.cpp b/scene/2d/parallax_background.cpp index 0ddcb7b51b..a13ce6278e 100644 --- a/scene/2d/parallax_background.cpp +++ b/scene/2d/parallax_background.cpp @@ -49,8 +49,8 @@ void ParallaxBackground::_notification(int p_what) { void ParallaxBackground::_camera_moved(const Transform2D &p_transform) { - set_scroll_offset(p_transform.get_origin()); set_scroll_scale(p_transform.get_scale().dot(Vector2(0.5, 0.5))); + set_scroll_offset(p_transform.get_origin() / p_transform.get_scale()); } void ParallaxBackground::set_scroll_scale(float p_scale) { diff --git a/scene/2d/path_2d.cpp b/scene/2d/path_2d.cpp index 9bd5576d91..8413be1ca9 100644 --- a/scene/2d/path_2d.cpp +++ b/scene/2d/path_2d.cpp @@ -43,7 +43,7 @@ void Path2D::_notification(int p_what) { for (int i = 0; i < curve->get_point_count(); i++) { - Vector2 prev_p = curve->get_point_pos(i); + Vector2 prev_p = curve->get_point_position(i); for (int j = 1; j <= 8; j++) { diff --git a/scene/2d/physics_body_2d.cpp b/scene/2d/physics_body_2d.cpp index c6cd3677cd..f0ee64a53f 100644 --- a/scene/2d/physics_body_2d.cpp +++ b/scene/2d/physics_body_2d.cpp @@ -910,10 +910,10 @@ void RigidBody2D::_bind_methods() { ADD_SIGNAL(MethodInfo("body_exited", PropertyInfo(Variant::OBJECT, "body"))); ADD_SIGNAL(MethodInfo("sleeping_state_changed")); - BIND_ENUM_CONSTANT(MODE_STATIC); - BIND_ENUM_CONSTANT(MODE_KINEMATIC); BIND_ENUM_CONSTANT(MODE_RIGID); + BIND_ENUM_CONSTANT(MODE_STATIC); BIND_ENUM_CONSTANT(MODE_CHARACTER); + BIND_ENUM_CONSTANT(MODE_KINEMATIC); BIND_ENUM_CONSTANT(CCD_MODE_DISABLED); BIND_ENUM_CONSTANT(CCD_MODE_CAST_RAY); @@ -999,7 +999,7 @@ bool KinematicBody2D::move_and_collide(const Vector2 &p_motion, Collision &r_col Vector2 KinematicBody2D::move_and_slide(const Vector2 &p_linear_velocity, const Vector2 &p_floor_direction, float p_slope_stop_min_velocity, int p_max_slides, float p_floor_max_angle) { - Vector2 motion = (floor_velocity + p_linear_velocity) * get_fixed_process_delta_time(); + Vector2 motion = (floor_velocity + p_linear_velocity) * get_physics_process_delta_time(); Vector2 lv = p_linear_velocity; on_floor = false; diff --git a/scene/2d/ray_cast_2d.cpp b/scene/2d/ray_cast_2d.cpp index f90331c411..fa656bdcd3 100644 --- a/scene/2d/ray_cast_2d.cpp +++ b/scene/2d/ray_cast_2d.cpp @@ -46,14 +46,14 @@ Vector2 RayCast2D::get_cast_to() const { return cast_to; } -void RayCast2D::set_collision_layer(uint32_t p_layer) { +void RayCast2D::set_collision_mask(uint32_t p_mask) { - collision_layer = p_layer; + collision_mask = p_mask; } -uint32_t RayCast2D::get_collision_layer() const { +uint32_t RayCast2D::get_collision_mask() const { - return collision_layer; + return collision_mask; } void RayCast2D::set_type_mask(uint32_t p_mask) { @@ -95,7 +95,7 @@ void RayCast2D::set_enabled(bool p_enabled) { enabled = p_enabled; if (is_inside_tree() && !Engine::get_singleton()->is_editor_hint()) - set_fixed_process(p_enabled); + set_physics_process(p_enabled); if (!p_enabled) collided = false; } @@ -135,9 +135,9 @@ void RayCast2D::_notification(int p_what) { case NOTIFICATION_ENTER_TREE: { if (enabled && !Engine::get_singleton()->is_editor_hint()) - set_fixed_process(true); + set_physics_process(true); else - set_fixed_process(false); + set_physics_process(false); if (Object::cast_to<PhysicsBody2D>(get_parent())) { if (exclude_parent_body) @@ -149,7 +149,7 @@ void RayCast2D::_notification(int p_what) { case NOTIFICATION_EXIT_TREE: { if (enabled) - set_fixed_process(false); + set_physics_process(false); } break; @@ -177,7 +177,7 @@ void RayCast2D::_notification(int p_what) { } break; - case NOTIFICATION_FIXED_PROCESS: { + case NOTIFICATION_PHYSICS_PROCESS: { if (!enabled) break; @@ -203,7 +203,7 @@ void RayCast2D::_update_raycast_state() { Physics2DDirectSpaceState::RayResult rr; - if (dss->intersect_ray(gt.get_origin(), gt.xform(to), rr, exclude, collision_layer, type_mask)) { + if (dss->intersect_ray(gt.get_origin(), gt.xform(to), rr, exclude, collision_mask, type_mask)) { collided = true; against = rr.collider_id; @@ -276,8 +276,8 @@ void RayCast2D::_bind_methods() { ClassDB::bind_method(D_METHOD("clear_exceptions"), &RayCast2D::clear_exceptions); - ClassDB::bind_method(D_METHOD("set_collision_layer", "layer"), &RayCast2D::set_collision_layer); - ClassDB::bind_method(D_METHOD("get_collision_layer"), &RayCast2D::get_collision_layer); + ClassDB::bind_method(D_METHOD("set_collision_mask", "mask"), &RayCast2D::set_collision_mask); + ClassDB::bind_method(D_METHOD("get_collision_mask"), &RayCast2D::get_collision_mask); ClassDB::bind_method(D_METHOD("set_type_mask", "mask"), &RayCast2D::set_type_mask); ClassDB::bind_method(D_METHOD("get_type_mask"), &RayCast2D::get_type_mask); @@ -288,7 +288,7 @@ void RayCast2D::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::BOOL, "enabled"), "set_enabled", "is_enabled"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "exclude_parent"), "set_exclude_parent_body", "get_exclude_parent_body"); ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "cast_to"), "set_cast_to", "get_cast_to"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "collision_layer", PROPERTY_HINT_LAYERS_2D_PHYSICS), "set_collision_layer", "get_collision_layer"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "collision_mask", PROPERTY_HINT_LAYERS_2D_PHYSICS), "set_collision_mask", "get_collision_mask"); ADD_PROPERTY(PropertyInfo(Variant::INT, "type_mask", PROPERTY_HINT_FLAGS, "Static,Kinematic,Rigid,Character,Area"), "set_type_mask", "get_type_mask"); } @@ -298,7 +298,7 @@ RayCast2D::RayCast2D() { against = 0; collided = false; against_shape = 0; - collision_layer = 1; + collision_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 338de814d2..da1be84307 100644 --- a/scene/2d/ray_cast_2d.h +++ b/scene/2d/ray_cast_2d.h @@ -43,7 +43,7 @@ class RayCast2D : public Node2D { Vector2 collision_point; Vector2 collision_normal; Set<RID> exclude; - uint32_t collision_layer; + uint32_t collision_mask; uint32_t type_mask; bool exclude_parent_body; @@ -61,8 +61,8 @@ public: void set_cast_to(const Vector2 &p_point); Vector2 get_cast_to() const; - void set_collision_layer(uint32_t p_layer); - uint32_t get_collision_layer() const; + void set_collision_mask(uint32_t p_mask); + uint32_t get_collision_mask() const; void set_type_mask(uint32_t p_mask); uint32_t get_type_mask() const; diff --git a/scene/2d/tile_map.cpp b/scene/2d/tile_map.cpp index b1cc8c226a..4286d88ab1 100644 --- a/scene/2d/tile_map.cpp +++ b/scene/2d/tile_map.cpp @@ -1294,9 +1294,9 @@ void TileMap::_bind_methods() { ClassDB::bind_method(D_METHOD("get_occluder_light_mask"), &TileMap::get_occluder_light_mask); ClassDB::bind_method(D_METHOD("set_cell", "x", "y", "tile", "flip_x", "flip_y", "transpose"), &TileMap::set_cell, DEFVAL(false), DEFVAL(false), DEFVAL(false)); - ClassDB::bind_method(D_METHOD("set_cellv", "pos", "tile", "flip_x", "flip_y", "transpose"), &TileMap::set_cellv, DEFVAL(false), DEFVAL(false), DEFVAL(false)); + ClassDB::bind_method(D_METHOD("set_cellv", "position", "tile", "flip_x", "flip_y", "transpose"), &TileMap::set_cellv, DEFVAL(false), DEFVAL(false), DEFVAL(false)); ClassDB::bind_method(D_METHOD("get_cell", "x", "y"), &TileMap::get_cell); - ClassDB::bind_method(D_METHOD("get_cellv", "pos"), &TileMap::get_cellv); + ClassDB::bind_method(D_METHOD("get_cellv", "position"), &TileMap::get_cellv); ClassDB::bind_method(D_METHOD("is_cell_x_flipped", "x", "y"), &TileMap::is_cell_x_flipped); ClassDB::bind_method(D_METHOD("is_cell_y_flipped", "x", "y"), &TileMap::is_cell_y_flipped); ClassDB::bind_method(D_METHOD("is_cell_transposed", "x", "y"), &TileMap::is_cell_transposed); @@ -1307,8 +1307,8 @@ void TileMap::_bind_methods() { ClassDB::bind_method(D_METHOD("get_used_cells_by_id", "id"), &TileMap::get_used_cells_by_id); ClassDB::bind_method(D_METHOD("get_used_rect"), &TileMap::get_used_rect); - ClassDB::bind_method(D_METHOD("map_to_world", "mappos", "ignore_half_ofs"), &TileMap::map_to_world, DEFVAL(false)); - ClassDB::bind_method(D_METHOD("world_to_map", "worldpos"), &TileMap::world_to_map); + ClassDB::bind_method(D_METHOD("map_to_world", "map_position", "ignore_half_ofs"), &TileMap::map_to_world, DEFVAL(false)); + ClassDB::bind_method(D_METHOD("world_to_map", "world_position"), &TileMap::world_to_map); ClassDB::bind_method(D_METHOD("_clear_quadrants"), &TileMap::_clear_quadrants); ClassDB::bind_method(D_METHOD("_recreate_quadrants"), &TileMap::_recreate_quadrants); diff --git a/scene/2d/visibility_notifier_2d.cpp b/scene/2d/visibility_notifier_2d.cpp index 8fc8b65217..b0fd57baf5 100644 --- a/scene/2d/visibility_notifier_2d.cpp +++ b/scene/2d/visibility_notifier_2d.cpp @@ -154,8 +154,8 @@ void VisibilityEnabler2D::_screen_enter() { _change_node_state(E->key(), true); } - if (enabler[ENABLER_PARENT_FIXED_PROCESS] && get_parent()) - get_parent()->set_fixed_process(true); + if (enabler[ENABLER_PARENT_PHYSICS_PROCESS] && get_parent()) + get_parent()->set_physics_process(true); if (enabler[ENABLER_PARENT_PROCESS] && get_parent()) get_parent()->set_process(true); @@ -169,8 +169,8 @@ void VisibilityEnabler2D::_screen_exit() { _change_node_state(E->key(), false); } - if (enabler[ENABLER_PARENT_FIXED_PROCESS] && get_parent()) - get_parent()->set_fixed_process(false); + if (enabler[ENABLER_PARENT_PHYSICS_PROCESS] && get_parent()) + get_parent()->set_physics_process(false); if (enabler[ENABLER_PARENT_PROCESS] && get_parent()) get_parent()->set_process(false); @@ -246,8 +246,8 @@ void VisibilityEnabler2D::_notification(int p_what) { _find_nodes(from); - if (enabler[ENABLER_PARENT_FIXED_PROCESS] && get_parent()) - get_parent()->set_fixed_process(false); + if (enabler[ENABLER_PARENT_PHYSICS_PROCESS] && get_parent()) + get_parent()->set_physics_process(false); if (enabler[ENABLER_PARENT_PROCESS] && get_parent()) get_parent()->set_process(false); } @@ -339,14 +339,14 @@ void VisibilityEnabler2D::_bind_methods() { ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "pause_particles"), "set_enabler", "is_enabler_enabled", ENABLER_PAUSE_PARTICLES); ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "pause_animated_sprites"), "set_enabler", "is_enabler_enabled", ENABLER_PAUSE_ANIMATED_SPRITES); ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "process_parent"), "set_enabler", "is_enabler_enabled", ENABLER_PARENT_PROCESS); - ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "fixed_process_parent"), "set_enabler", "is_enabler_enabled", ENABLER_PARENT_FIXED_PROCESS); + ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "physics_process_parent"), "set_enabler", "is_enabler_enabled", ENABLER_PARENT_PHYSICS_PROCESS); - BIND_ENUM_CONSTANT(ENABLER_FREEZE_BODIES); BIND_ENUM_CONSTANT(ENABLER_PAUSE_ANIMATIONS); + BIND_ENUM_CONSTANT(ENABLER_FREEZE_BODIES); BIND_ENUM_CONSTANT(ENABLER_PAUSE_PARTICLES); - BIND_ENUM_CONSTANT(ENABLER_PAUSE_ANIMATED_SPRITES); BIND_ENUM_CONSTANT(ENABLER_PARENT_PROCESS); - BIND_ENUM_CONSTANT(ENABLER_PARENT_FIXED_PROCESS); + BIND_ENUM_CONSTANT(ENABLER_PARENT_PHYSICS_PROCESS); + BIND_ENUM_CONSTANT(ENABLER_PAUSE_ANIMATED_SPRITES); BIND_ENUM_CONSTANT(ENABLER_MAX); } @@ -366,7 +366,7 @@ VisibilityEnabler2D::VisibilityEnabler2D() { for (int i = 0; i < ENABLER_MAX; i++) enabler[i] = true; enabler[ENABLER_PARENT_PROCESS] = false; - enabler[ENABLER_PARENT_FIXED_PROCESS] = false; + enabler[ENABLER_PARENT_PHYSICS_PROCESS] = false; visible = false; } diff --git a/scene/2d/visibility_notifier_2d.h b/scene/2d/visibility_notifier_2d.h index ef0e1affd3..ee5152978b 100644 --- a/scene/2d/visibility_notifier_2d.h +++ b/scene/2d/visibility_notifier_2d.h @@ -74,7 +74,7 @@ public: ENABLER_FREEZE_BODIES, ENABLER_PAUSE_PARTICLES, ENABLER_PARENT_PROCESS, - ENABLER_PARENT_FIXED_PROCESS, + ENABLER_PARENT_PHYSICS_PROCESS, ENABLER_PAUSE_ANIMATED_SPRITES, ENABLER_MAX }; diff --git a/scene/3d/SCsub b/scene/3d/SCsub index 90e78ba8d3..72739b527e 100644 --- a/scene/3d/SCsub +++ b/scene/3d/SCsub @@ -3,7 +3,7 @@ Import('env') -if (env["disable_3d"] == "yes"): +if env['disable_3d']: env.scene_sources.append("3d/spatial.cpp") env.scene_sources.append("3d/skeleton.cpp") diff --git a/scene/3d/arvr_nodes.cpp b/scene/3d/arvr_nodes.cpp index 147d3bf115..064a249190 100644 --- a/scene/3d/arvr_nodes.cpp +++ b/scene/3d/arvr_nodes.cpp @@ -67,6 +67,105 @@ String ARVRCamera::get_configuration_warning() const { return String(); }; +Vector3 ARVRCamera::project_local_ray_normal(const Point2 &p_pos) const { + // get our ARVRServer + ARVRServer *arvr_server = ARVRServer::get_singleton(); + ERR_FAIL_NULL_V(arvr_server, Vector3()); + + Ref<ARVRInterface> arvr_interface = arvr_server->get_primary_interface(); + ERR_FAIL_COND_V(arvr_interface.is_null(), Vector3()); + + if (!is_inside_tree()) { + ERR_EXPLAIN("Camera is not inside scene."); + ERR_FAIL_COND_V(!is_inside_tree(), Vector3()); + }; + + Size2 viewport_size = get_viewport()->get_camera_rect_size(); + Vector2 cpos = get_viewport()->get_camera_coords(p_pos); + Vector3 ray; + + CameraMatrix cm = arvr_interface->get_projection_for_eye(ARVRInterface::EYE_MONO, viewport_size.aspect(), get_znear(), get_zfar()); + float screen_w, screen_h; + cm.get_viewport_size(screen_w, screen_h); + ray = Vector3(((cpos.x / viewport_size.width) * 2.0 - 1.0) * screen_w, ((1.0 - (cpos.y / viewport_size.height)) * 2.0 - 1.0) * screen_h, -get_znear()).normalized(); + + return ray; +}; + +Point2 ARVRCamera::unproject_position(const Vector3 &p_pos) const { + // get our ARVRServer + ARVRServer *arvr_server = ARVRServer::get_singleton(); + ERR_FAIL_NULL_V(arvr_server, Vector2()); + + Ref<ARVRInterface> arvr_interface = arvr_server->get_primary_interface(); + ERR_FAIL_COND_V(arvr_interface.is_null(), Vector2()); + + if (!is_inside_tree()) { + ERR_EXPLAIN("Camera is not inside scene."); + ERR_FAIL_COND_V(!is_inside_tree(), Vector2()); + }; + + Size2 viewport_size = get_viewport()->get_visible_rect().size; + + CameraMatrix cm = arvr_interface->get_projection_for_eye(ARVRInterface::EYE_MONO, viewport_size.aspect(), get_znear(), get_zfar()); + + Plane p(get_camera_transform().xform_inv(p_pos), 1.0); + + p = cm.xform4(p); + p.normal /= p.d; + + Point2 res; + res.x = (p.normal.x * 0.5 + 0.5) * viewport_size.x; + res.y = (-p.normal.y * 0.5 + 0.5) * viewport_size.y; + + return res; +}; + +Vector3 ARVRCamera::project_position(const Point2 &p_point) const { + // get our ARVRServer + ARVRServer *arvr_server = ARVRServer::get_singleton(); + ERR_FAIL_NULL_V(arvr_server, Vector3()); + + Ref<ARVRInterface> arvr_interface = arvr_server->get_primary_interface(); + ERR_FAIL_COND_V(arvr_interface.is_null(), Vector3()); + + if (!is_inside_tree()) { + ERR_EXPLAIN("Camera is not inside scene."); + ERR_FAIL_COND_V(!is_inside_tree(), Vector3()); + }; + + Size2 viewport_size = get_viewport()->get_visible_rect().size; + + CameraMatrix cm = arvr_interface->get_projection_for_eye(ARVRInterface::EYE_MONO, viewport_size.aspect(), get_znear(), get_zfar()); + + Size2 vp_size; + cm.get_viewport_size(vp_size.x, vp_size.y); + + Vector2 point; + point.x = (p_point.x / viewport_size.x) * 2.0 - 1.0; + point.y = (1.0 - (p_point.y / viewport_size.y)) * 2.0 - 1.0; + point *= vp_size; + + Vector3 p(point.x, point.y, -get_znear()); + + return get_camera_transform().xform(p); +}; + +Vector<Plane> ARVRCamera::get_frustum() const { + // get our ARVRServer + ARVRServer *arvr_server = ARVRServer::get_singleton(); + ERR_FAIL_NULL_V(arvr_server, Vector<Plane>()); + + Ref<ARVRInterface> arvr_interface = arvr_server->get_primary_interface(); + ERR_FAIL_COND_V(arvr_interface.is_null(), Vector<Plane>()); + + ERR_FAIL_COND_V(!is_inside_world(), Vector<Plane>()); + + Size2 viewport_size = get_viewport()->get_visible_rect().size; + CameraMatrix cm = arvr_interface->get_projection_for_eye(ARVRInterface::EYE_MONO, viewport_size.aspect(), get_znear(), get_zfar()); + return cm.get_projection_planes(get_camera_transform()); +}; + ARVRCamera::ARVRCamera(){ // nothing to do here yet for now.. }; @@ -105,7 +204,7 @@ void ARVRController::_notification(int p_what) { int mask = 1; // check button states for (int i = 0; i < 16; i++) { - bool was_pressed = (button_states && mask) == mask; + bool was_pressed = (button_states & mask) == mask; bool is_pressed = Input::get_singleton()->is_joy_button_pressed(joy_id, i); if (!was_pressed && is_pressed) { @@ -237,6 +336,7 @@ String ARVRController::get_configuration_warning() const { ARVRController::ARVRController() { controller_id = 0; is_active = true; + button_states = 0; }; ARVRController::~ARVRController(){ @@ -297,6 +397,8 @@ void ARVRAnchor::_bind_methods() { ClassDB::bind_method(D_METHOD("get_is_active"), &ARVRAnchor::get_is_active); ClassDB::bind_method(D_METHOD("get_size"), &ARVRAnchor::get_size); + + ClassDB::bind_method(D_METHOD("get_plane"), &ARVRAnchor::get_plane); }; void ARVRAnchor::set_anchor_id(int p_anchor_id) { @@ -346,6 +448,15 @@ String ARVRAnchor::get_configuration_warning() const { return String(); }; +Plane ARVRAnchor::get_plane() const { + Vector3 location = get_translation(); + Basis orientation = get_transform().basis; + + Plane plane(location, orientation.get_axis(1).normalized()); + + return plane; +}; + ARVRAnchor::ARVRAnchor() { anchor_id = 0; is_active = true; diff --git a/scene/3d/arvr_nodes.h b/scene/3d/arvr_nodes.h index 5269ec0248..e0ccfab58b 100644 --- a/scene/3d/arvr_nodes.h +++ b/scene/3d/arvr_nodes.h @@ -52,6 +52,11 @@ protected: public: String get_configuration_warning() const; + virtual Vector3 project_local_ray_normal(const Point2 &p_pos) const; + virtual Point2 unproject_position(const Vector3 &p_pos) const; + virtual Vector3 project_position(const Point2 &p_point) const; + virtual Vector<Plane> get_frustum() const; + ARVRCamera(); ~ARVRCamera(); }; @@ -118,6 +123,8 @@ public: bool get_is_active() const; Vector3 get_size() const; + Plane get_plane() const; + String get_configuration_warning() const; ARVRAnchor(); diff --git a/scene/3d/audio_stream_player_3d.cpp b/scene/3d/audio_stream_player_3d.cpp index b8c6a86f55..ad1a15f363 100644 --- a/scene/3d/audio_stream_player_3d.cpp +++ b/scene/3d/audio_stream_player_3d.cpp @@ -214,7 +214,7 @@ void AudioStreamPlayer3D::_notification(int p_what) { } } - if (p_what == NOTIFICATION_INTERNAL_FIXED_PROCESS) { + if (p_what == NOTIFICATION_INTERNAL_PHYSICS_PROCESS) { //update anything related to position first, if possible of course @@ -512,7 +512,7 @@ void AudioStreamPlayer3D::_notification(int p_what) { //stop playing if no longer active if (!active) { - set_fixed_process_internal(false); + set_physics_process_internal(false); //do not update, this makes it easier to animate (will shut off otherise) //_change_notify("playing"); //update property in editor emit_signal("finished"); @@ -582,7 +582,7 @@ void AudioStreamPlayer3D::play(float p_from_pos) { if (stream_playback.is_valid()) { setplay = p_from_pos; output_ready = false; - set_fixed_process_internal(true); + set_physics_process_internal(true); } } @@ -597,7 +597,7 @@ void AudioStreamPlayer3D::stop() { if (stream_playback.is_valid()) { active = false; - set_fixed_process_internal(false); + set_physics_process_internal(false); setplay = -1; } } @@ -611,10 +611,10 @@ bool AudioStreamPlayer3D::is_playing() const { return false; } -float AudioStreamPlayer3D::get_pos() { +float AudioStreamPlayer3D::get_playback_position() { if (stream_playback.is_valid()) { - return stream_playback->get_pos(); + return stream_playback->get_playback_position(); } return 0; @@ -776,7 +776,7 @@ void AudioStreamPlayer3D::set_doppler_tracking(DopplerTracking p_tracking) { if (doppler_tracking != DOPPLER_TRACKING_DISABLED) { set_notify_transform(true); - velocity_tracker->set_track_fixed_step(doppler_tracking == DOPPLER_TRACKING_FIXED_STEP); + velocity_tracker->set_track_physics_step(doppler_tracking == DOPPLER_TRACKING_PHYSICS_STEP); velocity_tracker->reset(get_global_transform().origin); } else { set_notify_transform(false); @@ -802,12 +802,12 @@ void AudioStreamPlayer3D::_bind_methods() { ClassDB::bind_method(D_METHOD("set_max_db", "max_db"), &AudioStreamPlayer3D::set_max_db); ClassDB::bind_method(D_METHOD("get_max_db"), &AudioStreamPlayer3D::get_max_db); - ClassDB::bind_method(D_METHOD("play", "from_pos"), &AudioStreamPlayer3D::play, DEFVAL(0.0)); - ClassDB::bind_method(D_METHOD("seek", "to_pos"), &AudioStreamPlayer3D::seek); + ClassDB::bind_method(D_METHOD("play", "from_position"), &AudioStreamPlayer3D::play, DEFVAL(0.0)); + ClassDB::bind_method(D_METHOD("seek", "to_position"), &AudioStreamPlayer3D::seek); ClassDB::bind_method(D_METHOD("stop"), &AudioStreamPlayer3D::stop); ClassDB::bind_method(D_METHOD("is_playing"), &AudioStreamPlayer3D::is_playing); - ClassDB::bind_method(D_METHOD("get_pos"), &AudioStreamPlayer3D::get_pos); + ClassDB::bind_method(D_METHOD("get_playback_position"), &AudioStreamPlayer3D::get_playback_position); ClassDB::bind_method(D_METHOD("set_bus", "bus"), &AudioStreamPlayer3D::set_bus); ClassDB::bind_method(D_METHOD("get_bus"), &AudioStreamPlayer3D::get_bus); @@ -869,7 +869,7 @@ void AudioStreamPlayer3D::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::REAL, "attenuation_filter_cutoff_hz", PROPERTY_HINT_RANGE, "50,50000,1"), "set_attenuation_filter_cutoff_hz", "get_attenuation_filter_cutoff_hz"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "attenuation_filter_db", PROPERTY_HINT_RANGE, "-80,0,0.1"), "set_attenuation_filter_db", "get_attenuation_filter_db"); ADD_GROUP("Doppler", "doppler_"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "doppler_tracking", PROPERTY_HINT_ENUM, "Disabled,Idle,Fixed"), "set_doppler_tracking", "get_doppler_tracking"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "doppler_tracking", PROPERTY_HINT_ENUM, "Disabled,Idle,Physics"), "set_doppler_tracking", "get_doppler_tracking"); BIND_ENUM_CONSTANT(ATTENUATION_INVERSE_DISTANCE); BIND_ENUM_CONSTANT(ATTENUATION_INVERSE_SQUARE_DISTANCE); @@ -880,7 +880,7 @@ void AudioStreamPlayer3D::_bind_methods() { BIND_ENUM_CONSTANT(DOPPLER_TRACKING_DISABLED); BIND_ENUM_CONSTANT(DOPPLER_TRACKING_IDLE_STEP); - BIND_ENUM_CONSTANT(DOPPLER_TRACKING_FIXED_STEP); + BIND_ENUM_CONSTANT(DOPPLER_TRACKING_PHYSICS_STEP); ADD_SIGNAL(MethodInfo("finished")); } diff --git a/scene/3d/audio_stream_player_3d.h b/scene/3d/audio_stream_player_3d.h index b729b55f7e..5982d7a3ac 100644 --- a/scene/3d/audio_stream_player_3d.h +++ b/scene/3d/audio_stream_player_3d.h @@ -26,7 +26,7 @@ public: enum DopplerTracking { DOPPLER_TRACKING_DISABLED, DOPPLER_TRACKING_IDLE_STEP, - DOPPLER_TRACKING_FIXED_STEP + DOPPLER_TRACKING_PHYSICS_STEP }; private: @@ -127,7 +127,7 @@ public: void seek(float p_seconds); void stop(); bool is_playing() const; - float get_pos(); + float get_playback_position(); void set_bus(const StringName &p_bus); StringName get_bus() const; diff --git a/scene/3d/camera.cpp b/scene/3d/camera.cpp index 02a7845e0b..8c7d0c23c3 100644 --- a/scene/3d/camera.cpp +++ b/scene/3d/camera.cpp @@ -175,7 +175,7 @@ void Camera::_get_property_list(List<PropertyInfo> *p_list) const { p_list->push_back(PropertyInfo(Variant::OBJECT, "environment", PROPERTY_HINT_RESOURCE_TYPE, "Environment")); p_list->push_back(PropertyInfo(Variant::REAL, "h_offset")); p_list->push_back(PropertyInfo(Variant::REAL, "v_offset")); - p_list->push_back(PropertyInfo(Variant::INT, "doppler/tracking", PROPERTY_HINT_ENUM, "Disabled,Idle,Fixed")); + p_list->push_back(PropertyInfo(Variant::INT, "doppler/tracking", PROPERTY_HINT_ENUM, "Disabled,Idle,Physics")); } void Camera::_update_camera() { @@ -507,7 +507,7 @@ void Camera::set_doppler_tracking(DopplerTracking p_tracking) { doppler_tracking = p_tracking; if (p_tracking != DOPPLER_TRACKING_DISABLED) { - velocity_tracker->set_track_fixed_step(doppler_tracking == DOPPLER_TRACKING_FIXED_STEP); + velocity_tracker->set_track_physics_step(doppler_tracking == DOPPLER_TRACKING_PHYSICS_STEP); velocity_tracker->reset(get_global_transform().origin); } } @@ -557,7 +557,7 @@ void Camera::_bind_methods() { BIND_ENUM_CONSTANT(DOPPLER_TRACKING_DISABLED) BIND_ENUM_CONSTANT(DOPPLER_TRACKING_IDLE_STEP) - BIND_ENUM_CONSTANT(DOPPLER_TRACKING_FIXED_STEP) + BIND_ENUM_CONSTANT(DOPPLER_TRACKING_PHYSICS_STEP) } float Camera::get_fov() const { diff --git a/scene/3d/camera.h b/scene/3d/camera.h index 243a7b9b39..73c6844c1a 100644 --- a/scene/3d/camera.h +++ b/scene/3d/camera.h @@ -56,7 +56,7 @@ public: enum DopplerTracking { DOPPLER_TRACKING_DISABLED, DOPPLER_TRACKING_IDLE_STEP, - DOPPLER_TRACKING_FIXED_STEP + DOPPLER_TRACKING_PHYSICS_STEP }; private: @@ -127,16 +127,16 @@ public: virtual Transform get_camera_transform() const; Vector3 project_ray_normal(const Point2 &p_pos) const; - Vector3 project_ray_origin(const Point2 &p_pos) const; + virtual Vector3 project_ray_origin(const Point2 &p_pos) const; Vector3 project_local_ray_normal(const Point2 &p_pos) const; - Point2 unproject_position(const Vector3 &p_pos) const; + virtual Point2 unproject_position(const Vector3 &p_pos) const; bool is_position_behind(const Vector3 &p_pos) const; - Vector3 project_position(const Point2 &p_point) const; + virtual Vector3 project_position(const Point2 &p_point) const; void set_cull_mask(uint32_t p_layers); uint32_t get_cull_mask() const; - Vector<Plane> get_frustum() const; + virtual Vector<Plane> get_frustum() const; void set_environment(const Ref<Environment> &p_environment); Ref<Environment> get_environment() const; diff --git a/scene/3d/collision_object.cpp b/scene/3d/collision_object.cpp index c121ef4566..7b4770e435 100644 --- a/scene/3d/collision_object.cpp +++ b/scene/3d/collision_object.cpp @@ -145,9 +145,9 @@ void CollisionObject::_bind_methods() { ClassDB::bind_method(D_METHOD("shape_owner_clear_shapes", "owner_id"), &CollisionObject::shape_owner_clear_shapes); ClassDB::bind_method(D_METHOD("shape_find_owner", "shape_index"), &CollisionObject::shape_find_owner); - BIND_VMETHOD(MethodInfo("_input_event", PropertyInfo(Variant::OBJECT, "camera"), PropertyInfo(Variant::OBJECT, "event", PROPERTY_HINT_RESOURCE_TYPE, "InputEvent"), PropertyInfo(Variant::VECTOR3, "click_pos"), PropertyInfo(Variant::VECTOR3, "click_normal"), PropertyInfo(Variant::INT, "shape_idx"))); + BIND_VMETHOD(MethodInfo("_input_event", PropertyInfo(Variant::OBJECT, "camera"), PropertyInfo(Variant::OBJECT, "event", PROPERTY_HINT_RESOURCE_TYPE, "InputEvent"), PropertyInfo(Variant::VECTOR3, "click_position"), PropertyInfo(Variant::VECTOR3, "click_normal"), PropertyInfo(Variant::INT, "shape_idx"))); - ADD_SIGNAL(MethodInfo("input_event", PropertyInfo(Variant::OBJECT, "camera"), PropertyInfo(Variant::OBJECT, "event", PROPERTY_HINT_RESOURCE_TYPE, "InputEvent"), PropertyInfo(Variant::VECTOR3, "click_pos"), PropertyInfo(Variant::VECTOR3, "click_normal"), PropertyInfo(Variant::INT, "shape_idx"))); + ADD_SIGNAL(MethodInfo("input_event", PropertyInfo(Variant::OBJECT, "camera"), PropertyInfo(Variant::OBJECT, "event", PROPERTY_HINT_RESOURCE_TYPE, "InputEvent"), PropertyInfo(Variant::VECTOR3, "click_position"), PropertyInfo(Variant::VECTOR3, "click_normal"), PropertyInfo(Variant::INT, "shape_idx"))); ADD_SIGNAL(MethodInfo("mouse_entered")); ADD_SIGNAL(MethodInfo("mouse_exited")); @@ -161,7 +161,7 @@ uint32_t CollisionObject::create_shape_owner(Object *p_owner) { uint32_t id; if (shapes.size() == 0) { - id = 1; + id = 0; } else { id = shapes.back()->key() + 1; } diff --git a/scene/3d/gi_probe.cpp b/scene/3d/gi_probe.cpp index 66364d40f9..d5a030b35c 100644 --- a/scene/3d/gi_probe.cpp +++ b/scene/3d/gi_probe.cpp @@ -1478,6 +1478,7 @@ void GIProbe::_bind_methods() { BIND_ENUM_CONSTANT(SUBDIV_64); BIND_ENUM_CONSTANT(SUBDIV_128); BIND_ENUM_CONSTANT(SUBDIV_256); + BIND_ENUM_CONSTANT(SUBDIV_512); BIND_ENUM_CONSTANT(SUBDIV_MAX); } @@ -1486,8 +1487,8 @@ GIProbe::GIProbe() { subdiv = SUBDIV_128; dynamic_range = 4; energy = 1.0; - bias = 0.0; - normal_bias = 0.8; + bias = 1.5; + normal_bias = 0.0; propagation = 1.0; extents = Vector3(10, 10, 10); color_scan_cell_width = 4; diff --git a/scene/3d/immediate_geometry.cpp b/scene/3d/immediate_geometry.cpp index 64d3f4fcab..11f7efe066 100644 --- a/scene/3d/immediate_geometry.cpp +++ b/scene/3d/immediate_geometry.cpp @@ -149,7 +149,7 @@ void ImmediateGeometry::_bind_methods() { ClassDB::bind_method(D_METHOD("set_color", "color"), &ImmediateGeometry::set_color); ClassDB::bind_method(D_METHOD("set_uv", "uv"), &ImmediateGeometry::set_uv); ClassDB::bind_method(D_METHOD("set_uv2", "uv"), &ImmediateGeometry::set_uv2); - ClassDB::bind_method(D_METHOD("add_vertex", "pos"), &ImmediateGeometry::add_vertex); + ClassDB::bind_method(D_METHOD("add_vertex", "position"), &ImmediateGeometry::add_vertex); ClassDB::bind_method(D_METHOD("add_sphere", "lats", "lons", "radius", "add_uv"), &ImmediateGeometry::add_sphere, DEFVAL(true)); ClassDB::bind_method(D_METHOD("end"), &ImmediateGeometry::end); ClassDB::bind_method(D_METHOD("clear"), &ImmediateGeometry::clear); diff --git a/scene/3d/immediate_geometry.h b/scene/3d/immediate_geometry.h index 6db825bf54..93ef726c6d 100644 --- a/scene/3d/immediate_geometry.h +++ b/scene/3d/immediate_geometry.h @@ -38,7 +38,7 @@ class ImmediateGeometry : public GeometryInstance { GDCLASS(ImmediateGeometry, GeometryInstance); RID im; - //a list of texures drawn need to be kept, to avoid references + //a list of textures drawn need to be kept, to avoid references // in VisualServer from becoming invalid if the texture is no longer used List<Ref<Texture> > cached_textures; bool empty; diff --git a/scene/3d/interpolated_camera.cpp b/scene/3d/interpolated_camera.cpp index 0f281b694d..3ff8317732 100644 --- a/scene/3d/interpolated_camera.cpp +++ b/scene/3d/interpolated_camera.cpp @@ -37,7 +37,7 @@ void InterpolatedCamera::_notification(int p_what) { case NOTIFICATION_ENTER_TREE: { if (Engine::get_singleton()->is_editor_hint() && enabled) - set_fixed_process(false); + set_physics_process(false); } break; case NOTIFICATION_PROCESS: { diff --git a/scene/3d/light.cpp b/scene/3d/light.cpp index 7402e664d9..e994f4c79e 100644 --- a/scene/3d/light.cpp +++ b/scene/3d/light.cpp @@ -248,7 +248,7 @@ void Light::_bind_methods() { BIND_ENUM_CONSTANT(PARAM_SHADOW_SPLIT_3_OFFSET); BIND_ENUM_CONSTANT(PARAM_SHADOW_NORMAL_BIAS); BIND_ENUM_CONSTANT(PARAM_SHADOW_BIAS); - + BIND_ENUM_CONSTANT(PARAM_SHADOW_BIAS_SPLIT_SCALE); BIND_ENUM_CONSTANT(PARAM_MAX); } @@ -369,6 +369,12 @@ DirectionalLight::DirectionalLight() set_shadow_depth_range(SHADOW_DEPTH_RANGE_STABLE); blend_splits = false; + +#ifdef TOOLS_ENABLED + if (Engine::get_singleton()->is_editor_hint()) + // Create light with a default natural "sun" orientation in editor, instead of looking horizontally on X + set_rotation_in_degrees(Vector3(-50, 25, 30)); +#endif } void OmniLight::set_shadow_mode(ShadowMode p_mode) { diff --git a/scene/3d/navigation.cpp b/scene/3d/navigation.cpp index d8c7a78648..b226cca02b 100644 --- a/scene/3d/navigation.cpp +++ b/scene/3d/navigation.cpp @@ -35,8 +35,6 @@ void Navigation::_navmesh_link(int p_id) { NavMesh &nm = navmesh_map[p_id]; ERR_FAIL_COND(nm.linked); - print_line("LINK"); - PoolVector<Vector3> vertices = nm.navmesh->get_vertices(); int len = vertices.size(); if (len == 0) @@ -144,8 +142,6 @@ void Navigation::_navmesh_unlink(int p_id) { NavMesh &nm = navmesh_map[p_id]; ERR_FAIL_COND(!nm.linked); - print_line("UNLINK"); - for (List<Polygon>::Element *E = nm.polygons.front(); E; E = E->next()) { Polygon &p = E->get(); diff --git a/scene/3d/particles.cpp b/scene/3d/particles.cpp index 80c706898d..4e19214c59 100644 --- a/scene/3d/particles.cpp +++ b/scene/3d/particles.cpp @@ -462,8 +462,6 @@ void ParticlesMaterial::finish_shaders() { void ParticlesMaterial::_update_shader() { - print_line("updating shader"); - dirty_materials.remove(&element); MaterialKey mk = _compute_key(); @@ -587,298 +585,294 @@ void ParticlesMaterial::_update_shader() { //need a random function code += "\n\n"; code += "float rand_from_seed(inout uint seed) {\n"; - code += " int k;\n"; - code += " int s = int(seed);\n"; - code += " if (s == 0)\n"; + code += " int k;\n"; + code += " int s = int(seed);\n"; + code += " if (s == 0)\n"; code += " s = 305420679;\n"; - code += " k = s / 127773;\n"; - code += " s = 16807 * (s - k * 127773) - 2836 * k;\n"; - code += " if (s < 0)\n"; - code += " s += 2147483647;\n"; - code += " seed = uint(s);\n"; - code += " return float(seed % uint(65536))/65535.0;\n"; + code += " k = s / 127773;\n"; + code += " s = 16807 * (s - k * 127773) - 2836 * k;\n"; + code += " if (s < 0)\n"; + code += " s += 2147483647;\n"; + code += " seed = uint(s);\n"; + code += " return float(seed % uint(65536))/65535.0;\n"; code += "}\n"; + code += "\n"; + //improve seed quality code += "uint hash(uint x) {\n"; - code += " x = ((x >> uint(16)) ^ x) * uint(73244475);\n"; - code += " x = ((x >> uint(16)) ^ x) * uint(73244475);\n"; - code += " x = (x >> uint(16)) ^ x;\n"; - code += " return x;\n"; + code += " x = ((x >> uint(16)) ^ x) * uint(73244475);\n"; + code += " x = ((x >> uint(16)) ^ x) * uint(73244475);\n"; + code += " x = (x >> uint(16)) ^ x;\n"; + code += " return x;\n"; code += "}\n"; - code += "void vertex() {\n\n"; code += "\n"; - code += " uint base_number=NUMBER/uint(trail_divisor);\n"; - code += " uint alt_seed=hash(base_number+uint(1)+RANDOM_SEED);\n"; - code += " float angle_rand=rand_from_seed(alt_seed);\n"; - code += " float scale_rand=rand_from_seed(alt_seed);\n"; - code += " float hue_rot_rand=rand_from_seed(alt_seed);\n"; - code += " float anim_offset_rand=rand_from_seed(alt_seed);\n"; - code += "\n"; - code += "\n"; - code += "\n"; + code += "void vertex() {\n"; + code += " uint base_number = NUMBER/uint(trail_divisor);\n"; + code += " uint alt_seed = hash(base_number+uint(1)+RANDOM_SEED);\n"; + code += " float angle_rand = rand_from_seed(alt_seed);\n"; + code += " float scale_rand = rand_from_seed(alt_seed);\n"; + code += " float hue_rot_rand = rand_from_seed(alt_seed);\n"; + code += " float anim_offset_rand = rand_from_seed(alt_seed);\n"; code += "\n"; + if (emission_shape >= EMISSION_SHAPE_POINTS) { - code += " int point = min(emission_texture_point_count-1,int(rand_from_seed(alt_seed) * float(emission_texture_point_count)));\n"; - code += " ivec2 emission_tex_size = textureSize( emission_texture_points, 0 );\n"; - code += " ivec2 emission_tex_ofs = ivec2( point % emission_tex_size.x, point / emission_tex_size.x );\n"; + code += " int point = min(emission_texture_point_count-1,int(rand_from_seed(alt_seed) * float(emission_texture_point_count)));\n"; + code += " ivec2 emission_tex_size = textureSize( emission_texture_points, 0 );\n"; + code += " ivec2 emission_tex_ofs = ivec2( point % emission_tex_size.x, point / emission_tex_size.x );\n"; } - code += " if (RESTART) {\n"; + code += " if (RESTART) {\n"; if (tex_parameters[PARAM_INITIAL_LINEAR_VELOCITY].is_valid()) - code += " float tex_linear_velocity = textureLod(linear_velocity_texture,vec2(0.0,0.0),0.0).r;\n"; + code += " float tex_linear_velocity = textureLod(linear_velocity_texture,vec2(0.0,0.0),0.0).r;\n"; else - code += " float tex_linear_velocity = 0.0;\n"; + code += " float tex_linear_velocity = 0.0;\n"; if (tex_parameters[PARAM_ANGLE].is_valid()) - code += " float tex_angle = textureLod(angle_texture,vec2(0.0,0.0),0.0).r;\n"; + code += " float tex_angle = textureLod(angle_texture,vec2(0.0,0.0),0.0).r;\n"; else - code += " float tex_angle = 0.0;\n"; + code += " float tex_angle = 0.0;\n"; if (tex_parameters[PARAM_ANIM_OFFSET].is_valid()) - code += " float tex_anim_offset = textureLod(anim_offset_texture,vec2(0.0,0.0),0.0).r;\n"; + code += " float tex_anim_offset = textureLod(anim_offset_texture,vec2(0.0,0.0),0.0).r;\n"; else - code += " float tex_anim_offset = 0.0;\n"; + code += " float tex_anim_offset = 0.0;\n"; if (flags[FLAG_DISABLE_Z]) { - code += " float angle1 = (rand_from_seed(alt_seed)*2.0-1.0)*spread/180.0*3.1416;\n"; - code += " vec3 rot=vec3( cos(angle1), sin(angle1),0.0 );\n"; - code += " VELOCITY=(rot*initial_linear_velocity+rot*initial_linear_velocity_random*rand_from_seed(alt_seed));\n"; + code += " float angle1 = (rand_from_seed(alt_seed)*2.0-1.0)*spread/180.0*3.1416;\n"; + code += " vec3 rot = vec3( cos(angle1), sin(angle1),0.0 );\n"; + code += " VELOCITY = (rot*initial_linear_velocity+rot*initial_linear_velocity_random*rand_from_seed(alt_seed));\n"; } else { //initiate velocity spread in 3D - code += " float angle1 = rand_from_seed(alt_seed)*spread*3.1416;\n"; - code += " float angle2 = rand_from_seed(alt_seed)*20.0*3.1416; // make it more random like\n"; - code += " vec3 rot_xz=vec3( sin(angle1), 0.0, cos(angle1) );\n"; - code += " vec3 rot = vec3( cos(angle2)*rot_xz.x,sin(angle2)*rot_xz.x, rot_xz.z);\n"; - code += " VELOCITY=(rot*initial_linear_velocity+rot*initial_linear_velocity_random*rand_from_seed(alt_seed));\n"; + code += " float angle1 = rand_from_seed(alt_seed)*spread*3.1416;\n"; + code += " float angle2 = rand_from_seed(alt_seed)*20.0*3.1416; // make it more random like\n"; + code += " vec3 rot_xz = vec3( sin(angle1), 0.0, cos(angle1) );\n"; + code += " vec3 rot = vec3( cos(angle2)*rot_xz.x,sin(angle2)*rot_xz.x, rot_xz.z);\n"; + code += " VELOCITY = (rot*initial_linear_velocity+rot*initial_linear_velocity_random*rand_from_seed(alt_seed));\n"; } - code += " float base_angle=(initial_angle+tex_angle)*mix(1.0,angle_rand,initial_angle_random);\n"; - code += " CUSTOM.x=base_angle*3.1416/180.0;\n"; //angle - code += " CUSTOM.y=0.0;\n"; //phase - code += " CUSTOM.z=(anim_offset+tex_anim_offset)*mix(1.0,anim_offset_rand,anim_offset_random);\n"; //animation offset (0-1) + code += " float base_angle = (initial_angle+tex_angle)*mix(1.0,angle_rand,initial_angle_random);\n"; + code += " CUSTOM.x = base_angle*3.1416/180.0;\n"; //angle + code += " CUSTOM.y = 0.0;\n"; //phase + code += " CUSTOM.z = (anim_offset+tex_anim_offset)*mix(1.0,anim_offset_rand,anim_offset_random);\n"; //animation offset (0-1) switch (emission_shape) { case EMISSION_SHAPE_POINT: { //do none } break; case EMISSION_SHAPE_SPHERE: { - code += " TRANSFORM[3].xyz = normalize(vec3(rand_from_seed(alt_seed) * 2.0 - 1.0, rand_from_seed(alt_seed) * 2.0-1.0, rand_from_seed(alt_seed) * 2.0-1.0 ))*emission_sphere_radius;\n"; + code += " TRANSFORM[3].xyz = normalize(vec3(rand_from_seed(alt_seed) * 2.0 - 1.0, rand_from_seed(alt_seed) * 2.0-1.0, rand_from_seed(alt_seed) * 2.0-1.0 ))*emission_sphere_radius;\n"; } break; case EMISSION_SHAPE_BOX: { - code += " TRANSFORM[3].xyz = vec3(rand_from_seed(alt_seed) * 2.0 - 1.0, rand_from_seed(alt_seed) * 2.0-1.0, rand_from_seed(alt_seed) * 2.0-1.0)*emission_box_extents;\n"; + code += " TRANSFORM[3].xyz = vec3(rand_from_seed(alt_seed) * 2.0 - 1.0, rand_from_seed(alt_seed) * 2.0-1.0, rand_from_seed(alt_seed) * 2.0-1.0)*emission_box_extents;\n"; } break; case EMISSION_SHAPE_POINTS: case EMISSION_SHAPE_DIRECTED_POINTS: { - code += " TRANSFORM[3].xyz = texelFetch(emission_texture_points, emission_tex_ofs,0).xyz;\n"; + code += " TRANSFORM[3].xyz = texelFetch(emission_texture_points, emission_tex_ofs,0).xyz;\n"; if (emission_shape == EMISSION_SHAPE_DIRECTED_POINTS) { if (flags[FLAG_DISABLE_Z]) { - code += " mat2 rotm;"; - code += " rotm[0]=texelFetch(emission_texture_normal, emission_tex_ofs,0).xy;\n"; - code += " rotm[1]=rotm[0].yx * vec2(1.0,-1.0);\n"; - code += " VELOCITY.xy = rotm * VELOCITY.xy;\n"; + code += " mat2 rotm;"; + code += " rotm[0] = texelFetch(emission_texture_normal, emission_tex_ofs,0).xy;\n"; + code += " rotm[1] = rotm[0].yx * vec2(1.0,-1.0);\n"; + code += " VELOCITY.xy = rotm * VELOCITY.xy;\n"; } else { - code += " vec3 normal = texelFetch(emission_texture_normal, emission_tex_ofs,0).xyz;\n"; - code += " vec3 v0 = abs(normal.z) < 0.999 ? vec3(0.0, 0.0, 1.0) : vec3(0, 1.0, 0.0);\n"; - code += " vec3 tangent = normalize(cross(v0, normal));\n"; - code += " vec3 bitangent = normalize(cross(tangent, normal));\n"; - code += " VELOCITY = mat3(tangent,bitangent,normal) * VELOCITY;\n"; + code += " vec3 normal = texelFetch(emission_texture_normal, emission_tex_ofs,0).xyz;\n"; + code += " vec3 v0 = abs(normal.z) < 0.999 ? vec3(0.0, 0.0, 1.0) : vec3(0, 1.0, 0.0);\n"; + code += " vec3 tangent = normalize(cross(v0, normal));\n"; + code += " vec3 bitangent = normalize(cross(tangent, normal));\n"; + code += " VELOCITY = mat3(tangent,bitangent,normal) * VELOCITY;\n"; } } } break; } - code += " VELOCITY = (EMISSION_TRANSFORM * vec4(VELOCITY,0.0)).xyz;\n"; - code += " TRANSFORM = EMISSION_TRANSFORM * TRANSFORM;\n"; + code += " VELOCITY = (EMISSION_TRANSFORM * vec4(VELOCITY,0.0)).xyz;\n"; + code += " TRANSFORM = EMISSION_TRANSFORM * TRANSFORM;\n"; if (flags[FLAG_DISABLE_Z]) { - code += " VELOCITY.z=0.0;\n"; - code += " TRANSFORM[3].z=0.0;\n"; + code += " VELOCITY.z = 0.0;\n"; + code += " TRANSFORM[3].z = 0.0;\n"; } - code += " } else {\n"; + code += " } else {\n"; - code += " CUSTOM.y+=DELTA/LIFETIME;\n"; + code += " CUSTOM.y += DELTA/LIFETIME;\n"; if (tex_parameters[PARAM_INITIAL_LINEAR_VELOCITY].is_valid()) - code += " float tex_linear_velocity = textureLod(linear_velocity_texture,vec2(CUSTOM.y,0.0),0.0).r;\n"; + code += " float tex_linear_velocity = textureLod(linear_velocity_texture,vec2(CUSTOM.y,0.0),0.0).r;\n"; else - code += " float tex_linear_velocity = 0.0;\n"; + code += " float tex_linear_velocity = 0.0;\n"; if (tex_parameters[PARAM_ORBIT_VELOCITY].is_valid()) - code += " float tex_orbit_velocity = textureLod(orbit_velocity_texture,vec2(CUSTOM.y,0.0),0.0).r;\n"; + code += " float tex_orbit_velocity = textureLod(orbit_velocity_texture,vec2(CUSTOM.y,0.0),0.0).r;\n"; else - code += " float tex_orbit_velocity = 0.0;\n"; + code += " float tex_orbit_velocity = 0.0;\n"; if (tex_parameters[PARAM_ANGULAR_VELOCITY].is_valid()) - code += " float tex_angular_velocity = textureLod(angular_velocity_texture,vec2(CUSTOM.y,0.0),0.0).r;\n"; + code += " float tex_angular_velocity = textureLod(angular_velocity_texture,vec2(CUSTOM.y,0.0),0.0).r;\n"; else - code += " float tex_angular_velocity = 0.0;\n"; + code += " float tex_angular_velocity = 0.0;\n"; if (tex_parameters[PARAM_LINEAR_ACCEL].is_valid()) - code += " float tex_linear_accel = textureLod(linear_accel_texture,vec2(CUSTOM.y,0.0),0.0).r;\n"; + code += " float tex_linear_accel = textureLod(linear_accel_texture,vec2(CUSTOM.y,0.0),0.0).r;\n"; else - code += " float tex_linear_accel = 0.0;\n"; + code += " float tex_linear_accel = 0.0;\n"; if (tex_parameters[PARAM_RADIAL_ACCEL].is_valid()) - code += " float tex_radial_accel = textureLod(radial_accel_texture,vec2(CUSTOM.y,0.0),0.0).r;\n"; + code += " float tex_radial_accel = textureLod(radial_accel_texture,vec2(CUSTOM.y,0.0),0.0).r;\n"; else - code += " float tex_radial_accel = 0.0;\n"; + code += " float tex_radial_accel = 0.0;\n"; if (tex_parameters[PARAM_TANGENTIAL_ACCEL].is_valid()) - code += " float tex_tangent_accel = textureLod(tangent_accel_texture,vec2(CUSTOM.y,0.0),0.0).r;\n"; + code += " float tex_tangent_accel = textureLod(tangent_accel_texture,vec2(CUSTOM.y,0.0),0.0).r;\n"; else - code += " float tex_tangent_accel = 0.0;\n"; + code += " float tex_tangent_accel = 0.0;\n"; if (tex_parameters[PARAM_DAMPING].is_valid()) - code += " float tex_damping = textureLod(damping_texture,vec2(CUSTOM.y,0.0),0.0).r;\n"; + code += " float tex_damping = textureLod(damping_texture,vec2(CUSTOM.y,0.0),0.0).r;\n"; else - code += " float tex_damping = 0.0;\n"; + code += " float tex_damping = 0.0;\n"; if (tex_parameters[PARAM_ANGLE].is_valid()) - code += " float tex_angle = textureLod(angle_texture,vec2(CUSTOM.y,0.0),0.0).r;\n"; + code += " float tex_angle = textureLod(angle_texture,vec2(CUSTOM.y,0.0),0.0).r;\n"; else - code += " float tex_angle = 0.0;\n"; + code += " float tex_angle = 0.0;\n"; if (tex_parameters[PARAM_ANIM_SPEED].is_valid()) - code += " float tex_anim_speed = textureLod(anim_speed_texture,vec2(CUSTOM.y,0.0),0.0).r;\n"; + code += " float tex_anim_speed = textureLod(anim_speed_texture,vec2(CUSTOM.y,0.0),0.0).r;\n"; else - code += " float tex_anim_speed = 0.0;\n"; + code += " float tex_anim_speed = 0.0;\n"; if (tex_parameters[PARAM_ANIM_OFFSET].is_valid()) - code += " float tex_anim_offset = textureLod(anim_offset_texture,vec2(CUSTOM.y,0.0),0.0).r;\n"; + code += " float tex_anim_offset = textureLod(anim_offset_texture,vec2(CUSTOM.y,0.0),0.0).r;\n"; else - code += " float tex_anim_offset = 0.0;\n"; + code += " float tex_anim_offset = 0.0;\n"; - code += " vec3 force = gravity; \n"; - code += " vec3 pos = TRANSFORM[3].xyz; \n"; + code += " vec3 force = gravity; \n"; + code += " vec3 pos = TRANSFORM[3].xyz; \n"; if (flags[FLAG_DISABLE_Z]) { - code += " pos.z=0.0; \n"; + code += " pos.z = 0.0; \n"; } - code += " //apply linear acceleration\n"; - code += " force+= length(VELOCITY) > 0.0 ? normalize(VELOCITY) * (linear_accel+tex_linear_accel)*mix(1.0,rand_from_seed(alt_seed),linear_accel_random) : vec3(0.0);\n"; - code += " //apply radial acceleration\n"; - code += " vec3 org = vec3(0.0);\n"; - code += " // if (!p_system->local_coordinates)\n"; - code += " //org=p_transform.origin;\n"; - code += " vec3 diff = pos-org;\n"; - code += " force+=length(diff) > 0.0 ? normalize(diff) * (radial_accel+tex_radial_accel)*mix(1.0,rand_from_seed(alt_seed),radial_accel_random) : vec3(0.0);\n"; - code += " //apply tangential acceleration;\n"; + code += " //apply linear acceleration\n"; + code += " force += length(VELOCITY) > 0.0 ? normalize(VELOCITY) * (linear_accel+tex_linear_accel)*mix(1.0,rand_from_seed(alt_seed),linear_accel_random) : vec3(0.0);\n"; + code += " //apply radial acceleration\n"; + code += " vec3 org = vec3(0.0);\n"; + code += " vec3 diff = pos-org;\n"; + code += " force += length(diff) > 0.0 ? normalize(diff) * (radial_accel+tex_radial_accel)*mix(1.0,rand_from_seed(alt_seed),radial_accel_random) : vec3(0.0);\n"; + code += " //apply tangential acceleration;\n"; if (flags[FLAG_DISABLE_Z]) { - code += " force+=length(diff.yx) > 0.0 ? vec3(normalize(diff.yx * vec2(-1.0,1.0)),0.0) * ((tangent_accel+tex_tangent_accel)*mix(1.0,rand_from_seed(alt_seed),radial_accel_random)) : vec3(0.0);\n"; + code += " force += length(diff.yx) > 0.0 ? vec3(normalize(diff.yx * vec2(-1.0,1.0)),0.0) * ((tangent_accel+tex_tangent_accel)*mix(1.0,rand_from_seed(alt_seed),radial_accel_random)) : vec3(0.0);\n"; } else { - code += " vec3 crossDiff = cross(normalize(diff),normalize(gravity));\n"; - code += " force+=length(crossDiff) > 0.0 ? normalize(crossDiff) * ((tangent_accel+tex_tangent_accel)*mix(1.0,rand_from_seed(alt_seed),radial_accel_random)) : vec3(0.0);\n"; + code += " vec3 crossDiff = cross(normalize(diff),normalize(gravity));\n"; + code += " force += length(crossDiff) > 0.0 ? normalize(crossDiff) * ((tangent_accel+tex_tangent_accel)*mix(1.0,rand_from_seed(alt_seed),radial_accel_random)) : vec3(0.0);\n"; } - code += " //apply attractor forces\n"; - code += " VELOCITY+=force * DELTA;\n"; + code += " //apply attractor forces\n"; + code += " VELOCITY += force * DELTA;\n"; if (tex_parameters[PARAM_INITIAL_LINEAR_VELOCITY].is_valid()) { - code += " VELOCITY=normalize(VELOCITY)*tex_linear_velocity;\n"; + code += " VELOCITY = normalize(VELOCITY)*tex_linear_velocity;\n"; } - code += " if (damping+tex_damping>0.0) {\n"; - code += " \n"; - code += " float v = length(VELOCITY);\n"; - code += " float damp = (damping+tex_damping)*mix(1.0,rand_from_seed(alt_seed),damping_random);\n"; - code += " v -= damp * DELTA;\n"; - code += " if (v<0.0) {\n"; - code += " VELOCITY=vec3(0.0);\n"; - code += " } else {\n"; - code += " VELOCITY=normalize(VELOCITY) * v;\n"; - code += " }\n"; - code += " }\n"; - code += " float base_angle=(initial_angle+tex_angle)*mix(1.0,angle_rand,initial_angle_random);\n"; - code += " base_angle+=CUSTOM.y*LIFETIME*(angular_velocity+tex_angular_velocity)*mix(1.0,rand_from_seed(alt_seed)*2.0-1.0,angular_velocity_random);\n"; - code += " CUSTOM.x=base_angle*3.1416/180.0;\n"; //angle - code += " CUSTOM.z=(anim_offset+tex_anim_offset)*mix(1.0,anim_offset_rand,anim_offset_random)+CUSTOM.y*(anim_speed+tex_anim_speed)*mix(1.0,rand_from_seed(alt_seed),anim_speed_random);\n"; //angle + code += " if (damping + tex_damping > 0.0) {\n"; + code += " \n"; + code += " float v = length(VELOCITY);\n"; + code += " float damp = (damping+tex_damping)*mix(1.0,rand_from_seed(alt_seed),damping_random);\n"; + code += " v -= damp * DELTA;\n"; + code += " if (v < 0.0) {\n"; + code += " VELOCITY = vec3(0.0);\n"; + code += " } else {\n"; + code += " VELOCITY = normalize(VELOCITY) * v;\n"; + code += " }\n"; + code += " }\n"; + code += " float base_angle = (initial_angle+tex_angle)*mix(1.0,angle_rand,initial_angle_random);\n"; + code += " base_angle += CUSTOM.y*LIFETIME*(angular_velocity+tex_angular_velocity)*mix(1.0,rand_from_seed(alt_seed)*2.0-1.0,angular_velocity_random);\n"; + code += " CUSTOM.x = base_angle*3.1416/180.0;\n"; //angle + code += " CUSTOM.z = (anim_offset+tex_anim_offset)*mix(1.0,anim_offset_rand,anim_offset_random)+CUSTOM.y*(anim_speed+tex_anim_speed)*mix(1.0,rand_from_seed(alt_seed),anim_speed_random);\n"; //angle if (flags[FLAG_ANIM_LOOP]) { - code += " CUSTOM.z=mod(CUSTOM.z,1.0);\n"; //loop + code += " CUSTOM.z = mod(CUSTOM.z,1.0);\n"; //loop } else { - code += " CUSTOM.z=clamp(CUSTOM.z,0.0,1.0);\n"; //0 to 1 only + code += " CUSTOM.z = clamp(CUSTOM.z,0.0,1.0);\n"; //0 to 1 only } - code += " }\n"; + code += " }\n"; //apply color //apply hue rotation if (tex_parameters[PARAM_SCALE].is_valid()) - code += " float tex_scale = textureLod(scale_texture,vec2(CUSTOM.y,0.0),0.0).r;\n"; + code += " float tex_scale = textureLod(scale_texture,vec2(CUSTOM.y,0.0),0.0).r;\n"; else - code += " float tex_scale = 1.0;\n"; + code += " float tex_scale = 1.0;\n"; if (tex_parameters[PARAM_HUE_VARIATION].is_valid()) - code += " float tex_hue_variation = textureLod(hue_variation_texture,vec2(CUSTOM.y,0.0),0.0).r;\n"; + code += " float tex_hue_variation = textureLod(hue_variation_texture,vec2(CUSTOM.y,0.0),0.0).r;\n"; else - code += " float tex_hue_variation = 0.0;\n"; - - code += " float hue_rot_angle = (hue_variation+tex_hue_variation)*3.1416*2.0*mix(1.0,hue_rot_rand*2.0-1.0,hue_variation_random);\n"; - code += " float hue_rot_c = cos(hue_rot_angle);\n"; - code += " float hue_rot_s = sin(hue_rot_angle);\n"; - code += " mat4 hue_rot_mat = mat4( vec4(0.299, 0.587, 0.114, 0.0),\n"; - code += " vec4(0.299, 0.587, 0.114, 0.0),\n"; - code += " vec4(0.299, 0.587, 0.114, 0.0),\n"; - code += " vec4(0.000, 0.000, 0.000, 1.0)) +\n"; - code += " \n"; - code += " mat4( vec4(0.701, -0.587, -0.114, 0.0),\n"; - code += " vec4(-0.299, 0.413, -0.114, 0.0),\n"; - code += " vec4(-0.300, -0.588, 0.886, 0.0),\n"; - code += " vec4(0.000, 0.000, 0.000, 0.0)) * hue_rot_c +\n"; - code += "\n"; - code += " mat4( vec4(0.168, 0.330, -0.497, 0.0),\n"; - code += " vec4(-0.328, 0.035, 0.292, 0.0),\n"; - code += " vec4(1.250, -1.050, -0.203, 0.0),\n"; - code += " vec4(0.000, 0.000, 0.000, 0.0)) * hue_rot_s;\n"; + code += " float tex_hue_variation = 0.0;\n"; + + code += " float hue_rot_angle = (hue_variation+tex_hue_variation)*3.1416*2.0*mix(1.0,hue_rot_rand*2.0-1.0,hue_variation_random);\n"; + code += " float hue_rot_c = cos(hue_rot_angle);\n"; + code += " float hue_rot_s = sin(hue_rot_angle);\n"; + code += " mat4 hue_rot_mat = mat4( vec4(0.299, 0.587, 0.114, 0.0),\n"; + code += " vec4(0.299, 0.587, 0.114, 0.0),\n"; + code += " vec4(0.299, 0.587, 0.114, 0.0),\n"; + code += " vec4(0.000, 0.000, 0.000, 1.0)) +\n"; + code += " mat4( vec4(0.701, -0.587, -0.114, 0.0),\n"; + code += " vec4(-0.299, 0.413, -0.114, 0.0),\n"; + code += " vec4(-0.300, -0.588, 0.886, 0.0),\n"; + code += " vec4(0.000, 0.000, 0.000, 0.0)) * hue_rot_c +\n"; + code += " mat4( vec4(0.168, 0.330, -0.497, 0.0),\n"; + code += " vec4(-0.328, 0.035, 0.292, 0.0),\n"; + code += " vec4(1.250, -1.050, -0.203, 0.0),\n"; + code += " vec4(0.000, 0.000, 0.000, 0.0)) * hue_rot_s;\n"; if (color_ramp.is_valid()) { - code += " COLOR = textureLod(color_ramp,vec2(CUSTOM.y,0.0),0.0) * hue_rot_mat;\n"; + code += " COLOR = textureLod(color_ramp,vec2(CUSTOM.y,0.0),0.0) * hue_rot_mat;\n"; } else { - code += " COLOR = color_value * hue_rot_mat;\n"; + code += " COLOR = color_value * hue_rot_mat;\n"; } if (emission_color_texture.is_valid() && emission_shape >= EMISSION_SHAPE_POINTS) { - code += " COLOR*= texelFetch(emission_texture_color,emission_tex_ofs,0);\n"; + code += " COLOR*= texelFetch(emission_texture_color,emission_tex_ofs,0);\n"; } if (trail_color_modifier.is_valid()) { - code += "if (trail_divisor>1) { COLOR*=textureLod(trail_color_modifier,vec2(float(int(NUMBER)%trail_divisor)/float(trail_divisor-1),0.0),0.0); }\n"; + code += " if (trail_divisor > 1) { COLOR *= textureLod(trail_color_modifier,vec2(float(int(NUMBER)%trail_divisor)/float(trail_divisor-1),0.0),0.0); }\n"; } code += "\n"; if (flags[FLAG_DISABLE_Z]) { - code += " TRANSFORM[0]=vec4(cos(CUSTOM.x),-sin(CUSTOM.x),0.0,0.0);\n"; - code += " TRANSFORM[1]=vec4(sin(CUSTOM.x),cos(CUSTOM.x),0.0,0.0);\n"; - code += " TRANSFORM[2]=vec4(0.0,0.0,1.0,0.0);\n"; + code += " TRANSFORM[0] = vec4(cos(CUSTOM.x),-sin(CUSTOM.x),0.0,0.0);\n"; + code += " TRANSFORM[1] = vec4(sin(CUSTOM.x),cos(CUSTOM.x),0.0,0.0);\n"; + code += " TRANSFORM[2] = vec4(0.0,0.0,1.0,0.0);\n"; } else { //orient particle Y towards velocity if (flags[FLAG_ALIGN_Y_TO_VELOCITY]) { - code += " if (length(VELOCITY)>0.0) {TRANSFORM[1].xyz=normalize(VELOCITY);} else {TRANSFORM[1].xyz=normalize(TRANSFORM[1].xyz);}\n"; - code += " if (TRANSFORM[1].xyz==normalize(TRANSFORM[0].xyz)) {\n"; - code += "\tTRANSFORM[0].xyz=normalize(cross(normalize(TRANSFORM[1].xyz),normalize(TRANSFORM[2].xyz)));\n"; - code += "\tTRANSFORM[2].xyz=normalize(cross(normalize(TRANSFORM[0].xyz),normalize(TRANSFORM[1].xyz)));\n"; - code += " } else {\n"; - code += "\tTRANSFORM[2].xyz=normalize(cross(normalize(TRANSFORM[0].xyz),normalize(TRANSFORM[1].xyz)));\n"; - code += "\tTRANSFORM[0].xyz=normalize(cross(normalize(TRANSFORM[1].xyz),normalize(TRANSFORM[2].xyz)));\n"; - code += " }\n"; + code += " if (length(VELOCITY) > 0.0) { TRANSFORM[1].xyz = normalize(VELOCITY); } else { TRANSFORM[1].xyz = normalize(TRANSFORM[1].xyz); }\n"; + code += " if (TRANSFORM[1].xyz == normalize(TRANSFORM[0].xyz)) {\n"; + code += " TRANSFORM[0].xyz = normalize(cross(normalize(TRANSFORM[1].xyz),normalize(TRANSFORM[2].xyz)));\n"; + code += " TRANSFORM[2].xyz = normalize(cross(normalize(TRANSFORM[0].xyz),normalize(TRANSFORM[1].xyz)));\n"; + code += " } else {\n"; + code += " TRANSFORM[2].xyz = normalize(cross(normalize(TRANSFORM[0].xyz),normalize(TRANSFORM[1].xyz)));\n"; + code += " TRANSFORM[0].xyz = normalize(cross(normalize(TRANSFORM[1].xyz),normalize(TRANSFORM[2].xyz)));\n"; + code += " }\n"; } else { - code += "\tTRANSFORM[0].xyz=normalize(TRANSFORM[0].xyz);\n"; - code += "\tTRANSFORM[1].xyz=normalize(TRANSFORM[1].xyz);\n"; - code += "\tTRANSFORM[2].xyz=normalize(TRANSFORM[2].xyz);\n"; + code += " TRANSFORM[0].xyz = normalize(TRANSFORM[0].xyz);\n"; + code += " TRANSFORM[1].xyz = normalize(TRANSFORM[1].xyz);\n"; + code += " TRANSFORM[2].xyz = normalize(TRANSFORM[2].xyz);\n"; } //turn particle by rotation in Y if (flags[FLAG_ROTATE_Y]) { - code += "\tTRANSFORM = TRANSFORM * mat4( vec4(cos(CUSTOM.x),0.0,-sin(CUSTOM.x),0.0), vec4(0.0,1.0,0.0,0.0),vec4(sin(CUSTOM.x),0.0,cos(CUSTOM.x),0.0),vec4(0.0,0.0,0.0,1.0));\n"; + code += " TRANSFORM = TRANSFORM * mat4( vec4(cos(CUSTOM.x),0.0,-sin(CUSTOM.x),0.0), vec4(0.0,1.0,0.0,0.0),vec4(sin(CUSTOM.x),0.0,cos(CUSTOM.x),0.0),vec4(0.0,0.0,0.0,1.0));\n"; } } //scale by scale - code += " float base_scale=mix(scale*tex_scale,1.0,scale_random*scale_rand);\n"; + code += " float base_scale = mix(scale*tex_scale,1.0,scale_random*scale_rand);\n"; if (trail_size_modifier.is_valid()) { - code += "if (trail_divisor>1) { base_scale*=textureLod(trail_size_modifier,vec2(float(int(NUMBER)%trail_divisor)/float(trail_divisor-1),0.0),0.0).r; } \n"; + code += " if (trail_divisor > 1) { base_scale *= textureLod(trail_size_modifier,vec2(float(int(NUMBER)%trail_divisor)/float(trail_divisor-1),0.0),0.0).r; } \n"; } - code += " TRANSFORM[0].xyz*=base_scale;\n"; - code += " TRANSFORM[1].xyz*=base_scale;\n"; - code += " TRANSFORM[2].xyz*=base_scale;\n"; + code += " TRANSFORM[0].xyz *= base_scale;\n"; + code += " TRANSFORM[1].xyz *= base_scale;\n"; + code += " TRANSFORM[2].xyz *= base_scale;\n"; if (flags[FLAG_DISABLE_Z]) { - code += " VELOCITY.z=0.0;\n"; - code += " TRANSFORM[3].z=0.0;\n"; + code += " VELOCITY.z = 0.0;\n"; + code += " TRANSFORM[3].z = 0.0;\n"; } code += "}\n"; code += "\n"; @@ -913,9 +907,7 @@ void ParticlesMaterial::_queue_shader_change() { if (material_mutex) material_mutex->lock(); - print_line("queuing change"); if (!element.in_list()) { - print_line("not in list, adding"); dirty_materials.add(&element); } @@ -1329,6 +1321,12 @@ Vector3 ParticlesMaterial::get_gravity() const { return gravity; } +RID ParticlesMaterial::get_shader_rid() const { + + ERR_FAIL_COND_V(!shader_map.has(current_key), RID()); + return shader_map[current_key].shader; +} + void ParticlesMaterial::_validate_property(PropertyInfo &property) const { if (property.name == "color" && color_ramp.is_valid()) { diff --git a/scene/3d/particles.h b/scene/3d/particles.h index 2c109d6ec8..e3109f470f 100644 --- a/scene/3d/particles.h +++ b/scene/3d/particles.h @@ -388,6 +388,8 @@ public: static void finish_shaders(); static void flush_changes(); + RID get_shader_rid() const; + ParticlesMaterial(); ~ParticlesMaterial(); }; diff --git a/scene/3d/path.cpp b/scene/3d/path.cpp index 60245fe6ce..65f20210e1 100644 --- a/scene/3d/path.cpp +++ b/scene/3d/path.cpp @@ -85,9 +85,15 @@ void PathFollow::_update_transform() { if (!c.is_valid()) return; + if (delta_offset == 0) { + return; + } + float o = offset; - if (loop) + + if (loop) { o = Math::fposmod(o, c->get_baked_length()); + } Vector3 pos = c->interpolate_baked(o, cubic); Transform t = get_transform(); @@ -101,14 +107,14 @@ void PathFollow::_update_transform() { // see C. Dougan, The Parallel Transport Frame, Game Programming Gems 2 for example // for a discussion about why not Frenet frame. - Vector3 t_prev = pos - c->interpolate_baked(o - lookahead, cubic); - Vector3 t_cur = c->interpolate_baked(o + lookahead, cubic) - pos; + Vector3 t_prev = (pos - c->interpolate_baked(o - delta_offset, cubic)).normalized(); + Vector3 t_cur = (c->interpolate_baked(o + delta_offset, cubic) - pos).normalized(); Vector3 axis = t_prev.cross(t_cur); - float dot = t_prev.normalized().dot(t_cur.normalized()); + float dot = t_prev.dot(t_cur); float angle = Math::acos(CLAMP(dot, -1, 1)); - if (axis.length() > CMP_EPSILON && angle > CMP_EPSILON) { + if (likely(Math::abs(angle) > CMP_EPSILON)) { if (rotation_mode == ROTATION_Y) { // assuming we're referring to global Y-axis. is this correct? axis.x = 0; @@ -116,27 +122,31 @@ void PathFollow::_update_transform() { } else if (rotation_mode == ROTATION_XY) { axis.z = 0; } else if (rotation_mode == ROTATION_XYZ) { - // all components are OK + // all components are allowed } - t.rotate_basis(axis.normalized(), angle); + if (likely(axis.length() > CMP_EPSILON)) { + t.rotate_basis(axis.normalized(), angle); + } } // do the additional tilting float tilt_angle = c->interpolate_baked_tilt(o); - Vector3 tilt_axis = t_cur; // is this correct?? + Vector3 tilt_axis = t_cur; // not sure what tilt is supposed to do, is this correct?? - if (tilt_axis.length() > CMP_EPSILON && tilt_angle > CMP_EPSILON) { + if (likely(Math::abs(tilt_angle) > CMP_EPSILON)) { if (rotation_mode == ROTATION_Y) { tilt_axis.x = 0; tilt_axis.z = 0; } else if (rotation_mode == ROTATION_XY) { tilt_axis.z = 0; } else if (rotation_mode == ROTATION_XYZ) { - // all components are OK + // all components are allowed } - t.rotate_basis(tilt_axis.normalized(), tilt_angle); + if (likely(tilt_axis.length() > CMP_EPSILON)) { + t.rotate_basis(tilt_axis.normalized(), tilt_angle); + } } t.translate(pos_offset); @@ -195,8 +205,6 @@ bool PathFollow::_set(const StringName &p_name, const Variant &p_value) { set_cubic_interpolation(p_value); } else if (String(p_name) == "loop") { set_loop(p_value); - } else if (String(p_name) == "lookahead") { - set_lookahead(p_value); } else return false; @@ -219,8 +227,6 @@ bool PathFollow::_get(const StringName &p_name, Variant &r_ret) const { r_ret = cubic; } else if (String(p_name) == "loop") { r_ret = loop; - } else if (String(p_name) == "lookahead") { - r_ret = lookahead; } else return false; @@ -238,7 +244,6 @@ void PathFollow::_get_property_list(List<PropertyInfo> *p_list) const { p_list->push_back(PropertyInfo(Variant::INT, "rotation_mode", PROPERTY_HINT_ENUM, "None,Y,XY,XYZ")); p_list->push_back(PropertyInfo(Variant::BOOL, "cubic_interp")); p_list->push_back(PropertyInfo(Variant::BOOL, "loop")); - p_list->push_back(PropertyInfo(Variant::REAL, "lookahead", PROPERTY_HINT_RANGE, "0.001,1024.0,0.001")); } void PathFollow::_bind_methods() { @@ -271,8 +276,9 @@ void PathFollow::_bind_methods() { } void PathFollow::set_offset(float p_offset) { - + delta_offset = p_offset - offset; offset = p_offset; + if (path) _update_transform(); _change_notify("offset"); @@ -322,16 +328,6 @@ float PathFollow::get_unit_offset() const { return 0; } -void PathFollow::set_lookahead(float p_lookahead) { - - lookahead = p_lookahead; -} - -float PathFollow::get_lookahead() const { - - return lookahead; -} - void PathFollow::set_rotation_mode(RotationMode p_rotation_mode) { rotation_mode = p_rotation_mode; @@ -356,11 +352,11 @@ bool PathFollow::has_loop() const { PathFollow::PathFollow() { offset = 0; + delta_offset = 0; h_offset = 0; v_offset = 0; path = NULL; rotation_mode = ROTATION_XYZ; cubic = true; loop = true; - lookahead = 0.1; } diff --git a/scene/3d/path.h b/scene/3d/path.h index 0f9a169f72..52760e0c75 100644 --- a/scene/3d/path.h +++ b/scene/3d/path.h @@ -67,10 +67,10 @@ public: private: Path *path; + real_t delta_offset; // change in offset since last _update_transform real_t offset; real_t h_offset; real_t v_offset; - real_t lookahead; bool cubic; bool loop; RotationMode rotation_mode; @@ -98,9 +98,6 @@ public: void set_unit_offset(float p_unit_offset); float get_unit_offset() const; - void set_lookahead(float p_lookahead); - float get_lookahead() const; - void set_loop(bool p_loop); bool has_loop() const; diff --git a/scene/3d/physics_body.cpp b/scene/3d/physics_body.cpp index 6551deabf2..4c661e6a88 100644 --- a/scene/3d/physics_body.cpp +++ b/scene/3d/physics_body.cpp @@ -825,7 +825,7 @@ void RigidBody::_bind_methods() { ClassDB::bind_method(D_METHOD("is_using_continuous_collision_detection"), &RigidBody::is_using_continuous_collision_detection); ClassDB::bind_method(D_METHOD("set_axis_velocity", "axis_velocity"), &RigidBody::set_axis_velocity); - ClassDB::bind_method(D_METHOD("apply_impulse", "pos", "impulse"), &RigidBody::apply_impulse); + ClassDB::bind_method(D_METHOD("apply_impulse", "position", "impulse"), &RigidBody::apply_impulse); ClassDB::bind_method(D_METHOD("set_sleeping", "sleeping"), &RigidBody::set_sleeping); ClassDB::bind_method(D_METHOD("is_sleeping"), &RigidBody::is_sleeping); @@ -870,10 +870,10 @@ void RigidBody::_bind_methods() { ADD_SIGNAL(MethodInfo("body_exited", PropertyInfo(Variant::OBJECT, "body"))); ADD_SIGNAL(MethodInfo("sleeping_state_changed")); - BIND_ENUM_CONSTANT(MODE_STATIC); - BIND_ENUM_CONSTANT(MODE_KINEMATIC); BIND_ENUM_CONSTANT(MODE_RIGID); + BIND_ENUM_CONSTANT(MODE_STATIC); BIND_ENUM_CONSTANT(MODE_CHARACTER); + BIND_ENUM_CONSTANT(MODE_KINEMATIC); BIND_ENUM_CONSTANT(AXIS_LOCK_DISABLED); BIND_ENUM_CONSTANT(AXIS_LOCK_X); @@ -960,7 +960,7 @@ bool KinematicBody::move_and_collide(const Vector3 &p_motion, Collision &r_colli Vector3 KinematicBody::move_and_slide(const Vector3 &p_linear_velocity, const Vector3 &p_floor_direction, float p_slope_stop_min_velocity, int p_max_slides, float p_floor_max_angle) { - Vector3 motion = (floor_velocity + p_linear_velocity) * get_fixed_process_delta_time(); + Vector3 motion = (floor_velocity + p_linear_velocity) * get_physics_process_delta_time(); Vector3 lv = p_linear_velocity; on_floor = false; diff --git a/scene/3d/ray_cast.cpp b/scene/3d/ray_cast.cpp index 72b7706b77..296bddf0a3 100644 --- a/scene/3d/ray_cast.cpp +++ b/scene/3d/ray_cast.cpp @@ -48,14 +48,14 @@ Vector3 RayCast::get_cast_to() const { return cast_to; } -void RayCast::set_collision_layer(uint32_t p_layer) { +void RayCast::set_collision_mask(uint32_t p_mask) { - collision_layer = p_layer; + collision_mask = p_mask; } -uint32_t RayCast::get_collision_layer() const { +uint32_t RayCast::get_collision_mask() const { - return collision_layer; + return collision_mask; } void RayCast::set_type_mask(uint32_t p_mask) { @@ -97,7 +97,7 @@ void RayCast::set_enabled(bool p_enabled) { enabled = p_enabled; if (is_inside_tree() && !Engine::get_singleton()->is_editor_hint()) - set_fixed_process(p_enabled); + set_physics_process(p_enabled); if (!p_enabled) collided = false; @@ -121,25 +121,25 @@ void RayCast::_notification(int p_what) { case NOTIFICATION_ENTER_TREE: { if (enabled && !Engine::get_singleton()->is_editor_hint()) { - set_fixed_process(true); + set_physics_process(true); if (get_tree()->is_debugging_collisions_hint()) _update_debug_shape(); } else - set_fixed_process(false); + set_physics_process(false); } break; case NOTIFICATION_EXIT_TREE: { if (enabled) { - set_fixed_process(false); + set_physics_process(false); } if (debug_shape) _clear_debug_shape(); } break; - case NOTIFICATION_FIXED_PROCESS: { + case NOTIFICATION_PHYSICS_PROCESS: { if (!enabled) break; @@ -172,7 +172,7 @@ void RayCast::_update_raycast_state() { PhysicsDirectSpaceState::RayResult rr; - if (dss->intersect_ray(gt.get_origin(), gt.xform(to), rr, exclude, collision_layer, type_mask)) { + if (dss->intersect_ray(gt.get_origin(), gt.xform(to), rr, exclude, collision_mask, type_mask)) { collided = true; against = rr.collider_id; @@ -245,15 +245,15 @@ void RayCast::_bind_methods() { ClassDB::bind_method(D_METHOD("clear_exceptions"), &RayCast::clear_exceptions); - ClassDB::bind_method(D_METHOD("set_collision_layer", "layer"), &RayCast::set_collision_layer); - ClassDB::bind_method(D_METHOD("get_collision_layer"), &RayCast::get_collision_layer); + ClassDB::bind_method(D_METHOD("set_collision_mask", "mask"), &RayCast::set_collision_mask); + ClassDB::bind_method(D_METHOD("get_collision_mask"), &RayCast::get_collision_mask); ClassDB::bind_method(D_METHOD("set_type_mask", "mask"), &RayCast::set_type_mask); ClassDB::bind_method(D_METHOD("get_type_mask"), &RayCast::get_type_mask); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "enabled"), "set_enabled", "is_enabled"); ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "cast_to"), "set_cast_to", "get_cast_to"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "collision_layer", PROPERTY_HINT_LAYERS_3D_PHYSICS), "set_collision_layer", "get_collision_layer"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "collision_mask", PROPERTY_HINT_LAYERS_3D_PHYSICS), "set_collision_mask", "get_collision_mask"); ADD_PROPERTY(PropertyInfo(Variant::INT, "type_mask", PROPERTY_HINT_FLAGS, "Static,Kinematic,Rigid,Character,Area"), "set_type_mask", "get_type_mask"); } @@ -325,7 +325,7 @@ RayCast::RayCast() { against = 0; collided = false; against_shape = 0; - collision_layer = 1; + collision_mask = 1; type_mask = PhysicsDirectSpaceState::TYPE_MASK_COLLISION; cast_to = Vector3(0, -1, 0); debug_shape = NULL; diff --git a/scene/3d/ray_cast.h b/scene/3d/ray_cast.h index fd566cd343..cd3cf3c913 100644 --- a/scene/3d/ray_cast.h +++ b/scene/3d/ray_cast.h @@ -47,7 +47,7 @@ class RayCast : public Spatial { Set<RID> exclude; - uint32_t collision_layer; + uint32_t collision_mask; uint32_t type_mask; Node *debug_shape; @@ -69,8 +69,8 @@ public: void set_cast_to(const Vector3 &p_point); Vector3 get_cast_to() const; - void set_collision_layer(uint32_t p_layer); - uint32_t get_collision_layer() const; + void set_collision_mask(uint32_t p_mask); + uint32_t get_collision_mask() const; void set_type_mask(uint32_t p_mask); uint32_t get_type_mask() const; diff --git a/scene/3d/spatial.cpp b/scene/3d/spatial.cpp index 91fe426b99..0dfd80ca90 100644 --- a/scene/3d/spatial.cpp +++ b/scene/3d/spatial.cpp @@ -651,7 +651,7 @@ void Spatial::look_at(const Vector3 &p_target, const Vector3 &p_up_normal) { set_global_transform(lookat); } -void Spatial::look_at_from_pos(const Vector3 &p_pos, const Vector3 &p_target, const Vector3 &p_up_normal) { +void Spatial::look_at_from_position(const Vector3 &p_pos, const Vector3 &p_target, const Vector3 &p_up_normal) { Transform lookat; lookat.origin = p_pos; @@ -749,7 +749,7 @@ void Spatial::_bind_methods() { ClassDB::bind_method(D_METHOD("set_identity"), &Spatial::set_identity); ClassDB::bind_method(D_METHOD("look_at", "target", "up"), &Spatial::look_at); - ClassDB::bind_method(D_METHOD("look_at_from_pos", "pos", "target", "up"), &Spatial::look_at_from_pos); + ClassDB::bind_method(D_METHOD("look_at_from_position", "position", "target", "up"), &Spatial::look_at_from_position); ClassDB::bind_method(D_METHOD("to_local", "global_point"), &Spatial::to_local); ClassDB::bind_method(D_METHOD("to_global", "local_point"), &Spatial::to_global); diff --git a/scene/3d/spatial.h b/scene/3d/spatial.h index 3f205ea86b..b912d1f906 100644 --- a/scene/3d/spatial.h +++ b/scene/3d/spatial.h @@ -172,7 +172,7 @@ public: void global_translate(const Vector3 &p_offset); void look_at(const Vector3 &p_target, const Vector3 &p_up_normal); - void look_at_from_pos(const Vector3 &p_pos, const Vector3 &p_target, const Vector3 &p_up_normal); + void look_at_from_position(const Vector3 &p_pos, const Vector3 &p_target, const Vector3 &p_up_normal); Vector3 to_local(Vector3 p_global) const; Vector3 to_global(Vector3 p_local) const; diff --git a/scene/3d/spatial_velocity_tracker.cpp b/scene/3d/spatial_velocity_tracker.cpp index dc822d0446..1c7423e645 100644 --- a/scene/3d/spatial_velocity_tracker.cpp +++ b/scene/3d/spatial_velocity_tracker.cpp @@ -1,21 +1,21 @@ #include "spatial_velocity_tracker.h" #include "engine.h" -void SpatialVelocityTracker::set_track_fixed_step(bool p_track_fixed_step) { +void SpatialVelocityTracker::set_track_physics_step(bool p_track_physics_step) { - fixed_step = p_track_fixed_step; + physics_step = p_track_physics_step; } -bool SpatialVelocityTracker::is_tracking_fixed_step() const { +bool SpatialVelocityTracker::is_tracking_physics_step() const { - return fixed_step; + return physics_step; } void SpatialVelocityTracker::update_position(const Vector3 &p_position) { PositionHistory ph; ph.position = p_position; - if (fixed_step) { - ph.frame = Engine::get_singleton()->get_fixed_frames(); + if (physics_step) { + ph.frame = Engine::get_singleton()->get_physics_frames(); } else { ph.frame = Engine::get_singleton()->get_idle_frame_ticks(); } @@ -40,8 +40,8 @@ Vector3 SpatialVelocityTracker::get_tracked_linear_velocity() const { float base_time = 0.0; if (position_history_len) { - if (fixed_step) { - uint64_t base = Engine::get_singleton()->get_fixed_frames(); + if (physics_step) { + uint64_t base = Engine::get_singleton()->get_physics_frames(); base_time = float(base - position_history[0].frame) / Engine::get_singleton()->get_iterations_per_second(); } else { uint64_t base = Engine::get_singleton()->get_idle_frame_ticks(); @@ -54,7 +54,7 @@ Vector3 SpatialVelocityTracker::get_tracked_linear_velocity() const { uint64_t diff = position_history[i].frame - position_history[i + 1].frame; Vector3 distance = position_history[i].position - position_history[i + 1].position; - if (fixed_step) { + if (physics_step) { delta = float(diff) / Engine::get_singleton()->get_iterations_per_second(); } else { delta = double(diff) / 1000000.0; @@ -78,8 +78,8 @@ void SpatialVelocityTracker::reset(const Vector3 &p_new_pos) { PositionHistory ph; ph.position = p_new_pos; - if (fixed_step) { - ph.frame = Engine::get_singleton()->get_fixed_frames(); + if (physics_step) { + ph.frame = Engine::get_singleton()->get_physics_frames(); } else { ph.frame = Engine::get_singleton()->get_idle_frame_ticks(); } @@ -90,8 +90,8 @@ void SpatialVelocityTracker::reset(const Vector3 &p_new_pos) { void SpatialVelocityTracker::_bind_methods() { - ClassDB::bind_method(D_METHOD("set_track_fixed_step", "enable"), &SpatialVelocityTracker::set_track_fixed_step); - ClassDB::bind_method(D_METHOD("is_tracking_fixed_step"), &SpatialVelocityTracker::is_tracking_fixed_step); + ClassDB::bind_method(D_METHOD("set_track_physics_step", "enable"), &SpatialVelocityTracker::set_track_physics_step); + ClassDB::bind_method(D_METHOD("is_tracking_physics_step"), &SpatialVelocityTracker::is_tracking_physics_step); ClassDB::bind_method(D_METHOD("update_position", "position"), &SpatialVelocityTracker::update_position); ClassDB::bind_method(D_METHOD("get_tracked_linear_velocity"), &SpatialVelocityTracker::get_tracked_linear_velocity); ClassDB::bind_method(D_METHOD("reset", "position"), &SpatialVelocityTracker::reset); @@ -100,5 +100,5 @@ void SpatialVelocityTracker::_bind_methods() { SpatialVelocityTracker::SpatialVelocityTracker() { position_history.resize(4); // should be configurable position_history_len = 0; - fixed_step = false; + physics_step = false; } diff --git a/scene/3d/spatial_velocity_tracker.h b/scene/3d/spatial_velocity_tracker.h index b8237613a7..c4371ff1f7 100644 --- a/scene/3d/spatial_velocity_tracker.h +++ b/scene/3d/spatial_velocity_tracker.h @@ -11,7 +11,7 @@ class SpatialVelocityTracker : public Reference { Vector3 position; }; - bool fixed_step; + bool physics_step; Vector<PositionHistory> position_history; int position_history_len; @@ -20,8 +20,8 @@ protected: public: void reset(const Vector3 &p_new_pos); - void set_track_fixed_step(bool p_track_fixed_step); - bool is_tracking_fixed_step() const; + void set_track_physics_step(bool p_track_physics_step); + bool is_tracking_physics_step() const; void update_position(const Vector3 &p_position); Vector3 get_tracked_linear_velocity() const; diff --git a/scene/3d/vehicle_body.cpp b/scene/3d/vehicle_body.cpp index 3518113130..a072572142 100644 --- a/scene/3d/vehicle_body.cpp +++ b/scene/3d/vehicle_body.cpp @@ -267,6 +267,8 @@ void VehicleWheel::_bind_methods() { ClassDB::bind_method(D_METHOD("set_roll_influence", "roll_influence"), &VehicleWheel::set_roll_influence); ClassDB::bind_method(D_METHOD("get_roll_influence"), &VehicleWheel::get_roll_influence); + ClassDB::bind_method(D_METHOD("get_skidinfo"), &VehicleWheel::get_skidinfo); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "use_as_traction"), "set_use_as_traction", "is_used_as_traction"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "use_as_steering"), "set_use_as_steering", "is_used_as_steering"); ADD_GROUP("Wheel", "wheel_"); @@ -303,6 +305,11 @@ bool VehicleWheel::is_used_as_steering() const { return steers; } +float VehicleWheel::get_skidinfo() const { + + return m_skidInfo; +} + VehicleWheel::VehicleWheel() { steers = false; diff --git a/scene/3d/vehicle_body.h b/scene/3d/vehicle_body.h index eb661adb90..c642eb61b8 100644 --- a/scene/3d/vehicle_body.h +++ b/scene/3d/vehicle_body.h @@ -131,6 +131,8 @@ public: void set_roll_influence(float p_value); float get_roll_influence() const; + float get_skidinfo() const; + String get_configuration_warning() const; VehicleWheel(); diff --git a/scene/3d/visibility_notifier.cpp b/scene/3d/visibility_notifier.cpp index d3203bacec..e60b32a92a 100644 --- a/scene/3d/visibility_notifier.cpp +++ b/scene/3d/visibility_notifier.cpp @@ -252,8 +252,8 @@ void VisibilityEnabler::_bind_methods() { ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "pause_animations"), "set_enabler", "is_enabler_enabled", ENABLER_PAUSE_ANIMATIONS); ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "freeze_bodies"), "set_enabler", "is_enabler_enabled", ENABLER_FREEZE_BODIES); - BIND_ENUM_CONSTANT(ENABLER_FREEZE_BODIES); BIND_ENUM_CONSTANT(ENABLER_PAUSE_ANIMATIONS); + BIND_ENUM_CONSTANT(ENABLER_FREEZE_BODIES); BIND_ENUM_CONSTANT(ENABLER_MAX); } diff --git a/scene/animation/animation_player.cpp b/scene/animation/animation_player.cpp index be0b652276..0f631c69b6 100644 --- a/scene/animation/animation_player.cpp +++ b/scene/animation/animation_player.cpp @@ -192,7 +192,7 @@ void AnimationPlayer::_notification(int p_what) { if (!processing) { //make sure that a previous process state was not saved //only process if "processing" is set - set_fixed_process(false); + set_physics_process(false); set_process(false); } //_set_process(false); @@ -207,19 +207,19 @@ void AnimationPlayer::_notification(int p_what) { } } break; case NOTIFICATION_INTERNAL_PROCESS: { - if (animation_process_mode == ANIMATION_PROCESS_FIXED) + if (animation_process_mode == ANIMATION_PROCESS_PHYSICS) break; if (processing) _animation_process(get_process_delta_time()); } break; - case NOTIFICATION_INTERNAL_FIXED_PROCESS: { + case NOTIFICATION_INTERNAL_PHYSICS_PROCESS: { if (animation_process_mode == ANIMATION_PROCESS_IDLE) break; if (processing) - _animation_process(get_fixed_process_delta_time()); + _animation_process(get_physics_process_delta_time()); } break; case NOTIFICATION_EXIT_TREE: { @@ -405,6 +405,10 @@ void AnimationPlayer::_animation_process_animation(AnimationData *p_anim, float if (a->value_track_get_update_mode(i) == Animation::UPDATE_CONTINUOUS || (p_delta == 0 && a->value_track_get_update_mode(i) == Animation::UPDATE_DISCRETE)) { //delta == 0 means seek Variant value = a->value_track_interpolate(i, p_time); + + if (value == Variant()) + continue; + //thanks to trigger mode, this should be solved now.. /* if (p_delta==0 && value.get_type()==Variant::STRING) @@ -434,7 +438,7 @@ void AnimationPlayer::_animation_process_animation(AnimationData *p_anim, float pa->object->set(pa->prop, value, &valid); //you are not speshul #ifdef DEBUG_ENABLED if (!valid) { - ERR_PRINTS("Failed setting track value '" + String(pa->owner->path) + "'. Check if property exists or the type of key is valid"); + ERR_PRINTS("Failed setting track value '" + String(pa->owner->path) + "'. Check if property exists or the type of key is valid. Animation '" + a->get_name() + "' at node '" + get_path() + "'."); } #endif @@ -442,7 +446,7 @@ void AnimationPlayer::_animation_process_animation(AnimationData *p_anim, float case SP_NODE2D_POS: { #ifdef DEBUG_ENABLED if (value.get_type() != Variant::VECTOR2) { - ERR_PRINTS("Position key at time " + rtos(p_time) + " in Animation Track '" + String(pa->owner->path) + "' not of type Vector2()"); + ERR_PRINTS("Position key at time " + rtos(p_time) + " in Animation Track '" + String(pa->owner->path) + "' not of type Vector2(). Animation '" + a->get_name() + "' at node '" + get_path() + "'."); } #endif static_cast<Node2D *>(pa->object)->set_position(value); @@ -450,7 +454,7 @@ void AnimationPlayer::_animation_process_animation(AnimationData *p_anim, float case SP_NODE2D_ROT: { #ifdef DEBUG_ENABLED if (value.is_num()) { - ERR_PRINTS("Rotation key at time " + rtos(p_time) + " in Animation Track '" + String(pa->owner->path) + "' not numerical"); + ERR_PRINTS("Rotation key at time " + rtos(p_time) + " in Animation Track '" + String(pa->owner->path) + "' not numerical. Animation '" + a->get_name() + "' at node '" + get_path() + "'."); } #endif @@ -459,7 +463,7 @@ void AnimationPlayer::_animation_process_animation(AnimationData *p_anim, float case SP_NODE2D_SCALE: { #ifdef DEBUG_ENABLED if (value.get_type() != Variant::VECTOR2) { - ERR_PRINTS("Scale key at time " + rtos(p_time) + " in Animation Track '" + String(pa->owner->path) + "' not of type Vector2()"); + ERR_PRINTS("Scale key at time " + rtos(p_time) + " in Animation Track '" + String(pa->owner->path) + "' not of type Vector2()." + a->get_name() + "' at node '" + get_path() + "'."); } #endif @@ -529,12 +533,12 @@ void AnimationPlayer::_animation_process_data(PlaybackData &cd, float p_delta, f if (&cd == &playback.current) { - if (!backwards && cd.pos < len && next_pos == len /*&& playback.blend.empty()*/) { + if (!backwards && cd.pos <= len && next_pos == len /*&& playback.blend.empty()*/) { //playback finished end_notify = true; } - if (backwards && cd.pos > 0 && next_pos == 0 /*&& playback.blend.empty()*/) { + if (backwards && cd.pos >= 0 && next_pos == 0 /*&& playback.blend.empty()*/) { //playback finished end_notify = true; } @@ -615,7 +619,7 @@ void AnimationPlayer::_animation_update_transforms() { pa->object->set(pa->prop, pa->value_accum, &valid); //you are not speshul #ifdef DEBUG_ENABLED if (!valid) { - ERR_PRINTS("Failed setting key at time " + rtos(playback.current.pos) + " in Animation '" + get_current_animation() + "', Track '" + String(pa->owner->path) + "'. Check if property exists or the type of key is right for the property"); + ERR_PRINTS("Failed setting key at time " + rtos(playback.current.pos) + " in Animation '" + get_current_animation() + "' at Node '" + get_path() + "', Track '" + String(pa->owner->path) + "'. Check if property exists or the type of key is right for the property"); } #endif @@ -623,7 +627,7 @@ void AnimationPlayer::_animation_update_transforms() { case SP_NODE2D_POS: { #ifdef DEBUG_ENABLED if (pa->value_accum.get_type() != Variant::VECTOR2) { - ERR_PRINTS("Position key at time " + rtos(playback.current.pos) + " in Animation '" + get_current_animation() + "', Track '" + String(pa->owner->path) + "' not of type Vector2()"); + ERR_PRINTS("Position key at time " + rtos(playback.current.pos) + " in Animation '" + get_current_animation() + "' at Node '" + get_path() + "', Track '" + String(pa->owner->path) + "' not of type Vector2()"); } #endif static_cast<Node2D *>(pa->object)->set_position(pa->value_accum); @@ -631,7 +635,7 @@ void AnimationPlayer::_animation_update_transforms() { case SP_NODE2D_ROT: { #ifdef DEBUG_ENABLED if (pa->value_accum.is_num()) { - ERR_PRINTS("Rotation key at time " + rtos(playback.current.pos) + " in Animation '" + get_current_animation() + "', Track '" + String(pa->owner->path) + "' not numerical"); + ERR_PRINTS("Rotation key at time " + rtos(playback.current.pos) + " in Animation '" + get_current_animation() + "' at Node '" + get_path() + "', Track '" + String(pa->owner->path) + "' not numerical"); } #endif @@ -640,7 +644,7 @@ void AnimationPlayer::_animation_update_transforms() { case SP_NODE2D_SCALE: { #ifdef DEBUG_ENABLED if (pa->value_accum.get_type() != Variant::VECTOR2) { - ERR_PRINTS("Scale key at time " + rtos(playback.current.pos) + " in Animation '" + get_current_animation() + "', Track '" + String(pa->owner->path) + "' not of type Vector2()"); + ERR_PRINTS("Scale key at time " + rtos(playback.current.pos) + " in Animation '" + get_current_animation() + "' at Node '" + get_path() + "', Track '" + String(pa->owner->path) + "' not of type Vector2()"); } #endif @@ -1045,7 +1049,7 @@ bool AnimationPlayer::is_valid() const { return (playback.current.from); } -float AnimationPlayer::get_current_animation_pos() const { +float AnimationPlayer::get_current_animation_position() const { ERR_FAIL_COND_V(!playback.current.from, 0); return playback.current.pos; @@ -1140,7 +1144,7 @@ void AnimationPlayer::_set_process(bool p_process, bool p_force) { switch (animation_process_mode) { - case ANIMATION_PROCESS_FIXED: set_fixed_process_internal(p_process && active); break; + case ANIMATION_PROCESS_PHYSICS: set_physics_process_internal(p_process && active); break; case ANIMATION_PROCESS_IDLE: set_process_internal(p_process && active); break; } @@ -1238,8 +1242,8 @@ void AnimationPlayer::_bind_methods() { ClassDB::bind_method(D_METHOD("set_root", "path"), &AnimationPlayer::set_root); ClassDB::bind_method(D_METHOD("get_root"), &AnimationPlayer::get_root); - ClassDB::bind_method(D_METHOD("seek", "pos_sec", "update"), &AnimationPlayer::seek, DEFVAL(false)); - ClassDB::bind_method(D_METHOD("get_pos"), &AnimationPlayer::get_current_animation_pos); + ClassDB::bind_method(D_METHOD("seek", "seconds", "update"), &AnimationPlayer::seek, DEFVAL(false)); + ClassDB::bind_method(D_METHOD("get_position"), &AnimationPlayer::get_current_animation_position); ClassDB::bind_method(D_METHOD("find_animation", "animation"), &AnimationPlayer::find_animation); @@ -1248,13 +1252,13 @@ void AnimationPlayer::_bind_methods() { ClassDB::bind_method(D_METHOD("set_animation_process_mode", "mode"), &AnimationPlayer::set_animation_process_mode); ClassDB::bind_method(D_METHOD("get_animation_process_mode"), &AnimationPlayer::get_animation_process_mode); - ClassDB::bind_method(D_METHOD("get_current_animation_pos"), &AnimationPlayer::get_current_animation_pos); + ClassDB::bind_method(D_METHOD("get_current_animation_position"), &AnimationPlayer::get_current_animation_position); ClassDB::bind_method(D_METHOD("get_current_animation_length"), &AnimationPlayer::get_current_animation_length); ClassDB::bind_method(D_METHOD("advance", "delta"), &AnimationPlayer::advance); ADD_GROUP("Playback Options", "playback_"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "playback_process_mode", PROPERTY_HINT_ENUM, "Fixed,Idle"), "set_animation_process_mode", "get_animation_process_mode"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "playback_process_mode", PROPERTY_HINT_ENUM, "Physics,Idle"), "set_animation_process_mode", "get_animation_process_mode"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "playback_default_blend_time", PROPERTY_HINT_RANGE, "0,4096,0.01"), "set_default_blend_time", "get_default_blend_time"); ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH, "root_node"), "set_root", "get_root"); @@ -1262,7 +1266,7 @@ void AnimationPlayer::_bind_methods() { ADD_SIGNAL(MethodInfo("animation_changed", PropertyInfo(Variant::STRING, "old_name"), PropertyInfo(Variant::STRING, "new_name"))); ADD_SIGNAL(MethodInfo("animation_started", PropertyInfo(Variant::STRING, "name"))); - BIND_ENUM_CONSTANT(ANIMATION_PROCESS_FIXED); + BIND_ENUM_CONSTANT(ANIMATION_PROCESS_PHYSICS); BIND_ENUM_CONSTANT(ANIMATION_PROCESS_IDLE); } diff --git a/scene/animation/animation_player.h b/scene/animation/animation_player.h index c6e52145a8..83da3b2e5c 100644 --- a/scene/animation/animation_player.h +++ b/scene/animation/animation_player.h @@ -44,7 +44,7 @@ class AnimationPlayer : public Node { public: enum AnimationProcessMode { - ANIMATION_PROCESS_FIXED, + ANIMATION_PROCESS_PHYSICS, ANIMATION_PROCESS_IDLE, }; @@ -279,7 +279,7 @@ public: void seek(float p_time, bool p_update = false); void seek_delta(float p_time, float p_delta); - float get_current_animation_pos() const; + float get_current_animation_position() const; float get_current_animation_length() const; void advance(float p_time); diff --git a/scene/animation/animation_tree_player.cpp b/scene/animation/animation_tree_player.cpp index 38d0527288..ad5329c94b 100644 --- a/scene/animation/animation_tree_player.cpp +++ b/scene/animation/animation_tree_player.cpp @@ -56,7 +56,7 @@ void AnimationTreePlayer::_set_process(bool p_process, bool p_force) { switch (animation_process_mode) { - case ANIMATION_PROCESS_FIXED: set_fixed_process_internal(p_process && active); break; + case ANIMATION_PROCESS_PHYSICS: set_physics_process_internal(p_process && active); break; case ANIMATION_PROCESS_IDLE: set_process_internal(p_process && active); break; } @@ -92,7 +92,7 @@ bool AnimationTreePlayer::_set(const StringName &p_name, const Variant &p_value) Dictionary node = nodes[i]; StringName id = node.get_valid("id"); - Point2 pos = node.get_valid("pos"); + Point2 pos = node.get_valid("position"); NodeType nt = NODE_MAX; String type = node.get_valid("type"); @@ -122,7 +122,7 @@ bool AnimationTreePlayer::_set(const StringName &p_name, const Variant &p_value) if (nt != NODE_OUTPUT) add_node(nt, id); - node_set_pos(id, pos); + node_set_position(id, pos); switch (nt) { case NODE_OUTPUT: { @@ -245,7 +245,7 @@ bool AnimationTreePlayer::_get(const StringName &p_name, Variant &r_ret) const { Dictionary node; node["id"] = E->key(); - node["pos"] = n->pos; + node["position"] = n->pos; switch (n->type) { case NODE_OUTPUT: node["type"] = "output"; break; @@ -405,7 +405,7 @@ void AnimationTreePlayer::_notification(int p_what) { if (!processing) { //make sure that a previous process state was not saved //only process if "processing" is set - set_fixed_process_internal(false); + set_physics_process_internal(false); set_process_internal(false); } } break; @@ -416,19 +416,19 @@ void AnimationTreePlayer::_notification(int p_what) { } } break; case NOTIFICATION_INTERNAL_PROCESS: { - if (animation_process_mode == ANIMATION_PROCESS_FIXED) + if (animation_process_mode == ANIMATION_PROCESS_PHYSICS) break; if (processing) _process_animation(get_process_delta_time()); } break; - case NOTIFICATION_INTERNAL_FIXED_PROCESS: { + case NOTIFICATION_INTERNAL_PHYSICS_PROCESS: { if (animation_process_mode == ANIMATION_PROCESS_IDLE) break; if (processing) - _process_animation(get_fixed_process_delta_time()); + _process_animation(get_physics_process_delta_time()); } break; } } @@ -1176,7 +1176,7 @@ void AnimationTreePlayer::transition_node_set_current(const StringName &p_node, n->set_current(p_current); } -void AnimationTreePlayer::node_set_pos(const StringName &p_node, const Vector2 &p_pos) { +void AnimationTreePlayer::node_set_position(const StringName &p_node, const Vector2 &p_pos) { ERR_FAIL_COND(!node_map.has(p_node)); node_map[p_node]->pos = p_pos; @@ -1187,7 +1187,7 @@ AnimationTreePlayer::NodeType AnimationTreePlayer::node_get_type(const StringNam ERR_FAIL_COND_V(!node_map.has(p_node), NODE_OUTPUT); return node_map[p_node]->type; } -Point2 AnimationTreePlayer::node_get_pos(const StringName &p_node) const { +Point2 AnimationTreePlayer::node_get_position(const StringName &p_node) const { ERR_FAIL_COND_V(!node_map.has(p_node), Point2()); return node_map[p_node]->pos; @@ -1752,7 +1752,7 @@ void AnimationTreePlayer::_bind_methods() { ClassDB::bind_method(D_METHOD("timescale_node_set_scale", "id", "scale"), &AnimationTreePlayer::timescale_node_set_scale); ClassDB::bind_method(D_METHOD("timescale_node_get_scale", "id"), &AnimationTreePlayer::timescale_node_get_scale); - ClassDB::bind_method(D_METHOD("timeseek_node_seek", "id", "pos_sec"), &AnimationTreePlayer::timeseek_node_seek); + ClassDB::bind_method(D_METHOD("timeseek_node_seek", "id", "seconds"), &AnimationTreePlayer::timeseek_node_seek); ClassDB::bind_method(D_METHOD("transition_node_set_input_count", "id", "count"), &AnimationTreePlayer::transition_node_set_input_count); ClassDB::bind_method(D_METHOD("transition_node_get_input_count", "id"), &AnimationTreePlayer::transition_node_get_input_count); @@ -1767,8 +1767,8 @@ void AnimationTreePlayer::_bind_methods() { ClassDB::bind_method(D_METHOD("transition_node_set_current", "id", "input_idx"), &AnimationTreePlayer::transition_node_set_current); ClassDB::bind_method(D_METHOD("transition_node_get_current", "id"), &AnimationTreePlayer::transition_node_get_current); - ClassDB::bind_method(D_METHOD("node_set_pos", "id", "screen_pos"), &AnimationTreePlayer::node_set_pos); - ClassDB::bind_method(D_METHOD("node_get_pos", "id"), &AnimationTreePlayer::node_get_pos); + ClassDB::bind_method(D_METHOD("node_set_position", "id", "screen_position"), &AnimationTreePlayer::node_set_position); + ClassDB::bind_method(D_METHOD("node_get_position", "id"), &AnimationTreePlayer::node_get_position); ClassDB::bind_method(D_METHOD("remove_node", "id"), &AnimationTreePlayer::remove_node); ClassDB::bind_method(D_METHOD("connect_nodes", "id", "dst_id", "dst_input_idx"), &AnimationTreePlayer::connect_nodes); @@ -1796,7 +1796,7 @@ void AnimationTreePlayer::_bind_methods() { ClassDB::bind_method(D_METHOD("recompute_caches"), &AnimationTreePlayer::recompute_caches); ADD_GROUP("Playback", "playback_"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "playback_process_mode", PROPERTY_HINT_ENUM, "Fixed,Idle"), "set_animation_process_mode", "get_animation_process_mode"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "playback_process_mode", PROPERTY_HINT_ENUM, "Physics,Idle"), "set_animation_process_mode", "get_animation_process_mode"); BIND_ENUM_CONSTANT(NODE_OUTPUT); BIND_ENUM_CONSTANT(NODE_ANIMATION); @@ -1809,7 +1809,7 @@ void AnimationTreePlayer::_bind_methods() { BIND_ENUM_CONSTANT(NODE_TIMESEEK); BIND_ENUM_CONSTANT(NODE_TRANSITION); - BIND_ENUM_CONSTANT(ANIMATION_PROCESS_FIXED); + BIND_ENUM_CONSTANT(ANIMATION_PROCESS_PHYSICS); BIND_ENUM_CONSTANT(ANIMATION_PROCESS_IDLE); } diff --git a/scene/animation/animation_tree_player.h b/scene/animation/animation_tree_player.h index 609430340b..3e2bb88198 100644 --- a/scene/animation/animation_tree_player.h +++ b/scene/animation/animation_tree_player.h @@ -42,7 +42,7 @@ class AnimationTreePlayer : public Node { public: enum AnimationProcessMode { - ANIMATION_PROCESS_FIXED, + ANIMATION_PROCESS_PHYSICS, ANIMATION_PROCESS_IDLE, }; @@ -417,10 +417,10 @@ public: void transition_node_set_current(const StringName &p_node, int p_current); int transition_node_get_current(const StringName &p_node) const; - void node_set_pos(const StringName &p_node, const Vector2 &p_pos); //for display + void node_set_position(const StringName &p_node, const Vector2 &p_pos); //for display /* GETS */ - Point2 node_get_pos(const StringName &p_node) const; //for display + Point2 node_get_position(const StringName &p_node) const; //for display NodeType node_get_type(const StringName &p_node) const; diff --git a/scene/animation/tween.cpp b/scene/animation/tween.cpp index fb61c43d5c..e0508cf147 100644 --- a/scene/animation/tween.cpp +++ b/scene/animation/tween.cpp @@ -152,7 +152,7 @@ void Tween::_notification(int p_what) { if (!processing) { //make sure that a previous process state was not saved //only process if "processing" is set - set_fixed_process_internal(false); + set_physics_process_internal(false); set_process_internal(false); } } break; @@ -160,19 +160,19 @@ void Tween::_notification(int p_what) { } break; case NOTIFICATION_INTERNAL_PROCESS: { - if (tween_process_mode == TWEEN_PROCESS_FIXED) + if (tween_process_mode == TWEEN_PROCESS_PHYSICS) break; if (processing) _tween_process(get_process_delta_time()); } break; - case NOTIFICATION_INTERNAL_FIXED_PROCESS: { + case NOTIFICATION_INTERNAL_PHYSICS_PROCESS: { if (tween_process_mode == TWEEN_PROCESS_IDLE) break; if (processing) - _tween_process(get_fixed_process_delta_time()); + _tween_process(get_physics_process_delta_time()); } break; case NOTIFICATION_EXIT_TREE: { @@ -222,9 +222,9 @@ void Tween::_bind_methods() { ADD_SIGNAL(MethodInfo("tween_step", PropertyInfo(Variant::OBJECT, "object"), PropertyInfo(Variant::STRING, "key"), PropertyInfo(Variant::REAL, "elapsed"), PropertyInfo(Variant::OBJECT, "value"))); ADD_SIGNAL(MethodInfo("tween_completed", PropertyInfo(Variant::OBJECT, "object"), PropertyInfo(Variant::STRING, "key"))); - ADD_PROPERTY(PropertyInfo(Variant::INT, "playback_process_mode", PROPERTY_HINT_ENUM, "Fixed,Idle"), "set_tween_process_mode", "get_tween_process_mode"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "playback_process_mode", PROPERTY_HINT_ENUM, "Physics,Idle"), "set_tween_process_mode", "get_tween_process_mode"); - BIND_ENUM_CONSTANT(TWEEN_PROCESS_FIXED); + BIND_ENUM_CONSTANT(TWEEN_PROCESS_PHYSICS); BIND_ENUM_CONSTANT(TWEEN_PROCESS_IDLE); BIND_ENUM_CONSTANT(TRANS_LINEAR); @@ -642,7 +642,7 @@ void Tween::_set_process(bool p_process, bool p_force) { switch (tween_process_mode) { - case TWEEN_PROCESS_FIXED: set_fixed_process_internal(p_process && active); break; + case TWEEN_PROCESS_PHYSICS: set_physics_process_internal(p_process && active); break; case TWEEN_PROCESS_IDLE: set_process_internal(p_process && active); break; } diff --git a/scene/animation/tween.h b/scene/animation/tween.h index 929d63a7fc..fac1d346b4 100644 --- a/scene/animation/tween.h +++ b/scene/animation/tween.h @@ -38,7 +38,7 @@ class Tween : public Node { public: enum TweenProcessMode { - TWEEN_PROCESS_FIXED, + TWEEN_PROCESS_PHYSICS, TWEEN_PROCESS_IDLE, }; diff --git a/scene/audio/audio_player.cpp b/scene/audio/audio_player.cpp index 661d085dfd..058b162e83 100644 --- a/scene/audio/audio_player.cpp +++ b/scene/audio/audio_player.cpp @@ -122,7 +122,6 @@ void AudioStreamPlayer::_notification(int p_what) { void AudioStreamPlayer::set_stream(Ref<AudioStream> p_stream) { - ERR_FAIL_COND(!p_stream.is_valid()); AudioServer::get_singleton()->lock(); mix_buffer.resize(AudioServer::get_singleton()->thread_get_mix_buffer_size()); @@ -134,12 +133,14 @@ void AudioStreamPlayer::set_stream(Ref<AudioStream> p_stream) { setseek = -1; } - stream = p_stream; - stream_playback = p_stream->instance_playback(); + if (p_stream.is_valid()) { + stream = p_stream; + stream_playback = p_stream->instance_playback(); + } AudioServer::get_singleton()->unlock(); - if (stream_playback.is_null()) { + if (p_stream.is_valid() && stream_playback.is_null()) { stream.unref(); ERR_FAIL_COND(stream_playback.is_null()); } @@ -193,10 +194,10 @@ bool AudioStreamPlayer::is_playing() const { return false; } -float AudioStreamPlayer::get_pos() { +float AudioStreamPlayer::get_playback_position() { if (stream_playback.is_valid()) { - return stream_playback->get_pos(); + return stream_playback->get_playback_position(); } return 0; @@ -279,12 +280,12 @@ void AudioStreamPlayer::_bind_methods() { ClassDB::bind_method(D_METHOD("set_volume_db", "volume_db"), &AudioStreamPlayer::set_volume_db); ClassDB::bind_method(D_METHOD("get_volume_db"), &AudioStreamPlayer::get_volume_db); - ClassDB::bind_method(D_METHOD("play", "from_pos"), &AudioStreamPlayer::play, DEFVAL(0.0)); - ClassDB::bind_method(D_METHOD("seek", "to_pos"), &AudioStreamPlayer::seek); + ClassDB::bind_method(D_METHOD("play", "from_position"), &AudioStreamPlayer::play, DEFVAL(0.0)); + ClassDB::bind_method(D_METHOD("seek", "to_position"), &AudioStreamPlayer::seek); ClassDB::bind_method(D_METHOD("stop"), &AudioStreamPlayer::stop); ClassDB::bind_method(D_METHOD("is_playing"), &AudioStreamPlayer::is_playing); - ClassDB::bind_method(D_METHOD("get_pos"), &AudioStreamPlayer::get_pos); + ClassDB::bind_method(D_METHOD("get_playback_position"), &AudioStreamPlayer::get_playback_position); ClassDB::bind_method(D_METHOD("set_bus", "bus"), &AudioStreamPlayer::set_bus); ClassDB::bind_method(D_METHOD("get_bus"), &AudioStreamPlayer::get_bus); diff --git a/scene/audio/audio_player.h b/scene/audio/audio_player.h index 4bfa84f766..4bfc44730d 100644 --- a/scene/audio/audio_player.h +++ b/scene/audio/audio_player.h @@ -83,7 +83,7 @@ public: void seek(float p_seconds); void stop(); bool is_playing() const; - float get_pos(); + float get_playback_position(); void set_bus(const StringName &p_bus); StringName get_bus() const; diff --git a/scene/gui/base_button.cpp b/scene/gui/base_button.cpp index 5713a35b7a..148277f2dd 100644 --- a/scene/gui/base_button.cpp +++ b/scene/gui/base_button.cpp @@ -39,7 +39,9 @@ void BaseButton::_unpress_group() { if (!button_group.is_valid()) return; - status.pressed = true; + if (toggle_mode) { + status.pressed = true; + } for (Set<BaseButton *>::Element *E = button_group->buttons.front(); E; E = E->next()) { if (E->get() == this) diff --git a/scene/gui/color_picker.cpp b/scene/gui/color_picker.cpp index 704c00b1d6..dbd7c1bbc0 100644 --- a/scene/gui/color_picker.cpp +++ b/scene/gui/color_picker.cpp @@ -40,12 +40,15 @@ void ColorPicker::_notification(int p_what) { switch (p_what) { case NOTIFICATION_THEME_CHANGED: { //sample->set_texture(get_icon("color_sample")); + btn_pick->set_icon(get_icon("screen_picker", "ColorPicker")); + bt_add_preset->set_icon(get_icon("add_preset")); _update_controls(); } break; case NOTIFICATION_ENTER_TREE: { btn_pick->set_icon(get_icon("screen_picker", "ColorPicker")); + bt_add_preset->set_icon(get_icon("add_preset")); _update_color(); } break; @@ -177,29 +180,14 @@ void ColorPicker::_update_color() { void ColorPicker::_update_presets() { Size2 size = bt_add_preset->get_size(); - preset->set_custom_minimum_size(Size2(size.width * presets.size(), size.height)); - - PoolVector<uint8_t> img; - img.resize(size.x * presets.size() * size.y * 3); - - { - PoolVector<uint8_t>::Write w = img.write(); - for (int y = 0; y < size.y; y++) { - for (int x = 0; x < size.x * presets.size(); x++) { - int ofs = (y * (size.x * presets.size()) + x) * 3; - w[ofs + 0] = uint8_t(CLAMP(presets[(int)x / size.x].r * 255.0, 0, 255)); - w[ofs + 1] = uint8_t(CLAMP(presets[(int)x / size.x].g * 255.0, 0, 255)); - w[ofs + 2] = uint8_t(CLAMP(presets[(int)x / size.x].b * 255.0, 0, 255)); - } - } - } + Size2 preset_size = Size2(size.width * presets.size(), size.height); + preset->set_custom_minimum_size(preset_size); - Ref<Image> i = memnew(Image(size.x * presets.size(), size.y, false, Image::FORMAT_RGB8, img)); + preset->draw_texture_rect(get_icon("preset_bg", "ColorPicker"), Rect2(Point2(), preset_size), true); - Ref<ImageTexture> t; - t.instance(); - t->create_from_image(i); - preset->set_texture(t); + for (int i = 0; i < presets.size(); i++) { + preset->draw_rect(Rect2(Point2(size.width * i, 0), size), presets[i]); + } } void ColorPicker::_text_type_toggled() { @@ -227,7 +215,7 @@ void ColorPicker::add_preset(const Color &p_color) { } else { presets.push_back(p_color); } - _update_presets(); + preset->update(); if (presets.size() == 10) bt_add_preset->hide(); } @@ -266,7 +254,11 @@ void ColorPicker::_update_text_value() { } void ColorPicker::_sample_draw() { - sample->draw_rect(Rect2(Point2(), Size2(uv_edit->get_size().width, sample->get_size().height * 0.95)), color); + Rect2 r = Rect2(Point2(), Size2(uv_edit->get_size().width, sample->get_size().height * 0.95)); + if (color.a < 1.0) { + sample->draw_texture_rect(get_icon("preset_bg", "ColorPicker"), r, true); + } + sample->draw_rect(r, color); } void ColorPicker::_hsv_draw(int p_which, Control *c) { @@ -399,7 +391,7 @@ void ColorPicker::_preset_input(const Ref<InputEvent> &p_event) { } else if (bev->is_pressed() && bev->get_button_index() == BUTTON_RIGHT) { int index = bev->get_position().x / (preset->get_size().x / presets.size()); presets.erase(presets[index]); - _update_presets(); + preset->update(); bt_add_preset->show(); } _update_color(); @@ -461,7 +453,7 @@ void ColorPicker::_screen_pick_pressed() { screen = memnew(Control); r->add_child(screen); screen->set_as_toplevel(true); - screen->set_area_as_parent_rect(); + screen->set_anchors_and_margins_preset(Control::PRESET_WIDE); screen->set_default_cursor_shape(CURSOR_POINTING_HAND); screen->connect("gui_input", this, "_screen_input"); } @@ -484,6 +476,7 @@ void ColorPicker::_bind_methods() { ClassDB::bind_method(D_METHOD("_add_preset_pressed"), &ColorPicker::_add_preset_pressed); ClassDB::bind_method(D_METHOD("_screen_pick_pressed"), &ColorPicker::_screen_pick_pressed); ClassDB::bind_method(D_METHOD("_sample_draw"), &ColorPicker::_sample_draw); + ClassDB::bind_method(D_METHOD("_update_presets"), &ColorPicker::_update_presets); ClassDB::bind_method(D_METHOD("_hsv_draw"), &ColorPicker::_hsv_draw); ClassDB::bind_method(D_METHOD("_uv_input"), &ColorPicker::_uv_input); ClassDB::bind_method(D_METHOD("_w_input"), &ColorPicker::_w_input); @@ -608,9 +601,9 @@ ColorPicker::ColorPicker() bbc->add_child(preset); //preset->set_ignore_mouse(false); preset->connect("gui_input", this, "_preset_input"); + preset->connect("draw", this, "_update_presets"); bt_add_preset = memnew(Button); - bt_add_preset->set_icon(get_icon("add_preset")); bt_add_preset->set_tooltip(TTR("Add current color as a preset")); bt_add_preset->connect("pressed", this, "_add_preset_pressed"); bbc->add_child(bt_add_preset); @@ -636,7 +629,9 @@ void ColorPickerButton::_notification(int p_what) { if (p_what == NOTIFICATION_DRAW) { Ref<StyleBox> normal = get_stylebox("normal"); - draw_rect(Rect2(normal->get_offset(), get_size() - normal->get_minimum_size()), picker->get_pick_color()); + Rect2 r = Rect2(normal->get_offset(), get_size() - normal->get_minimum_size()); + draw_texture_rect(Control::get_icon("bg", "ColorPickerButton"), r, true); + draw_rect(r, picker->get_pick_color()); } if (p_what == MainLoop::NOTIFICATION_WM_QUIT_REQUEST) { diff --git a/scene/gui/control.cpp b/scene/gui/control.cpp index 2d5b54257a..54a58159ac 100644 --- a/scene/gui/control.cpp +++ b/scene/gui/control.cpp @@ -49,7 +49,7 @@ Variant Control::edit_get_state() const { Dictionary s; s["rect"] = get_rect(); - s["rot"] = get_rotation(); + s["rotation"] = get_rotation(); s["scale"] = get_scale(); Array anchors; anchors.push_back(get_anchor(MARGIN_LEFT)); @@ -66,7 +66,7 @@ void Control::edit_set_state(const Variant &p_state) { Rect2 state = s["rect"]; set_position(state.position); set_size(state.size); - set_rotation(s["rot"]); + set_rotation(s["rotation"]); set_scale(s["scale"]); Array anchors = s["anchors"]; set_anchor(MARGIN_LEFT, anchors[0]); @@ -1471,6 +1471,140 @@ void Control::set_anchors_preset(LayoutPreset p_preset, bool p_keep_margin) { } } +void Control::set_margins_preset(LayoutPreset p_preset, LayoutPresetMode p_resize_mode, int p_margin) { + // Calculate the size if the node is not resized + Size2 min_size = get_minimum_size(); + Size2 new_size = get_size(); + if (p_resize_mode == PRESET_MODE_MINSIZE || p_resize_mode == PRESET_MODE_KEEP_HEIGHT) { + new_size.x = min_size.x; + } + if (p_resize_mode == PRESET_MODE_MINSIZE || p_resize_mode == PRESET_MODE_KEEP_WIDTH) { + new_size.y = min_size.y; + } + + float pw = _get_parent_range(0); + float ph = _get_parent_range(1); + + //Left + switch (p_preset) { + case PRESET_TOP_LEFT: + case PRESET_BOTTOM_LEFT: + case PRESET_CENTER_LEFT: + case PRESET_TOP_WIDE: + case PRESET_BOTTOM_WIDE: + case PRESET_LEFT_WIDE: + case PRESET_HCENTER_WIDE: + case PRESET_WIDE: + data.margin[0] = pw * (0.0 - data.anchor[0]) + p_margin; + break; + + case PRESET_CENTER_TOP: + case PRESET_CENTER_BOTTOM: + case PRESET_CENTER: + case PRESET_VCENTER_WIDE: + data.margin[0] = pw * (0.5 - data.anchor[0]) - new_size.x / 2; + break; + + case PRESET_TOP_RIGHT: + case PRESET_BOTTOM_RIGHT: + case PRESET_CENTER_RIGHT: + case PRESET_RIGHT_WIDE: + data.margin[0] = pw * (1.0 - data.anchor[0]) - new_size.x - p_margin; + break; + } + + // Top + switch (p_preset) { + case PRESET_TOP_LEFT: + case PRESET_TOP_RIGHT: + case PRESET_CENTER_TOP: + case PRESET_LEFT_WIDE: + case PRESET_RIGHT_WIDE: + case PRESET_TOP_WIDE: + case PRESET_VCENTER_WIDE: + case PRESET_WIDE: + data.margin[1] = ph * (0.0 - data.anchor[1]) + p_margin; + break; + + case PRESET_CENTER_LEFT: + case PRESET_CENTER_RIGHT: + case PRESET_CENTER: + case PRESET_HCENTER_WIDE: + data.margin[1] = ph * (0.5 - data.anchor[1]) - new_size.y / 2; + break; + + case PRESET_BOTTOM_LEFT: + case PRESET_BOTTOM_RIGHT: + case PRESET_CENTER_BOTTOM: + case PRESET_BOTTOM_WIDE: + data.margin[1] = ph * (1.0 - data.anchor[1]) - new_size.y - p_margin; + break; + } + + // Right + switch (p_preset) { + case PRESET_TOP_LEFT: + case PRESET_BOTTOM_LEFT: + case PRESET_CENTER_LEFT: + case PRESET_LEFT_WIDE: + data.margin[2] = pw * (0.0 - data.anchor[2]) + new_size.x + p_margin; + break; + + case PRESET_CENTER_TOP: + case PRESET_CENTER_BOTTOM: + case PRESET_CENTER: + case PRESET_VCENTER_WIDE: + data.margin[2] = pw * (0.5 - data.anchor[2]) + new_size.x / 2; + break; + + case PRESET_TOP_RIGHT: + case PRESET_BOTTOM_RIGHT: + case PRESET_CENTER_RIGHT: + case PRESET_TOP_WIDE: + case PRESET_RIGHT_WIDE: + case PRESET_BOTTOM_WIDE: + case PRESET_HCENTER_WIDE: + case PRESET_WIDE: + data.margin[2] = pw * (1.0 - data.anchor[2]) - p_margin; + break; + } + + // Bottom + switch (p_preset) { + case PRESET_TOP_LEFT: + case PRESET_TOP_RIGHT: + case PRESET_CENTER_TOP: + case PRESET_TOP_WIDE: + data.margin[3] = ph * (0.0 - data.anchor[3]) + new_size.y + p_margin; + break; + + case PRESET_CENTER_LEFT: + case PRESET_CENTER_RIGHT: + case PRESET_CENTER: + case PRESET_HCENTER_WIDE: + data.margin[3] = ph * (0.5 - data.anchor[3]) + new_size.y / 2; + break; + + case PRESET_BOTTOM_LEFT: + case PRESET_BOTTOM_RIGHT: + case PRESET_CENTER_BOTTOM: + case PRESET_LEFT_WIDE: + case PRESET_RIGHT_WIDE: + case PRESET_BOTTOM_WIDE: + case PRESET_VCENTER_WIDE: + case PRESET_WIDE: + data.margin[3] = ph * (1.0 - data.anchor[3]) - p_margin; + break; + } + + _size_changed(); +} + +void Control::set_anchors_and_margins_preset(LayoutPreset p_preset, LayoutPresetMode p_resize_mode, int p_margin) { + set_anchors_preset(p_preset); + set_margins_preset(p_preset, p_resize_mode, p_margin); +} + float Control::get_anchor(Margin p_margin) const { return data.anchor[p_margin]; @@ -1622,20 +1756,6 @@ Rect2 Control::get_item_rect() const { return Rect2(Point2(), get_size()); } -void Control::set_area_as_parent_rect(int p_margin) { - - data.anchor[MARGIN_LEFT] = ANCHOR_BEGIN; - data.margin[MARGIN_LEFT] = p_margin; - data.anchor[MARGIN_TOP] = ANCHOR_BEGIN; - data.margin[MARGIN_TOP] = p_margin; - data.anchor[MARGIN_RIGHT] = ANCHOR_END; - data.margin[MARGIN_RIGHT] = -p_margin; - data.anchor[MARGIN_BOTTOM] = ANCHOR_END; - data.margin[MARGIN_BOTTOM] = -p_margin; - - _size_changed(); -} - void Control::add_icon_override(const StringName &p_name, const Ref<Texture> &p_icon) { ERR_FAIL_COND(p_icon.is_null()); @@ -2471,18 +2591,20 @@ void Control::_bind_methods() { ClassDB::bind_method(D_METHOD("accept_event"), &Control::accept_event); ClassDB::bind_method(D_METHOD("get_minimum_size"), &Control::get_minimum_size); ClassDB::bind_method(D_METHOD("get_combined_minimum_size"), &Control::get_combined_minimum_size); + ClassDB::bind_method(D_METHOD("set_anchors_preset", "preset", "keep_margin"), &Control::set_anchors_preset, DEFVAL(false)); + ClassDB::bind_method(D_METHOD("set_margins_preset", "preset", "resize_mode", "margin"), &Control::set_margins_preset, DEFVAL(PRESET_MODE_MINSIZE), DEFVAL(0)); + ClassDB::bind_method(D_METHOD("set_anchors_and_margins_preset", "preset", "resize_mode", "margin"), &Control::set_anchors_and_margins_preset, DEFVAL(PRESET_MODE_MINSIZE), DEFVAL(0)); ClassDB::bind_method(D_METHOD("set_anchor", "margin", "anchor", "keep_margin", "push_opposite_anchor"), &Control::set_anchor, DEFVAL(false), DEFVAL(true)); ClassDB::bind_method(D_METHOD("_set_anchor", "margin", "anchor"), &Control::_set_anchor); - ClassDB::bind_method(D_METHOD("set_anchors_preset", "preset", "keep_margin"), &Control::set_anchors_preset, DEFVAL(false)); ClassDB::bind_method(D_METHOD("get_anchor", "margin"), &Control::get_anchor); ClassDB::bind_method(D_METHOD("set_margin", "margin", "offset"), &Control::set_margin); ClassDB::bind_method(D_METHOD("set_anchor_and_margin", "margin", "anchor", "offset", "push_opposite_anchor"), &Control::set_anchor_and_margin, DEFVAL(false)); - ClassDB::bind_method(D_METHOD("set_begin", "pos"), &Control::set_begin); - ClassDB::bind_method(D_METHOD("set_end", "pos"), &Control::set_end); - ClassDB::bind_method(D_METHOD("set_position", "pos"), &Control::set_position); + ClassDB::bind_method(D_METHOD("set_begin", "position"), &Control::set_begin); + ClassDB::bind_method(D_METHOD("set_end", "position"), &Control::set_end); + ClassDB::bind_method(D_METHOD("set_position", "position"), &Control::set_position); ClassDB::bind_method(D_METHOD("set_size", "size"), &Control::set_size); ClassDB::bind_method(D_METHOD("set_custom_minimum_size", "size"), &Control::set_custom_minimum_size); - ClassDB::bind_method(D_METHOD("set_global_position", "pos"), &Control::set_global_position); + ClassDB::bind_method(D_METHOD("set_global_position", "position"), &Control::set_global_position); ClassDB::bind_method(D_METHOD("set_rotation", "radians"), &Control::set_rotation); ClassDB::bind_method(D_METHOD("set_rotation_deg", "degrees"), &Control::set_rotation_deg); // TODO: Obsolete this method (old name) properly (GH-4397) @@ -2505,7 +2627,6 @@ void Control::_bind_methods() { ClassDB::bind_method(D_METHOD("get_global_position"), &Control::get_global_position); ClassDB::bind_method(D_METHOD("get_rect"), &Control::get_rect); ClassDB::bind_method(D_METHOD("get_global_rect"), &Control::get_global_rect); - ClassDB::bind_method(D_METHOD("set_area_as_parent_rect", "margin"), &Control::set_area_as_parent_rect, DEFVAL(0)); ClassDB::bind_method(D_METHOD("show_modal", "exclusive"), &Control::show_modal, DEFVAL(false)); ClassDB::bind_method(D_METHOD("set_focus_mode", "mode"), &Control::set_focus_mode); ClassDB::bind_method(D_METHOD("get_focus_mode"), &Control::get_focus_mode); @@ -2560,12 +2681,12 @@ void Control::_bind_methods() { ClassDB::bind_method(D_METHOD("get_v_grow_direction"), &Control::get_v_grow_direction); ClassDB::bind_method(D_METHOD("set_tooltip", "tooltip"), &Control::set_tooltip); - ClassDB::bind_method(D_METHOD("get_tooltip", "atpos"), &Control::get_tooltip, DEFVAL(Point2())); + ClassDB::bind_method(D_METHOD("get_tooltip", "at_position"), &Control::get_tooltip, DEFVAL(Point2())); ClassDB::bind_method(D_METHOD("_get_tooltip"), &Control::_get_tooltip); ClassDB::bind_method(D_METHOD("set_default_cursor_shape", "shape"), &Control::set_default_cursor_shape); ClassDB::bind_method(D_METHOD("get_default_cursor_shape"), &Control::get_default_cursor_shape); - ClassDB::bind_method(D_METHOD("get_cursor_shape", "pos"), &Control::get_cursor_shape, DEFVAL(Point2())); + ClassDB::bind_method(D_METHOD("get_cursor_shape", "position"), &Control::get_cursor_shape, DEFVAL(Point2())); ClassDB::bind_method(D_METHOD("set_focus_neighbour", "margin", "neighbour"), &Control::set_focus_neighbour); ClassDB::bind_method(D_METHOD("get_focus_neighbour", "margin"), &Control::get_focus_neighbour); @@ -2583,7 +2704,7 @@ void Control::_bind_methods() { ClassDB::bind_method(D_METHOD("set_drag_forwarding", "target"), &Control::set_drag_forwarding); ClassDB::bind_method(D_METHOD("set_drag_preview", "control"), &Control::set_drag_preview); - ClassDB::bind_method(D_METHOD("warp_mouse", "to_pos"), &Control::warp_mouse); + ClassDB::bind_method(D_METHOD("warp_mouse", "to_position"), &Control::warp_mouse); ClassDB::bind_method(D_METHOD("minimum_size_changed"), &Control::minimum_size_changed); @@ -2593,9 +2714,9 @@ void Control::_bind_methods() { BIND_VMETHOD(MethodInfo("_gui_input", PropertyInfo(Variant::OBJECT, "event", PROPERTY_HINT_RESOURCE_TYPE, "InputEvent"))); BIND_VMETHOD(MethodInfo(Variant::VECTOR2, "_get_minimum_size")); - BIND_VMETHOD(MethodInfo(Variant::OBJECT, "get_drag_data", PropertyInfo(Variant::VECTOR2, "pos"))); - BIND_VMETHOD(MethodInfo(Variant::BOOL, "can_drop_data", PropertyInfo(Variant::VECTOR2, "pos"), PropertyInfo(Variant::NIL, "data"))); - BIND_VMETHOD(MethodInfo("drop_data", PropertyInfo(Variant::VECTOR2, "pos"), PropertyInfo(Variant::NIL, "data"))); + BIND_VMETHOD(MethodInfo(Variant::OBJECT, "get_drag_data", PropertyInfo(Variant::VECTOR2, "position"))); + BIND_VMETHOD(MethodInfo(Variant::BOOL, "can_drop_data", PropertyInfo(Variant::VECTOR2, "position"), PropertyInfo(Variant::NIL, "data"))); + BIND_VMETHOD(MethodInfo("drop_data", PropertyInfo(Variant::VECTOR2, "position"), PropertyInfo(Variant::NIL, "data"))); ADD_GROUP("Anchor", "anchor_"); ADD_PROPERTYI(PropertyInfo(Variant::REAL, "anchor_left", PROPERTY_HINT_RANGE, "0,1,0.01"), "_set_anchor", "get_anchor", MARGIN_LEFT); @@ -2689,8 +2810,13 @@ void Control::_bind_methods() { BIND_ENUM_CONSTANT(PRESET_HCENTER_WIDE); BIND_ENUM_CONSTANT(PRESET_WIDE); - BIND_ENUM_CONSTANT(SIZE_EXPAND); + BIND_ENUM_CONSTANT(PRESET_MODE_MINSIZE); + BIND_ENUM_CONSTANT(PRESET_MODE_KEEP_WIDTH); + BIND_ENUM_CONSTANT(PRESET_MODE_KEEP_HEIGHT); + BIND_ENUM_CONSTANT(PRESET_MODE_KEEP_SIZE); + BIND_ENUM_CONSTANT(SIZE_FILL); + BIND_ENUM_CONSTANT(SIZE_EXPAND); BIND_ENUM_CONSTANT(SIZE_EXPAND_FILL); BIND_ENUM_CONSTANT(SIZE_SHRINK_CENTER); BIND_ENUM_CONSTANT(SIZE_SHRINK_END); diff --git a/scene/gui/control.h b/scene/gui/control.h index da5c4d0908..5b146b4454 100644 --- a/scene/gui/control.h +++ b/scene/gui/control.h @@ -124,6 +124,13 @@ public: PRESET_WIDE }; + enum LayoutPresetMode { + PRESET_MODE_MINSIZE, + PRESET_MODE_KEEP_WIDTH, + PRESET_MODE_KEEP_HEIGHT, + PRESET_MODE_KEEP_SIZE + }; + private: struct CComparator { @@ -294,34 +301,32 @@ public: /* POSITIONING */ - void set_anchor(Margin p_margin, float p_anchor, bool p_keep_margin = false, bool p_push_opposite_anchor = true); - void set_anchor_and_margin(Margin p_margin, float p_anchor, float p_pos, bool p_push_opposite_anchor = true); void set_anchors_preset(LayoutPreset p_preset, bool p_keep_margin = false); + void set_margins_preset(LayoutPreset p_preset, LayoutPresetMode p_resize_mode = PRESET_MODE_MINSIZE, int p_margin = 0); + void set_anchors_and_margins_preset(LayoutPreset p_preset, LayoutPresetMode p_resize_mode = PRESET_MODE_MINSIZE, int p_margin = 0); + void set_anchor(Margin p_margin, float p_anchor, bool p_keep_margin = false, bool p_push_opposite_anchor = true); float get_anchor(Margin p_margin) const; void set_margin(Margin p_margin, float p_value); + float get_margin(Margin p_margin) const; + + void set_anchor_and_margin(Margin p_margin, float p_anchor, float p_pos, bool p_push_opposite_anchor = true); void set_begin(const Point2 &p_point); // helper void set_end(const Point2 &p_point); // helper - void set_h_grow_direction(GrowDirection p_direction); - GrowDirection get_h_grow_direction() const; - - void set_v_grow_direction(GrowDirection p_direction); - GrowDirection get_v_grow_direction() const; - - float get_margin(Margin p_margin) const; Point2 get_begin() const; Point2 get_end() const; void set_position(const Point2 &p_point); - void set_size(const Size2 &p_size); void set_global_position(const Point2 &p_point); - Point2 get_position() const; Point2 get_global_position() const; + + void set_size(const Size2 &p_size); Size2 get_size() const; + Rect2 get_rect() const; Rect2 get_global_rect() const; Rect2 get_window_rect() const; ///< use with care, as it blocks waiting for the visual server @@ -331,14 +336,18 @@ public: float get_rotation() const; float get_rotation_deg() const; + void set_h_grow_direction(GrowDirection p_direction); + GrowDirection get_h_grow_direction() const; + + void set_v_grow_direction(GrowDirection p_direction); + GrowDirection get_v_grow_direction() const; + void set_pivot_offset(const Vector2 &p_pivot); Vector2 get_pivot_offset() const; void set_scale(const Vector2 &p_scale); Vector2 get_scale() const; - void set_area_as_parent_rect(int p_margin = 0); - void show_modal(bool p_exclusive = false); void set_theme(const Ref<Theme> &p_theme); @@ -449,6 +458,7 @@ VARIANT_ENUM_CAST(Control::FocusMode); VARIANT_ENUM_CAST(Control::SizeFlags); VARIANT_ENUM_CAST(Control::CursorShape); VARIANT_ENUM_CAST(Control::LayoutPreset); +VARIANT_ENUM_CAST(Control::LayoutPresetMode); VARIANT_ENUM_CAST(Control::MouseFilter); VARIANT_ENUM_CAST(Control::GrowDirection); VARIANT_ENUM_CAST(Control::Anchor); diff --git a/scene/gui/file_dialog.cpp b/scene/gui/file_dialog.cpp index 87a232e766..6ade4fcc38 100644 --- a/scene/gui/file_dialog.cpp +++ b/scene/gui/file_dialog.cpp @@ -115,6 +115,9 @@ Vector<String> FileDialog::get_selected_files() const { void FileDialog::update_dir() { dir->set_text(dir_access->get_current_dir()); + if (drives->is_visible()) { + drives->select(dir_access->get_current_drive()); + } } void FileDialog::_dir_entered(String p_dir) { @@ -666,7 +669,6 @@ void FileDialog::_update_drives() { drives->show(); for (int i = 0; i < dir_access->get_drive_count(); i++) { - String d = dir_access->get_drive(i); drives->add_item(dir_access->get_drive(i)); } @@ -757,38 +759,42 @@ FileDialog::FileDialog() { mode = MODE_SAVE_FILE; set_title(RTR("Save a File")); + HBoxContainer *hbc = memnew(HBoxContainer); + hbc->add_child(memnew(Label(RTR("Path:")))); dir = memnew(LineEdit); - HBoxContainer *pathhb = memnew(HBoxContainer); - pathhb->add_child(dir); + hbc->add_child(dir); dir->set_h_size_flags(SIZE_EXPAND_FILL); refresh = memnew(ToolButton); refresh->connect("pressed", this, "_update_file_list"); - pathhb->add_child(refresh); + hbc->add_child(refresh); drives = memnew(OptionButton); - pathhb->add_child(drives); + hbc->add_child(drives); drives->connect("item_selected", this, "_select_drive"); makedir = memnew(Button); makedir->set_text(RTR("Create Folder")); makedir->connect("pressed", this, "_make_dir"); - pathhb->add_child(makedir); - - vbc->add_margin_child(RTR("Path:"), pathhb); + hbc->add_child(makedir); + vbc->add_child(hbc); tree = memnew(Tree); tree->set_hide_root(true); vbc->add_margin_child(RTR("Directories & Files:"), tree, true); + hbc = memnew(HBoxContainer); + hbc->add_child(memnew(Label(RTR("File:")))); file = memnew(LineEdit); - //add_child(file); - vbc->add_margin_child(RTR("File:"), file); - + file->set_stretch_ratio(4); + file->set_h_size_flags(SIZE_EXPAND_FILL); + hbc->add_child(file); filter = memnew(OptionButton); - //add_child(filter); - vbc->add_margin_child(RTR("Filter:"), filter); + filter->set_stretch_ratio(3); + filter->set_h_size_flags(SIZE_EXPAND_FILL); filter->set_clip_text(true); //too many extensions overflow it + hbc->add_child(filter); + vbc->add_child(hbc); dir_access = DirAccess::create(DirAccess::ACCESS_RESOURCES); access = ACCESS_RESOURCES; diff --git a/scene/gui/graph_edit.cpp b/scene/gui/graph_edit.cpp index 4477e9ecf9..946a8c47a3 100644 --- a/scene/gui/graph_edit.cpp +++ b/scene/gui/graph_edit.cpp @@ -283,8 +283,7 @@ void GraphEdit::_notification(int p_what) { 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("SnapGrid")); - //zoom_icon->set_texture( get_icon("Zoom", "EditorIcons")); + snap_button->set_icon(get_icon("snap")); } if (p_what == NOTIFICATION_DRAW) { @@ -352,14 +351,14 @@ bool GraphEdit::_filter_input(const Point2 &p_point) { for (int j = 0; j < gn->get_connection_output_count(); j++) { - Vector2 pos = gn->get_connection_output_pos(j) + gn->get_position(); + Vector2 pos = gn->get_connection_output_position(j) + gn->get_position(); if (pos.distance_to(p_point) < grab_r) return true; } for (int j = 0; j < gn->get_connection_input_count(); j++) { - Vector2 pos = gn->get_connection_input_pos(j) + gn->get_position(); + Vector2 pos = gn->get_connection_input_position(j) + gn->get_position(); if (pos.distance_to(p_point) < grab_r) { return true; } @@ -386,7 +385,7 @@ void GraphEdit::_top_layer_input(const Ref<InputEvent> &p_ev) { for (int j = 0; j < gn->get_connection_output_count(); j++) { - Vector2 pos = gn->get_connection_output_pos(j) + gn->get_position(); + Vector2 pos = gn->get_connection_output_position(j) + gn->get_position(); if (pos.distance_to(mpos) < grab_r) { if (valid_left_disconnect_types.has(gn->get_connection_output_type(j))) { @@ -433,7 +432,7 @@ void GraphEdit::_top_layer_input(const Ref<InputEvent> &p_ev) { for (int j = 0; j < gn->get_connection_input_count(); j++) { - Vector2 pos = gn->get_connection_input_pos(j) + gn->get_position(); + Vector2 pos = gn->get_connection_input_position(j) + gn->get_position(); if (pos.distance_to(mpos) < grab_r) { @@ -501,7 +500,7 @@ void GraphEdit::_top_layer_input(const Ref<InputEvent> &p_ev) { if (!connecting_out) { for (int j = 0; j < gn->get_connection_output_count(); j++) { - Vector2 pos = gn->get_connection_output_pos(j) + gn->get_position(); + Vector2 pos = gn->get_connection_output_position(j) + gn->get_position(); int type = gn->get_connection_output_type(j); if ((type == connecting_type || valid_connection_types.has(ConnType(type, connecting_type))) && pos.distance_to(mpos) < grab_r) { @@ -516,7 +515,7 @@ void GraphEdit::_top_layer_input(const Ref<InputEvent> &p_ev) { for (int j = 0; j < gn->get_connection_input_count(); j++) { - Vector2 pos = gn->get_connection_input_pos(j) + gn->get_position(); + Vector2 pos = gn->get_connection_input_position(j) + gn->get_position(); int type = gn->get_connection_input_type(j); if ((type == connecting_type || valid_connection_types.has(ConnType(type, connecting_type))) && pos.distance_to(mpos) < grab_r) { connecting_target = true; @@ -657,9 +656,9 @@ void GraphEdit::_connections_layer_draw() { continue; } - Vector2 frompos = gfrom->get_connection_output_pos(E->get().from_port) + gfrom->get_offset() * zoom; + Vector2 frompos = gfrom->get_connection_output_position(E->get().from_port) + gfrom->get_offset() * zoom; 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() * zoom; + Vector2 topos = gto->get_connection_input_position(E->get().to_port) + gto->get_offset() * zoom; Color tocolor = gto->get_connection_input_color(E->get().to_port); _draw_cos_line(connections_layer, frompos, topos, color, tocolor); } @@ -682,9 +681,9 @@ void GraphEdit::_top_layer_draw() { ERR_FAIL_COND(!from); Vector2 pos; if (connecting_out) - pos = from->get_connection_output_pos(connecting_index); + pos = from->get_connection_output_position(connecting_index); else - pos = from->get_connection_input_pos(connecting_index); + pos = from->get_connection_input_position(connecting_index); pos += from->get_position(); Vector2 topos; @@ -733,7 +732,7 @@ void GraphEdit::_gui_input(const Ref<InputEvent> &p_ev) { just_selected = true; // TODO: Remove local mouse pos hack if/when InputEventMouseMotion is fixed to support floats //drag_accum+=Vector2(mm->get_relative().x,mm->get_relative().y); - drag_accum = get_local_mouse_pos() - drag_origin; + drag_accum = get_local_mouse_position() - drag_origin; for (int i = get_child_count() - 1; i >= 0; i--) { GraphNode *gn = Object::cast_to<GraphNode>(get_child(i)); if (gn && gn->is_selected()) { @@ -750,7 +749,7 @@ void GraphEdit::_gui_input(const Ref<InputEvent> &p_ev) { } if (mm.is_valid() && box_selecting) { - box_selecting_to = get_local_mouse_pos(); + box_selecting_to = get_local_mouse_position(); box_selecting_rect = Rect2(MIN(box_selecting_from.x, box_selecting_to.x), MIN(box_selecting_from.y, box_selecting_to.y), @@ -810,7 +809,7 @@ void GraphEdit::_gui_input(const Ref<InputEvent> &p_ev) { if (gn) { Rect2 r = gn->get_rect(); r.size *= zoom; - if (r.has_point(get_local_mouse_pos())) + if (r.has_point(get_local_mouse_position())) gn->set_selected(false); } } @@ -848,7 +847,7 @@ void GraphEdit::_gui_input(const Ref<InputEvent> &p_ev) { if (gn_selected->is_resizing()) continue; - if (gn_selected->has_point(gn_selected->get_local_mouse_pos())) { + if (gn_selected->has_point(gn_selected->get_local_mouse_position())) { gn = gn_selected; break; } @@ -862,7 +861,7 @@ void GraphEdit::_gui_input(const Ref<InputEvent> &p_ev) { dragging = true; drag_accum = Vector2(); - drag_origin = get_local_mouse_pos(); + drag_origin = get_local_mouse_position(); 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++) { @@ -888,7 +887,7 @@ void GraphEdit::_gui_input(const Ref<InputEvent> &p_ev) { return; box_selecting = true; - box_selecting_from = get_local_mouse_pos(); + box_selecting_from = get_local_mouse_position(); if (b->get_control()) { box_selection_mode_aditive = true; previus_selected.clear(); @@ -941,17 +940,17 @@ void GraphEdit::_gui_input(const Ref<InputEvent> &p_ev) { //too difficult to get right //set_zoom(zoom/ZOOM_SCALE); } - if (b->get_button_index() == BUTTON_WHEEL_UP) { - h_scroll->set_value(h_scroll->get_value() - h_scroll->get_page() * b->get_factor() / 8); - } - if (b->get_button_index() == BUTTON_WHEEL_DOWN) { - h_scroll->set_value(h_scroll->get_value() + h_scroll->get_page() * b->get_factor() / 8); + if (b->get_button_index() == BUTTON_WHEEL_UP && !Input::get_singleton()->is_key_pressed(KEY_SHIFT)) { + v_scroll->set_value(v_scroll->get_value() - v_scroll->get_page() * b->get_factor() / 8); } - if (b->get_button_index() == BUTTON_WHEEL_RIGHT) { + if (b->get_button_index() == BUTTON_WHEEL_DOWN && !Input::get_singleton()->is_key_pressed(KEY_SHIFT)) { v_scroll->set_value(v_scroll->get_value() + v_scroll->get_page() * b->get_factor() / 8); } - if (b->get_button_index() == BUTTON_WHEEL_LEFT) { - v_scroll->set_value(v_scroll->get_value() - v_scroll->get_page() * b->get_factor() / 8); + if (b->get_button_index() == BUTTON_WHEEL_RIGHT || (b->get_button_index() == BUTTON_WHEEL_DOWN && Input::get_singleton()->is_key_pressed(KEY_SHIFT))) { + h_scroll->set_value(h_scroll->get_value() + h_scroll->get_page() * b->get_factor() / 8); + } + if (b->get_button_index() == BUTTON_WHEEL_LEFT || (b->get_button_index() == BUTTON_WHEEL_UP && Input::get_singleton()->is_key_pressed(KEY_SHIFT))) { + h_scroll->set_value(h_scroll->get_value() - h_scroll->get_page() * b->get_factor() / 8); } } @@ -1167,7 +1166,7 @@ void GraphEdit::_bind_methods() { 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("connection_to_empty", PropertyInfo(Variant::STRING, "from"), PropertyInfo(Variant::INT, "from_slot"), PropertyInfo(Variant::VECTOR2, "release_position"))); ADD_SIGNAL(MethodInfo("delete_nodes_request")); ADD_SIGNAL(MethodInfo("_begin_node_move")); ADD_SIGNAL(MethodInfo("_end_node_move")); @@ -1182,7 +1181,7 @@ GraphEdit::GraphEdit() { top_layer = memnew(GraphEditFilter(this)); add_child(top_layer); top_layer->set_mouse_filter(MOUSE_FILTER_PASS); - top_layer->set_area_as_parent_rect(); + top_layer->set_anchors_and_margins_preset(Control::PRESET_WIDE); top_layer->connect("draw", this, "_top_layer_draw"); top_layer->set_mouse_filter(MOUSE_FILTER_PASS); top_layer->connect("gui_input", this, "_top_layer_input"); diff --git a/scene/gui/graph_node.cpp b/scene/gui/graph_node.cpp index 26732e070b..7655363631 100644 --- a/scene/gui/graph_node.cpp +++ b/scene/gui/graph_node.cpp @@ -518,7 +518,7 @@ int GraphNode::get_connection_output_count() { return conn_output_cache.size(); } -Vector2 GraphNode::get_connection_input_pos(int p_idx) { +Vector2 GraphNode::get_connection_input_position(int p_idx) { if (connpos_dirty) _connpos_update(); @@ -548,7 +548,7 @@ Color GraphNode::get_connection_input_color(int p_idx) { return conn_input_cache[p_idx].color; } -Vector2 GraphNode::get_connection_output_pos(int p_idx) { +Vector2 GraphNode::get_connection_output_position(int p_idx) { if (connpos_dirty) _connpos_update(); @@ -690,10 +690,10 @@ void GraphNode::_bind_methods() { ClassDB::bind_method(D_METHOD("get_connection_output_count"), &GraphNode::get_connection_output_count); ClassDB::bind_method(D_METHOD("get_connection_input_count"), &GraphNode::get_connection_input_count); - ClassDB::bind_method(D_METHOD("get_connection_output_pos", "idx"), &GraphNode::get_connection_output_pos); + ClassDB::bind_method(D_METHOD("get_connection_output_position", "idx"), &GraphNode::get_connection_output_position); ClassDB::bind_method(D_METHOD("get_connection_output_type", "idx"), &GraphNode::get_connection_output_type); ClassDB::bind_method(D_METHOD("get_connection_output_color", "idx"), &GraphNode::get_connection_output_color); - ClassDB::bind_method(D_METHOD("get_connection_input_pos", "idx"), &GraphNode::get_connection_input_pos); + ClassDB::bind_method(D_METHOD("get_connection_input_position", "idx"), &GraphNode::get_connection_input_position); ClassDB::bind_method(D_METHOD("get_connection_input_type", "idx"), &GraphNode::get_connection_input_type); ClassDB::bind_method(D_METHOD("get_connection_input_color", "idx"), &GraphNode::get_connection_input_color); diff --git a/scene/gui/graph_node.h b/scene/gui/graph_node.h index a606e47acd..a0840544dd 100644 --- a/scene/gui/graph_node.h +++ b/scene/gui/graph_node.h @@ -138,10 +138,10 @@ public: int get_connection_input_count(); int get_connection_output_count(); - Vector2 get_connection_input_pos(int p_idx); + Vector2 get_connection_input_position(int p_idx); int get_connection_input_type(int p_idx); Color get_connection_input_color(int p_idx); - Vector2 get_connection_output_pos(int p_idx); + Vector2 get_connection_output_position(int p_idx); int get_connection_output_type(int p_idx); Color get_connection_output_color(int p_idx); diff --git a/scene/gui/item_list.cpp b/scene/gui/item_list.cpp index 9a605c98f3..623a110263 100644 --- a/scene/gui/item_list.cpp +++ b/scene/gui/item_list.cpp @@ -489,7 +489,7 @@ void ItemList::_gui_input(const Ref<InputEvent> &p_event) { if (mb->get_button_index() == BUTTON_RIGHT) { - emit_signal("item_rmb_selected", i, pos); + emit_signal("item_rmb_selected", i, get_local_mouse_position()); } } else { @@ -500,7 +500,7 @@ void ItemList::_gui_input(const Ref<InputEvent> &p_event) { if (items[i].selected && mb->get_button_index() == BUTTON_RIGHT) { - emit_signal("item_rmb_selected", i, pos); + emit_signal("item_rmb_selected", i, get_local_mouse_position()); } else { bool selected = !items[i].selected; @@ -515,7 +515,7 @@ void ItemList::_gui_input(const Ref<InputEvent> &p_event) { if (mb->get_button_index() == BUTTON_RIGHT) { - emit_signal("item_rmb_selected", i, pos); + emit_signal("item_rmb_selected", i, get_local_mouse_position()); } else if (/*select_mode==SELECT_SINGLE &&*/ mb->is_doubleclick()) { emit_signal("item_activated", i); @@ -524,11 +524,6 @@ void ItemList::_gui_input(const Ref<InputEvent> &p_event) { } return; - } else { - Vector<int> sItems = get_selected_items(); - for (int i = 0; i < sItems.size(); i++) { - unselect(sItems[i]); - } } } if (mb.is_valid() && mb->get_button_index() == BUTTON_WHEEL_UP && mb->is_pressed()) { @@ -750,8 +745,8 @@ void ItemList::_notification(int p_what) { Ref<StyleBox> bg = get_stylebox("bg"); int mw = scroll_bar->get_minimum_size().x; - scroll_bar->set_anchor_and_margin(MARGIN_LEFT, ANCHOR_END, -mw + bg->get_margin(MARGIN_RIGHT)); - scroll_bar->set_anchor_and_margin(MARGIN_RIGHT, ANCHOR_END, -bg->get_margin(MARGIN_RIGHT)); + scroll_bar->set_anchor_and_margin(MARGIN_LEFT, ANCHOR_END, -mw); + scroll_bar->set_anchor_and_margin(MARGIN_RIGHT, ANCHOR_END, 0); scroll_bar->set_anchor_and_margin(MARGIN_TOP, ANCHOR_BEGIN, bg->get_margin(MARGIN_TOP)); scroll_bar->set_anchor_and_margin(MARGIN_BOTTOM, ANCHOR_END, -bg->get_margin(MARGIN_BOTTOM)); @@ -838,6 +833,10 @@ void ItemList::_notification(int p_what) { if (fixed_column_width > 0) minsize.x = fixed_column_width; max_column_width = MAX(max_column_width, minsize.x); + + // elements need to adapt to the selected size + minsize.y += vseparation; + minsize.x += hseparation; items[i].rect_cache.size = minsize; items[i].min_rect_cache.size = minsize; } @@ -851,7 +850,6 @@ void ItemList::_notification(int p_what) { while (true) { //repeat util all fits - //print_line("try with "+itos(current_columns)); bool all_fit = true; Vector2 ofs; int col = 0; @@ -866,13 +864,11 @@ void ItemList::_notification(int p_what) { break; } - items[i].rect_cache = items[i].min_rect_cache; if (same_column_width) items[i].rect_cache.size.x = max_column_width; items[i].rect_cache.position = ofs; max_h = MAX(max_h, items[i].rect_cache.size.y); ofs.x += items[i].rect_cache.size.x + hseparation; - //print_line("item "+itos(i)+" ofs "+rtos(items[i].rect_cache.size.x)); col++; if (col == current_columns) { @@ -901,7 +897,6 @@ void ItemList::_notification(int p_what) { auto_height_value = ofs.y + max_h + bg->get_minimum_size().height; scroll_bar->set_max(max); scroll_bar->set_page(page); - //print_line("max: "+rtos(max)+" page "+rtos(page)); if (max <= page) { scroll_bar->set_value(0); scroll_bar->hide(); @@ -950,23 +945,23 @@ void ItemList::_notification(int p_what) { if (items[i].selected) { Rect2 r = rcache; r.position += base_ofs; + r.position.y -= vseparation / 2; + r.size.y += vseparation; + r.position.x -= hseparation / 2; + r.size.x += hseparation; - // Use stylebox to dimension potential bg color - r.position.x -= sbsel->get_margin(MARGIN_LEFT); - r.size.x += sbsel->get_margin(MARGIN_LEFT) + sbsel->get_margin(MARGIN_RIGHT); - r.position.y -= sbsel->get_margin(MARGIN_TOP); - r.size.y += sbsel->get_margin(MARGIN_TOP) + sbsel->get_margin(MARGIN_BOTTOM); draw_style_box(sbsel, r); } - if (items[i].custom_bg.a > 0.001) { - Rect2 r = rcache; r.position += base_ofs; // Size rect to make the align the temperature colors r.position.y -= vseparation / 2; r.size.y += vseparation; + r.position.x -= hseparation / 2; + r.size.x += hseparation; + draw_rect(r, items[i].custom_bg); } @@ -1103,12 +1098,16 @@ void ItemList::_notification(int p_what) { Rect2 r = rcache; r.position += base_ofs; + r.position.y -= vseparation / 2; + r.size.y += vseparation; + r.position.x -= hseparation / 2; + r.size.x += hseparation; draw_style_box(cursor, r); } } for (int i = 0; i < separators.size(); i++) { - draw_line(Vector2(bg->get_margin(MARGIN_LEFT), base_ofs.y + separators[i]), Vector2(size.width - bg->get_margin(MARGIN_LEFT), base_ofs.y + separators[i]), guide_color); + draw_line(Vector2(bg->get_margin(MARGIN_LEFT), base_ofs.y + separators[i]), Vector2(size.width - bg->get_margin(MARGIN_RIGHT), base_ofs.y + separators[i]), guide_color); } } } @@ -1117,7 +1116,7 @@ void ItemList::_scroll_changed(double) { update(); } -int ItemList::get_item_at_pos(const Point2 &p_pos, bool p_exact) const { +int ItemList::get_item_at_position(const Point2 &p_pos, bool p_exact) const { Vector2 pos = p_pos; Ref<StyleBox> bg = get_stylebox("bg"); @@ -1165,7 +1164,7 @@ bool ItemList::is_pos_at_end_of_items(const Point2 &p_pos) const { String ItemList::get_tooltip(const Point2 &p_pos) const { - int closest = get_item_at_pos(p_pos); + int closest = get_item_at_position(p_pos); if (closest != -1) { if (!items[closest].tooltip_enabled) { @@ -1362,7 +1361,7 @@ void ItemList::_bind_methods() { ClassDB::bind_method(D_METHOD("set_auto_height", "enable"), &ItemList::set_auto_height); ClassDB::bind_method(D_METHOD("has_auto_height"), &ItemList::has_auto_height); - ClassDB::bind_method(D_METHOD("get_item_at_pos", "pos", "exact"), &ItemList::get_item_at_pos, DEFVAL(false)); + ClassDB::bind_method(D_METHOD("get_item_at_position", "position", "exact"), &ItemList::get_item_at_position, DEFVAL(false)); ClassDB::bind_method(D_METHOD("ensure_current_is_visible"), &ItemList::ensure_current_is_visible); @@ -1395,7 +1394,7 @@ void ItemList::_bind_methods() { BIND_ENUM_CONSTANT(SELECT_MULTI); ADD_SIGNAL(MethodInfo("item_selected", PropertyInfo(Variant::INT, "index"))); - ADD_SIGNAL(MethodInfo("item_rmb_selected", PropertyInfo(Variant::INT, "index"), PropertyInfo(Variant::VECTOR2, "atpos"))); + ADD_SIGNAL(MethodInfo("item_rmb_selected", PropertyInfo(Variant::INT, "index"), PropertyInfo(Variant::VECTOR2, "at_position"))); ADD_SIGNAL(MethodInfo("multi_selected", PropertyInfo(Variant::INT, "index"), PropertyInfo(Variant::BOOL, "selected"))); ADD_SIGNAL(MethodInfo("item_activated", PropertyInfo(Variant::INT, "index"))); diff --git a/scene/gui/item_list.h b/scene/gui/item_list.h index 673b7d8956..ccdd705325 100644 --- a/scene/gui/item_list.h +++ b/scene/gui/item_list.h @@ -199,7 +199,7 @@ public: int find_metadata(const Variant &p_metadata) const; virtual String get_tooltip(const Point2 &p_pos) const; - int get_item_at_pos(const Point2 &p_pos, bool p_exact = false) const; + int get_item_at_position(const Point2 &p_pos, bool p_exact = false) const; bool is_pos_at_end_of_items(const Point2 &p_pos) const; void set_icon_scale(real_t p_scale); diff --git a/scene/gui/line_edit.cpp b/scene/gui/line_edit.cpp index 6a5f56c78c..ed8eff436c 100644 --- a/scene/gui/line_edit.cpp +++ b/scene/gui/line_edit.cpp @@ -49,7 +49,7 @@ void LineEdit::_gui_input(Ref<InputEvent> p_event) { if (b.is_valid()) { if (b->is_pressed() && b->get_button_index() == BUTTON_RIGHT) { - menu->set_position(get_global_transform().xform(get_local_mouse_pos())); + menu->set_position(get_global_transform().xform(get_local_mouse_position())); menu->set_size(Vector2(1, 1)); menu->popup(); grab_focus(); @@ -186,7 +186,7 @@ void LineEdit::_gui_input(Ref<InputEvent> p_event) { cached_width += font->get_char_size(text[i]).width; } - set_cursor_pos(0); + set_cursor_position(0); _text_changed(); } @@ -273,7 +273,7 @@ void LineEdit::_gui_input(Ref<InputEvent> p_event) { delete_text(cc, cursor_pos); - set_cursor_pos(cc); + set_cursor_position(cc); } else { undo_text = text; @@ -297,7 +297,7 @@ void LineEdit::_gui_input(Ref<InputEvent> p_event) { #ifdef APPLE_STYLE_KEYS if (k->get_command()) { - set_cursor_pos(0); + set_cursor_position(0); } else if (k->get_alt()) { #else @@ -319,10 +319,10 @@ void LineEdit::_gui_input(Ref<InputEvent> p_event) { cc--; } - set_cursor_pos(cc); + set_cursor_position(cc); } else { - set_cursor_pos(get_cursor_pos() - 1); + set_cursor_position(get_cursor_position() - 1); } shift_selection_check_post(k->get_shift()); @@ -341,7 +341,7 @@ void LineEdit::_gui_input(Ref<InputEvent> p_event) { #ifdef APPLE_STYLE_KEYS if (k->get_command()) { - set_cursor_pos(text.length()); + set_cursor_position(text.length()); } else if (k->get_alt()) { #else if (k->get_alt()) { @@ -362,10 +362,10 @@ void LineEdit::_gui_input(Ref<InputEvent> p_event) { cc++; } - set_cursor_pos(cc); + set_cursor_position(cc); } else { - set_cursor_pos(get_cursor_pos() + 1); + set_cursor_position(get_cursor_position() + 1); } shift_selection_check_post(k->get_shift()); @@ -418,7 +418,7 @@ void LineEdit::_gui_input(Ref<InputEvent> p_event) { } else { undo_text = text; - set_cursor_pos(cursor_pos + 1); + set_cursor_position(cursor_pos + 1); delete_char(); } @@ -433,7 +433,7 @@ void LineEdit::_gui_input(Ref<InputEvent> p_event) { case KEY_HOME: { shift_selection_check_pre(k->get_shift()); - set_cursor_pos(0); + set_cursor_position(0); shift_selection_check_post(k->get_shift()); } break; case KEY_KP_1: { @@ -446,7 +446,7 @@ void LineEdit::_gui_input(Ref<InputEvent> p_event) { case KEY_END: { shift_selection_check_pre(k->get_shift()); - set_cursor_pos(text.length()); + set_cursor_position(text.length()); shift_selection_check_post(k->get_shift()); } break; @@ -534,7 +534,7 @@ void LineEdit::_notification(int p_what) { switch (p_what) { #ifdef TOOLS_ENABLED case NOTIFICATION_ENTER_TREE: { - if (Engine::get_singleton()->is_editor_hint()) { + if (Engine::get_singleton()->is_editor_hint() && !get_tree()->is_node_being_edited(this)) { cursor_set_blink_enabled(EDITOR_DEF("text_editor/cursor/caret_blink", false)); cursor_set_blink_speed(EDITOR_DEF("text_editor/cursor/caret_blink_speed", 0.65)); @@ -546,7 +546,7 @@ void LineEdit::_notification(int p_what) { #endif case NOTIFICATION_RESIZED: { - set_cursor_pos(get_cursor_pos()); + set_cursor_position(get_cursor_position()); } break; case MainLoop::NOTIFICATION_WM_FOCUS_IN: { @@ -601,7 +601,10 @@ void LineEdit::_notification(int p_what) { } break; case ALIGN_CENTER: { - x_ofs = int(size.width - (cached_width)) / 2; + if (window_pos != 0) + x_ofs = style->get_offset().x; + else + x_ofs = int(size.width - (cached_width)) / 2; } break; case ALIGN_RIGHT: { @@ -742,7 +745,7 @@ void LineEdit::_notification(int p_what) { draw_caret = true; } - Point2 cursor_pos = Point2(get_cursor_pos(), 1) * get_minimum_size().height; + Point2 cursor_pos = Point2(get_cursor_position(), 1) * get_minimum_size().height; OS::get_singleton()->set_ime_position(get_global_position() + cursor_pos); OS::get_singleton()->set_ime_intermediate_text_callback(_ime_text_callback, this); @@ -806,9 +809,9 @@ void LineEdit::undo() { cached_width += font->get_char_size(text[i]).width; if (old_cursor_pos > text.length()) { - set_cursor_pos(text.length()); + set_cursor_position(text.length()); } else { - set_cursor_pos(old_cursor_pos); + set_cursor_position(old_cursor_pos); } _text_changed(); @@ -846,7 +849,10 @@ void LineEdit::set_cursor_at_pixel_pos(int p_x) { } break; case ALIGN_CENTER: { - pixel_ofs = int(size.width - (cached_width)) / 2; + if (window_pos != 0) + pixel_ofs = int(style->get_offset().x); + else + pixel_ofs = int(size.width - (cached_width)) / 2; } break; case ALIGN_RIGHT: { @@ -869,14 +875,14 @@ void LineEdit::set_cursor_at_pixel_pos(int p_x) { ofs++; } - set_cursor_pos(ofs); + set_cursor_position(ofs); /* int new_cursor_pos=p_x; int charwidth=draw_area->get_font_char_width(' ',0); new_cursor_pos=( ( (new_cursor_pos-2)+ (charwidth/2) ) /charwidth ); if (new_cursor_pos>(int)text.length()) new_cursor_pos=text.length(); - set_cursor_pos(window_pos+new_cursor_pos); */ + set_cursor_position(window_pos+new_cursor_pos); */ } bool LineEdit::cursor_get_blink_enabled() const { @@ -929,7 +935,7 @@ void LineEdit::delete_char() { text.erase(cursor_pos - 1, 1); - set_cursor_pos(get_cursor_pos() - 1); + set_cursor_position(get_cursor_position() - 1); if (cursor_pos == window_pos) { @@ -1011,7 +1017,7 @@ float LineEdit::get_placeholder_alpha() const { return placeholder_alpha; } -void LineEdit::set_cursor_pos(int p_pos) { +void LineEdit::set_cursor_position(int p_pos) { if (p_pos > (int)text.length()) p_pos = text.length(); @@ -1065,7 +1071,7 @@ void LineEdit::set_cursor_pos(int p_pos) { update(); } -int LineEdit::get_cursor_pos() const { +int LineEdit::get_cursor_position() const { return cursor_pos; } @@ -1093,7 +1099,7 @@ void LineEdit::append_at_cursor(String p_text) { String pre = text.substr(0, cursor_pos); String post = text.substr(cursor_pos, text.length() - cursor_pos); text = pre + p_text + post; - set_cursor_pos(cursor_pos + p_text.length()); + set_cursor_position(cursor_pos + p_text.length()); } } @@ -1330,8 +1336,8 @@ void LineEdit::_bind_methods() { ClassDB::bind_method(D_METHOD("get_placeholder"), &LineEdit::get_placeholder); ClassDB::bind_method(D_METHOD("set_placeholder_alpha", "alpha"), &LineEdit::set_placeholder_alpha); ClassDB::bind_method(D_METHOD("get_placeholder_alpha"), &LineEdit::get_placeholder_alpha); - ClassDB::bind_method(D_METHOD("set_cursor_pos", "pos"), &LineEdit::set_cursor_pos); - ClassDB::bind_method(D_METHOD("get_cursor_pos"), &LineEdit::get_cursor_pos); + ClassDB::bind_method(D_METHOD("set_cursor_position", "position"), &LineEdit::set_cursor_position); + ClassDB::bind_method(D_METHOD("get_cursor_position"), &LineEdit::get_cursor_position); ClassDB::bind_method(D_METHOD("set_expand_to_text_length", "enabled"), &LineEdit::set_expand_to_text_length); ClassDB::bind_method(D_METHOD("get_expand_to_text_length"), &LineEdit::get_expand_to_text_length); ClassDB::bind_method(D_METHOD("cursor_set_blink_enabled", "enabled"), &LineEdit::cursor_set_blink_enabled); diff --git a/scene/gui/line_edit.h b/scene/gui/line_edit.h index 52a4a29a33..661f9b60b9 100644 --- a/scene/gui/line_edit.h +++ b/scene/gui/line_edit.h @@ -149,8 +149,8 @@ public: String get_placeholder() const; void set_placeholder_alpha(float p_alpha); float get_placeholder_alpha() const; - void set_cursor_pos(int p_pos); - int get_cursor_pos() const; + void set_cursor_position(int p_pos); + int get_cursor_position() const; void set_max_length(int p_max_length); int get_max_length() const; void append_at_cursor(String p_text); diff --git a/scene/gui/popup.cpp b/scene/gui/popup.cpp index 5a2a552943..2110298950 100644 --- a/scene/gui/popup.cpp +++ b/scene/gui/popup.cpp @@ -265,7 +265,7 @@ void PopupPanel::set_child_rect(Control *p_child) { ERR_FAIL_NULL(p_child); Ref<StyleBox> p = get_stylebox("panel"); - p_child->set_area_as_parent_rect(); + p_child->set_anchors_preset(Control::PRESET_WIDE); p_child->set_margin(MARGIN_LEFT, p->get_margin(MARGIN_LEFT)); p_child->set_margin(MARGIN_RIGHT, -p->get_margin(MARGIN_RIGHT)); p_child->set_margin(MARGIN_TOP, p->get_margin(MARGIN_TOP)); diff --git a/scene/gui/range.cpp b/scene/gui/range.cpp index 1dbec6e5a1..f8fb786fa7 100644 --- a/scene/gui/range.cpp +++ b/scene/gui/range.cpp @@ -208,10 +208,12 @@ void Range::_ref_shared(Shared *p_shared) { void Range::_unref_shared() { - shared->owners.erase(this); - if (shared->owners.size() == 0) { - memdelete(shared); - shared = NULL; + if (shared) { + shared->owners.erase(this); + if (shared->owners.size() == 0) { + memdelete(shared); + shared = NULL; + } } } diff --git a/scene/gui/rich_text_label.cpp b/scene/gui/rich_text_label.cpp index 71b9c4ec72..ad519d8d0c 100644 --- a/scene/gui/rich_text_label.cpp +++ b/scene/gui/rich_text_label.cpp @@ -84,7 +84,7 @@ Rect2 RichTextLabel::_get_text_rect() { Ref<StyleBox> style = get_stylebox("normal"); return Rect2(style->get_offset(), get_size() - style->get_minimum_size()); } -void RichTextLabel::_process_line(ItemFrame *p_frame, const Vector2 &p_ofs, int &y, int p_width, int p_line, ProcessMode p_mode, const Ref<Font> &p_base_font, const Color &p_base_color, const Point2i &p_click_pos, Item **r_click_item, int *r_click_char, bool *r_outside, int p_char_count) { +int RichTextLabel::_process_line(ItemFrame *p_frame, const Vector2 &p_ofs, int &y, int p_width, int p_line, ProcessMode p_mode, const Ref<Font> &p_base_font, const Color &p_base_color, const Point2i &p_click_pos, Item **r_click_item, int *r_click_char, bool *r_outside, int p_char_count) { RID ci; if (r_outside) @@ -104,9 +104,11 @@ void RichTextLabel::_process_line(ItemFrame *p_frame, const Vector2 &p_ofs, int int line = 0; int spaces = 0; + int height = get_size().y; + if (p_mode != PROCESS_CACHE) { - ERR_FAIL_INDEX(line, l.offset_caches.size()); + ERR_FAIL_INDEX_V(line, l.offset_caches.size(), 0); line_ofs = l.offset_caches[line]; } @@ -133,12 +135,20 @@ void RichTextLabel::_process_line(ItemFrame *p_frame, const Vector2 &p_ofs, int //line height should be the font height for the first time, this ensures that an empty line will never have zero height and successive newlines are displayed int line_height = cfont->get_height(); + int nonblank_line_count = 0; //number of nonblank lines as counted during PROCESS_DRAW + Variant meta; +#define RETURN return nonblank_line_count + #define NEW_LINE \ { \ if (p_mode != PROCESS_CACHE) { \ line++; \ + if (!line_is_blank) { \ + nonblank_line_count++; \ + } \ + line_is_blank = true; \ if (line < l.offset_caches.size()) \ line_ofs = l.offset_caches[line]; \ wofs = margin; \ @@ -168,7 +178,7 @@ void RichTextLabel::_process_line(ItemFrame *p_frame, const Vector2 &p_ofs, int if (r_outside) *r_outside = true; \ *r_click_item = it; \ *r_click_char = rchar; \ - return; \ + RETURN; \ } \ } @@ -185,7 +195,7 @@ void RichTextLabel::_process_line(ItemFrame *p_frame, const Vector2 &p_ofs, int if (r_outside) *r_outside = true; \ *r_click_item = it; \ *r_click_char = rchar; \ - return; \ + RETURN; \ } \ NEW_LINE \ } @@ -196,7 +206,7 @@ void RichTextLabel::_process_line(ItemFrame *p_frame, const Vector2 &p_ofs, int if (r_outside) *r_outside = false; \ *r_click_item = it; \ *r_click_char = rchar; \ - return; \ + RETURN; \ } \ wofs += m_width; \ } @@ -206,6 +216,9 @@ void RichTextLabel::_process_line(ItemFrame *p_frame, const Vector2 &p_ofs, int line_height = m_height; \ } +#define YRANGE_VISIBLE(m_top, m_height) \ + (m_height > 0 && ((m_top >= 0 && m_top < height) || ((m_top + m_height - 1) >= 0 && (m_top + m_height - 1) < height))) + Color selection_fg; Color selection_bg; @@ -214,8 +227,10 @@ void RichTextLabel::_process_line(ItemFrame *p_frame, const Vector2 &p_ofs, int selection_fg = get_color("font_color_selected"); selection_bg = get_color("selection_color"); } + int rchar = 0; int lh = 0; + bool line_is_blank = true; while (it) { @@ -327,7 +342,10 @@ void RichTextLabel::_process_line(ItemFrame *p_frame, const Vector2 &p_ofs, int int cw = 0; - bool visible = visible_characters < 0 || p_char_count < visible_characters; + bool visible = visible_characters < 0 || p_char_count < visible_characters && YRANGE_VISIBLE(y + lh - (fh - 0 * ascent), fh); //getting rid of ascent seems to work?? + if (visible) + line_is_blank = false; + if (c[i] == '\t') visible = false; @@ -336,7 +354,7 @@ void RichTextLabel::_process_line(ItemFrame *p_frame, const Vector2 &p_ofs, int cw = font->get_char_size(c[i], c[i + 1]).x; draw_rect(Rect2(p_ofs.x + pofs, p_ofs.y + y, cw, lh), selection_bg); if (visible) - font->draw_char(ci, p_ofs + Point2(align_ofs + pofs, y + lh - (fh - ascent)), c[i], c[i + 1], selection_fg); + font->draw_char(ci, p_ofs + Point2(align_ofs + pofs, y + lh - (fh - ascent)), c[i], c[i + 1], override_selected_font_color ? selection_fg : color); } else { if (visible) @@ -384,7 +402,9 @@ void RichTextLabel::_process_line(ItemFrame *p_frame, const Vector2 &p_ofs, int ENSURE_WIDTH(img->image->get_width()); - bool visible = visible_characters < 0 || p_char_count < visible_characters; + bool visible = visible_characters < 0 || p_char_count < visible_characters && YRANGE_VISIBLE(y + lh - font->get_descent() - img->image->get_height(), img->image->get_height()); + if (visible) + line_is_blank = false; if (p_mode == PROCESS_DRAW && visible) { img->image->draw(ci, p_ofs + Point2(align_ofs + wofs, y + lh - font->get_descent() - img->image->get_height())); @@ -398,8 +418,10 @@ void RichTextLabel::_process_line(ItemFrame *p_frame, const Vector2 &p_ofs, int case ITEM_NEWLINE: { lh = 0; - if (p_mode != PROCESS_CACHE) + if (p_mode != PROCESS_CACHE) { lh = line < l.height_caches.size() ? l.height_caches[line] : 1; + line_is_blank = true; + } } break; case ITEM_TABLE: { @@ -436,7 +458,7 @@ void RichTextLabel::_process_line(ItemFrame *p_frame, const Vector2 &p_ofs, int idx++; } - //compute available width and total radio (for expanders) + //compute available width and total ratio (for expanders) int total_ratio = 0; int available_width = p_width - hseparation * (table->columns.size() - 1); @@ -494,12 +516,14 @@ void RichTextLabel::_process_line(ItemFrame *p_frame, const Vector2 &p_ofs, int int lines_ofs = p_ofs.y + offset.y + draw_ofs.y; bool visible = lines_ofs < get_size().height && lines_ofs + lines_h >= 0; + if (visible) + line_is_blank = false; for (int i = 0; i < frame->lines.size(); i++) { if (visible) { if (p_mode == PROCESS_DRAW) { - _process_line(frame, p_ofs + offset + draw_ofs + Vector2(0, yofs), ly, table->columns[column].width, i, PROCESS_DRAW, cfont, ccolor); + nonblank_line_count += _process_line(frame, p_ofs + offset + draw_ofs + Vector2(0, yofs), ly, table->columns[column].width, i, PROCESS_DRAW, cfont, ccolor); } else if (p_mode == PROCESS_POINTER) { _process_line(frame, p_ofs + offset + draw_ofs + Vector2(0, yofs), ly, table->columns[column].width, i, PROCESS_POINTER, cfont, ccolor, p_click_pos, r_click_item, r_click_char, r_outside); } @@ -547,15 +571,17 @@ void RichTextLabel::_process_line(ItemFrame *p_frame, const Vector2 &p_ofs, int if (r_outside) *r_outside = true; *r_click_item = itp; *r_click_char = rchar; - return; + RETURN; } break; } } - NEW_LINE; + RETURN; + +#undef RETURN #undef NEW_LINE #undef ENSURE_WIDTH #undef ADVANCE @@ -665,14 +691,14 @@ void RichTextLabel::_notification(int p_what) { if (from_line >= main->lines.size()) break; //nothing to draw - int y = (main->lines[from_line].height_accum_cache - main->lines[from_line].height_cache) - ofs; Ref<Font> base_font = get_font("normal_font"); Color base_color = get_color("default_color"); + visible_line_count = 0; while (y < size.height && from_line < main->lines.size()) { - _process_line(main, text_rect.get_position(), y, text_rect.get_size().width - scroll_w, from_line, PROCESS_DRAW, base_font, base_color, Point2i(), NULL, NULL, NULL, total_chars); + visible_line_count += _process_line(main, text_rect.get_position(), y, text_rect.get_size().width - scroll_w, from_line, PROCESS_DRAW, base_font, base_color, Point2i(), NULL, NULL, NULL, total_chars); total_chars += main->lines[from_line].char_count; from_line++; } @@ -1013,7 +1039,7 @@ void RichTextLabel::_validate_line_caches(ItemFrame *p_frame) { if (p_frame->first_invalid_line == p_frame->lines.size()) return; - //validate invalid lines!s + //validate invalid lines Size2 size = get_size(); Rect2 text_rect = _get_text_rect(); @@ -1350,6 +1376,16 @@ bool RichTextLabel::is_meta_underlined() const { return underline_meta; } +void RichTextLabel::set_override_selected_font_color(bool p_override_selected_font_color) { + + override_selected_font_color = p_override_selected_font_color; +} + +bool RichTextLabel::is_overriding_selected_font_color() const { + + return override_selected_font_color; +} + void RichTextLabel::set_offset(int p_pixel) { vscroll->set_value(p_pixel); @@ -1665,6 +1701,12 @@ int RichTextLabel::get_line_count() const { return current_frame->lines.size(); } +int RichTextLabel::get_visible_line_count() const { + if (!is_visible()) + return 0; + return visible_line_count; +} + void RichTextLabel::set_selection_enabled(bool p_enabled) { selection.enabled = p_enabled; @@ -1874,6 +1916,9 @@ void RichTextLabel::_bind_methods() { ClassDB::bind_method(D_METHOD("set_meta_underline", "enable"), &RichTextLabel::set_meta_underline); ClassDB::bind_method(D_METHOD("is_meta_underlined"), &RichTextLabel::is_meta_underlined); + ClassDB::bind_method(D_METHOD("set_override_selected_font_color", "override"), &RichTextLabel::set_override_selected_font_color); + ClassDB::bind_method(D_METHOD("is_overriding_selected_font_color"), &RichTextLabel::is_overriding_selected_font_color); + ClassDB::bind_method(D_METHOD("set_scroll_active", "active"), &RichTextLabel::set_scroll_active); ClassDB::bind_method(D_METHOD("is_scroll_active"), &RichTextLabel::is_scroll_active); @@ -1907,14 +1952,18 @@ void RichTextLabel::_bind_methods() { ClassDB::bind_method(D_METHOD("set_use_bbcode", "enable"), &RichTextLabel::set_use_bbcode); ClassDB::bind_method(D_METHOD("is_using_bbcode"), &RichTextLabel::is_using_bbcode); + ClassDB::bind_method(D_METHOD("get_line_count"), &RichTextLabel::get_line_count); + ClassDB::bind_method(D_METHOD("get_visible_line_count"), &RichTextLabel::get_visible_line_count); + ADD_GROUP("BBCode", "bbcode_"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "bbcode_enabled"), "set_use_bbcode", "is_using_bbcode"); ADD_PROPERTY(PropertyInfo(Variant::STRING, "bbcode_text", PROPERTY_HINT_MULTILINE_TEXT), "set_bbcode", "get_bbcode"); ADD_PROPERTY(PropertyInfo(Variant::INT, "visible_characters", PROPERTY_HINT_RANGE, "-1,128000,1"), "set_visible_characters", "get_visible_characters"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "percent_visible", PROPERTY_HINT_RANGE, "0,1,0.001"), "set_percent_visible", "get_percent_visible"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "override_selected_font_color"), "set_override_selected_font_color", "is_overriding_selected_font_color"); - ADD_SIGNAL(MethodInfo("meta_clicked", PropertyInfo(Variant::NIL, "meta"))); + ADD_SIGNAL(MethodInfo("meta_clicked", PropertyInfo(Variant::NIL, "meta", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NIL_IS_VARIANT))); BIND_ENUM_CONSTANT(ALIGN_LEFT); BIND_ENUM_CONSTANT(ALIGN_CENTER); @@ -1935,6 +1984,7 @@ void RichTextLabel::_bind_methods() { BIND_ENUM_CONSTANT(ITEM_ALIGN); BIND_ENUM_CONSTANT(ITEM_INDENT); BIND_ENUM_CONSTANT(ITEM_LIST); + BIND_ENUM_CONSTANT(ITEM_TABLE); BIND_ENUM_CONSTANT(ITEM_META); } @@ -1968,6 +2018,7 @@ RichTextLabel::RichTextLabel() { tab_size = 4; default_align = ALIGN_LEFT; underline_meta = true; + override_selected_font_color = false; scroll_visible = false; scroll_follow = false; @@ -1995,6 +2046,7 @@ RichTextLabel::RichTextLabel() { visible_characters = -1; percent_visible = 1; + visible_line_count = 0; set_clip_contents(true); } diff --git a/scene/gui/rich_text_label.h b/scene/gui/rich_text_label.h index 4db2c3a8e9..f9e37b1094 100644 --- a/scene/gui/rich_text_label.h +++ b/scene/gui/rich_text_label.h @@ -217,9 +217,11 @@ private: int scroll_w; bool updating_scroll; int current_idx; + int visible_line_count; int tab_size; bool underline_meta; + bool override_selected_font_color; Align default_align; @@ -260,7 +262,7 @@ private: int visible_characters; float percent_visible; - void _process_line(ItemFrame *p_frame, const Vector2 &p_ofs, int &y, int p_width, int p_line, ProcessMode p_mode, const Ref<Font> &p_base_font, const Color &p_base_color, const Point2i &p_click_pos = Point2i(), Item **r_click_item = NULL, int *r_click_char = NULL, bool *r_outside = NULL, int p_char_count = 0); + int _process_line(ItemFrame *p_frame, const Vector2 &p_ofs, int &y, int p_width, int p_line, ProcessMode p_mode, const Ref<Font> &p_base_font, const Color &p_base_color, const Point2i &p_click_pos = Point2i(), Item **r_click_item = NULL, int *r_click_char = NULL, bool *r_outside = NULL, int p_char_count = 0); void _find_click(ItemFrame *p_frame, const Point2i &p_click, Item **r_click_item = NULL, int *r_click_char = NULL, bool *r_outside = NULL); Ref<Font> _find_font(Item *p_item); @@ -312,6 +314,9 @@ public: void set_meta_underline(bool p_underline); bool is_meta_underlined() const; + void set_override_selected_font_color(bool p_override_selected_font_color); + bool is_overriding_selected_font_color() const; + void set_scroll_active(bool p_active); bool is_scroll_active() const; @@ -325,6 +330,7 @@ public: void scroll_to_line(int p_line); int get_line_count() const; + int get_visible_line_count() const; VScrollBar *get_v_scroll() { return vscroll; } diff --git a/scene/gui/scroll_bar.cpp b/scene/gui/scroll_bar.cpp index 41f4beb1c9..c5ffec2d5e 100644 --- a/scene/gui/scroll_bar.cpp +++ b/scene/gui/scroll_bar.cpp @@ -113,7 +113,7 @@ void ScrollBar::_gui_input(Ref<InputEvent> p_event) { if (smooth_scroll_enabled) { scrolling = true; - set_fixed_process(true); + set_physics_process(true); } else { set_value(target_scroll); } @@ -137,7 +137,7 @@ void ScrollBar::_gui_input(Ref<InputEvent> p_event) { if (smooth_scroll_enabled) { scrolling = true; - set_fixed_process(true); + set_physics_process(true); } else { set_value(target_scroll); } @@ -335,29 +335,29 @@ void ScrollBar::_notification(int p_what) { drag_slave = NULL; } - if (p_what == NOTIFICATION_FIXED_PROCESS) { + if (p_what == NOTIFICATION_PHYSICS_PROCESS) { if (scrolling) { if (get_value() != target_scroll) { double target = target_scroll - get_value(); double dist = sqrt(target * target); - double vel = ((target / dist) * 500) * get_fixed_process_delta_time(); + double vel = ((target / dist) * 500) * get_physics_process_delta_time(); - if (vel >= dist) { + if (Math::abs(vel) >= dist) { set_value(target_scroll); } else { set_value(get_value() + vel); } } else { scrolling = false; - set_fixed_process(false); + set_physics_process(false); } } else if (drag_slave_touching) { if (drag_slave_touching_deaccel) { Vector2 pos = Vector2(orientation == HORIZONTAL ? get_value() : 0, orientation == VERTICAL ? get_value() : 0); - pos += drag_slave_speed * get_fixed_process_delta_time(); + pos += drag_slave_speed * get_physics_process_delta_time(); bool turnoff = false; @@ -377,7 +377,7 @@ void ScrollBar::_notification(int p_what) { float sgn_x = drag_slave_speed.x < 0 ? -1 : 1; float val_x = Math::abs(drag_slave_speed.x); - val_x -= 1000 * get_fixed_process_delta_time(); + val_x -= 1000 * get_physics_process_delta_time(); if (val_x < 0) { turnoff = true; @@ -401,7 +401,7 @@ void ScrollBar::_notification(int p_what) { float sgn_y = drag_slave_speed.y < 0 ? -1 : 1; float val_y = Math::abs(drag_slave_speed.y); - val_y -= 1000 * get_fixed_process_delta_time(); + val_y -= 1000 * get_physics_process_delta_time(); if (val_y < 0) { turnoff = true; @@ -410,7 +410,7 @@ void ScrollBar::_notification(int p_what) { } if (turnoff) { - set_fixed_process(false); + set_physics_process(false); drag_slave_touching = false; drag_slave_touching_deaccel = false; } @@ -421,10 +421,10 @@ void ScrollBar::_notification(int p_what) { Vector2 diff = drag_slave_accum - last_drag_slave_accum; last_drag_slave_accum = drag_slave_accum; - drag_slave_speed = diff / get_fixed_process_delta_time(); + drag_slave_speed = diff / get_physics_process_delta_time(); } - time_since_motion += get_fixed_process_delta_time(); + time_since_motion += get_physics_process_delta_time(); } } } @@ -579,7 +579,7 @@ void ScrollBar::_drag_slave_input(const Ref<InputEvent> &p_input) { if (mb->is_pressed()) { if (drag_slave_touching) { - set_fixed_process(false); + set_physics_process(false); drag_slave_touching_deaccel = false; drag_slave_touching = false; drag_slave_speed = Vector2(); @@ -599,7 +599,7 @@ void ScrollBar::_drag_slave_input(const Ref<InputEvent> &p_input) { drag_slave_touching_deaccel = false; time_since_motion = 0; if (drag_slave_touching) { - set_fixed_process(true); + set_physics_process(true); time_since_motion = 0; } } @@ -611,7 +611,7 @@ void ScrollBar::_drag_slave_input(const Ref<InputEvent> &p_input) { if (drag_slave_speed == Vector2()) { drag_slave_touching_deaccel = false; drag_slave_touching = false; - set_fixed_process(false); + set_physics_process(false); } else { drag_slave_touching_deaccel = true; diff --git a/scene/gui/scroll_container.cpp b/scene/gui/scroll_container.cpp index e182e491d3..1ad1e3f638 100644 --- a/scene/gui/scroll_container.cpp +++ b/scene/gui/scroll_container.cpp @@ -67,7 +67,7 @@ Size2 ScrollContainer::get_minimum_size() const { }; void ScrollContainer::_cancel_drag() { - set_fixed_process(false); + set_physics_process(false); drag_touching_deaccel = false; drag_touching = false; drag_speed = Vector2(); @@ -121,7 +121,7 @@ void ScrollContainer::_gui_input(const Ref<InputEvent> &p_gui_input) { if (mb->is_pressed()) { if (drag_touching) { - set_fixed_process(false); + set_physics_process(false); drag_touching_deaccel = false; drag_touching = false; drag_speed = Vector2(); @@ -139,7 +139,7 @@ void ScrollContainer::_gui_input(const Ref<InputEvent> &p_gui_input) { drag_touching_deaccel = false; time_since_motion = 0; if (drag_touching) { - set_fixed_process(true); + set_physics_process(true); time_since_motion = 0; } } @@ -150,7 +150,7 @@ void ScrollContainer::_gui_input(const Ref<InputEvent> &p_gui_input) { if (drag_speed == Vector2()) { drag_touching_deaccel = false; drag_touching = false; - set_fixed_process(false); + set_physics_process(false); } else { drag_touching_deaccel = true; @@ -182,7 +182,7 @@ void ScrollContainer::_gui_input(const Ref<InputEvent> &p_gui_input) { } } -void ScrollContainer::_update_scrollbar_pos() { +void ScrollContainer::_update_scrollbar_position() { Size2 hmin = h_scroll->get_combined_minimum_size(); Size2 vmin = v_scroll->get_combined_minimum_size(); @@ -205,7 +205,7 @@ void ScrollContainer::_notification(int p_what) { if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_THEME_CHANGED) { - call_deferred("_update_scrollbar_pos"); + call_deferred("_update_scrollbar_position"); }; if (p_what == NOTIFICATION_SORT_CHILDREN) { @@ -257,14 +257,14 @@ void ScrollContainer::_notification(int p_what) { update_scrollbars(); } - if (p_what == NOTIFICATION_FIXED_PROCESS) { + if (p_what == NOTIFICATION_PHYSICS_PROCESS) { if (drag_touching) { if (drag_touching_deaccel) { Vector2 pos = Vector2(h_scroll->get_value(), v_scroll->get_value()); - pos += drag_speed * get_fixed_process_delta_time(); + pos += drag_speed * get_physics_process_delta_time(); bool turnoff_h = false; bool turnoff_v = false; @@ -294,7 +294,7 @@ void ScrollContainer::_notification(int p_what) { float sgn_x = drag_speed.x < 0 ? -1 : 1; float val_x = Math::abs(drag_speed.x); - val_x -= 1000 * get_fixed_process_delta_time(); + val_x -= 1000 * get_physics_process_delta_time(); if (val_x < 0) { turnoff_h = true; @@ -302,7 +302,7 @@ void ScrollContainer::_notification(int p_what) { float sgn_y = drag_speed.y < 0 ? -1 : 1; float val_y = Math::abs(drag_speed.y); - val_y -= 1000 * get_fixed_process_delta_time(); + val_y -= 1000 * get_physics_process_delta_time(); if (val_y < 0) { turnoff_v = true; @@ -311,7 +311,7 @@ void ScrollContainer::_notification(int p_what) { drag_speed = Vector2(sgn_x * val_x, sgn_y * val_y); if (turnoff_h && turnoff_v) { - set_fixed_process(false); + set_physics_process(false); drag_touching = false; drag_touching_deaccel = false; } @@ -322,10 +322,10 @@ void ScrollContainer::_notification(int p_what) { Vector2 diff = drag_accum - last_drag_accum; last_drag_accum = drag_accum; - drag_speed = diff / get_fixed_process_delta_time(); + drag_speed = diff / get_physics_process_delta_time(); } - time_since_motion += get_fixed_process_delta_time(); + time_since_motion += get_physics_process_delta_time(); } } } @@ -448,7 +448,7 @@ void ScrollContainer::_bind_methods() { ClassDB::bind_method(D_METHOD("is_h_scroll_enabled"), &ScrollContainer::is_h_scroll_enabled); ClassDB::bind_method(D_METHOD("set_enable_v_scroll", "enable"), &ScrollContainer::set_enable_v_scroll); ClassDB::bind_method(D_METHOD("is_v_scroll_enabled"), &ScrollContainer::is_v_scroll_enabled); - ClassDB::bind_method(D_METHOD("_update_scrollbar_pos"), &ScrollContainer::_update_scrollbar_pos); + ClassDB::bind_method(D_METHOD("_update_scrollbar_position"), &ScrollContainer::_update_scrollbar_position); ClassDB::bind_method(D_METHOD("set_h_scroll", "val"), &ScrollContainer::set_h_scroll); ClassDB::bind_method(D_METHOD("get_h_scroll"), &ScrollContainer::get_h_scroll); ClassDB::bind_method(D_METHOD("set_v_scroll", "val"), &ScrollContainer::set_v_scroll); diff --git a/scene/gui/scroll_container.h b/scene/gui/scroll_container.h index 9076be0d72..2c5d60de6c 100644 --- a/scene/gui/scroll_container.h +++ b/scene/gui/scroll_container.h @@ -70,7 +70,7 @@ protected: void _scroll_moved(float); static void _bind_methods(); - void _update_scrollbar_pos(); + void _update_scrollbar_position(); public: int get_v_scroll() const; diff --git a/scene/gui/separator.cpp b/scene/gui/separator.cpp index 3db234f7cc..55d837458a 100644 --- a/scene/gui/separator.cpp +++ b/scene/gui/separator.cpp @@ -32,7 +32,11 @@ Size2 Separator::get_minimum_size() const { Size2 ms(3, 3); - ms[orientation] = get_constant("separation"); + if (orientation == VERTICAL) { + ms.x = get_constant("separation"); + } else { // HORIZONTAL + ms.y = get_constant("separation"); + } return ms; } diff --git a/scene/gui/slider.cpp b/scene/gui/slider.cpp index 8fda5df53c..e88742a3e3 100644 --- a/scene/gui/slider.cpp +++ b/scene/gui/slider.cpp @@ -157,6 +157,12 @@ void Slider::_notification(int p_what) { mouse_inside = false; update(); } break; + case NOTIFICATION_VISIBILITY_CHANGED: // fallthrough + case NOTIFICATION_EXIT_TREE: { + + mouse_inside = false; + grab.active = false; + } break; case NOTIFICATION_DRAW: { RID ci = get_canvas_item(); Size2i size = get_size(); @@ -181,7 +187,7 @@ void Slider::_notification(int p_what) { for (int i = 0; i < ticks; i++) { if (!ticks_on_borders && (i == 0 || i + 1 == ticks)) continue; int ofs = i * tickarea / (ticks - 1); - tick->draw(ci, Point2(0, ofs)); + tick->draw(ci, Point2i((size.width - widget_width) / 2, ofs)); } } grabber->draw(ci, Point2i(size.width / 2 - grabber->get_size().width / 2, size.height - get_as_ratio() * areasize - grabber->get_size().height)); @@ -202,7 +208,7 @@ void Slider::_notification(int p_what) { for (int i = 0; i < ticks; i++) { if ((!ticks_on_borders) && ((i == 0) || ((i + 1) == ticks))) continue; int ofs = i * tickarea / (ticks - 1); - tick->draw(ci, Point2(ofs, 0)); + tick->draw(ci, Point2i(ofs, (size.height - widget_height) / 2)); } } grabber->draw(ci, Point2i(get_as_ratio() * areasize, size.height / 2 - grabber->get_size().height / 2)); diff --git a/scene/gui/spin_box.cpp b/scene/gui/spin_box.cpp index f462989f53..05f2809bfc 100644 --- a/scene/gui/spin_box.cpp +++ b/scene/gui/spin_box.cpp @@ -72,7 +72,7 @@ void SpinBox::_range_click_timeout() { if (!drag.enabled && Input::get_singleton()->is_mouse_button_pressed(BUTTON_LEFT)) { - bool up = get_local_mouse_pos().y < (get_size().height / 2); + bool up = get_local_mouse_position().y < (get_size().height / 2); set_value(get_value() + (up ? get_step() : -get_step())); if (range_click_timer->is_one_shot()) { @@ -268,7 +268,7 @@ SpinBox::SpinBox() { line_edit = memnew(LineEdit); add_child(line_edit); - line_edit->set_area_as_parent_rect(); + line_edit->set_anchors_and_margins_preset(Control::PRESET_WIDE); //connect("value_changed",this,"_value_changed"); line_edit->connect("text_entered", this, "_text_entered", Vector<Variant>(), CONNECT_DEFERRED); line_edit->connect("focus_exited", this, "_line_edit_focus_exit", Vector<Variant>(), CONNECT_DEFERRED); diff --git a/scene/gui/tab_container.cpp b/scene/gui/tab_container.cpp index 98a8db336e..cfe924ecd4 100644 --- a/scene/gui/tab_container.cpp +++ b/scene/gui/tab_container.cpp @@ -94,15 +94,20 @@ void TabContainer::_gui_input(const Ref<InputEvent> &p_event) { // Handle navigation buttons. if (buttons_visible_cache) { + int popup_ofs = 0; + if (popup) { + popup_ofs = menu->get_width(); + } + Ref<Texture> increment = get_icon("increment"); Ref<Texture> decrement = get_icon("decrement"); - if (pos.x > size.width - increment->get_width()) { + if (pos.x > size.width - increment->get_width() - popup_ofs) { if (last_tab_cache < tabs.size() - 1) { first_tab_cache += 1; update(); } return; - } else if (pos.x > size.width - increment->get_width() - decrement->get_width()) { + } else if (pos.x > size.width - increment->get_width() - decrement->get_width() - popup_ofs) { if (first_tab_cache > 0) { first_tab_cache -= 1; update(); @@ -264,9 +269,9 @@ void TabContainer::_notification(int p_what) { if (popup) { x -= menu->get_width(); if (mouse_x_cache > x) - menu_hl->draw(get_canvas_item(), Size2(x, 0)); + menu_hl->draw(get_canvas_item(), Size2(x, (header_height - menu_hl->get_height()) / 2)); else - menu->draw(get_canvas_item(), Size2(x, 0)); + menu->draw(get_canvas_item(), Size2(x, (header_height - menu->get_height()) / 2)); } // Draw the navigation buttons. @@ -367,7 +372,7 @@ void TabContainer::add_child_notify(Node *p_child) { current = 0; previous = 0; } - c->set_area_as_parent_rect(); + c->set_anchors_and_margins_preset(Control::PRESET_WIDE); if (tabs_visible) c->set_margin(MARGIN_TOP, _get_top_margin()); Ref<StyleBox> sb = get_stylebox("panel"); @@ -401,7 +406,7 @@ void TabContainer::set_current_tab(int p_current) { Control *c = tabs[i]; if (i == current) { c->show(); - c->set_area_as_parent_rect(); + c->set_anchors_and_margins_preset(Control::PRESET_WIDE); if (tabs_visible) c->set_margin(MARGIN_TOP, _get_top_margin()); c->set_margin(Margin(MARGIN_TOP), c->get_margin(Margin(MARGIN_TOP)) + sb->get_margin(Margin(MARGIN_TOP))); diff --git a/scene/gui/tabs.cpp b/scene/gui/tabs.cpp index 085f6de6b8..49823e18fc 100644 --- a/scene/gui/tabs.cpp +++ b/scene/gui/tabs.cpp @@ -820,9 +820,9 @@ void Tabs::_bind_methods() { BIND_ENUM_CONSTANT(ALIGN_RIGHT); BIND_ENUM_CONSTANT(ALIGN_MAX); + BIND_ENUM_CONSTANT(CLOSE_BUTTON_SHOW_NEVER); BIND_ENUM_CONSTANT(CLOSE_BUTTON_SHOW_ACTIVE_ONLY); BIND_ENUM_CONSTANT(CLOSE_BUTTON_SHOW_ALWAYS); - BIND_ENUM_CONSTANT(CLOSE_BUTTON_SHOW_NEVER); BIND_ENUM_CONSTANT(CLOSE_BUTTON_MAX); } diff --git a/scene/gui/text_edit.cpp b/scene/gui/text_edit.cpp index d30e0b9f25..977ba2da7c 100644 --- a/scene/gui/text_edit.cpp +++ b/scene/gui/text_edit.cpp @@ -428,22 +428,22 @@ void TextEdit::_notification(int p_what) { draw_caret = false; update(); } break; - case NOTIFICATION_FIXED_PROCESS: { + case NOTIFICATION_PHYSICS_PROCESS: { if (scrolling && v_scroll->get_value() != target_v_scroll) { double target_y = target_v_scroll - v_scroll->get_value(); double dist = sqrt(target_y * target_y); - double vel = ((target_y / dist) * v_scroll_speed) * get_fixed_process_delta_time(); + double vel = ((target_y / dist) * v_scroll_speed) * get_physics_process_delta_time(); if (Math::abs(vel) >= dist) { v_scroll->set_value(target_v_scroll); scrolling = false; - set_fixed_process(false); + set_physics_process(false); } else { v_scroll->set_value(v_scroll->get_value() + vel); } } else { scrolling = false; - set_fixed_process(false); + set_physics_process(false); } } break; case NOTIFICATION_DRAW: { @@ -501,8 +501,7 @@ void TextEdit::_notification(int p_what) { if (cache.background_color.a > 0.01) { - Point2i ofs = Point2i(cache.style_normal->get_offset()) / 2.0; - VisualServer::get_singleton()->canvas_item_add_rect(ci, Rect2(ofs, get_size() - cache.style_normal->get_minimum_size() + ofs), cache.background_color); + VisualServer::get_singleton()->canvas_item_add_rect(ci, Rect2(Point2i(), get_size()), cache.background_color); } //compute actual region to start (may be inside say, a comment). //slow in very large documments :( but ok for source! @@ -733,8 +732,17 @@ void TextEdit::_notification(int p_what) { VisualServer::get_singleton()->canvas_item_add_rect(ci, Rect2(xmargin_beg, ofs_y, xmargin_end - xmargin_beg, get_row_height()), cache.mark_color); } - if (line == cursor.line) { - VisualServer::get_singleton()->canvas_item_add_rect(ci, Rect2(0, ofs_y, xmargin_end, get_row_height()), cache.current_line_color); + if (str.length() == 0) { + // draw line background if empty as we won't loop at at all + if (line == cursor.line) { + VisualServer::get_singleton()->canvas_item_add_rect(ci, Rect2(0, ofs_y, xmargin_end, get_row_height()), cache.current_line_color); + } + + // give visual indication of empty selected line + if (selection.active && line >= selection.from_line && line <= selection.to_line) { + int char_w = cache.font->get_char_size(' ').width; + VisualServer::get_singleton()->canvas_item_add_rect(ci, Rect2(xmargin_beg, ofs_y, char_w, get_row_height()), cache.selection_color); + } } if (text.is_breakpoint(line) && !draw_breakpoint_gutter) { @@ -765,6 +773,7 @@ void TextEdit::_notification(int p_what) { cache.font->draw(ci, Point2(cache.style_normal->get_margin(MARGIN_LEFT) + cache.breakpoint_gutter_width, ofs_y + cache.font->get_ascent()), fc, cache.line_number_color); } + //loop through charcters in one line for (int j = 0; j < str.length(); j++) { //look for keyword @@ -953,10 +962,25 @@ void TextEdit::_notification(int p_what) { } } + //current line highlighting bool in_selection = (selection.active && line >= selection.from_line && line <= selection.to_line && (line > selection.from_line || j >= selection.from_column) && (line < selection.to_line || j < selection.to_column)); + if (line == cursor.line) { + // if its the first char draw behind line numbers + if (j == 0) { + VisualServer::get_singleton()->canvas_item_add_rect(ci, Rect2(0, ofs_y, (char_ofs + char_margin), get_row_height()), cache.current_line_color); + } + // if its the last char draw to end of the line + if (j == str.length() - 1) { + VisualServer::get_singleton()->canvas_item_add_rect(ci, Rect2(char_ofs + char_margin + char_w, ofs_y, xmargin_end - (char_ofs + char_margin + char_w), get_row_height()), cache.current_line_color); + } + // actual text + if (!in_selection) { + VisualServer::get_singleton()->canvas_item_add_rect(ci, Rect2(Point2i(char_ofs + char_margin, ofs_y), Size2i(char_w, get_row_height())), cache.current_line_color); + } + } + if (in_selection) { - //inside selection! VisualServer::get_singleton()->canvas_item_add_rect(ci, Rect2(Point2i(char_ofs + char_margin, ofs_y), Size2i(char_w, get_row_height())), cache.selection_color); } @@ -999,7 +1023,7 @@ void TextEdit::_notification(int p_what) { if (brace_open_mismatch) color = cache.brace_mismatch_color; - cache.font->draw_char(ci, Point2i(char_ofs + char_margin, ofs_y + ascent), '_', str[j + 1], in_selection ? cache.font_selected_color : color); + cache.font->draw_char(ci, Point2i(char_ofs + char_margin, ofs_y + ascent), '_', str[j + 1], in_selection && override_selected_font_color ? cache.font_selected_color : color); } if ( @@ -1008,7 +1032,7 @@ void TextEdit::_notification(int p_what) { if (brace_close_mismatch) color = cache.brace_mismatch_color; - cache.font->draw_char(ci, Point2i(char_ofs + char_margin, ofs_y + ascent), '_', str[j + 1], in_selection ? cache.font_selected_color : color); + cache.font->draw_char(ci, Point2i(char_ofs + char_margin, ofs_y + ascent), '_', str[j + 1], in_selection && override_selected_font_color ? cache.font_selected_color : color); } } @@ -1067,15 +1091,15 @@ void TextEdit::_notification(int p_what) { } if (str[j] >= 32) { - int w = cache.font->draw_char(ci, Point2i(char_ofs + char_margin, ofs_y + ascent), str[j], str[j + 1], in_selection ? cache.font_selected_color : color); + int w = cache.font->draw_char(ci, Point2i(char_ofs + char_margin, ofs_y + ascent), str[j], str[j + 1], in_selection && override_selected_font_color ? cache.font_selected_color : color); if (underlined) { - draw_rect(Rect2(char_ofs + char_margin, ofs_y + ascent + 2, w, 1), in_selection ? cache.font_selected_color : color); + draw_rect(Rect2(char_ofs + char_margin, ofs_y + ascent + 2, w, 1), in_selection && override_selected_font_color ? cache.font_selected_color : color); } } else if (draw_tabs && str[j] == '\t') { int yofs = (get_row_height() - cache.tab_icon->get_height()) / 2; - cache.tab_icon->draw(ci, Point2(char_ofs + char_margin, ofs_y + yofs), in_selection ? cache.font_selected_color : color); + cache.tab_icon->draw(ci, Point2(char_ofs + char_margin, ofs_y + yofs), in_selection && override_selected_font_color ? cache.font_selected_color : color); } char_ofs += char_w; @@ -1611,7 +1635,7 @@ void TextEdit::_gui_input(const Ref<InputEvent> &p_gui_input) { target_v_scroll = 0; } scrolling = true; - set_fixed_process(true); + set_physics_process(true); } else { v_scroll->set_value(target_v_scroll); } @@ -1633,7 +1657,7 @@ void TextEdit::_gui_input(const Ref<InputEvent> &p_gui_input) { target_v_scroll = max_v_scroll; } scrolling = true; - set_fixed_process(true); + set_physics_process(true); } else { v_scroll->set_value(target_v_scroll); } @@ -1773,7 +1797,7 @@ void TextEdit::_gui_input(const Ref<InputEvent> &p_gui_input) { if (mb->get_button_index() == BUTTON_RIGHT && context_menu_enabled) { - menu->set_position(get_global_transform().xform(get_local_mouse_pos())); + menu->set_position(get_global_transform().xform(get_local_mouse_position())); menu->set_size(Vector2(1, 1)); menu->popup(); grab_focus(); @@ -1844,7 +1868,7 @@ void TextEdit::_gui_input(const Ref<InputEvent> &p_gui_input) { if (k->is_pressed()) { - highlighted_word = get_word_at_pos(get_local_mouse_pos()); + highlighted_word = get_word_at_pos(get_local_mouse_position()); update(); } else { @@ -3499,7 +3523,7 @@ String TextEdit::get_text() { String TextEdit::get_text_for_lookup_completion() { int row, col; - _get_mouse_pos(get_local_mouse_pos(), row, col); + _get_mouse_pos(get_local_mouse_position(), row, col); String longthing; int len = text.size(); @@ -4257,6 +4281,13 @@ bool TextEdit::is_drawing_tabs() const { return draw_tabs; } +void TextEdit::set_override_selected_font_color(bool p_override_selected_font_color) { + override_selected_font_color = p_override_selected_font_color; +} +bool TextEdit::is_overriding_selected_font_color() const { + return override_selected_font_color; +} + void TextEdit::set_insert_mode(bool p_enabled) { insert_mode = p_enabled; update(); @@ -4288,6 +4319,14 @@ int TextEdit::get_v_scroll() const { } void TextEdit::set_v_scroll(int p_scroll) { + if (p_scroll < 0) { + p_scroll = 0; + } + if (!scroll_past_end_of_file_enabled) { + if (p_scroll + get_visible_rows() > get_line_count()) { + p_scroll = get_line_count() - get_visible_rows(); + } + } v_scroll->set_value(p_scroll); cursor.line_ofs = p_scroll; } @@ -4814,6 +4853,9 @@ void TextEdit::_bind_methods() { ClassDB::bind_method(D_METHOD("set_highlight_all_occurrences", "enable"), &TextEdit::set_highlight_all_occurrences); ClassDB::bind_method(D_METHOD("is_highlight_all_occurrences_enabled"), &TextEdit::is_highlight_all_occurrences_enabled); + ClassDB::bind_method(D_METHOD("set_override_selected_font_color", "override"), &TextEdit::set_override_selected_font_color); + ClassDB::bind_method(D_METHOD("is_overriding_selected_font_color"), &TextEdit::is_overriding_selected_font_color); + ClassDB::bind_method(D_METHOD("set_syntax_coloring", "enable"), &TextEdit::set_syntax_coloring); ClassDB::bind_method(D_METHOD("is_syntax_coloring_enabled"), &TextEdit::is_syntax_coloring_enabled); @@ -4831,6 +4873,7 @@ void TextEdit::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::BOOL, "syntax_highlighting"), "set_syntax_coloring", "is_syntax_coloring_enabled"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "show_line_numbers"), "set_show_line_numbers", "is_show_line_numbers_enabled"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "highlight_all_occurrences"), "set_highlight_all_occurrences", "is_highlight_all_occurrences_enabled"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "override_selected_font_color"), "set_override_selected_font_color", "is_overriding_selected_font_color"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "smooth_scrolling"), "set_smooth_scroll_enable", "is_smooth_scroll_enabled"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "v_scroll_speed"), "set_v_scroll_speed", "get_v_scroll_speed"); @@ -4861,6 +4904,7 @@ TextEdit::TextEdit() { readonly = false; setting_row = false; draw_tabs = false; + override_selected_font_color = false; draw_caret = true; max_chars = 0; clear(); diff --git a/scene/gui/text_edit.h b/scene/gui/text_edit.h index 7e61c4e8b1..03f412729d 100644 --- a/scene/gui/text_edit.h +++ b/scene/gui/text_edit.h @@ -238,6 +238,7 @@ class TextEdit : public Control { bool setting_row; bool wrap; bool draw_tabs; + bool override_selected_font_color; bool cursor_changed_dirty; bool text_changed_dirty; bool undo_enabled; @@ -482,6 +483,8 @@ public: void set_indent_size(const int p_size); void set_draw_tabs(bool p_draw); bool is_drawing_tabs() const; + void set_override_selected_font_color(bool p_override_selected_font_color); + bool is_overriding_selected_font_color() const; void set_insert_mode(bool p_enabled); bool is_insert_mode() const; diff --git a/scene/gui/tree.cpp b/scene/gui/tree.cpp index 1aaea98798..931dcfed91 100644 --- a/scene/gui/tree.cpp +++ b/scene/gui/tree.cpp @@ -47,18 +47,21 @@ void TreeItem::move_to_top() { } void TreeItem::move_to_bottom() { - if (!parent || !next) return; - while (next) { + TreeItem *prev = get_prev(); + TreeItem *last = next; + while (last->next) + last = last->next; - if (parent->childs == this) - parent->childs = next; - TreeItem *n = next; - next = n->next; - n->next = this; + if (prev) { + prev->next = next; + } else { + parent->childs = next; } + last->next = this; + next = NULL; } Size2 TreeItem::Cell::get_icon_size() const { @@ -862,6 +865,7 @@ void Tree::update_cache() { cache.arrow_collapsed = get_icon("arrow_collapsed"); cache.arrow = get_icon("arrow"); cache.select_arrow = get_icon("select_arrow"); + cache.select_option = get_icon("select_option"); cache.updown = get_icon("updown"); cache.custom_button = get_stylebox("custom_button"); @@ -1528,7 +1532,7 @@ void Tree::_range_click_timeout() { if (range_item_last && !range_drag_enabled && Input::get_singleton()->is_mouse_button_pressed(BUTTON_LEFT)) { - Point2 pos = get_local_mouse_pos() - cache.bg->get_offset(); + Point2 pos = get_local_mouse_position() - cache.bg->get_offset(); if (show_column_titles) { pos.y -= _get_title_button_height(); @@ -1676,7 +1680,7 @@ int Tree::propagate_mouse_event(const Point2i &p_pos, int x_ofs, int y_ofs, bool p_item->select(col); emit_signal("multi_selected", p_item, col, true); if (p_button == BUTTON_RIGHT) { - emit_signal("item_rmb_selected", get_local_mouse_pos()); + emit_signal("item_rmb_selected", get_local_mouse_position()); } //p_item->selected_signal.call(col); @@ -1697,7 +1701,7 @@ int Tree::propagate_mouse_event(const Point2i &p_pos, int x_ofs, int y_ofs, bool select_single_item(p_item, root, col, selected_item, &inrange); if (p_button == BUTTON_RIGHT) { - emit_signal("item_rmb_selected", get_local_mouse_pos()); + emit_signal("item_rmb_selected", get_local_mouse_position()); } } else { @@ -1713,7 +1717,7 @@ int Tree::propagate_mouse_event(const Point2i &p_pos, int x_ofs, int y_ofs, bool } if (p_button == BUTTON_RIGHT) { - emit_signal("item_rmb_selected", get_local_mouse_pos()); + emit_signal("item_rmb_selected", get_local_mouse_position()); } } } @@ -1914,7 +1918,7 @@ void Tree::_text_editor_modal_close() { return; } - if (value_editor->has_point(value_editor->get_local_mouse_pos())) + if (value_editor->has_point(value_editor->get_local_mouse_position())) return; text_editor_enter(text_editor->get_text()); @@ -2135,8 +2139,15 @@ void Tree::_gui_input(Ref<InputEvent> p_event) { if (selected_item->get_children() != NULL && !selected_item->is_collapsed()) { selected_item->set_collapsed(true); } else { - selected_col = columns.size() - 1; - dobreak = false; // fall through to key_up + if (columns.size() == 1) { // goto parent with one column + TreeItem *parent = selected_item->get_parent(); + if (selected_item != get_root() && parent && parent->is_selectable(selected_col) && !(hide_root && parent == get_root())) { + select_single_item(parent, get_root(), selected_col); + } + } else { + selected_col = columns.size() - 1; + dobreak = false; // fall through to key_up + } } } else { if (select_mode == SELECT_MULTI) { @@ -2149,6 +2160,7 @@ void Tree::_gui_input(Ref<InputEvent> p_event) { } update(); accept_event(); + ensure_cursor_is_visible(); if (dobreak) { break; @@ -2470,7 +2482,7 @@ void Tree::_gui_input(Ref<InputEvent> p_event) { if (cache.click_type == Cache::CLICK_BUTTON) { // make sure in case of wrong reference after reconstructing whole TreeItems - cache.click_item = get_item_at_pos(cache.click_pos); + cache.click_item = get_item_at_position(cache.click_pos); emit_signal("button_pressed", cache.click_item, cache.click_column, cache.click_id); } cache.click_type = Cache::CLICK_NONE; @@ -2484,7 +2496,7 @@ void Tree::_gui_input(Ref<InputEvent> p_event) { if (drag_speed == 0) { drag_touching_deaccel = false; drag_touching = false; - set_fixed_process(false); + set_physics_process(false); } else { drag_touching_deaccel = true; @@ -2530,7 +2542,7 @@ void Tree::_gui_input(Ref<InputEvent> p_event) { } if (!root || (!root->get_children() && hide_root)) { if (b->get_button_index() == BUTTON_RIGHT && allow_rmb_select) { - emit_signal("empty_tree_rmb_selected", get_local_mouse_pos()); + emit_signal("empty_tree_rmb_selected", get_local_mouse_position()); } break; } @@ -2550,7 +2562,7 @@ void Tree::_gui_input(Ref<InputEvent> p_event) { break; if (drag_touching) { - set_fixed_process(false); + set_physics_process(false); drag_touching_deaccel = false; drag_touching = false; drag_speed = 0; @@ -2565,7 +2577,7 @@ void Tree::_gui_input(Ref<InputEvent> p_event) { drag_touching = OS::get_singleton()->has_touchscreen_ui_hint(); drag_touching_deaccel = false; if (drag_touching) { - set_fixed_process(true); + set_physics_process(true); } } @@ -2756,7 +2768,7 @@ void Tree::_notification(int p_what) { drop_mode_flags = 0; scrolling = false; - set_fixed_process(false); + set_physics_process(false); update(); } if (p_what == NOTIFICATION_DRAG_BEGIN) { @@ -2764,23 +2776,23 @@ void Tree::_notification(int p_what) { single_select_defer = NULL; if (cache.scroll_speed > 0 && get_rect().has_point(get_viewport()->get_mouse_position() - get_global_position())) { scrolling = true; - set_fixed_process(true); + set_physics_process(true); } } - if (p_what == NOTIFICATION_FIXED_PROCESS) { + if (p_what == NOTIFICATION_PHYSICS_PROCESS) { if (drag_touching) { if (drag_touching_deaccel) { float pos = v_scroll->get_value(); - pos += drag_speed * get_fixed_process_delta_time(); + pos += drag_speed * get_physics_process_delta_time(); bool turnoff = false; if (pos < 0) { pos = 0; turnoff = true; - set_fixed_process(false); + set_physics_process(false); drag_touching = false; drag_touching_deaccel = false; } @@ -2792,7 +2804,7 @@ void Tree::_notification(int p_what) { v_scroll->set_value(pos); float sgn = drag_speed < 0 ? -1 : 1; float val = Math::abs(drag_speed); - val -= 1000 * get_fixed_process_delta_time(); + val -= 1000 * get_physics_process_delta_time(); if (val < 0) { turnoff = true; @@ -2800,7 +2812,7 @@ void Tree::_notification(int p_what) { drag_speed = sgn * val; if (turnoff) { - set_fixed_process(false); + set_physics_process(false); drag_touching = false; drag_touching_deaccel = false; } @@ -2825,7 +2837,7 @@ void Tree::_notification(int p_what) { } else { point.y = 0; } - point *= cache.scroll_speed * get_fixed_process_delta_time(); + point *= cache.scroll_speed * get_physics_process_delta_time(); point += get_scroll(); h_scroll->set_value(point.x); v_scroll->set_value(point.y); @@ -3428,7 +3440,7 @@ TreeItem *Tree::_find_item_at_pos(TreeItem *p_item, const Point2 &p_pos, int &r_ return NULL; } -int Tree::get_column_at_pos(const Point2 &p_pos) const { +int Tree::get_column_at_position(const Point2 &p_pos) const { if (root) { @@ -3454,7 +3466,7 @@ int Tree::get_column_at_pos(const Point2 &p_pos) const { return -1; } -int Tree::get_drop_section_at_pos(const Point2 &p_pos) const { +int Tree::get_drop_section_at_position(const Point2 &p_pos) const { if (root) { @@ -3479,7 +3491,7 @@ int Tree::get_drop_section_at_pos(const Point2 &p_pos) const { return -100; } -TreeItem *Tree::get_item_at_pos(const Point2 &p_pos) const { +TreeItem *Tree::get_item_at_position(const Point2 &p_pos) const { if (root) { @@ -3652,9 +3664,9 @@ void Tree::_bind_methods() { ClassDB::bind_method(D_METHOD("get_edited_column"), &Tree::get_edited_column); ClassDB::bind_method(D_METHOD("get_custom_popup_rect"), &Tree::get_custom_popup_rect); ClassDB::bind_method(D_METHOD("get_item_area_rect", "item", "column"), &Tree::_get_item_rect, DEFVAL(-1)); - ClassDB::bind_method(D_METHOD("get_item_at_pos", "pos"), &Tree::get_item_at_pos); - ClassDB::bind_method(D_METHOD("get_column_at_pos", "pos"), &Tree::get_column_at_pos); - ClassDB::bind_method(D_METHOD("get_drop_section_at_pos", "pos"), &Tree::get_drop_section_at_pos); + ClassDB::bind_method(D_METHOD("get_item_at_position", "position"), &Tree::get_item_at_position); + ClassDB::bind_method(D_METHOD("get_column_at_position", "position"), &Tree::get_column_at_position); + ClassDB::bind_method(D_METHOD("get_drop_section_at_position", "position"), &Tree::get_drop_section_at_position); ClassDB::bind_method(D_METHOD("ensure_cursor_is_visible"), &Tree::ensure_cursor_is_visible); @@ -3680,8 +3692,8 @@ void Tree::_bind_methods() { ADD_SIGNAL(MethodInfo("item_selected")); ADD_SIGNAL(MethodInfo("cell_selected")); ADD_SIGNAL(MethodInfo("multi_selected", PropertyInfo(Variant::OBJECT, "item"), PropertyInfo(Variant::INT, "column"), PropertyInfo(Variant::BOOL, "selected"))); - 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_rmb_selected", PropertyInfo(Variant::VECTOR2, "position"))); + ADD_SIGNAL(MethodInfo("empty_tree_rmb_selected", PropertyInfo(Variant::VECTOR2, "position"))); ADD_SIGNAL(MethodInfo("item_edited")); ADD_SIGNAL(MethodInfo("item_rmb_edited")); ADD_SIGNAL(MethodInfo("item_custom_button_pressed")); diff --git a/scene/gui/tree.h b/scene/gui/tree.h index 5f19558597..2ee91a8b73 100644 --- a/scene/gui/tree.h +++ b/scene/gui/tree.h @@ -418,6 +418,7 @@ private: Ref<Texture> arrow_collapsed; Ref<Texture> arrow; Ref<Texture> select_arrow; + Ref<Texture> select_option; Ref<Texture> updown; Color font_color; @@ -525,9 +526,9 @@ protected: public: virtual String get_tooltip(const Point2 &p_pos) const; - TreeItem *get_item_at_pos(const Point2 &p_pos) const; - int get_column_at_pos(const Point2 &p_pos) const; - int get_drop_section_at_pos(const Point2 &p_pos) const; + TreeItem *get_item_at_position(const Point2 &p_pos) const; + int get_column_at_position(const Point2 &p_pos) const; + int get_drop_section_at_position(const Point2 &p_pos) const; void clear(); diff --git a/scene/gui/video_player.cpp b/scene/gui/video_player.cpp index a92155cc4f..190ccd50d5 100644 --- a/scene/gui/video_player.cpp +++ b/scene/gui/video_player.cpp @@ -278,13 +278,19 @@ String VideoPlayer::get_stream_name() const { return stream->get_name(); }; -float VideoPlayer::get_stream_pos() const { +float VideoPlayer::get_stream_position() const { if (playback.is_null()) return 0; - return playback->get_pos(); + return playback->get_playback_position(); }; +void VideoPlayer::set_stream_position(float p_position) { + + if (playback.is_valid()) + playback->seek(p_position); +} + Ref<Texture> VideoPlayer::get_video_texture() { if (playback.is_valid()) @@ -327,7 +333,8 @@ void VideoPlayer::_bind_methods() { ClassDB::bind_method(D_METHOD("get_stream_name"), &VideoPlayer::get_stream_name); - ClassDB::bind_method(D_METHOD("get_stream_pos"), &VideoPlayer::get_stream_pos); + ClassDB::bind_method(D_METHOD("set_stream_position", "position"), &VideoPlayer::set_stream_position); + ClassDB::bind_method(D_METHOD("get_stream_position"), &VideoPlayer::get_stream_position); ClassDB::bind_method(D_METHOD("set_autoplay", "enabled"), &VideoPlayer::set_autoplay); ClassDB::bind_method(D_METHOD("has_autoplay"), &VideoPlayer::has_autoplay); diff --git a/scene/gui/video_player.h b/scene/gui/video_player.h index b78f3aabe7..f04e90365f 100644 --- a/scene/gui/video_player.h +++ b/scene/gui/video_player.h @@ -92,7 +92,8 @@ public: float get_volume_db() const; String get_stream_name() const; - float get_stream_pos() const; + float get_stream_position() const; + void set_stream_position(float p_position); void set_autoplay(bool p_enable); bool has_autoplay() const; diff --git a/scene/main/node.cpp b/scene/main/node.cpp index a30fc03aa9..e6e11de177 100755 --- a/scene/main/node.cpp +++ b/scene/main/node.cpp @@ -29,6 +29,7 @@ /*************************************************************************/ #include "node.h" +#include "core/core_string_names.h" #include "instance_placeholder.h" #include "io/resource_loader.h" #include "message_queue.h" @@ -53,13 +54,13 @@ void Node::_notification(int p_notification) { get_script_instance()->call_multilevel(SceneStringNames::get_singleton()->_process, ptr, 1); } } break; - case NOTIFICATION_FIXED_PROCESS: { + case NOTIFICATION_PHYSICS_PROCESS: { if (get_script_instance()) { - Variant time = get_fixed_process_delta_time(); + Variant time = get_physics_process_delta_time(); const Variant *ptr[1] = { &time }; - get_script_instance()->call_multilevel(SceneStringNames::get_singleton()->_fixed_process, ptr, 1); + get_script_instance()->call_multilevel(SceneStringNames::get_singleton()->_physics_process, ptr, 1); } } break; @@ -128,8 +129,8 @@ void Node::_notification(int p_notification) { set_process(true); } - if (get_script_instance()->has_method(SceneStringNames::get_singleton()->_fixed_process)) { - set_fixed_process(true); + if (get_script_instance()->has_method(SceneStringNames::get_singleton()->_physics_process)) { + set_physics_process(true); } get_script_instance()->call_multilevel_reversed(SceneStringNames::get_singleton()->_ready, NULL, 0); @@ -211,6 +212,8 @@ void Node::_propagate_enter_tree() { emit_signal(SceneStringNames::get_singleton()->tree_entered); + data.tree->node_added(this); + data.blocked++; //block while adding children @@ -366,46 +369,46 @@ void Node::move_child_notify(Node *p_child) { // to be used when not wanted } -void Node::set_fixed_process(bool p_process) { +void Node::set_physics_process(bool p_process) { - if (data.fixed_process == p_process) + if (data.physics_process == p_process) return; - data.fixed_process = p_process; + data.physics_process = p_process; - if (data.fixed_process) - add_to_group("fixed_process", false); + if (data.physics_process) + add_to_group("physics_process", false); else - remove_from_group("fixed_process"); + remove_from_group("physics_process"); - data.fixed_process = p_process; - _change_notify("fixed_process"); + data.physics_process = p_process; + _change_notify("physics_process"); } -bool Node::is_fixed_processing() const { +bool Node::is_physics_processing() const { - return data.fixed_process; + return data.physics_process; } -void Node::set_fixed_process_internal(bool p_process_internal) { +void Node::set_physics_process_internal(bool p_process_internal) { - if (data.fixed_process_internal == p_process_internal) + if (data.physics_process_internal == p_process_internal) return; - data.fixed_process_internal = p_process_internal; + data.physics_process_internal = p_process_internal; - if (data.fixed_process_internal) - add_to_group("fixed_process_internal", false); + if (data.physics_process_internal) + add_to_group("physics_process_internal", false); else - remove_from_group("fixed_process_internal"); + remove_from_group("physics_process_internal"); - data.fixed_process_internal = p_process_internal; - _change_notify("fixed_process_internal"); + data.physics_process_internal = p_process_internal; + _change_notify("physics_process_internal"); } -bool Node::is_fixed_processing_internal() const { +bool Node::is_physics_processing_internal() const { - return data.fixed_process_internal; + return data.physics_process_internal; } void Node::set_pause_mode(PauseMode p_mode) { @@ -1009,10 +1012,10 @@ bool Node::can_process() const { return true; } -float Node::get_fixed_process_delta_time() const { +float Node::get_physics_process_delta_time() const { if (data.tree) - return data.tree->get_fixed_process_time(); + return data.tree->get_physics_process_time(); else return 0; } @@ -2104,12 +2107,22 @@ Node *Node::_duplicate(int p_flags) const { get_property_list(&plist); + StringName script_property_name = CoreStringNames::get_singleton()->_script; + + if (p_flags & DUPLICATE_SCRIPTS) { + bool is_valid = false; + Variant script = get(script_property_name, &is_valid); + if (is_valid) { + node->set(script_property_name, script); + } + } + for (List<PropertyInfo>::Element *E = plist.front(); E; E = E->next()) { if (!(E->get().usage & PROPERTY_USAGE_STORAGE)) continue; String name = E->get().name; - if (!(p_flags & DUPLICATE_SCRIPTS) && name == "script/script") + if (name == script_property_name) continue; Variant value = get(name); @@ -2572,8 +2585,11 @@ void Node::print_stray_nodes() { void Node::queue_delete() { - ERR_FAIL_COND(!is_inside_tree()); - get_tree()->queue_delete(this); + if (is_inside_tree()) { + get_tree()->queue_delete(this); + } else { + SceneTree::get_singleton()->queue_delete(this); + } } Array Node::_get_children() const { @@ -2693,7 +2709,7 @@ void Node::_bind_methods() { ClassDB::bind_method(D_METHOD("add_to_group", "group", "persistent"), &Node::add_to_group, DEFVAL(false)); ClassDB::bind_method(D_METHOD("remove_from_group", "group"), &Node::remove_from_group); ClassDB::bind_method(D_METHOD("is_in_group", "group"), &Node::is_in_group); - ClassDB::bind_method(D_METHOD("move_child", "child_node", "to_pos"), &Node::move_child); + ClassDB::bind_method(D_METHOD("move_child", "child_node", "to_position"), &Node::move_child); ClassDB::bind_method(D_METHOD("get_groups"), &Node::_get_groups); ClassDB::bind_method(D_METHOD("raise"), &Node::raise); ClassDB::bind_method(D_METHOD("set_owner", "owner"), &Node::set_owner); @@ -2705,9 +2721,9 @@ void Node::_bind_methods() { ClassDB::bind_method(D_METHOD("get_filename"), &Node::get_filename); ClassDB::bind_method(D_METHOD("propagate_notification", "what"), &Node::propagate_notification); ClassDB::bind_method(D_METHOD("propagate_call", "method", "args", "parent_first"), &Node::propagate_call, DEFVAL(Array()), DEFVAL(false)); - ClassDB::bind_method(D_METHOD("set_fixed_process", "enable"), &Node::set_fixed_process); - ClassDB::bind_method(D_METHOD("get_fixed_process_delta_time"), &Node::get_fixed_process_delta_time); - ClassDB::bind_method(D_METHOD("is_fixed_processing"), &Node::is_fixed_processing); + ClassDB::bind_method(D_METHOD("set_physics_process", "enable"), &Node::set_physics_process); + ClassDB::bind_method(D_METHOD("get_physics_process_delta_time"), &Node::get_physics_process_delta_time); + ClassDB::bind_method(D_METHOD("is_physics_processing"), &Node::is_physics_processing); ClassDB::bind_method(D_METHOD("get_process_delta_time"), &Node::get_process_delta_time); ClassDB::bind_method(D_METHOD("set_process", "enable"), &Node::set_process); ClassDB::bind_method(D_METHOD("is_processing"), &Node::is_processing); @@ -2728,8 +2744,8 @@ void Node::_bind_methods() { ClassDB::bind_method(D_METHOD("set_process_internal", "enable"), &Node::set_process_internal); ClassDB::bind_method(D_METHOD("is_processing_internal"), &Node::is_processing_internal); - ClassDB::bind_method(D_METHOD("set_fixed_process_internal", "enable"), &Node::set_fixed_process_internal); - ClassDB::bind_method(D_METHOD("is_fixed_processing_internal"), &Node::is_fixed_processing_internal); + ClassDB::bind_method(D_METHOD("set_physics_process_internal", "enable"), &Node::set_physics_process_internal); + ClassDB::bind_method(D_METHOD("is_physics_processing_internal"), &Node::is_physics_processing_internal); ClassDB::bind_method(D_METHOD("get_tree"), &Node::get_tree); @@ -2787,19 +2803,19 @@ void Node::_bind_methods() { BIND_CONSTANT(NOTIFICATION_EXIT_TREE); BIND_CONSTANT(NOTIFICATION_MOVED_IN_PARENT); BIND_CONSTANT(NOTIFICATION_READY); - BIND_CONSTANT(NOTIFICATION_FIXED_PROCESS); + BIND_CONSTANT(NOTIFICATION_PAUSED); + BIND_CONSTANT(NOTIFICATION_UNPAUSED); + BIND_CONSTANT(NOTIFICATION_PHYSICS_PROCESS); BIND_CONSTANT(NOTIFICATION_PROCESS); BIND_CONSTANT(NOTIFICATION_PARENTED); BIND_CONSTANT(NOTIFICATION_UNPARENTED); - BIND_CONSTANT(NOTIFICATION_PAUSED); - BIND_CONSTANT(NOTIFICATION_UNPAUSED); BIND_CONSTANT(NOTIFICATION_INSTANCED); BIND_CONSTANT(NOTIFICATION_DRAG_BEGIN); BIND_CONSTANT(NOTIFICATION_DRAG_END); BIND_CONSTANT(NOTIFICATION_PATH_CHANGED); BIND_CONSTANT(NOTIFICATION_TRANSLATION_CHANGED); BIND_CONSTANT(NOTIFICATION_INTERNAL_PROCESS); - BIND_CONSTANT(NOTIFICATION_INTERNAL_FIXED_PROCESS); + BIND_CONSTANT(NOTIFICATION_INTERNAL_PHYSICS_PROCESS); BIND_ENUM_CONSTANT(RPC_MODE_DISABLED); BIND_ENUM_CONSTANT(RPC_MODE_REMOTE); @@ -2821,7 +2837,7 @@ void Node::_bind_methods() { ADD_SIGNAL(MethodInfo("tree_exited")); //ADD_PROPERTYNZ( PropertyInfo( Variant::BOOL, "process/process" ),"set_process","is_processing") ; - //ADD_PROPERTYNZ( PropertyInfo( Variant::BOOL, "process/fixed_process" ), "set_fixed_process","is_fixed_processing") ; + //ADD_PROPERTYNZ( PropertyInfo( Variant::BOOL, "process/physics_process" ), "set_physics_process","is_physics_processing") ; //ADD_PROPERTYNZ( PropertyInfo( Variant::BOOL, "process/input" ), "set_process_input","is_processing_input" ) ; //ADD_PROPERTYNZ( PropertyInfo( Variant::BOOL, "process/unhandled_input" ), "set_process_unhandled_input","is_processing_unhandled_input" ) ; ADD_GROUP("Pause", "pause_"); @@ -2829,7 +2845,7 @@ void Node::_bind_methods() { ADD_PROPERTYNZ(PropertyInfo(Variant::BOOL, "editor/display_folded", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), "set_display_folded", "is_displayed_folded"); BIND_VMETHOD(MethodInfo("_process", PropertyInfo(Variant::REAL, "delta"))); - BIND_VMETHOD(MethodInfo("_fixed_process", PropertyInfo(Variant::REAL, "delta"))); + BIND_VMETHOD(MethodInfo("_physics_process", PropertyInfo(Variant::REAL, "delta"))); BIND_VMETHOD(MethodInfo("_enter_tree")); BIND_VMETHOD(MethodInfo("_exit_tree")); BIND_VMETHOD(MethodInfo("_ready")); @@ -2858,9 +2874,9 @@ Node::Node() { data.blocked = 0; data.parent = NULL; data.tree = NULL; - data.fixed_process = false; + data.physics_process = false; data.idle_process = false; - data.fixed_process_internal = false; + data.physics_process_internal = false; data.idle_process_internal = false; data.inside_tree = false; data.ready_notified = false; diff --git a/scene/main/node.h b/scene/main/node.h index 12d6310062..c43e96063f 100644 --- a/scene/main/node.h +++ b/scene/main/node.h @@ -121,10 +121,10 @@ private: // variables used to properly sort the node when processing, ignored otherwise //should move all the stuff below to bits - bool fixed_process; + bool physics_process; bool idle_process; - bool fixed_process_internal; + bool physics_process_internal; bool idle_process_internal; bool input; @@ -213,7 +213,7 @@ public: NOTIFICATION_READY = 13, NOTIFICATION_PAUSED = 14, NOTIFICATION_UNPAUSED = 15, - NOTIFICATION_FIXED_PROCESS = 16, + NOTIFICATION_PHYSICS_PROCESS = 16, NOTIFICATION_PROCESS = 17, NOTIFICATION_PARENTED = 18, NOTIFICATION_UNPARENTED = 19, @@ -223,7 +223,7 @@ public: NOTIFICATION_PATH_CHANGED = 23, NOTIFICATION_TRANSLATION_CHANGED = 24, NOTIFICATION_INTERNAL_PROCESS = 25, - NOTIFICATION_INTERNAL_FIXED_PROCESS = 26, + NOTIFICATION_INTERNAL_PHYSICS_PROCESS = 26, }; @@ -299,16 +299,16 @@ public: void propagate_call(const StringName &p_method, const Array &p_args = Array(), const bool p_parent_first = false); /* PROCESSING */ - void set_fixed_process(bool p_process); - float get_fixed_process_delta_time() const; - bool is_fixed_processing() const; + void set_physics_process(bool p_process); + float get_physics_process_delta_time() const; + bool is_physics_processing() const; void set_process(bool p_idle_process); float get_process_delta_time() const; bool is_processing() const; - void set_fixed_process_internal(bool p_process_internal); - bool is_fixed_processing_internal() const; + void set_physics_process_internal(bool p_process_internal); + bool is_physics_processing_internal() const; void set_process_internal(bool p_idle_process_internal); bool is_processing_internal() const; diff --git a/scene/main/scene_tree.cpp b/scene/main/scene_tree.cpp index 4f62d88934..d4be683a2b 100644 --- a/scene/main/scene_tree.cpp +++ b/scene/main/scene_tree.cpp @@ -85,6 +85,11 @@ void SceneTree::tree_changed() { emit_signal(tree_changed_name); } +void SceneTree::node_added(Node *p_node) { + + emit_signal(node_added_name, p_node); +} + void SceneTree::node_removed(Node *p_node) { if (current_scene == p_node) { @@ -446,12 +451,12 @@ bool SceneTree::iteration(float p_time) { _flush_transform_notifications(); MainLoop::iteration(p_time); - fixed_process_time = p_time; + physics_process_time = p_time; - emit_signal("fixed_frame"); + emit_signal("physics_frame"); - _notify_group_pause("fixed_process_internal", Node::NOTIFICATION_INTERNAL_FIXED_PROCESS); - _notify_group_pause("fixed_process", Node::NOTIFICATION_FIXED_PROCESS); + _notify_group_pause("physics_process_internal", Node::NOTIFICATION_INTERNAL_PHYSICS_PROCESS); + _notify_group_pause("physics_process", Node::NOTIFICATION_PHYSICS_PROCESS); _flush_ugc(); MessageQueue::get_singleton()->flush(); //small little hack _flush_transform_notifications(); @@ -650,7 +655,7 @@ void SceneTree::set_quit_on_go_back(bool p_enable) { bool SceneTree::is_node_being_edited(const Node *p_node) const { - return Engine::get_singleton()->is_editor_hint() && edited_scene_root && edited_scene_root->is_a_parent_of(p_node); + return Engine::get_singleton()->is_editor_hint() && edited_scene_root && (edited_scene_root->is_a_parent_of(p_node) || edited_scene_root == p_node); } #endif @@ -1172,7 +1177,7 @@ void SceneTree::_update_root_rect() { } } -void SceneTree::set_screen_stretch(StretchMode p_mode, StretchAspect p_aspect, const Size2 p_minsize, int p_shrink) { +void SceneTree::set_screen_stretch(StretchMode p_mode, StretchAspect p_aspect, const Size2 p_minsize, real_t p_shrink) { stretch_mode = p_mode; stretch_aspect = p_aspect; @@ -2189,12 +2194,13 @@ void SceneTree::_bind_methods() { ClassDB::bind_method(D_METHOD("_server_disconnected"), &SceneTree::_server_disconnected); ADD_SIGNAL(MethodInfo("tree_changed")); + ADD_SIGNAL(MethodInfo("node_added", PropertyInfo(Variant::OBJECT, "node"))); ADD_SIGNAL(MethodInfo("node_removed", PropertyInfo(Variant::OBJECT, "node"))); ADD_SIGNAL(MethodInfo("screen_resized")); ADD_SIGNAL(MethodInfo("node_configuration_warning_changed", PropertyInfo(Variant::OBJECT, "node"))); ADD_SIGNAL(MethodInfo("idle_frame")); - ADD_SIGNAL(MethodInfo("fixed_frame")); + ADD_SIGNAL(MethodInfo("physics_frame")); ADD_SIGNAL(MethodInfo("files_dropped", PropertyInfo(Variant::POOL_STRING_ARRAY, "files"), PropertyInfo(Variant::INT, "screen"))); ADD_SIGNAL(MethodInfo("network_peer_connected", PropertyInfo(Variant::INT, "id"))); @@ -2216,6 +2222,7 @@ void SceneTree::_bind_methods() { BIND_ENUM_CONSTANT(STRETCH_ASPECT_KEEP); BIND_ENUM_CONSTANT(STRETCH_ASPECT_KEEP_WIDTH); BIND_ENUM_CONSTANT(STRETCH_ASPECT_KEEP_HEIGHT); + BIND_ENUM_CONSTANT(STRETCH_ASPECT_EXPAND); } SceneTree *SceneTree::singleton = NULL; @@ -2253,12 +2260,13 @@ SceneTree::SceneTree() { collision_debug_contacts = GLOBAL_DEF("debug/shapes/collision/max_contacts_displayed", 10000); tree_version = 1; - fixed_process_time = 1; + physics_process_time = 1; idle_process_time = 1; last_id = 1; root = NULL; current_frame = 0; tree_changed_name = "tree_changed"; + node_added_name = "node_added"; node_removed_name = "node_removed"; ugc_locked = false; call_lock = 0; diff --git a/scene/main/scene_tree.h b/scene/main/scene_tree.h index c116bec4fc..bc3efdc42f 100644 --- a/scene/main/scene_tree.h +++ b/scene/main/scene_tree.h @@ -105,7 +105,7 @@ private: Viewport *root; uint64_t tree_version; - float fixed_process_time; + float physics_process_time; float idle_process_time; bool accept_quit; bool quit_on_go_back; @@ -124,6 +124,7 @@ private: bool input_handled; Size2 last_screen_size; StringName tree_changed_name; + StringName node_added_name; StringName node_removed_name; int64_t current_frame; @@ -147,7 +148,7 @@ private: StretchMode stretch_mode; StretchAspect stretch_aspect; Size2i stretch_min; - int stretch_shrink; + real_t stretch_shrink; void _update_root_rect(); @@ -233,6 +234,7 @@ private: 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_added(Node *p_node); void node_removed(Node *p_node); Group *add_to_group(const StringName &p_group, Node *p_node); @@ -358,7 +360,7 @@ public: void set_input_as_handled(); bool is_input_handled(); - _FORCE_INLINE_ float get_fixed_process_time() const { return fixed_process_time; } + _FORCE_INLINE_ float get_physics_process_time() const { return physics_process_time; } _FORCE_INLINE_ float get_idle_process_time() const { return idle_process_time; } #ifdef TOOLS_ENABLED @@ -415,7 +417,7 @@ public: void get_nodes_in_group(const StringName &p_group, List<Node *> *p_list); bool has_group(const StringName &p_identifier) const; - void set_screen_stretch(StretchMode p_mode, StretchAspect p_aspect, const Size2 p_minsize, int p_shrink = 1); + void set_screen_stretch(StretchMode p_mode, StretchAspect p_aspect, const Size2 p_minsize, real_t p_shrink = 1); //void change_scene(const String& p_path); //Node *get_loaded_scene(); diff --git a/scene/main/timer.cpp b/scene/main/timer.cpp index df7d609ac0..e0c6f93f25 100755 --- a/scene/main/timer.cpp +++ b/scene/main/timer.cpp @@ -47,7 +47,7 @@ void Timer::_notification(int p_what) { } } break; case NOTIFICATION_INTERNAL_PROCESS: { - if (timer_process_mode == TIMER_PROCESS_FIXED || !is_processing_internal()) + if (timer_process_mode == TIMER_PROCESS_PHYSICS || !is_processing_internal()) return; time_left -= get_process_delta_time(); @@ -61,10 +61,10 @@ void Timer::_notification(int p_what) { } } break; - case NOTIFICATION_INTERNAL_FIXED_PROCESS: { - if (timer_process_mode == TIMER_PROCESS_IDLE || !is_fixed_processing_internal()) + case NOTIFICATION_INTERNAL_PHYSICS_PROCESS: { + if (timer_process_mode == TIMER_PROCESS_IDLE || !is_physics_processing_internal()) return; - time_left -= get_fixed_process_delta_time(); + time_left -= get_physics_process_delta_time(); if (time_left < 0) { if (!one_shot) @@ -144,16 +144,16 @@ void Timer::set_timer_process_mode(TimerProcessMode p_mode) { return; switch (timer_process_mode) { - case TIMER_PROCESS_FIXED: - if (is_fixed_processing_internal()) { - set_fixed_process_internal(false); + case TIMER_PROCESS_PHYSICS: + if (is_physics_processing_internal()) { + set_physics_process_internal(false); set_process_internal(true); } break; case TIMER_PROCESS_IDLE: if (is_processing_internal()) { set_process_internal(false); - set_fixed_process_internal(true); + set_physics_process_internal(true); } break; } @@ -167,7 +167,7 @@ Timer::TimerProcessMode Timer::get_timer_process_mode() const { void Timer::_set_process(bool p_process, bool p_force) { switch (timer_process_mode) { - case TIMER_PROCESS_FIXED: set_fixed_process_internal(p_process && !paused); break; + case TIMER_PROCESS_PHYSICS: set_physics_process_internal(p_process && !paused); break; case TIMER_PROCESS_IDLE: set_process_internal(p_process && !paused); break; } processing = p_process; @@ -199,12 +199,12 @@ void Timer::_bind_methods() { ADD_SIGNAL(MethodInfo("timeout")); - ADD_PROPERTY(PropertyInfo(Variant::INT, "process_mode", PROPERTY_HINT_ENUM, "Fixed,Idle"), "set_timer_process_mode", "get_timer_process_mode"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "process_mode", PROPERTY_HINT_ENUM, "Physics,Idle"), "set_timer_process_mode", "get_timer_process_mode"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "wait_time", PROPERTY_HINT_EXP_RANGE, "0.01,4096,0.01"), "set_wait_time", "get_wait_time"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "one_shot"), "set_one_shot", "is_one_shot"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "autostart"), "set_autostart", "has_autostart"); - BIND_ENUM_CONSTANT(TIMER_PROCESS_FIXED); + BIND_ENUM_CONSTANT(TIMER_PROCESS_PHYSICS); BIND_ENUM_CONSTANT(TIMER_PROCESS_IDLE); } diff --git a/scene/main/timer.h b/scene/main/timer.h index 0cd92f12de..a02adbb0a3 100755 --- a/scene/main/timer.h +++ b/scene/main/timer.h @@ -50,7 +50,7 @@ protected: public: enum TimerProcessMode { - TIMER_PROCESS_FIXED, + TIMER_PROCESS_PHYSICS, TIMER_PROCESS_IDLE, }; diff --git a/scene/main/viewport.cpp b/scene/main/viewport.cpp index d27a1a5641..0a02f471c1 100644 --- a/scene/main/viewport.cpp +++ b/scene/main/viewport.cpp @@ -456,10 +456,10 @@ void Viewport::_notification(int p_what) { VS::get_singleton()->viewport_set_active(viewport, false); } break; - case NOTIFICATION_FIXED_PROCESS: { + case NOTIFICATION_PHYSICS_PROCESS: { if (gui.tooltip_timer >= 0) { - gui.tooltip_timer -= get_fixed_process_delta_time(); + gui.tooltip_timer -= get_physics_process_delta_time(); if (gui.tooltip_timer < 0) { _gui_show_tooltip(); } @@ -1339,7 +1339,7 @@ Vector2 Viewport::get_mouse_position() const { void Viewport::warp_mouse(const Vector2 &p_pos) { Vector2 gpos = (get_final_transform().affine_inverse() * _get_input_pre_xform()).affine_inverse().xform(p_pos); - Input::get_singleton()->warp_mouse_pos(gpos); + Input::get_singleton()->warp_mouse_position(gpos); } void Viewport::_gui_sort_subwindows() { @@ -2371,8 +2371,13 @@ void Viewport::input(const Ref<InputEvent> &p_event) { ERR_FAIL_COND(!is_inside_tree()); - get_tree()->_call_input_pause(input_group, "_input", p_event); //not a bug, must happen before GUI, order is _input -> gui input -> _unhandled input - _gui_input_event(p_event); + if (!get_tree()->is_input_handled()) { + get_tree()->_call_input_pause(input_group, "_input", p_event); //not a bug, must happen before GUI, order is _input -> gui input -> _unhandled input + } + + if (!get_tree()->is_input_handled()) { + _gui_input_event(p_event); + } //get_tree()->call_group(SceneTree::GROUP_CALL_REVERSE|SceneTree::GROUP_CALL_REALTIME|SceneTree::GROUP_CALL_MULIILEVEL,gui_input_group,"_gui_input",p_event); //special one for GUI, as controls use their own process check } @@ -2453,7 +2458,7 @@ Rect2 Viewport::get_attach_to_screen_rect() const { void Viewport::set_physics_object_picking(bool p_enable) { physics_object_picking = p_enable; - set_fixed_process(physics_object_picking); + set_physics_process(physics_object_picking); if (!physics_object_picking) physics_picking_events.clear(); } @@ -2673,7 +2678,7 @@ void Viewport::_bind_methods() { ClassDB::bind_method(D_METHOD("set_attach_to_screen_rect", "rect"), &Viewport::set_attach_to_screen_rect); ClassDB::bind_method(D_METHOD("get_mouse_position"), &Viewport::get_mouse_position); - ClassDB::bind_method(D_METHOD("warp_mouse", "to_pos"), &Viewport::warp_mouse); + ClassDB::bind_method(D_METHOD("warp_mouse", "to_position"), &Viewport::warp_mouse); ClassDB::bind_method(D_METHOD("gui_has_modal_stack"), &Viewport::gui_has_modal_stack); ClassDB::bind_method(D_METHOD("gui_get_drag_data"), &Viewport::gui_get_drag_data); @@ -2711,7 +2716,7 @@ void Viewport::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::INT, "debug_draw", PROPERTY_HINT_ENUM, "Disabled,Unshaded,Overdraw,Wireframe"), "set_debug_draw", "get_debug_draw"); ADD_GROUP("Render Target", "render_target_"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "render_target_v_flip"), "set_vflip", "get_vflip"); - ADD_PROPERTY(PropertyInfo(Variant::BOOL, "render_target_clear_mode", PROPERTY_HINT_ENUM, "Always,Never,NextFrame"), "set_clear_mode", "get_clear_mode"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "render_target_clear_mode", PROPERTY_HINT_ENUM, "Always,Never,Next Frame"), "set_clear_mode", "get_clear_mode"); ADD_PROPERTY(PropertyInfo(Variant::INT, "render_target_update_mode", PROPERTY_HINT_ENUM, "Disabled,Once,When Visible,Always"), "set_update_mode", "get_update_mode"); ADD_GROUP("Audio Listener", "audio_listener_"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "audio_listener_enable_2d"), "set_as_audio_listener_2d", "is_audio_listener_2d"); diff --git a/scene/register_scene_types.cpp b/scene/register_scene_types.cpp index b9dfbd6bb0..75268aad1f 100644 --- a/scene/register_scene_types.cpp +++ b/scene/register_scene_types.cpp @@ -222,13 +222,18 @@ void register_scene_types() { String font_path = GLOBAL_DEF("gui/theme/custom_font", ""); ProjectSettings::get_singleton()->set_custom_property_info("gui/theme/custom_font", PropertyInfo(Variant::STRING, "gui/theme/custom_font", PROPERTY_HINT_FILE, "*.tres,*.res,*.font", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED)); + bool has_theme = false; if (theme_path != String()) { Ref<Theme> theme = ResourceLoader::load(theme_path); if (theme.is_valid()) { Theme::set_default(theme); + has_theme = true; + } else { + ERR_PRINTS("Error loading custom theme '" + theme_path + "'"); } - } else { + } + if (!has_theme) { Ref<Font> font; if (font_path != String()) { font = ResourceLoader::load(font_path); @@ -261,9 +266,11 @@ void register_scene_types() { ClassDB::register_class<Control>(); ClassDB::register_class<Button>(); ClassDB::register_class<Label>(); + ClassDB::register_class<ScrollBar>(); ClassDB::register_class<HScrollBar>(); ClassDB::register_class<VScrollBar>(); ClassDB::register_class<ProgressBar>(); + ClassDB::register_class<Slider>(); ClassDB::register_class<HSlider>(); ClassDB::register_class<VSlider>(); ClassDB::register_class<Popup>(); @@ -347,6 +354,7 @@ void register_scene_types() { #ifndef _3D_DISABLED ClassDB::register_class<BoneAttachment>(); ClassDB::register_virtual_class<VisualInstance>(); + ClassDB::register_virtual_class<GeometryInstance>(); ClassDB::register_class<Camera>(); ClassDB::register_class<Listener>(); ClassDB::register_class<ARVRCamera>(); @@ -356,6 +364,7 @@ void register_scene_types() { ClassDB::register_class<InterpolatedCamera>(); ClassDB::register_class<MeshInstance>(); ClassDB::register_class<ImmediateGeometry>(); + ClassDB::register_virtual_class<SpriteBase3D>(); ClassDB::register_class<Sprite3D>(); ClassDB::register_class<AnimatedSprite3D>(); ClassDB::register_virtual_class<Light>(); @@ -375,6 +384,7 @@ void register_scene_types() { OS::get_singleton()->yield(); //may take time to init ClassDB::register_virtual_class<CollisionObject>(); + ClassDB::register_virtual_class<PhysicsBody>(); ClassDB::register_class<StaticBody>(); ClassDB::register_class<RigidBody>(); ClassDB::register_class<KinematicCollision>(); @@ -489,6 +499,7 @@ void register_scene_types() { OS::get_singleton()->yield(); //may take time to init + ClassDB::register_virtual_class<Shape>(); ClassDB::register_class<RayShape>(); ClassDB::register_class<SphereShape>(); ClassDB::register_class<BoxShape>(); @@ -526,6 +537,7 @@ void register_scene_types() { ClassDB::register_class<DynamicFontData>(); ClassDB::register_class<DynamicFont>(); + ClassDB::register_virtual_class<StyleBox>(); ClassDB::register_class<StyleBoxEmpty>(); ClassDB::register_class<StyleBoxTexture>(); ClassDB::register_class<StyleBoxFlat>(); diff --git a/scene/resources/animation.cpp b/scene/resources/animation.cpp index eae95d9247..21e4a85cd1 100644 --- a/scene/resources/animation.cpp +++ b/scene/resources/animation.cpp @@ -613,7 +613,7 @@ int Animation::transform_track_insert_key(int p_track, float p_time, const Vecto return ret; } -void Animation::track_remove_key_at_pos(int p_track, float p_pos) { +void Animation::track_remove_key_at_position(int p_track, float p_pos) { int idx = track_find_key(p_track, p_pos, true); ERR_FAIL_COND(idx < 0); @@ -707,12 +707,12 @@ void Animation::track_insert_key(int p_track, float p_time, const Variant &p_key Dictionary d = p_key; Vector3 loc; - if (d.has("loc")) - loc = d["loc"]; + if (d.has("location")) + loc = d["location"]; Quat rot; - if (d.has("rot")) - rot = d["rot"]; + if (d.has("rotation")) + rot = d["rotation"]; Vector3 scale; if (d.has("scale")) @@ -799,8 +799,8 @@ Variant Animation::track_get_key_value(int p_track, int p_key_idx) const { ERR_FAIL_INDEX_V(p_key_idx, tt->transforms.size(), Variant()); Dictionary d; - d["loc"] = tt->transforms[p_key_idx].value.loc; - d["rot"] = tt->transforms[p_key_idx].value.rot; + d["location"] = tt->transforms[p_key_idx].value.loc; + d["rotation"] = tt->transforms[p_key_idx].value.rot; d["scale"] = tt->transforms[p_key_idx].value.scale; return d; @@ -903,10 +903,10 @@ void Animation::track_set_key_value(int p_track, int p_key_idx, const Variant &p TransformTrack *tt = static_cast<TransformTrack *>(t); ERR_FAIL_INDEX(p_key_idx, tt->transforms.size()); Dictionary d = p_value; - if (d.has("loc")) - tt->transforms[p_key_idx].value.loc = d["loc"]; - if (d.has("rot")) - tt->transforms[p_key_idx].value.rot = d["rot"]; + if (d.has("location")) + tt->transforms[p_key_idx].value.loc = d["location"]; + if (d.has("rotation")) + tt->transforms[p_key_idx].value.rot = d["rotation"]; if (d.has("scale")) tt->transforms[p_key_idx].value.scale = d["scale"]; @@ -1171,9 +1171,7 @@ T Animation::_interpolate(const Vector<TKey<T> > &p_keys, float p_time, Interpol ERR_FAIL_COND_V(idx == -2, T()); - if (p_ok) - *p_ok = true; - + bool result = true; int next = 0; float c = 0; // prepare for all cases of interpolation @@ -1243,10 +1241,19 @@ T Animation::_interpolate(const Vector<TKey<T> > &p_keys, float p_time, Interpol } else if (idx < 0) { - idx = next = 0; + // only allow extending first key to anim start if looping + if (loop) + idx = next = 0; + else + result = false; } } + if (p_ok) + *p_ok = result; + if (!result) + return T(); + float tr = p_keys[idx].transition; if (tr == 0 || idx == next) { @@ -1298,7 +1305,7 @@ Error Animation::transform_track_interpolate(int p_track, float p_time, Vector3 TransformKey tk = _interpolate(tt->transforms, p_time, tt->interpolation, tt->loop_wrap, &ok); - if (!ok) // ?? + if (!ok) return ERR_UNAVAILABLE; if (r_loc) @@ -1590,7 +1597,7 @@ float Animation::get_step() const { void Animation::_bind_methods() { - ClassDB::bind_method(D_METHOD("add_track", "type", "at_pos"), &Animation::add_track, DEFVAL(-1)); + ClassDB::bind_method(D_METHOD("add_track", "type", "at_position"), &Animation::add_track, DEFVAL(-1)); ClassDB::bind_method(D_METHOD("remove_track", "idx"), &Animation::remove_track); ClassDB::bind_method(D_METHOD("get_track_count"), &Animation::get_track_count); ClassDB::bind_method(D_METHOD("track_get_type", "idx"), &Animation::track_get_type); @@ -1604,10 +1611,10 @@ void Animation::_bind_methods() { ClassDB::bind_method(D_METHOD("track_set_imported", "idx", "imported"), &Animation::track_set_imported); ClassDB::bind_method(D_METHOD("track_is_imported", "idx"), &Animation::track_is_imported); - ClassDB::bind_method(D_METHOD("transform_track_insert_key", "idx", "time", "loc", "rot", "scale"), &Animation::transform_track_insert_key); + ClassDB::bind_method(D_METHOD("transform_track_insert_key", "idx", "time", "location", "rotation", "scale"), &Animation::transform_track_insert_key); ClassDB::bind_method(D_METHOD("track_insert_key", "idx", "time", "key", "transition"), &Animation::track_insert_key, DEFVAL(1)); ClassDB::bind_method(D_METHOD("track_remove_key", "idx", "key_idx"), &Animation::track_remove_key); - ClassDB::bind_method(D_METHOD("track_remove_key_at_pos", "idx", "pos"), &Animation::track_remove_key_at_pos); + ClassDB::bind_method(D_METHOD("track_remove_key_at_position", "idx", "position"), &Animation::track_remove_key_at_position); ClassDB::bind_method(D_METHOD("track_set_key_value", "idx", "key", "value"), &Animation::track_set_key_value); ClassDB::bind_method(D_METHOD("track_set_key_transition", "idx", "key_idx", "transition"), &Animation::track_set_key_transition); ClassDB::bind_method(D_METHOD("track_get_key_transition", "idx", "key_idx"), &Animation::track_get_key_transition); diff --git a/scene/resources/animation.h b/scene/resources/animation.h index e653f6b124..6235e161a3 100644 --- a/scene/resources/animation.h +++ b/scene/resources/animation.h @@ -245,7 +245,7 @@ public: void track_set_key_value(int p_track, int p_key_idx, const Variant &p_value); int track_find_key(int p_track, float p_time, bool p_exact = false) const; void track_remove_key(int p_track, int p_idx); - void track_remove_key_at_pos(int p_track, float p_pos); + void track_remove_key_at_position(int p_track, float p_pos); int track_get_key_count(int p_track) const; Variant track_get_key_value(int p_track, int p_key_idx) const; float track_get_key_time(int p_track, int p_key_idx) const; diff --git a/scene/resources/audio_stream_sample.cpp b/scene/resources/audio_stream_sample.cpp index dff0fb8588..fdc3b79db6 100644 --- a/scene/resources/audio_stream_sample.cpp +++ b/scene/resources/audio_stream_sample.cpp @@ -41,7 +41,7 @@ void AudioStreamPlaybackSample::start(float p_from_pos) { ima_adpcm[i].window_ofs = 0; } - seek_pos(p_from_pos); + seek(p_from_pos); sign = 1; active = true; } @@ -61,11 +61,11 @@ int AudioStreamPlaybackSample::get_loop_count() const { return 0; } -float AudioStreamPlaybackSample::get_pos() const { +float AudioStreamPlaybackSample::get_playback_position() const { return float(offset >> MIX_FRAC_BITS) / base->mix_rate; } -void AudioStreamPlaybackSample::seek_pos(float p_time) { +void AudioStreamPlaybackSample::seek(float p_time) { if (base->format == AudioStreamSample::FORMAT_IMA_ADPCM) return; //no seeking in ima-adpcm @@ -486,7 +486,8 @@ PoolVector<uint8_t> AudioStreamSample::get_data() const { { PoolVector<uint8_t>::Write w = pv.write(); - copymem(w.ptr(), data, data_bytes); + uint8_t *dataptr = (uint8_t *)data; + copymem(w.ptr(), dataptr + DATA_PAD, data_bytes); } } diff --git a/scene/resources/audio_stream_sample.h b/scene/resources/audio_stream_sample.h index 6cb255fedf..fbb8010a9c 100644 --- a/scene/resources/audio_stream_sample.h +++ b/scene/resources/audio_stream_sample.h @@ -71,8 +71,8 @@ public: virtual int get_loop_count() const; //times it looped - virtual float get_pos() const; - virtual void seek_pos(float p_time); + virtual float get_playback_position() const; + virtual void seek(float p_time); virtual void mix(AudioFrame *p_buffer, float p_rate_scale, int p_frames); diff --git a/scene/resources/bit_mask.cpp b/scene/resources/bit_mask.cpp index be994e3b33..029a9ef0e8 100644 --- a/scene/resources/bit_mask.cpp +++ b/scene/resources/bit_mask.cpp @@ -172,8 +172,8 @@ void BitMap::_bind_methods() { ClassDB::bind_method(D_METHOD("create", "size"), &BitMap::create); ClassDB::bind_method(D_METHOD("create_from_image_alpha", "image"), &BitMap::create_from_image_alpha); - ClassDB::bind_method(D_METHOD("set_bit", "pos", "bit"), &BitMap::set_bit); - ClassDB::bind_method(D_METHOD("get_bit", "pos"), &BitMap::get_bit); + ClassDB::bind_method(D_METHOD("set_bit", "position", "bit"), &BitMap::set_bit); + ClassDB::bind_method(D_METHOD("get_bit", "position"), &BitMap::get_bit); ClassDB::bind_method(D_METHOD("set_bit_rect", "p_rect", "bit"), &BitMap::set_bit_rect); ClassDB::bind_method(D_METHOD("get_true_bit_count"), &BitMap::get_true_bit_count); diff --git a/scene/resources/curve.cpp b/scene/resources/curve.cpp index 1066848dd1..79cc94c911 100644 --- a/scene/resources/curve.cpp +++ b/scene/resources/curve.cpp @@ -241,7 +241,7 @@ int Curve::set_point_offset(int p_index, float offset) { return i; } -Vector2 Curve::get_point_pos(int p_index) const { +Vector2 Curve::get_point_position(int p_index) const { ERR_FAIL_INDEX_V(p_index, _points.size(), Vector2(0, 0)); return _points[p_index].pos; } @@ -480,23 +480,22 @@ real_t Curve::interpolate_baked(real_t offset) { void Curve::_bind_methods() { - ClassDB::bind_method(D_METHOD("add_point", "pos", "left_tangent", "right_tangent", "left_mode", "right_mode"), - &Curve::add_point, DEFVAL(0), DEFVAL(0), DEFVAL(TANGENT_FREE), DEFVAL(TANGENT_FREE)); + ClassDB::bind_method(D_METHOD("add_point", "position", "left_tangent", "right_tangent", "left_mode", "right_mode"), &Curve::add_point, DEFVAL(0), DEFVAL(0), DEFVAL(TANGENT_FREE), DEFVAL(TANGENT_FREE)); ClassDB::bind_method(D_METHOD("remove_point", "index"), &Curve::remove_point); ClassDB::bind_method(D_METHOD("clear_points"), &Curve::clear_points); - ClassDB::bind_method(D_METHOD("get_point_pos", "index"), &Curve::get_point_pos); + ClassDB::bind_method(D_METHOD("get_point_position", "index"), &Curve::get_point_position); ClassDB::bind_method(D_METHOD("set_point_value", "index", "y"), &Curve::set_point_value); - ClassDB::bind_method(D_METHOD("set_point_offset", "index", "offset"), &Curve::set_point_value); + ClassDB::bind_method(D_METHOD("set_point_offset", "index", "offset"), &Curve::set_point_offset); ClassDB::bind_method(D_METHOD("interpolate", "offset"), &Curve::interpolate); ClassDB::bind_method(D_METHOD("interpolate_baked", "offset"), &Curve::interpolate_baked); ClassDB::bind_method(D_METHOD("get_point_left_tangent", "index"), &Curve::get_point_left_tangent); - ClassDB::bind_method(D_METHOD("get_point_right_tangent", "index"), &Curve::get_point_left_tangent); + ClassDB::bind_method(D_METHOD("get_point_right_tangent", "index"), &Curve::get_point_right_tangent); ClassDB::bind_method(D_METHOD("get_point_left_mode", "index"), &Curve::get_point_left_mode); - ClassDB::bind_method(D_METHOD("get_point_right_mode", "index"), &Curve::get_point_left_mode); + ClassDB::bind_method(D_METHOD("get_point_right_mode", "index"), &Curve::get_point_right_mode); ClassDB::bind_method(D_METHOD("set_point_left_tangent", "index", "tangent"), &Curve::set_point_left_tangent); - ClassDB::bind_method(D_METHOD("set_point_right_tangent", "index", "tangent"), &Curve::set_point_left_tangent); + ClassDB::bind_method(D_METHOD("set_point_right_tangent", "index", "tangent"), &Curve::set_point_right_tangent); ClassDB::bind_method(D_METHOD("set_point_left_mode", "index", "mode"), &Curve::set_point_left_mode); - ClassDB::bind_method(D_METHOD("set_point_right_mode", "index", "mode"), &Curve::set_point_left_mode); + ClassDB::bind_method(D_METHOD("set_point_right_mode", "index", "mode"), &Curve::set_point_right_mode); ClassDB::bind_method(D_METHOD("get_min_value"), &Curve::get_min_value); ClassDB::bind_method(D_METHOD("set_min_value", "min"), &Curve::set_min_value); ClassDB::bind_method(D_METHOD("get_max_value"), &Curve::get_max_value); @@ -539,7 +538,7 @@ void Curve2D::add_point(const Vector2 &p_pos, const Vector2 &p_in, const Vector2 emit_signal(CoreStringNames::get_singleton()->changed); } -void Curve2D::set_point_pos(int p_index, const Vector2 &p_pos) { +void Curve2D::set_point_position(int p_index, const Vector2 &p_pos) { ERR_FAIL_INDEX(p_index, points.size()); @@ -547,7 +546,7 @@ void Curve2D::set_point_pos(int p_index, const Vector2 &p_pos) { baked_cache_dirty = true; emit_signal(CoreStringNames::get_singleton()->changed); } -Vector2 Curve2D::get_point_pos(int p_index) const { +Vector2 Curve2D::get_point_position(int p_index) const { ERR_FAIL_INDEX_V(p_index, points.size(), Vector2()); return points[p_index].pos; @@ -891,12 +890,12 @@ PoolVector2Array Curve2D::tessellate(int p_max_stages, float p_tolerance) const void Curve2D::_bind_methods() { ClassDB::bind_method(D_METHOD("get_point_count"), &Curve2D::get_point_count); - ClassDB::bind_method(D_METHOD("add_point", "pos", "in", "out", "atpos"), &Curve2D::add_point, DEFVAL(Vector2()), DEFVAL(Vector2()), DEFVAL(-1)); - ClassDB::bind_method(D_METHOD("set_point_pos", "idx", "pos"), &Curve2D::set_point_pos); - ClassDB::bind_method(D_METHOD("get_point_pos", "idx"), &Curve2D::get_point_pos); - ClassDB::bind_method(D_METHOD("set_point_in", "idx", "pos"), &Curve2D::set_point_in); + ClassDB::bind_method(D_METHOD("add_point", "position", "in", "out", "at_position"), &Curve2D::add_point, DEFVAL(Vector2()), DEFVAL(Vector2()), DEFVAL(-1)); + ClassDB::bind_method(D_METHOD("set_point_position", "idx", "position"), &Curve2D::set_point_position); + ClassDB::bind_method(D_METHOD("get_point_position", "idx"), &Curve2D::get_point_position); + ClassDB::bind_method(D_METHOD("set_point_in", "idx", "position"), &Curve2D::set_point_in); ClassDB::bind_method(D_METHOD("get_point_in", "idx"), &Curve2D::get_point_in); - ClassDB::bind_method(D_METHOD("set_point_out", "idx", "pos"), &Curve2D::set_point_out); + ClassDB::bind_method(D_METHOD("set_point_out", "idx", "position"), &Curve2D::set_point_out); ClassDB::bind_method(D_METHOD("get_point_out", "idx"), &Curve2D::get_point_out); ClassDB::bind_method(D_METHOD("remove_point", "idx"), &Curve2D::remove_point); ClassDB::bind_method(D_METHOD("clear_points"), &Curve2D::clear_points); @@ -916,9 +915,6 @@ void Curve2D::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::REAL, "bake_interval", PROPERTY_HINT_RANGE, "0.01,512,0.01"), "set_bake_interval", "get_bake_interval"); ADD_PROPERTY(PropertyInfo(Variant::INT, "_data", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), "_set_data", "_get_data"); - /*ADD_PROPERTY( PropertyInfo( Variant::VECTOR3_ARRAY, "points_out"), "set_points_out","get_points_out"); - ADD_PROPERTY( PropertyInfo( Variant::VECTOR3_ARRAY, "points_pos"), "set_points_pos","get_points_pos"); -*/ } Curve2D::Curve2D() { @@ -955,7 +951,7 @@ void Curve3D::add_point(const Vector3 &p_pos, const Vector3 &p_in, const Vector3 baked_cache_dirty = true; emit_signal(CoreStringNames::get_singleton()->changed); } -void Curve3D::set_point_pos(int p_index, const Vector3 &p_pos) { +void Curve3D::set_point_position(int p_index, const Vector3 &p_pos) { ERR_FAIL_INDEX(p_index, points.size()); @@ -963,7 +959,7 @@ void Curve3D::set_point_pos(int p_index, const Vector3 &p_pos) { baked_cache_dirty = true; emit_signal(CoreStringNames::get_singleton()->changed); } -Vector3 Curve3D::get_point_pos(int p_index) const { +Vector3 Curve3D::get_point_position(int p_index) const { ERR_FAIL_INDEX_V(p_index, points.size(), Vector3()); return points[p_index].pos; @@ -1386,14 +1382,14 @@ PoolVector3Array Curve3D::tessellate(int p_max_stages, float p_tolerance) const void Curve3D::_bind_methods() { ClassDB::bind_method(D_METHOD("get_point_count"), &Curve3D::get_point_count); - ClassDB::bind_method(D_METHOD("add_point", "pos", "in", "out", "atpos"), &Curve3D::add_point, DEFVAL(Vector3()), DEFVAL(Vector3()), DEFVAL(-1)); - ClassDB::bind_method(D_METHOD("set_point_pos", "idx", "pos"), &Curve3D::set_point_pos); - ClassDB::bind_method(D_METHOD("get_point_pos", "idx"), &Curve3D::get_point_pos); + ClassDB::bind_method(D_METHOD("add_point", "position", "in", "out", "at_position"), &Curve3D::add_point, DEFVAL(Vector3()), DEFVAL(Vector3()), DEFVAL(-1)); + ClassDB::bind_method(D_METHOD("set_point_position", "idx", "position"), &Curve3D::set_point_position); + ClassDB::bind_method(D_METHOD("get_point_position", "idx"), &Curve3D::get_point_position); ClassDB::bind_method(D_METHOD("set_point_tilt", "idx", "tilt"), &Curve3D::set_point_tilt); ClassDB::bind_method(D_METHOD("get_point_tilt", "idx"), &Curve3D::get_point_tilt); - ClassDB::bind_method(D_METHOD("set_point_in", "idx", "pos"), &Curve3D::set_point_in); + ClassDB::bind_method(D_METHOD("set_point_in", "idx", "position"), &Curve3D::set_point_in); ClassDB::bind_method(D_METHOD("get_point_in", "idx"), &Curve3D::get_point_in); - ClassDB::bind_method(D_METHOD("set_point_out", "idx", "pos"), &Curve3D::set_point_out); + ClassDB::bind_method(D_METHOD("set_point_out", "idx", "position"), &Curve3D::set_point_out); ClassDB::bind_method(D_METHOD("get_point_out", "idx"), &Curve3D::get_point_out); ClassDB::bind_method(D_METHOD("remove_point", "idx"), &Curve3D::remove_point); ClassDB::bind_method(D_METHOD("clear_points"), &Curve3D::clear_points); @@ -1414,9 +1410,6 @@ void Curve3D::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::REAL, "bake_interval", PROPERTY_HINT_RANGE, "0.01,512,0.01"), "set_bake_interval", "get_bake_interval"); ADD_PROPERTY(PropertyInfo(Variant::INT, "_data", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), "_set_data", "_get_data"); - /*ADD_PROPERTY( PropertyInfo( Variant::VECTOR3_ARRAY, "points_out"), "set_points_out","get_points_out"); - ADD_PROPERTY( PropertyInfo( Variant::VECTOR3_ARRAY, "points_pos"), "set_points_pos","get_points_pos"); -*/ } Curve3D::Curve3D() { diff --git a/scene/resources/curve.h b/scene/resources/curve.h index 3071aee5de..e7d47f4056 100644 --- a/scene/resources/curve.h +++ b/scene/resources/curve.h @@ -92,7 +92,7 @@ public: void set_point_value(int p_index, real_t pos); int set_point_offset(int p_index, float offset); - Vector2 get_point_pos(int p_index) const; + Vector2 get_point_position(int p_index) const; Point get_point(int p_index) const; @@ -180,8 +180,8 @@ protected: public: int get_point_count() const; void add_point(const Vector2 &p_pos, const Vector2 &p_in = Vector2(), const Vector2 &p_out = Vector2(), int p_atpos = -1); - void set_point_pos(int p_index, const Vector2 &p_pos); - Vector2 get_point_pos(int p_index) const; + void set_point_position(int p_index, const Vector2 &p_pos); + Vector2 get_point_position(int p_index) const; void set_point_in(int p_index, const Vector2 &p_in); Vector2 get_point_in(int p_index) const; void set_point_out(int p_index, const Vector2 &p_out); @@ -245,8 +245,8 @@ protected: public: int get_point_count() const; void add_point(const Vector3 &p_pos, const Vector3 &p_in = Vector3(), const Vector3 &p_out = Vector3(), int p_atpos = -1); - void set_point_pos(int p_index, const Vector3 &p_pos); - Vector3 get_point_pos(int p_index) const; + void set_point_position(int p_index, const Vector3 &p_pos); + Vector3 get_point_position(int p_index) const; void set_point_tilt(int p_index, float p_tilt); float get_point_tilt(int p_index) const; void set_point_in(int p_index, const Vector3 &p_in); diff --git a/scene/resources/default_theme/default_theme.cpp b/scene/resources/default_theme/default_theme.cpp index 2fbd5ebdd3..ce439fece6 100644 --- a/scene/resources/default_theme/default_theme.cpp +++ b/scene/resources/default_theme/default_theme.cpp @@ -512,6 +512,7 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const // HSlider theme->set_stylebox("slider", "HSlider", make_stylebox(hslider_bg_png, 4, 4, 4, 4)); + theme->set_stylebox("grabber_area", "HSlider", make_stylebox(hslider_bg_png, 4, 4, 4, 4)); theme->set_stylebox("grabber_highlight", "HSlider", make_stylebox(hslider_grabber_hl_png, 6, 6, 6, 6)); theme->set_stylebox("grabber_disabled", "HSlider", make_stylebox(hslider_grabber_disabled_png, 6, 6, 6, 6)); theme->set_stylebox("focus", "HSlider", focus); @@ -524,6 +525,7 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const // VSlider theme->set_stylebox("slider", "VSlider", make_stylebox(vslider_bg_png, 4, 4, 4, 4)); + theme->set_stylebox("grabber_area", "VSlider", make_stylebox(vslider_bg_png, 4, 4, 4, 4)); theme->set_stylebox("grabber_highlight", "VSlider", make_stylebox(vslider_grabber_hl_png, 6, 6, 6, 6)); theme->set_stylebox("grabber_disabled", "VSlider", make_stylebox(vslider_grabber_disabled_png, 6, 6, 6, 6)); theme->set_stylebox("focus", "VSlider", focus); @@ -774,6 +776,9 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const theme->set_icon("add_preset", "ColorPicker", make_icon(icon_add_png)); theme->set_icon("color_hue", "ColorPicker", make_icon(color_picker_hue_png)); theme->set_icon("color_sample", "ColorPicker", make_icon(color_picker_sample_png)); + theme->set_icon("preset_bg", "ColorPicker", make_icon(mini_checkerboard_png)); + + theme->set_icon("bg", "ColorPickerButton", make_icon(mini_checkerboard_png)); // TooltipPanel @@ -879,7 +884,7 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const theme->set_icon("minus", "GraphEdit", make_icon(icon_zoom_less_png)); theme->set_icon("reset", "GraphEdit", make_icon(icon_zoom_reset_png)); theme->set_icon("more", "GraphEdit", make_icon(icon_zoom_more_png)); - theme->set_icon("SnapGrid", "GraphEdit", make_icon(icon_snap_grid_png)); + theme->set_icon("snap", "GraphEdit", make_icon(icon_snap_grid_png)); theme->set_stylebox("bg", "GraphEdit", make_stylebox(tree_bg_png, 4, 4, 4, 5)); theme->set_color("grid_minor", "GraphEdit", Color(1, 1, 1, 0.05)); theme->set_color("grid_major", "GraphEdit", Color(1, 1, 1, 0.2)); diff --git a/scene/resources/default_theme/mini_checkerboard.png b/scene/resources/default_theme/mini_checkerboard.png Binary files differnew file mode 100644 index 0000000000..3e53183847 --- /dev/null +++ b/scene/resources/default_theme/mini_checkerboard.png diff --git a/scene/resources/default_theme/source/arrow_down.svg b/scene/resources/default_theme/source/arrow_down.svg deleted file mode 100644 index 354040b548..0000000000 --- a/scene/resources/default_theme/source/arrow_down.svg +++ /dev/null @@ -1,80 +0,0 @@ -<?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="12" - height="12" - viewBox="0 0 12 12" - 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="arrow_down.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" - inkscape:cx="5.7299355" - inkscape:cy="6.6875366" - 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,-1040.3622)"> - <path - style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:6;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="m 2,1043.3622 0,3 4,3 4,-3 0,-3 z" - id="rect4174" - inkscape:connector-curvature="0" - sodipodi:nodetypes="cccccc" /> - </g> -</svg> diff --git a/scene/resources/default_theme/source/arrow_right.svg b/scene/resources/default_theme/source/arrow_right.svg deleted file mode 100644 index 4c4bc05e28..0000000000 --- a/scene/resources/default_theme/source/arrow_right.svg +++ /dev/null @@ -1,80 +0,0 @@ -<?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="12" - height="12" - viewBox="0 0 12 12" - 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="arrow_right.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="3.0018179" - inkscape:cy="6.0349408" - 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,-1040.3622)"> - <path - style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:6;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="m 3,1050.3622 3,0 3,-4 -3,-4 -3,0 z" - id="rect4174" - inkscape:connector-curvature="0" - sodipodi:nodetypes="cccccc" /> - </g> -</svg> diff --git a/scene/resources/default_theme/source/graph_node_close.svg b/scene/resources/default_theme/source/graph_node_close.svg deleted file mode 100644 index 52a35a5b8a..0000000000 --- a/scene/resources/default_theme/source/graph_node_close.svg +++ /dev/null @@ -1,94 +0,0 @@ -<?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="12" - height="12" - viewBox="0 0 12 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="graph_node_close.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.627418" - inkscape:cx="-1.9715406" - inkscape:cy="8.1466063" - 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: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></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <g - inkscape:label="Layer 1" - inkscape:groupmode="layer" - id="layer1" - transform="translate(0,-1040.3622)"> - <g - id="layer1-4" - inkscape:label="Layer 1" - transform="matrix(0.70710678,-0.70710678,0.70710678,0.70710678,-738.13242,313.54349)" - style="fill:#080808;fill-opacity:1"> - <rect - y="1043.3622" - x="1" - height="1.9999478" - width="14" - id="rect4137" - style="fill:#080808;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> - <rect - transform="matrix(0,1,-1,0,0,0)" - style="fill:#080808;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="rect4158" - width="13.999966" - height="2.0000017" - x="1037.3622" - y="-9" /> - </g> - </g> -</svg> diff --git a/scene/resources/default_theme/source/graph_port.svg b/scene/resources/default_theme/source/graph_port.svg deleted file mode 100644 index de9b1d4827..0000000000 --- a/scene/resources/default_theme/source/graph_port.svg +++ /dev/null @@ -1,80 +0,0 @@ -<?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/source/icon_close.svg b/scene/resources/default_theme/source/icon_close.svg deleted file mode 100644 index 6e6ec16638..0000000000 --- a/scene/resources/default_theme/source/icon_close.svg +++ /dev/null @@ -1,94 +0,0 @@ -<?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_add_track.png" - inkscape:export-xdpi="45" - inkscape:export-ydpi="45" - sodipodi:docname="icon_close.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.627418" - inkscape:cx="1.8501874" - inkscape:cy="8.0543329" - 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: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)"> - <g - id="layer1-4" - inkscape:label="Layer 1" - transform="matrix(0.70710678,-0.70710678,0.70710678,0.70710678,-736.13242,311.54347)" - style="fill:#080808;fill-opacity:1"> - <rect - y="1043.3622" - x="1" - height="1.9999478" - width="14" - id="rect4137" - style="fill:#080808;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> - <rect - transform="matrix(0,1,-1,0,0,0)" - style="fill:#080808;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="rect4158" - width="13.999966" - height="2.0000017" - x="1037.3622" - y="-9" /> - </g> - </g> -</svg> diff --git a/scene/resources/default_theme/source/option_arrow.svg b/scene/resources/default_theme/source/option_arrow.svg deleted file mode 100644 index cd78404ff1..0000000000 --- a/scene/resources/default_theme/source/option_arrow.svg +++ /dev/null @@ -1,86 +0,0 @@ -<?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="12" - height="12" - viewBox="0 0 12 12" - 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="option_arrow.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="6.0969578" - inkscape:cy="7.5632913" - 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></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;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - d="m 3,1045.3622 6,0 -3,-4 z" - id="path4158" - inkscape:connector-curvature="0" - sodipodi:nodetypes="cccc" /> - <path - inkscape:connector-curvature="0" - id="path4160" - d="m 3,1047.3622 6,0 -3,4 z" - style="fill:#e0e0e0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - sodipodi:nodetypes="cccc" /> - </g> -</svg> diff --git a/scene/resources/default_theme/source/popup_checked.svg b/scene/resources/default_theme/source/popup_checked.svg deleted file mode 100644 index fbefd4138d..0000000000 --- a/scene/resources/default_theme/source/popup_checked.svg +++ /dev/null @@ -1,81 +0,0 @@ -<?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="8" - height="8" - viewBox="0 0 8 8" - id="svg2" - version="1.1" - inkscape:version="0.91 r13725" - inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_folder.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90" - sodipodi:docname="popup_checked.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.254834" - inkscape:cx="2.6626803" - inkscape:cy="5.227737" - 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-paths="true" - inkscape:snap-intersection-paths="true" - 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></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <g - inkscape:label="Layer 1" - inkscape:groupmode="layer" - id="layer1" - transform="translate(0,-1044.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" - d="m 7,1046.3622 -4,5 -2,-2" - id="path4154" - inkscape:connector-curvature="0" /> - </g> -</svg> diff --git a/scene/resources/default_theme/source/spinbox_updown.svg b/scene/resources/default_theme/source/spinbox_updown.svg deleted file mode 100644 index 5b8e0a83eb..0000000000 --- a/scene/resources/default_theme/source/spinbox_updown.svg +++ /dev/null @@ -1,86 +0,0 @@ -<?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_collapse.png" - inkscape:export-xdpi="45" - inkscape:export-ydpi="45" - sodipodi:docname="spinbox_updown.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.254834" - inkscape:cx="5.7914867" - inkscape:cy="9.8174296" - 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,-1036.3622)"> - <path - style="fill:#e0e0e0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - d="m 4,1042.3622 8,0 -4,-5 z" - id="path4158" - inkscape:connector-curvature="0" - sodipodi:nodetypes="cccc" /> - <path - inkscape:connector-curvature="0" - id="path4160" - d="m 4,1046.3622 8,0 -4,5 z" - style="fill:#e0e0e0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - sodipodi:nodetypes="cccc" /> - </g> -</svg> diff --git a/scene/resources/default_theme/source/submenu.svg b/scene/resources/default_theme/source/submenu.svg deleted file mode 100644 index ef7f696571..0000000000 --- a/scene/resources/default_theme/source/submenu.svg +++ /dev/null @@ -1,80 +0,0 @@ -<?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="8" - height="8" - viewBox="0 0 8 8" - 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="submenu.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.000003" - inkscape:cx="1.4039962" - inkscape:cy="5.6866955" - 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,-1044.3622)"> - <path - style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:6;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="m 1,1052.3622 3,0 3,-4 -3,-4 -3,0 z" - id="rect4174" - inkscape:connector-curvature="0" - sodipodi:nodetypes="cccccc" /> - </g> -</svg> diff --git a/scene/resources/default_theme/source/tab_close.svg b/scene/resources/default_theme/source/tab_close.svg deleted file mode 100644 index 65b71ae860..0000000000 --- a/scene/resources/default_theme/source/tab_close.svg +++ /dev/null @@ -1,93 +0,0 @@ -<?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_add_track.png" - inkscape:export-xdpi="45" - inkscape:export-ydpi="45" - sodipodi:docname="icon_close.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.627418" - inkscape:cx="3.3969834" - inkscape:cy="11.678255" - 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: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></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <g - inkscape:label="Layer 1" - inkscape:groupmode="layer" - id="layer1" - transform="translate(0,-1036.3622)"> - <g - id="layer1-4" - inkscape:label="Layer 1" - transform="matrix(0.70710678,-0.70710678,0.70710678,0.70710678,-736.13242,311.54347)"> - <rect - y="1043.3622" - x="1" - height="1.9999478" - width="14" - id="rect4137" - style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> - <rect - transform="matrix(0,1,-1,0,0,0)" - style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="rect4158" - width="13.999966" - height="2.0000017" - x="1037.3622" - y="-9" /> - </g> - </g> -</svg> diff --git a/scene/resources/default_theme/source/tab_menu.svg b/scene/resources/default_theme/source/tab_menu.svg deleted file mode 100644 index 84f7c8095a..0000000000 --- a/scene/resources/default_theme/source/tab_menu.svg +++ /dev/null @@ -1,80 +0,0 @@ -<?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_collapse.png" - inkscape:export-xdpi="45" - inkscape:export-ydpi="45" - sodipodi:docname="tab_menu.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="6.2944765" - inkscape:cy="7.7343939" - 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,-1036.3622)"> - <path - style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:6;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="m 4,1044.3622 0,3 4,3 4,-3 0,-3 z" - id="rect4174" - inkscape:connector-curvature="0" - sodipodi:nodetypes="cccccc" /> - </g> -</svg> diff --git a/scene/resources/default_theme/source/updown.svg b/scene/resources/default_theme/source/updown.svg deleted file mode 100644 index adc72b405d..0000000000 --- a/scene/resources/default_theme/source/updown.svg +++ /dev/null @@ -1,86 +0,0 @@ -<?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="8" - height="16" - viewBox="0 0 8 16" - 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="updown.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.4436559" - inkscape:cy="10.099799" - 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,-1036.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" - d="m 1,1042.3565 3,-2.9943 3,2.9943" - id="path4155" - inkscape:connector-curvature="0" - sodipodi:nodetypes="ccc" /> - <path - inkscape:connector-curvature="0" - id="path4159" - d="m 1,1046.3622 3,3 3,-3" - 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" - sodipodi:nodetypes="ccc" /> - </g> -</svg> diff --git a/scene/resources/default_theme/theme_data.h b/scene/resources/default_theme/theme_data.h index 6643b4ccc1..38e5f58b0d 100644 --- a/scene/resources/default_theme/theme_data.h +++ b/scene/resources/default_theme/theme_data.h @@ -218,6 +218,10 @@ static const unsigned char logo_png[] = { 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x80, 0x0, 0x0, 0x0, 0x80, 0x8, 0x6, 0x0, 0x0, 0x0, 0xc3, 0x3e, 0x61, 0xcb, 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, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0x9, 0x70, 0x48, 0x59, 0x73, 0x0, 0x0, 0x2e, 0x23, 0x0, 0x0, 0x2e, 0x23, 0x1, 0x78, 0xa5, 0x3f, 0x76, 0x0, 0x0, 0x0, 0x7, 0x74, 0x49, 0x4d, 0x45, 0x7, 0xdc, 0x9, 0x7, 0x13, 0x2, 0x0, 0x15, 0xb9, 0x53, 0x97, 0x0, 0x0, 0x21, 0x58, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xed, 0x7d, 0x79, 0x9c, 0x1c, 0x55, 0xb5, 0xff, 0xf7, 0x7b, 0xab, 0x7b, 0x66, 0x48, 0x8, 0x61, 0xd1, 0x90, 0xb0, 0x88, 0x91, 0x27, 0x24, 0x24, 0x21, 0x3b, 0x8, 0x4, 0x42, 0x58, 0x54, 0xe0, 0x91, 0x80, 0x24, 0x1, 0x2, 0x9, 0x42, 0x80, 0x4, 0x11, 0x90, 0x9f, 0xf2, 0xd3, 0xa7, 0xcf, 0xe7, 0xf3, 0x3d, 0x1f, 0x1f, 0x7f, 0xea, 0xd3, 0x48, 0x4c, 0x8, 0x61, 0xd, 0x49, 0x64, 0x89, 0x82, 0x40, 0x58, 0x4, 0x64, 0xb, 0x44, 0x25, 0x9b, 0xd9, 0x51, 0x14, 0x41, 0x3, 0xc8, 0x16, 0x20, 0xfb, 0x4c, 0x77, 0xdd, 0xef, 0xef, 0x8f, 0xaa, 0xea, 0xae, 0xee, 0xa9, 0xea, 0x9e, 0xee, 0xae, 0x99, 0xe9, 0xe0, 0x9c, 0xf9, 0xd4, 0x74, 0xd5, 0xad, 0x5b, 0x77, 0x39, 0xe7, 0xdc, 0x7b, 0xcf, 0x39, 0xf7, 0xdc, 0x7b, 0x81, 0x2e, 0xe8, 0x82, 0x2e, 0xe8, 0x82, 0x2e, 0xe8, 0x82, 0x2e, 0xe8, 0x82, 0x2e, 0xe8, 0x82, 0x2e, 0xf8, 0xe7, 0x2, 0x76, 0x76, 0x1, 0xea, 0x1, 0xe, 0xff, 0xc2, 0xcc, 0xbd, 0x60, 0x5b, 0x6e, 0xb6, 0xd6, 0xf6, 0x2, 0xb8, 0x8d, 0xc6, 0x6c, 0x36, 0x34, 0x6f, 0x81, 0x7c, 0x43, 0x30, 0x7f, 0x27, 0xcd, 0xdf, 0x8c, 0xe3, 0x6c, 0xda, 0x70, 0xef, 0xf4, 0x37, 0x3b, 0xbb, 0xac, 0x49, 0x43, 0xaa, 0xb3, 0xb, 0x50, 0xf, 0x20, 0x9b, 0xfd, 0x96, 0xcd, 0xb6, 0x4c, 0x40, 0xd0, 0x20, 0x2c, 0xac, 0x4b, 0xb3, 0x3, 0xc0, 0x36, 0x80, 0x5b, 0x41, 0x6c, 0x75, 0x5b, 0xb8, 0xed, 0xb0, 0x71, 0xff, 0xbb, 0x83, 0xc6, 0x6c, 0x26, 0x9d, 0x65, 0x74, 0xd2, 0x4f, 0x6e, 0x5c, 0x74, 0xc5, 0xba, 0xce, 0x2e, 0x7b, 0xad, 0xf0, 0x4f, 0xdf, 0x3, 0xf4, 0x9f, 0x38, 0xb7, 0x5b, 0x76, 0xd7, 0x7, 0x2f, 0xcb, 0xda, 0x3, 0xc8, 0x42, 0x94, 0x48, 0x6a, 0x15, 0x9f, 0x24, 0x0, 0xbe, 0x43, 0xe3, 0xfc, 0xc1, 0x49, 0x37, 0x4d, 0xdd, 0xf8, 0x8b, 0x2b, 0xff, 0xde, 0xd9, 0x75, 0xa8, 0x5, 0x76, 0x2b, 0x6, 0xe8, 0x37, 0x7e, 0xf6, 0x18, 0xeb, 0xb6, 0x9c, 0x6, 0x69, 0xf, 0x1a, 0xf3, 0xc1, 0x1f, 0xef, 0xbb, 0xe6, 0xdb, 0xb5, 0xa4, 0x37, 0xf2, 0x9a, 0xa5, 0xdc, 0xb2, 0x69, 0xe5, 0x69, 0xca, 0xec, 0xf8, 0xa5, 0xa4, 0x26, 0x48, 0xf2, 0x29, 0x8c, 0x82, 0x7b, 0x40, 0x3e, 0xae, 0xfc, 0x5f, 0x41, 0x82, 0x4d, 0x37, 0xf5, 0x18, 0xb7, 0xd7, 0xc1, 0xc3, 0x1f, 0xfe, 0xfd, 0x4f, 0x3e, 0xa3, 0x2a, 0x8b, 0xd0, 0xe9, 0x50, 0xf7, 0xc, 0x70, 0xf8, 0x39, 0xb3, 0x3e, 0x9, 0xb9, 0xa7, 0x48, 0xf6, 0x70, 0xb9, 0xd9, 0xd1, 0x90, 0x3b, 0xd2, 0x2b, 0x39, 0x9b, 0x4d, 0xaa, 0x69, 0xfa, 0x1f, 0xef, 0xbb, 0xfa, 0x8e, 0x5a, 0xd2, 0x3f, 0x6c, 0xdc, 0x8f, 0x9f, 0x91, 0xcd, 0x8c, 0x2, 0xe9, 0xe4, 0x43, 0x3, 0x7a, 0xc7, 0x80, 0x4, 0x80, 0xbb, 0x9c, 0x74, 0xd3, 0x77, 0xdd, 0xcc, 0xce, 0x1f, 0xbc, 0xfc, 0xd0, 0xd7, 0x6d, 0x67, 0xe3, 0xa9, 0x5a, 0xa8, 0x5b, 0x19, 0xa0, 0xdf, 0xf8, 0xd9, 0x47, 0x42, 0xee, 0x51, 0x72, 0x5b, 0x3e, 0x6b, 0xdd, 0xcc, 0x69, 0x0, 0xf6, 0xf4, 0x8, 0xe3, 0x75, 0xc3, 0x92, 0x1a, 0x6d, 0x66, 0xd7, 0x8f, 0xfa, 0x8d, 0x9f, 0xf5, 0xe7, 0x97, 0x7e, 0x71, 0xe5, 0xf3, 0x55, 0xe5, 0x31, 0xe1, 0xc6, 0x83, 0xdc, 0x5d, 0x5b, 0x46, 0x3, 0x7e, 0xb3, 0xce, 0x51, 0xbd, 0x74, 0xbb, 0xf0, 0x9b, 0xbb, 0x23, 0xd9, 0x23, 0x59, 0xf7, 0x4d, 0xa8, 0x34, 0xd4, 0x1d, 0x3, 0xf4, 0x3b, 0x67, 0xf6, 0x20, 0xc0, 0x1d, 0x65, 0xb3, 0xcd, 0x67, 0xc9, 0xcd, 0x9c, 0xa, 0x9f, 0x1a, 0xfe, 0xd8, 0x5b, 0xd0, 0x15, 0xb, 0xda, 0xcf, 0x66, 0x9a, 0x7f, 0xd8, 0x7f, 0xc2, 0x9c, 0xb1, 0x1b, 0x17, 0x4d, 0x7f, 0xa7, 0x92, 0x7c, 0xe, 0xff, 0xc2, 0xd, 0x69, 0x58, 0x77, 0x1c, 0x40, 0x17, 0x84, 0x3, 0x54, 0x48, 0x4a, 0xd2, 0x91, 0x75, 0x7, 0x38, 0x4d, 0x7b, 0xef, 0xd6, 0x2c, 0x50, 0x37, 0xc, 0xd0, 0x7f, 0xc2, 0x8d, 0x7, 0x3, 0x1a, 0x65, 0x33, 0xcd, 0x97, 0x58, 0x9b, 0x3d, 0x5, 0x0, 0x40, 0xe6, 0x5a, 0xa6, 0x82, 0x47, 0xbf, 0x13, 0x0, 0x21, 0x82, 0x90, 0xdc, 0xcf, 0xc8, 0x66, 0xbe, 0xd6, 0x6f, 0xfc, 0xac, 0xef, 0xbc, 0xf4, 0x8b, 0x2b, 0x77, 0xb5, 0x35, 0x3f, 0x93, 0x6a, 0xb4, 0x36, 0xb3, 0xe3, 0x7c, 0x1a, 0xe3, 0x8f, 0xe9, 0xe1, 0x21, 0x3f, 0x4, 0xe1, 0xd1, 0x40, 0x80, 0x24, 0xd1, 0x90, 0x10, 0x8c, 0x64, 0xf, 0x31, 0xa9, 0xa6, 0x2e, 0x6, 0x48, 0x2, 0x64, 0xb3, 0xdf, 0xb0, 0xd9, 0xe6, 0x2f, 0x1, 0x41, 0x6b, 0xf7, 0x9, 0x2f, 0x91, 0x1e, 0x23, 0x78, 0x40, 0x9f, 0x8, 0x34, 0x41, 0x90, 0x75, 0x33, 0xbb, 0xfe, 0xaf, 0xd3, 0xd0, 0x7d, 0xd9, 0x61, 0xe3, 0x7e, 0x78, 0xdf, 0x9f, 0x1e, 0xb8, 0x2e, 0x72, 0x3c, 0x1e, 0x30, 0xe9, 0xce, 0x94, 0xdb, 0xb2, 0x7d, 0x1f, 0xd2, 0xf4, 0x0, 0x6c, 0x1a, 0xb2, 0xbd, 0x65, 0xdd, 0xcf, 0x0, 0x30, 0x0, 0x41, 0x42, 0x91, 0xbd, 0x0, 0xb, 0xef, 0x49, 0x52, 0x9e, 0x7a, 0x40, 0x48, 0x7b, 0xee, 0x6, 0x62, 0x54, 0x49, 0xa8, 0x1b, 0x6, 0xb0, 0xd9, 0xcc, 0x39, 0x7e, 0x6b, 0xb, 0xda, 0x5c, 0xa8, 0xeb, 0x2f, 0x4, 0x7a, 0x81, 0x41, 0x3c, 0x3, 0x10, 0x36, 0xbb, 0xeb, 0xc7, 0x4e, 0x43, 0x8f, 0xd7, 0xfa, 0x4f, 0xb8, 0x71, 0x3, 0x68, 0xf6, 0x7, 0xb0, 0x37, 0x81, 0x34, 0x8, 0xca, 0xda, 0x46, 0xb7, 0x65, 0xeb, 0x27, 0x20, 0x3b, 0xd8, 0x75, 0xdd, 0xbe, 0x4, 0xf6, 0x83, 0x74, 0x30, 0x80, 0x40, 0xf0, 0x53, 0x25, 0x43, 0x0, 0xfd, 0xff, 0x22, 0xad, 0xcd, 0xee, 0xac, 0x59, 0x3, 0xe8, 0x7f, 0xee, 0x2d, 0xdd, 0x36, 0xde, 0x73, 0xe9, 0x8e, 0xce, 0xc0, 0x7b, 0xdd, 0x30, 0x0, 0x8d, 0xf3, 0xb2, 0xac, 0x3e, 0xe, 0xc0, 0x20, 0x4e, 0xc, 0xf, 0xc8, 0x1e, 0x3c, 0xf9, 0x8a, 0x3a, 0x49, 0x40, 0xf6, 0x60, 0xeb, 0xb6, 0xfc, 0x1f, 0xd2, 0xac, 0xb3, 0xb6, 0xf9, 0x24, 0x78, 0xad, 0xbb, 0x9b, 0x17, 0xb5, 0x90, 0x46, 0xca, 0x25, 0x46, 0x85, 0x52, 0x8e, 0xcb, 0xa7, 0x30, 0xdc, 0x4a, 0xa0, 0x21, 0xe8, 0x7d, 0xed, 0x36, 0x6f, 0xad, 0x89, 0x1, 0x8e, 0x38, 0x77, 0x6e, 0x5f, 0xeb, 0xb6, 0x9c, 0xde, 0x7f, 0xc2, 0x9c, 0xe7, 0x36, 0x2e, 0x9a, 0xbe, 0xb6, 0xc3, 0xf1, 0xde, 0xd1, 0x19, 0xc6, 0x41, 0xff, 0x9, 0xb3, 0xbf, 0x67, 0x33, 0xcd, 0x5f, 0x96, 0x6c, 0xcf, 0x70, 0xab, 0x8f, 0xa3, 0x43, 0x41, 0xb8, 0x4, 0x90, 0x16, 0x80, 0x41, 0xd8, 0x78, 0x43, 0x6, 0xef, 0x8a, 0xf4, 0x7a, 0x9, 0xf2, 0xfa, 0x7d, 0xff, 0xb1, 0x40, 0x0, 0x60, 0x51, 0xde, 0xc5, 0xf9, 0x11, 0x39, 0x23, 0x51, 0xd6, 0x69, 0xdc, 0xf3, 0x18, 0xc9, 0xbe, 0x61, 0x9c, 0x86, 0xad, 0x1b, 0xee, 0x9e, 0xba, 0xb5, 0xad, 0xf5, 0x3d, 0xe2, 0xbc, 0x5b, 0xbb, 0xc1, 0xba, 0x9f, 0xc8, 0x66, 0xb6, 0x2f, 0x86, 0x74, 0x28, 0x80, 0xb7, 0x4d, 0xba, 0xdb, 0xb9, 0xc6, 0x38, 0x4b, 0x37, 0xdc, 0x73, 0x59, 0x4b, 0x47, 0xe1, 0xbd, 0x6e, 0x18, 0xa0, 0xdf, 0x84, 0x39, 0xa7, 0x2b, 0xb3, 0x73, 0x2e, 0xa0, 0x3, 0x81, 0x60, 0x9c, 0x6f, 0x73, 0xb7, 0x1c, 0xc8, 0xb, 0x20, 0xf3, 0xad, 0x3a, 0xf4, 0x9c, 0x78, 0x3d, 0x95, 0x37, 0x13, 0x92, 0xc6, 0xf9, 0xb, 0x9d, 0xf4, 0x22, 0x63, 0x52, 0xb7, 0x3, 0x78, 0x3d, 0xdb, 0xbc, 0x6d, 0xe7, 0x9f, 0x1e, 0xf8, 0x6a, 0xac, 0x6d, 0xa0, 0xff, 0x84, 0x39, 0xfb, 0x4b, 0xee, 0x14, 0x9b, 0x69, 0xfe, 0x41, 0x90, 0x9a, 0x2f, 0x5b, 0xc0, 0xa4, 0x9b, 0xfe, 0xcd, 0x18, 0xe7, 0x96, 0xd, 0xf7, 0x4e, 0x7f, 0xb7, 0x23, 0xf0, 0x5e, 0x37, 0xc, 0xd0, 0xff, 0xdc, 0x9b, 0x3f, 0x65, 0x5b, 0xb6, 0x3f, 0x21, 0xd9, 0x4f, 0x41, 0x8, 0x24, 0xed, 0xb6, 0x95, 0x56, 0x65, 0xde, 0x25, 0x55, 0x53, 0x3f, 0xad, 0x9c, 0x26, 0xe0, 0x3f, 0x14, 0xf4, 0x1e, 0x26, 0x75, 0x3f, 0x9d, 0x86, 0x9f, 0xd2, 0x49, 0xaf, 0xec, 0xd1, 0xfb, 0x88, 0x6d, 0xc5, 0x56, 0xc2, 0xfe, 0x13, 0x6f, 0x3a, 0xcc, 0x66, 0x9b, 0xe7, 0x40, 0xee, 0x18, 0x0, 0x5e, 0xaf, 0x15, 0x24, 0x3, 0x8, 0x24, 0x8d, 0xd3, 0x70, 0x13, 0x4c, 0xea, 0xfb, 0x1b, 0xef, 0x9d, 0xf6, 0x6a, 0x7b, 0xe3, 0xdd, 0xb4, 0x77, 0x6, 0x6d, 0x85, 0x8d, 0xf7, 0x5c, 0xf6, 0xa, 0x69, 0x9a, 0x3d, 0x51, 0x3b, 0xc0, 0x26, 0xfd, 0xb, 0xa5, 0x9, 0x58, 0xaa, 0xa3, 0x28, 0xf7, 0x6d, 0x25, 0xe0, 0xa7, 0x95, 0x27, 0x3e, 0x94, 0xcf, 0xc0, 0xd3, 0x26, 0xad, 0x9b, 0x3d, 0xdb, 0x6d, 0xd9, 0xf1, 0x8c, 0x6d, 0xd9, 0xfe, 0xdc, 0x96, 0xd7, 0x57, 0x9f, 0x11, 0xfe, 0xfc, 0x88, 0x73, 0xe7, 0x9e, 0xec, 0xb6, 0xec, 0xd8, 0x28, 0xeb, 0x8e, 0xf1, 0xbe, 0xf5, 0xf1, 0x2f, 0x88, 0xa0, 0xcf, 0x48, 0xb4, 0xd6, 0x6d, 0x99, 0x66, 0xb3, 0x2d, 0xf3, 0xfb, 0x4f, 0x9c, 0x7b, 0x5c, 0x7b, 0xe3, 0xbd, 0x6e, 0x7a, 0x0, 0x0, 0xe8, 0x77, 0xce, 0xcf, 0x9e, 0xb3, 0x6e, 0xe6, 0x78, 0x20, 0x5a, 0xfa, 0xaf, 0x3f, 0x8, 0x86, 0x81, 0x7c, 0x61, 0xfd, 0x91, 0x41, 0x64, 0xa0, 0x5a, 0x38, 0x2b, 0x4c, 0xba, 0xf1, 0x3b, 0x4, 0x7a, 0x66, 0x5b, 0x76, 0x2c, 0xf4, 0xf8, 0xbb, 0xd5, 0xb0, 0x54, 0xd0, 0x4f, 0x5, 0x6a, 0x26, 0x8d, 0x79, 0x8d, 0x4e, 0xd3, 0xbf, 0xbd, 0xb4, 0x68, 0xda, 0x5d, 0xed, 0x55, 0x3, 0xa7, 0xf6, 0x24, 0x92, 0x83, 0x8f, 0xf, 0x1c, 0x9b, 0x2, 0x34, 0x9c, 0x40, 0x8f, 0x78, 0xcb, 0x4c, 0x3d, 0x41, 0xd0, 0x45, 0xf9, 0xe0, 0xcb, 0x2d, 0xbe, 0xd5, 0x92, 0x14, 0x24, 0xa2, 0xb7, 0x6c, 0x76, 0x82, 0xac, 0x7b, 0x16, 0x29, 0x27, 0x50, 0x21, 0x1, 0x85, 0xba, 0xba, 0x5c, 0x37, 0xe2, 0xdb, 0xbb, 0x72, 0x36, 0xb0, 0xbd, 0x61, 0xdd, 0x13, 0xf7, 0x3f, 0xf2, 0xec, 0x96, 0x77, 0xd6, 0x2f, 0xfe, 0x5d, 0x7b, 0xd4, 0xa0, 0x6e, 0x86, 0x0, 0xaf, 0x34, 0xce, 0x12, 0x0, 0xef, 0x7b, 0xf7, 0x86, 0xf9, 0x21, 0x60, 0x37, 0xb9, 0x8c, 0xf1, 0x94, 0xc3, 0x80, 0x71, 0x69, 0x40, 0xd2, 0x90, 0x6c, 0x0, 0xd4, 0x0, 0x18, 0x79, 0x17, 0x8, 0x18, 0x45, 0xa4, 0xe1, 0x31, 0x81, 0x31, 0xfe, 0x7b, 0x3, 0x40, 0xfb, 0x65, 0x33, 0xbb, 0xbe, 0xde, 0x6f, 0xc2, 0x9c, 0xaf, 0xb4, 0x7, 0xca, 0xeb, 0xa6, 0x7, 0xe8, 0x3f, 0x71, 0xee, 0x4, 0x4f, 0x38, 0x52, 0x3f, 0xf8, 0xb6, 0x9e, 0xd0, 0xe8, 0xba, 0xfb, 0x5c, 0x44, 0xae, 0xfd, 0xe7, 0xee, 0x1, 0xbf, 0x67, 0x80, 0x7f, 0x11, 0xa1, 0x77, 0x45, 0xdf, 0x93, 0xa1, 0x74, 0x82, 0x1e, 0x61, 0x4f, 0xca, 0xe, 0xea, 0x35, 0xe8, 0x2c, 0xe7, 0x9d, 0xf5, 0x8b, 0x97, 0x26, 0x89, 0xf7, 0xba, 0x30, 0x4, 0xf5, 0x9f, 0x78, 0xd3, 0x2c, 0x9b, 0xdd, 0x75, 0x36, 0xa0, 0x3e, 0xde, 0x18, 0x69, 0x24, 0x28, 0x6c, 0x0, 0xde, 0x1d, 0x81, 0x31, 0xf7, 0x6d, 0x6, 0x6f, 0x14, 0xf4, 0x70, 0x21, 0xb0, 0x1b, 0xc8, 0xee, 0x49, 0x17, 0xb2, 0xd3, 0x19, 0xe0, 0xf0, 0x73, 0x66, 0x3d, 0xad, 0x6c, 0xcb, 0x48, 0x0, 0xdd, 0xbd, 0x39, 0x1e, 0xdf, 0x74, 0x53, 0xef, 0xc3, 0x7f, 0x87, 0x40, 0xce, 0xe4, 0xd, 0x1a, 0x67, 0xb5, 0x71, 0xd2, 0xd7, 0x27, 0x9d, 0x43, 0x62, 0xc, 0x70, 0xc4, 0xb9, 0x73, 0x7f, 0x24, 0x61, 0x1b, 0x8d, 0xf3, 0xd3, 0xd, 0x77, 0x4f, 0x7d, 0xbf, 0x5c, 0xfc, 0x81, 0x93, 0xee, 0xd8, 0x23, 0xdb, 0xb2, 0xe3, 0x31, 0xd9, 0xec, 0x9, 0x5e, 0x3f, 0x97, 0x13, 0x80, 0xbb, 0x88, 0xef, 0x83, 0x6f, 0xc0, 0x24, 0xe9, 0xbc, 0x63, 0x9c, 0xf4, 0xe2, 0x75, 0x3f, 0xbf, 0x38, 0x71, 0xb, 0x61, 0x22, 0x98, 0x3e, 0xe2, 0xbc, 0x5b, 0x47, 0xd8, 0xcc, 0xce, 0x7, 0x25, 0x75, 0xa3, 0x71, 0xd6, 0x80, 0xe6, 0x75, 0xd2, 0xfc, 0x99, 0xc6, 0x99, 0xb7, 0xe1, 0xee, 0xa9, 0x7f, 0x2e, 0x8e, 0xdf, 0xff, 0xdc, 0x5b, 0xe, 0x95, 0xdb, 0x72, 0x87, 0x6c, 0x76, 0x14, 0xe9, 0xab, 0xc2, 0x5e, 0x4d, 0xe1, 0x49, 0xc7, 0x51, 0xc5, 0x8c, 0x33, 0xb9, 0x87, 0xe7, 0x85, 0x54, 0xe2, 0x9b, 0x62, 0x3, 0x6f, 0xb9, 0xb4, 0x63, 0xb5, 0xb4, 0x88, 0xf0, 0xa8, 0xef, 0x2a, 0x29, 0x6f, 0xeb, 0x6f, 0x72, 0xbe, 0x67, 0x0, 0x41, 0xe7, 0x91, 0x74, 0xd3, 0x9e, 0xe3, 0xd7, 0x2e, 0x98, 0xb2, 0xb3, 0x1a, 0xfa, 0x94, 0x82, 0x9a, 0x19, 0xe0, 0x88, 0xf3, 0xe7, 0xf5, 0x50, 0x76, 0xc7, 0xc3, 0xb2, 0xee, 0x71, 0x80, 0x42, 0x5a, 0x85, 0xd9, 0x42, 0x63, 0xd6, 0x80, 0xce, 0x4a, 0x1a, 0xe7, 0x77, 0x26, 0x95, 0x7e, 0x74, 0xdd, 0x82, 0x29, 0x1f, 0x1c, 0x71, 0xfe, 0x6d, 0x43, 0x6c, 0x66, 0xd7, 0x4d, 0x90, 0x7b, 0x54, 0xa8, 0x18, 0xc2, 0x6e, 0x3e, 0xe0, 0x27, 0xa, 0xca, 0xd9, 0x1c, 0x9, 0x3a, 0xaf, 0x9a, 0x54, 0xc3, 0xbf, 0x6f, 0xb8, 0xfb, 0xd2, 0x85, 0xed, 0x91, 0x55, 0xcd, 0x43, 0x80, 0xdc, 0xe6, 0x1f, 0xcb, 0xba, 0xbe, 0xf1, 0xc6, 0x84, 0xed, 0xf0, 0x7b, 0xc9, 0xba, 0xa3, 0x0, 0x77, 0x94, 0xac, 0x73, 0x86, 0xac, 0x3b, 0xae, 0xff, 0xc4, 0xb9, 0x7f, 0x57, 0xb6, 0x79, 0x38, 0x64, 0x8f, 0xf2, 0x6c, 0xf4, 0xb9, 0x7e, 0xdf, 0x17, 0xf8, 0xca, 0xb5, 0xe0, 0xb6, 0x98, 0xf5, 0x2b, 0x69, 0x95, 0xc5, 0x3e, 0x9f, 0xe1, 0xfb, 0x72, 0x71, 0xdb, 0x52, 0xd6, 0xf0, 0x77, 0x71, 0xe5, 0x2c, 0xec, 0x11, 0x3c, 0xe9, 0x97, 0xb9, 0xf9, 0x26, 0x1a, 0xe7, 0xa9, 0xc6, 0x6e, 0x3d, 0xef, 0xa9, 0x95, 0x4e, 0x71, 0x50, 0x53, 0xab, 0x1b, 0x70, 0xfe, 0x6d, 0x5f, 0xb0, 0x99, 0x9d, 0xbf, 0x90, 0x37, 0x8b, 0x9f, 0xa3, 0x62, 0x48, 0x82, 0x97, 0x82, 0x3c, 0xa, 0x3c, 0xee, 0x68, 0x25, 0x85, 0xad, 0xfd, 0x5d, 0xad, 0x3f, 0x4, 0x9e, 0x25, 0x90, 0x34, 0x4e, 0xea, 0x45, 0x3a, 0xd, 0xd7, 0xad, 0xbf, 0xeb, 0xe2, 0xe7, 0xda, 0x2b, 0xaf, 0xaa, 0x7b, 0x80, 0x81, 0x93, 0xee, 0x38, 0xd8, 0xcd, 0xec, 0xfc, 0xbe, 0x2, 0xa3, 0x95, 0xef, 0x58, 0xc5, 0x90, 0xff, 0x4e, 0xce, 0x98, 0x27, 0x8, 0x26, 0x4f, 0x64, 0x8f, 0xf8, 0x7e, 0xb7, 0x5f, 0xcd, 0x5c, 0x5d, 0x12, 0xf3, 0x7b, 0xd5, 0xb0, 0x5e, 0xa9, 0x6f, 0x8a, 0x1c, 0xc7, 0x2b, 0xae, 0x47, 0xe1, 0x77, 0xde, 0x9d, 0x71, 0xee, 0x69, 0x4f, 0xe2, 0x3, 0x55, 0x5a, 0x2, 0x7, 0x4c, 0x9a, 0xd7, 0x60, 0x6d, 0xf6, 0x5a, 0x59, 0xfb, 0x69, 0x7f, 0xf2, 0xc6, 0x9b, 0x5d, 0x2f, 0x12, 0xdf, 0x73, 0xcf, 0x45, 0xe3, 0xbb, 0x37, 0xe7, 0x91, 0x73, 0xac, 0xa9, 0x1c, 0x2a, 0xfc, 0x46, 0x2a, 0xe8, 0x9f, 0x15, 0xfc, 0x13, 0x50, 0xe0, 0x3e, 0x20, 0x95, 0x49, 0xa8, 0xd4, 0xc4, 0x12, 0x8b, 0x7e, 0x2b, 0xad, 0x7, 0x8b, 0x5f, 0x30, 0x5e, 0x8e, 0x4c, 0x10, 0x2a, 0x66, 0x80, 0x81, 0x17, 0xce, 0x77, 0x20, 0x3b, 0xda, 0x66, 0x5b, 0xae, 0xcd, 0x9b, 0xc1, 0xc3, 0x53, 0x76, 0x9d, 0x7b, 0x29, 0x34, 0x43, 0xe7, 0xdf, 0xfb, 0x73, 0xed, 0x1e, 0x81, 0x25, 0xd0, 0x37, 0x34, 0xe4, 0xae, 0xe0, 0x1d, 0xa3, 0x6d, 0x73, 0xf2, 0xd3, 0xca, 0xdd, 0xb7, 0xff, 0xe5, 0x33, 0xa9, 0xdc, 0x2f, 0xc, 0x98, 0x74, 0xc7, 0xf1, 0xed, 0xc9, 0x0, 0x15, 0xb7, 0xbf, 0x41, 0x17, 0xce, 0xef, 0x93, 0x6d, 0xd9, 0xf9, 0x0, 0xac, 0x3b, 0xd2, 0xeb, 0xc0, 0xe3, 0x54, 0xb7, 0x4a, 0x8a, 0x50, 0x4a, 0x65, 0x2, 0x4a, 0xb, 0x5c, 0x39, 0xc8, 0x77, 0xa2, 0xa, 0xd4, 0xa7, 0x82, 0xb4, 0x3e, 0x0, 0xf9, 0x3e, 0x80, 0x6d, 0x0, 0x76, 0x92, 0xdc, 0x5, 0xd2, 0x42, 0x8, 0xe4, 0x91, 0x14, 0x80, 0x26, 0x9, 0xdd, 0x20, 0xbb, 0xf, 0xa0, 0x5e, 0x90, 0x6f, 0x2a, 0x67, 0x4c, 0x1e, 0x35, 0x6b, 0x2e, 0x11, 0xf5, 0x93, 0xe7, 0x13, 0x0, 0xc2, 0x42, 0x32, 0x34, 0xce, 0x93, 0x26, 0xd5, 0x78, 0xd9, 0xba, 0x85, 0x17, 0xbd, 0x5a, 0x5b, 0x5e, 0xa5, 0x4b, 0xd0, 0x26, 0x18, 0x7c, 0xc5, 0x33, 0xcc, 0x7e, 0xf8, 0xea, 0x19, 0x36, 0xb3, 0xf3, 0x21, 0x0, 0x16, 0x81, 0x12, 0x1f, 0xae, 0x8a, 0xe2, 0x13, 0x2d, 0x18, 0xf2, 0x22, 0x4, 0xe7, 0x3c, 0xef, 0x7, 0xe6, 0xaf, 0xfc, 0x87, 0xad, 0xc8, 0xee, 0x8b, 0x1d, 0xa, 0xd6, 0x8a, 0x84, 0xe6, 0x66, 0xfd, 0x98, 0x2d, 0x34, 0xce, 0x3f, 0x24, 0xbc, 0x4d, 0x9a, 0x4d, 0x30, 0x66, 0x1d, 0xc0, 0x97, 0x48, 0xfe, 0x15, 0xe0, 0x3b, 0x20, 0xdf, 0x23, 0xd4, 0xec, 0x5a, 0x65, 0xd2, 0xe9, 0x86, 0x46, 0xeb, 0x66, 0xba, 0x1, 0xd8, 0xd7, 0x5a, 0xdb, 0x7, 0xd2, 0x0, 0xc9, 0x8e, 0x24, 0x74, 0xb0, 0xa4, 0x8f, 0x1, 0x3a, 0x0, 0xb2, 0xfb, 0x86, 0xab, 0xc2, 0x90, 0xcf, 0x7a, 0x1, 0x33, 0xa8, 0x75, 0x7d, 0xa, 0xe4, 0xfd, 0x8, 0x33, 0x40, 0x41, 0x13, 0xa, 0x3b, 0xc6, 0x7a, 0x35, 0xb2, 0x74, 0x1a, 0xe6, 0x34, 0xef, 0xdc, 0x7e, 0xd5, 0x5f, 0x1e, 0xb8, 0x3a, 0xf1, 0x15, 0x48, 0x15, 0x9, 0x81, 0xee, 0x96, 0xbf, 0xd, 0x92, 0xdb, 0xf2, 0x7d, 0x80, 0xa0, 0x6f, 0xb0, 0xf7, 0xb0, 0x9f, 0x9b, 0xb7, 0x40, 0xde, 0x23, 0xab, 0x88, 0x82, 0xb9, 0xa7, 0xd0, 0xff, 0x1c, 0xc5, 0x43, 0x2c, 0xc3, 0xa8, 0xc6, 0xdb, 0x2a, 0x2c, 0xb0, 0x93, 0x4, 0x62, 0x86, 0xfc, 0x29, 0x78, 0x80, 0x7c, 0xf, 0x30, 0x9b, 0x4, 0xb3, 0x96, 0x4e, 0x6a, 0x71, 0x3a, 0xd5, 0xf0, 0xe0, 0xea, 0x3b, 0x27, 0x95, 0x33, 0xa0, 0xb4, 0x0, 0xd8, 0xa, 0xe0, 0x2d, 0x0, 0x1b, 0x1, 0x3c, 0x15, 0xbc, 0x18, 0x30, 0xe9, 0xce, 0x7e, 0xb2, 0x99, 0x89, 0x80, 0x8e, 0x83, 0xec, 0xa1, 0x92, 0x3d, 0x8, 0x42, 0x63, 0xa0, 0xc1, 0x7a, 0x79, 0x2a, 0x50, 0x79, 0x42, 0x66, 0xcc, 0xbc, 0xab, 0x40, 0x58, 0xd, 0xca, 0xd7, 0x3b, 0xa8, 0x17, 0xfc, 0x70, 0xbf, 0x4a, 0xfe, 0xa, 0x88, 0xc0, 0x30, 0x26, 0xc1, 0x48, 0xee, 0x99, 0x4d, 0xdd, 0xf7, 0x5a, 0xe, 0xe0, 0xf6, 0xa4, 0x19, 0xa0, 0xa2, 0x1e, 0x60, 0xe0, 0x5, 0x77, 0x9e, 0xea, 0x66, 0x76, 0x3e, 0x26, 0xc9, 0x84, 0xb1, 0xdf, 0x91, 0x10, 0xb2, 0x15, 0xcb, 0xd7, 0x32, 0x7c, 0xe, 0xe0, 0xfb, 0x24, 0xdf, 0xa2, 0x49, 0xdd, 0x6c, 0x1c, 0x67, 0xf6, 0xda, 0x5, 0x53, 0xda, 0xbc, 0x48, 0xa4, 0xad, 0x30, 0x60, 0xd2, 0xbc, 0x43, 0x21, 0xf7, 0xbb, 0x92, 0x1d, 0x29, 0xeb, 0x7e, 0x2, 0x52, 0x93, 0xbf, 0x4c, 0x2d, 0xd4, 0x10, 0x12, 0xad, 0x6b, 0xde, 0xa7, 0x91, 0xce, 0x12, 0xa6, 0xf6, 0x38, 0x75, 0xfd, 0xc2, 0xb, 0x9a, 0x93, 0xcc, 0xa3, 0x32, 0x6, 0x98, 0x7c, 0x57, 0xa3, 0xcd, 0x36, 0x9f, 0x23, 0xb7, 0xe5, 0x4e, 0x40, 0x4e, 0xe0, 0x80, 0xd9, 0x51, 0xf6, 0xfb, 0x80, 0xf8, 0x61, 0x84, 0x4b, 0xd8, 0x49, 0x60, 0x87, 0x49, 0x37, 0x7e, 0x7b, 0xdd, 0xc2, 0x8b, 0x6e, 0x6c, 0xf7, 0x42, 0x0, 0x18, 0x30, 0xf9, 0xee, 0x94, 0x32, 0xdb, 0xe7, 0xca, 0xba, 0xa7, 0x1, 0xda, 0x3f, 0xb7, 0x78, 0x25, 0xef, 0x26, 0x98, 0x38, 0x42, 0x24, 0xb9, 0x34, 0xa9, 0x7b, 0x36, 0xdc, 0x3d, 0xf5, 0x82, 0x24, 0xd3, 0xad, 0x5c, 0x8, 0x9c, 0xbc, 0x70, 0xf, 0xeb, 0x66, 0x2f, 0xb3, 0xd9, 0xe6, 0x19, 0xf0, 0xc7, 0x5b, 0x4f, 0x14, 0xc8, 0x69, 0x57, 0x25, 0xd2, 0x2c, 0x67, 0x15, 0xb, 0xc7, 0x29, 0xf2, 0xe5, 0xf7, 0xa7, 0x46, 0xe1, 0x59, 0x19, 0xe1, 0x79, 0xd2, 0x3a, 0x5b, 0x61, 0x9c, 0xdb, 0x68, 0x52, 0x5f, 0x5f, 0xbf, 0x70, 0x72, 0x87, 0xb9, 0x52, 0x7, 0x30, 0x70, 0xf2, 0xcf, 0xbb, 0xb9, 0x2d, 0xdb, 0x97, 0x41, 0xb6, 0x2f, 0xc0, 0x3d, 0x2, 0xe7, 0x64, 0x32, 0xf0, 0x48, 0xe, 0x44, 0xa4, 0x52, 0xe, 0xe6, 0xc5, 0x78, 0x88, 0x14, 0x72, 0x25, 0x89, 0xa0, 0x59, 0xed, 0xa4, 0x1a, 0x3f, 0xb7, 0x6e, 0xe1, 0x94, 0xb7, 0xc2, 0x2f, 0x47, 0x5e, 0xb3, 0x94, 0x3b, 0xdf, 0x7b, 0xc5, 0xd0, 0x69, 0xa0, 0xcd, 0x6c, 0x27, 0x4d, 0x9a, 0x0, 0xdd, 0x75, 0xb, 0x2e, 0x70, 0xcb, 0xd5, 0xa1, 0x2a, 0x2e, 0x1d, 0x34, 0xf9, 0xe7, 0x7b, 0x58, 0xb7, 0xe5, 0xdb, 0x36, 0xdb, 0xf2, 0x75, 0x2, 0x26, 0x34, 0xf0, 0x33, 0x69, 0x57, 0xae, 0x70, 0x97, 0xf, 0x8f, 0xf8, 0x2, 0x0, 0x63, 0xcc, 0x66, 0xa6, 0x1a, 0xc7, 0xae, 0x5b, 0x30, 0x39, 0x51, 0x7, 0x89, 0x6a, 0x60, 0xc0, 0xa4, 0x79, 0xd7, 0xd9, 0x6c, 0xf3, 0x37, 0x0, 0xed, 0xcb, 0xb0, 0x47, 0x50, 0x72, 0x26, 0xab, 0x80, 0xe9, 0x41, 0x93, 0x7a, 0x7e, 0xc3, 0xdd, 0x53, 0x8f, 0x1f, 0x34, 0xe5, 0xee, 0x46, 0x9b, 0x6d, 0xa6, 0x71, 0x1a, 0x9a, 0x24, 0xb7, 0x2f, 0xa4, 0x8f, 0x9, 0xea, 0x49, 0xa0, 0x87, 0xa4, 0x3, 0x69, 0x9c, 0x17, 0x20, 0xf7, 0xf9, 0x75, 0xb, 0x2f, 0xca, 0x94, 0x4a, 0xbc, 0xea, 0xc2, 0xd, 0xbc, 0x70, 0x61, 0x83, 0x6c, 0xf6, 0xdf, 0xe5, 0xb6, 0x7c, 0x13, 0x64, 0xb0, 0x20, 0x23, 0xbf, 0xd8, 0x22, 0x49, 0x8, 0x98, 0x4a, 0x82, 0xa4, 0xac, 0x71, 0x52, 0xcf, 0x3b, 0xd, 0xdd, 0xce, 0x5e, 0x33, 0xef, 0xbc, 0xf, 0x92, 0xcf, 0xac, 0x5a, 0x7c, 0x2c, 0x18, 0x63, 0xb3, 0xbb, 0xe6, 0xc9, 0xda, 0x83, 0x3d, 0x43, 0x17, 0x3, 0x49, 0xbe, 0xf6, 0x6, 0x91, 0x5f, 0xdc, 0x2, 0x1, 0xbb, 0x48, 0xf3, 0x1a, 0xa4, 0xde, 0x80, 0x7a, 0x2, 0x28, 0xd2, 0x81, 0x82, 0x7b, 0xae, 0x34, 0xa9, 0xc6, 0xeb, 0xd6, 0x2d, 0x9c, 0xfc, 0x54, 0xa9, 0xa4, 0xab, 0xf6, 0x9, 0x5c, 0xb7, 0xe0, 0x82, 0x16, 0xa7, 0xb1, 0xfb, 0x7f, 0x99, 0x54, 0xe3, 0x75, 0x4, 0xb2, 0x8, 0x69, 0x33, 0x89, 0x9b, 0x45, 0x7c, 0x24, 0x90, 0xcc, 0x1a, 0x27, 0xfd, 0xf0, 0xfa, 0xbb, 0x2e, 0x19, 0x53, 0x4f, 0xc4, 0xf7, 0xf0, 0x71, 0xe1, 0xd3, 0x26, 0xd5, 0x78, 0xa, 0xe9, 0x6c, 0x40, 0x41, 0xd9, 0x6b, 0x77, 0x6d, 0x43, 0xe1, 0x6f, 0x23, 0x64, 0xf, 0x3, 0xb4, 0x17, 0x8a, 0xde, 0x15, 0xde, 0x6b, 0x88, 0xa0, 0x7f, 0x29, 0x57, 0xee, 0x9a, 0x9c, 0x42, 0xd7, 0xdc, 0x3e, 0x3e, 0xeb, 0x34, 0x74, 0x9f, 0x69, 0x52, 0x4d, 0x53, 0x4, 0xbe, 0xdf, 0x76, 0x8b, 0x60, 0x18, 0x4a, 0x85, 0x31, 0xc7, 0xd6, 0x5e, 0xbf, 0x9f, 0x7a, 0x72, 0xfd, 0x5d, 0x17, 0x9f, 0x95, 0x18, 0xd5, 0x12, 0x86, 0x75, 0xb, 0x26, 0xff, 0xc9, 0x34, 0x34, 0x9d, 0x49, 0xe3, 0x2c, 0xf7, 0x2d, 0x8e, 0xfe, 0xf0, 0x15, 0x26, 0x63, 0x31, 0x59, 0x4b, 0x85, 0x79, 0xcf, 0x7e, 0x7, 0x2b, 0xd2, 0xc8, 0xf3, 0x31, 0xd, 0x2e, 0x8a, 0x34, 0xc1, 0xd4, 0x51, 0x51, 0x47, 0x6c, 0xc, 0x81, 0x4f, 0x7e, 0xea, 0xc2, 0x87, 0x4a, 0xf6, 0x3e, 0x35, 0x7b, 0x5, 0xaf, 0xbe, 0xfd, 0x9c, 0x2c, 0x53, 0xd, 0xf7, 0x93, 0xdc, 0x51, 0x64, 0xa, 0x29, 0x1, 0x51, 0xcc, 0x50, 0x18, 0x26, 0xbf, 0x1f, 0x83, 0xe7, 0x2b, 0x0, 0xe3, 0xa4, 0x9f, 0x6c, 0x49, 0xf7, 0x3a, 0xbd, 0xdd, 0xa8, 0x97, 0x10, 0xac, 0x9b, 0x7f, 0xc1, 0x2b, 0x26, 0xd5, 0x38, 0x85, 0xc6, 0x59, 0x82, 0xfc, 0xec, 0x28, 0xa2, 0x99, 0x1c, 0x65, 0xc2, 0xf2, 0xcf, 0xcc, 0xdb, 0xa9, 0xc3, 0xef, 0x99, 0x7f, 0x95, 0x8b, 0x27, 0x4f, 0x39, 0x12, 0xac, 0xcd, 0x9e, 0xd7, 0x9d, 0x1f, 0x4e, 0x2c, 0x55, 0xde, 0x44, 0xdc, 0xc2, 0x6d, 0x36, 0xd3, 0xf, 0x40, 0xda, 0xa3, 0x17, 0x13, 0x71, 0xe7, 0x26, 0xd, 0x5, 0x58, 0x6f, 0x4a, 0x3c, 0xfd, 0xa8, 0x93, 0x6e, 0x1a, 0xff, 0xf2, 0xbc, 0xd3, 0x77, 0x8b, 0xcd, 0x98, 0xd6, 0xce, 0xbf, 0x60, 0x23, 0x4c, 0x6a, 0x16, 0xe9, 0xbc, 0xec, 0x4d, 0x31, 0x18, 0xc9, 0x53, 0x97, 0x6a, 0xc6, 0x4b, 0x1b, 0x2e, 0x6, 0xb3, 0x6d, 0x90, 0xfa, 0xca, 0xaa, 0x7f, 0xfb, 0x33, 0x80, 0x9b, 0x99, 0x1, 0x70, 0xdf, 0x9a, 0x13, 0x2a, 0x4, 0x1, 0x34, 0x34, 0xce, 0x5a, 0x9a, 0xf4, 0xd, 0x6b, 0xe6, 0x9d, 0xf7, 0x61, 0x7b, 0x11, 0xac, 0x3d, 0x60, 0xfd, 0xc2, 0xc9, 0xf7, 0xc0, 0xa4, 0x6e, 0x7, 0xb9, 0xcd, 0xb7, 0x57, 0x75, 0x98, 0xd1, 0x2c, 0xbc, 0x48, 0x56, 0x50, 0x8f, 0x52, 0x71, 0x6b, 0x66, 0x80, 0x23, 0xa7, 0xdc, 0xb5, 0x17, 0x60, 0x87, 0x92, 0x48, 0xe5, 0xf5, 0xde, 0x44, 0xc4, 0x1e, 0x92, 0xdc, 0x42, 0x93, 0x5a, 0xb0, 0x76, 0xfe, 0xa4, 0xc7, 0x3a, 0xa, 0x79, 0x49, 0x82, 0x31, 0xce, 0x2c, 0x9a, 0xd4, 0xbd, 0xbe, 0x8d, 0x3a, 0x98, 0x25, 0x69, 0xf7, 0x19, 0xc5, 0x80, 0xf8, 0xbe, 0xf6, 0x7c, 0xe4, 0xc0, 0xc9, 0xb, 0x87, 0xc4, 0x96, 0xb1, 0x96, 0xa, 0x1e, 0x7d, 0xed, 0xef, 0x8, 0x72, 0x38, 0x80, 0xb4, 0x97, 0xa1, 0xd7, 0xcd, 0xd5, 0xd2, 0x83, 0xf9, 0x5, 0xf7, 0x2a, 0xe0, 0xa4, 0x1e, 0x0, 0x4d, 0xe2, 0xf6, 0xef, 0x8e, 0x82, 0xb5, 0xf3, 0x27, 0x6d, 0x31, 0x4e, 0xfa, 0x36, 0x18, 0x67, 0x29, 0xfc, 0x3e, 0xd9, 0x9f, 0xe9, 0xab, 0xc, 0x27, 0x11, 0xf7, 0x88, 0x9, 0xf7, 0x47, 0x1, 0xff, 0x3f, 0x1, 0x6b, 0x4f, 0x80, 0x74, 0x76, 0x5c, 0x19, 0x6b, 0x62, 0x80, 0x6d, 0xff, 0xd8, 0x48, 0xeb, 0x66, 0xcf, 0x25, 0x4d, 0xca, 0x2f, 0x51, 0xcd, 0xeb, 0x79, 0x7c, 0x75, 0x9f, 0xa0, 0x79, 0x15, 0x30, 0xf7, 0xaf, 0x9b, 0x3f, 0xa9, 0xa2, 0xdd, 0xbf, 0xea, 0xd, 0xd6, 0xde, 0x79, 0xfe, 0xb, 0x34, 0xa9, 0xc5, 0x0, 0x0, 0x1a, 0x11, 0xac, 0x58, 0x31, 0x64, 0xc4, 0x3d, 0x63, 0xc2, 0x8b, 0xf0, 0x28, 0x92, 0xd, 0x24, 0xfa, 0xc6, 0x95, 0xaf, 0x26, 0x6, 0x58, 0x7f, 0xd7, 0xc5, 0x56, 0x6e, 0x76, 0x2c, 0xa0, 0x34, 0x69, 0xc2, 0x5b, 0xaf, 0x54, 0x7e, 0x91, 0x81, 0xe4, 0xef, 0xf5, 0x22, 0xc6, 0x59, 0x44, 0x63, 0x1e, 0xef, 0x6c, 0x2, 0x26, 0x1, 0xa4, 0x59, 0x4c, 0x93, 0x7a, 0x12, 0xfe, 0x7e, 0x46, 0x28, 0x35, 0xc, 0xb0, 0xb6, 0x6, 0x54, 0x98, 0x16, 0x82, 0x6e, 0xb5, 0xf1, 0xd3, 0xe3, 0xe7, 0x46, 0xd2, 0xba, 0x26, 0x6, 0x18, 0x74, 0xd1, 0x3d, 0x7d, 0x41, 0xf4, 0xf6, 0xc4, 0x76, 0x28, 0xa7, 0xf2, 0x56, 0x39, 0xec, 0xfb, 0x92, 0x3f, 0x49, 0xf3, 0x16, 0x8d, 0xf3, 0xd4, 0xda, 0x3b, 0xcf, 0xdf, 0xde, 0xd9, 0xc4, 0x4b, 0x2, 0xd6, 0xde, 0x79, 0xfe, 0x5a, 0x3a, 0xa9, 0xf9, 0x5e, 0x25, 0x73, 0xe, 0x1f, 0x25, 0xc4, 0x9f, 0xda, 0x2f, 0xcf, 0xaf, 0xc4, 0x50, 0x9e, 0xf5, 0xb4, 0x67, 0x63, 0xb7, 0x1e, 0x7, 0x46, 0x95, 0xad, 0x6a, 0x6, 0x18, 0x7c, 0xc9, 0xfd, 0x29, 0x59, 0x3b, 0xa, 0xa0, 0x4d, 0xa2, 0xe4, 0x81, 0x1, 0x3, 0x20, 0x68, 0x9c, 0xf9, 0x34, 0xce, 0x8a, 0xce, 0x26, 0x5c, 0xa2, 0x40, 0xf3, 0x57, 0xd2, 0xbc, 0x8b, 0x76, 0x76, 0x9f, 0xb, 0x5c, 0xe2, 0xfc, 0x1d, 0x67, 0xe0, 0x73, 0xc3, 0xc1, 0x10, 0x3e, 0x1d, 0x55, 0xac, 0xaa, 0x19, 0x60, 0xf5, 0x6d, 0x67, 0x67, 0x9, 0x7d, 0x26, 0x34, 0xd3, 0x55, 0x93, 0x9a, 0xc3, 0xdc, 0x46, 0x4e, 0x0, 0x4d, 0x6a, 0xd9, 0x9a, 0x3b, 0x26, 0xee, 0xd6, 0x63, 0x7f, 0x31, 0x18, 0x63, 0xd6, 0x9b, 0x54, 0xc3, 0x6c, 0xff, 0x51, 0x91, 0x5b, 0x91, 0xd7, 0x0, 0x85, 0x3e, 0x9, 0x9e, 0x22, 0xe8, 0xd, 0xa5, 0xe6, 0x15, 0x3a, 0xa9, 0xfb, 0x49, 0xf3, 0x46, 0xd4, 0x77, 0x6d, 0xf6, 0x8, 0x1a, 0x74, 0xd1, 0xdd, 0x4d, 0xa4, 0xb3, 0xbf, 0xac, 0xed, 0x2b, 0xe8, 0x40, 0x2, 0x7b, 0x43, 0xee, 0x98, 0xdc, 0x86, 0x8d, 0xc9, 0xa8, 0xb9, 0x24, 0xb9, 0x9, 0xe0, 0xa6, 0x24, 0x91, 0x53, 0xf, 0xb0, 0xfa, 0xf6, 0x9, 0x9b, 0x7, 0x7f, 0x71, 0xd1, 0x43, 0x0, 0xfe, 0x3, 0x0, 0x61, 0x12, 0x30, 0xc1, 0x84, 0x26, 0x80, 0x48, 0x12, 0xb2, 0xca, 0xeb, 0x1, 0x7c, 0x97, 0xc6, 0x79, 0x96, 0x74, 0x16, 0x64, 0x65, 0x16, 0x6f, 0xb8, 0x73, 0x42, 0x36, 0x2a, 0x89, 0x58, 0x6, 0x18, 0x74, 0xd1, 0xbd, 0x3d, 0x21, 0x1d, 0xe, 0xe8, 0x40, 0x90, 0x7b, 0x41, 0xea, 0x25, 0x65, 0x8f, 0x90, 0x75, 0x8f, 0x83, 0xf4, 0xe9, 0x60, 0xe1, 0x7a, 0x68, 0x51, 0x67, 0xad, 0x1e, 0x31, 0x9e, 0x3b, 0x21, 0x53, 0x33, 0x4, 0xac, 0x69, 0x2f, 0x42, 0x74, 0x26, 0x8, 0xb0, 0xa0, 0x79, 0x1f, 0xd2, 0x3e, 0x9, 0x35, 0x97, 0xc0, 0x21, 0xc7, 0x73, 0x8e, 0x1, 0x29, 0x70, 0x33, 0xc9, 0x55, 0x34, 0xa9, 0x87, 0x8c, 0x93, 0x9a, 0xbf, 0xfa, 0xf6, 0xf1, 0x9b, 0x4b, 0x25, 0x11, 0xc9, 0x0, 0x83, 0xbf, 0xb8, 0x68, 0x7f, 0x2b, 0xf7, 0x7c, 0x59, 0x77, 0x3a, 0x64, 0xf, 0x2f, 0xcc, 0x33, 0xa7, 0xb0, 0x7b, 0x4e, 0xa, 0xf0, 0xf9, 0xad, 0xb6, 0x1e, 0x20, 0x67, 0x2c, 0x37, 0x8e, 0xf3, 0xfc, 0x9a, 0x3b, 0x26, 0x6e, 0x4b, 0x8, 0xe7, 0x75, 0x5, 0x92, 0xb6, 0x3, 0xf8, 0x33, 0x80, 0x91, 0x40, 0xa2, 0xdb, 0xd7, 0x51, 0xe0, 0x3f, 0xe8, 0x38, 0xaf, 0x11, 0xe6, 0x41, 0x90, 0x3f, 0x5d, 0x3b, 0xef, 0xdc, 0x36, 0x9, 0xd0, 0x31, 0x3d, 0x80, 0xc6, 0xcb, 0x75, 0xbf, 0x5, 0xe8, 0x63, 0x60, 0xd8, 0xf1, 0xb3, 0xc0, 0x41, 0x23, 0x34, 0x3f, 0xd1, 0x26, 0xb7, 0xed, 0x92, 0x15, 0xc8, 0xff, 0x7c, 0x74, 0xd7, 0x86, 0x93, 0x7c, 0x1b, 0x26, 0xf5, 0x88, 0x6c, 0x76, 0x24, 0x22, 0x5d, 0xca, 0x83, 0xa0, 0x72, 0x4b, 0x90, 0x82, 0x77, 0xca, 0xe1, 0x8d, 0x4e, 0xfa, 0x47, 0xae, 0xab, 0x19, 0x1b, 0x16, 0x9c, 0x57, 0xd6, 0xb, 0x28, 0xc, 0x91, 0x3, 0x91, 0x80, 0x5e, 0x0, 0x1a, 0xbc, 0x42, 0x7b, 0x53, 0x8f, 0x79, 0xe9, 0xd2, 0x14, 0x49, 0xb1, 0x40, 0xe9, 0xe7, 0x8a, 0x6c, 0x1, 0xbb, 0x4, 0x54, 0x54, 0x81, 0xdd, 0x9, 0xd6, 0xdc, 0x31, 0xe1, 0x7d, 0x1a, 0xe7, 0x49, 0x1f, 0x47, 0x11, 0xb6, 0x80, 0x0, 0x8a, 0x9f, 0x11, 0xf3, 0x2e, 0xf7, 0xed, 0x7, 0x80, 0xb9, 0xad, 0x52, 0xe2, 0x3, 0x31, 0x3d, 0x80, 0x64, 0xf, 0x0, 0xb0, 0x97, 0x37, 0xbf, 0xac, 0xfc, 0xc6, 0x36, 0xde, 0x5b, 0x54, 0xd6, 0x73, 0xb5, 0x69, 0x95, 0x6c, 0xb0, 0x2e, 0xe7, 0x1d, 0x82, 0x1d, 0xee, 0xdb, 0xd7, 0x91, 0x40, 0xf2, 0x3d, 0x1f, 0xaf, 0x3e, 0x46, 0x8b, 0x5b, 0x7d, 0x2e, 0x66, 0x4c, 0xa, 0xa1, 0xb5, 0x29, 0xc1, 0xa2, 0x8, 0xc3, 0xb4, 0xe3, 0x38, 0x4d, 0xd5, 0x94, 0x27, 0x7a, 0x8, 0x10, 0x7a, 0xe6, 0xed, 0xcb, 0xc5, 0x63, 0x55, 0xa5, 0x3d, 0x74, 0xb9, 0xf8, 0x61, 0x2c, 0xf0, 0x75, 0x10, 0x89, 0xbb, 0x73, 0xd7, 0x15, 0xd0, 0x8, 0x84, 0x65, 0x68, 0x51, 0x4d, 0x8, 0xf, 0x6d, 0x49, 0x20, 0x7f, 0x97, 0x1f, 0x2d, 0x53, 0x81, 0x3c, 0x56, 0x29, 0x44, 0x32, 0x0, 0x8d, 0x69, 0x90, 0x6b, 0xbd, 0x1d, 0x2c, 0x3b, 0x60, 0x1a, 0x33, 0xe7, 0xf2, 0x47, 0xf3, 0x6, 0xc0, 0x8f, 0x34, 0x3, 0x10, 0x70, 0x9, 0xbe, 0x2f, 0x69, 0xbf, 0x4, 0x51, 0x9b, 0xaa, 0x56, 0x9c, 0x4c, 0x68, 0x9f, 0xc0, 0x72, 0xe3, 0x15, 0x4b, 0xbe, 0xf3, 0x1a, 0x3, 0x41, 0xf2, 0x4d, 0x48, 0x1f, 0x69, 0x6, 0x10, 0xe0, 0xa, 0xfc, 0xb0, 0xd0, 0xc1, 0x27, 0x6a, 0xfc, 0x8f, 0xc3, 0x1d, 0xc3, 0x69, 0xe5, 0xce, 0x2f, 0xaa, 0xd6, 0x1b, 0x37, 0x46, 0xb, 0xc8, 0xa9, 0x7a, 0x68, 0xd5, 0xfb, 0xc7, 0xa, 0xf8, 0x8c, 0x7e, 0x9f, 0xb, 0x63, 0xc9, 0xef, 0xe5, 0x2f, 0xa2, 0xfb, 0xe8, 0xea, 0x0, 0x7e, 0x3d, 0x73, 0xf5, 0x67, 0xcc, 0x6f, 0x14, 0xc4, 0x31, 0x41, 0x58, 0xbe, 0xaa, 0xe, 0x71, 0xd1, 0x43, 0x0, 0x0, 0x5, 0xd4, 0x8a, 0xcc, 0x3b, 0x1c, 0xa8, 0x88, 0xf7, 0x25, 0xca, 0xcf, 0xf0, 0x4d, 0x78, 0x55, 0x2c, 0x1, 0xe0, 0x0, 0xd0, 0x54, 0x25, 0xcc, 0xec, 0x2e, 0x40, 0xd2, 0x11, 0xb0, 0x77, 0x69, 0x7a, 0x85, 0x9, 0x1c, 0x77, 0xf, 0xd0, 0x3f, 0x5b, 0x43, 0x82, 0x6b, 0xad, 0xad, 0xca, 0xb4, 0x1c, 0xad, 0x5, 0x0, 0x2d, 0x79, 0xcb, 0x5e, 0x39, 0x83, 0x45, 0x2d, 0x4d, 0xb6, 0x90, 0x91, 0x8, 0xf4, 0x21, 0xf9, 0x91, 0x67, 0x0, 0x92, 0xfb, 0xb4, 0x6d, 0xb9, 0x0, 0xdb, 0x78, 0xaf, 0x6c, 0xb5, 0x64, 0x88, 0x1e, 0x2, 0xc8, 0xf, 0x19, 0xd8, 0xaa, 0xb, 0x8e, 0xef, 0x8, 0xfa, 0xe8, 0xfc, 0x26, 0x56, 0x5e, 0x9c, 0x10, 0x8f, 0x94, 0xdd, 0x46, 0xa5, 0x88, 0x9f, 0x7c, 0x63, 0xa6, 0x9f, 0xcf, 0x81, 0x0, 0x1a, 0x13, 0xc1, 0x74, 0xdd, 0x82, 0xf2, 0x7b, 0xa9, 0x28, 0x68, 0x5f, 0xc5, 0x50, 0xac, 0x71, 0x17, 0xf5, 0x94, 0x2c, 0x5a, 0x73, 0xe, 0x66, 0x43, 0x1b, 0x74, 0x55, 0x4, 0x91, 0x42, 0x20, 0x61, 0xde, 0x20, 0xb8, 0x85, 0xe1, 0x15, 0x27, 0x40, 0x91, 0x5c, 0x10, 0xb2, 0x7, 0x15, 0xcb, 0x9, 0xa5, 0x64, 0xc2, 0xe2, 0x97, 0x21, 0x9b, 0xa2, 0xa4, 0x8f, 0xeb, 0x23, 0xcf, 0x0, 0xec, 0x5, 0x20, 0xd8, 0x53, 0x0, 0x28, 0x25, 0xf4, 0x15, 0xc, 0x97, 0x21, 0x9c, 0x7, 0x32, 0x9a, 0x2f, 0x48, 0x12, 0xcc, 0x0, 0xa8, 0xea, 0xd0, 0xa9, 0x18, 0x4b, 0xa0, 0xde, 0x2, 0xd9, 0x82, 0x60, 0xc1, 0x81, 0xc7, 0xb6, 0x8, 0x76, 0x44, 0x60, 0x3b, 0xfc, 0xf9, 0x5a, 0x40, 0x13, 0xeb, 0x68, 0x3, 0xeb, 0xa4, 0x61, 0xf0, 0xd4, 0x5f, 0xed, 0x6b, 0xad, 0x7b, 0x8a, 0x8f, 0x57, 0x26, 0x85, 0x3b, 0x49, 0x7b, 0x3, 0xfa, 0xe6, 0xe0, 0x8b, 0x7f, 0x51, 0xb1, 0x56, 0x17, 0xed, 0x26, 0xe4, 0xa4, 0x1e, 0x4, 0x9d, 0x6f, 0xd3, 0x38, 0xcf, 0x6, 0x3e, 0x5a, 0xde, 0xaf, 0xaf, 0xaf, 0x3, 0x40, 0xfe, 0x8, 0xc7, 0x3c, 0x37, 0x16, 0x34, 0xee, 0x98, 0x6e, 0x20, 0x1c, 0x3f, 0xb0, 0x68, 0x41, 0xa2, 0x31, 0x5, 0x61, 0x1f, 0x45, 0x20, 0x4d, 0x2f, 0x40, 0xa7, 0xe5, 0x10, 0x17, 0x65, 0xd5, 0xcd, 0xbd, 0x63, 0x99, 0x9e, 0x34, 0x7f, 0x43, 0x43, 0xc8, 0xba, 0x97, 0x3, 0x7c, 0x7a, 0xf0, 0x25, 0xf7, 0xfd, 0xf7, 0xe0, 0xa9, 0xf, 0xec, 0xdd, 0xe6, 0x32, 0xc5, 0xbd, 0x18, 0x3c, 0xf5, 0x57, 0xdd, 0x1, 0xf6, 0x85, 0xec, 0x41, 0x20, 0x7a, 0x43, 0x38, 0x4, 0xd0, 0x27, 0x25, 0x7b, 0x24, 0x81, 0x81, 0xf0, 0xe7, 0xa, 0x80, 0xf0, 0x36, 0xaf, 0x35, 0x51, 0xcf, 0x3f, 0xf, 0x32, 0xf5, 0x75, 0xe3, 0xa4, 0x6f, 0x5c, 0x75, 0xf3, 0xbf, 0xb6, 0xf9, 0x4, 0xae, 0xdd, 0x5, 0x86, 0x5c, 0xfa, 0xc0, 0x30, 0x9b, 0x6d, 0xf9, 0xd, 0x80, 0xbd, 0x93, 0x30, 0x2, 0x85, 0xf6, 0xc7, 0x9, 0x6f, 0xba, 0xb9, 0x85, 0x34, 0x2b, 0x5, 0x3e, 0x44, 0x63, 0xee, 0x5c, 0x7d, 0xeb, 0x59, 0x25, 0xf, 0x9f, 0x6a, 0x73, 0x29, 0x86, 0x5d, 0xfe, 0x70, 0xf, 0x6b, 0xdd, 0x7d, 0x65, 0xed, 0x1, 0x34, 0x66, 0x7f, 0x59, 0xdb, 0xb, 0x72, 0xaf, 0x96, 0x6c, 0xff, 0xd6, 0x66, 0xcd, 0x1a, 0x2a, 0x44, 0xbe, 0xe9, 0x38, 0xd, 0x13, 0x56, 0xdd, 0x32, 0xf6, 0x85, 0x24, 0xd2, 0xac, 0x27, 0x18, 0x3c, 0xf5, 0x57, 0x23, 0xe5, 0x66, 0x5e, 0xf4, 0x77, 0x15, 0x49, 0x62, 0x15, 0x7d, 0xab, 0xa3, 0x66, 0x82, 0xd3, 0xc7, 0x4, 0x6c, 0x26, 0xcd, 0xb, 0x34, 0xce, 0x42, 0xc7, 0x98, 0xfb, 0x56, 0xde, 0x3c, 0x36, 0x72, 0x99, 0x78, 0x9b, 0x3d, 0x82, 0x56, 0xce, 0x3d, 0x63, 0x2b, 0xbc, 0x7d, 0x74, 0x5e, 0xb, 0x55, 0x68, 0x20, 0x2d, 0xfa, 0x79, 0x25, 0x49, 0x64, 0xd3, 0x2c, 0x1, 0xe8, 0x63, 0xa5, 0x83, 0x6a, 0xc5, 0x4c, 0xbd, 0xc1, 0xd0, 0xcb, 0x16, 0xef, 0x67, 0x6d, 0x76, 0x9c, 0x3f, 0xcc, 0x55, 0x61, 0x62, 0x8f, 0xd4, 0xc6, 0xb, 0xf4, 0xe8, 0xd0, 0xbe, 0x8c, 0x22, 0xb0, 0x2f, 0xa0, 0x33, 0x61, 0xdd, 0xc1, 0x2e, 0x30, 0x74, 0xf0, 0xd4, 0x7, 0x17, 0xac, 0xbe, 0x75, 0xec, 0xba, 0xe2, 0x4, 0xaa, 0x6e, 0xb9, 0xc3, 0xa6, 0x3f, 0x96, 0x32, 0x34, 0xbf, 0xf7, 0x48, 0xef, 0x2f, 0x45, 0xaa, 0x68, 0xf6, 0x37, 0x34, 0xce, 0xf9, 0xaa, 0x65, 0xde, 0xb1, 0x44, 0x9f, 0x19, 0x7a, 0xd9, 0x83, 0xfb, 0x77, 0x14, 0x71, 0x3a, 0x6, 0x34, 0x0, 0xd6, 0x9d, 0xee, 0xf, 0x94, 0x2c, 0xa8, 0x7b, 0x9b, 0xfc, 0x44, 0x59, 0x6, 0x87, 0x41, 0xfb, 0xcb, 0x9d, 0x5b, 0x24, 0x6f, 0x22, 0x4f, 0x9f, 0x80, 0xec, 0x38, 0x52, 0x7d, 0xa2, 0x4a, 0x55, 0x35, 0x3, 0xac, 0x9c, 0xf3, 0xf9, 0xac, 0x80, 0x17, 0xe0, 0x9f, 0xa3, 0x5a, 0x9d, 0xdc, 0x9f, 0x2f, 0xb7, 0xa7, 0x6d, 0x4, 0x9a, 0x86, 0xbd, 0x40, 0xc2, 0x88, 0xce, 0x26, 0x59, 0x92, 0x20, 0xd9, 0x43, 0x1, 0xec, 0x7, 0x50, 0x85, 0xcb, 0x3b, 0xc2, 0x78, 0xa8, 0x1c, 0x87, 0x28, 0xfe, 0xb6, 0x50, 0xbb, 0xa0, 0xdf, 0xad, 0xbe, 0x4a, 0xe3, 0x6c, 0x8c, 0x2a, 0x57, 0x4d, 0x63, 0xf7, 0x1f, 0x6e, 0x19, 0xfb, 0x2a, 0x8d, 0x79, 0x33, 0x98, 0x32, 0x8e, 0x76, 0x74, 0x8d, 0x9a, 0xf4, 0x88, 0xb3, 0x6d, 0x53, 0x0, 0x5, 0xe9, 0xe3, 0xb2, 0xf6, 0xe4, 0x21, 0x97, 0x2d, 0xee, 0xd9, 0xb9, 0x64, 0x4b, 0x6, 0x6, 0x5f, 0xfa, 0xe0, 0x60, 0x59, 0x4d, 0xf6, 0x55, 0xdd, 0xdc, 0x36, 0x37, 0x49, 0x40, 0xac, 0xd7, 0x40, 0xce, 0x96, 0xf, 0x10, 0xdc, 0xd2, 0xd0, 0xfd, 0x63, 0xaf, 0x47, 0xc5, 0xab, 0x89, 0x1, 0x6, 0x5f, 0x72, 0x9f, 0x1, 0xcc, 0x3, 0x2, 0x32, 0x2, 0x90, 0x53, 0xe5, 0xa, 0x2e, 0x14, 0x75, 0x61, 0xc5, 0x5d, 0x5f, 0x41, 0x78, 0x9e, 0x71, 0xa1, 0xf1, 0xb2, 0xf6, 0xd4, 0xc4, 0xa9, 0xd1, 0x9, 0x40, 0xe0, 0xc, 0xc0, 0x8e, 0xf1, 0x1c, 0xab, 0x0, 0x76, 0xc0, 0x89, 0x68, 0x34, 0x39, 0x5f, 0x3e, 0x90, 0x66, 0x57, 0xf1, 0x9, 0xa6, 0x1, 0xd4, 0xc4, 0x0, 0xd, 0x3d, 0x7a, 0xb, 0x34, 0xf7, 0x4a, 0xc8, 0xfa, 0x54, 0x8c, 0x98, 0x19, 0x2a, 0x35, 0x25, 0x5c, 0x1c, 0xb7, 0x60, 0x37, 0xb0, 0x83, 0x49, 0x9d, 0x3d, 0xe4, 0xd2, 0x87, 0x7a, 0x77, 0x36, 0x1, 0x6b, 0x81, 0x21, 0x97, 0x3e, 0x74, 0x2, 0x64, 0xc7, 0xe6, 0x25, 0xff, 0xf0, 0xa, 0xea, 0xb6, 0xe0, 0xaa, 0x54, 0x58, 0xdc, 0xb7, 0x61, 0x13, 0x2d, 0x77, 0xd1, 0x98, 0x57, 0xe2, 0xca, 0x57, 0x13, 0x3, 0x2c, 0xfb, 0xe9, 0xb1, 0xa2, 0x71, 0x56, 0x80, 0x39, 0x37, 0x2e, 0x86, 0x57, 0xf8, 0xb4, 0x86, 0x52, 0x52, 0x8e, 0xf7, 0x3e, 0xef, 0x2e, 0x45, 0x48, 0x1a, 0x7, 0xe0, 0x92, 0x76, 0xa0, 0x4b, 0x87, 0xc0, 0xb0, 0x69, 0x8f, 0xf4, 0x4, 0xf4, 0x45, 0x49, 0x47, 0x7b, 0x92, 0xbf, 0x9, 0x26, 0x4f, 0x22, 0xf0, 0x11, 0x87, 0xab, 0x52, 0x61, 0xb1, 0xd, 0xcb, 0x77, 0x15, 0x20, 0x40, 0x2e, 0x91, 0x70, 0x7f, 0x5c, 0x19, 0x6b, 0xd6, 0xdf, 0x57, 0xcd, 0x3d, 0x7d, 0xab, 0x31, 0xce, 0x8b, 0x20, 0x4b, 0xc, 0x3, 0x95, 0x76, 0x5f, 0x26, 0x30, 0x3e, 0x76, 0x87, 0xec, 0x85, 0x43, 0x2e, 0x7d, 0x68, 0x6c, 0x47, 0x10, 0x2c, 0x69, 0x90, 0xb5, 0x57, 0x49, 0xf6, 0xdc, 0xd0, 0xce, 0x1d, 0x55, 0xe2, 0x4, 0x95, 0xc6, 0xb, 0xe5, 0x65, 0x56, 0xff, 0xe1, 0x96, 0x33, 0x63, 0xd7, 0x59, 0x24, 0x62, 0xc0, 0x31, 0x4e, 0xea, 0x1a, 0x0, 0x9b, 0xdb, 0xd2, 0xc9, 0xc7, 0x89, 0x7f, 0x45, 0xcf, 0x7e, 0x55, 0x68, 0x25, 0xdb, 0x1f, 0xd0, 0x15, 0xc3, 0xa7, 0x3f, 0xba, 0x17, 0x76, 0x23, 0x18, 0x7a, 0xf9, 0xc3, 0x17, 0xc9, 0xba, 0x97, 0x90, 0xec, 0xe6, 0x1f, 0x22, 0xdb, 0xca, 0x15, 0x24, 0xa, 0x3f, 0xa5, 0xde, 0xb0, 0x8d, 0xf1, 0x82, 0x85, 0x96, 0xfe, 0x53, 0xc9, 0x35, 0x16, 0xc9, 0x30, 0x80, 0x49, 0xfd, 0x15, 0x60, 0x16, 0x2c, 0xa7, 0xb4, 0xb4, 0x56, 0x78, 0xe2, 0x9e, 0x7d, 0x7f, 0x44, 0x43, 0x1a, 0x40, 0xfa, 0xbc, 0xeb, 0x66, 0xef, 0x4e, 0x88, 0x36, 0xed, 0xe, 0xc3, 0xa6, 0x3d, 0x72, 0x34, 0x64, 0xaf, 0x4, 0xd1, 0x97, 0x9e, 0xda, 0xc7, 0xb0, 0x7a, 0x86, 0x12, 0xf8, 0x29, 0x3b, 0x61, 0x56, 0x3e, 0x9e, 0x48, 0xe3, 0xef, 0x4b, 0x65, 0x5e, 0x26, 0xcd, 0xba, 0x52, 0x65, 0xad, 0x99, 0x1, 0x86, 0x5f, 0xf1, 0x44, 0xca, 0x75, 0x33, 0x17, 0x93, 0xdc, 0xb3, 0x60, 0x82, 0xa3, 0xc6, 0x8b, 0x86, 0x14, 0x4, 0x1a, 0x7a, 0x9b, 0x2b, 0xc9, 0x9e, 0x36, 0xf4, 0xf2, 0xc5, 0x8b, 0x3b, 0x9b, 0xb8, 0xe5, 0x60, 0xd8, 0xb4, 0x47, 0x87, 0x59, 0xd7, 0x9d, 0x2b, 0xd9, 0x91, 0xb9, 0x63, 0x71, 0x88, 0xa, 0x8d, 0x64, 0x85, 0x97, 0x2, 0xa5, 0x2e, 0x3e, 0x9d, 0x70, 0x78, 0x4e, 0x93, 0x22, 0x9d, 0x7b, 0xff, 0x70, 0xf3, 0xbf, 0xfe, 0xb2, 0x54, 0x79, 0x6b, 0x62, 0x80, 0x61, 0x57, 0x3c, 0x9e, 0x92, 0xcd, 0x5c, 0x27, 0xeb, 0xde, 0x0, 0xa0, 0x67, 0xc1, 0x92, 0xe4, 0x4, 0x2e, 0x7f, 0xdf, 0x3b, 0xfa, 0x27, 0x8c, 0xc1, 0xba, 0xf6, 0xb3, 0x43, 0x2e, 0x5b, 0x7c, 0x7f, 0x65, 0xa5, 0xec, 0x38, 0x18, 0x7a, 0xf9, 0xa3, 0x43, 0x25, 0xf7, 0x2e, 0x40, 0x47, 0xfa, 0x36, 0xd, 0x86, 0x7e, 0x6b, 0xc1, 0x3, 0xbd, 0x65, 0xfe, 0x8, 0x7e, 0xc3, 0x57, 0xee, 0x14, 0x94, 0xf0, 0x5, 0xc0, 0xa5, 0xe1, 0xdf, 0xca, 0x95, 0xb9, 0x6a, 0x6, 0x18, 0x7a, 0xf9, 0xa3, 0xd, 0x72, 0x33, 0xdf, 0xb3, 0xae, 0xfb, 0xdf, 0x0, 0xd3, 0x5e, 0x68, 0xb4, 0x64, 0x5f, 0x9d, 0x2a, 0xd3, 0x3a, 0xdc, 0x18, 0xa6, 0x21, 0x9d, 0x39, 0xe4, 0xd2, 0x87, 0x7e, 0x3b, 0xf4, 0xf2, 0x47, 0x92, 0xde, 0x95, 0xac, 0x26, 0x18, 0x36, 0xed, 0xb1, 0x93, 0xad, 0xcd, 0x3c, 0x28, 0xab, 0xc3, 0xa, 0xd7, 0x52, 0x94, 0xd2, 0x7a, 0xe2, 0x70, 0x81, 0xd6, 0x71, 0xf3, 0x9a, 0xdd, 0x2e, 0x92, 0x1b, 0x40, 0xf3, 0xa6, 0x84, 0x5d, 0xa, 0xb6, 0x53, 0x4, 0x43, 0x62, 0x86, 0x27, 0xfc, 0x9, 0x6c, 0x75, 0x68, 0x67, 0x31, 0x54, 0xc5, 0x0, 0xc3, 0xaf, 0x78, 0xbc, 0x1b, 0xa0, 0x1f, 0x59, 0x6b, 0xaf, 0x3, 0xe1, 0xd0, 0x10, 0xc1, 0x21, 0xc7, 0x85, 0x2b, 0xc7, 0xa2, 0x18, 0x9f, 0x45, 0xe1, 0xcc, 0x8b, 0x2b, 0x5, 0x78, 0x8, 0xb8, 0x9f, 0xa1, 0x74, 0x9, 0x10, 0x46, 0xd0, 0xd1, 0xd6, 0xba, 0x2f, 0xf, 0xb9, 0xfc, 0x91, 0xe3, 0x3a, 0x8c, 0xc2, 0x25, 0x60, 0xc8, 0x65, 0xf, 0xff, 0xa7, 0xb5, 0xd9, 0x45, 0x24, 0xf, 0xa, 0xd4, 0x6f, 0x1a, 0xe3, 0xf9, 0x39, 0x17, 0x8a, 0x3f, 0x85, 0xf5, 0x46, 0xc, 0x2e, 0xa, 0xf1, 0x26, 0x3f, 0x2e, 0x7d, 0x7c, 0xac, 0x5c, 0x75, 0xf3, 0x99, 0x3, 0x8d, 0x93, 0xfe, 0x94, 0x49, 0x35, 0xee, 0x63, 0x52, 0x4d, 0x4d, 0x26, 0x95, 0xee, 0x63, 0x9c, 0xf4, 0x20, 0x3a, 0xe9, 0xd1, 0x74, 0xd2, 0x67, 0xd1, 0x38, 0x5f, 0xa6, 0x71, 0xbe, 0x44, 0xf0, 0xd9, 0x72, 0x65, 0x2f, 0x27, 0xb8, 0x47, 0x10, 0xff, 0xd7, 0x7b, 0xca, 0xda, 0xaf, 0x4a, 0xf6, 0x3b, 0x8, 0x56, 0xa3, 0xb0, 0xd2, 0x95, 0xae, 0x55, 0x2d, 0x8c, 0xf5, 0xd8, 0x5b, 0x62, 0xc8, 0xb9, 0x70, 0x2b, 0x68, 0x1e, 0x4b, 0x77, 0xdb, 0xe7, 0xbc, 0x17, 0x67, 0x1c, 0xd3, 0xe1, 0x9b, 0x48, 0xe, 0xbf, 0xe2, 0x89, 0x46, 0xeb, 0x66, 0xd6, 0xca, 0xba, 0x7, 0x91, 0xdc, 0x23, 0x98, 0x92, 0x87, 0xc4, 0x44, 0x71, 0x12, 0x78, 0xe8, 0x92, 0xab, 0x40, 0xe7, 0xe4, 0x95, 0x73, 0x3e, 0xf7, 0x7e, 0x71, 0x94, 0xa3, 0xbe, 0xf2, 0x5b, 0xb6, 0x6c, 0x7b, 0x97, 0x4e, 0xba, 0x81, 0xb2, 0xd6, 0x48, 0xd6, 0x5d, 0x35, 0xf7, 0x8c, 0xb2, 0x47, 0xcc, 0x54, 0x44, 0x85, 0xa1, 0xd3, 0x1e, 0xed, 0xe, 0x60, 0x32, 0xac, 0x9d, 0x5, 0xf8, 0x67, 0xff, 0xa1, 0xe3, 0xf, 0x8c, 0x40, 0xe1, 0x3c, 0x78, 0xb, 0xc8, 0xb7, 0x4, 0xde, 0xea, 0x66, 0xb3, 0xd7, 0xaf, 0xb9, 0xf5, 0xcc, 0x4c, 0xd, 0x59, 0xb4, 0x9, 0x86, 0x5c, 0xfe, 0x48, 0x9a, 0xc0, 0x22, 0x12, 0x47, 0xc9, 0xda, 0xdc, 0x2c, 0x1b, 0x2b, 0x26, 0x7a, 0x25, 0x55, 0x46, 0x56, 0xe0, 0x5d, 0xab, 0xe6, 0x9e, 0x3e, 0x25, 0xc9, 0xba, 0x54, 0x54, 0xd8, 0x61, 0xd3, 0x1e, 0x3b, 0x49, 0x72, 0x7f, 0xe3, 0x89, 0xb5, 0x1e, 0x9b, 0xb7, 0x4a, 0x2d, 0xee, 0xec, 0x87, 0x70, 0xcc, 0xb8, 0xc5, 0x23, 0x2c, 0x8a, 0xab, 0xc8, 0x38, 0x91, 0xa7, 0x83, 0x49, 0xda, 0x4a, 0x9a, 0xd7, 0x40, 0x2e, 0x2, 0xcc, 0x4f, 0x56, 0xce, 0xf9, 0x6c, 0xe2, 0x1e, 0x45, 0xc3, 0xaf, 0x78, 0x7c, 0xa8, 0xb5, 0xee, 0xb5, 0xde, 0xde, 0x48, 0x3a, 0x88, 0xa4, 0xbf, 0x3f, 0x62, 0x20, 0xaa, 0x7b, 0xc7, 0x27, 0xb6, 0xaa, 0x53, 0xb8, 0x2e, 0x51, 0x38, 0x2a, 0xf6, 0xa4, 0x2e, 0xc4, 0x97, 0xbf, 0xf, 0x3, 0x9f, 0x4d, 0x35, 0x34, 0x7d, 0x6e, 0xd9, 0xcf, 0x4e, 0x4a, 0xf4, 0xc8, 0x98, 0x8a, 0xe, 0x8d, 0x12, 0xf0, 0x16, 0xc0, 0x55, 0x20, 0x86, 0x12, 0x85, 0x47, 0xb7, 0x14, 0x54, 0xa8, 0x18, 0xca, 0x59, 0x7f, 0xc2, 0x61, 0x2c, 0xfb, 0x5d, 0x1e, 0xb5, 0xb9, 0x19, 0x70, 0x89, 0x64, 0xf, 0xc9, 0xe, 0x84, 0x78, 0x10, 0xa9, 0xb, 0x87, 0x4e, 0x7b, 0x74, 0x29, 0xc0, 0xc5, 0x0, 0x9f, 0x58, 0x75, 0xd3, 0xe7, 0x3e, 0xac, 0x16, 0x41, 0x43, 0xa7, 0x3d, 0x76, 0x24, 0x81, 0x33, 0x41, 0x9c, 0x62, 0xdd, 0xec, 0x27, 0x1, 0xf4, 0x26, 0xd1, 0xe4, 0x17, 0x26, 0xe7, 0xa, 0x17, 0xb9, 0x8c, 0x92, 0x6d, 0xb8, 0x8f, 0x7f, 0xe, 0xed, 0xba, 0xc2, 0xd7, 0x68, 0xcc, 0x6d, 0x49, 0x13, 0x3f, 0x8e, 0x14, 0x25, 0x61, 0xd8, 0xf4, 0x5f, 0x9f, 0x2e, 0xeb, 0x3e, 0xc, 0x44, 0xad, 0x70, 0xed, 0x70, 0x28, 0x68, 0x57, 0xa1, 0x1d, 0x4b, 0x20, 0xa9, 0x19, 0xe4, 0x3f, 0x0, 0xbc, 0xb, 0xe0, 0x6d, 0x80, 0x7f, 0x34, 0xc6, 0xbc, 0x28, 0x61, 0x83, 0x64, 0x37, 0x1b, 0x63, 0xb6, 0x9, 0xcc, 0x2, 0x70, 0x8d, 0x31, 0x8e, 0x9b, 0xcd, 0x34, 0x2, 0xec, 0x66, 0xc, 0xf, 0x4, 0x74, 0x8c, 0xb5, 0x3a, 0xe, 0xd0, 0x1, 0x0, 0x7a, 0xc8, 0xda, 0xde, 0x24, 0xf7, 0xcb, 0x21, 0x2d, 0x7c, 0x42, 0xa, 0xa, 0xfb, 0xe9, 0x44, 0x2a, 0x15, 0x4a, 0x4f, 0x92, 0x5, 0xcd, 0x8d, 0x3d, 0xf7, 0xeb, 0x73, 0xd5, 0x33, 0xd7, 0xf, 0x4e, 0x5c, 0xce, 0xa9, 0xf8, 0xec, 0x60, 0x9, 0x2b, 0x40, 0xf3, 0x2, 0xa0, 0xe3, 0x2, 0x4f, 0x9e, 0xf0, 0x69, 0xd1, 0xed, 0xf, 0x5, 0x63, 0x49, 0xee, 0xc1, 0x3b, 0x69, 0x3b, 0x68, 0x3a, 0x10, 0xd, 0x1b, 0x25, 0x1c, 0x2, 0xe0, 0x10, 0x3f, 0xc6, 0x9, 0x92, 0x1d, 0x27, 0xe1, 0x7d, 0x48, 0xcd, 0x90, 0xcd, 0x10, 0xb4, 0x0, 0xe4, 0x66, 0xb2, 0x24, 0xe9, 0x0, 0x4a, 0x59, 0xab, 0xee, 0x80, 0xf6, 0x7, 0x90, 0xf3, 0x48, 0xa, 0x16, 0xc9, 0xf8, 0xe, 0xd1, 0x2c, 0x76, 0xe7, 0xab, 0x9c, 0xf8, 0xc5, 0xe3, 0x40, 0x1, 0x7e, 0x45, 0x43, 0x4a, 0xb0, 0x0, 0xc, 0x69, 0x9e, 0x14, 0xf9, 0x83, 0xf6, 0x20, 0x3e, 0x50, 0x5, 0x3, 0x90, 0x7c, 0x17, 0xe4, 0x77, 0x64, 0xdd, 0x27, 0xdb, 0xeb, 0xb8, 0xb4, 0xa, 0x4a, 0x13, 0x2a, 0x57, 0x48, 0x81, 0x24, 0xc2, 0x4e, 0x97, 0xc1, 0x88, 0xda, 0x1d, 0x40, 0x5f, 0x40, 0x7d, 0xc1, 0x9c, 0x4a, 0x91, 0x4b, 0x26, 0x70, 0x79, 0xf, 0x8c, 0x6e, 0xc8, 0x7f, 0x9b, 0xcb, 0x28, 0xbf, 0x59, 0x46, 0xb2, 0x65, 0x2f, 0xc4, 0x6f, 0xee, 0x5c, 0x24, 0x43, 0x72, 0x9, 0x8d, 0xf3, 0x5f, 0x2b, 0x67, 0x9f, 0x5a, 0xd6, 0xa0, 0x53, 0x2d, 0x54, 0xdc, 0x85, 0xaf, 0x9c, 0xf3, 0x59, 0x57, 0x56, 0xcf, 0x1, 0xe6, 0x7, 0xcc, 0x4f, 0x3b, 0x29, 0xce, 0xae, 0xf, 0xc4, 0xdb, 0xb2, 0x11, 0x11, 0x16, 0xf5, 0x1e, 0x31, 0xdf, 0x44, 0x7d, 0xe7, 0x3f, 0x33, 0x58, 0x72, 0xe, 0x7f, 0x5b, 0x4e, 0x7f, 0x7e, 0x1, 0x86, 0x6, 0x86, 0x26, 0xbf, 0xb6, 0xda, 0xf, 0xf3, 0xe6, 0x1c, 0x20, 0xd2, 0x0, 0xfe, 0x7d, 0xb1, 0x52, 0x5e, 0x6c, 0xcf, 0x47, 0x4c, 0x19, 0x4b, 0xc5, 0x61, 0x89, 0xfa, 0x86, 0x5d, 0xb9, 0xe8, 0x19, 0x73, 0x1e, 0x58, 0x31, 0xfb, 0xd4, 0x76, 0xf5, 0x8e, 0xae, 0x6a, 0xc, 0x5f, 0x75, 0xd3, 0xe7, 0x32, 0xc6, 0x71, 0x66, 0xd0, 0x98, 0x3f, 0x7a, 0x1e, 0x81, 0xf0, 0x14, 0x83, 0xbc, 0xcd, 0x1a, 0xa0, 0x77, 0x94, 0x27, 0x3, 0x79, 0x3d, 0xf8, 0xf1, 0xc3, 0xe4, 0x1b, 0x11, 0x7c, 0xbb, 0x49, 0x7e, 0x4d, 0x8, 0xb, 0xc3, 0xa, 0xec, 0x61, 0x21, 0x3b, 0x49, 0x2e, 0x6e, 0x48, 0x78, 0x6c, 0x65, 0x53, 0x2a, 0x8e, 0x1b, 0x32, 0x52, 0x79, 0xc6, 0x2b, 0x22, 0xbc, 0xcd, 0xa1, 0x77, 0xa, 0x8b, 0x1f, 0x25, 0x7c, 0x5f, 0x9c, 0x6f, 0x51, 0x18, 0x23, 0xca, 0x15, 0x67, 0xe3, 0x29, 0x28, 0x77, 0x44, 0x1d, 0xa, 0x3b, 0x6, 0x56, 0xdc, 0x43, 0x77, 0x8, 0x3, 0x0, 0xc0, 0x8a, 0xd9, 0xa7, 0xbc, 0x9, 0x98, 0x6f, 0x48, 0xb0, 0xc1, 0x4a, 0x97, 0x90, 0xcd, 0x3a, 0xa8, 0x72, 0x40, 0x71, 0xff, 0x40, 0x54, 0x13, 0xd8, 0xaa, 0x3d, 0xd3, 0x5e, 0xb0, 0xb5, 0x1d, 0x22, 0x30, 0x57, 0x80, 0xc5, 0x8, 0xec, 0xc6, 0xc5, 0x47, 0x1b, 0xe2, 0x17, 0x7f, 0xc7, 0x32, 0xf9, 0x97, 0xcb, 0xaf, 0x5c, 0x1e, 0x95, 0x94, 0xc5, 0xbb, 0xf7, 0x27, 0xc0, 0x34, 0x61, 0xd8, 0x15, 0x4f, 0x8c, 0xa9, 0x4b, 0x6, 0x0, 0x80, 0x15, 0x37, 0x9e, 0xf2, 0x2b, 0x81, 0x73, 0xfd, 0x59, 0x89, 0xe0, 0xbc, 0xdb, 0x9c, 0xdf, 0xa3, 0x1f, 0x6, 0x1, 0xaf, 0xd0, 0x38, 0xf3, 0x40, 0xf3, 0x3d, 0x90, 0x8f, 0xa3, 0x50, 0x4b, 0x66, 0x72, 0x3e, 0x92, 0x9d, 0x24, 0x8a, 0x24, 0x8, 0x61, 0x1c, 0x2, 0x1a, 0xe, 0x60, 0xca, 0x51, 0x57, 0x3d, 0x9d, 0x6e, 0xaf, 0xfc, 0x6a, 0x56, 0xe3, 0x68, 0x9c, 0xaf, 0xd2, 0x38, 0xbf, 0x1, 0xe8, 0x2, 0xc, 0x66, 0xa5, 0x8, 0xf0, 0x3, 0x81, 0x4f, 0x1, 0x9c, 0x4d, 0x9a, 0xff, 0x30, 0xc6, 0x4c, 0x5f, 0x31, 0xfb, 0x94, 0x6f, 0x3, 0xe6, 0x6b, 0xa0, 0xf9, 0x6d, 0x28, 0xae, 0xef, 0x27, 0x17, 0xb5, 0x6d, 0x5a, 0xa5, 0x17, 0x6a, 0xfc, 0xbe, 0xf3, 0x2f, 0x7f, 0xd2, 0x43, 0x79, 0xbc, 0x68, 0x8c, 0x9b, 0x75, 0xcf, 0x6b, 0x2f, 0x6, 0x48, 0xa4, 0xc9, 0x8c, 0xb8, 0xf2, 0xa9, 0x23, 0x24, 0xfb, 0x6b, 0x49, 0x69, 0x49, 0x1b, 0xc, 0xb9, 0x95, 0xc6, 0xac, 0x0, 0x78, 0xf3, 0xf2, 0x59, 0x27, 0xbd, 0x19, 0x11, 0xff, 0x13, 0xd6, 0xba, 0xf3, 0x25, 0x9d, 0x60, 0x72, 0xaa, 0x5b, 0xe8, 0xa0, 0xe4, 0x92, 0xc5, 0x6d, 0x4b, 0x6f, 0xd1, 0xd6, 0x78, 0x51, 0x71, 0xc3, 0xcf, 0x95, 0xa4, 0x53, 0xd, 0x4, 0x55, 0x8d, 0xcd, 0x43, 0x5e, 0x2f, 0xca, 0x47, 0x68, 0xcc, 0xf8, 0x95, 0xb3, 0x4f, 0x2e, 0x77, 0xa, 0x7a, 0xd5, 0x25, 0xa8, 0x19, 0x46, 0x5c, 0xf9, 0xd4, 0xf5, 0x92, 0x5e, 0x7, 0x39, 0x6f, 0xc5, 0xac, 0x93, 0xca, 0x6e, 0xf5, 0x3a, 0xfc, 0x4b, 0x4f, 0x35, 0x42, 0xf6, 0x69, 0x41, 0xc7, 0x78, 0x2, 0x1e, 0x73, 0x15, 0x66, 0x58, 0xa7, 0x8b, 0x41, 0x51, 0x78, 0xc, 0x29, 0x45, 0x22, 0x96, 0xf9, 0xbe, 0x38, 0x4e, 0x71, 0xfc, 0x28, 0x4, 0x29, 0x26, 0x8d, 0xf6, 0x60, 0x15, 0x7f, 0x78, 0x7c, 0x97, 0x34, 0x3f, 0x58, 0x31, 0xfb, 0xe4, 0x1f, 0x26, 0x9d, 0x7e, 0xa7, 0xe, 0x9a, 0x23, 0xaf, 0x59, 0x4a, 0xb7, 0x65, 0xfb, 0xe3, 0x24, 0x8e, 0x6, 0xd0, 0xc3, 0xdb, 0x3c, 0x23, 0xd8, 0x87, 0x24, 0x8a, 0x5, 0x18, 0xf1, 0x5c, 0xe9, 0xe4, 0x43, 0x5c, 0xba, 0xa5, 0x58, 0x24, 0xa, 0x65, 0xc5, 0xdf, 0x95, 0xcb, 0x2f, 0xae, 0x4c, 0x8c, 0xf9, 0x46, 0xc1, 0x7a, 0x4b, 0xff, 0xe0, 0x68, 0x3e, 0x63, 0x85, 0xcf, 0xaf, 0xba, 0xf1, 0x94, 0x44, 0xcd, 0xc1, 0x9d, 0x6a, 0xca, 0x5d, 0xf6, 0xd3, 0x63, 0xb5, 0xf2, 0xc6, 0x53, 0x4f, 0x25, 0x53, 0xb7, 0x4a, 0x7c, 0xc3, 0x57, 0xd5, 0x19, 0xbd, 0xce, 0x90, 0x31, 0xcf, 0x61, 0x4d, 0xa1, 0x54, 0xdc, 0x8, 0xbd, 0x32, 0x36, 0x9d, 0xb8, 0x30, 0x96, 0xf8, 0xae, 0x5c, 0x7e, 0x71, 0x71, 0xe2, 0xbe, 0xf1, 0xe4, 0xe3, 0x90, 0x6e, 0x3b, 0x84, 0xe4, 0xb7, 0x92, 0xa6, 0x41, 0x67, 0xdb, 0xf2, 0x1, 0x0, 0xcb, 0x67, 0x8d, 0xb9, 0x16, 0x34, 0xd7, 0x4a, 0x58, 0xf, 0xef, 0x4, 0x92, 0x28, 0x4a, 0xed, 0x56, 0x57, 0xb0, 0xb7, 0x72, 0xb9, 0xb0, 0x52, 0xdf, 0x6, 0x2e, 0x71, 0x7e, 0xf8, 0x36, 0x0, 0x1f, 0x24, 0x8d, 0xfb, 0xba, 0xd2, 0x9b, 0x86, 0x7f, 0xe9, 0xe9, 0xde, 0xa0, 0x1e, 0x25, 0x30, 0x24, 0x5f, 0xbc, 0xb8, 0x3d, 0x74, 0x6b, 0x19, 0x71, 0x4b, 0xa5, 0xd1, 0x16, 0xa9, 0x22, 0x4e, 0x7a, 0xc8, 0x7d, 0x17, 0xac, 0x95, 0xf4, 0x67, 0x2d, 0x73, 0x5d, 0x9b, 0xef, 0xc9, 0x62, 0x5b, 0x4f, 0xa5, 0x7, 0xdd, 0xbe, 0xb7, 0x4b, 0x46, 0xfe, 0x5b, 0x0, 0x92, 0x5e, 0x27, 0xf9, 0xff, 0x56, 0xcc, 0x3e, 0x69, 0x66, 0xd2, 0x38, 0x6f, 0x77, 0x4b, 0x53, 0x25, 0x60, 0xc, 0xcf, 0x12, 0xb0, 0x7f, 0xa1, 0x46, 0x10, 0xc7, 0xa3, 0x49, 0xf0, 0x6e, 0xb5, 0x69, 0xb3, 0xd5, 0x73, 0x89, 0x19, 0x41, 0x17, 0x40, 0xd6, 0x6f, 0xdc, 0x8d, 0x3e, 0x81, 0x63, 0x36, 0x88, 0x28, 0xdc, 0x37, 0xc0, 0x8f, 0xf3, 0xf, 0xc7, 0x38, 0xd7, 0x2f, 0xfb, 0xd9, 0x89, 0xb3, 0xd1, 0xe, 0x50, 0x17, 0x43, 0x40, 0x0, 0x56, 0x9a, 0x2, 0xb0, 0x4f, 0xcc, 0xa0, 0x19, 0x46, 0x54, 0x95, 0x57, 0xf8, 0xfb, 0xa8, 0xb4, 0xa2, 0xde, 0x17, 0x43, 0x41, 0x9a, 0xf2, 0xaf, 0x90, 0x15, 0x34, 0x6c, 0x14, 0x33, 0x24, 0xcd, 0x12, 0x63, 0x9c, 0x13, 0x49, 0x73, 0xa9, 0xf2, 0x7b, 0x39, 0xd2, 0x5b, 0xff, 0x58, 0xd0, 0xe5, 0xe7, 0xbc, 0x87, 0x83, 0xd6, 0xef, 0xf9, 0xf4, 0xf3, 0xb2, 0xf6, 0x22, 0x3e, 0x50, 0x6f, 0x3d, 0x0, 0xb9, 0xb7, 0x7f, 0xab, 0xe8, 0xa6, 0x5f, 0x6b, 0xab, 0x2f, 0x47, 0xe4, 0x36, 0x30, 0x41, 0x99, 0x11, 0x42, 0xc1, 0xc6, 0xf7, 0xc4, 0x12, 0x49, 0xff, 0x43, 0xf2, 0xe9, 0x65, 0x33, 0x47, 0x67, 0x0, 0xfc, 0x6e, 0xe4, 0x55, 0xcf, 0xbe, 0x2d, 0x6b, 0x7f, 0x9, 0x61, 0xcf, 0x12, 0xbe, 0x23, 0x16, 0xa0, 0x1, 0xf9, 0x24, 0xc9, 0x6f, 0x2e, 0x9b, 0x39, 0x7a, 0x59, 0x72, 0x18, 0x6e, 0xd, 0x75, 0xd3, 0x3, 0xc, 0xbf, 0xf2, 0x99, 0x43, 0xad, 0xd4, 0xd8, 0x7a, 0x7d, 0x21, 0x4a, 0x48, 0xe2, 0x40, 0xbc, 0x74, 0x8f, 0x98, 0x6f, 0xa3, 0x24, 0x7d, 0xc4, 0xe4, 0x17, 0x91, 0x6, 0x10, 0x78, 0xfb, 0x22, 0x98, 0xb4, 0xb, 0xc9, 0x76, 0xa4, 0x31, 0xf, 0xd2, 0x38, 0xa3, 0x40, 0xf3, 0x79, 0x3a, 0xd, 0x4f, 0x2c, 0xff, 0xd9, 0x89, 0x39, 0x1f, 0xc5, 0x65, 0x33, 0x47, 0x3f, 0xe, 0x9a, 0xa1, 0x2, 0x7e, 0xed, 0x37, 0x79, 0x81, 0x94, 0x37, 0xc9, 0xc8, 0x60, 0x1, 0x89, 0x1, 0x79, 0x9b, 0x80, 0x69, 0xed, 0x4d, 0x7c, 0xa0, 0x9e, 0x7a, 0x0, 0xa2, 0x1f, 0xc1, 0xc6, 0xdc, 0x53, 0x4e, 0xb2, 0x2a, 0xd7, 0x52, 0x5b, 0x79, 0xd0, 0xf8, 0xdd, 0x27, 0x83, 0x77, 0x88, 0x77, 0x57, 0x60, 0x44, 0x7a, 0xe5, 0x7b, 0x89, 0xfc, 0x9c, 0x7d, 0xe0, 0xe, 0x61, 0xfe, 0xa, 0x70, 0x11, 0xa8, 0x5b, 0x1, 0xbc, 0xe, 0x68, 0xe7, 0xf2, 0x99, 0xa3, 0x23, 0x3d, 0x72, 0x97, 0xff, 0x6c, 0xf4, 0x9f, 0x47, 0x5c, 0xf5, 0xec, 0x64, 0x8, 0x93, 0x24, 0x3b, 0x23, 0xa8, 0x82, 0xef, 0xdc, 0x42, 0x80, 0x5f, 0x3, 0x79, 0xc7, 0x8a, 0x99, 0x27, 0xbc, 0xd7, 0x11, 0x68, 0xaf, 0x1f, 0x6, 0x0, 0x8e, 0x5, 0xd8, 0xc3, 0xf7, 0xc9, 0xa8, 0xc8, 0xc9, 0xc4, 0x9f, 0x7d, 0xa, 0x3c, 0x68, 0x2, 0x46, 0x0, 0x80, 0xd0, 0x92, 0x6c, 0x0, 0x21, 0x71, 0xbd, 0x48, 0x66, 0xab, 0xc6, 0x9b, 0x97, 0x0, 0xb2, 0x20, 0x7, 0x81, 0xdc, 0x22, 0x69, 0xeb, 0xf2, 0x99, 0xa3, 0xdb, 0xe4, 0x88, 0xba, 0x7c, 0xe6, 0xe8, 0x77, 0x46, 0x5e, 0xbd, 0x64, 0x2e, 0xc4, 0xc5, 0x90, 0x9e, 0x5, 0x70, 0xa0, 0xa4, 0x77, 0x40, 0x4e, 0x4, 0xf4, 0xc2, 0xa, 0x6f, 0xc8, 0xe8, 0x10, 0xa8, 0x1b, 0x35, 0x70, 0xf8, 0x97, 0x9f, 0x7d, 0x9e, 0xc4, 0x31, 0xbe, 0x27, 0x47, 0x5b, 0x9, 0x92, 0xd7, 0xbb, 0x3c, 0xcf, 0xd9, 0xdb, 0x1, 0x2c, 0x5, 0x70, 0x32, 0xa0, 0xb3, 0x51, 0x62, 0xdb, 0xd9, 0x90, 0xb7, 0x50, 0x45, 0x6e, 0xed, 0x45, 0xbd, 0x4d, 0x66, 0xf9, 0xcc, 0xd1, 0xd, 0x6d, 0xfa, 0x30, 0x6, 0x46, 0x5e, 0xbd, 0xe4, 0x50, 0x49, 0xc3, 0x0, 0xac, 0x5f, 0x3e, 0xf3, 0x84, 0xd, 0xed, 0x89, 0xe3, 0x48, 0x3c, 0x74, 0x74, 0x86, 0x71, 0x30, 0xe2, 0xaa, 0xe7, 0xde, 0x2, 0xd0, 0x2b, 0xbc, 0xdf, 0x50, 0x29, 0xa2, 0x14, 0xbf, 0x97, 0xf4, 0x17, 0x80, 0x13, 0x1, 0xac, 0xa1, 0x77, 0x9e, 0x71, 0x2f, 0x0, 0x7b, 0x4a, 0x6a, 0x80, 0x77, 0xbc, 0x7d, 0xf, 0x0, 0x9f, 0x2, 0xd4, 0x17, 0xc0, 0xbe, 0x0, 0x3e, 0x9, 0x78, 0x1b, 0x51, 0x55, 0xea, 0xcf, 0x1f, 0xc, 0x33, 0x92, 0x32, 0xa4, 0xe9, 0xb6, 0x7c, 0xe6, 0xf1, 0xd9, 0xb6, 0x7e, 0x1b, 0x5, 0x47, 0x7f, 0x65, 0x69, 0xea, 0xf7, 0x33, 0x8e, 0xad, 0x29, 0x8d, 0x6a, 0xa1, 0x6e, 0x86, 0x0, 0x82, 0x3f, 0x17, 0xf4, 0x15, 0xf9, 0xb, 0xa1, 0x3c, 0xbf, 0x48, 0x8f, 0x28, 0x11, 0x94, 0xf1, 0x37, 0x44, 0xf4, 0x5, 0x32, 0x6f, 0x14, 0xb8, 0xce, 0xcd, 0xba, 0x7f, 0x58, 0x39, 0xfb, 0x44, 0xb, 0x60, 0x93, 0x7f, 0xe5, 0x60, 0xc4, 0xd5, 0x2f, 0x90, 0xb0, 0x3d, 0x0, 0xee, 0x9, 0x8f, 0x21, 0xfa, 0xc8, 0x6a, 0x89, 0x31, 0x74, 0x0, 0x6f, 0x71, 0x65, 0x5, 0x83, 0x8e, 0x7f, 0xca, 0x6d, 0x32, 0xde, 0x81, 0x9d, 0x45, 0x7c, 0xa0, 0x8e, 0x18, 0x40, 0xc0, 0x8f, 0x48, 0xb3, 0x44, 0xb2, 0x97, 0x82, 0x3c, 0x2d, 0x24, 0x4, 0x14, 0xf4, 0xba, 0x7e, 0x80, 0xbf, 0xf, 0x1e, 0x20, 0x6b, 0x9, 0xe0, 0xfb, 0x12, 0x1f, 0xf5, 0x89, 0x1f, 0x9, 0xcb, 0x6f, 0x38, 0x4e, 0x0, 0xb6, 0xf8, 0x17, 0x46, 0x5c, 0xb5, 0xe4, 0x75, 0x92, 0xbf, 0x15, 0x70, 0x1c, 0x80, 0x22, 0x51, 0xa1, 0x75, 0xe1, 0x42, 0x5c, 0xa8, 0xd0, 0x9e, 0x8c, 0xdb, 0xea, 0xa8, 0x13, 0xad, 0xa, 0xea, 0x46, 0xd, 0x5c, 0x3e, 0xf3, 0xf8, 0xd7, 0x97, 0xdd, 0x30, 0xea, 0x3e, 0x80, 0xd7, 0x1, 0xbc, 0x58, 0xc2, 0xaf, 0x3, 0xe7, 0x92, 0x22, 0x87, 0x11, 0x92, 0x46, 0xa1, 0x77, 0xbf, 0x7, 0xf8, 0xbf, 0xcb, 0x67, 0x1e, 0x5f, 0xd1, 0x59, 0x43, 0xc6, 0x18, 0xd2, 0x98, 0xbb, 0x42, 0xf6, 0xf9, 0x78, 0x3b, 0x7d, 0xa1, 0x4b, 0x97, 0x6f, 0xac, 0x81, 0x5, 0xf8, 0x1a, 0xda, 0xd7, 0x61, 0xa0, 0xdd, 0xa1, 0x6e, 0xd9, 0x77, 0xc4, 0x55, 0x4b, 0x8e, 0x4, 0x30, 0x82, 0xe4, 0x89, 0x0, 0xc6, 0x1, 0x8, 0x6f, 0x11, 0x13, 0x8c, 0xc1, 0x9b, 0x1, 0x9c, 0xb5, 0x7c, 0xe6, 0xf1, 0x4b, 0xaa, 0xc9, 0x63, 0xe4, 0xd5, 0x2f, 0x1c, 0x28, 0xd9, 0x4d, 0xfe, 0xb9, 0x88, 0xa5, 0x5c, 0x0, 0xa, 0xc0, 0xd7, 0x30, 0x32, 0x92, 0x16, 0x1, 0x98, 0xbc, 0x7c, 0xe6, 0xf1, 0x65, 0x17, 0x61, 0xd6, 0x2b, 0xd4, 0x2d, 0x3, 0x4, 0x30, 0xe2, 0xea, 0xe7, 0xfb, 0x0, 0x38, 0x3, 0xc0, 0xbf, 0x10, 0x3c, 0xa, 0xc0, 0x18, 0xdf, 0x4a, 0xb0, 0x43, 0xd0, 0x95, 0xcb, 0x6f, 0x18, 0x75, 0x47, 0x8d, 0xe9, 0x3f, 0x65, 0x68, 0x8e, 0x87, 0x77, 0xf6, 0x9e, 0xe7, 0x25, 0x1c, 0xc3, 0xa, 0xb2, 0x5, 0xea, 0xc2, 0x2e, 0x2b, 0xfb, 0x9f, 0x0, 0x7e, 0xb8, 0xfc, 0x86, 0x51, 0x5d, 0xc, 0xd0, 0x11, 0x70, 0xd4, 0x57, 0x96, 0xe, 0x7, 0x30, 0x9, 0x5e, 0x6f, 0xb0, 0xe9, 0xc5, 0x19, 0xc7, 0x7e, 0xb7, 0x96, 0xf4, 0x46, 0x5e, 0xb3, 0x94, 0x92, 0x3d, 0x95, 0xe4, 0xaf, 0x0, 0xec, 0x11, 0xee, 0x5, 0x22, 0xb4, 0x90, 0x9c, 0xfc, 0xe1, 0x3f, 0x5b, 0x0, 0x63, 0x49, 0xf3, 0x48, 0x67, 0x2c, 0x4d, 0x4f, 0xa, 0x76, 0x2b, 0x6, 0x68, 0xf, 0x18, 0x79, 0xcd, 0xd2, 0x3d, 0x24, 0xbd, 0x4c, 0xf2, 0xc0, 0x62, 0xb5, 0x33, 0xce, 0x5b, 0x59, 0xd2, 0x26, 0x92, 0x2f, 0x91, 0xbc, 0xf8, 0xc5, 0x19, 0xc7, 0x6c, 0x6a, 0x4b, 0x3e, 0xf5, 0xa, 0xff, 0xf4, 0xc, 0x0, 0x0, 0x23, 0xaf, 0x7e, 0xe1, 0x7a, 0x1a, 0x5e, 0x7, 0x20, 0xe5, 0xfb, 0x61, 0x65, 0x0, 0xec, 0x82, 0xb0, 0xb, 0xc4, 0xe, 0x0, 0x5b, 0x24, 0x6d, 0x26, 0xb9, 0xd, 0xc2, 0x66, 0x41, 0x4b, 0x8c, 0x31, 0xbf, 0xfb, 0xfd, 0x4f, 0x8e, 0x59, 0x57, 0x63, 0xd6, 0x9d, 0xe, 0x75, 0xa3, 0x6, 0x76, 0x26, 0xd0, 0x98, 0xff, 0x91, 0x74, 0x8, 0x80, 0x1e, 0x24, 0xb7, 0xc0, 0xdb, 0x5b, 0x6f, 0x33, 0xd, 0xdf, 0x3, 0xf0, 0xb6, 0xa4, 0x57, 0x1, 0xbc, 0xf4, 0xe2, 0x8c, 0x63, 0xdf, 0xe9, 0xec, 0xb2, 0x76, 0x41, 0x17, 0x74, 0x41, 0x17, 0x74, 0x41, 0x17, 0x74, 0x41, 0x17, 0x74, 0x41, 0x17, 0x74, 0x41, 0x17, 0xd4, 0x6, 0xff, 0x1f, 0x32, 0x68, 0x5, 0x7e, 0x99, 0xd5, 0x97, 0x49, 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 }; +static const unsigned char mini_checkerboard_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, 0xe, 0xc3, 0x0, 0x0, 0xe, 0xc3, 0x1, 0xc7, 0x6f, 0xa8, 0x64, 0x0, 0x0, 0x0, 0x19, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x0, 0x77, 0x77, 0x77, 0x2e, 0x69, 0x6e, 0x6b, 0x73, 0x63, 0x61, 0x70, 0x65, 0x2e, 0x6f, 0x72, 0x67, 0x9b, 0xee, 0x3c, 0x1a, 0x0, 0x0, 0x0, 0x33, 0x49, 0x44, 0x41, 0x54, 0x38, 0x8d, 0x63, 0x7c, 0xf0, 0xe0, 0xc1, 0x7f, 0x6, 0x3c, 0x40, 0x5e, 0x5e, 0x1e, 0x9f, 0x34, 0x3, 0x13, 0x5e, 0x59, 0x22, 0xc0, 0xa8, 0x1, 0x83, 0xc1, 0x0, 0xc6, 0xff, 0xff, 0xff, 0xe3, 0x4d, 0x7, 0xf, 0x1f, 0x3e, 0xa4, 0xad, 0xb, 0x46, 0xd, 0x18, 0xc, 0x6, 0x0, 0x0, 0x6e, 0x41, 0xa, 0xba, 0x94, 0xaa, 0x47, 0x57, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; + 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, 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 }; diff --git a/scene/resources/dynamic_font.cpp b/scene/resources/dynamic_font.cpp index 82739b58a0..1ee76a4216 100644 --- a/scene/resources/dynamic_font.cpp +++ b/scene/resources/dynamic_font.cpp @@ -397,7 +397,7 @@ unsigned long DynamicFontAtSize::_ft_stream_io(FT_Stream stream, unsigned long o FileAccess *f = (FileAccess *)stream->descriptor.pointer; - if (f->get_pos() != offset) { + if (f->get_position() != offset) { f->seek(offset); } @@ -560,8 +560,23 @@ void DynamicFontAtSize::_update_char(CharType p_char) { int ofs = ((i + tex_y + rect_margin) * tex.texture_size + j + tex_x + rect_margin) * 2; ERR_FAIL_COND(ofs >= tex.imgdata.size()); - wr[ofs + 0] = 255; //grayscale as 1 - wr[ofs + 1] = slot->bitmap.buffer[i * slot->bitmap.width + j]; + switch (slot->bitmap.pixel_mode) { + case FT_PIXEL_MODE_MONO: { + int byte = i * slot->bitmap.pitch + (j >> 3); + int bit = 1 << (7 - (j % 8)); + wr[ofs + 0] = 255; //grayscale as 1 + wr[ofs + 1] = slot->bitmap.buffer[byte] & bit ? 255 : 0; + } break; + case FT_PIXEL_MODE_GRAY: + wr[ofs + 0] = 255; //grayscale as 1 + wr[ofs + 1] = slot->bitmap.buffer[i * slot->bitmap.pitch + j]; + break; + // TODO: FT_PIXEL_MODE_LCD, FT_PIXEL_MODE_BGRA + default: + ERR_EXPLAIN("Font uses unsupported pixel format: " + itos(slot->bitmap.pixel_mode)); + ERR_FAIL(); + break; + } } } } diff --git a/scene/resources/environment.cpp b/scene/resources/environment.cpp index da3bc6a95b..4c6fa7c8a1 100644 --- a/scene/resources/environment.cpp +++ b/scene/resources/environment.cpp @@ -55,12 +55,11 @@ void Environment::set_sky(const Ref<Sky> &p_sky) { VS::get_singleton()->environment_set_sky(environment, sb_rid); } -void Environment::set_sky_scale(float p_scale) { +void Environment::set_sky_custom_fov(float p_scale) { - bg_sky_scale = p_scale; - VS::get_singleton()->environment_set_sky_scale(environment, p_scale); + bg_sky_custom_fov = p_scale; + VS::get_singleton()->environment_set_sky_custom_fov(environment, p_scale); } - void Environment::set_bg_color(const Color &p_color) { bg_color = p_color; @@ -101,9 +100,9 @@ Ref<Sky> Environment::get_sky() const { return bg_sky; } -float Environment::get_sky_scale() const { +float Environment::get_sky_custom_fov() const { - return bg_sky_scale; + return bg_sky_custom_fov; } Color Environment::get_bg_color() const { @@ -268,7 +267,7 @@ Ref<Texture> Environment::get_adjustment_color_correction() const { void Environment::_validate_property(PropertyInfo &property) const { - if (property.name == "background_sky" || property.name == "background_sky_scale" || property.name == "ambient_light/sky_contribution") { + if (property.name == "background_sky" || property.name == "background_sky_custom_fov" || property.name == "ambient_light/sky_contribution") { if (bg_mode != BG_SKY && bg_mode != BG_COLOR_SKY) { property.usage = PROPERTY_USAGE_NOEDITOR; } @@ -820,7 +819,7 @@ void Environment::_bind_methods() { ClassDB::bind_method(D_METHOD("set_background", "mode"), &Environment::set_background); ClassDB::bind_method(D_METHOD("set_sky", "sky"), &Environment::set_sky); - ClassDB::bind_method(D_METHOD("set_sky_scale", "scale"), &Environment::set_sky_scale); + ClassDB::bind_method(D_METHOD("set_sky_custom_fov", "scale"), &Environment::set_sky_custom_fov); ClassDB::bind_method(D_METHOD("set_bg_color", "color"), &Environment::set_bg_color); ClassDB::bind_method(D_METHOD("set_bg_energy", "energy"), &Environment::set_bg_energy); ClassDB::bind_method(D_METHOD("set_canvas_max_layer", "layer"), &Environment::set_canvas_max_layer); @@ -830,7 +829,7 @@ void Environment::_bind_methods() { ClassDB::bind_method(D_METHOD("get_background"), &Environment::get_background); ClassDB::bind_method(D_METHOD("get_sky"), &Environment::get_sky); - ClassDB::bind_method(D_METHOD("get_sky_scale"), &Environment::get_sky_scale); + ClassDB::bind_method(D_METHOD("get_sky_custom_fov"), &Environment::get_sky_custom_fov); ClassDB::bind_method(D_METHOD("get_bg_color"), &Environment::get_bg_color); ClassDB::bind_method(D_METHOD("get_bg_energy"), &Environment::get_bg_energy); ClassDB::bind_method(D_METHOD("get_canvas_max_layer"), &Environment::get_canvas_max_layer); @@ -841,7 +840,7 @@ void Environment::_bind_methods() { ADD_GROUP("Background", "background_"); ADD_PROPERTY(PropertyInfo(Variant::INT, "background_mode", PROPERTY_HINT_ENUM, "Clear Color,Custom Color,Sky,Color+Sky,Canvas,Keep"), "set_background", "get_background"); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "background_sky", PROPERTY_HINT_RESOURCE_TYPE, "Sky"), "set_sky", "get_sky"); - ADD_PROPERTY(PropertyInfo(Variant::REAL, "background_sky_scale", PROPERTY_HINT_RANGE, "0,32,0.01"), "set_sky_scale", "get_sky_scale"); + ADD_PROPERTY(PropertyInfo(Variant::REAL, "background_sky_custom_fov", PROPERTY_HINT_RANGE, "0,180,0.1"), "set_sky_custom_fov", "get_sky_custom_fov"); ADD_PROPERTY(PropertyInfo(Variant::COLOR, "background_color"), "set_bg_color", "get_bg_color"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "background_energy", PROPERTY_HINT_RANGE, "0,16,0.01"), "set_bg_energy", "get_bg_energy"); ADD_PROPERTY(PropertyInfo(Variant::INT, "background_canvas_max_layer", PROPERTY_HINT_RANGE, "-1000,1000,1"), "set_canvas_max_layer", "get_canvas_max_layer"); @@ -1142,7 +1141,7 @@ Environment::Environment() { environment = VS::get_singleton()->environment_create(); bg_mode = BG_CLEAR_COLOR; - bg_sky_scale = 1.0; + bg_sky_custom_fov = 0; bg_energy = 1.0; bg_canvas_max_layer = 0; ambient_energy = 1.0; diff --git a/scene/resources/environment.h b/scene/resources/environment.h index 9046ec1e49..5909846074 100644 --- a/scene/resources/environment.h +++ b/scene/resources/environment.h @@ -76,7 +76,7 @@ private: BGMode bg_mode; Ref<Sky> bg_sky; - float bg_sky_scale; + float bg_sky_custom_fov; Color bg_color; float bg_energy; int bg_canvas_max_layer; @@ -162,7 +162,7 @@ protected: public: void set_background(BGMode p_bg); void set_sky(const Ref<Sky> &p_sky); - void set_sky_scale(float p_scale); + void set_sky_custom_fov(float p_scale); void set_bg_color(const Color &p_color); void set_bg_energy(float p_energy); void set_canvas_max_layer(int p_max_layer); @@ -172,7 +172,7 @@ public: BGMode get_background() const; Ref<Sky> get_sky() const; - float get_sky_scale() const; + float get_sky_custom_fov() const; Color get_bg_color() const; float get_bg_energy() const; int get_canvas_max_layer() const; diff --git a/scene/resources/font.cpp b/scene/resources/font.cpp index ea75748b3d..2b44ea4554 100644 --- a/scene/resources/font.cpp +++ b/scene/resources/font.cpp @@ -80,13 +80,13 @@ void Font::update_changes() { void Font::_bind_methods() { - ClassDB::bind_method(D_METHOD("draw", "canvas_item", "pos", "string", "modulate", "clip_w"), &Font::draw, DEFVAL(Color(1, 1, 1)), DEFVAL(-1)); + ClassDB::bind_method(D_METHOD("draw", "canvas_item", "position", "string", "modulate", "clip_w"), &Font::draw, DEFVAL(Color(1, 1, 1)), DEFVAL(-1)); ClassDB::bind_method(D_METHOD("get_ascent"), &Font::get_ascent); ClassDB::bind_method(D_METHOD("get_descent"), &Font::get_descent); ClassDB::bind_method(D_METHOD("get_height"), &Font::get_height); ClassDB::bind_method(D_METHOD("is_distance_field_hint"), &Font::is_distance_field_hint); ClassDB::bind_method(D_METHOD("get_string_size", "string"), &Font::get_string_size); - ClassDB::bind_method(D_METHOD("draw_char", "canvas_item", "pos", "char", "next", "modulate"), &Font::draw_char, DEFVAL(-1), DEFVAL(Color(1, 1, 1))); + ClassDB::bind_method(D_METHOD("draw_char", "canvas_item", "position", "char", "next", "modulate"), &Font::draw_char, DEFVAL(-1), DEFVAL(Color(1, 1, 1))); ClassDB::bind_method(D_METHOD("update_changes"), &Font::update_changes); } diff --git a/scene/resources/material.cpp b/scene/resources/material.cpp index abe9a00c3f..b22a019319 100644 --- a/scene/resources/material.cpp +++ b/scene/resources/material.cpp @@ -268,6 +268,12 @@ void SpatialMaterial::init_shaders() { shader_names->grow = "grow"; + shader_names->ao_light_affect = "ao_light_affect"; + + shader_names->proximity_fade_distance = "proximity_fade_distance"; + shader_names->distance_fade_min = "distance_fade_min"; + shader_names->distance_fade_max = "distance_fade_max"; + shader_names->metallic_texture_channel = "metallic_texture_channel"; shader_names->roughness_texture_channel = "roughness_texture_channel"; shader_names->ao_texture_channel = "ao_texture_channel"; @@ -364,14 +370,14 @@ void SpatialMaterial::_update_shader() { case CULL_DISABLED: code += ",cull_disabled"; break; } switch (diffuse_mode) { + case DIFFUSE_BURLEY: code += ",diffuse_burley"; break; case DIFFUSE_LAMBERT: code += ",diffuse_lambert"; break; case DIFFUSE_LAMBERT_WRAP: code += ",diffuse_lambert_wrap"; break; case DIFFUSE_OREN_NAYAR: code += ",diffuse_oren_nayar"; break; - case DIFFUSE_BURLEY: code += ",diffuse_burley"; break; case DIFFUSE_TOON: code += ",diffuse_toon"; break; } switch (specular_mode) { - case SPECULAR_SCHLICK_GGX: code += ",specular_schlick_ggx"; break; + case SPECULAR_GGX: code += ",specular_ggx"; break; case SPECULAR_BLINN: code += ",specular_blinn"; break; case SPECULAR_PHONG: code += ",specular_phong"; break; case SPECULAR_TOON: code += ",specular_toon"; break; @@ -401,6 +407,14 @@ void SpatialMaterial::_update_shader() { code += "uniform float grow;\n"; } + if (proximity_fade_enabled) { + code += "uniform float proximity_fade_distance;\n"; + } + if (distance_fade_enabled) { + code += "uniform float distance_fade_min;\n"; + code += "uniform float distance_fade_max;\n"; + } + if (flags[FLAG_USE_ALPHA_SCISSOR]) { code += "uniform float alpha_scissor_threshold;\n"; } @@ -450,6 +464,7 @@ void SpatialMaterial::_update_shader() { if (features[FEATURE_AMBIENT_OCCLUSION]) { code += "uniform sampler2D texture_ambient_occlusion : hint_white;\n"; code += "uniform vec4 ao_texture_channel;\n"; + code += "uniform float ao_light_affect;\n"; } if (features[FEATURE_DETAIL]) { @@ -725,10 +740,21 @@ void SpatialMaterial::_update_shader() { code += "\tALBEDO *= 1.0 - ref_amount;\n"; code += "\tALPHA = 1.0;\n"; - } else if (features[FEATURE_TRANSPARENT] || features[FLAG_USE_ALPHA_SCISSOR]) { + } else if (features[FEATURE_TRANSPARENT] || flags[FLAG_USE_ALPHA_SCISSOR] || distance_fade_enabled || proximity_fade_enabled) { code += "\tALPHA = albedo.a * albedo_tex.a;\n"; } + if (proximity_fade_enabled) { + code += "\tfloat depth_tex = textureLod(DEPTH_TEXTURE,SCREEN_UV,0.0).r;\n"; + code += "\tvec4 world_pos = INV_PROJECTION_MATRIX * vec4(SCREEN_UV*2.0-1.0,depth_tex*2.0-1.0,1.0);\n"; + code += "\tworld_pos.xyz/=world_pos.w;\n"; + code += "\tALPHA*=clamp(1.0-smoothstep(world_pos.z+proximity_fade_distance,world_pos.z,VERTEX.z),0.0,1.0);\n"; + } + + if (distance_fade_enabled) { + code += "\tALPHA*=clamp(smoothstep(distance_fade_min,distance_fade_max,-VERTEX.z),0.0,1.0);\n"; + } + if (features[FEATURE_RIM]) { if (flags[FLAG_UV1_USE_TRIPLANAR]) { code += "\tvec2 rim_tex = triplanar_texture(texture_rim,uv1_power_normal,uv1_triplanar_pos).xy;\n"; @@ -773,6 +799,8 @@ void SpatialMaterial::_update_shader() { code += "\tAO = dot(texture(texture_ambient_occlusion,base_uv),ao_texture_channel);\n"; } } + + code += "\tAO_LIGHT_AFFECT = ao_light_affect;\n"; } if (features[FEATURE_SUBSURACE_SCATTERING]) { @@ -834,10 +862,10 @@ void SpatialMaterial::_update_shader() { code += "\tvec3 detail_norm = mix(NORMALMAP,detail_norm_tex.rgb,detail_tex.a);\n"; code += "\tNORMALMAP = mix(NORMALMAP,detail_norm,detail_mask_tex.r);\n"; code += "\tALBEDO.rgb = mix(ALBEDO.rgb,detail,detail_mask_tex.r);\n"; + } - if (flags[FLAG_USE_ALPHA_SCISSOR]) { - code += "\tALPHA_SCISSOR=alpha_scissor_threshold;\n"; - } + if (flags[FLAG_USE_ALPHA_SCISSOR]) { + code += "\tALPHA_SCISSOR=alpha_scissor_threshold;\n"; } code += "}\n"; @@ -989,6 +1017,16 @@ float SpatialMaterial::get_rim_tint() const { return rim_tint; } +void SpatialMaterial::set_ao_light_affect(float p_ao_light_affect) { + + ao_light_affect = p_ao_light_affect; + VS::get_singleton()->material_set_param(_get_material(), shader_names->ao_light_affect, p_ao_light_affect); +} +float SpatialMaterial::get_ao_light_affect() const { + + return ao_light_affect; +} + void SpatialMaterial::set_clearcoat(float p_clearcoat) { clearcoat = p_clearcoat; @@ -1204,6 +1242,15 @@ Ref<Texture> SpatialMaterial::get_texture(TextureParam p_param) const { return textures[p_param]; } +Ref<Texture> SpatialMaterial::get_texture_by_name(StringName p_name) const { + for (int i = 0; i < (int)SpatialMaterial::TEXTURE_MAX; i++) { + TextureParam param = TextureParam(i); + if (p_name == shader_names->texture_names[param]) + return textures[param]; + } + return Ref<Texture>(); +} + void SpatialMaterial::_validate_feature(const String &text, Feature feature, PropertyInfo &property) const { if (property.name.begins_with(text) && property.name != text + "_enabled" && !features[feature]) { property.usage = 0; @@ -1231,6 +1278,14 @@ void SpatialMaterial::_validate_property(PropertyInfo &property) const { property.usage = 0; } + if (property.name == "proximity_fade_distacne" && !proximity_fade_enabled) { + property.usage = 0; + } + + if ((property.name == "distance_fade_max_distance" || property.name == "distance_fade_min_distance") && !distance_fade_enabled) { + property.usage = 0; + } + if (property.name == "params_alpha_scissor_threshold" && !flags[FLAG_USE_ALPHA_SCISSOR]) { property.usage = 0; } @@ -1526,6 +1581,66 @@ void SpatialMaterial::set_on_top_of_alpha() { set_flag(FLAG_DISABLE_DEPTH_TEST, true); } +void SpatialMaterial::set_proximity_fade(bool p_enable) { + + proximity_fade_enabled = p_enable; + _queue_shader_change(); + _change_notify(); +} + +bool SpatialMaterial::is_proximity_fade_enabled() const { + + return proximity_fade_enabled; +} + +void SpatialMaterial::set_proximity_fade_distance(float p_distance) { + + proximity_fade_distance = p_distance; + VS::get_singleton()->material_set_param(_get_material(), shader_names->proximity_fade_distance, p_distance); +} +float SpatialMaterial::get_proximity_fade_distance() const { + + return proximity_fade_distance; +} + +void SpatialMaterial::set_distance_fade(bool p_enable) { + + distance_fade_enabled = p_enable; + _queue_shader_change(); + _change_notify(); +} +bool SpatialMaterial::is_distance_fade_enabled() const { + + return distance_fade_enabled; +} + +void SpatialMaterial::set_distance_fade_max_distance(float p_distance) { + + distance_fade_max_distance = p_distance; + VS::get_singleton()->material_set_param(_get_material(), shader_names->distance_fade_max, distance_fade_max_distance); +} +float SpatialMaterial::get_distance_fade_max_distance() const { + + return distance_fade_max_distance; +} + +void SpatialMaterial::set_distance_fade_min_distance(float p_distance) { + + distance_fade_min_distance = p_distance; + VS::get_singleton()->material_set_param(_get_material(), shader_names->distance_fade_min, distance_fade_min_distance); +} + +float SpatialMaterial::get_distance_fade_min_distance() const { + + return distance_fade_min_distance; +} + +RID SpatialMaterial::get_shader_rid() const { + + ERR_FAIL_COND_V(!shader_map.has(current_key), RID()); + return shader_map[current_key].shader; +} + void SpatialMaterial::_bind_methods() { ClassDB::bind_method(D_METHOD("set_albedo", "albedo"), &SpatialMaterial::set_albedo); @@ -1654,6 +1769,9 @@ void SpatialMaterial::_bind_methods() { ClassDB::bind_method(D_METHOD("set_grow", "amount"), &SpatialMaterial::set_grow); ClassDB::bind_method(D_METHOD("get_grow"), &SpatialMaterial::get_grow); + ClassDB::bind_method(D_METHOD("set_ao_light_affect", "amount"), &SpatialMaterial::set_ao_light_affect); + ClassDB::bind_method(D_METHOD("get_ao_light_affect"), &SpatialMaterial::get_ao_light_affect); + ClassDB::bind_method(D_METHOD("set_alpha_scissor_threshold", "threshold"), &SpatialMaterial::set_alpha_scissor_threshold); ClassDB::bind_method(D_METHOD("get_alpha_scissor_threshold"), &SpatialMaterial::get_alpha_scissor_threshold); @@ -1672,6 +1790,21 @@ void SpatialMaterial::_bind_methods() { ClassDB::bind_method(D_METHOD("set_refraction_texture_channel", "channel"), &SpatialMaterial::set_refraction_texture_channel); ClassDB::bind_method(D_METHOD("get_refraction_texture_channel"), &SpatialMaterial::get_refraction_texture_channel); + ClassDB::bind_method(D_METHOD("set_proximity_fade", "enabled"), &SpatialMaterial::set_proximity_fade); + ClassDB::bind_method(D_METHOD("is_proximity_fade_enabled"), &SpatialMaterial::is_proximity_fade_enabled); + + ClassDB::bind_method(D_METHOD("set_proximity_fade_distance", "distance"), &SpatialMaterial::set_proximity_fade_distance); + ClassDB::bind_method(D_METHOD("get_proximity_fade_distance"), &SpatialMaterial::get_proximity_fade_distance); + + ClassDB::bind_method(D_METHOD("set_distance_fade", "enabled"), &SpatialMaterial::set_distance_fade); + ClassDB::bind_method(D_METHOD("is_distance_fade_enabled"), &SpatialMaterial::is_distance_fade_enabled); + + ClassDB::bind_method(D_METHOD("set_distance_fade_max_distance", "distance"), &SpatialMaterial::set_distance_fade_max_distance); + ClassDB::bind_method(D_METHOD("get_distance_fade_max_distance"), &SpatialMaterial::get_distance_fade_max_distance); + + ClassDB::bind_method(D_METHOD("set_distance_fade_min_distance", "distance"), &SpatialMaterial::set_distance_fade_min_distance); + ClassDB::bind_method(D_METHOD("get_distance_fade_min_distance"), &SpatialMaterial::get_distance_fade_min_distance); + ADD_GROUP("Flags", "flags_"); ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "flags_transparent"), "set_feature", "get_feature", FEATURE_TRANSPARENT); ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "flags_unshaded"), "set_flag", "get_flag", FLAG_UNSHADED); @@ -1685,8 +1818,8 @@ void SpatialMaterial::_bind_methods() { ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "vertex_color_is_srgb"), "set_flag", "get_flag", FLAG_SRGB_VERTEX_COLOR); ADD_GROUP("Parameters", "params_"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "params_diffuse_mode", PROPERTY_HINT_ENUM, "Lambert,Lambert Wrap,Oren Nayar,Burley,Toon"), "set_diffuse_mode", "get_diffuse_mode"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "params_specular_mode", PROPERTY_HINT_ENUM, "SchlickGGX,Blinn,Phong,Toon,Disabled"), "set_specular_mode", "get_specular_mode"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "params_diffuse_mode", PROPERTY_HINT_ENUM, "Burley,Lambert,Lambert Wrap,Oren Nayar,Toon"), "set_diffuse_mode", "get_diffuse_mode"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "params_specular_mode", PROPERTY_HINT_ENUM, "GGX,Blinn,Phong,Toon,Disabled"), "set_specular_mode", "get_specular_mode"); ADD_PROPERTY(PropertyInfo(Variant::INT, "params_blend_mode", PROPERTY_HINT_ENUM, "Mix,Add,Sub,Mul"), "set_blend_mode", "get_blend_mode"); ADD_PROPERTY(PropertyInfo(Variant::INT, "params_cull_mode", PROPERTY_HINT_ENUM, "Back,Front,Disabled"), "set_cull_mode", "get_cull_mode"); ADD_PROPERTY(PropertyInfo(Variant::INT, "params_depth_draw_mode", PROPERTY_HINT_ENUM, "Opaque Only,Always,Never,Opaque Pre-Pass"), "set_depth_draw_mode", "get_depth_draw_mode"); @@ -1747,6 +1880,7 @@ void SpatialMaterial::_bind_methods() { ADD_GROUP("Ambient Occlusion", "ao_"); ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "ao_enabled"), "set_feature", "get_feature", FEATURE_AMBIENT_OCCLUSION); + ADD_PROPERTY(PropertyInfo(Variant::REAL, "ao_light_affect", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_ao_light_affect", "get_ao_light_affect"); ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "ao_texture", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_texture", "get_texture", TEXTURE_AMBIENT_OCCLUSION); ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "ao_on_uv2"), "set_flag", "get_flag", FLAG_AO_ON_UV2); ADD_PROPERTY(PropertyInfo(Variant::INT, "ao_texture_channel", PROPERTY_HINT_ENUM, "Red,Green,Blue,Alpha,Gray"), "set_ao_texture_channel", "get_ao_texture_channel"); @@ -1795,6 +1929,14 @@ void SpatialMaterial::_bind_methods() { ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "uv2_triplanar"), "set_flag", "get_flag", FLAG_UV2_USE_TRIPLANAR); ADD_PROPERTY(PropertyInfo(Variant::REAL, "uv2_triplanar_sharpness", PROPERTY_HINT_EXP_EASING), "set_uv2_triplanar_blend_sharpness", "get_uv2_triplanar_blend_sharpness"); + ADD_GROUP("Proximity Fade", "proximity_fade_"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "proximity_fade_enable"), "set_proximity_fade", "is_proximity_fade_enabled"); + ADD_PROPERTY(PropertyInfo(Variant::REAL, "proximity_fade_distance", PROPERTY_HINT_RANGE, "0,4096,0.1"), "set_proximity_fade_distance", "get_proximity_fade_distance"); + ADD_GROUP("Distance Fade", "distance_fade_"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "distance_fade_enable"), "set_distance_fade", "is_distance_fade_enabled"); + ADD_PROPERTY(PropertyInfo(Variant::REAL, "distance_fade_min_distance", PROPERTY_HINT_RANGE, "0,4096,0.1"), "set_distance_fade_min_distance", "get_distance_fade_min_distance"); + ADD_PROPERTY(PropertyInfo(Variant::REAL, "distance_fade_max_distance", PROPERTY_HINT_RANGE, "0,4096,0.1"), "set_distance_fade_max_distance", "get_distance_fade_max_distance"); + BIND_ENUM_CONSTANT(TEXTURE_ALBEDO); BIND_ENUM_CONSTANT(TEXTURE_METALLIC); BIND_ENUM_CONSTANT(TEXTURE_ROUGHNESS); @@ -1858,13 +2000,13 @@ void SpatialMaterial::_bind_methods() { BIND_ENUM_CONSTANT(FLAG_TRIPLANAR_USE_WORLD); BIND_ENUM_CONSTANT(FLAG_MAX); + BIND_ENUM_CONSTANT(DIFFUSE_BURLEY); BIND_ENUM_CONSTANT(DIFFUSE_LAMBERT); BIND_ENUM_CONSTANT(DIFFUSE_LAMBERT_WRAP); BIND_ENUM_CONSTANT(DIFFUSE_OREN_NAYAR); - BIND_ENUM_CONSTANT(DIFFUSE_BURLEY); BIND_ENUM_CONSTANT(DIFFUSE_TOON); - BIND_ENUM_CONSTANT(SPECULAR_SCHLICK_GGX); + BIND_ENUM_CONSTANT(SPECULAR_GGX); BIND_ENUM_CONSTANT(SPECULAR_BLINN); BIND_ENUM_CONSTANT(SPECULAR_PHONG); BIND_ENUM_CONSTANT(SPECULAR_TOON); @@ -1916,6 +2058,14 @@ SpatialMaterial::SpatialMaterial() set_particles_anim_loop(false); set_alpha_scissor_threshold(0.98); + proximity_fade_enabled = false; + distance_fade_enabled = false; + set_proximity_fade_distance(1); + set_distance_fade_min_distance(0); + set_distance_fade_max_distance(10); + + set_ao_light_affect(0.0); + set_metallic_texture_channel(TEXTURE_CHANNEL_RED); set_roughness_texture_channel(TEXTURE_CHANNEL_RED); set_ao_texture_channel(TEXTURE_CHANNEL_RED); @@ -1937,7 +2087,7 @@ SpatialMaterial::SpatialMaterial() flags[i] = 0; } diffuse_mode = DIFFUSE_LAMBERT; - specular_mode = SPECULAR_SCHLICK_GGX; + specular_mode = SPECULAR_GGX; for (int i = 0; i < FEATURE_MAX; i++) { features[i] = false; diff --git a/scene/resources/material.h b/scene/resources/material.h index fdb11982a8..942fb42363 100644 --- a/scene/resources/material.h +++ b/scene/resources/material.h @@ -185,15 +185,15 @@ public: }; enum DiffuseMode { + DIFFUSE_BURLEY, DIFFUSE_LAMBERT, DIFFUSE_LAMBERT_WRAP, DIFFUSE_OREN_NAYAR, - DIFFUSE_BURLEY, DIFFUSE_TOON, }; enum SpecularMode { - SPECULAR_SCHLICK_GGX, + SPECULAR_GGX, SPECULAR_BLINN, SPECULAR_PHONG, SPECULAR_TOON, @@ -232,6 +232,8 @@ private: uint64_t deep_parallax : 1; uint64_t billboard_mode : 2; uint64_t grow : 1; + uint64_t proximity_fade : 1; + uint64_t distance_fade : 1; }; uint64_t key; @@ -274,6 +276,8 @@ private: mk.billboard_mode = billboard_mode; mk.deep_parallax = deep_parallax ? 1 : 0; mk.grow = grow_enabled; + mk.proximity_fade = proximity_fade_enabled; + mk.distance_fade = distance_fade_enabled; return mk; } @@ -308,6 +312,10 @@ private: StringName uv1_blend_sharpness; StringName uv2_blend_sharpness; StringName grow; + StringName proximity_fade_distance; + StringName distance_fade_min; + StringName distance_fade_max; + StringName ao_light_affect; StringName metallic_texture_channel; StringName roughness_texture_channel; @@ -351,6 +359,7 @@ private: float point_size; float alpha_scissor_threshold; bool grow_enabled; + float ao_light_affect; float grow; int particles_anim_h_frames; int particles_anim_v_frames; @@ -370,6 +379,13 @@ private: int deep_parallax_min_layers; int deep_parallax_max_layers; + bool proximity_fade_enabled; + float proximity_fade_distance; + + bool distance_fade_enabled; + float distance_fade_max_distance; + float distance_fade_min_distance; + BlendMode blend_mode; BlendMode detail_blend_mode; DepthDrawMode depth_draw_mode; @@ -429,6 +445,9 @@ public: void set_rim_tint(float p_rim_tint); float get_rim_tint() const; + void set_ao_light_affect(float p_ao_light_affect); + float get_ao_light_affect() const; + void set_clearcoat(float p_clearcoat); float get_clearcoat() const; @@ -491,6 +510,8 @@ public: void set_texture(TextureParam p_param, const Ref<Texture> &p_texture); Ref<Texture> get_texture(TextureParam p_param) const; + // Used only for shader material conversion + Ref<Texture> get_texture_by_name(StringName p_name) const; void set_feature(Feature p_feature, bool p_enabled); bool get_feature(Feature p_feature) const; @@ -535,6 +556,21 @@ public: void set_on_top_of_alpha(); + void set_proximity_fade(bool p_enable); + bool is_proximity_fade_enabled() const; + + void set_proximity_fade_distance(float p_distance); + float get_proximity_fade_distance() const; + + void set_distance_fade(bool p_enable); + bool is_distance_fade_enabled() const; + + void set_distance_fade_max_distance(float p_distance); + float get_distance_fade_max_distance() const; + + void set_distance_fade_min_distance(float p_distance); + float get_distance_fade_min_distance() const; + void set_metallic_texture_channel(TextureChannel p_channel); TextureChannel get_metallic_texture_channel() const; void set_roughness_texture_channel(TextureChannel p_channel); @@ -550,6 +586,8 @@ public: static RID get_material_rid_for_2d(bool p_shaded, bool p_transparent, bool p_double_sided, bool p_cut_alpha, bool p_opaque_prepass); + RID get_shader_rid() const; + SpatialMaterial(); virtual ~SpatialMaterial(); }; diff --git a/scene/resources/scene_format_text.cpp b/scene/resources/scene_format_text.cpp index 14e2ef83f8..f0304bfaa5 100644 --- a/scene/resources/scene_format_text.cpp +++ b/scene/resources/scene_format_text.cpp @@ -679,7 +679,7 @@ Error ResourceInteractiveLoaderText::rename_dependencies(FileAccess *p_f, const String base_path = local_path.get_base_dir(); - uint64_t tag_end = f->get_pos(); + uint64_t tag_end = f->get_position(); while (true) { @@ -741,7 +741,7 @@ Error ResourceInteractiveLoaderText::rename_dependencies(FileAccess *p_f, const fw->store_line("[ext_resource path=\"" + path + "\" type=\"" + type + "\" id=" + itos(index) + "]"); - tag_end = f->get_pos(); + tag_end = f->get_position(); } } diff --git a/scene/resources/shader.cpp b/scene/resources/shader.cpp index ec41630258..66df7dfda8 100644 --- a/scene/resources/shader.cpp +++ b/scene/resources/shader.cpp @@ -43,8 +43,6 @@ void Shader::set_code(const String &p_code) { String type = ShaderLanguage::get_shader_type(p_code); - print_line("mode: " + type); - if (type == "canvas_item") { mode = MODE_CANVAS_ITEM; } else if (type == "particles") { diff --git a/scene/resources/shader_graph.cpp b/scene/resources/shader_graph.cpp index 2ca9a14562..3813854922 100644 --- a/scene/resources/shader_graph.cpp +++ b/scene/resources/shader_graph.cpp @@ -172,8 +172,8 @@ void ShaderGraph::_bind_methods() { ClassDB::bind_method(D_METHOD("node_add","shader_type","node_type","id"),&ShaderGraph::node_add); ClassDB::bind_method(D_METHOD("node_remove","shader_type","id"),&ShaderGraph::node_remove); - ClassDB::bind_method(D_METHOD("node_set_pos","shader_type","id","pos"),&ShaderGraph::node_set_pos); - ClassDB::bind_method(D_METHOD("node_get_pos","shader_type","id"),&ShaderGraph::node_get_pos); + ClassDB::bind_method(D_METHOD("node_set_position","shader_type","id","position"),&ShaderGraph::node_set_position); + ClassDB::bind_method(D_METHOD("node_get_position","shader_type","id"),&ShaderGraph::node_get_position); ClassDB::bind_method(D_METHOD("node_get_type","shader_type","id"),&ShaderGraph::node_get_type); @@ -501,7 +501,7 @@ void ShaderGraph::node_add(ShaderType p_type, NodeType p_node_type,int p_id) { _request_update(); } -void ShaderGraph::node_set_pos(ShaderType p_type,int p_id, const Vector2& p_pos) { +void ShaderGraph::node_set_position(ShaderType p_type,int p_id, const Vector2& p_pos) { ERR_FAIL_INDEX(p_type,3); ERR_FAIL_COND(!shader[p_type].node_map.has(p_id)); @@ -509,7 +509,7 @@ void ShaderGraph::node_set_pos(ShaderType p_type,int p_id, const Vector2& p_pos) _request_update(); } -Vector2 ShaderGraph::node_get_pos(ShaderType p_type,int p_id) const { +Vector2 ShaderGraph::node_get_position(ShaderType p_type,int p_id) const { ERR_FAIL_INDEX_V(p_type,3,Vector2()); ERR_FAIL_COND_V(!shader[p_type].node_map.has(p_id),Vector2()); @@ -1245,7 +1245,7 @@ Variant ShaderGraph::node_get_state(ShaderType p_type,int p_id) const { ERR_FAIL_COND_V(!shader[p_type].node_map.has(p_id),Variant()); const Node& n = shader[p_type].node_map[p_id]; Dictionary s; - s["pos"]=n.pos; + s["position"]=n.pos; s["param1"]=n.param1; s["param2"]=n.param2; Array keys; @@ -1263,12 +1263,12 @@ void ShaderGraph::node_set_state(ShaderType p_type,int p_id,const Variant& p_sta ERR_FAIL_COND(!shader[p_type].node_map.has(p_id)); Node& n = shader[p_type].node_map[p_id]; Dictionary d = p_state; - ERR_FAIL_COND(!d.has("pos")); + ERR_FAIL_COND(!d.has("position")); ERR_FAIL_COND(!d.has("param1")); ERR_FAIL_COND(!d.has("param2")); ERR_FAIL_COND(!d.has("default_keys")); - n.pos=d["pos"]; + n.pos=d["position"]; n.param1=d["param1"]; n.param2=d["param2"]; Array keys = d["default_keys"]; diff --git a/scene/resources/shader_graph.h b/scene/resources/shader_graph.h index 9a74b6c53a..5d9dd7054f 100644 --- a/scene/resources/shader_graph.h +++ b/scene/resources/shader_graph.h @@ -195,8 +195,8 @@ public: void node_add(ShaderType p_type, NodeType p_node_type, int p_id); void node_remove(ShaderType p_which,int p_id); - void node_set_pos(ShaderType p_which,int p_id,const Point2& p_pos); - Point2 node_get_pos(ShaderType p_which,int p_id) const; + void node_set_position(ShaderType p_which,int p_id,const Point2& p_pos); + Point2 node_get_position(ShaderType p_which,int p_id) const; void get_node_list(ShaderType p_which,List<int> *p_node_list) const; NodeType node_get_type(ShaderType p_which,int p_id) const; diff --git a/scene/resources/style_box.cpp b/scene/resources/style_box.cpp index b8a0a7864e..f4a9abc1ea 100644 --- a/scene/resources/style_box.cpp +++ b/scene/resources/style_box.cpp @@ -765,7 +765,7 @@ void StyleBoxFlat::_bind_methods() { ClassDB::bind_method(D_METHOD("set_border_blend", "blend"), &StyleBoxFlat::set_border_blend); ClassDB::bind_method(D_METHOD("get_border_blend"), &StyleBoxFlat::get_border_blend); - ClassDB::bind_method(D_METHOD("set_corner_radius_individual", "radius_top_left", "radius_top_right", "radius_botton_right", "radius_bottom_left"), &StyleBoxFlat::set_corner_radius_individual); + ClassDB::bind_method(D_METHOD("set_corner_radius_individual", "radius_top_left", "radius_top_right", "radius_bottom_right", "radius_bottom_left"), &StyleBoxFlat::set_corner_radius_individual); ClassDB::bind_method(D_METHOD("set_corner_radius_all", "radius"), &StyleBoxFlat::set_corner_radius_all); ClassDB::bind_method(D_METHOD("set_corner_radius", "corner", "radius"), &StyleBoxFlat::set_corner_radius); diff --git a/scene/resources/texture.cpp b/scene/resources/texture.cpp index 6a9ded9ea3..467f059fd3 100644 --- a/scene/resources/texture.cpp +++ b/scene/resources/texture.cpp @@ -70,7 +70,7 @@ void Texture::_bind_methods() { ClassDB::bind_method(D_METHOD("has_alpha"), &Texture::has_alpha); ClassDB::bind_method(D_METHOD("set_flags", "flags"), &Texture::set_flags); ClassDB::bind_method(D_METHOD("get_flags"), &Texture::get_flags); - ClassDB::bind_method(D_METHOD("draw", "canvas_item", "pos", "modulate", "transpose", "normal_map"), &Texture::draw, DEFVAL(Color(1, 1, 1)), DEFVAL(false), DEFVAL(Variant())); + ClassDB::bind_method(D_METHOD("draw", "canvas_item", "position", "modulate", "transpose", "normal_map"), &Texture::draw, DEFVAL(Color(1, 1, 1)), DEFVAL(false), DEFVAL(Variant())); ClassDB::bind_method(D_METHOD("draw_rect", "canvas_item", "rect", "tile", "modulate", "transpose", "normal_map"), &Texture::draw_rect, DEFVAL(Color(1, 1, 1)), DEFVAL(false), DEFVAL(Variant())); ClassDB::bind_method(D_METHOD("draw_rect_region", "canvas_item", "rect", "src_rect", "modulate", "transpose", "normal_map", "clip_uv"), &Texture::draw_rect_region, DEFVAL(Color(1, 1, 1)), DEFVAL(false), DEFVAL(Variant()), DEFVAL(true)); ClassDB::bind_method(D_METHOD("get_data"), &Texture::get_data); @@ -78,11 +78,11 @@ void Texture::_bind_methods() { BIND_ENUM_CONSTANT(FLAG_MIPMAPS); BIND_ENUM_CONSTANT(FLAG_REPEAT); BIND_ENUM_CONSTANT(FLAG_FILTER); - BIND_ENUM_CONSTANT(FLAG_VIDEO_SURFACE); BIND_ENUM_CONSTANT(FLAGS_DEFAULT); BIND_ENUM_CONSTANT(FLAG_ANISOTROPIC_FILTER); BIND_ENUM_CONSTANT(FLAG_CONVERT_TO_LINEAR); BIND_ENUM_CONSTANT(FLAG_MIRRORED_REPEAT); + BIND_ENUM_CONSTANT(FLAG_VIDEO_SURFACE); } Texture::Texture() { @@ -488,7 +488,7 @@ Error StreamTexture::_load_data(const String &p_path, int &tw, int &th, int &fla while (mipmaps > 1 && p_size_limit > 0 && (sw > p_size_limit || sh > p_size_limit)) { - f->seek(f->get_pos() + size); + f->seek(f->get_position() + size); mipmaps = f->get_32(); size = f->get_32(); @@ -610,7 +610,7 @@ Error StreamTexture::_load_data(const String &p_path, int &tw, int &th, int &fla ERR_FAIL_V(ERR_FILE_CORRUPT); } - f->seek(f->get_pos() + ofs); + f->seek(f->get_position() + ofs); PoolVector<uint8_t> img_data; img_data.resize(total_size - ofs); @@ -1324,10 +1324,8 @@ void CubeMap::_bind_methods() { ClassDB::bind_method(D_METHOD("get_width"), &CubeMap::get_width); ClassDB::bind_method(D_METHOD("get_height"), &CubeMap::get_height); - //ClassDB::bind_method(D_METHOD("get_rid"),&CubeMap::get_rid); ClassDB::bind_method(D_METHOD("set_flags", "flags"), &CubeMap::set_flags); ClassDB::bind_method(D_METHOD("get_flags"), &CubeMap::get_flags); - ClassDB::bind_method(D_METHOD("set_side", "side", "image"), &CubeMap::set_side); ClassDB::bind_method(D_METHOD("get_side", "side"), &CubeMap::get_side); ClassDB::bind_method(D_METHOD("set_storage", "mode"), &CubeMap::set_storage); @@ -1335,6 +1333,9 @@ void CubeMap::_bind_methods() { ClassDB::bind_method(D_METHOD("set_lossy_storage_quality", "quality"), &CubeMap::set_lossy_storage_quality); ClassDB::bind_method(D_METHOD("get_lossy_storage_quality"), &CubeMap::get_lossy_storage_quality); + ADD_PROPERTY(PropertyInfo(Variant::INT, "storage_mode", PROPERTY_HINT_ENUM, "Raw,Lossy Compressed,Lossless Compressed"), "set_storage", "get_storage"); + ADD_PROPERTY(PropertyInfo(Variant::REAL, "lossy_storage_quality"), "set_lossy_storage_quality", "get_lossy_storage_quality"); + BIND_ENUM_CONSTANT(STORAGE_RAW); BIND_ENUM_CONSTANT(STORAGE_COMPRESS_LOSSY); BIND_ENUM_CONSTANT(STORAGE_COMPRESS_LOSSLESS); diff --git a/scene/resources/video_stream.h b/scene/resources/video_stream.h index e08be02a07..0f07233185 100644 --- a/scene/resources/video_stream.h +++ b/scene/resources/video_stream.h @@ -55,8 +55,8 @@ public: virtual float get_length() const = 0; - virtual float get_pos() const = 0; - virtual void seek_pos(float p_time) = 0; + virtual float get_playback_position() const = 0; + virtual void seek(float p_time) = 0; virtual void set_audio_track(int p_idx) = 0; diff --git a/scene/scene_string_names.cpp b/scene/scene_string_names.cpp index 6b7168a529..d9770ec3f3 100644 --- a/scene/scene_string_names.cpp +++ b/scene/scene_string_names.cpp @@ -87,7 +87,7 @@ SceneStringNames::SceneStringNames() { _get_gizmo_geometry = StaticCString::create("_get_gizmo_geometry"); _can_gizmo_scale = StaticCString::create("_can_gizmo_scale"); - _fixed_process = StaticCString::create("_fixed_process"); + _physics_process = StaticCString::create("_physics_process"); _process = StaticCString::create("_process"); _enter_tree = StaticCString::create("_enter_tree"); diff --git a/scene/scene_string_names.h b/scene/scene_string_names.h index 8676b8436e..3b110e7a62 100644 --- a/scene/scene_string_names.h +++ b/scene/scene_string_names.h @@ -106,7 +106,7 @@ public: StringName _get_gizmo_geometry; StringName _can_gizmo_scale; - StringName _fixed_process; + StringName _physics_process; StringName _process; StringName _enter_world; StringName _exit_world; diff --git a/servers/arvr/arvr_interface.cpp b/servers/arvr/arvr_interface.cpp index 0705df17b1..55707def7c 100644 --- a/servers/arvr/arvr_interface.cpp +++ b/servers/arvr/arvr_interface.cpp @@ -31,29 +31,49 @@ void ARVRInterface::_bind_methods() { ClassDB::bind_method(D_METHOD("get_name"), &ARVRInterface::get_name); + ClassDB::bind_method(D_METHOD("get_capabilities"), &ARVRInterface::get_capabilities); ClassDB::bind_method(D_METHOD("is_primary"), &ARVRInterface::is_primary); ClassDB::bind_method(D_METHOD("set_is_primary", "enable"), &ARVRInterface::set_is_primary); - ClassDB::bind_method(D_METHOD("is_installed"), &ARVRInterface::is_installed); - ClassDB::bind_method(D_METHOD("hmd_is_present"), &ARVRInterface::hmd_is_present); - ClassDB::bind_method(D_METHOD("supports_hmd"), &ARVRInterface::supports_hmd); ClassDB::bind_method(D_METHOD("is_initialized"), &ARVRInterface::is_initialized); + ClassDB::bind_method(D_METHOD("set_is_initialized", "initialized"), &ARVRInterface::set_is_initialized); ClassDB::bind_method(D_METHOD("initialize"), &ARVRInterface::initialize); ClassDB::bind_method(D_METHOD("uninitialize"), &ARVRInterface::uninitialize); + ClassDB::bind_method(D_METHOD("get_tracking_status"), &ARVRInterface::get_tracking_status); + ClassDB::bind_method(D_METHOD("get_recommended_render_targetsize"), &ARVRInterface::get_recommended_render_targetsize); + ClassDB::bind_method(D_METHOD("is_stereo"), &ARVRInterface::is_stereo); + + ADD_GROUP("Interface", "interface_"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "interface_is_primary"), "set_is_primary", "is_primary"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "interface_is_initialized"), "set_is_initialized", "is_initialized"); + + // we don't have any properties specific to VR yet.... - // These are now purely used internally, we may expose them again if we expose CameraMatrix through Variant but reduz is not a fan for good reasons :) - // ClassDB::bind_method(D_METHOD("get_transform_for_eye", "eye", "cam_transform"), &ARVRInterface::get_transform_for_eye); - // ClassDB::bind_method(D_METHOD("get_projection_for_eye", "eye"), &ARVRInterface::get_projection_for_eye); - // ClassDB::bind_method(D_METHOD("commit_for_eye", "node:viewport"), &ARVRInterface::commit_for_eye); + // but we do have properties specific to AR.... + ClassDB::bind_method(D_METHOD("get_anchor_detection_is_enabled"), &ARVRInterface::get_anchor_detection_is_enabled); + ClassDB::bind_method(D_METHOD("set_anchor_detection_is_enabled", "enable"), &ARVRInterface::set_anchor_detection_is_enabled); - ADD_PROPERTY(PropertyInfo(Variant::BOOL, "primary"), "set_is_primary", "is_primary"); + ADD_GROUP("AR", "ar_"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "ar_is_anchor_detection_enabled"), "set_anchor_detection_is_enabled", "get_anchor_detection_is_enabled"); + + BIND_ENUM_CONSTANT(ARVR_NONE); + BIND_ENUM_CONSTANT(ARVR_MONO); + BIND_ENUM_CONSTANT(ARVR_STEREO); + BIND_ENUM_CONSTANT(ARVR_AR); + BIND_ENUM_CONSTANT(ARVR_EXTERNAL); BIND_ENUM_CONSTANT(EYE_MONO); BIND_ENUM_CONSTANT(EYE_LEFT); BIND_ENUM_CONSTANT(EYE_RIGHT); + + BIND_ENUM_CONSTANT(ARVR_NORMAL_TRACKING); + BIND_ENUM_CONSTANT(ARVR_EXCESSIVE_MOTION); + BIND_ENUM_CONSTANT(ARVR_INSUFFICIENT_FEATURES); + BIND_ENUM_CONSTANT(ARVR_UNKNOWN_TRACKING); + BIND_ENUM_CONSTANT(ARVR_NOT_TRACKING); }; StringName ARVRInterface::get_name() const { @@ -73,10 +93,40 @@ void ARVRInterface::set_is_primary(bool p_is_primary) { if (p_is_primary) { ERR_FAIL_COND(!is_initialized()); - ERR_FAIL_COND(!supports_hmd()); arvr_server->set_primary_interface(this); } else { arvr_server->clear_primary_interface_if(this); }; }; + +void ARVRInterface::set_is_initialized(bool p_initialized) { + if (p_initialized) { + if (!is_initialized()) { + initialize(); + }; + } else { + if (is_initialized()) { + uninitialize(); + }; + }; +}; + +ARVRInterface::Tracking_status ARVRInterface::get_tracking_status() const { + return tracking_state; +}; + +ARVRInterface::ARVRInterface() { + tracking_state = ARVR_UNKNOWN_TRACKING; +}; + +ARVRInterface::~ARVRInterface(){}; + +/** these will only be implemented on AR interfaces, so we want dummies for VR **/ +bool ARVRInterface::get_anchor_detection_is_enabled() const { + return false; +}; + +void ARVRInterface::set_anchor_detection_is_enabled(bool p_enable){ + // don't do anything here, this needs to be implemented on AR interface to enable/disable things like plane detection etc. +}; diff --git a/servers/arvr/arvr_interface.h b/servers/arvr/arvr_interface.h index d4fb383bbc..880f6e4595 100644 --- a/servers/arvr/arvr_interface.h +++ b/servers/arvr/arvr_interface.h @@ -50,31 +50,59 @@ class ARVRInterface : public Reference { GDCLASS(ARVRInterface, Reference); -protected: - _THREAD_SAFE_CLASS_ - - static void _bind_methods(); - public: + enum Capabilities { /* purely meta data, provides some info about what this interface supports */ + ARVR_NONE = 0, /* no capabilities */ + ARVR_MONO = 1, /* can be used with mono output */ + ARVR_STEREO = 2, /* can be used with stereo output */ + ARVR_AR = 4, /* offers a camera feed for AR */ + ARVR_EXTERNAL = 8 /* renders to external device */ + }; + enum Eyes { EYE_MONO, /* my son says we should call this EYE_CYCLOPS */ EYE_LEFT, EYE_RIGHT }; + enum Tracking_status { /* tracking status currently based on AR but we can start doing more with this for VR as well */ + ARVR_NORMAL_TRACKING, + ARVR_EXCESSIVE_MOTION, + ARVR_INSUFFICIENT_FEATURES, + ARVR_UNKNOWN_TRACKING, + ARVR_NOT_TRACKING + }; + +protected: + _THREAD_SAFE_CLASS_ + + Tracking_status tracking_state; + static void _bind_methods(); + +public: + /** general interface information **/ virtual StringName get_name() const; + virtual int get_capabilities() const = 0; bool is_primary(); void set_is_primary(bool p_is_primary); - virtual bool is_installed() = 0; /* returns true if the middle ware related to this interface has been installed */ - virtual bool hmd_is_present() = 0; /* returns true if our HMD is connected */ - virtual bool supports_hmd() = 0; /* returns true is this interface handles output to an HMD or only handles positioning */ - virtual bool is_initialized() = 0; /* returns true if we've initialized this interface */ + void set_is_initialized(bool p_initialized); /* helper function, will call initialize or uninitialize */ virtual bool initialize() = 0; /* initialize this interface, if this has an HMD it becomes the primary interface */ virtual void uninitialize() = 0; /* deinitialize this interface */ + Tracking_status get_tracking_status() const; /* get the status of our current tracking */ + + /** specific to VR **/ + // nothing yet + + /** specific to AR **/ + virtual bool get_anchor_detection_is_enabled() const; + virtual void set_anchor_detection_is_enabled(bool p_enable); + + /** rendering and internal **/ + virtual Size2 get_recommended_render_targetsize() = 0; /* returns the recommended render target size per eye for this device */ virtual bool is_stereo() = 0; /* returns true if this interface requires stereo rendering (for VR HMDs) or mono rendering (for mobile AR) */ virtual Transform get_transform_for_eye(ARVRInterface::Eyes p_eye, const Transform &p_cam_transform) = 0; /* get each eyes camera transform, also implement EYE_MONO */ @@ -82,8 +110,13 @@ public: virtual void commit_for_eye(ARVRInterface::Eyes p_eye, RID p_render_target, const Rect2 &p_screen_rect) = 0; /* output the left or right eye */ virtual void process() = 0; + + ARVRInterface(); + ~ARVRInterface(); }; +VARIANT_ENUM_CAST(ARVRInterface::Capabilities); VARIANT_ENUM_CAST(ARVRInterface::Eyes); +VARIANT_ENUM_CAST(ARVRInterface::Tracking_status); #endif diff --git a/servers/arvr/arvr_script_interface.cpp b/servers/arvr/arvr_script_interface.cpp deleted file mode 100644 index 16e607920e..0000000000 --- a/servers/arvr/arvr_script_interface.cpp +++ /dev/null @@ -1,127 +0,0 @@ -#include "arvr_script_interface.h" - -ARVRScriptInterface::ARVRScriptInterface() { - // testing - printf("Construct script interface"); -} - -ARVRScriptInterface::~ARVRScriptInterface() { - if (is_initialized()) { - uninitialize(); - }; - - // testing - printf("Destruct script interface"); -} - -StringName ARVRScriptInterface::get_name() const { - if (get_script_instance() && get_script_instance()->has_method("get_name")) { - return get_script_instance()->call("get_name"); - } else { - // just return something for now - return "ARVR Script interface"; - } -} - -bool ARVRScriptInterface::is_installed() { - ERR_FAIL_COND_V(!(get_script_instance() && get_script_instance()->has_method("is_installed")), false); - return get_script_instance()->call("is_installed"); -} - -bool ARVRScriptInterface::hmd_is_present() { - ERR_FAIL_COND_V(!(get_script_instance() && get_script_instance()->has_method("hmd_is_present")), false); - return get_script_instance()->call("hmd_is_present"); -} - -bool ARVRScriptInterface::supports_hmd() { - ERR_FAIL_COND_V(!(get_script_instance() && get_script_instance()->has_method("supports_hmd")), false); - return get_script_instance()->call("supports_hmd"); -} - -bool ARVRScriptInterface::is_stereo() { - ERR_FAIL_COND_V(!(get_script_instance() && get_script_instance()->has_method("is_stereo")), false); - return get_script_instance()->call("is_stereo"); -} - -bool ARVRScriptInterface::is_initialized() { - ERR_FAIL_COND_V(!(get_script_instance() && get_script_instance()->has_method("is_initialized")), false); - return get_script_instance()->call("is_initialized"); -} - -bool ARVRScriptInterface::initialize() { - ERR_FAIL_COND_V(!(get_script_instance() && get_script_instance()->has_method("initialize")), false); - return get_script_instance()->call("initialize"); -} - -void ARVRScriptInterface::uninitialize() { - ARVRServer *arvr_server = ARVRServer::get_singleton(); - if (arvr_server != NULL) { - // Whatever happens, make sure this is no longer our primary interface - arvr_server->clear_primary_interface_if(this); - } - - ERR_FAIL_COND(!(get_script_instance() && get_script_instance()->has_method("uninitialize"))); - get_script_instance()->call("uninitialize"); -} - -Size2 ARVRScriptInterface::get_recommended_render_targetsize() { - ERR_FAIL_COND_V(!(get_script_instance() && get_script_instance()->has_method("get_recommended_render_targetsize")), Size2()); - return get_script_instance()->call("get_recommended_render_targetsize"); -} - -Transform ARVRScriptInterface::get_transform_for_eye(Eyes p_eye, const Transform &p_cam_transform) { - ERR_FAIL_COND_V(!(get_script_instance() && get_script_instance()->has_method("get_transform_for_eye")), Transform()); - return get_script_instance()->call("get_transform_for_eye", p_eye, p_cam_transform); -} - -// Suggestion from Reduz, as we can't return a CameraMatrix, return a PoolVector with our 16 floats -PoolVector<float> ARVRScriptInterface::_get_projection_for_eye(Eyes p_eye, real_t p_aspect, real_t p_z_near, real_t p_z_far) { - ERR_FAIL_COND_V(!(get_script_instance() && get_script_instance()->has_method("_get_projection_for_eye")), PoolVector<float>()); - return get_script_instance()->call("_get_projection_for_eye", p_eye, p_aspect, p_z_near, p_z_far); -} - -CameraMatrix ARVRScriptInterface::get_projection_for_eye(Eyes p_eye, real_t p_aspect, real_t p_z_near, real_t p_z_far) { - CameraMatrix cm; - int i = 0; - int j = 0; - - PoolVector<float> cm_as_floats = _get_projection_for_eye(p_eye, p_aspect, p_z_near, p_z_far); - - for (int k = 0; k < cm_as_floats.size() && i < 4; k++) { - cm.matrix[i][j] = cm_as_floats[k]; - j++; - if (j == 4) { - j = 0; - i++; - }; - }; - - return cm; -} - -void ARVRScriptInterface::commit_for_eye(ARVRInterface::Eyes p_eye, RID p_render_target, const Rect2 &p_screen_rect) { - ERR_FAIL_COND(!(get_script_instance() && get_script_instance()->has_method("commit_for_eye"))); - get_script_instance()->call("commit_for_eye"); -} - -void ARVRScriptInterface::process() { - ERR_FAIL_COND(!(get_script_instance() && get_script_instance()->has_method("process"))); - get_script_instance()->call("process"); -} - -void ARVRScriptInterface::_bind_methods() { - ClassDB::add_virtual_method(get_class_static(), MethodInfo(Variant::BOOL, "is_installed")); - ClassDB::add_virtual_method(get_class_static(), MethodInfo(Variant::BOOL, "hmd_is_present")); - ClassDB::add_virtual_method(get_class_static(), MethodInfo(Variant::BOOL, "supports_hmd")); - - ClassDB::add_virtual_method(get_class_static(), MethodInfo(Variant::BOOL, "is_initialized")); - ClassDB::add_virtual_method(get_class_static(), MethodInfo(Variant::BOOL, "initialize")); - ClassDB::add_virtual_method(get_class_static(), MethodInfo("uninitialize")); - - ClassDB::add_virtual_method(get_class_static(), MethodInfo(Variant::BOOL, "is_stereo")); - ClassDB::add_virtual_method(get_class_static(), MethodInfo(Variant::VECTOR2, "get_recommended_render_targetsize")); - ClassDB::add_virtual_method(get_class_static(), MethodInfo(Variant::TRANSFORM, "get_transform_for_eye", PropertyInfo(Variant::INT, "eye"), PropertyInfo(Variant::TRANSFORM, "cam_transform"))); - ClassDB::add_virtual_method(get_class_static(), MethodInfo("_get_projection_for_eye")); - ClassDB::add_virtual_method(get_class_static(), MethodInfo("commit_for_eye", PropertyInfo(Variant::INT, "eye"), PropertyInfo(Variant::_RID, "render_target"))); - ClassDB::add_virtual_method(get_class_static(), MethodInfo("process")); -} diff --git a/servers/arvr/arvr_script_interface.h b/servers/arvr/arvr_script_interface.h deleted file mode 100644 index 04ca33901a..0000000000 --- a/servers/arvr/arvr_script_interface.h +++ /dev/null @@ -1,47 +0,0 @@ -#ifndef SCRIPT_INTERFACE_H -#define SCRIPT_INTERFACE_H - -#include "arvr_interface.h" - -/** - @authors Hinsbart & Karroffel - - This subclass of our AR/VR interface forms a bridge to GDNative. -*/ - -class ARVRScriptInterface : public ARVRInterface { - GDCLASS(ARVRScriptInterface, ARVRInterface); - -protected: - static void _bind_methods(); - -public: - ARVRScriptInterface(); - ~ARVRScriptInterface(); - - virtual StringName get_name() const; - - virtual bool is_installed(); - virtual bool hmd_is_present(); - virtual bool supports_hmd(); - - virtual bool is_initialized(); - virtual bool initialize(); - virtual void uninitialize(); - - virtual Size2 get_recommended_render_targetsize(); - virtual bool is_stereo(); - virtual Transform get_transform_for_eye(ARVRInterface::Eyes p_eye, const Transform &p_cam_transform); - - // we expose a PoolVector<float> version of this function to GDNative - PoolVector<float> _get_projection_for_eye(Eyes p_eye, real_t p_aspect, real_t p_z_near, real_t p_z_far); - - // and a CameraMatrix version to ARVRServer - virtual CameraMatrix get_projection_for_eye(ARVRInterface::Eyes p_eye, real_t p_aspect, real_t p_z_near, real_t p_z_far); - - virtual void commit_for_eye(ARVRInterface::Eyes p_eye, RID p_render_target, const Rect2 &p_screen_rect); - - virtual void process(); -}; - -#endif // SCRIPT_INTERFACE_H diff --git a/servers/arvr_server.cpp b/servers/arvr_server.cpp index 5d8cf20c92..ede080b424 100644 --- a/servers/arvr_server.cpp +++ b/servers/arvr_server.cpp @@ -43,7 +43,7 @@ void ARVRServer::_bind_methods() { ClassDB::bind_method(D_METHOD("get_world_scale"), &ARVRServer::get_world_scale); ClassDB::bind_method(D_METHOD("set_world_scale"), &ARVRServer::set_world_scale); ClassDB::bind_method(D_METHOD("get_reference_frame"), &ARVRServer::get_reference_frame); - ClassDB::bind_method(D_METHOD("request_reference_frame", "ignore_tilt", "keep_height"), &ARVRServer::request_reference_frame); + ClassDB::bind_method(D_METHOD("center_on_hmd", "ignore_tilt", "keep_height"), &ARVRServer::center_on_hmd); ADD_PROPERTY(PropertyInfo(Variant::REAL, "world_scale"), "set_world_scale", "get_world_scale"); @@ -53,16 +53,16 @@ void ARVRServer::_bind_methods() { ClassDB::bind_method(D_METHOD("get_tracker_count"), &ARVRServer::get_tracker_count); ClassDB::bind_method(D_METHOD("get_tracker", "idx"), &ARVRServer::get_tracker); - ClassDB::bind_method(D_METHOD("set_primary_interface"), &ARVRServer::set_primary_interface); + ClassDB::bind_method(D_METHOD("set_primary_interface", "interface"), &ARVRServer::set_primary_interface); - ClassDB::bind_method(D_METHOD("add_interface"), &ARVRServer::add_interface); - ClassDB::bind_method(D_METHOD("remove_interface"), &ARVRServer::remove_interface); + ClassDB::bind_method(D_METHOD("add_interface", "interface"), &ARVRServer::add_interface); + ClassDB::bind_method(D_METHOD("remove_interface", "interface"), &ARVRServer::remove_interface); BIND_ENUM_CONSTANT(TRACKER_CONTROLLER); BIND_ENUM_CONSTANT(TRACKER_BASESTATION); BIND_ENUM_CONSTANT(TRACKER_ANCHOR); - BIND_ENUM_CONSTANT(TRACKER_UNKNOWN); BIND_ENUM_CONSTANT(TRACKER_ANY_KNOWN); + BIND_ENUM_CONSTANT(TRACKER_UNKNOWN); BIND_ENUM_CONSTANT(TRACKER_ANY); ADD_SIGNAL(MethodInfo("interface_added", PropertyInfo(Variant::STRING, "name"))); @@ -98,7 +98,7 @@ Transform ARVRServer::get_reference_frame() const { return reference_frame; }; -void ARVRServer::request_reference_frame(bool p_ignore_tilt, bool p_keep_height) { +void ARVRServer::center_on_hmd(bool p_ignore_tilt, bool p_keep_height) { if (primary_interface != NULL) { // clear our current reference frame or we'll end up double adjusting it reference_frame = Transform(); @@ -138,7 +138,7 @@ void ARVRServer::add_interface(const Ref<ARVRInterface> &p_interface) { }; }; - print_line("Registered interface " + p_interface->get_name()); + print_line("ARVR: Registered interface: " + p_interface->get_name()); interfaces.push_back(p_interface); emit_signal("interface_added", p_interface->get_name()); diff --git a/servers/arvr_server.h b/servers/arvr_server.h index 2645637ad5..948895cb27 100644 --- a/servers/arvr_server.h +++ b/servers/arvr_server.h @@ -117,14 +117,17 @@ public: void set_world_origin(const Transform p_world_origin); /* - Requesting a reference frame results in a matrix being calculated that ensures the HMD is positioned to 0,0,0 facing 0,0,-1 (need to verify this direction) + center_on_hmd calculates a new reference frame. This ensures the HMD is positioned to 0,0,0 facing 0,0,-1 (need to verify this direction) in the virtual world. + You can ignore the tilt of the device ensuring you're looking straight forward even if the player is looking down or sideways. + You can chose to keep the height the tracking provides which is important for room scale capable tracking. + Note: this should not be used in AR and should be ignored by an AR based interface as it would throw what you're looking at in the real world and in the virtual world out of sync */ Transform get_reference_frame() const; - void request_reference_frame(bool p_ignore_tilt, bool p_keep_height); + void center_on_hmd(bool p_ignore_tilt, bool p_keep_height); /* Interfaces are objects that 'glue' Godot to an AR or VR SDK such as the Oculus SDK, OpenVR, OpenHMD, etc. diff --git a/servers/audio/audio_stream.cpp b/servers/audio/audio_stream.cpp index dd4240f028..0e3d5824d9 100644 --- a/servers/audio/audio_stream.cpp +++ b/servers/audio/audio_stream.cpp @@ -178,16 +178,16 @@ int AudioStreamPlaybackRandomPitch::get_loop_count() const { return 0; } -float AudioStreamPlaybackRandomPitch::get_pos() const { +float AudioStreamPlaybackRandomPitch::get_playback_position() const { if (playing.is_valid()) { - return playing->get_pos(); + return playing->get_playback_position(); } return 0; } -void AudioStreamPlaybackRandomPitch::seek_pos(float p_time) { +void AudioStreamPlaybackRandomPitch::seek(float p_time) { if (playing.is_valid()) { - playing->seek_pos(p_time); + playing->seek(p_time); } } diff --git a/servers/audio/audio_stream.h b/servers/audio/audio_stream.h index c7cb63ef2c..3324597b41 100644 --- a/servers/audio/audio_stream.h +++ b/servers/audio/audio_stream.h @@ -45,8 +45,8 @@ public: virtual int get_loop_count() const = 0; //times it looped - virtual float get_pos() const = 0; - virtual void seek_pos(float p_time) = 0; + virtual float get_playback_position() const = 0; + virtual void seek(float p_time) = 0; virtual void mix(AudioFrame *p_bufer, float p_rate_scale, int p_frames) = 0; @@ -133,8 +133,8 @@ public: virtual int get_loop_count() const; //times it looped - virtual float get_pos() const; - virtual void seek_pos(float p_time); + virtual float get_playback_position() const; + virtual void seek(float p_time); virtual void mix(AudioFrame *p_bufer, float p_rate_scale, int p_frames); diff --git a/servers/audio/effects/audio_effect_chorus.cpp b/servers/audio/effects/audio_effect_chorus.cpp index 76dd585ffa..32631beb2c 100644 --- a/servers/audio/effects/audio_effect_chorus.cpp +++ b/servers/audio/effects/audio_effect_chorus.cpp @@ -182,9 +182,8 @@ Ref<AudioEffectInstance> AudioEffectChorus::instance() { void AudioEffectChorus::set_voice_count(int p_voices) { - ERR_FAIL_COND(p_voices < 1 || p_voices >= MAX_VOICES); + ERR_FAIL_COND(p_voices < 1 || p_voices > MAX_VOICES); voice_count = p_voices; - _change_notify(); } int AudioEffectChorus::get_voice_count() const { diff --git a/servers/audio/effects/audio_effect_filter.cpp b/servers/audio/effects/audio_effect_filter.cpp index 019494c74a..95354230c6 100644 --- a/servers/audio/effects/audio_effect_filter.cpp +++ b/servers/audio/effects/audio_effect_filter.cpp @@ -158,7 +158,7 @@ void AudioEffectFilter::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::REAL, "cutoff_hz", PROPERTY_HINT_RANGE, "1,40000,0.1"), "set_cutoff", "get_cutoff"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "resonance", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_resonance", "get_resonance"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "gain", PROPERTY_HINT_RANGE, "0,4,0.01"), "set_gain", "get_gain"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "dB", PROPERTY_HINT_ENUM, "6db,12db,18db,24db"), "set_db", "get_db"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "db", PROPERTY_HINT_ENUM, "6 dB,12 dB,18 dB,24 dB"), "set_db", "get_db"); BIND_ENUM_CONSTANT(FILTER_6DB); BIND_ENUM_CONSTANT(FILTER_12DB); diff --git a/servers/audio/effects/audio_effect_limiter.cpp b/servers/audio/effects/audio_effect_limiter.cpp index 9787ba8109..c50dd804f2 100644 --- a/servers/audio/effects/audio_effect_limiter.cpp +++ b/servers/audio/effects/audio_effect_limiter.cpp @@ -110,7 +110,7 @@ void AudioEffectLimiter::set_soft_clip_ratio(float p_soft_clip) { } float AudioEffectLimiter::get_soft_clip_ratio() const { - return soft_clip; + return soft_clip_ratio; } void AudioEffectLimiter::_bind_methods() { diff --git a/servers/audio_server.cpp b/servers/audio_server.cpp index 78efe85e16..18b7014595 100644 --- a/servers/audio_server.cpp +++ b/servers/audio_server.cpp @@ -1088,7 +1088,7 @@ void AudioServer::_bind_methods() { ClassDB::bind_method(D_METHOD("get_bus_count"), &AudioServer::get_bus_count); ClassDB::bind_method(D_METHOD("remove_bus", "index"), &AudioServer::remove_bus); - ClassDB::bind_method(D_METHOD("add_bus", "at_pos"), &AudioServer::add_bus, DEFVAL(-1)); + ClassDB::bind_method(D_METHOD("add_bus", "at_position"), &AudioServer::add_bus, DEFVAL(-1)); ClassDB::bind_method(D_METHOD("move_bus", "index", "to_index"), &AudioServer::move_bus); ClassDB::bind_method(D_METHOD("set_bus_name", "bus_idx", "name"), &AudioServer::set_bus_name); @@ -1110,7 +1110,7 @@ void AudioServer::_bind_methods() { ClassDB::bind_method(D_METHOD("set_bus_bypass_effects", "bus_idx", "enable"), &AudioServer::set_bus_bypass_effects); ClassDB::bind_method(D_METHOD("is_bus_bypassing_effects", "bus_idx"), &AudioServer::is_bus_bypassing_effects); - ClassDB::bind_method(D_METHOD("add_bus_effect", "bus_idx", "effect", "at_pos"), &AudioServer::add_bus_effect, DEFVAL(-1)); + ClassDB::bind_method(D_METHOD("add_bus_effect", "bus_idx", "effect", "at_position"), &AudioServer::add_bus_effect, DEFVAL(-1)); ClassDB::bind_method(D_METHOD("remove_bus_effect", "bus_idx", "effect_idx"), &AudioServer::remove_bus_effect); ClassDB::bind_method(D_METHOD("get_bus_effect_count", "bus_idx"), &AudioServer::get_bus_effect_count); diff --git a/servers/physics/body_sw.h b/servers/physics/body_sw.h index 7e8d31f8eb..782bf14a4b 100644 --- a/servers/physics/body_sw.h +++ b/servers/physics/body_sw.h @@ -399,7 +399,7 @@ public: virtual int get_contact_count() const { return body->contact_count; } - virtual Vector3 get_contact_local_pos(int p_contact_idx) const { + virtual Vector3 get_contact_local_position(int p_contact_idx) const { ERR_FAIL_INDEX_V(p_contact_idx, body->contact_count, Vector3()); return body->contacts[p_contact_idx].local_pos; } @@ -416,7 +416,7 @@ public: ERR_FAIL_INDEX_V(p_contact_idx, body->contact_count, RID()); return body->contacts[p_contact_idx].collider; } - virtual Vector3 get_contact_collider_pos(int p_contact_idx) const { + virtual Vector3 get_contact_collider_position(int p_contact_idx) const { ERR_FAIL_INDEX_V(p_contact_idx, body->contact_count, Vector3()); return body->contacts[p_contact_idx].collider_pos; } @@ -428,7 +428,7 @@ public: ERR_FAIL_INDEX_V(p_contact_idx, body->contact_count, 0); return body->contacts[p_contact_idx].collider_shape; } - virtual Vector3 get_contact_collider_velocity_at_pos(int p_contact_idx) const { + virtual Vector3 get_contact_collider_velocity_at_position(int p_contact_idx) const { ERR_FAIL_INDEX_V(p_contact_idx, body->contact_count, Vector3()); return body->contacts[p_contact_idx].collider_velocity_at_pos; } diff --git a/servers/physics/joints/pin_joint_sw.h b/servers/physics/joints/pin_joint_sw.h index 670c1ab61f..f6c11c49b0 100644 --- a/servers/physics/joints/pin_joint_sw.h +++ b/servers/physics/joints/pin_joint_sw.h @@ -86,8 +86,8 @@ public: void set_pos_a(const Vector3 &p_pos) { m_pivotInA = p_pos; } void set_pos_b(const Vector3 &p_pos) { m_pivotInB = p_pos; } - Vector3 get_pos_a() { return m_pivotInB; } - Vector3 get_pos_b() { return m_pivotInA; } + Vector3 get_position_a() { return m_pivotInA; } + Vector3 get_position_b() { return m_pivotInB; } PinJointSW(BodySW *p_body_a, const Vector3 &p_pos_a, BodySW *p_body_b, const Vector3 &p_pos_b); ~PinJointSW(); diff --git a/servers/physics/physics_server_sw.cpp b/servers/physics/physics_server_sw.cpp index 2d46770924..a7c31cf16c 100644 --- a/servers/physics/physics_server_sw.cpp +++ b/servers/physics/physics_server_sw.cpp @@ -183,7 +183,7 @@ PhysicsDirectSpaceState *PhysicsServerSW::space_get_direct_state(RID p_space) { ERR_FAIL_COND_V(!space, NULL); if (!doing_sync || space->is_locked()) { - ERR_EXPLAIN("Space state is inaccessible right now, wait for iteration or fixed process notification."); + ERR_EXPLAIN("Space state is inaccessible right now, wait for iteration or physics process notification."); ERR_FAIL_V(NULL); } @@ -914,6 +914,21 @@ bool PhysicsServerSW::body_test_motion(RID p_body, const Transform &p_from, cons return body->get_space()->test_body_motion(body, p_from, p_motion, p_margin, r_result); } +PhysicsDirectBodyState *PhysicsServerSW::body_get_direct_state(RID p_body) { + + BodySW *body = body_owner.get(p_body); + ERR_FAIL_COND_V(!body, NULL); + + if (!doing_sync || body->get_space()->is_locked()) { + + ERR_EXPLAIN("Body state is inaccessible right now, wait for iteration or physics process notification."); + ERR_FAIL_V(NULL); + } + + direct_state->body = body; + return direct_state; +} + /* JOINT API */ RID PhysicsServerSW::joint_create_pin(RID p_body_A, const Vector3 &p_local_A, RID p_body_B, const Vector3 &p_local_B) { @@ -968,7 +983,7 @@ Vector3 PhysicsServerSW::pin_joint_get_local_a(RID p_joint) const { ERR_FAIL_COND_V(!joint, Vector3()); ERR_FAIL_COND_V(joint->get_type() != JOINT_PIN, Vector3()); PinJointSW *pin_joint = static_cast<PinJointSW *>(joint); - return pin_joint->get_pos_a(); + return pin_joint->get_position_a(); } void PhysicsServerSW::pin_joint_set_local_b(RID p_joint, const Vector3 &p_B) { @@ -985,7 +1000,7 @@ Vector3 PhysicsServerSW::pin_joint_get_local_b(RID p_joint) const { ERR_FAIL_COND_V(!joint, Vector3()); ERR_FAIL_COND_V(joint->get_type() != JOINT_PIN, Vector3()); PinJointSW *pin_joint = static_cast<PinJointSW *>(joint); - return pin_joint->get_pos_b(); + return pin_joint->get_position_b(); } RID PhysicsServerSW::joint_create_hinge(RID p_body_A, const Transform &p_frame_A, RID p_body_B, const Transform &p_frame_B) { diff --git a/servers/physics/physics_server_sw.h b/servers/physics/physics_server_sw.h index 99ba302acd..f9eb8fa454 100644 --- a/servers/physics/physics_server_sw.h +++ b/servers/physics/physics_server_sw.h @@ -95,7 +95,7 @@ public: virtual void space_set_param(RID p_space, SpaceParameter p_param, real_t p_value); virtual real_t space_get_param(RID p_space, SpaceParameter p_param) const; - // this function only works on fixed process, errors and returns null otherwise + // this function only works on physics process, errors and returns null otherwise virtual PhysicsDirectSpaceState *space_get_direct_state(RID p_space); virtual void space_set_debug_contacts(RID p_space, int p_max_contacts); @@ -223,6 +223,9 @@ public: virtual bool body_test_motion(RID p_body, const Transform &p_from, const Vector3 &p_motion, float p_margin = 0.001, MotionResult *r_result = NULL); + // this function only works on physics process, errors and returns null otherwise + virtual PhysicsDirectBodyState *body_get_direct_state(RID p_body); + /* JOINT API */ virtual RID joint_create_pin(RID p_body_A, const Vector3 &p_local_A, RID p_body_B, const Vector3 &p_local_B); diff --git a/servers/physics/space_sw.cpp b/servers/physics/space_sw.cpp index 17e2df6c9e..7e68d54bfa 100644 --- a/servers/physics/space_sw.cpp +++ b/servers/physics/space_sw.cpp @@ -33,9 +33,9 @@ #include "physics_server_sw.h" #include "project_settings.h" -_FORCE_INLINE_ static bool _match_object_type_query(CollisionObjectSW *p_object, uint32_t p_collision_layer, uint32_t p_type_mask) { +_FORCE_INLINE_ static bool _match_object_type_query(CollisionObjectSW *p_object, uint32_t p_collision_mask, uint32_t p_type_mask) { - if ((p_object->get_collision_layer() & p_collision_layer) == 0) + if ((p_object->get_collision_layer() & p_collision_mask) == 0) return false; if (p_object->get_type() == CollisionObjectSW::TYPE_AREA) @@ -46,7 +46,7 @@ _FORCE_INLINE_ static bool _match_object_type_query(CollisionObjectSW *p_object, return (1 << body->get_mode()) & p_type_mask; } -int PhysicsDirectSpaceStateSW::intersect_point(const Vector3 &p_point, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude, uint32_t p_collision_layer, uint32_t p_object_type_mask) { +int PhysicsDirectSpaceStateSW::intersect_point(const Vector3 &p_point, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude, uint32_t p_collision_mask, uint32_t p_object_type_mask) { ERR_FAIL_COND_V(space->locked, false); int amount = space->broadphase->cull_point(p_point, space->intersection_query_results, SpaceSW::INTERSECTION_QUERY_MAX, space->intersection_query_subindex_results); @@ -59,7 +59,7 @@ int PhysicsDirectSpaceStateSW::intersect_point(const Vector3 &p_point, ShapeResu if (cc >= p_result_max) break; - if (!_match_object_type_query(space->intersection_query_results[i], p_collision_layer, p_object_type_mask)) + if (!_match_object_type_query(space->intersection_query_results[i], p_collision_mask, p_object_type_mask)) continue; //area can't be picked by ray (default) @@ -90,7 +90,7 @@ int PhysicsDirectSpaceStateSW::intersect_point(const Vector3 &p_point, ShapeResu return cc; } -bool PhysicsDirectSpaceStateSW::intersect_ray(const Vector3 &p_from, const Vector3 &p_to, RayResult &r_result, const Set<RID> &p_exclude, uint32_t p_collision_layer, uint32_t p_object_type_mask, bool p_pick_ray) { +bool PhysicsDirectSpaceStateSW::intersect_ray(const Vector3 &p_from, const Vector3 &p_to, RayResult &r_result, const Set<RID> &p_exclude, uint32_t p_collision_mask, uint32_t p_object_type_mask, bool p_pick_ray) { ERR_FAIL_COND_V(space->locked, false); @@ -112,7 +112,7 @@ bool PhysicsDirectSpaceStateSW::intersect_ray(const Vector3 &p_from, const Vecto for (int i = 0; i < amount; i++) { - if (!_match_object_type_query(space->intersection_query_results[i], p_collision_layer, p_object_type_mask)) + if (!_match_object_type_query(space->intersection_query_results[i], p_collision_mask, p_object_type_mask)) continue; if (p_pick_ray && !(static_cast<CollisionObjectSW *>(space->intersection_query_results[i])->is_ray_pickable())) @@ -168,7 +168,7 @@ bool PhysicsDirectSpaceStateSW::intersect_ray(const Vector3 &p_from, const Vecto return true; } -int PhysicsDirectSpaceStateSW::intersect_shape(const RID &p_shape, const Transform &p_xform, real_t p_margin, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude, uint32_t p_collision_layer, uint32_t p_object_type_mask) { +int PhysicsDirectSpaceStateSW::intersect_shape(const RID &p_shape, const Transform &p_xform, real_t p_margin, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude, uint32_t p_collision_mask, uint32_t p_object_type_mask) { if (p_result_max <= 0) return 0; @@ -189,7 +189,7 @@ int PhysicsDirectSpaceStateSW::intersect_shape(const RID &p_shape, const Transfo if (cc >= p_result_max) break; - if (!_match_object_type_query(space->intersection_query_results[i], p_collision_layer, p_object_type_mask)) + if (!_match_object_type_query(space->intersection_query_results[i], p_collision_mask, p_object_type_mask)) continue; //area can't be picked by ray (default) @@ -219,7 +219,7 @@ int PhysicsDirectSpaceStateSW::intersect_shape(const RID &p_shape, const Transfo return cc; } -bool PhysicsDirectSpaceStateSW::cast_motion(const RID &p_shape, const Transform &p_xform, const Vector3 &p_motion, real_t p_margin, real_t &p_closest_safe, real_t &p_closest_unsafe, const Set<RID> &p_exclude, uint32_t p_collision_layer, uint32_t p_object_type_mask, ShapeRestInfo *r_info) { +bool PhysicsDirectSpaceStateSW::cast_motion(const RID &p_shape, const Transform &p_xform, const Vector3 &p_motion, real_t p_margin, real_t &p_closest_safe, real_t &p_closest_unsafe, const Set<RID> &p_exclude, uint32_t p_collision_mask, uint32_t p_object_type_mask, ShapeRestInfo *r_info) { ShapeSW *shape = static_cast<PhysicsServerSW *>(PhysicsServer::get_singleton())->shape_owner.get(p_shape); ERR_FAIL_COND_V(!shape, false); @@ -249,7 +249,7 @@ bool PhysicsDirectSpaceStateSW::cast_motion(const RID &p_shape, const Transform for (int i = 0; i < amount; i++) { - if (!_match_object_type_query(space->intersection_query_results[i], p_collision_layer, p_object_type_mask)) + if (!_match_object_type_query(space->intersection_query_results[i], p_collision_mask, p_object_type_mask)) continue; if (p_exclude.has(space->intersection_query_results[i]->get_self())) @@ -333,7 +333,7 @@ bool PhysicsDirectSpaceStateSW::cast_motion(const RID &p_shape, const Transform return true; } -bool PhysicsDirectSpaceStateSW::collide_shape(RID p_shape, const Transform &p_shape_xform, real_t p_margin, Vector3 *r_results, int p_result_max, int &r_result_count, const Set<RID> &p_exclude, uint32_t p_collision_layer, uint32_t p_object_type_mask) { +bool PhysicsDirectSpaceStateSW::collide_shape(RID p_shape, const Transform &p_shape_xform, real_t p_margin, Vector3 *r_results, int p_result_max, int &r_result_count, const Set<RID> &p_exclude, uint32_t p_collision_mask, uint32_t p_object_type_mask) { if (p_result_max <= 0) return 0; @@ -363,7 +363,7 @@ bool PhysicsDirectSpaceStateSW::collide_shape(RID p_shape, const Transform &p_sh for (int i = 0; i < amount; i++) { - if (!_match_object_type_query(space->intersection_query_results[i], p_collision_layer, p_object_type_mask)) + if (!_match_object_type_query(space->intersection_query_results[i], p_collision_mask, p_object_type_mask)) continue; const CollisionObjectSW *col_obj = space->intersection_query_results[i]; @@ -412,7 +412,7 @@ static void _rest_cbk_result(const Vector3 &p_point_A, const Vector3 &p_point_B, rd->best_object = rd->object; rd->best_shape = rd->shape; } -bool PhysicsDirectSpaceStateSW::rest_info(RID p_shape, const Transform &p_shape_xform, real_t p_margin, ShapeRestInfo *r_info, const Set<RID> &p_exclude, uint32_t p_collision_layer, uint32_t p_object_type_mask) { +bool PhysicsDirectSpaceStateSW::rest_info(RID p_shape, const Transform &p_shape_xform, real_t p_margin, ShapeRestInfo *r_info, const Set<RID> &p_exclude, uint32_t p_collision_mask, uint32_t p_object_type_mask) { ShapeSW *shape = static_cast<PhysicsServerSW *>(PhysicsServer::get_singleton())->shape_owner.get(p_shape); ERR_FAIL_COND_V(!shape, 0); @@ -429,7 +429,7 @@ bool PhysicsDirectSpaceStateSW::rest_info(RID p_shape, const Transform &p_shape_ for (int i = 0; i < amount; i++) { - if (!_match_object_type_query(space->intersection_query_results[i], p_collision_layer, p_object_type_mask)) + if (!_match_object_type_query(space->intersection_query_results[i], p_collision_mask, p_object_type_mask)) continue; const CollisionObjectSW *col_obj = space->intersection_query_results[i]; diff --git a/servers/physics/space_sw.h b/servers/physics/space_sw.h index 56f4d2f10d..270e4ef1bd 100644 --- a/servers/physics/space_sw.h +++ b/servers/physics/space_sw.h @@ -47,12 +47,12 @@ class PhysicsDirectSpaceStateSW : public PhysicsDirectSpaceState { public: SpaceSW *space; - virtual int intersect_point(const Vector3 &p_point, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_layer = 0xFFFFFFFF, uint32_t p_object_type_mask = TYPE_MASK_COLLISION); - virtual bool intersect_ray(const Vector3 &p_from, const Vector3 &p_to, RayResult &r_result, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_layer = 0xFFFFFFFF, uint32_t p_object_type_mask = TYPE_MASK_COLLISION, bool p_pick_ray = false); - virtual int intersect_shape(const RID &p_shape, const Transform &p_xform, real_t p_margin, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_layer = 0xFFFFFFFF, uint32_t p_object_type_mask = TYPE_MASK_COLLISION); - virtual bool cast_motion(const RID &p_shape, const Transform &p_xform, const Vector3 &p_motion, real_t p_margin, real_t &p_closest_safe, real_t &p_closest_unsafe, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_layer = 0xFFFFFFFF, uint32_t p_object_type_mask = TYPE_MASK_COLLISION, ShapeRestInfo *r_info = NULL); - virtual bool collide_shape(RID p_shape, const Transform &p_shape_xform, real_t p_margin, Vector3 *r_results, int p_result_max, int &r_result_count, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_layer = 0xFFFFFFFF, uint32_t p_object_type_mask = TYPE_MASK_COLLISION); - virtual bool rest_info(RID p_shape, const Transform &p_shape_xform, real_t p_margin, ShapeRestInfo *r_info, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_layer = 0xFFFFFFFF, uint32_t p_object_type_mask = TYPE_MASK_COLLISION); + virtual int intersect_point(const Vector3 &p_point, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = 0xFFFFFFFF, uint32_t p_object_type_mask = TYPE_MASK_COLLISION); + virtual bool intersect_ray(const Vector3 &p_from, const Vector3 &p_to, RayResult &r_result, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = 0xFFFFFFFF, uint32_t p_object_type_mask = TYPE_MASK_COLLISION, bool p_pick_ray = false); + virtual int intersect_shape(const RID &p_shape, const Transform &p_xform, real_t p_margin, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = 0xFFFFFFFF, uint32_t p_object_type_mask = TYPE_MASK_COLLISION); + virtual bool cast_motion(const RID &p_shape, const Transform &p_xform, const Vector3 &p_motion, real_t p_margin, real_t &p_closest_safe, real_t &p_closest_unsafe, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = 0xFFFFFFFF, uint32_t p_object_type_mask = TYPE_MASK_COLLISION, ShapeRestInfo *r_info = NULL); + virtual bool collide_shape(RID p_shape, const Transform &p_shape_xform, real_t p_margin, Vector3 *r_results, int p_result_max, int &r_result_count, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = 0xFFFFFFFF, uint32_t p_object_type_mask = TYPE_MASK_COLLISION); + virtual bool rest_info(RID p_shape, const Transform &p_shape_xform, real_t p_margin, ShapeRestInfo *r_info, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = 0xFFFFFFFF, uint32_t p_object_type_mask = TYPE_MASK_COLLISION); virtual Vector3 get_closest_point_to_object_volume(RID p_object, const Vector3 p_point) const; PhysicsDirectSpaceStateSW(); diff --git a/servers/physics_2d/body_2d_sw.h b/servers/physics_2d/body_2d_sw.h index 0ffad62f45..f7c717a5c6 100644 --- a/servers/physics_2d/body_2d_sw.h +++ b/servers/physics_2d/body_2d_sw.h @@ -353,7 +353,7 @@ public: virtual int get_contact_count() const { return body->contact_count; } - virtual Vector2 get_contact_local_pos(int p_contact_idx) const { + virtual Vector2 get_contact_local_position(int p_contact_idx) const { ERR_FAIL_INDEX_V(p_contact_idx, body->contact_count, Vector2()); return body->contacts[p_contact_idx].local_pos; } @@ -370,7 +370,7 @@ public: ERR_FAIL_INDEX_V(p_contact_idx, body->contact_count, RID()); return body->contacts[p_contact_idx].collider; } - virtual Vector2 get_contact_collider_pos(int p_contact_idx) const { + virtual Vector2 get_contact_collider_position(int p_contact_idx) const { ERR_FAIL_INDEX_V(p_contact_idx, body->contact_count, Vector2()); return body->contacts[p_contact_idx].collider_pos; } @@ -384,7 +384,7 @@ public: } virtual Variant get_contact_collider_shape_metadata(int p_contact_idx) const; - virtual Vector2 get_contact_collider_velocity_at_pos(int p_contact_idx) const { + virtual Vector2 get_contact_collider_velocity_at_position(int p_contact_idx) const { ERR_FAIL_INDEX_V(p_contact_idx, body->contact_count, Vector2()); return body->contacts[p_contact_idx].collider_velocity_at_pos; } diff --git a/servers/physics_2d/collision_object_2d_sw.h b/servers/physics_2d/collision_object_2d_sw.h index db1270633f..627ba8ea15 100644 --- a/servers/physics_2d/collision_object_2d_sw.h +++ b/servers/physics_2d/collision_object_2d_sw.h @@ -110,21 +110,48 @@ public: void set_shape_metadata(int p_index, const Variant &p_metadata); _FORCE_INLINE_ int get_shape_count() const { return shapes.size(); } - _FORCE_INLINE_ Shape2DSW *get_shape(int p_index) const { return shapes[p_index].shape; } - _FORCE_INLINE_ const Transform2D &get_shape_transform(int p_index) const { return shapes[p_index].xform; } - _FORCE_INLINE_ const Transform2D &get_shape_inv_transform(int p_index) const { return shapes[p_index].xform_inv; } - _FORCE_INLINE_ const Rect2 &get_shape_aabb(int p_index) const { return shapes[p_index].aabb_cache; } - _FORCE_INLINE_ const Variant &get_shape_metadata(int p_index) const { return shapes[p_index].metadata; } + _FORCE_INLINE_ Shape2DSW *get_shape(int p_index) const { + ERR_FAIL_INDEX_V(p_index, shapes.size(), NULL); + return shapes[p_index].shape; + } + _FORCE_INLINE_ const Transform2D &get_shape_transform(int p_index) const { + ERR_FAIL_INDEX_V(p_index, shapes.size(), Transform2D()); + return shapes[p_index].xform; + } + _FORCE_INLINE_ const Transform2D &get_shape_inv_transform(int p_index) const { + ERR_FAIL_INDEX_V(p_index, shapes.size(), Transform2D()); + return shapes[p_index].xform_inv; + } + _FORCE_INLINE_ const Rect2 &get_shape_aabb(int p_index) const { + ERR_FAIL_INDEX_V(p_index, shapes.size(), Rect2()); + return shapes[p_index].aabb_cache; + } + _FORCE_INLINE_ const Variant &get_shape_metadata(int p_index) const { + ERR_FAIL_INDEX_V(p_index, shapes.size(), Variant()); + return shapes[p_index].metadata; + } _FORCE_INLINE_ Transform2D get_transform() const { return transform; } _FORCE_INLINE_ Transform2D get_inv_transform() const { return inv_transform; } _FORCE_INLINE_ Space2DSW *get_space() const { return space; } - _FORCE_INLINE_ void set_shape_as_disabled(int p_idx, bool p_disabled) { shapes[p_idx].disabled = p_disabled; } - _FORCE_INLINE_ bool is_shape_set_as_disabled(int p_idx) const { return shapes[p_idx].disabled; } + _FORCE_INLINE_ void set_shape_as_disabled(int p_idx, bool p_disabled) { + ERR_FAIL_INDEX(p_idx, shapes.size()); + shapes[p_idx].disabled = p_disabled; + } + _FORCE_INLINE_ bool is_shape_set_as_disabled(int p_idx) const { + ERR_FAIL_INDEX_V(p_idx, shapes.size(), false); + return shapes[p_idx].disabled; + } - _FORCE_INLINE_ void set_shape_as_one_way_collision(int p_idx, bool p_one_way_collision) { shapes[p_idx].one_way_collision = p_one_way_collision; } - _FORCE_INLINE_ bool is_shape_set_as_one_way_collision(int p_idx) const { return shapes[p_idx].one_way_collision; } + _FORCE_INLINE_ void set_shape_as_one_way_collision(int p_idx, bool p_one_way_collision) { + ERR_FAIL_INDEX(p_idx, shapes.size()); + shapes[p_idx].one_way_collision = p_one_way_collision; + } + _FORCE_INLINE_ bool is_shape_set_as_one_way_collision(int p_idx) const { + ERR_FAIL_INDEX_V(p_idx, shapes.size(), false); + return shapes[p_idx].one_way_collision; + } void set_collision_mask(uint32_t p_mask) { collision_mask = p_mask; } _FORCE_INLINE_ uint32_t get_collision_mask() const { return collision_mask; } diff --git a/servers/physics_2d/physics_2d_server_sw.cpp b/servers/physics_2d/physics_2d_server_sw.cpp index e9e7122af3..df3bf72a31 100644 --- a/servers/physics_2d/physics_2d_server_sw.cpp +++ b/servers/physics_2d/physics_2d_server_sw.cpp @@ -270,7 +270,7 @@ Physics2DDirectSpaceState *Physics2DServerSW::space_get_direct_state(RID p_space ERR_FAIL_COND_V(!space, NULL); if ((using_threads && !doing_sync) || space->is_locked()) { - ERR_EXPLAIN("Space state is inaccessible right now, wait for iteration or fixed process notification."); + ERR_EXPLAIN("Space state is inaccessible right now, wait for iteration or physics process notification."); ERR_FAIL_V(NULL); } @@ -954,6 +954,21 @@ bool Physics2DServerSW::body_test_motion(RID p_body, const Transform2D &p_from, return body->get_space()->test_body_motion(body, p_from, p_motion, p_margin, r_result); } +Physics2DDirectBodyState *Physics2DServerSW::body_get_direct_state(RID p_body) { + + Body2DSW *body = body_owner.get(p_body); + ERR_FAIL_COND_V(!body, NULL); + + if ((using_threads && !doing_sync) || body->get_space()->is_locked()) { + + ERR_EXPLAIN("Body state is inaccessible right now, wait for iteration or physics process notification."); + ERR_FAIL_V(NULL); + } + + direct_state->body = body; + return direct_state; +} + /* JOINT API */ void Physics2DServerSW::joint_set_param(RID p_joint, JointParam p_param, real_t p_value) { diff --git a/servers/physics_2d/physics_2d_server_sw.h b/servers/physics_2d/physics_2d_server_sw.h index dd310d7a93..c40cf0e3e0 100644 --- a/servers/physics_2d/physics_2d_server_sw.h +++ b/servers/physics_2d/physics_2d_server_sw.h @@ -103,7 +103,7 @@ public: virtual Vector<Vector2> space_get_contacts(RID p_space) const; virtual int space_get_contact_count(RID p_space) const; - // this function only works on fixed process, errors and returns null otherwise + // this function only works on physics process, errors and returns null otherwise virtual Physics2DDirectSpaceState *space_get_direct_state(RID p_space); /* AREA API */ @@ -222,6 +222,9 @@ public: virtual bool body_test_motion(RID p_body, const Transform2D &p_from, const Vector2 &p_motion, real_t p_margin = 0.001, MotionResult *r_result = NULL); + // this function only works on physics process, errors and returns null otherwise + virtual Physics2DDirectBodyState *body_get_direct_state(RID p_body); + /* JOINT API */ virtual void joint_set_param(RID p_joint, JointParam p_param, real_t p_value); diff --git a/servers/physics_2d/physics_2d_server_wrap_mt.cpp b/servers/physics_2d/physics_2d_server_wrap_mt.cpp index a4e6abfd45..f8f3b620d4 100644 --- a/servers/physics_2d/physics_2d_server_wrap_mt.cpp +++ b/servers/physics_2d/physics_2d_server_wrap_mt.cpp @@ -109,16 +109,13 @@ void Physics2DServerWrapMT::init() { if (create_thread) { step_sem = Semaphore::create(); - print_line("CREATING PHYSICS 2D THREAD"); //OS::get_singleton()->release_rendering_thread(); if (create_thread) { thread = Thread::create(_thread_callback, this); - print_line("STARTING PHYISICS 2D THREAD"); } while (!step_thread_up) { OS::get_singleton()->delay_usec(1000); } - print_line("DONE PHYSICS 2D THREAD"); } else { physics_2d_server->init(); diff --git a/servers/physics_2d/physics_2d_server_wrap_mt.h b/servers/physics_2d/physics_2d_server_wrap_mt.h index 189419e8e4..50e9ab1005 100644 --- a/servers/physics_2d/physics_2d_server_wrap_mt.h +++ b/servers/physics_2d/physics_2d_server_wrap_mt.h @@ -111,7 +111,7 @@ public: FUNC3(space_set_param, RID, SpaceParameter, real_t); FUNC2RC(real_t, space_get_param, RID, SpaceParameter); - // this function only works on fixed process, errors and returns null otherwise + // this function only works on physics process, errors and returns null otherwise Physics2DDirectSpaceState *space_get_direct_state(RID p_space) { ERR_FAIL_COND_V(main_thread != Thread::get_caller_id(), NULL); @@ -253,6 +253,13 @@ public: return physics_2d_server->body_test_motion(p_body, p_from, p_motion, p_margin, r_result); } + // this function only works on physics process, errors and returns null otherwise + Physics2DDirectBodyState *body_get_direct_state(RID p_body) { + + ERR_FAIL_COND_V(main_thread != Thread::get_caller_id(), NULL); + return physics_2d_server->body_get_direct_state(p_body); + } + /* JOINT API */ FUNC3(joint_set_param, RID, JointParam, real_t); diff --git a/servers/physics_2d/space_2d_sw.cpp b/servers/physics_2d/space_2d_sw.cpp index 8f22d1cd44..6eaaaa777b 100644 --- a/servers/physics_2d/space_2d_sw.cpp +++ b/servers/physics_2d/space_2d_sw.cpp @@ -32,9 +32,9 @@ #include "collision_solver_2d_sw.h" #include "pair.h" #include "physics_2d_server_sw.h" -_FORCE_INLINE_ static bool _match_object_type_query(CollisionObject2DSW *p_object, uint32_t p_collision_layer, uint32_t p_type_mask) { +_FORCE_INLINE_ static bool _match_object_type_query(CollisionObject2DSW *p_object, uint32_t p_collision_mask, uint32_t p_type_mask) { - if ((p_object->get_collision_layer() & p_collision_layer) == 0) + if ((p_object->get_collision_layer() & p_collision_mask) == 0) return false; if (p_object->get_type() == CollisionObject2DSW::TYPE_AREA) @@ -45,7 +45,7 @@ _FORCE_INLINE_ static bool _match_object_type_query(CollisionObject2DSW *p_objec return (1 << body->get_mode()) & p_type_mask; } -int Physics2DDirectSpaceStateSW::intersect_point(const Vector2 &p_point, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude, uint32_t p_collision_layer, uint32_t p_object_type_mask, bool p_pick_point) { +int Physics2DDirectSpaceStateSW::intersect_point(const Vector2 &p_point, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude, uint32_t p_collision_mask, uint32_t p_object_type_mask, bool p_pick_point) { if (p_result_max <= 0) return 0; @@ -60,7 +60,7 @@ int Physics2DDirectSpaceStateSW::intersect_point(const Vector2 &p_point, ShapeRe for (int i = 0; i < amount; i++) { - if (!_match_object_type_query(space->intersection_query_results[i], p_collision_layer, p_object_type_mask)) + if (!_match_object_type_query(space->intersection_query_results[i], p_collision_mask, p_object_type_mask)) continue; if (p_exclude.has(space->intersection_query_results[i]->get_self())) @@ -96,7 +96,7 @@ int Physics2DDirectSpaceStateSW::intersect_point(const Vector2 &p_point, ShapeRe return cc; } -bool Physics2DDirectSpaceStateSW::intersect_ray(const Vector2 &p_from, const Vector2 &p_to, RayResult &r_result, const Set<RID> &p_exclude, uint32_t p_collision_layer, uint32_t p_object_type_mask) { +bool Physics2DDirectSpaceStateSW::intersect_ray(const Vector2 &p_from, const Vector2 &p_to, RayResult &r_result, const Set<RID> &p_exclude, uint32_t p_collision_mask, uint32_t p_object_type_mask) { ERR_FAIL_COND_V(space->locked, false); @@ -118,7 +118,7 @@ bool Physics2DDirectSpaceStateSW::intersect_ray(const Vector2 &p_from, const Vec for (int i = 0; i < amount; i++) { - if (!_match_object_type_query(space->intersection_query_results[i], p_collision_layer, p_object_type_mask)) + if (!_match_object_type_query(space->intersection_query_results[i], p_collision_mask, p_object_type_mask)) continue; if (p_exclude.has(space->intersection_query_results[i]->get_self())) @@ -176,7 +176,7 @@ bool Physics2DDirectSpaceStateSW::intersect_ray(const Vector2 &p_from, const Vec return true; } -int Physics2DDirectSpaceStateSW::intersect_shape(const RID &p_shape, const Transform2D &p_xform, const Vector2 &p_motion, real_t p_margin, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude, uint32_t p_collision_layer, uint32_t p_object_type_mask) { +int Physics2DDirectSpaceStateSW::intersect_shape(const RID &p_shape, const Transform2D &p_xform, const Vector2 &p_motion, real_t p_margin, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude, uint32_t p_collision_mask, uint32_t p_object_type_mask) { if (p_result_max <= 0) return 0; @@ -193,7 +193,7 @@ int Physics2DDirectSpaceStateSW::intersect_shape(const RID &p_shape, const Trans for (int i = 0; i < amount; i++) { - if (!_match_object_type_query(space->intersection_query_results[i], p_collision_layer, p_object_type_mask)) + if (!_match_object_type_query(space->intersection_query_results[i], p_collision_mask, p_object_type_mask)) continue; if (p_exclude.has(space->intersection_query_results[i]->get_self())) @@ -218,7 +218,7 @@ int Physics2DDirectSpaceStateSW::intersect_shape(const RID &p_shape, const Trans return cc; } -bool Physics2DDirectSpaceStateSW::cast_motion(const RID &p_shape, const Transform2D &p_xform, const Vector2 &p_motion, real_t p_margin, real_t &p_closest_safe, real_t &p_closest_unsafe, const Set<RID> &p_exclude, uint32_t p_collision_layer, uint32_t p_object_type_mask) { +bool Physics2DDirectSpaceStateSW::cast_motion(const RID &p_shape, const Transform2D &p_xform, const Vector2 &p_motion, real_t p_margin, real_t &p_closest_safe, real_t &p_closest_unsafe, const Set<RID> &p_exclude, uint32_t p_collision_mask, uint32_t p_object_type_mask) { Shape2DSW *shape = Physics2DServerSW::singletonsw->shape_owner.get(p_shape); ERR_FAIL_COND_V(!shape, false); @@ -239,7 +239,7 @@ bool Physics2DDirectSpaceStateSW::cast_motion(const RID &p_shape, const Transfor for (int i = 0; i < amount; i++) { - if (!_match_object_type_query(space->intersection_query_results[i], p_collision_layer, p_object_type_mask)) + if (!_match_object_type_query(space->intersection_query_results[i], p_collision_mask, p_object_type_mask)) continue; if (p_exclude.has(space->intersection_query_results[i]->get_self())) @@ -302,7 +302,7 @@ bool Physics2DDirectSpaceStateSW::cast_motion(const RID &p_shape, const Transfor return true; } -bool Physics2DDirectSpaceStateSW::collide_shape(RID p_shape, const Transform2D &p_shape_xform, const Vector2 &p_motion, real_t p_margin, Vector2 *r_results, int p_result_max, int &r_result_count, const Set<RID> &p_exclude, uint32_t p_collision_layer, uint32_t p_object_type_mask) { +bool Physics2DDirectSpaceStateSW::collide_shape(RID p_shape, const Transform2D &p_shape_xform, const Vector2 &p_motion, real_t p_margin, Vector2 *r_results, int p_result_max, int &r_result_count, const Set<RID> &p_exclude, uint32_t p_collision_mask, uint32_t p_object_type_mask) { if (p_result_max <= 0) return 0; @@ -333,7 +333,7 @@ bool Physics2DDirectSpaceStateSW::collide_shape(RID p_shape, const Transform2D & for (int i = 0; i < amount; i++) { - if (!_match_object_type_query(space->intersection_query_results[i], p_collision_layer, p_object_type_mask)) + if (!_match_object_type_query(space->intersection_query_results[i], p_collision_mask, p_object_type_mask)) continue; const CollisionObject2DSW *col_obj = space->intersection_query_results[i]; @@ -391,7 +391,7 @@ static void _rest_cbk_result(const Vector2 &p_point_A, const Vector2 &p_point_B, rd->best_shape = rd->shape; } -bool Physics2DDirectSpaceStateSW::rest_info(RID p_shape, const Transform2D &p_shape_xform, const Vector2 &p_motion, real_t p_margin, ShapeRestInfo *r_info, const Set<RID> &p_exclude, uint32_t p_collision_layer, uint32_t p_object_type_mask) { +bool Physics2DDirectSpaceStateSW::rest_info(RID p_shape, const Transform2D &p_shape_xform, const Vector2 &p_motion, real_t p_margin, ShapeRestInfo *r_info, const Set<RID> &p_exclude, uint32_t p_collision_mask, uint32_t p_object_type_mask) { Shape2DSW *shape = Physics2DServerSW::singletonsw->shape_owner.get(p_shape); ERR_FAIL_COND_V(!shape, 0); @@ -409,7 +409,7 @@ bool Physics2DDirectSpaceStateSW::rest_info(RID p_shape, const Transform2D &p_sh for (int i = 0; i < amount; i++) { - if (!_match_object_type_query(space->intersection_query_results[i], p_collision_layer, p_object_type_mask)) + if (!_match_object_type_query(space->intersection_query_results[i], p_collision_mask, p_object_type_mask)) continue; const CollisionObject2DSW *col_obj = space->intersection_query_results[i]; diff --git a/servers/physics_2d/space_2d_sw.h b/servers/physics_2d/space_2d_sw.h index c7e7497397..bf0796fb22 100644 --- a/servers/physics_2d/space_2d_sw.h +++ b/servers/physics_2d/space_2d_sw.h @@ -47,12 +47,12 @@ class Physics2DDirectSpaceStateSW : public Physics2DDirectSpaceState { public: Space2DSW *space; - virtual int intersect_point(const Vector2 &p_point, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_layer = 0xFFFFFFFF, uint32_t p_object_type_mask = TYPE_MASK_COLLISION, bool p_pick_point = false); - virtual bool intersect_ray(const Vector2 &p_from, const Vector2 &p_to, RayResult &r_result, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_layer = 0xFFFFFFFF, uint32_t p_object_type_mask = TYPE_MASK_COLLISION); - virtual int intersect_shape(const RID &p_shape, const Transform2D &p_xform, const Vector2 &p_motion, real_t p_margin, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_layer = 0xFFFFFFFF, uint32_t p_object_type_mask = TYPE_MASK_COLLISION); - virtual bool cast_motion(const RID &p_shape, const Transform2D &p_xform, const Vector2 &p_motion, real_t p_margin, real_t &p_closest_safe, real_t &p_closest_unsafe, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_layer = 0xFFFFFFFF, uint32_t p_object_type_mask = TYPE_MASK_COLLISION); - virtual bool collide_shape(RID p_shape, const Transform2D &p_shape_xform, const Vector2 &p_motion, real_t p_margin, Vector2 *r_results, int p_result_max, int &r_result_count, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_layer = 0xFFFFFFFF, uint32_t p_object_type_mask = TYPE_MASK_COLLISION); - virtual bool rest_info(RID p_shape, const Transform2D &p_shape_xform, const Vector2 &p_motion, real_t p_margin, ShapeRestInfo *r_info, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_layer = 0xFFFFFFFF, uint32_t p_object_type_mask = TYPE_MASK_COLLISION); + virtual int intersect_point(const Vector2 &p_point, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = 0xFFFFFFFF, uint32_t p_object_type_mask = TYPE_MASK_COLLISION, bool p_pick_point = false); + virtual bool intersect_ray(const Vector2 &p_from, const Vector2 &p_to, RayResult &r_result, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = 0xFFFFFFFF, uint32_t p_object_type_mask = TYPE_MASK_COLLISION); + virtual int intersect_shape(const RID &p_shape, const Transform2D &p_xform, const Vector2 &p_motion, real_t p_margin, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = 0xFFFFFFFF, uint32_t p_object_type_mask = TYPE_MASK_COLLISION); + virtual bool cast_motion(const RID &p_shape, const Transform2D &p_xform, const Vector2 &p_motion, real_t p_margin, real_t &p_closest_safe, real_t &p_closest_unsafe, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = 0xFFFFFFFF, uint32_t p_object_type_mask = TYPE_MASK_COLLISION); + virtual bool collide_shape(RID p_shape, const Transform2D &p_shape_xform, const Vector2 &p_motion, real_t p_margin, Vector2 *r_results, int p_result_max, int &r_result_count, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = 0xFFFFFFFF, uint32_t p_object_type_mask = TYPE_MASK_COLLISION); + virtual bool rest_info(RID p_shape, const Transform2D &p_shape_xform, const Vector2 &p_motion, real_t p_margin, ShapeRestInfo *r_info, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = 0xFFFFFFFF, uint32_t p_object_type_mask = TYPE_MASK_COLLISION); Physics2DDirectSpaceStateSW(); }; diff --git a/servers/physics_2d_server.cpp b/servers/physics_2d_server.cpp index 06966e2452..b2e1d541ab 100644 --- a/servers/physics_2d_server.cpp +++ b/servers/physics_2d_server.cpp @@ -92,16 +92,16 @@ void Physics2DDirectBodyState::_bind_methods() { ClassDB::bind_method(D_METHOD("get_contact_count"), &Physics2DDirectBodyState::get_contact_count); - ClassDB::bind_method(D_METHOD("get_contact_local_pos", "contact_idx"), &Physics2DDirectBodyState::get_contact_local_pos); + ClassDB::bind_method(D_METHOD("get_contact_local_position", "contact_idx"), &Physics2DDirectBodyState::get_contact_local_position); ClassDB::bind_method(D_METHOD("get_contact_local_normal", "contact_idx"), &Physics2DDirectBodyState::get_contact_local_normal); ClassDB::bind_method(D_METHOD("get_contact_local_shape", "contact_idx"), &Physics2DDirectBodyState::get_contact_local_shape); ClassDB::bind_method(D_METHOD("get_contact_collider", "contact_idx"), &Physics2DDirectBodyState::get_contact_collider); - ClassDB::bind_method(D_METHOD("get_contact_collider_pos", "contact_idx"), &Physics2DDirectBodyState::get_contact_collider_pos); + ClassDB::bind_method(D_METHOD("get_contact_collider_position", "contact_idx"), &Physics2DDirectBodyState::get_contact_collider_position); ClassDB::bind_method(D_METHOD("get_contact_collider_id", "contact_idx"), &Physics2DDirectBodyState::get_contact_collider_id); ClassDB::bind_method(D_METHOD("get_contact_collider_object", "contact_idx"), &Physics2DDirectBodyState::get_contact_collider_object); ClassDB::bind_method(D_METHOD("get_contact_collider_shape", "contact_idx"), &Physics2DDirectBodyState::get_contact_collider_shape); ClassDB::bind_method(D_METHOD("get_contact_collider_shape_metadata", "contact_idx"), &Physics2DDirectBodyState::get_contact_collider_shape_metadata); - ClassDB::bind_method(D_METHOD("get_contact_collider_velocity_at_pos", "contact_idx"), &Physics2DDirectBodyState::get_contact_collider_velocity_at_pos); + ClassDB::bind_method(D_METHOD("get_contact_collider_velocity_at_position", "contact_idx"), &Physics2DDirectBodyState::get_contact_collider_velocity_at_position); ClassDB::bind_method(D_METHOD("get_step"), &Physics2DDirectBodyState::get_step); ClassDB::bind_method(D_METHOD("integrate_forces"), &Physics2DDirectBodyState::integrate_forces); ClassDB::bind_method(D_METHOD("get_space_state"), &Physics2DDirectBodyState::get_space_state); @@ -358,8 +358,8 @@ void Physics2DDirectSpaceState::_bind_methods() { BIND_ENUM_CONSTANT(TYPE_MASK_KINEMATIC_BODY); BIND_ENUM_CONSTANT(TYPE_MASK_RIGID_BODY); BIND_ENUM_CONSTANT(TYPE_MASK_CHARACTER_BODY); - BIND_ENUM_CONSTANT(TYPE_MASK_AREA); BIND_ENUM_CONSTANT(TYPE_MASK_COLLISION); + BIND_ENUM_CONSTANT(TYPE_MASK_AREA); } int Physics2DShapeQueryResult::get_result_count() const { @@ -561,7 +561,7 @@ void Physics2DServer::_bind_methods() { ClassDB::bind_method(D_METHOD("body_set_state", "body", "state", "value"), &Physics2DServer::body_set_state); ClassDB::bind_method(D_METHOD("body_get_state", "body", "state"), &Physics2DServer::body_get_state); - ClassDB::bind_method(D_METHOD("body_apply_impulse", "body", "pos", "impulse"), &Physics2DServer::body_apply_impulse); + ClassDB::bind_method(D_METHOD("body_apply_impulse", "body", "position", "impulse"), &Physics2DServer::body_apply_impulse); ClassDB::bind_method(D_METHOD("body_add_force", "body", "offset", "force"), &Physics2DServer::body_add_force); ClassDB::bind_method(D_METHOD("body_set_axis_velocity", "body", "axis_velocity"), &Physics2DServer::body_set_axis_velocity); @@ -579,6 +579,8 @@ void Physics2DServer::_bind_methods() { ClassDB::bind_method(D_METHOD("body_test_motion", "body", "from", "motion", "margin", "result"), &Physics2DServer::_body_test_motion, DEFVAL(0.08), DEFVAL(Variant())); + ClassDB::bind_method(D_METHOD("body_get_direct_state", "body"), &Physics2DServer::body_get_direct_state); + /* JOINT API */ ClassDB::bind_method(D_METHOD("joint_set_param", "joint", "param", "value"), &Physics2DServer::joint_set_param); @@ -613,6 +615,7 @@ void Physics2DServer::_bind_methods() { BIND_ENUM_CONSTANT(SPACE_PARAM_CONSTRAINT_DEFAULT_BIAS); BIND_ENUM_CONSTANT(SHAPE_LINE); + BIND_ENUM_CONSTANT(SHAPE_RAY); BIND_ENUM_CONSTANT(SHAPE_SEGMENT); BIND_ENUM_CONSTANT(SHAPE_CIRCLE); BIND_ENUM_CONSTANT(SHAPE_RECTANGLE); diff --git a/servers/physics_2d_server.h b/servers/physics_2d_server.h index cd6a20e6b8..18f4f460b6 100644 --- a/servers/physics_2d_server.h +++ b/servers/physics_2d_server.h @@ -65,17 +65,17 @@ public: virtual int get_contact_count() const = 0; - virtual Vector2 get_contact_local_pos(int p_contact_idx) const = 0; + virtual Vector2 get_contact_local_position(int p_contact_idx) const = 0; virtual Vector2 get_contact_local_normal(int p_contact_idx) const = 0; virtual int get_contact_local_shape(int p_contact_idx) const = 0; virtual RID get_contact_collider(int p_contact_idx) const = 0; - virtual Vector2 get_contact_collider_pos(int p_contact_idx) const = 0; + virtual Vector2 get_contact_collider_position(int p_contact_idx) const = 0; virtual ObjectID get_contact_collider_id(int p_contact_idx) const = 0; virtual Object *get_contact_collider_object(int p_contact_idx) const; virtual int get_contact_collider_shape(int p_contact_idx) const = 0; virtual Variant get_contact_collider_shape_metadata(int p_contact_idx) const = 0; - virtual Vector2 get_contact_collider_velocity_at_pos(int p_contact_idx) const = 0; + virtual Vector2 get_contact_collider_velocity_at_position(int p_contact_idx) const = 0; virtual real_t get_step() const = 0; virtual void integrate_forces(); @@ -283,7 +283,7 @@ public: virtual void space_set_param(RID p_space, SpaceParameter p_param, real_t p_value) = 0; virtual real_t space_get_param(RID p_space, SpaceParameter p_param) const = 0; - // this function only works on fixed process, errors and returns null otherwise + // this function only works on physics process, errors and returns null otherwise virtual Physics2DDirectSpaceState *space_get_direct_state(RID p_space) = 0; virtual void space_set_debug_contacts(RID p_space, int p_max_contacts) = 0; @@ -468,6 +468,9 @@ public: virtual void body_set_pickable(RID p_body, bool p_pickable) = 0; + // this function only works on physics process, errors and returns null otherwise + virtual Physics2DDirectBodyState *body_get_direct_state(RID p_body) = 0; + struct MotionResult { Vector2 motion; diff --git a/servers/physics_server.cpp b/servers/physics_server.cpp index 28ab31b8f6..360808ce8c 100644 --- a/servers/physics_server.cpp +++ b/servers/physics_server.cpp @@ -89,8 +89,8 @@ void PhysicsDirectBodyState::_bind_methods() { ClassDB::bind_method(D_METHOD("set_transform", "transform"), &PhysicsDirectBodyState::set_transform); ClassDB::bind_method(D_METHOD("get_transform"), &PhysicsDirectBodyState::get_transform); - ClassDB::bind_method(D_METHOD("add_force", "force", "pos"), &PhysicsDirectBodyState::add_force); - ClassDB::bind_method(D_METHOD("apply_impulse", "pos", "j"), &PhysicsDirectBodyState::apply_impulse); + ClassDB::bind_method(D_METHOD("add_force", "force", "position"), &PhysicsDirectBodyState::add_force); + ClassDB::bind_method(D_METHOD("apply_impulse", "position", "j"), &PhysicsDirectBodyState::apply_impulse); ClassDB::bind_method(D_METHOD("apply_torqe_impulse", "j"), &PhysicsDirectBodyState::apply_torque_impulse); ClassDB::bind_method(D_METHOD("set_sleep_state", "enabled"), &PhysicsDirectBodyState::set_sleep_state); @@ -98,15 +98,15 @@ void PhysicsDirectBodyState::_bind_methods() { ClassDB::bind_method(D_METHOD("get_contact_count"), &PhysicsDirectBodyState::get_contact_count); - ClassDB::bind_method(D_METHOD("get_contact_local_pos", "contact_idx"), &PhysicsDirectBodyState::get_contact_local_pos); + ClassDB::bind_method(D_METHOD("get_contact_local_position", "contact_idx"), &PhysicsDirectBodyState::get_contact_local_position); ClassDB::bind_method(D_METHOD("get_contact_local_normal", "contact_idx"), &PhysicsDirectBodyState::get_contact_local_normal); ClassDB::bind_method(D_METHOD("get_contact_local_shape", "contact_idx"), &PhysicsDirectBodyState::get_contact_local_shape); ClassDB::bind_method(D_METHOD("get_contact_collider", "contact_idx"), &PhysicsDirectBodyState::get_contact_collider); - ClassDB::bind_method(D_METHOD("get_contact_collider_pos", "contact_idx"), &PhysicsDirectBodyState::get_contact_collider_pos); + ClassDB::bind_method(D_METHOD("get_contact_collider_position", "contact_idx"), &PhysicsDirectBodyState::get_contact_collider_position); ClassDB::bind_method(D_METHOD("get_contact_collider_id", "contact_idx"), &PhysicsDirectBodyState::get_contact_collider_id); ClassDB::bind_method(D_METHOD("get_contact_collider_object", "contact_idx"), &PhysicsDirectBodyState::get_contact_collider_object); ClassDB::bind_method(D_METHOD("get_contact_collider_shape", "contact_idx"), &PhysicsDirectBodyState::get_contact_collider_shape); - ClassDB::bind_method(D_METHOD("get_contact_collider_velocity_at_pos", "contact_idx"), &PhysicsDirectBodyState::get_contact_collider_velocity_at_pos); + ClassDB::bind_method(D_METHOD("get_contact_collider_velocity_at_position", "contact_idx"), &PhysicsDirectBodyState::get_contact_collider_velocity_at_position); ClassDB::bind_method(D_METHOD("get_step"), &PhysicsDirectBodyState::get_step); ClassDB::bind_method(D_METHOD("integrate_forces"), &PhysicsDirectBodyState::integrate_forces); ClassDB::bind_method(D_METHOD("get_space_state"), &PhysicsDirectBodyState::get_space_state); @@ -353,8 +353,8 @@ void PhysicsDirectSpaceState::_bind_methods() { BIND_ENUM_CONSTANT(TYPE_MASK_KINEMATIC_BODY); BIND_ENUM_CONSTANT(TYPE_MASK_RIGID_BODY); BIND_ENUM_CONSTANT(TYPE_MASK_CHARACTER_BODY); - BIND_ENUM_CONSTANT(TYPE_MASK_AREA); BIND_ENUM_CONSTANT(TYPE_MASK_COLLISION); + BIND_ENUM_CONSTANT(TYPE_MASK_AREA); } int PhysicsShapeQueryResult::get_result_count() const { @@ -482,7 +482,7 @@ void PhysicsServer::_bind_methods() { ClassDB::bind_method(D_METHOD("body_set_state", "body", "state", "value"), &PhysicsServer::body_set_state); ClassDB::bind_method(D_METHOD("body_get_state", "body", "state"), &PhysicsServer::body_get_state); - ClassDB::bind_method(D_METHOD("body_apply_impulse", "body", "pos", "impulse"), &PhysicsServer::body_apply_impulse); + ClassDB::bind_method(D_METHOD("body_apply_impulse", "body", "position", "impulse"), &PhysicsServer::body_apply_impulse); ClassDB::bind_method(D_METHOD("body_apply_torque_impulse", "body", "impulse"), &PhysicsServer::body_apply_torque_impulse); ClassDB::bind_method(D_METHOD("body_set_axis_velocity", "body", "axis_velocity"), &PhysicsServer::body_set_axis_velocity); @@ -504,6 +504,8 @@ void PhysicsServer::_bind_methods() { ClassDB::bind_method(D_METHOD("body_set_ray_pickable", "body", "enable"), &PhysicsServer::body_set_ray_pickable); ClassDB::bind_method(D_METHOD("body_is_ray_pickable", "body"), &PhysicsServer::body_is_ray_pickable); + ClassDB::bind_method(D_METHOD("body_get_direct_state", "body"), &PhysicsServer::body_get_direct_state); + /* JOINT API */ BIND_ENUM_CONSTANT(JOINT_PIN); @@ -677,8 +679,8 @@ void PhysicsServer::_bind_methods() { BIND_ENUM_CONSTANT(BODY_PARAM_FRICTION); BIND_ENUM_CONSTANT(BODY_PARAM_MASS); BIND_ENUM_CONSTANT(BODY_PARAM_GRAVITY_SCALE); - BIND_ENUM_CONSTANT(BODY_PARAM_ANGULAR_DAMP); BIND_ENUM_CONSTANT(BODY_PARAM_LINEAR_DAMP); + BIND_ENUM_CONSTANT(BODY_PARAM_ANGULAR_DAMP); BIND_ENUM_CONSTANT(BODY_PARAM_MAX); BIND_ENUM_CONSTANT(BODY_STATE_TRANSFORM); diff --git a/servers/physics_server.h b/servers/physics_server.h index c6d312e0fe..8cec125646 100644 --- a/servers/physics_server.h +++ b/servers/physics_server.h @@ -71,16 +71,16 @@ public: virtual int get_contact_count() const = 0; - virtual Vector3 get_contact_local_pos(int p_contact_idx) const = 0; + virtual Vector3 get_contact_local_position(int p_contact_idx) const = 0; virtual Vector3 get_contact_local_normal(int p_contact_idx) const = 0; virtual int get_contact_local_shape(int p_contact_idx) const = 0; virtual RID get_contact_collider(int p_contact_idx) const = 0; - virtual Vector3 get_contact_collider_pos(int p_contact_idx) const = 0; + virtual Vector3 get_contact_collider_position(int p_contact_idx) const = 0; virtual ObjectID get_contact_collider_id(int p_contact_idx) const = 0; virtual Object *get_contact_collider_object(int p_contact_idx) const; virtual int get_contact_collider_shape(int p_contact_idx) const = 0; - virtual Vector3 get_contact_collider_velocity_at_pos(int p_contact_idx) const = 0; + virtual Vector3 get_contact_collider_velocity_at_position(int p_contact_idx) const = 0; virtual real_t get_step() const = 0; virtual void integrate_forces(); @@ -276,7 +276,7 @@ public: virtual void space_set_param(RID p_space, SpaceParameter p_param, real_t p_value) = 0; virtual real_t space_get_param(RID p_space, SpaceParameter p_param) const = 0; - // this function only works on fixed process, errors and returns null otherwise + // this function only works on physics process, errors and returns null otherwise virtual PhysicsDirectSpaceState *space_get_direct_state(RID p_space) = 0; virtual void space_set_debug_contacts(RID p_space, int p_max_contacts) = 0; @@ -464,6 +464,9 @@ public: virtual void body_set_ray_pickable(RID p_body, bool p_enable) = 0; virtual bool body_is_ray_pickable(RID p_body) const = 0; + // this function only works on physics process, errors and returns null otherwise + virtual PhysicsDirectBodyState *body_get_direct_state(RID p_body) = 0; + struct MotionResult { Vector3 motion; diff --git a/servers/register_server_types.cpp b/servers/register_server_types.cpp index 845a3443b7..7a9328e30f 100644 --- a/servers/register_server_types.cpp +++ b/servers/register_server_types.cpp @@ -32,7 +32,6 @@ #include "arvr/arvr_interface.h" #include "arvr/arvr_positional_tracker.h" -#include "arvr/arvr_script_interface.h" #include "arvr_server.h" #include "audio/audio_effect.h" #include "audio/audio_stream.h" @@ -74,10 +73,14 @@ static void _debugger_get_resource_usage(List<ScriptDebuggerRemote::ResourceUsag } ShaderTypes *shader_types = NULL; -ARVRServer *arvr_server = NULL; void register_server_types() { - arvr_server = memnew(ARVRServer); + + ClassDB::register_virtual_class<VisualServer>(); + ClassDB::register_class<AudioServer>(); + ClassDB::register_virtual_class<PhysicsServer>(); + ClassDB::register_virtual_class<Physics2DServer>(); + ClassDB::register_class<ARVRServer>(); ProjectSettings::get_singleton()->add_singleton(ProjectSettings::Singleton("VisualServer", VisualServer::get_singleton())); ProjectSettings::get_singleton()->add_singleton(ProjectSettings::Singleton("AudioServer", AudioServer::get_singleton())); @@ -89,12 +92,13 @@ void register_server_types() { ClassDB::register_virtual_class<ARVRInterface>(); ClassDB::register_class<ARVRPositionalTracker>(); - ClassDB::register_class<ARVRScriptInterface>(); ClassDB::register_virtual_class<AudioStream>(); ClassDB::register_virtual_class<AudioStreamPlayback>(); ClassDB::register_class<AudioStreamRandomPitch>(); ClassDB::register_virtual_class<AudioEffect>(); + ClassDB::register_class<AudioEffectEQ>(); + ClassDB::register_class<AudioEffectFilter>(); ClassDB::register_class<AudioBusLayout>(); { @@ -144,9 +148,5 @@ void register_server_types() { void unregister_server_types() { - //@TODO move this into iPhone/Android implementation? just have this here for testing... - // mobile_interface = NULL; - memdelete(shader_types); - memdelete(arvr_server); } diff --git a/servers/visual/rasterizer.h b/servers/visual/rasterizer.h index 344c10089a..b3f6b243de 100644 --- a/servers/visual/rasterizer.h +++ b/servers/visual/rasterizer.h @@ -53,7 +53,7 @@ public: virtual void environment_set_background(RID p_env, VS::EnvironmentBG p_bg) = 0; virtual void environment_set_sky(RID p_env, RID p_sky) = 0; - virtual void environment_set_sky_scale(RID p_env, float p_scale) = 0; + virtual void environment_set_sky_custom_fov(RID p_env, float p_scale) = 0; virtual void environment_set_bg_color(RID p_env, const Color &p_color) = 0; virtual void environment_set_bg_energy(RID p_env, float p_energy) = 0; virtual void environment_set_canvas_max_layer(RID p_env, int p_max_layer) = 0; diff --git a/servers/visual/shader_language.cpp b/servers/visual/shader_language.cpp index 6ad433268f..8fee6050a0 100644 --- a/servers/visual/shader_language.cpp +++ b/servers/visual/shader_language.cpp @@ -267,6 +267,7 @@ const ShaderLanguage::KeyWord ShaderLanguage::keyword_list[] = { { TK_CF_BREAK, "break" }, { TK_CF_CONTINUE, "continue" }, { TK_CF_RETURN, "return" }, + { TK_CF_DISCARD, "discard" }, { TK_UNIFORM, "uniform" }, { TK_VARYING, "varying" }, { TK_ARG_IN, "in" }, @@ -1377,6 +1378,10 @@ const ShaderLanguage::BuiltinFuncDef ShaderLanguage::builtin_func_defs[] = { { "sqrt", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID } }, { "sqrt", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID } }, { "sqrt", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID } }, + { "inversesqrt", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID } }, + { "inversesqrt", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID } }, + { "inversesqrt", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID } }, + { "inversesqrt", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID } }, //builtins - common { "abs", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID } }, { "abs", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID } }, @@ -1740,8 +1745,6 @@ const ShaderLanguage::BuiltinFuncDef ShaderLanguage::builtin_func_defs[] = { { "textureGrad", TYPE_UVEC4, { TYPE_USAMPLER2D, TYPE_VEC2, TYPE_VEC2, TYPE_VEC2, TYPE_VOID } }, { "textureGrad", TYPE_VEC4, { TYPE_SAMPLERCUBE, TYPE_VEC3, TYPE_VEC3, TYPE_VEC3, TYPE_VOID } }, - { "textureScreen", TYPE_VEC4, { TYPE_VEC2, TYPE_VOID } }, - { "dFdx", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID } }, { "dFdx", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID } }, { "dFdx", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID } }, @@ -2583,6 +2586,8 @@ ShaderLanguage::Node *ShaderLanguage::_parse_expression(BlockNode *p_block, cons } else if (tk.type == TK_BRACKET_OPEN) { Node *index = _parse_and_reduce_expression(p_block, p_builtin_types); + if (!index) + return NULL; if (index->get_datatype() != TYPE_INT && index->get_datatype() != TYPE_UINT) { _set_error("Only integer datatypes are allowed for indexing"); @@ -3800,6 +3805,10 @@ Error ShaderLanguage::_parse_shader(const Map<StringName, FunctionInfo> &p_funct func_node->return_type = type; func_node->return_precision = precision; + if (p_functions.has(name)) { + func_node->can_discard = p_functions[name].can_discard; + } + func_node->body = alloc_node<BlockNode>(); func_node->body->parent_function = func_node; diff --git a/servers/visual/shader_types.cpp b/servers/visual/shader_types.cpp index 91c5d430f5..bd8a67c0a3 100644 --- a/servers/visual/shader_types.cpp +++ b/servers/visual/shader_types.cpp @@ -50,12 +50,6 @@ ShaderTypes::ShaderTypes() { /*************** SPATIAL ***********************/ - shader_modes[VS::SHADER_SPATIAL].functions["vertex"].built_ins["SRC_VERTEX"] = ShaderLanguage::TYPE_VEC3; - shader_modes[VS::SHADER_SPATIAL].functions["vertex"].built_ins["SRC_NORMAL"] = ShaderLanguage::TYPE_VEC3; - shader_modes[VS::SHADER_SPATIAL].functions["vertex"].built_ins["SRC_BONES"] = ShaderLanguage::TYPE_IVEC4; - shader_modes[VS::SHADER_SPATIAL].functions["vertex"].built_ins["SRC_WEIGHTS"] = ShaderLanguage::TYPE_VEC4; - - shader_modes[VS::SHADER_SPATIAL].functions["vertex"].built_ins["POSITION"] = ShaderLanguage::TYPE_VEC4; shader_modes[VS::SHADER_SPATIAL].functions["vertex"].built_ins["VERTEX"] = ShaderLanguage::TYPE_VEC3; shader_modes[VS::SHADER_SPATIAL].functions["vertex"].built_ins["NORMAL"] = ShaderLanguage::TYPE_VEC3; shader_modes[VS::SHADER_SPATIAL].functions["vertex"].built_ins["TANGENT"] = ShaderLanguage::TYPE_VEC3; @@ -75,6 +69,7 @@ ShaderTypes::ShaderTypes() { shader_modes[VS::SHADER_SPATIAL].functions["vertex"].built_ins["CAMERA_MATRIX"] = ShaderLanguage::TYPE_MAT4; shader_modes[VS::SHADER_SPATIAL].functions["vertex"].built_ins["PROJECTION_MATRIX"] = ShaderLanguage::TYPE_MAT4; shader_modes[VS::SHADER_SPATIAL].functions["vertex"].built_ins["MODELVIEW_MATRIX"] = ShaderLanguage::TYPE_MAT4; + shader_modes[VS::SHADER_SPATIAL].functions["vertex"].built_ins["INV_PROJECTION_MATRIX"] = ShaderLanguage::TYPE_MAT4; shader_modes[VS::SHADER_SPATIAL].functions["vertex"].built_ins["TIME"] = ShaderLanguage::TYPE_FLOAT; shader_modes[VS::SHADER_SPATIAL].functions["vertex"].built_ins["VIEWPORT_SIZE"] = ShaderLanguage::TYPE_VEC2; @@ -89,7 +84,6 @@ ShaderTypes::ShaderTypes() { shader_modes[VS::SHADER_SPATIAL].functions["fragment"].built_ins["UV"] = ShaderLanguage::TYPE_VEC2; shader_modes[VS::SHADER_SPATIAL].functions["fragment"].built_ins["UV2"] = ShaderLanguage::TYPE_VEC2; shader_modes[VS::SHADER_SPATIAL].functions["fragment"].built_ins["COLOR"] = ShaderLanguage::TYPE_VEC4; - shader_modes[VS::SHADER_SPATIAL].functions["fragment"].built_ins["NORMAL"] = ShaderLanguage::TYPE_VEC3; shader_modes[VS::SHADER_SPATIAL].functions["fragment"].built_ins["ALBEDO"] = ShaderLanguage::TYPE_VEC3; shader_modes[VS::SHADER_SPATIAL].functions["fragment"].built_ins["ALPHA"] = ShaderLanguage::TYPE_FLOAT; shader_modes[VS::SHADER_SPATIAL].functions["fragment"].built_ins["METALLIC"] = ShaderLanguage::TYPE_FLOAT; @@ -104,6 +98,7 @@ ShaderTypes::ShaderTypes() { shader_modes[VS::SHADER_SPATIAL].functions["fragment"].built_ins["SSS_STRENGTH"] = ShaderLanguage::TYPE_FLOAT; shader_modes[VS::SHADER_SPATIAL].functions["fragment"].built_ins["TRANSMISSION"] = ShaderLanguage::TYPE_VEC3; shader_modes[VS::SHADER_SPATIAL].functions["fragment"].built_ins["AO"] = ShaderLanguage::TYPE_FLOAT; + shader_modes[VS::SHADER_SPATIAL].functions["fragment"].built_ins["AO_LIGHT_AFFECT"] = ShaderLanguage::TYPE_FLOAT; shader_modes[VS::SHADER_SPATIAL].functions["fragment"].built_ins["EMISSION"] = ShaderLanguage::TYPE_VEC3; shader_modes[VS::SHADER_SPATIAL].functions["fragment"].built_ins["SCREEN_TEXTURE"] = ShaderLanguage::TYPE_SAMPLER2D; shader_modes[VS::SHADER_SPATIAL].functions["fragment"].built_ins["DEPTH_TEXTURE"] = ShaderLanguage::TYPE_SAMPLER2D; @@ -115,10 +110,31 @@ ShaderTypes::ShaderTypes() { shader_modes[VS::SHADER_SPATIAL].functions["fragment"].built_ins["WORLD_MATRIX"] = ShaderLanguage::TYPE_MAT4; shader_modes[VS::SHADER_SPATIAL].functions["fragment"].built_ins["INV_CAMERA_MATRIX"] = ShaderLanguage::TYPE_MAT4; shader_modes[VS::SHADER_SPATIAL].functions["fragment"].built_ins["PROJECTION_MATRIX"] = ShaderLanguage::TYPE_MAT4; + shader_modes[VS::SHADER_SPATIAL].functions["fragment"].built_ins["INV_PROJECTION_MATRIX"] = ShaderLanguage::TYPE_MAT4; shader_modes[VS::SHADER_SPATIAL].functions["fragment"].built_ins["TIME"] = ShaderLanguage::TYPE_FLOAT; shader_modes[VS::SHADER_SPATIAL].functions["fragment"].built_ins["VIEWPORT_SIZE"] = ShaderLanguage::TYPE_VEC2; shader_modes[VS::SHADER_SPATIAL].functions["fragment"].can_discard = true; + shader_modes[VS::SHADER_SPATIAL].functions["light"].built_ins["WORLD_MATRIX"] = ShaderLanguage::TYPE_MAT4; + shader_modes[VS::SHADER_SPATIAL].functions["light"].built_ins["INV_CAMERA_MATRIX"] = ShaderLanguage::TYPE_MAT4; + shader_modes[VS::SHADER_SPATIAL].functions["light"].built_ins["PROJECTION_MATRIX"] = ShaderLanguage::TYPE_MAT4; + shader_modes[VS::SHADER_SPATIAL].functions["light"].built_ins["INV_PROJECTION_MATRIX"] = ShaderLanguage::TYPE_MAT4; + shader_modes[VS::SHADER_SPATIAL].functions["light"].built_ins["TIME"] = ShaderLanguage::TYPE_FLOAT; + shader_modes[VS::SHADER_SPATIAL].functions["light"].built_ins["VIEWPORT_SIZE"] = ShaderLanguage::TYPE_VEC2; + + shader_modes[VS::SHADER_SPATIAL].functions["light"].built_ins["NORMAL"] = ShaderLanguage::TYPE_VEC3; + shader_modes[VS::SHADER_SPATIAL].functions["light"].built_ins["VIEW"] = ShaderLanguage::TYPE_VEC3; + shader_modes[VS::SHADER_SPATIAL].functions["light"].built_ins["LIGHT"] = ShaderLanguage::TYPE_VEC3; + shader_modes[VS::SHADER_SPATIAL].functions["light"].built_ins["LIGHT_COLOR"] = ShaderLanguage::TYPE_VEC3; + shader_modes[VS::SHADER_SPATIAL].functions["light"].built_ins["ATTENUATION"] = ShaderLanguage::TYPE_VEC3; + shader_modes[VS::SHADER_SPATIAL].functions["light"].built_ins["ALBEDO"] = ShaderLanguage::TYPE_VEC3; + shader_modes[VS::SHADER_SPATIAL].functions["light"].built_ins["TRANSMISSION"] = ShaderLanguage::TYPE_VEC3; + shader_modes[VS::SHADER_SPATIAL].functions["light"].built_ins["ROUGHNESS"] = ShaderLanguage::TYPE_FLOAT; + shader_modes[VS::SHADER_SPATIAL].functions["light"].built_ins["DIFFUSE_LIGHT"] = ShaderLanguage::TYPE_VEC3; + shader_modes[VS::SHADER_SPATIAL].functions["light"].built_ins["SPECULAR_LIGHT"] = ShaderLanguage::TYPE_VEC3; + + shader_modes[VS::SHADER_SPATIAL].functions["light"].can_discard = true; + shader_modes[VS::SHADER_SPATIAL].modes.insert("blend_mix"); shader_modes[VS::SHADER_SPATIAL].modes.insert("blend_add"); shader_modes[VS::SHADER_SPATIAL].modes.insert("blend_sub"); @@ -143,7 +159,7 @@ ShaderTypes::ShaderTypes() { shader_modes[VS::SHADER_SPATIAL].modes.insert("diffuse_burley"); shader_modes[VS::SHADER_SPATIAL].modes.insert("diffuse_toon"); - shader_modes[VS::SHADER_SPATIAL].modes.insert("specular_schlick_ggx"); + shader_modes[VS::SHADER_SPATIAL].modes.insert("specular_ggx"); shader_modes[VS::SHADER_SPATIAL].modes.insert("specular_blinn"); shader_modes[VS::SHADER_SPATIAL].modes.insert("specular_phong"); shader_modes[VS::SHADER_SPATIAL].modes.insert("specular_toon"); @@ -156,21 +172,19 @@ ShaderTypes::ShaderTypes() { /************ CANVAS ITEM **************************/ - shader_modes[VS::SHADER_CANVAS_ITEM].functions["vertex"].built_ins["SRC_VERTEX"] = ShaderLanguage::TYPE_VEC2; shader_modes[VS::SHADER_CANVAS_ITEM].functions["vertex"].built_ins["VERTEX"] = ShaderLanguage::TYPE_VEC2; shader_modes[VS::SHADER_CANVAS_ITEM].functions["vertex"].built_ins["UV"] = ShaderLanguage::TYPE_VEC2; - shader_modes[VS::SHADER_CANVAS_ITEM].functions["vertex"].built_ins["VERTEX_COLOR"] = ShaderLanguage::TYPE_VEC4; + shader_modes[VS::SHADER_CANVAS_ITEM].functions["vertex"].built_ins["COLOR"] = ShaderLanguage::TYPE_VEC4; shader_modes[VS::SHADER_CANVAS_ITEM].functions["vertex"].built_ins["POINT_SIZE"] = ShaderLanguage::TYPE_FLOAT; shader_modes[VS::SHADER_CANVAS_ITEM].functions["vertex"].built_ins["WORLD_MATRIX"] = ShaderLanguage::TYPE_MAT4; shader_modes[VS::SHADER_CANVAS_ITEM].functions["vertex"].built_ins["PROJECTION_MATRIX"] = ShaderLanguage::TYPE_MAT4; shader_modes[VS::SHADER_CANVAS_ITEM].functions["vertex"].built_ins["EXTRA_MATRIX"] = ShaderLanguage::TYPE_MAT4; shader_modes[VS::SHADER_CANVAS_ITEM].functions["vertex"].built_ins["TIME"] = ShaderLanguage::TYPE_FLOAT; - shader_modes[VS::SHADER_CANVAS_ITEM].functions["vertex"].built_ins["PARTICLE_CUSTOM"] = ShaderLanguage::TYPE_VEC4; + shader_modes[VS::SHADER_CANVAS_ITEM].functions["vertex"].built_ins["INSTANCE_CUSTOM"] = ShaderLanguage::TYPE_VEC4; shader_modes[VS::SHADER_CANVAS_ITEM].functions["vertex"].built_ins["AT_LIGHT_PASS"] = ShaderLanguage::TYPE_BOOL; shader_modes[VS::SHADER_CANVAS_ITEM].functions["vertex"].can_discard = false; - shader_modes[VS::SHADER_CANVAS_ITEM].functions["fragment"].built_ins["SRC_COLOR"] = ShaderLanguage::TYPE_VEC4; shader_modes[VS::SHADER_CANVAS_ITEM].functions["fragment"].built_ins["FRAGCOORD"] = ShaderLanguage::TYPE_VEC4; shader_modes[VS::SHADER_CANVAS_ITEM].functions["fragment"].built_ins["NORMAL"] = ShaderLanguage::TYPE_VEC3; shader_modes[VS::SHADER_CANVAS_ITEM].functions["fragment"].built_ins["NORMALMAP"] = ShaderLanguage::TYPE_VEC3; @@ -179,13 +193,13 @@ ShaderTypes::ShaderTypes() { shader_modes[VS::SHADER_CANVAS_ITEM].functions["fragment"].built_ins["COLOR"] = ShaderLanguage::TYPE_VEC4; shader_modes[VS::SHADER_CANVAS_ITEM].functions["fragment"].built_ins["TEXTURE"] = ShaderLanguage::TYPE_SAMPLER2D; shader_modes[VS::SHADER_CANVAS_ITEM].functions["fragment"].built_ins["TEXTURE_PIXEL_SIZE"] = ShaderLanguage::TYPE_VEC2; + shader_modes[VS::SHADER_CANVAS_ITEM].functions["fragment"].built_ins["NORMAL_TEXTURE"] = ShaderLanguage::TYPE_SAMPLER2D; shader_modes[VS::SHADER_CANVAS_ITEM].functions["fragment"].built_ins["SCREEN_UV"] = ShaderLanguage::TYPE_VEC2; shader_modes[VS::SHADER_CANVAS_ITEM].functions["fragment"].built_ins["SCREEN_PIXEL_SIZE"] = ShaderLanguage::TYPE_VEC2; shader_modes[VS::SHADER_CANVAS_ITEM].functions["fragment"].built_ins["POINT_COORD"] = ShaderLanguage::TYPE_VEC2; shader_modes[VS::SHADER_CANVAS_ITEM].functions["fragment"].built_ins["TIME"] = ShaderLanguage::TYPE_FLOAT; shader_modes[VS::SHADER_CANVAS_ITEM].functions["fragment"].built_ins["AT_LIGHT_PASS"] = ShaderLanguage::TYPE_BOOL; shader_modes[VS::SHADER_CANVAS_ITEM].functions["fragment"].built_ins["SCREEN_TEXTURE"] = ShaderLanguage::TYPE_SAMPLER2D; - shader_modes[VS::SHADER_CANVAS_ITEM].functions["fragment"].built_ins["SCREEN_UV"] = ShaderLanguage::TYPE_VEC2; shader_modes[VS::SHADER_CANVAS_ITEM].functions["fragment"].can_discard = true; shader_modes[VS::SHADER_CANVAS_ITEM].functions["light"].built_ins["POSITION"] = ShaderLanguage::TYPE_VEC2; diff --git a/servers/visual/visual_server_raster.cpp b/servers/visual/visual_server_raster.cpp index 68ca586caf..c644fd2d55 100644 --- a/servers/visual/visual_server_raster.cpp +++ b/servers/visual/visual_server_raster.cpp @@ -90,17 +90,10 @@ void VisualServerRaster::request_frame_drawn_callback(Object *p_where, const Str fdc.param = p_userdata; frame_drawn_callbacks.push_back(fdc); - - print_line("added callback to draw"); } void VisualServerRaster::draw() { - /* - if (changes) - print_line("changes: "+itos(changes)); - */ - changes = 0; VSG::rasterizer->begin_frame(); @@ -109,9 +102,7 @@ void VisualServerRaster::draw() { VSG::viewport->draw_viewports(); VSG::scene->render_probes(); - //_draw_cursors_and_margins(); VSG::rasterizer->end_frame(); - //draw_extra_frame=VS:rasterizer->needs_to_draw_next_frame(); while (frame_drawn_callbacks.front()) { diff --git a/servers/visual/visual_server_raster.h b/servers/visual/visual_server_raster.h index 7c7ce46268..888fb29f93 100644 --- a/servers/visual/visual_server_raster.h +++ b/servers/visual/visual_server_raster.h @@ -589,11 +589,29 @@ class VisualServerRaster : public VisualServer { #endif void _draw_margins(); + static void _changes_changed() {} public: +//if editor is redrawing when it shouldn't, enable this and put a breakpoint in _changes_changed() +//#define DEBUG_CHANGES + +#ifdef DEBUG_CHANGES + _FORCE_INLINE_ static void redraw_request() { + changes++; + _changes_changed(); + } + +#define DISPLAY_CHANGED \ + changes++; \ + _changes_changed(); + +#else _FORCE_INLINE_ static void redraw_request() { changes++; } -#define DISPLAY_CHANGED changes++; +#define DISPLAY_CHANGED \ + changes++; +#endif +// print_line(String("CHANGED: ") + __FUNCTION__); #define BIND0R(m_r, m_name) \ m_r m_name() { return BINDBASE->m_name(); } @@ -950,7 +968,7 @@ public: BIND2(environment_set_background, RID, EnvironmentBG) BIND2(environment_set_sky, RID, RID) - BIND2(environment_set_sky_scale, RID, float) + BIND2(environment_set_sky_custom_fov, RID, float) BIND2(environment_set_bg_color, RID, const Color &) BIND2(environment_set_bg_energy, RID, float) BIND2(environment_set_canvas_max_layer, RID, int) diff --git a/servers/visual/visual_server_scene.cpp b/servers/visual/visual_server_scene.cpp index 9fb4dc524d..e49baf0763 100644 --- a/servers/visual/visual_server_scene.cpp +++ b/servers/visual/visual_server_scene.cpp @@ -2348,7 +2348,7 @@ void VisualServerScene::_bake_gi_probe(Instance *p_gi_probe) { RID rid = E->key(); const InstanceGIProbeData::LightCache &lc = E->get(); - if (!probe_data->dynamic.light_cache_changes.has(rid) || !(probe_data->dynamic.light_cache_changes[rid] == lc)) { + if ((!probe_data->dynamic.light_cache_changes.has(rid) || !(probe_data->dynamic.light_cache_changes[rid] == lc)) && lc.visible) { //erase light data _bake_gi_probe_light(header, cells, local_data, leaves, leaf_count, lc, -1); @@ -2361,7 +2361,7 @@ void VisualServerScene::_bake_gi_probe(Instance *p_gi_probe) { RID rid = E->key(); const InstanceGIProbeData::LightCache &lc = E->get(); - if (!probe_data->dynamic.light_cache.has(rid) || !(probe_data->dynamic.light_cache[rid] == lc)) { + if ((!probe_data->dynamic.light_cache.has(rid) || !(probe_data->dynamic.light_cache[rid] == lc)) && lc.visible) { //add light data _bake_gi_probe_light(header, cells, local_data, leaves, leaf_count, lc, 1); @@ -2568,6 +2568,7 @@ bool VisualServerScene::_check_gi_probe(Instance *p_gi_probe) { lc.spot_angle = VSG::storage->light_get_param(E->get()->base, VS::LIGHT_PARAM_SPOT_ANGLE); lc.spot_attenuation = VSG::storage->light_get_param(E->get()->base, VS::LIGHT_PARAM_SPOT_ATTENUATION); lc.transform = probe_data->dynamic.light_to_cell_xform * E->get()->transform; + lc.visible = E->get()->visible; if (!probe_data->dynamic.light_cache.has(E->get()->self) || !(probe_data->dynamic.light_cache[E->get()->self] == lc)) { all_equal = false; @@ -2587,6 +2588,7 @@ bool VisualServerScene::_check_gi_probe(Instance *p_gi_probe) { lc.spot_angle = VSG::storage->light_get_param(E->get()->base, VS::LIGHT_PARAM_SPOT_ANGLE); lc.spot_attenuation = VSG::storage->light_get_param(E->get()->base, VS::LIGHT_PARAM_SPOT_ATTENUATION); lc.transform = probe_data->dynamic.light_to_cell_xform * E->get()->transform; + lc.visible = E->get()->visible; if (!probe_data->dynamic.light_cache.has(E->get()->self) || !(probe_data->dynamic.light_cache[E->get()->self] == lc)) { all_equal = false; diff --git a/servers/visual/visual_server_scene.h b/servers/visual/visual_server_scene.h index ac771030cf..d30a2108a5 100644 --- a/servers/visual/visual_server_scene.h +++ b/servers/visual/visual_server_scene.h @@ -359,6 +359,7 @@ public: float attenuation; float spot_angle; float spot_attenuation; + bool visible; bool operator==(const LightCache &p_cache) { @@ -369,7 +370,8 @@ public: radius == p_cache.radius && attenuation == p_cache.attenuation && spot_angle == p_cache.spot_angle && - spot_attenuation == p_cache.spot_attenuation); + spot_attenuation == p_cache.spot_attenuation && + visible == p_cache.visible); } LightCache() { @@ -380,6 +382,7 @@ public: attenuation = 1.0; spot_angle = 1.0; spot_attenuation = 1.0; + visible = true; } }; diff --git a/servers/visual/visual_server_viewport.cpp b/servers/visual/visual_server_viewport.cpp index 0dca09a5bf..92c431e393 100644 --- a/servers/visual/visual_server_viewport.cpp +++ b/servers/visual/visual_server_viewport.cpp @@ -54,7 +54,7 @@ void VisualServerViewport::_draw_viewport(Viewport *p_viewport, ARVRInterface::E bool can_draw_3d = !p_viewport->disable_3d && !p_viewport->disable_3d_by_usage && VSG::scene->camera_owner.owns(p_viewport->camera); if (p_viewport->clear_mode != VS::VIEWPORT_CLEAR_NEVER) { - VSG::rasterizer->clear_render_target(clear_color); + VSG::rasterizer->clear_render_target(p_viewport->transparent_bg ? Color(0, 0, 0, 0) : clear_color); if (p_viewport->clear_mode == VS::VIEWPORT_CLEAR_ONLY_NEXT_FRAME) { p_viewport->clear_mode = VS::VIEWPORT_CLEAR_NEVER; } @@ -504,6 +504,7 @@ void VisualServerViewport::viewport_set_transparent_background(RID p_viewport, b ERR_FAIL_COND(!viewport); VSG::storage->render_target_set_flag(viewport->render_target, RasterizerStorage::RENDER_TARGET_TRANSPARENT, p_enabled); + viewport->transparent_bg = true; } void VisualServerViewport::viewport_set_global_canvas_transform(RID p_viewport, const Transform2D &p_transform) { diff --git a/servers/visual/visual_server_viewport.h b/servers/visual/visual_server_viewport.h index 8a294a9129..8db6eda133 100644 --- a/servers/visual/visual_server_viewport.h +++ b/servers/visual/visual_server_viewport.h @@ -72,6 +72,8 @@ public: VS::ViewportClearMode clear_mode; + bool transparent_bg; + struct CanvasKey { int layer; @@ -101,6 +103,7 @@ public: Viewport() { update_mode = VS::VIEWPORT_UPDATE_WHEN_VISIBLE; clear_mode = VS::VIEWPORT_CLEAR_ALWAYS; + transparent_bg = false; disable_environment = false; viewport_to_screen = 0; shadow_atlas_size = 0; diff --git a/servers/visual/visual_server_wrap_mt.h b/servers/visual/visual_server_wrap_mt.h index 5cf941b93d..caec890217 100644 --- a/servers/visual/visual_server_wrap_mt.h +++ b/servers/visual/visual_server_wrap_mt.h @@ -381,7 +381,7 @@ public: FUNC2(environment_set_background, RID, EnvironmentBG) FUNC2(environment_set_sky, RID, RID) - FUNC2(environment_set_sky_scale, RID, float) + FUNC2(environment_set_sky_custom_fov, RID, float) FUNC2(environment_set_bg_color, RID, const Color &) FUNC2(environment_set_bg_energy, RID, float) FUNC2(environment_set_canvas_max_layer, RID, int) diff --git a/servers/visual_server.cpp b/servers/visual_server.cpp index 47a5f4c7f3..2234ddda0d 100644 --- a/servers/visual_server.cpp +++ b/servers/visual_server.cpp @@ -62,6 +62,31 @@ RID VisualServer::texture_create_from_image(const Ref<Image> &p_image, uint32_t return texture; } +Array VisualServer::_texture_debug_usage_bind() { + + List<TextureInfo> list; + texture_debug_usage(&list); + Array arr; + for (const List<TextureInfo>::Element *E = list.front(); E; E = E->next()) { + + Dictionary dict; + dict["texture"] = E->get().texture; + dict["size"] = E->get().size; + dict["format"] = E->get().format; + dict["bytes"] = E->get().bytes; + dict["path"] = E->get().path; + arr.push_back(dict); + } + return arr; +} + +Array VisualServer::_shader_get_param_list_bind(RID p_shader) const { + + List<PropertyInfo> l; + shader_get_param_list(p_shader, &l); + return convert_property_list(&l); +} + RID VisualServer::get_test_texture() { if (test_texture.is_valid()) { @@ -1443,20 +1468,394 @@ Array VisualServer::mesh_surface_get_blend_shape_arrays(RID p_mesh, int p_surfac } } +Array VisualServer::_mesh_surface_get_skeleton_aabb_bind(RID p_mesh, int p_surface) const { + + Vector<Rect3> vec = VS::get_singleton()->mesh_surface_get_skeleton_aabb(p_mesh, p_surface); + Array arr; + for (int i = 0; i < vec.size(); i++) { + arr[i] = vec[i]; + } + return arr; +} + void VisualServer::_bind_methods() { + ClassDB::bind_method(D_METHOD("force_sync"), &VisualServer::sync); ClassDB::bind_method(D_METHOD("force_draw"), &VisualServer::draw); + ClassDB::bind_method(D_METHOD("texture_create"), &VisualServer::texture_create); ClassDB::bind_method(D_METHOD("texture_create_from_image", "image", "flags"), &VisualServer::texture_create_from_image, DEFVAL(TEXTURE_FLAGS_DEFAULT)); - //ClassDB::bind_method(D_METHOD("texture_allocate"),&VisualServer::texture_allocate,DEFVAL( TEXTURE_FLAGS_DEFAULT ) ); - //ClassDB::bind_method(D_METHOD("texture_set_data"),&VisualServer::texture_blit_rect,DEFVAL( CUBEMAP_LEFT ) ); - //ClassDB::bind_method(D_METHOD("texture_get_rect"),&VisualServer::texture_get_rect ); + ClassDB::bind_method(D_METHOD("texture_allocate", "texture", "width", "height", "format", "flags"), &VisualServer::texture_allocate, DEFVAL(TEXTURE_FLAGS_DEFAULT)); + ClassDB::bind_method(D_METHOD("texture_set_data", "texture", "image", "cube_side"), &VisualServer::texture_set_data, DEFVAL(CUBEMAP_LEFT)); + ClassDB::bind_method(D_METHOD("texture_get_data", "texture", "cube_side"), &VisualServer::texture_get_data, DEFVAL(CUBEMAP_LEFT)); ClassDB::bind_method(D_METHOD("texture_set_flags", "texture", "flags"), &VisualServer::texture_set_flags); ClassDB::bind_method(D_METHOD("texture_get_flags", "texture"), &VisualServer::texture_get_flags); + ClassDB::bind_method(D_METHOD("texture_get_format", "texture"), &VisualServer::texture_get_format); + ClassDB::bind_method(D_METHOD("texture_get_texid", "texture"), &VisualServer::texture_get_texid); ClassDB::bind_method(D_METHOD("texture_get_width", "texture"), &VisualServer::texture_get_width); ClassDB::bind_method(D_METHOD("texture_get_height", "texture"), &VisualServer::texture_get_height); - + ClassDB::bind_method(D_METHOD("texture_set_size_override", "texture", "width", "height"), &VisualServer::texture_set_size_override); + ClassDB::bind_method(D_METHOD("texture_set_path", "texture", "path"), &VisualServer::texture_set_path); + ClassDB::bind_method(D_METHOD("texture_get_path", "texture"), &VisualServer::texture_get_path); ClassDB::bind_method(D_METHOD("texture_set_shrink_all_x2_on_set_data", "shrink"), &VisualServer::texture_set_shrink_all_x2_on_set_data); + + ClassDB::bind_method(D_METHOD("texture_debug_usage"), &VisualServer::_texture_debug_usage_bind); + ClassDB::bind_method(D_METHOD("textures_keep_original", "enable"), &VisualServer::textures_keep_original); + + ClassDB::bind_method(D_METHOD("sky_create"), &VisualServer::sky_create); + ClassDB::bind_method(D_METHOD("sky_set_texture", "sky", "cube_map", "radiance_size"), &VisualServer::sky_set_texture); + + ClassDB::bind_method(D_METHOD("shader_create"), &VisualServer::shader_create); + ClassDB::bind_method(D_METHOD("shader_set_code", "shader", "code"), &VisualServer::shader_set_code); + ClassDB::bind_method(D_METHOD("shader_get_code", "shader"), &VisualServer::shader_get_code); + ClassDB::bind_method(D_METHOD("shader_get_param_list", "shader"), &VisualServer::_shader_get_param_list_bind); + ClassDB::bind_method(D_METHOD("shader_set_default_texture_param", "shader", "name", "texture"), &VisualServer::shader_set_default_texture_param); + ClassDB::bind_method(D_METHOD("shader_get_default_texture_param", "shader", "name"), &VisualServer::shader_get_default_texture_param); + + ClassDB::bind_method(D_METHOD("material_create"), &VisualServer::material_create); + ClassDB::bind_method(D_METHOD("material_set_shader", "shader_material", "shader"), &VisualServer::material_set_shader); + ClassDB::bind_method(D_METHOD("material_get_shader", "shader_material"), &VisualServer::material_get_shader); + ClassDB::bind_method(D_METHOD("material_set_param", "material", "parameter", "value"), &VisualServer::material_set_param); + ClassDB::bind_method(D_METHOD("material_get_param", "material", "parameter"), &VisualServer::material_get_param); + ClassDB::bind_method(D_METHOD("material_set_render_priority", "material", "priority"), &VisualServer::material_set_render_priority); + ClassDB::bind_method(D_METHOD("material_set_line_width", "material", "width"), &VisualServer::material_set_line_width); + ClassDB::bind_method(D_METHOD("material_set_next_pass", "material", "next_material"), &VisualServer::material_set_next_pass); + + ClassDB::bind_method(D_METHOD("mesh_create"), &VisualServer::mesh_create); + ClassDB::bind_method(D_METHOD("mesh_add_surface_from_arrays", "mesh", "primtive", "arrays", "blend_shapes", "compress_format"), &VisualServer::mesh_add_surface_from_arrays, DEFVAL(Array()), DEFVAL(ARRAY_COMPRESS_DEFAULT)); + ClassDB::bind_method(D_METHOD("mesh_set_blend_shape_count", "mesh", "amount"), &VisualServer::mesh_set_blend_shape_count); + ClassDB::bind_method(D_METHOD("mesh_get_blend_shape_count", "mesh"), &VisualServer::mesh_get_blend_shape_count); + ClassDB::bind_method(D_METHOD("mesh_set_blend_shape_mode", "mesh", "mode"), &VisualServer::mesh_set_blend_shape_mode); + ClassDB::bind_method(D_METHOD("mesh_get_blend_shape_mode", "mesh"), &VisualServer::mesh_get_blend_shape_mode); + ClassDB::bind_method(D_METHOD("mesh_surface_set_material", "mesh", "surface", "material"), &VisualServer::mesh_surface_set_material); + ClassDB::bind_method(D_METHOD("mesh_surface_get_material", "mesh", "surface"), &VisualServer::mesh_surface_get_material); + ClassDB::bind_method(D_METHOD("mesh_surface_get_array_len", "mesh", "surface"), &VisualServer::mesh_surface_get_array_len); + ClassDB::bind_method(D_METHOD("mesh_surface_get_array_index_len", "mesh", "surface"), &VisualServer::mesh_surface_get_array_index_len); + ClassDB::bind_method(D_METHOD("mesh_surface_get_array", "mesh", "surface"), &VisualServer::mesh_surface_get_array); + ClassDB::bind_method(D_METHOD("mesh_surface_get_index_array", "mesh", "surface"), &VisualServer::mesh_surface_get_index_array); + ClassDB::bind_method(D_METHOD("mesh_surface_get_arrays", "mesh", "surface"), &VisualServer::mesh_surface_get_arrays); + ClassDB::bind_method(D_METHOD("mesh_surface_get_blend_shape_arrays", "mesh", "surface"), &VisualServer::mesh_surface_get_blend_shape_arrays); + ClassDB::bind_method(D_METHOD("mesh_surface_get_format", "mesh", "surface"), &VisualServer::mesh_surface_get_format); + ClassDB::bind_method(D_METHOD("mesh_surface_get_primitive_type", "mesh", "surface"), &VisualServer::mesh_surface_get_primitive_type); + ClassDB::bind_method(D_METHOD("mesh_surface_get_aabb", "mesh", "surface"), &VisualServer::mesh_surface_get_aabb); + ClassDB::bind_method(D_METHOD("mesh_surface_get_skeleton_aabb", "mesh", "surface"), &VisualServer::_mesh_surface_get_skeleton_aabb_bind); + ClassDB::bind_method(D_METHOD("mesh_remove_surface", "mesh", "index"), &VisualServer::mesh_remove_surface); + ClassDB::bind_method(D_METHOD("mesh_get_surface_count", "mesh"), &VisualServer::mesh_get_surface_count); + ClassDB::bind_method(D_METHOD("mesh_set_custom_aabb", "mesh", "aabb"), &VisualServer::mesh_set_custom_aabb); + ClassDB::bind_method(D_METHOD("mesh_get_custom_aabb", "mesh"), &VisualServer::mesh_get_custom_aabb); + ClassDB::bind_method(D_METHOD("mesh_clear", "mesh"), &VisualServer::mesh_clear); + + // TODO: multimesh_*, immediate_*, skeleton_*, light_*, reflection_probe_*, gi_probe_*, particles_*, camera_* + + ClassDB::bind_method(D_METHOD("viewport_create"), &VisualServer::viewport_create); + ClassDB::bind_method(D_METHOD("viewport_set_use_arvr", "viewport", "use_arvr"), &VisualServer::viewport_set_use_arvr); + ClassDB::bind_method(D_METHOD("viewport_set_size", "viewport", "width", "height"), &VisualServer::viewport_set_size); + ClassDB::bind_method(D_METHOD("viewport_set_active", "viewport", "active"), &VisualServer::viewport_set_active); + ClassDB::bind_method(D_METHOD("viewport_set_parent_viewport", "viewport", "parent_viewport"), &VisualServer::viewport_set_parent_viewport); + ClassDB::bind_method(D_METHOD("viewport_attach_to_screen", "viewport", "rect", "screen"), &VisualServer::viewport_attach_to_screen, DEFVAL(Rect2()), DEFVAL(0)); + ClassDB::bind_method(D_METHOD("viewport_detach", "viewport"), &VisualServer::viewport_detach); + ClassDB::bind_method(D_METHOD("viewport_set_update_mode", "viewport", "update_mode"), &VisualServer::viewport_set_update_mode); + ClassDB::bind_method(D_METHOD("viewport_set_vflip", "viewport", "enabled"), &VisualServer::viewport_set_vflip); + ClassDB::bind_method(D_METHOD("viewport_set_clear_mode", "viewport", "clear_mode"), &VisualServer::viewport_set_clear_mode); + ClassDB::bind_method(D_METHOD("viewport_get_texture", "viewport"), &VisualServer::viewport_get_texture); + ClassDB::bind_method(D_METHOD("viewport_set_hide_scenario", "viewport", "hidden"), &VisualServer::viewport_set_hide_scenario); + ClassDB::bind_method(D_METHOD("viewport_set_hide_canvas", "viewport", "hidden"), &VisualServer::viewport_set_hide_canvas); + ClassDB::bind_method(D_METHOD("viewport_set_disable_environment", "viewport", "disabled"), &VisualServer::viewport_set_disable_environment); + ClassDB::bind_method(D_METHOD("viewport_set_disable_3d", "viewport", "disabled"), &VisualServer::viewport_set_disable_3d); + ClassDB::bind_method(D_METHOD("viewport_attach_camera", "viewport", "camera"), &VisualServer::viewport_attach_camera); + ClassDB::bind_method(D_METHOD("viewport_set_scenario", "viewport", "scenario"), &VisualServer::viewport_set_scenario); + ClassDB::bind_method(D_METHOD("viewport_attach_canvas", "viewport", "canvas"), &VisualServer::viewport_attach_canvas); + ClassDB::bind_method(D_METHOD("viewport_remove_canvas", "viewport", "canvas"), &VisualServer::viewport_remove_canvas); + ClassDB::bind_method(D_METHOD("viewport_set_canvas_transform", "viewport", "canvas", "offset"), &VisualServer::viewport_set_canvas_transform); + ClassDB::bind_method(D_METHOD("viewport_set_transparent_background", "viewport", "enabled"), &VisualServer::viewport_set_transparent_background); + ClassDB::bind_method(D_METHOD("viewport_set_global_canvas_transform", "viewport", "transform"), &VisualServer::viewport_set_global_canvas_transform); + ClassDB::bind_method(D_METHOD("viewport_set_canvas_layer", "viewport", "canvas", "layer"), &VisualServer::viewport_set_canvas_layer); + ClassDB::bind_method(D_METHOD("viewport_set_shadow_atlas_size", "viewport", "size"), &VisualServer::viewport_set_shadow_atlas_size); + ClassDB::bind_method(D_METHOD("viewport_set_shadow_atlas_quadrant_subdivision", "viewport", "quadrant", "subdivision"), &VisualServer::viewport_set_shadow_atlas_quadrant_subdivision); + ClassDB::bind_method(D_METHOD("viewport_set_msaa", "viewport", "msaa"), &VisualServer::viewport_set_msaa); + ClassDB::bind_method(D_METHOD("viewport_set_hdr", "viewport", "enabled"), &VisualServer::viewport_set_hdr); + ClassDB::bind_method(D_METHOD("viewport_set_usage", "viewport", "usage"), &VisualServer::viewport_set_usage); + ClassDB::bind_method(D_METHOD("viewport_get_render_info", "viewport", "info"), &VisualServer::viewport_get_render_info); + ClassDB::bind_method(D_METHOD("viewport_set_debug_draw", "viewport", "draw"), &VisualServer::viewport_set_debug_draw); + + // TODO: environment_*, scenario_*, instance_* + + ClassDB::bind_method(D_METHOD("canvas_create"), &VisualServer::canvas_create); + ClassDB::bind_method(D_METHOD("canvas_set_item_mirroring", "canvas", "item", "mirroring"), &VisualServer::canvas_set_item_mirroring); + ClassDB::bind_method(D_METHOD("canvas_set_modulate", "canvas", "color"), &VisualServer::canvas_set_modulate); + + ClassDB::bind_method(D_METHOD("canvas_item_create"), &VisualServer::canvas_item_create); + ClassDB::bind_method(D_METHOD("canvas_item_set_parent", "item", "parent"), &VisualServer::canvas_item_set_parent); + ClassDB::bind_method(D_METHOD("canvas_item_set_visible", "item", "visible"), &VisualServer::canvas_item_set_visible); + ClassDB::bind_method(D_METHOD("canvas_item_set_light_mask", "item", "mask"), &VisualServer::canvas_item_set_light_mask); + ClassDB::bind_method(D_METHOD("canvas_item_set_transform", "item", "transform"), &VisualServer::canvas_item_set_transform); + ClassDB::bind_method(D_METHOD("canvas_item_set_clip", "item", "clip"), &VisualServer::canvas_item_set_clip); + ClassDB::bind_method(D_METHOD("canvas_item_set_distance_field_mode", "item", "enabled"), &VisualServer::canvas_item_set_distance_field_mode); + ClassDB::bind_method(D_METHOD("canvas_item_set_custom_rect", "item", "use_custom_rect", "rect"), &VisualServer::canvas_item_set_custom_rect, DEFVAL(Rect2())); + ClassDB::bind_method(D_METHOD("canvas_item_set_modulate", "item", "color"), &VisualServer::canvas_item_set_modulate); + ClassDB::bind_method(D_METHOD("canvas_item_set_self_modulate", "item", "color"), &VisualServer::canvas_item_set_self_modulate); + ClassDB::bind_method(D_METHOD("canvas_item_set_draw_behind_parent", "item", "enabled"), &VisualServer::canvas_item_set_draw_behind_parent); + ClassDB::bind_method(D_METHOD("canvas_item_add_line", "item", "from", "to", "color", "width", "antialiased"), &VisualServer::canvas_item_add_line, DEFVAL(1.0), DEFVAL(false)); + ClassDB::bind_method(D_METHOD("canvas_item_add_polyline", "item", "points", "colors", "width", "antialiased"), &VisualServer::canvas_item_add_polyline, DEFVAL(1.0), DEFVAL(false)); + ClassDB::bind_method(D_METHOD("canvas_item_add_rect", "item", "rect", "color"), &VisualServer::canvas_item_add_rect); + ClassDB::bind_method(D_METHOD("canvas_item_add_circle", "item", "pos", "radius", "color"), &VisualServer::canvas_item_add_circle); + ClassDB::bind_method(D_METHOD("canvas_item_add_texture_rect", "item", "rect", "texture", "tile", "modulate", "transpose", "normal_map"), &VisualServer::canvas_item_add_texture_rect, DEFVAL(false), DEFVAL(Color(1, 1, 1)), DEFVAL(false), DEFVAL(RID())); + ClassDB::bind_method(D_METHOD("canvas_item_add_texture_rect_region", "item", "rect", "texture", "src_rect", "modulate", "transpose", "normal_map", "clip_uv"), &VisualServer::canvas_item_add_texture_rect_region, DEFVAL(Color(1, 1, 1)), DEFVAL(false), DEFVAL(RID()), DEFVAL(true)); + ClassDB::bind_method(D_METHOD("canvas_item_add_nine_patch", "item", "rect", "source", "texture", "topleft", "bottomright", "x_axis_mode", "y_axis_mode", "draw_center", "modulate", "normal_map"), &VisualServer::canvas_item_add_nine_patch, DEFVAL(NINE_PATCH_STRETCH), DEFVAL(NINE_PATCH_STRETCH), DEFVAL(true), DEFVAL(Color(1, 1, 1)), DEFVAL(RID())); + ClassDB::bind_method(D_METHOD("canvas_item_add_primitive", "item", "points", "colors", "uvs", "texture", "width", "normal_map"), &VisualServer::canvas_item_add_primitive, DEFVAL(1.0), DEFVAL(RID())); + ClassDB::bind_method(D_METHOD("canvas_item_add_polygon", "item", "points", "colors", "uvs", "texture", "normal_map", "antialiased"), &VisualServer::canvas_item_add_polygon, DEFVAL(Vector<Point2>()), DEFVAL(RID()), DEFVAL(RID()), DEFVAL(false)); + ClassDB::bind_method(D_METHOD("canvas_item_add_triangle_array", "item", "indices", "points", "colors", "uvs", "texture", "count", "normal_map"), &VisualServer::canvas_item_add_triangle_array, DEFVAL(Vector<Point2>()), DEFVAL(RID()), DEFVAL(-1), DEFVAL(RID())); + ClassDB::bind_method(D_METHOD("canvas_item_add_mesh", "item", "mesh", "skeleton"), &VisualServer::canvas_item_add_mesh, DEFVAL(RID())); + ClassDB::bind_method(D_METHOD("canvas_item_add_multimesh", "item", "mesh", "skeleton"), &VisualServer::canvas_item_add_multimesh, DEFVAL(RID())); + ClassDB::bind_method(D_METHOD("canvas_item_add_particles", "item", "particles", "texture", "normal_map", "h_frames", "v_frames"), &VisualServer::canvas_item_add_particles); + ClassDB::bind_method(D_METHOD("canvas_item_add_set_transform", "item", "transform"), &VisualServer::canvas_item_add_set_transform); + ClassDB::bind_method(D_METHOD("canvas_item_add_clip_ignore", "item", "ignore"), &VisualServer::canvas_item_add_clip_ignore); + ClassDB::bind_method(D_METHOD("canvas_item_set_sort_children_by_y", "item", "enabled"), &VisualServer::canvas_item_set_sort_children_by_y); + ClassDB::bind_method(D_METHOD("canvas_item_set_z", "item", "z"), &VisualServer::canvas_item_set_z); + ClassDB::bind_method(D_METHOD("canvas_item_set_z_as_relative_to_parent", "item", "enabled"), &VisualServer::canvas_item_set_z_as_relative_to_parent); + ClassDB::bind_method(D_METHOD("canvas_item_set_copy_to_backbuffer", "item", "enabled", "rect"), &VisualServer::canvas_item_set_copy_to_backbuffer); + ClassDB::bind_method(D_METHOD("canvas_item_clear", "item"), &VisualServer::canvas_item_clear); + ClassDB::bind_method(D_METHOD("canvas_item_set_draw_index", "item", "index"), &VisualServer::canvas_item_set_draw_index); + ClassDB::bind_method(D_METHOD("canvas_item_set_material", "item", "material"), &VisualServer::canvas_item_set_material); + ClassDB::bind_method(D_METHOD("canvas_item_set_use_parent_material", "item", "enabled"), &VisualServer::canvas_item_set_use_parent_material); + ClassDB::bind_method(D_METHOD("canvas_light_create"), &VisualServer::canvas_light_create); + ClassDB::bind_method(D_METHOD("canvas_light_attach_to_canvas", "light", "canvas"), &VisualServer::canvas_light_attach_to_canvas); + ClassDB::bind_method(D_METHOD("canvas_light_set_enabled", "light", "enabled"), &VisualServer::canvas_light_set_enabled); + ClassDB::bind_method(D_METHOD("canvas_light_set_scale", "light", "scale"), &VisualServer::canvas_light_set_scale); + ClassDB::bind_method(D_METHOD("canvas_light_set_transform", "light", "transform"), &VisualServer::canvas_light_set_transform); + ClassDB::bind_method(D_METHOD("canvas_light_set_texture", "light", "texture"), &VisualServer::canvas_light_set_texture); + ClassDB::bind_method(D_METHOD("canvas_light_set_texture_offset", "light", "offset"), &VisualServer::canvas_light_set_texture_offset); + ClassDB::bind_method(D_METHOD("canvas_light_set_color", "light", "color"), &VisualServer::canvas_light_set_color); + ClassDB::bind_method(D_METHOD("canvas_light_set_height", "light", "height"), &VisualServer::canvas_light_set_height); + ClassDB::bind_method(D_METHOD("canvas_light_set_energy", "light", "energy"), &VisualServer::canvas_light_set_energy); + ClassDB::bind_method(D_METHOD("canvas_light_set_z_range", "light", "min_z", "max_z"), &VisualServer::canvas_light_set_z_range); + ClassDB::bind_method(D_METHOD("canvas_light_set_layer_range", "light", "min_layer", "max_layer"), &VisualServer::canvas_light_set_layer_range); + ClassDB::bind_method(D_METHOD("canvas_light_set_item_cull_mask", "light", "mask"), &VisualServer::canvas_light_set_item_cull_mask); + ClassDB::bind_method(D_METHOD("canvas_light_set_item_shadow_cull_mask", "light", "mask"), &VisualServer::canvas_light_set_item_shadow_cull_mask); + ClassDB::bind_method(D_METHOD("canvas_light_set_mode", "light", "mode"), &VisualServer::canvas_light_set_mode); + ClassDB::bind_method(D_METHOD("canvas_light_set_shadow_enabled", "light", "enabled"), &VisualServer::canvas_light_set_shadow_enabled); + ClassDB::bind_method(D_METHOD("canvas_light_set_shadow_buffer_size", "light", "size"), &VisualServer::canvas_light_set_shadow_buffer_size); + ClassDB::bind_method(D_METHOD("canvas_light_set_shadow_gradient_length", "light", "length"), &VisualServer::canvas_light_set_shadow_gradient_length); + ClassDB::bind_method(D_METHOD("canvas_light_set_shadow_filter", "light", "filter"), &VisualServer::canvas_light_set_shadow_filter); + ClassDB::bind_method(D_METHOD("canvas_light_set_shadow_color", "light", "color"), &VisualServer::canvas_light_set_shadow_color); + ClassDB::bind_method(D_METHOD("canvas_light_set_shadow_smooth", "light", "smooth"), &VisualServer::canvas_light_set_shadow_smooth); + + ClassDB::bind_method(D_METHOD("canvas_light_occluder_create"), &VisualServer::canvas_light_occluder_create); + ClassDB::bind_method(D_METHOD("canvas_light_occluder_attach_to_canvas", "occluder", "canvas"), &VisualServer::canvas_light_occluder_attach_to_canvas); + ClassDB::bind_method(D_METHOD("canvas_light_occluder_set_enabled", "occluder", "enabled"), &VisualServer::canvas_light_occluder_set_enabled); + ClassDB::bind_method(D_METHOD("canvas_light_occluder_set_polygon", "occluder", "polygon"), &VisualServer::canvas_light_occluder_set_polygon); + ClassDB::bind_method(D_METHOD("canvas_light_occluder_set_transform", "occluder", "transform"), &VisualServer::canvas_light_occluder_set_transform); + ClassDB::bind_method(D_METHOD("canvas_light_occluder_set_light_mask", "occluder", "mask"), &VisualServer::canvas_light_occluder_set_light_mask); + + ClassDB::bind_method(D_METHOD("canvas_occluder_polygon_create"), &VisualServer::canvas_occluder_polygon_create); + ClassDB::bind_method(D_METHOD("canvas_occluder_polygon_set_shape", "occluder_polygon", "shape", "closed"), &VisualServer::canvas_occluder_polygon_set_shape); + ClassDB::bind_method(D_METHOD("canvas_occluder_polygon_set_shape_as_lines", "occluder_polygon", "shape"), &VisualServer::canvas_occluder_polygon_set_shape_as_lines); + ClassDB::bind_method(D_METHOD("canvas_occluder_polygon_set_cull_mode", "occluder_polygon", "mode"), &VisualServer::canvas_occluder_polygon_set_cull_mode); + + ClassDB::bind_method(D_METHOD("black_bars_set_margins", "left", "top", "right", "bottom"), &VisualServer::black_bars_set_margins); + ClassDB::bind_method(D_METHOD("black_bars_set_images", "left", "top", "right", "bottom"), &VisualServer::black_bars_set_images); + + ClassDB::bind_method(D_METHOD("free", "rid"), &VisualServer::free); + + ClassDB::bind_method(D_METHOD("request_frame_drawn_callback", "where", "method", "userdata"), &VisualServer::request_frame_drawn_callback); + ClassDB::bind_method(D_METHOD("draw"), &VisualServer::draw); + ClassDB::bind_method(D_METHOD("sync"), &VisualServer::sync); + ClassDB::bind_method(D_METHOD("has_changed"), &VisualServer::has_changed); + ClassDB::bind_method(D_METHOD("init"), &VisualServer::init); + ClassDB::bind_method(D_METHOD("finish"), &VisualServer::finish); + ClassDB::bind_method(D_METHOD("get_render_info", "info"), &VisualServer::get_render_info); + + ClassDB::bind_method(D_METHOD("get_test_cube"), &VisualServer::get_test_cube); + ClassDB::bind_method(D_METHOD("get_test_texture"), &VisualServer::get_test_texture); + ClassDB::bind_method(D_METHOD("get_white_texture"), &VisualServer::get_white_texture); + + ClassDB::bind_method(D_METHOD("make_sphere_mesh", "latitudes", "longitudes", "radius"), &VisualServer::make_sphere_mesh); + + ClassDB::bind_method(D_METHOD("set_boot_image", "image", "color", "scale"), &VisualServer::set_boot_image); + ClassDB::bind_method(D_METHOD("set_default_clear_color", "color"), &VisualServer::set_default_clear_color); + + ClassDB::bind_method(D_METHOD("has_feature", "feature"), &VisualServer::has_feature); + ClassDB::bind_method(D_METHOD("has_os_feature", "feature"), &VisualServer::has_os_feature); + ClassDB::bind_method(D_METHOD("set_debug_generate_wireframes", "generate"), &VisualServer::set_debug_generate_wireframes); + + BIND_CONSTANT(NO_INDEX_ARRAY); + BIND_CONSTANT(ARRAY_WEIGHTS_SIZE); + BIND_CONSTANT(CANVAS_ITEM_Z_MIN); + BIND_CONSTANT(CANVAS_ITEM_Z_MAX); + BIND_CONSTANT(MAX_GLOW_LEVELS); + BIND_CONSTANT(MAX_CURSORS); + BIND_CONSTANT(MATERIAL_RENDER_PRIORITY_MIN); + BIND_CONSTANT(MATERIAL_RENDER_PRIORITY_MAX); + + BIND_ENUM_CONSTANT(CUBEMAP_LEFT); + BIND_ENUM_CONSTANT(CUBEMAP_RIGHT); + BIND_ENUM_CONSTANT(CUBEMAP_BOTTOM); + BIND_ENUM_CONSTANT(CUBEMAP_TOP); + BIND_ENUM_CONSTANT(CUBEMAP_FRONT); + BIND_ENUM_CONSTANT(CUBEMAP_BACK); + + BIND_ENUM_CONSTANT(TEXTURE_FLAG_MIPMAPS); + BIND_ENUM_CONSTANT(TEXTURE_FLAG_REPEAT); + BIND_ENUM_CONSTANT(TEXTURE_FLAG_FILTER); + BIND_ENUM_CONSTANT(TEXTURE_FLAG_ANISOTROPIC_FILTER); + BIND_ENUM_CONSTANT(TEXTURE_FLAG_CONVERT_TO_LINEAR); + BIND_ENUM_CONSTANT(TEXTURE_FLAG_MIRRORED_REPEAT); + BIND_ENUM_CONSTANT(TEXTURE_FLAG_CUBEMAP); + BIND_ENUM_CONSTANT(TEXTURE_FLAG_USED_FOR_STREAMING); + BIND_ENUM_CONSTANT(TEXTURE_FLAGS_DEFAULT); + + BIND_ENUM_CONSTANT(SHADER_SPATIAL); + BIND_ENUM_CONSTANT(SHADER_CANVAS_ITEM); + BIND_ENUM_CONSTANT(SHADER_PARTICLES); + BIND_ENUM_CONSTANT(SHADER_MAX); + + BIND_ENUM_CONSTANT(ARRAY_VERTEX); + BIND_ENUM_CONSTANT(ARRAY_NORMAL); + BIND_ENUM_CONSTANT(ARRAY_TANGENT); + BIND_ENUM_CONSTANT(ARRAY_COLOR); + BIND_ENUM_CONSTANT(ARRAY_TEX_UV); + BIND_ENUM_CONSTANT(ARRAY_TEX_UV2); + BIND_ENUM_CONSTANT(ARRAY_BONES); + BIND_ENUM_CONSTANT(ARRAY_WEIGHTS); + BIND_ENUM_CONSTANT(ARRAY_INDEX); + BIND_ENUM_CONSTANT(ARRAY_MAX); + + BIND_ENUM_CONSTANT(ARRAY_FORMAT_VERTEX); + BIND_ENUM_CONSTANT(ARRAY_FORMAT_NORMAL); + BIND_ENUM_CONSTANT(ARRAY_FORMAT_TANGENT); + BIND_ENUM_CONSTANT(ARRAY_FORMAT_COLOR); + BIND_ENUM_CONSTANT(ARRAY_FORMAT_TEX_UV); + BIND_ENUM_CONSTANT(ARRAY_FORMAT_TEX_UV2); + BIND_ENUM_CONSTANT(ARRAY_FORMAT_BONES); + BIND_ENUM_CONSTANT(ARRAY_FORMAT_WEIGHTS); + BIND_ENUM_CONSTANT(ARRAY_FORMAT_INDEX); + BIND_ENUM_CONSTANT(ARRAY_COMPRESS_VERTEX); + BIND_ENUM_CONSTANT(ARRAY_COMPRESS_NORMAL); + BIND_ENUM_CONSTANT(ARRAY_COMPRESS_TANGENT); + BIND_ENUM_CONSTANT(ARRAY_COMPRESS_COLOR); + BIND_ENUM_CONSTANT(ARRAY_COMPRESS_TEX_UV); + BIND_ENUM_CONSTANT(ARRAY_COMPRESS_TEX_UV2); + BIND_ENUM_CONSTANT(ARRAY_COMPRESS_BONES); + BIND_ENUM_CONSTANT(ARRAY_COMPRESS_WEIGHTS); + BIND_ENUM_CONSTANT(ARRAY_COMPRESS_INDEX); + BIND_ENUM_CONSTANT(ARRAY_FLAG_USE_2D_VERTICES); + BIND_ENUM_CONSTANT(ARRAY_FLAG_USE_16_BIT_BONES); + BIND_ENUM_CONSTANT(ARRAY_COMPRESS_DEFAULT); + + BIND_ENUM_CONSTANT(PRIMITIVE_POINTS); + BIND_ENUM_CONSTANT(PRIMITIVE_LINES); + BIND_ENUM_CONSTANT(PRIMITIVE_LINE_STRIP); + BIND_ENUM_CONSTANT(PRIMITIVE_LINE_LOOP); + BIND_ENUM_CONSTANT(PRIMITIVE_TRIANGLES); + BIND_ENUM_CONSTANT(PRIMITIVE_TRIANGLE_STRIP); + BIND_ENUM_CONSTANT(PRIMITIVE_TRIANGLE_FAN); + BIND_ENUM_CONSTANT(PRIMITIVE_MAX); + + BIND_ENUM_CONSTANT(BLEND_SHAPE_MODE_NORMALIZED); + BIND_ENUM_CONSTANT(BLEND_SHAPE_MODE_RELATIVE); + + BIND_ENUM_CONSTANT(LIGHT_DIRECTIONAL); + BIND_ENUM_CONSTANT(LIGHT_OMNI); + BIND_ENUM_CONSTANT(LIGHT_SPOT); + + BIND_ENUM_CONSTANT(LIGHT_PARAM_ENERGY); + BIND_ENUM_CONSTANT(LIGHT_PARAM_SPECULAR); + BIND_ENUM_CONSTANT(LIGHT_PARAM_RANGE); + BIND_ENUM_CONSTANT(LIGHT_PARAM_ATTENUATION); + BIND_ENUM_CONSTANT(LIGHT_PARAM_SPOT_ANGLE); + BIND_ENUM_CONSTANT(LIGHT_PARAM_SPOT_ATTENUATION); + BIND_ENUM_CONSTANT(LIGHT_PARAM_CONTACT_SHADOW_SIZE); + BIND_ENUM_CONSTANT(LIGHT_PARAM_SHADOW_MAX_DISTANCE); + BIND_ENUM_CONSTANT(LIGHT_PARAM_SHADOW_SPLIT_1_OFFSET); + BIND_ENUM_CONSTANT(LIGHT_PARAM_SHADOW_SPLIT_2_OFFSET); + BIND_ENUM_CONSTANT(LIGHT_PARAM_SHADOW_SPLIT_3_OFFSET); + BIND_ENUM_CONSTANT(LIGHT_PARAM_SHADOW_NORMAL_BIAS); + BIND_ENUM_CONSTANT(LIGHT_PARAM_SHADOW_BIAS); + BIND_ENUM_CONSTANT(LIGHT_PARAM_SHADOW_BIAS_SPLIT_SCALE); + BIND_ENUM_CONSTANT(LIGHT_PARAM_MAX); + + BIND_ENUM_CONSTANT(VIEWPORT_UPDATE_DISABLED); + BIND_ENUM_CONSTANT(VIEWPORT_UPDATE_ONCE); + BIND_ENUM_CONSTANT(VIEWPORT_UPDATE_WHEN_VISIBLE); + BIND_ENUM_CONSTANT(VIEWPORT_UPDATE_ALWAYS); + + BIND_ENUM_CONSTANT(VIEWPORT_CLEAR_ALWAYS); + BIND_ENUM_CONSTANT(VIEWPORT_CLEAR_NEVER); + BIND_ENUM_CONSTANT(VIEWPORT_CLEAR_ONLY_NEXT_FRAME); + + BIND_ENUM_CONSTANT(VIEWPORT_MSAA_DISABLED); + BIND_ENUM_CONSTANT(VIEWPORT_MSAA_2X); + BIND_ENUM_CONSTANT(VIEWPORT_MSAA_4X); + BIND_ENUM_CONSTANT(VIEWPORT_MSAA_8X); + BIND_ENUM_CONSTANT(VIEWPORT_MSAA_16X); + + BIND_ENUM_CONSTANT(VIEWPORT_USAGE_2D); + BIND_ENUM_CONSTANT(VIEWPORT_USAGE_2D_NO_SAMPLING); + BIND_ENUM_CONSTANT(VIEWPORT_USAGE_3D); + BIND_ENUM_CONSTANT(VIEWPORT_USAGE_3D_NO_EFFECTS); + + BIND_ENUM_CONSTANT(VIEWPORT_RENDER_INFO_OBJECTS_IN_FRAME); + BIND_ENUM_CONSTANT(VIEWPORT_RENDER_INFO_VERTICES_IN_FRAME); + BIND_ENUM_CONSTANT(VIEWPORT_RENDER_INFO_MATERIAL_CHANGES_IN_FRAME); + BIND_ENUM_CONSTANT(VIEWPORT_RENDER_INFO_SHADER_CHANGES_IN_FRAME); + BIND_ENUM_CONSTANT(VIEWPORT_RENDER_INFO_SURFACE_CHANGES_IN_FRAME); + BIND_ENUM_CONSTANT(VIEWPORT_RENDER_INFO_DRAW_CALLS_IN_FRAME); + BIND_ENUM_CONSTANT(VIEWPORT_RENDER_INFO_MAX); + + BIND_ENUM_CONSTANT(VIEWPORT_DEBUG_DRAW_DISABLED); + BIND_ENUM_CONSTANT(VIEWPORT_DEBUG_DRAW_UNSHADED); + BIND_ENUM_CONSTANT(VIEWPORT_DEBUG_DRAW_OVERDRAW); + BIND_ENUM_CONSTANT(VIEWPORT_DEBUG_DRAW_WIREFRAME); + + BIND_ENUM_CONSTANT(SCENARIO_DEBUG_DISABLED); + BIND_ENUM_CONSTANT(SCENARIO_DEBUG_WIREFRAME); + BIND_ENUM_CONSTANT(SCENARIO_DEBUG_OVERDRAW); + BIND_ENUM_CONSTANT(SCENARIO_DEBUG_SHADELESS); + + BIND_ENUM_CONSTANT(INSTANCE_NONE); + BIND_ENUM_CONSTANT(INSTANCE_MESH); + BIND_ENUM_CONSTANT(INSTANCE_MULTIMESH); + BIND_ENUM_CONSTANT(INSTANCE_IMMEDIATE); + BIND_ENUM_CONSTANT(INSTANCE_PARTICLES); + BIND_ENUM_CONSTANT(INSTANCE_LIGHT); + BIND_ENUM_CONSTANT(INSTANCE_REFLECTION_PROBE); + BIND_ENUM_CONSTANT(INSTANCE_GI_PROBE); + BIND_ENUM_CONSTANT(INSTANCE_MAX); + BIND_ENUM_CONSTANT(INSTANCE_GEOMETRY_MASK); + + BIND_ENUM_CONSTANT(NINE_PATCH_STRETCH); + BIND_ENUM_CONSTANT(NINE_PATCH_TILE); + BIND_ENUM_CONSTANT(NINE_PATCH_TILE_FIT); + + BIND_ENUM_CONSTANT(CANVAS_LIGHT_MODE_ADD); + BIND_ENUM_CONSTANT(CANVAS_LIGHT_MODE_SUB); + BIND_ENUM_CONSTANT(CANVAS_LIGHT_MODE_MIX); + BIND_ENUM_CONSTANT(CANVAS_LIGHT_MODE_MASK); + + BIND_ENUM_CONSTANT(CANVAS_LIGHT_FILTER_NONE); + BIND_ENUM_CONSTANT(CANVAS_LIGHT_FILTER_PCF3); + BIND_ENUM_CONSTANT(CANVAS_LIGHT_FILTER_PCF5); + BIND_ENUM_CONSTANT(CANVAS_LIGHT_FILTER_PCF7); + BIND_ENUM_CONSTANT(CANVAS_LIGHT_FILTER_PCF9); + BIND_ENUM_CONSTANT(CANVAS_LIGHT_FILTER_PCF13); + + BIND_ENUM_CONSTANT(CANVAS_OCCLUDER_POLYGON_CULL_DISABLED); + BIND_ENUM_CONSTANT(CANVAS_OCCLUDER_POLYGON_CULL_CLOCKWISE); + BIND_ENUM_CONSTANT(CANVAS_OCCLUDER_POLYGON_CULL_COUNTER_CLOCKWISE); + + BIND_ENUM_CONSTANT(INFO_OBJECTS_IN_FRAME); + BIND_ENUM_CONSTANT(INFO_VERTICES_IN_FRAME); + BIND_ENUM_CONSTANT(INFO_MATERIAL_CHANGES_IN_FRAME); + BIND_ENUM_CONSTANT(INFO_SHADER_CHANGES_IN_FRAME); + BIND_ENUM_CONSTANT(INFO_SURFACE_CHANGES_IN_FRAME); + BIND_ENUM_CONSTANT(INFO_DRAW_CALLS_IN_FRAME); + BIND_ENUM_CONSTANT(INFO_USAGE_VIDEO_MEM_TOTAL); + BIND_ENUM_CONSTANT(INFO_VIDEO_MEM_USED); + BIND_ENUM_CONSTANT(INFO_TEXTURE_MEM_USED); + BIND_ENUM_CONSTANT(INFO_VERTEX_MEM_USED); + + BIND_ENUM_CONSTANT(FEATURE_SHADERS); + BIND_ENUM_CONSTANT(FEATURE_MULTITHREADED); } void VisualServer::_canvas_item_add_style_box(RID p_item, const Rect2 &p_rect, const Rect2 &p_source, RID p_texture, const Vector<float> &p_margins, const Color &p_modulate) { diff --git a/servers/visual_server.h b/servers/visual_server.h index 72f36f6b65..7b83bb929d 100644 --- a/servers/visual_server.h +++ b/servers/visual_server.h @@ -85,7 +85,7 @@ public: enum TextureFlags { TEXTURE_FLAG_MIPMAPS = 1, /// Enable automatic mipmap generation - when available TEXTURE_FLAG_REPEAT = 2, /// Repeat texture (Tiling), otherwise Clamping - TEXTURE_FLAG_FILTER = 4, /// Create texure with linear (or available) filter + TEXTURE_FLAG_FILTER = 4, /// Create texture with linear (or available) filter TEXTURE_FLAG_ANISOTROPIC_FILTER = 8, TEXTURE_FLAG_CONVERT_TO_LINEAR = 16, TEXTURE_FLAG_MIRRORED_REPEAT = 32, /// Repeat texture, with alternate sections mirrored @@ -137,6 +137,7 @@ public: }; virtual void texture_debug_usage(List<TextureInfo> *r_info) = 0; + Array _texture_debug_usage_bind(); virtual void textures_keep_original(bool p_enable) = 0; @@ -160,6 +161,7 @@ public: virtual void shader_set_code(RID p_shader, const String &p_code) = 0; virtual String shader_get_code(RID p_shader) const = 0; virtual void shader_get_param_list(RID p_shader, List<PropertyInfo> *p_param_list) const = 0; + Array _shader_get_param_list_bind(RID p_shader) const; virtual void shader_set_default_texture_param(RID p_shader, const StringName &p_name, RID p_texture) = 0; virtual RID shader_get_default_texture_param(RID p_shader, const StringName &p_name) const = 0; @@ -275,6 +277,7 @@ public: virtual Rect3 mesh_surface_get_aabb(RID p_mesh, int p_surface) const = 0; virtual Vector<PoolVector<uint8_t> > mesh_surface_get_blend_shapes(RID p_mesh, int p_surface) const = 0; virtual Vector<Rect3> mesh_surface_get_skeleton_aabb(RID p_mesh, int p_surface) const = 0; + Array _mesh_surface_get_skeleton_aabb_bind(RID p_mesh, int p_surface) const; virtual void mesh_remove_surface(RID p_mesh, int p_index) = 0; virtual int mesh_get_surface_count(RID p_mesh) const = 0; @@ -637,7 +640,7 @@ public: virtual void environment_set_background(RID p_env, EnvironmentBG p_bg) = 0; virtual void environment_set_sky(RID p_env, RID p_sky) = 0; - virtual void environment_set_sky_scale(RID p_env, float p_scale) = 0; + virtual void environment_set_sky_custom_fov(RID p_env, float p_scale) = 0; virtual void environment_set_bg_color(RID p_env, const Color &p_color) = 0; virtual void environment_set_bg_energy(RID p_env, float p_energy) = 0; virtual void environment_set_canvas_max_layer(RID p_env, int p_max_layer) = 0; @@ -941,18 +944,29 @@ public: }; // make variant understand the enums - VARIANT_ENUM_CAST(VisualServer::CubeMapSide); VARIANT_ENUM_CAST(VisualServer::TextureFlags); VARIANT_ENUM_CAST(VisualServer::ShaderMode); VARIANT_ENUM_CAST(VisualServer::ArrayType); VARIANT_ENUM_CAST(VisualServer::ArrayFormat); VARIANT_ENUM_CAST(VisualServer::PrimitiveType); +VARIANT_ENUM_CAST(VisualServer::BlendShapeMode); VARIANT_ENUM_CAST(VisualServer::LightType); VARIANT_ENUM_CAST(VisualServer::LightParam); +VARIANT_ENUM_CAST(VisualServer::ViewportUpdateMode); +VARIANT_ENUM_CAST(VisualServer::ViewportClearMode); +VARIANT_ENUM_CAST(VisualServer::ViewportMSAA); +VARIANT_ENUM_CAST(VisualServer::ViewportUsage); +VARIANT_ENUM_CAST(VisualServer::ViewportRenderInfo); +VARIANT_ENUM_CAST(VisualServer::ViewportDebugDraw); VARIANT_ENUM_CAST(VisualServer::ScenarioDebugMode); VARIANT_ENUM_CAST(VisualServer::InstanceType); +VARIANT_ENUM_CAST(VisualServer::NinePatchAxisMode); +VARIANT_ENUM_CAST(VisualServer::CanvasLightMode); +VARIANT_ENUM_CAST(VisualServer::CanvasLightShadowFilter); +VARIANT_ENUM_CAST(VisualServer::CanvasOccluderPolygonCullMode); VARIANT_ENUM_CAST(VisualServer::RenderInfo); +VARIANT_ENUM_CAST(VisualServer::Features); //typedef VisualServer VS; // makes it easier to use #define VS VisualServer diff --git a/thirdparty/README.md b/thirdparty/README.md index c081ad29b6..335fcdd80b 100644 --- a/thirdparty/README.md +++ b/thirdparty/README.md @@ -73,7 +73,7 @@ Use UI font if exists, because it has tight vertial metrix and good for UI. ## freetype - Upstream: https://www.freetype.org -- Version: 2.8 +- Version: 2.8.1 - License: FreeType License (BSD-like) Files extracted from upstream source: @@ -121,7 +121,7 @@ Files extracted from upstream source: ## libpng - Upstream: http://libpng.org/pub/png/libpng.html -- Version: 1.6.32 +- Version: 1.6.33 - License: libpng/zlib Files extracted from upstream source: diff --git a/thirdparty/enet/enet/enet.h b/thirdparty/enet/enet/enet.h index 8c9ad5463e..246cbb0a62 100644 --- a/thirdparty/enet/enet/enet.h +++ b/thirdparty/enet/enet/enet.h @@ -10,6 +10,7 @@ extern "C" { #endif +#include <stdint.h> #include <stdlib.h> #include "enet/godot.h" diff --git a/thirdparty/freetype/include/freetype/config/ftoption.h b/thirdparty/freetype/include/freetype/config/ftoption.h index 1bf6e8f534..2fbe80b9b4 100644 --- a/thirdparty/freetype/include/freetype/config/ftoption.h +++ b/thirdparty/freetype/include/freetype/config/ftoption.h @@ -107,20 +107,17 @@ FT_BEGIN_HEADER /*************************************************************************/ /* */ - /* Uncomment the line below if you want to activate sub-pixel rendering */ - /* (a.k.a. LCD rendering, or ClearType) in this build of the library. */ + /* Uncomment the line below if you want to activate LCD rendering */ + /* technology similar to ClearType in this build of the library. This */ + /* technology triples the resolution in the direction color subpixels. */ + /* To mitigate color fringes inherent to this technology, you also need */ + /* to explicitly set up LCD filtering. */ /* */ /* Note that this feature is covered by several Microsoft patents */ /* and should not be activated in any default build of the library. */ - /* */ - /* This macro has no impact on the FreeType API, only on its */ - /* _implementation_. For example, using FT_RENDER_MODE_LCD when calling */ - /* FT_Render_Glyph still generates a bitmap that is 3 times wider than */ - /* the original size in case this macro isn't defined; however, each */ - /* triplet of subpixels has R=G=B. */ - /* */ - /* This is done to allow FreeType clients to run unmodified, forcing */ - /* them to display normal gray-level anti-aliased glyphs. */ + /* When this macro is not defined, FreeType offers alternative LCD */ + /* rendering technology that produces excellent output without LCD */ + /* filtering. */ /* */ /* #define FT_CONFIG_OPTION_SUBPIXEL_RENDERING */ @@ -327,7 +324,7 @@ FT_BEGIN_HEADER /* */ /* - The TrueType driver will provide its own set of glyph names, */ /* if you build it to support postscript names in the TrueType */ - /* `post' table. */ + /* `post' table, but will not synthesize a missing Unicode charmap. */ /* */ /* - The Type 1 driver will not be able to synthesize a Unicode */ /* charmap out of the glyphs found in the fonts. */ diff --git a/thirdparty/freetype/include/freetype/freetype.h b/thirdparty/freetype/include/freetype/freetype.h index 2989fbb5e1..b0c261799a 100644 --- a/thirdparty/freetype/include/freetype/freetype.h +++ b/thirdparty/freetype/include/freetype/freetype.h @@ -575,7 +575,8 @@ FT_BEGIN_HEADER /* <Note> */ /* When a new face is created (either through @FT_New_Face or */ /* @FT_Open_Face), the library looks for a Unicode charmap within */ - /* the list and automatically activates it. */ + /* the list and automatically activates it. If there is no Unicode */ + /* charmap, FreeType doesn't set an `active' charmap. */ /* */ /* <Also> */ /* See @FT_CharMapRec for the publicly accessible fields of a given */ @@ -1529,7 +1530,13 @@ FT_BEGIN_HEADER /* values of the corresponding fields in @FT_FaceRec. Some values */ /* like ascender or descender are rounded for historical reasons; */ /* more precise values (for outline fonts) can be derived by scaling */ - /* the corresponding @FT_FaceRec values manually. */ + /* the corresponding @FT_FaceRec values manually, with code similar */ + /* to the following. */ + /* */ + /* { */ + /* scaled_ascender = FT_MulFix( face->root.ascender, */ + /* size_metrics->y_scale ); */ + /* } */ /* */ /* Note that due to glyph hinting and the selected rendering mode */ /* these values are usually not exact; consequently, they must be */ @@ -1774,7 +1781,7 @@ FT_BEGIN_HEADER /* and add it to `origin_x'> */ /* */ /* origin_x += slot->advance.x; */ - /* origin_x += slot->rsb_delta - slot->lsb_relta; */ + /* origin_x += slot->rsb_delta - slot->lsb_delta; */ /* endfor */ /* } */ /* */ @@ -1794,9 +1801,9 @@ FT_BEGIN_HEADER /* */ /* <load glyph with `FT_Load_Glyph'> */ /* */ - /* if ( prev_rsb_delta - slot->lsb_delta >= 32 ) */ + /* if ( prev_rsb_delta - slot->lsb_delta > 32 ) */ /* origin_x -= 64; */ - /* else if ( prev_rsb_delta - slot->lsb_delta < -32 ) */ + /* else if ( prev_rsb_delta - slot->lsb_delta < -31 ) */ /* origin_x += 64; */ /* */ /* prev_rsb_delta = slot->rsb_delta; */ @@ -3124,11 +3131,13 @@ FT_BEGIN_HEADER /* glyph outline in pixels and use the @FT_PIXEL_MODE_LCD_V mode. */ /* */ /* <Note> */ - /* The LCD-optimized glyph bitmaps produced by `FT_Render_Glyph' can */ - /* be filtered to reduce color-fringes by using */ - /* @FT_Library_SetLcdFilter (not active in the default builds). It */ - /* is up to the caller to either call `FT_Library_SetLcdFilter' (if */ - /* available) or do the filtering itself. */ + /* Should you define FT_CONFIG_OPTION_SUBPIXEL_RENDERING in your */ + /* `ftoption.h', which enables patented ClearType-style rendering, */ + /* the LCD-optimized glyph bitmaps should be filtered to reduce color */ + /* fringes inherent to this technology. You can either set up LCD */ + /* filtering with @FT_Library_SetLcdFilter or @FT_Face_Properties, */ + /* or do the filtering yourself. The default FreeType LCD rendering */ + /* technology does not require filtering. */ /* */ /* The selected render mode only affects vector glyphs of a font. */ /* Embedded bitmaps often have a different pixel mode like */ @@ -4327,6 +4336,9 @@ FT_BEGIN_HEADER /* `a' rounded to the nearest 16.16 fixed integer, halfway cases away */ /* from zero. */ /* */ + /* <Note> */ + /* The function uses wrap-around arithmetic. */ + /* */ FT_EXPORT( FT_Fixed ) FT_RoundFix( FT_Fixed a ); @@ -4345,6 +4357,9 @@ FT_BEGIN_HEADER /* <Return> */ /* `a' rounded towards plus infinity. */ /* */ + /* <Note> */ + /* The function uses wrap-around arithmetic. */ + /* */ FT_EXPORT( FT_Fixed ) FT_CeilFix( FT_Fixed a ); @@ -4442,7 +4457,7 @@ FT_BEGIN_HEADER */ #define FREETYPE_MAJOR 2 #define FREETYPE_MINOR 8 -#define FREETYPE_PATCH 0 +#define FREETYPE_PATCH 1 /*************************************************************************/ diff --git a/thirdparty/freetype/include/freetype/ftautoh.h b/thirdparty/freetype/include/freetype/ftautoh.h index abd540f0b5..2bb675ae46 100644 --- a/thirdparty/freetype/include/freetype/ftautoh.h +++ b/thirdparty/freetype/include/freetype/ftautoh.h @@ -404,12 +404,12 @@ FT_BEGIN_HEADER * activate the warp hinting code in the auto-hinter, this property * switches warping on and off. * - * Warping only works in `light' auto-hinting mode. The idea of the - * code is to slightly scale and shift a glyph along the non-hinted - * dimension (which is usually the horizontal axis) so that as much of - * its segments are aligned (more or less) to the grid. To find out a - * glyph's optimal scaling and shifting value, various parameter - * combinations are tried and scored. + * Warping only works in `normal' auto-hinting mode replacing it. + * The idea of the code is to slightly scale and shift a glyph along + * the non-hinted dimension (which is usually the horizontal axis) so + * that as much of its segments are aligned (more or less) to the grid. + * To find out a glyph's optimal scaling and shifting value, various + * parameter combinations are tried and scored. * * By default, warping is off. The example below shows how to switch on * warping (omitting the error handling). @@ -437,7 +437,7 @@ FT_BEGIN_HEADER * * Since warping is a global property of the auto-hinter it is best to * change its value before rendering any face. Otherwise, you should - * reload all faces that get auto-hinted in `light' hinting mode. + * reload all faces that get auto-hinted in `normal' hinting mode. * */ diff --git a/thirdparty/freetype/include/freetype/fterrdef.h b/thirdparty/freetype/include/freetype/fterrdef.h index cabbac8273..6a6dc85b87 100644 --- a/thirdparty/freetype/include/freetype/fterrdef.h +++ b/thirdparty/freetype/include/freetype/fterrdef.h @@ -233,6 +233,8 @@ "invalid PostScript (post) table" ) FT_ERRORDEF_( DEF_In_Glyf_Bytecode, 0x9C, "found FDEF or IDEF opcode in glyf bytecode" ) + FT_ERRORDEF_( Missing_Bitmap, 0x9D, + "missing bitmap in strike" ) /* CFF, CID, and Type 1 errors */ diff --git a/thirdparty/freetype/include/freetype/fterrors.h b/thirdparty/freetype/include/freetype/fterrors.h index 42769fa7bf..ae382c419f 100644 --- a/thirdparty/freetype/include/freetype/fterrors.h +++ b/thirdparty/freetype/include/freetype/fterrors.h @@ -38,15 +38,15 @@ /* The configuration macro FT_CONFIG_OPTION_USE_MODULE_ERRORS can be */ /* defined in `ftoption.h' in order to make the higher byte indicate */ /* the module where the error has happened (this is not compatible */ - /* with standard builds of FreeType 2, however). See the file */ + /* with standard builds of FreeType~2, however). See the file */ /* `ftmoderr.h' for more details. */ /* */ /* *Error* *Message* *Strings* */ /* */ /* Error definitions are set up with special macros that allow client */ /* applications to build a table of error message strings. The */ - /* strings are not included in a normal build of FreeType 2 to */ - /* save space (most client applications do not use them). */ + /* strings are not included in a normal build of FreeType~2 to save */ + /* space (most client applications do not use them). */ /* */ /* To do so, you have to define the following macros before including */ /* this file. */ diff --git a/thirdparty/freetype/include/freetype/ftglyph.h b/thirdparty/freetype/include/freetype/ftglyph.h index 79879a7ac7..db1a2c8ba5 100644 --- a/thirdparty/freetype/include/freetype/ftglyph.h +++ b/thirdparty/freetype/include/freetype/ftglyph.h @@ -231,6 +231,12 @@ FT_BEGIN_HEADER /* <Return> */ /* FreeType error code. 0~means success. */ /* */ + /* <Note> */ + /* Because `*aglyph->advance.x' and '*aglyph->advance.y' are 16.16 */ + /* fixed-point numbers, `slot->advance.x' and `slot->advance.y' */ + /* (which are in 26.6 fixed-point format) must be in the range */ + /* ]-32768;32768[. */ + /* */ FT_EXPORT( FT_Error ) FT_Get_Glyph( FT_GlyphSlot slot, FT_Glyph *aglyph ); @@ -566,6 +572,9 @@ FT_BEGIN_HEADER /* <Note> */ /* The result is undefined if either `a' or `b' is zero. */ /* */ + /* Since the function uses wrap-around arithmetic, results become */ + /* meaningless if the arguments are very large. */ + /* */ FT_EXPORT( void ) FT_Matrix_Multiply( const FT_Matrix* a, FT_Matrix* b ); diff --git a/thirdparty/freetype/include/freetype/ftimage.h b/thirdparty/freetype/include/freetype/ftimage.h index 1a049ef16d..1c789e5a44 100644 --- a/thirdparty/freetype/include/freetype/ftimage.h +++ b/thirdparty/freetype/include/freetype/ftimage.h @@ -1064,24 +1064,24 @@ FT_BEGIN_HEADER /* */ /* <Description> */ /* FreeType used to provide an area of memory called the `render */ - /* pool' available to all registered rasters. This was not thread */ - /* safe however and now FreeType never allocates this pool. NULL */ - /* is always passed in as pool_base. */ + /* pool' available to all registered rasterizers. This was not */ + /* thread safe, however, and now FreeType never allocates this pool. */ /* */ - /* This function is called each time the render pool changes, or just */ - /* after a new raster object is created. */ + /* This function is called after a new raster object is created. */ /* */ /* <Input> */ /* raster :: A handle to the new raster object. */ /* */ - /* pool_base :: The address in memory of the render pool. */ + /* pool_base :: Previously, the address in memory of the render pool. */ + /* Set this to NULL. */ /* */ - /* pool_size :: The size in bytes of the render pool. */ + /* pool_size :: Previously, the size in bytes of the render pool. */ + /* Set this to 0. */ /* */ /* <Note> */ - /* Rasters should ignore the render pool and rely on dynamic or stack */ - /* allocation if they want to (a handle to the memory allocator is */ - /* passed to the raster constructor). */ + /* Rasterizers should rely on dynamic or stack allocation if they */ + /* want to (a handle to the memory allocator is passed to the */ + /* rasterizer constructor). */ /* */ typedef void (*FT_Raster_ResetFunc)( FT_Raster raster, diff --git a/thirdparty/freetype/include/freetype/ftlcdfil.h b/thirdparty/freetype/include/freetype/ftlcdfil.h index 680bd90c89..bdaf9af906 100644 --- a/thirdparty/freetype/include/freetype/ftlcdfil.h +++ b/thirdparty/freetype/include/freetype/ftlcdfil.h @@ -44,9 +44,16 @@ FT_BEGIN_HEADER * Reduce color fringes of subpixel-rendered bitmaps. * * @description: - * Subpixel rendering exploits the color-striped structure of LCD - * pixels, increasing the available resolution in the direction of the - * stripe (usually horizontal RGB) by a factor of~3. Since these + * Should you #define FT_CONFIG_OPTION_SUBPIXEL_RENDERING in your + * `ftoption.h', which enables patented ClearType-style rendering, + * the LCD-optimized glyph bitmaps should be filtered to reduce color + * fringes inherent to this technology. The default FreeType LCD + * rendering uses different technology, and API described below, + * although available, does nothing. + * + * ClearType-style LCD rendering exploits the color-striped structure of + * LCD pixels, increasing the available resolution in the direction of + * the stripe (usually horizontal RGB) by a factor of~3. Since these * subpixels are color pixels, using them unfiltered creates severe * color fringes. Use the @FT_Library_SetLcdFilter API to specify a * low-pass filter, which is then applied to subpixel-rendered bitmaps @@ -54,12 +61,6 @@ FT_BEGIN_HEADER * the higher resolution to reduce color fringes, making the glyph image * slightly blurrier. Positional improvements will remain. * - * Note that no filter is active by default, and that this function is - * *not* implemented in default builds of the library. You need to - * #define FT_CONFIG_OPTION_SUBPIXEL_RENDERING in your `ftoption.h' file - * in order to activate it and explicitly call @FT_Library_SetLcdFilter - * to enable it. - * * A filter should have two properties: * * 1) It should be normalized, meaning the sum of the 5~components diff --git a/thirdparty/freetype/include/freetype/ftmac.h b/thirdparty/freetype/include/freetype/ftmac.h index ad97c6e4c3..a1656eec0e 100644 --- a/thirdparty/freetype/include/freetype/ftmac.h +++ b/thirdparty/freetype/include/freetype/ftmac.h @@ -35,11 +35,12 @@ FT_BEGIN_HEADER -/* gcc-3.4.1 and later can warn about functions tagged as deprecated */ + /* gcc-3.1 and later can warn about functions tagged as deprecated */ #ifndef FT_DEPRECATED_ATTRIBUTE -#if defined(__GNUC__) && \ - ((__GNUC__ >= 4) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 1))) -#define FT_DEPRECATED_ATTRIBUTE __attribute__((deprecated)) +#if defined( __GNUC__ ) && \ + ( ( __GNUC__ >= 4 ) || \ + ( ( __GNUC__ == 3 ) && ( __GNUC_MINOR__ >= 1 ) ) ) +#define FT_DEPRECATED_ATTRIBUTE __attribute__(( deprecated )) #else #define FT_DEPRECATED_ATTRIBUTE #endif diff --git a/thirdparty/freetype/include/freetype/ftmm.h b/thirdparty/freetype/include/freetype/ftmm.h index c41b80ea67..80ac98d612 100644 --- a/thirdparty/freetype/include/freetype/ftmm.h +++ b/thirdparty/freetype/include/freetype/ftmm.h @@ -178,7 +178,8 @@ FT_BEGIN_HEADER /* strid :: The entry in `name' table identifying this instance. */ /* */ /* psid :: The entry in `name' table identifying a PostScript name */ - /* for this instance. */ + /* for this instance. Value 0xFFFF indicates a missing */ + /* entry. */ /* */ typedef struct FT_Var_Named_Style_ { @@ -195,7 +196,7 @@ FT_BEGIN_HEADER /* FT_MM_Var */ /* */ /* <Description> */ - /* A structure to model the axes and space of a Adobe MM, TrueType */ + /* A structure to model the axes and space of an Adobe MM, TrueType */ /* GX, or OpenType variation font. */ /* */ /* Some fields are specific to one format and not to the others. */ @@ -321,6 +322,11 @@ FT_BEGIN_HEADER /* <Return> */ /* FreeType error code. 0~means success. */ /* */ + /* <Note> */ + /* To reset all axes to the default values, call the function with */ + /* `num_coords' set to zero and `coords' set to NULL (new feature in */ + /* FreeType version 2.8.1). */ + /* */ FT_EXPORT( FT_Error ) FT_Set_MM_Design_Coordinates( FT_Face face, FT_UInt num_coords, @@ -351,6 +357,11 @@ FT_BEGIN_HEADER /* <Return> */ /* FreeType error code. 0~means success. */ /* */ + /* <Note> */ + /* To reset all axes to the default values, call the function with */ + /* `num_coords' set to zero and `coords' set to NULL (new feature in */ + /* FreeType version 2.8.1). */ + /* */ FT_EXPORT( FT_Error ) FT_Set_Var_Design_Coordinates( FT_Face face, FT_UInt num_coords, @@ -415,6 +426,11 @@ FT_BEGIN_HEADER /* <Return> */ /* FreeType error code. 0~means success. */ /* */ + /* <Note> */ + /* To reset all axes to the default values, call the function with */ + /* `num_coords' set to zero and `coords' set to NULL (new feature in */ + /* FreeType version 2.8.1). */ + /* */ FT_EXPORT( FT_Error ) FT_Set_MM_Blend_Coordinates( FT_Face face, FT_UInt num_coords, @@ -479,6 +495,50 @@ FT_BEGIN_HEADER FT_UInt num_coords, FT_Fixed* coords ); + + /*************************************************************************/ + /* */ + /* <Enum> */ + /* FT_VAR_AXIS_FLAG_XXX */ + /* */ + /* <Description> */ + /* A list of bit flags used in the return value of */ + /* @FT_Get_Var_Axis_Flags. */ + /* */ + /* <Values> */ + /* FT_VAR_AXIS_FLAG_HIDDEN :: */ + /* The variation axis should not be exposed to user interfaces. */ + /* */ +#define FT_VAR_AXIS_FLAG_HIDDEN 1 + + + /*************************************************************************/ + /* */ + /* <Function> */ + /* FT_Get_Var_Axis_Flags */ + /* */ + /* <Description> */ + /* Get the `flags' field of an OpenType Variation Axis Record. */ + /* */ + /* Not meaningful for Adobe MM fonts (`*flags' is always zero). */ + /* */ + /* <Input> */ + /* master :: The variation descriptor. */ + /* */ + /* axis_index :: The index of the requested variation axis. */ + /* */ + /* <Output> */ + /* flags :: The `flags' field. See @FT_VAR_AXIS_FLAG_XXX for */ + /* possible values. */ + /* */ + /* <Return> */ + /* FreeType error code. 0~means success. */ + /* */ + FT_EXPORT( FT_Error ) + FT_Get_Var_Axis_Flags( FT_MM_Var* master, + FT_UInt axis_index, + FT_UInt* flags ); + /* */ diff --git a/thirdparty/freetype/include/freetype/ftoutln.h b/thirdparty/freetype/include/freetype/ftoutln.h index 07f73ebb1b..56f56a9603 100644 --- a/thirdparty/freetype/include/freetype/ftoutln.h +++ b/thirdparty/freetype/include/freetype/ftoutln.h @@ -385,6 +385,9 @@ FT_BEGIN_HEADER /* @FT_Outline_Embolden, which uses the same strength in both */ /* directions. */ /* */ + /* <Since> */ + /* 2.4.10 */ + /* */ FT_EXPORT( FT_Error ) FT_Outline_EmboldenXY( FT_Outline* outline, FT_Pos xstrength, diff --git a/thirdparty/freetype/include/freetype/internal/ftcalc.h b/thirdparty/freetype/include/freetype/internal/ftcalc.h index c9ac9d8246..8b35f03d88 100644 --- a/thirdparty/freetype/include/freetype/internal/ftcalc.h +++ b/thirdparty/freetype/include/freetype/internal/ftcalc.h @@ -399,16 +399,42 @@ FT_BEGIN_HEADER #endif /* 0 */ -#define INT_TO_F26DOT6( x ) ( (FT_Long)(x) << 6 ) -#define INT_TO_F2DOT14( x ) ( (FT_Long)(x) << 14 ) -#define INT_TO_FIXED( x ) ( (FT_Long)(x) << 16 ) -#define F2DOT14_TO_FIXED( x ) ( (FT_Long)(x) << 2 ) -#define FLOAT_TO_FIXED( x ) ( (FT_Long)( x * 65536.0 ) ) +#define INT_TO_F26DOT6( x ) ( (FT_Long)(x) * 64 ) /* << 6 */ +#define INT_TO_F2DOT14( x ) ( (FT_Long)(x) * 16384 ) /* << 14 */ +#define INT_TO_FIXED( x ) ( (FT_Long)(x) * 65536 ) /* << 16 */ +#define F2DOT14_TO_FIXED( x ) ( (FT_Long)(x) * 4 ) /* << 2 */ #define FIXED_TO_INT( x ) ( FT_RoundFix( x ) >> 16 ) #define ROUND_F26DOT6( x ) ( x >= 0 ? ( ( (x) + 32 ) & -64 ) \ : ( -( ( 32 - (x) ) & -64 ) ) ) + /* + * The following macros have two purposes. + * + * . Tag places where overflow is expected and harmless. + * + * . Avoid run-time sanitizer errors. + * + * Use with care! + */ +#define ADD_LONG( a, b ) \ + (FT_Long)( (FT_ULong)(a) + (FT_ULong)(b) ) +#define SUB_LONG( a, b ) \ + (FT_Long)( (FT_ULong)(a) - (FT_ULong)(b) ) +#define MUL_LONG( a, b ) \ + (FT_Long)( (FT_ULong)(a) * (FT_ULong)(b) ) +#define NEG_LONG( a ) \ + (FT_Long)( (FT_ULong)0 - (FT_ULong)(a) ) + +#define ADD_INT32( a, b ) \ + (FT_Int32)( (FT_UInt32)(a) + (FT_UInt32)(b) ) +#define SUB_INT32( a, b ) \ + (FT_Int32)( (FT_UInt32)(a) - (FT_UInt32)(b) ) +#define MUL_INT32( a, b ) \ + (FT_Int32)( (FT_UInt32)(a) * (FT_UInt32)(b) ) +#define NEG_INT32( a ) \ + (FT_Int32)( (FT_UInt32)0 - (FT_UInt32)(a) ) + FT_END_HEADER diff --git a/thirdparty/freetype/include/freetype/internal/ftobjs.h b/thirdparty/freetype/include/freetype/internal/ftobjs.h index 558409166d..4231be238a 100644 --- a/thirdparty/freetype/include/freetype/internal/ftobjs.h +++ b/thirdparty/freetype/include/freetype/internal/ftobjs.h @@ -36,6 +36,7 @@ #include FT_INTERNAL_AUTOHINT_H #include FT_INTERNAL_SERVICE_H #include FT_INTERNAL_PIC_H +#include FT_INTERNAL_CALC_H #ifdef FT_CONFIG_OPTION_INCREMENTAL #include FT_INCREMENTAL_H @@ -85,13 +86,29 @@ FT_BEGIN_HEADER /* we use FT_TYPEOF to suppress signedness compilation warnings */ #define FT_PAD_FLOOR( x, n ) ( (x) & ~FT_TYPEOF( x )( (n)-1 ) ) -#define FT_PAD_ROUND( x, n ) FT_PAD_FLOOR( (x) + ((n)/2), n ) -#define FT_PAD_CEIL( x, n ) FT_PAD_FLOOR( (x) + ((n)-1), n ) +#define FT_PAD_ROUND( x, n ) FT_PAD_FLOOR( (x) + (n)/2, n ) +#define FT_PAD_CEIL( x, n ) FT_PAD_FLOOR( (x) + (n)-1, n ) #define FT_PIX_FLOOR( x ) ( (x) & ~FT_TYPEOF( x )63 ) #define FT_PIX_ROUND( x ) FT_PIX_FLOOR( (x) + 32 ) #define FT_PIX_CEIL( x ) FT_PIX_FLOOR( (x) + 63 ) + /* specialized versions (for signed values) */ + /* that don't produce run-time errors due to integer overflow */ +#define FT_PAD_ROUND_LONG( x, n ) FT_PAD_FLOOR( ADD_LONG( (x), (n) / 2 ), \ + n ) +#define FT_PAD_CEIL_LONG( x, n ) FT_PAD_FLOOR( ADD_LONG( (x), (n) - 1 ), \ + n ) +#define FT_PIX_ROUND_LONG( x ) FT_PIX_FLOOR( ADD_LONG( (x), 32 ) ) +#define FT_PIX_CEIL_LONG( x ) FT_PIX_FLOOR( ADD_LONG( (x), 63 ) ) + +#define FT_PAD_ROUND_INT32( x, n ) FT_PAD_FLOOR( ADD_INT32( (x), (n) / 2 ), \ + n ) +#define FT_PAD_CEIL_INT32( x, n ) FT_PAD_FLOOR( ADD_INT32( (x), (n) - 1 ), \ + n ) +#define FT_PIX_ROUND_INT32( x ) FT_PIX_FLOOR( ADD_INT32( (x), 32 ) ) +#define FT_PIX_CEIL_INT32( x ) FT_PIX_FLOOR( ADD_INT32( (x), 63 ) ) + /* * character classification functions -- since these are used to parse @@ -856,11 +873,6 @@ FT_BEGIN_HEADER /* */ /* auto_hinter :: The auto-hinter module interface. */ /* */ - /* raster_pool :: The raster object's render pool. This can */ - /* ideally be changed dynamically at run-time. */ - /* */ - /* raster_pool_size :: The size of the render pool in bytes. */ - /* */ /* debug_hooks :: An array of four function pointers that allow */ /* debuggers to hook into a font format's */ /* interpreter. Currently, only the TrueType */ @@ -869,9 +881,6 @@ FT_BEGIN_HEADER /* lcd_filter :: If subpixel rendering is activated, the */ /* selected LCD filter mode. */ /* */ - /* lcd_extra :: If subpixel rendering is activated, the number */ - /* of extra pixels needed for the LCD filter. */ - /* */ /* lcd_weights :: If subpixel rendering is activated, the LCD */ /* filter weights, if any. */ /* */ @@ -903,15 +912,10 @@ FT_BEGIN_HEADER FT_Renderer cur_renderer; /* current outline renderer */ FT_Module auto_hinter; - FT_Byte* raster_pool; /* scan-line conversion */ - /* render pool */ - FT_ULong raster_pool_size; /* size of render pool in bytes */ - FT_DebugHook_Func debug_hooks[4]; #ifdef FT_CONFIG_OPTION_SUBPIXEL_RENDERING FT_LcdFilter lcd_filter; - FT_Int lcd_extra; /* number of extra pixels */ FT_LcdFiveTapFilter lcd_weights; /* filter weights, if any */ FT_Bitmap_LcdFilterFunc lcd_filter_func; /* filtering callback */ #endif diff --git a/thirdparty/freetype/include/freetype/tttags.h b/thirdparty/freetype/include/freetype/tttags.h index 32eb2fdc26..b7d3bac0f1 100644 --- a/thirdparty/freetype/include/freetype/tttags.h +++ b/thirdparty/freetype/include/freetype/tttags.h @@ -106,6 +106,12 @@ FT_BEGIN_HEADER #define TTAG_VVAR FT_MAKE_TAG( 'V', 'V', 'A', 'R' ) #define TTAG_wOFF FT_MAKE_TAG( 'w', 'O', 'F', 'F' ) +/* used by "Keyboard.dfont" on legacy Mac OS X */ +#define TTAG_0xA5kbd FT_MAKE_TAG( 0xA5, 'k', 'b', 'd' ) + +/* used by "LastResort.dfont" on legacy Mac OS X */ +#define TTAG_0xA5lst FT_MAKE_TAG( 0xA5, 'l', 's', 't' ) + FT_END_HEADER diff --git a/thirdparty/freetype/src/autofit/afblue.c b/thirdparty/freetype/src/autofit/afblue.c index a00c3a0765..fedeacf797 100644 --- a/thirdparty/freetype/src/autofit/afblue.c +++ b/thirdparty/freetype/src/autofit/afblue.c @@ -592,9 +592,6 @@ { AF_BLUE_STRING_KAYAH_LI_DESCENDER, 0 }, { AF_BLUE_STRING_KAYAH_LI_LARGE_DESCENDER, 0 }, { AF_BLUE_STRING_MAX, 0 }, - { AF_BLUE_STRING_KANNADA_TOP, AF_BLUE_PROPERTY_LATIN_TOP }, - { AF_BLUE_STRING_KANNADA_BOTTOM, 0 }, - { AF_BLUE_STRING_MAX, 0 }, { AF_BLUE_STRING_KHMER_TOP, AF_BLUE_PROPERTY_LATIN_TOP | AF_BLUE_PROPERTY_LATIN_X_HEIGHT }, { AF_BLUE_STRING_KHMER_SUBSCRIPT_TOP, AF_BLUE_PROPERTY_LATIN_SUB_TOP }, @@ -606,6 +603,9 @@ AF_BLUE_PROPERTY_LATIN_X_HEIGHT }, { AF_BLUE_STRING_KHMER_SYMBOLS_WANING_BOTTOM, 0 }, { AF_BLUE_STRING_MAX, 0 }, + { AF_BLUE_STRING_KANNADA_TOP, AF_BLUE_PROPERTY_LATIN_TOP }, + { AF_BLUE_STRING_KANNADA_BOTTOM, 0 }, + { AF_BLUE_STRING_MAX, 0 }, { AF_BLUE_STRING_LAO_TOP, AF_BLUE_PROPERTY_LATIN_TOP | AF_BLUE_PROPERTY_LATIN_X_HEIGHT }, { AF_BLUE_STRING_LAO_BOTTOM, 0 }, @@ -701,6 +701,9 @@ { AF_BLUE_STRING_TELUGU_TOP, AF_BLUE_PROPERTY_LATIN_TOP }, { AF_BLUE_STRING_TELUGU_BOTTOM, 0 }, { AF_BLUE_STRING_MAX, 0 }, + { AF_BLUE_STRING_TIFINAGH, AF_BLUE_PROPERTY_LATIN_TOP }, + { AF_BLUE_STRING_TIFINAGH, 0 }, + { AF_BLUE_STRING_MAX, 0 }, { AF_BLUE_STRING_THAI_TOP, AF_BLUE_PROPERTY_LATIN_TOP | AF_BLUE_PROPERTY_LATIN_X_HEIGHT }, { AF_BLUE_STRING_THAI_BOTTOM, 0 }, @@ -710,9 +713,6 @@ { AF_BLUE_STRING_THAI_LARGE_DESCENDER, 0 }, { AF_BLUE_STRING_THAI_DIGIT_TOP, 0 }, { AF_BLUE_STRING_MAX, 0 }, - { AF_BLUE_STRING_TIFINAGH, AF_BLUE_PROPERTY_LATIN_TOP }, - { AF_BLUE_STRING_TIFINAGH, 0 }, - { AF_BLUE_STRING_MAX, 0 }, { AF_BLUE_STRING_VAI_TOP, AF_BLUE_PROPERTY_LATIN_TOP }, { AF_BLUE_STRING_VAI_BOTTOM, 0 }, { AF_BLUE_STRING_MAX, 0 }, diff --git a/thirdparty/freetype/src/autofit/afblue.dat b/thirdparty/freetype/src/autofit/afblue.dat index 454923e9ca..f62eb82a1a 100644 --- a/thirdparty/freetype/src/autofit/afblue.dat +++ b/thirdparty/freetype/src/autofit/afblue.dat @@ -872,11 +872,6 @@ AF_BLUE_STRINGSET_ENUM AF_BLUE_STRINGSETS_ARRAY AF_BLUE_STRINGSET_MAX_LEN: { AF_BLUE_STRING_KAYAH_LI_LARGE_DESCENDER, 0 } { AF_BLUE_STRING_MAX, 0 } - AF_BLUE_STRINGSET_KNDA - { AF_BLUE_STRING_KANNADA_TOP, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_KANNADA_BOTTOM, 0 } - { AF_BLUE_STRING_MAX, 0 } - AF_BLUE_STRINGSET_KHMR { AF_BLUE_STRING_KHMER_TOP, AF_BLUE_PROPERTY_LATIN_TOP | AF_BLUE_PROPERTY_LATIN_X_HEIGHT } @@ -892,6 +887,11 @@ AF_BLUE_STRINGSET_ENUM AF_BLUE_STRINGSETS_ARRAY AF_BLUE_STRINGSET_MAX_LEN: { AF_BLUE_STRING_KHMER_SYMBOLS_WANING_BOTTOM, 0 } { AF_BLUE_STRING_MAX, 0 } + AF_BLUE_STRINGSET_KNDA + { AF_BLUE_STRING_KANNADA_TOP, AF_BLUE_PROPERTY_LATIN_TOP } + { AF_BLUE_STRING_KANNADA_BOTTOM, 0 } + { AF_BLUE_STRING_MAX, 0 } + AF_BLUE_STRINGSET_LAO { AF_BLUE_STRING_LAO_TOP, AF_BLUE_PROPERTY_LATIN_TOP | AF_BLUE_PROPERTY_LATIN_X_HEIGHT } @@ -1027,6 +1027,11 @@ AF_BLUE_STRINGSET_ENUM AF_BLUE_STRINGSETS_ARRAY AF_BLUE_STRINGSET_MAX_LEN: { AF_BLUE_STRING_TELUGU_BOTTOM, 0 } { AF_BLUE_STRING_MAX, 0 } + AF_BLUE_STRINGSET_TFNG + { AF_BLUE_STRING_TIFINAGH, AF_BLUE_PROPERTY_LATIN_TOP } + { AF_BLUE_STRING_TIFINAGH, 0 } + { AF_BLUE_STRING_MAX, 0 } + AF_BLUE_STRINGSET_THAI { AF_BLUE_STRING_THAI_TOP, AF_BLUE_PROPERTY_LATIN_TOP | AF_BLUE_PROPERTY_LATIN_X_HEIGHT } @@ -1038,11 +1043,6 @@ AF_BLUE_STRINGSET_ENUM AF_BLUE_STRINGSETS_ARRAY AF_BLUE_STRINGSET_MAX_LEN: { AF_BLUE_STRING_THAI_DIGIT_TOP, 0 } { AF_BLUE_STRING_MAX, 0 } - AF_BLUE_STRINGSET_TFNG - { AF_BLUE_STRING_TIFINAGH, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_TIFINAGH, 0 } - { AF_BLUE_STRING_MAX, 0 } - AF_BLUE_STRINGSET_VAII { AF_BLUE_STRING_VAI_TOP, AF_BLUE_PROPERTY_LATIN_TOP } { AF_BLUE_STRING_VAI_BOTTOM, 0 } diff --git a/thirdparty/freetype/src/autofit/afblue.h b/thirdparty/freetype/src/autofit/afblue.h index e227dbf50b..99ef51cd4a 100644 --- a/thirdparty/freetype/src/autofit/afblue.h +++ b/thirdparty/freetype/src/autofit/afblue.h @@ -344,9 +344,9 @@ FT_BEGIN_HEADER AF_BLUE_STRINGSET_GURU = 116, AF_BLUE_STRINGSET_HEBR = 122, AF_BLUE_STRINGSET_KALI = 126, - AF_BLUE_STRINGSET_KNDA = 132, - AF_BLUE_STRINGSET_KHMR = 135, - AF_BLUE_STRINGSET_KHMS = 141, + AF_BLUE_STRINGSET_KHMR = 132, + AF_BLUE_STRINGSET_KHMS = 138, + AF_BLUE_STRINGSET_KNDA = 141, AF_BLUE_STRINGSET_LAO = 144, AF_BLUE_STRINGSET_LATN = 150, AF_BLUE_STRINGSET_LATB = 157, @@ -367,8 +367,8 @@ FT_BEGIN_HEADER AF_BLUE_STRINGSET_TAML = 222, AF_BLUE_STRINGSET_TAVT = 225, AF_BLUE_STRINGSET_TELU = 228, - AF_BLUE_STRINGSET_THAI = 231, - AF_BLUE_STRINGSET_TFNG = 239, + AF_BLUE_STRINGSET_TFNG = 231, + AF_BLUE_STRINGSET_THAI = 234, AF_BLUE_STRINGSET_VAII = 242, af_blue_2_1 = 245, #ifdef AF_CONFIG_OPTION_CJK diff --git a/thirdparty/freetype/src/autofit/afcjk.c b/thirdparty/freetype/src/autofit/afcjk.c index 61e29cdeda..897533d148 100644 --- a/thirdparty/freetype/src/autofit/afcjk.c +++ b/thirdparty/freetype/src/autofit/afcjk.c @@ -2272,13 +2272,7 @@ goto Exit; /* analyze glyph outline */ -#ifdef AF_CONFIG_OPTION_USE_WARPER - if ( ( metrics->root.scaler.render_mode == FT_RENDER_MODE_LIGHT && - AF_HINTS_DO_WARP( hints ) ) || - AF_HINTS_DO_HORIZONTAL( hints ) ) -#else if ( AF_HINTS_DO_HORIZONTAL( hints ) ) -#endif { error = af_cjk_hints_detect_features( hints, AF_DIMENSION_HORZ ); if ( error ) @@ -2304,9 +2298,9 @@ { #ifdef AF_CONFIG_OPTION_USE_WARPER - if ( dim == AF_DIMENSION_HORZ && - metrics->root.scaler.render_mode == FT_RENDER_MODE_LIGHT && - AF_HINTS_DO_WARP( hints ) ) + if ( dim == AF_DIMENSION_HORZ && + metrics->root.scaler.render_mode == FT_RENDER_MODE_NORMAL && + AF_HINTS_DO_WARP( hints ) ) { AF_WarperRec warper; FT_Fixed scale; diff --git a/thirdparty/freetype/src/autofit/afhints.c b/thirdparty/freetype/src/autofit/afhints.c index f1ff0baef8..1b21c06c2c 100644 --- a/thirdparty/freetype/src/autofit/afhints.c +++ b/thirdparty/freetype/src/autofit/afhints.c @@ -507,15 +507,15 @@ return FT_THROW( Invalid_Argument ); seg = &axis->segments[idx]; - *offset = ( dim == AF_DIMENSION_HORZ ) ? seg->first->ox - : seg->first->oy; + *offset = ( dim == AF_DIMENSION_HORZ ) ? seg->first->fx + : seg->first->fy; if ( seg->edge ) *is_blue = (FT_Bool)( seg->edge->blue_edge != 0 ); else *is_blue = FALSE; if ( *is_blue ) - *blue_offset = seg->edge->blue_edge->cur; + *blue_offset = seg->edge->blue_edge->org; else *blue_offset = 0; diff --git a/thirdparty/freetype/src/autofit/aflatin.c b/thirdparty/freetype/src/autofit/aflatin.c index 11fa523c83..02b3b8bbd3 100644 --- a/thirdparty/freetype/src/autofit/aflatin.c +++ b/thirdparty/freetype/src/autofit/aflatin.c @@ -1690,9 +1690,11 @@ if ( prev_max_on_coord > max_on_coord ) max_on_coord = prev_max_on_coord; - prev_segment->last = point; - prev_segment->pos = (FT_Short)( ( min_pos + - max_pos ) >> 1 ); + prev_segment->last = point; + prev_segment->pos = (FT_Short)( ( min_pos + + max_pos ) >> 1 ); + prev_segment->delta = (FT_Short)( ( max_pos - + min_pos ) >> 1 ); if ( ( min_flags | max_flags ) & AF_FLAG_CONTROL && ( max_on_coord - min_on_coord ) < flat_threshold ) @@ -1720,9 +1722,11 @@ if ( max_pos > prev_max_pos ) prev_max_pos = max_pos; - prev_segment->last = point; - prev_segment->pos = (FT_Short)( ( prev_min_pos + - prev_max_pos ) >> 1 ); + prev_segment->last = point; + prev_segment->pos = (FT_Short)( ( prev_min_pos + + prev_max_pos ) >> 1 ); + prev_segment->delta = (FT_Short)( ( prev_max_pos - + prev_min_pos ) >> 1 ); } else { @@ -1733,8 +1737,9 @@ if ( prev_max_pos > max_pos ) max_pos = prev_max_pos; - segment->last = point; - segment->pos = (FT_Short)( ( min_pos + max_pos ) >> 1 ); + segment->last = point; + segment->pos = (FT_Short)( ( min_pos + max_pos ) >> 1 ); + segment->delta = (FT_Short)( ( max_pos - min_pos ) >> 1 ); if ( ( min_flags | max_flags ) & AF_FLAG_CONTROL && ( max_on_coord - min_on_coord ) < flat_threshold ) @@ -3492,13 +3497,7 @@ goto Exit; /* analyze glyph outline */ -#ifdef AF_CONFIG_OPTION_USE_WARPER - if ( ( metrics->root.scaler.render_mode == FT_RENDER_MODE_LIGHT && - AF_HINTS_DO_WARP( hints ) ) || - AF_HINTS_DO_HORIZONTAL( hints ) ) -#else if ( AF_HINTS_DO_HORIZONTAL( hints ) ) -#endif { axis = &metrics->axis[AF_DIMENSION_HORZ]; error = af_latin_hints_detect_features( hints, @@ -3528,9 +3527,9 @@ for ( dim = 0; dim < AF_DIMENSION_MAX; dim++ ) { #ifdef AF_CONFIG_OPTION_USE_WARPER - if ( dim == AF_DIMENSION_HORZ && - metrics->root.scaler.render_mode == FT_RENDER_MODE_LIGHT && - AF_HINTS_DO_WARP( hints ) ) + if ( dim == AF_DIMENSION_HORZ && + metrics->root.scaler.render_mode == FT_RENDER_MODE_NORMAL && + AF_HINTS_DO_WARP( hints ) ) { AF_WarperRec warper; FT_Fixed scale; diff --git a/thirdparty/freetype/src/autofit/aflatin2.c b/thirdparty/freetype/src/autofit/aflatin2.c index 0607278b1e..fb42445116 100644 --- a/thirdparty/freetype/src/autofit/aflatin2.c +++ b/thirdparty/freetype/src/autofit/aflatin2.c @@ -2340,13 +2340,7 @@ goto Exit; /* analyze glyph outline */ -#ifdef AF_CONFIG_OPTION_USE_WARPER - if ( ( metrics->root.scaler.render_mode == FT_RENDER_MODE_LIGHT && - AF_HINTS_DO_WARP( hints ) ) || - AF_HINTS_DO_HORIZONTAL( hints ) ) -#else if ( AF_HINTS_DO_HORIZONTAL( hints ) ) -#endif { error = af_latin2_hints_detect_features( hints, AF_DIMENSION_HORZ ); if ( error ) @@ -2366,9 +2360,9 @@ for ( dim = 0; dim < AF_DIMENSION_MAX; dim++ ) { #ifdef AF_CONFIG_OPTION_USE_WARPER - if ( dim == AF_DIMENSION_HORZ && - metrics->root.scaler.render_mode == FT_RENDER_MODE_LIGHT && - AF_HINTS_DO_WARP( hints ) ) + if ( dim == AF_DIMENSION_HORZ && + metrics->root.scaler.render_mode == FT_RENDER_MODE_NORMAL && + AF_HINTS_DO_WARP( hints ) ) { AF_WarperRec warper; FT_Fixed scale; diff --git a/thirdparty/freetype/src/autofit/afloader.c b/thirdparty/freetype/src/autofit/afloader.c index 78c4368b61..067ebd17f6 100644 --- a/thirdparty/freetype/src/autofit/afloader.c +++ b/thirdparty/freetype/src/autofit/afloader.c @@ -483,8 +483,8 @@ FT_Pos pp2x = loader->pp2.x; - loader->pp1.x = FT_PIX_ROUND( pp1x ); - loader->pp2.x = FT_PIX_ROUND( pp2x ); + loader->pp1.x = FT_PIX_ROUND( pp1x + hints->xmin_delta ); + loader->pp2.x = FT_PIX_ROUND( pp2x + hints->xmax_delta ); slot->lsb_delta = loader->pp1.x - pp1x; slot->rsb_delta = loader->pp2.x - pp2x; @@ -498,8 +498,8 @@ FT_Pos pp2x = loader->pp2.x; - loader->pp1.x = FT_PIX_ROUND( pp1x + hints->xmin_delta ); - loader->pp2.x = FT_PIX_ROUND( pp2x + hints->xmax_delta ); + loader->pp1.x = FT_PIX_ROUND( pp1x ); + loader->pp2.x = FT_PIX_ROUND( pp2x ); slot->lsb_delta = loader->pp1.x - pp1x; slot->rsb_delta = loader->pp2.x - pp2x; diff --git a/thirdparty/freetype/src/autofit/afscript.h b/thirdparty/freetype/src/autofit/afscript.h index 7547a9e6f9..cb815dbb40 100644 --- a/thirdparty/freetype/src/autofit/afscript.h +++ b/thirdparty/freetype/src/autofit/afscript.h @@ -187,12 +187,6 @@ HINTING_BOTTOM_TO_TOP, "\xEA\xA4\x8D \xEA\xA4\x80" ) /* ê¤ ê¤€ */ - SCRIPT( knda, KNDA, - "Kannada", - HB_SCRIPT_KANNADA, - HINTING_BOTTOM_TO_TOP, - "\xE0\xB3\xA6 \xE0\xB2\xAC" ) /* ೦ ಬ */ - /* only digit zero has a simple shape in the Khmer script */ SCRIPT( khmr, KHMR, "Khmer", @@ -206,6 +200,12 @@ HINTING_BOTTOM_TO_TOP, "\xE1\xA7\xA1 \xE1\xA7\xAA" ) /* á§¡ ᧪ */ + SCRIPT( knda, KNDA, + "Kannada", + HB_SCRIPT_KANNADA, + HINTING_BOTTOM_TO_TOP, + "\xE0\xB3\xA6 \xE0\xB2\xAC" ) /* ೦ ಬ */ + /* only digit zero has a simple shape in the Lao script */ SCRIPT( lao, LAO, "Lao", @@ -330,18 +330,18 @@ HINTING_BOTTOM_TO_TOP, "\xE0\xB1\xA6 \xE0\xB1\xA7" ) /* ౦ à±§ */ - SCRIPT( thai, THAI, - "Thai", - HB_SCRIPT_THAI, - HINTING_BOTTOM_TO_TOP, - "\xE0\xB8\xB2 \xE0\xB9\x85 \xE0\xB9\x90" ) /* า ๅ ๠*/ - SCRIPT( tfng, TFNG, "Tifinagh", HB_SCRIPT_TIFINAGH, HINTING_BOTTOM_TO_TOP, "\xE2\xB5\x94" ) /* âµ” */ + SCRIPT( thai, THAI, + "Thai", + HB_SCRIPT_THAI, + HINTING_BOTTOM_TO_TOP, + "\xE0\xB8\xB2 \xE0\xB9\x85 \xE0\xB9\x90" ) /* า ๅ ๠*/ + SCRIPT( vaii, VAII, "Vai", HB_SCRIPT_VAI, diff --git a/thirdparty/freetype/src/autofit/afshaper.c b/thirdparty/freetype/src/autofit/afshaper.c index da92fad3ed..d259964217 100644 --- a/thirdparty/freetype/src/autofit/afshaper.c +++ b/thirdparty/freetype/src/autofit/afshaper.c @@ -18,6 +18,7 @@ #include <ft2build.h> #include FT_FREETYPE_H +#include FT_ADVANCES_H #include "afglobal.h" #include "aftypes.h" #include "afshaper.h" diff --git a/thirdparty/freetype/src/autofit/afstyles.h b/thirdparty/freetype/src/autofit/afstyles.h index a5e13d8944..281559eea2 100644 --- a/thirdparty/freetype/src/autofit/afstyles.h +++ b/thirdparty/freetype/src/autofit/afstyles.h @@ -255,13 +255,6 @@ AF_BLUE_STRINGSET_KALI, AF_COVERAGE_DEFAULT ) - STYLE( knda_dflt, KNDA_DFLT, - "Kannada default style", - AF_WRITING_SYSTEM_LATIN, - AF_SCRIPT_KNDA, - AF_BLUE_STRINGSET_KNDA, - AF_COVERAGE_DEFAULT ) - STYLE( khmr_dflt, KHMR_DFLT, "Khmer default style", AF_WRITING_SYSTEM_LATIN, @@ -276,6 +269,13 @@ AF_BLUE_STRINGSET_KHMS, AF_COVERAGE_DEFAULT ) + STYLE( knda_dflt, KNDA_DFLT, + "Kannada default style", + AF_WRITING_SYSTEM_LATIN, + AF_SCRIPT_KNDA, + AF_BLUE_STRINGSET_KNDA, + AF_COVERAGE_DEFAULT ) + STYLE( lao_dflt, LAO_DFLT, "Lao default style", AF_WRITING_SYSTEM_LATIN, @@ -420,13 +420,6 @@ AF_BLUE_STRINGSET_TELU, AF_COVERAGE_DEFAULT ) - STYLE( thai_dflt, THAI_DFLT, - "Thai default style", - AF_WRITING_SYSTEM_LATIN, - AF_SCRIPT_THAI, - AF_BLUE_STRINGSET_THAI, - AF_COVERAGE_DEFAULT ) - STYLE( tfng_dflt, TFNG_DFLT, "Tifinagh default style", AF_WRITING_SYSTEM_LATIN, @@ -434,6 +427,13 @@ AF_BLUE_STRINGSET_TFNG, AF_COVERAGE_DEFAULT ) + STYLE( thai_dflt, THAI_DFLT, + "Thai default style", + AF_WRITING_SYSTEM_LATIN, + AF_SCRIPT_THAI, + AF_BLUE_STRINGSET_THAI, + AF_COVERAGE_DEFAULT ) + STYLE( vaii_dflt, VAII_DFLT, "Vai default style", AF_WRITING_SYSTEM_LATIN, diff --git a/thirdparty/freetype/src/base/ftbitmap.c b/thirdparty/freetype/src/base/ftbitmap.c index 88c88c4c1b..e567a0453e 100644 --- a/thirdparty/freetype/src/base/ftbitmap.c +++ b/thirdparty/freetype/src/base/ftbitmap.c @@ -226,7 +226,7 @@ } /* otherwise allocate new buffer */ - if ( FT_QALLOC_MULT( buffer, new_pitch, bitmap->rows + ypixels ) ) + if ( FT_QALLOC_MULT( buffer, bitmap->rows + ypixels, new_pitch ) ) return error; /* new rows get added at the top of the bitmap, */ @@ -534,8 +534,7 @@ (FT_ULong)target->rows > FT_ULONG_MAX / (FT_ULong)target_pitch ) return FT_THROW( Invalid_Argument ); - if ( target->rows * (FT_ULong)target_pitch > old_size && - FT_QREALLOC( target->buffer, + if ( FT_QREALLOC( target->buffer, old_size, target->rows * (FT_UInt)target_pitch ) ) return error; diff --git a/thirdparty/freetype/src/base/ftcalc.c b/thirdparty/freetype/src/base/ftcalc.c index f0525502f3..00d63c6e6b 100644 --- a/thirdparty/freetype/src/base/ftcalc.c +++ b/thirdparty/freetype/src/base/ftcalc.c @@ -68,14 +68,15 @@ #define FT_COMPONENT trace_calc - /* transfer sign leaving a positive number */ -#define FT_MOVE_SIGN( x, s ) \ - FT_BEGIN_STMNT \ - if ( x < 0 ) \ - { \ - x = -x; \ - s = -s; \ - } \ + /* transfer sign, leaving a positive number; */ + /* we need an unsigned value to safely negate INT_MIN (or LONG_MIN) */ +#define FT_MOVE_SIGN( x, x_unsigned, s ) \ + FT_BEGIN_STMNT \ + if ( x < 0 ) \ + { \ + x_unsigned = 0U - (x_unsigned); \ + s = -s; \ + } \ FT_END_STMNT /* The following three functions are available regardless of whether */ @@ -86,7 +87,7 @@ FT_EXPORT_DEF( FT_Fixed ) FT_RoundFix( FT_Fixed a ) { - return ( a + 0x8000L - ( a < 0 ) ) & ~0xFFFFL; + return ( ADD_LONG( a, 0x8000L - ( a < 0 ) ) ) & ~0xFFFFL; } @@ -95,7 +96,7 @@ FT_EXPORT_DEF( FT_Fixed ) FT_CeilFix( FT_Fixed a ) { - return ( a + 0xFFFFL ) & ~0xFFFFL; + return ( ADD_LONG( a, 0xFFFFL ) ) & ~0xFFFFL; } @@ -179,20 +180,20 @@ FT_Long d_; - FT_MOVE_SIGN( a_, s ); - FT_MOVE_SIGN( b_, s ); - FT_MOVE_SIGN( c_, s ); - a = (FT_UInt64)a_; b = (FT_UInt64)b_; c = (FT_UInt64)c_; + FT_MOVE_SIGN( a_, a, s ); + FT_MOVE_SIGN( b_, b, s ); + FT_MOVE_SIGN( c_, c, s ); + d = c > 0 ? ( a * b + ( c >> 1 ) ) / c : 0x7FFFFFFFUL; d_ = (FT_Long)d; - return s < 0 ? -d_ : d_; + return s < 0 ? NEG_LONG( d_ ) : d_; } @@ -208,20 +209,20 @@ FT_Long d_; - FT_MOVE_SIGN( a_, s ); - FT_MOVE_SIGN( b_, s ); - FT_MOVE_SIGN( c_, s ); - a = (FT_UInt64)a_; b = (FT_UInt64)b_; c = (FT_UInt64)c_; + FT_MOVE_SIGN( a_, a, s ); + FT_MOVE_SIGN( b_, b, s ); + FT_MOVE_SIGN( c_, c, s ); + d = c > 0 ? a * b / c : 0x7FFFFFFFUL; d_ = (FT_Long)d; - return s < 0 ? -d_ : d_; + return s < 0 ? NEG_LONG( d_ ) : d_; } @@ -257,18 +258,18 @@ FT_Long q_; - FT_MOVE_SIGN( a_, s ); - FT_MOVE_SIGN( b_, s ); - a = (FT_UInt64)a_; b = (FT_UInt64)b_; + FT_MOVE_SIGN( a_, a, s ); + FT_MOVE_SIGN( b_, b, s ); + q = b > 0 ? ( ( a << 16 ) + ( b >> 1 ) ) / b : 0x7FFFFFFFUL; q_ = (FT_Long)q; - return s < 0 ? -q_ : q_; + return s < 0 ? NEG_LONG( q_ ) : q_; } @@ -422,14 +423,14 @@ /* XXX: this function does not allow 64-bit arguments */ - FT_MOVE_SIGN( a_, s ); - FT_MOVE_SIGN( b_, s ); - FT_MOVE_SIGN( c_, s ); - a = (FT_UInt32)a_; b = (FT_UInt32)b_; c = (FT_UInt32)c_; + FT_MOVE_SIGN( a_, a, s ); + FT_MOVE_SIGN( b_, b, s ); + FT_MOVE_SIGN( c_, c, s ); + if ( c == 0 ) a = 0x7FFFFFFFUL; @@ -455,7 +456,7 @@ a_ = (FT_Long)a; - return s < 0 ? -a_ : a_; + return s < 0 ? NEG_LONG( a_ ) : a_; } @@ -470,14 +471,14 @@ /* XXX: this function does not allow 64-bit arguments */ - FT_MOVE_SIGN( a_, s ); - FT_MOVE_SIGN( b_, s ); - FT_MOVE_SIGN( c_, s ); - a = (FT_UInt32)a_; b = (FT_UInt32)b_; c = (FT_UInt32)c_; + FT_MOVE_SIGN( a_, a, s ); + FT_MOVE_SIGN( b_, b, s ); + FT_MOVE_SIGN( c_, c, s ); + if ( c == 0 ) a = 0x7FFFFFFFUL; @@ -498,7 +499,7 @@ a_ = (FT_Long)a; - return s < 0 ? -a_ : a_; + return s < 0 ? NEG_LONG( a_ ) : a_; } @@ -575,12 +576,12 @@ /* XXX: this function does not allow 64-bit arguments */ - FT_MOVE_SIGN( a_, s ); - FT_MOVE_SIGN( b_, s ); - a = (FT_UInt32)a_; b = (FT_UInt32)b_; + FT_MOVE_SIGN( a_, a, s ); + FT_MOVE_SIGN( b_, b, s ); + if ( a + ( b >> 8 ) <= 8190UL ) a = ( a * b + 0x8000UL ) >> 16; else @@ -594,7 +595,7 @@ a_ = (FT_Long)a; - return s < 0 ? -a_ : a_; + return s < 0 ? NEG_LONG( a_ ) : a_; #endif /* 0 */ @@ -614,12 +615,12 @@ /* XXX: this function does not allow 64-bit arguments */ - FT_MOVE_SIGN( a_, s ); - FT_MOVE_SIGN( b_, s ); - a = (FT_UInt32)a_; b = (FT_UInt32)b_; + FT_MOVE_SIGN( a_, a, s ); + FT_MOVE_SIGN( b_, b, s ); + if ( b == 0 ) { /* check for division by 0 */ @@ -647,7 +648,7 @@ q_ = (FT_Long)q; - return s < 0 ? -q_ : q_; + return s < 0 ? NEG_LONG( q_ ) : q_; } @@ -666,13 +667,19 @@ if ( !a || !b ) return; - xx = FT_MulFix( a->xx, b->xx ) + FT_MulFix( a->xy, b->yx ); - xy = FT_MulFix( a->xx, b->xy ) + FT_MulFix( a->xy, b->yy ); - yx = FT_MulFix( a->yx, b->xx ) + FT_MulFix( a->yy, b->yx ); - yy = FT_MulFix( a->yx, b->xy ) + FT_MulFix( a->yy, b->yy ); - - b->xx = xx; b->xy = xy; - b->yx = yx; b->yy = yy; + xx = ADD_LONG( FT_MulFix( a->xx, b->xx ), + FT_MulFix( a->xy, b->yx ) ); + xy = ADD_LONG( FT_MulFix( a->xx, b->xy ), + FT_MulFix( a->xy, b->yy ) ); + yx = ADD_LONG( FT_MulFix( a->yx, b->xx ), + FT_MulFix( a->yy, b->yx ) ); + yy = ADD_LONG( FT_MulFix( a->yx, b->xy ), + FT_MulFix( a->yy, b->yy ) ); + + b->xx = xx; + b->xy = xy; + b->yx = yx; + b->yy = yy; } @@ -722,13 +729,19 @@ if ( !a || !b ) return; - xx = FT_MulDiv( a->xx, b->xx, val ) + FT_MulDiv( a->xy, b->yx, val ); - xy = FT_MulDiv( a->xx, b->xy, val ) + FT_MulDiv( a->xy, b->yy, val ); - yx = FT_MulDiv( a->yx, b->xx, val ) + FT_MulDiv( a->yy, b->yx, val ); - yy = FT_MulDiv( a->yx, b->xy, val ) + FT_MulDiv( a->yy, b->yy, val ); - - b->xx = xx; b->xy = xy; - b->yx = yx; b->yy = yy; + xx = ADD_LONG( FT_MulDiv( a->xx, b->xx, val ), + FT_MulDiv( a->xy, b->yx, val ) ); + xy = ADD_LONG( FT_MulDiv( a->xx, b->xy, val ), + FT_MulDiv( a->xy, b->yy, val ) ); + yx = ADD_LONG( FT_MulDiv( a->yx, b->xx, val ), + FT_MulDiv( a->yy, b->yx, val ) ); + yy = ADD_LONG( FT_MulDiv( a->yx, b->xy, val ), + FT_MulDiv( a->yy, b->yy, val ) ); + + b->xx = xx; + b->xy = xy; + b->yx = yx; + b->yy = yy; } @@ -747,11 +760,10 @@ if ( !vector || !matrix ) return; - xz = FT_MulDiv( vector->x, matrix->xx, val ) + - FT_MulDiv( vector->y, matrix->xy, val ); - - yz = FT_MulDiv( vector->x, matrix->yx, val ) + - FT_MulDiv( vector->y, matrix->yy, val ); + xz = ADD_LONG( FT_MulDiv( vector->x, matrix->xx, val ), + FT_MulDiv( vector->y, matrix->xy, val ) ); + yz = ADD_LONG( FT_MulDiv( vector->x, matrix->yx, val ), + FT_MulDiv( vector->y, matrix->yy, val ) ); vector->x = xz; vector->y = yz; @@ -770,12 +782,12 @@ FT_Int sx = 1, sy = 1, shift; - FT_MOVE_SIGN( x_, sx ); - FT_MOVE_SIGN( y_, sy ); - x = (FT_UInt32)x_; y = (FT_UInt32)y_; + FT_MOVE_SIGN( x_, x, sx ); + FT_MOVE_SIGN( y_, y, sy ); + /* trivial cases */ if ( x == 0 ) { @@ -913,11 +925,13 @@ FT_Int result; - if ( (FT_ULong)FT_ABS( in_x ) + (FT_ULong)FT_ABS( out_y ) <= 131071UL && - (FT_ULong)FT_ABS( in_y ) + (FT_ULong)FT_ABS( out_x ) <= 131071UL ) + /* we silently ignore overflow errors, since such large values */ + /* lead to even more (harmless) rendering errors later on */ + if ( ADD_LONG( FT_ABS( in_x ), FT_ABS( out_y ) ) <= 131071L && + ADD_LONG( FT_ABS( in_y ), FT_ABS( out_x ) ) <= 131071L ) { - FT_Long z1 = in_x * out_y; - FT_Long z2 = in_y * out_x; + FT_Long z1 = MUL_LONG( in_x, out_y ); + FT_Long z2 = MUL_LONG( in_y, out_x ); if ( z1 > z2 ) diff --git a/thirdparty/freetype/src/base/ftglyph.c b/thirdparty/freetype/src/base/ftglyph.c index 9bfb330508..3f78a8c36b 100644 --- a/thirdparty/freetype/src/base/ftglyph.c +++ b/thirdparty/freetype/src/base/ftglyph.c @@ -408,12 +408,28 @@ goto Exit; /* copy advance while converting 26.6 to 16.16 format */ + if ( slot->advance.x >= 0x8000L * 64 || + slot->advance.x <= -0x8000L * 64 ) + { + FT_ERROR(( "FT_Get_Glyph: advance width too large\n" )); + error = FT_THROW( Invalid_Argument ); + goto Exit2; + } + if ( slot->advance.y >= 0x8000L * 64 || + slot->advance.y <= -0x8000L * 64 ) + { + FT_ERROR(( "FT_Get_Glyph: advance height too large\n" )); + error = FT_THROW( Invalid_Argument ); + goto Exit2; + } + glyph->advance.x = slot->advance.x * 1024; glyph->advance.y = slot->advance.y * 1024; /* now import the image from the glyph slot */ error = clazz->glyph_init( glyph, slot ); + Exit2: /* if an error occurred, destroy the glyph */ if ( error ) FT_Done_Glyph( glyph ); diff --git a/thirdparty/freetype/src/base/ftlcdfil.c b/thirdparty/freetype/src/base/ftlcdfil.c index 611b39f570..60c813fd9e 100644 --- a/thirdparty/freetype/src/base/ftlcdfil.c +++ b/thirdparty/freetype/src/base/ftlcdfil.c @@ -29,141 +29,107 @@ /* define USE_LEGACY to implement the legacy filter */ #define USE_LEGACY +#define FT_SHIFTCLAMP( x ) ( x >>= 8, (FT_Byte)( x > 255 ? 255 : x ) ) + /* FIR filter used by the default and light filters */ FT_BASE( void ) ft_lcd_filter_fir( FT_Bitmap* bitmap, FT_Render_Mode mode, FT_LcdFiveTapFilter weights ) { - FT_UInt width = (FT_UInt)bitmap->width; - FT_UInt height = (FT_UInt)bitmap->rows; + FT_UInt width = (FT_UInt)bitmap->width; + FT_UInt height = (FT_UInt)bitmap->rows; + FT_Int pitch = bitmap->pitch; + FT_Byte* origin = bitmap->buffer; + + /* take care of bitmap flow */ + if ( pitch > 0 ) + origin += pitch * (FT_Int)( height - 1 ); /* horizontal in-place FIR filter */ - if ( mode == FT_RENDER_MODE_LCD && width >= 4 ) + if ( mode == FT_RENDER_MODE_LCD && width >= 2 ) { - FT_Byte* line = bitmap->buffer; - + FT_Byte* line = origin; - /* take care of bitmap flow */ - if ( bitmap->pitch < 0 ) - line -= bitmap->pitch * (FT_Int)( bitmap->rows - 1 ); - /* `fir' and `pix' must be at least 32 bit wide, since the sum of */ - /* the values in `weights' can exceed 0xFF */ + /* `fir' must be at least 32 bit wide, since the sum of */ + /* the values in `weights' can exceed 0xFF */ - for ( ; height > 0; height--, line += bitmap->pitch ) + for ( ; height > 0; height--, line -= pitch ) { - FT_UInt fir[4]; /* below, `pix' is used as the 5th element */ - FT_UInt val1, xx; + FT_UInt fir[5]; + FT_UInt val, xx; - val1 = line[0]; - fir[0] = weights[2] * val1; - fir[1] = weights[3] * val1; - fir[2] = weights[4] * val1; - fir[3] = 0; + val = line[0]; + fir[2] = weights[2] * val; + fir[3] = weights[3] * val; + fir[4] = weights[4] * val; - val1 = line[1]; - fir[0] += weights[1] * val1; - fir[1] += weights[2] * val1; - fir[2] += weights[3] * val1; - fir[3] += weights[4] * val1; + val = line[1]; + fir[1] = fir[2] + weights[1] * val; + fir[2] = fir[3] + weights[2] * val; + fir[3] = fir[4] + weights[3] * val; + fir[4] = weights[4] * val; for ( xx = 2; xx < width; xx++ ) { - FT_UInt val, pix; - - val = line[xx]; - pix = fir[0] + weights[0] * val; - fir[0] = fir[1] + weights[1] * val; - fir[1] = fir[2] + weights[2] * val; - fir[2] = fir[3] + weights[3] * val; - fir[3] = weights[4] * val; - - pix >>= 8; - pix |= (FT_UInt)-(FT_Int)( pix >> 8 ); - line[xx - 2] = (FT_Byte)pix; - } + fir[0] = fir[1] + weights[0] * val; + fir[1] = fir[2] + weights[1] * val; + fir[2] = fir[3] + weights[2] * val; + fir[3] = fir[4] + weights[3] * val; + fir[4] = weights[4] * val; - { - FT_UInt pix; - - - pix = fir[0] >> 8; - pix |= (FT_UInt)-(FT_Int)( pix >> 8 ); - line[xx - 2] = (FT_Byte)pix; - - pix = fir[1] >> 8; - pix |= (FT_UInt)-(FT_Int)( pix >> 8 ); - line[xx - 1] = (FT_Byte)pix; + line[xx - 2] = FT_SHIFTCLAMP( fir[0] ); } + + line[xx - 2] = FT_SHIFTCLAMP( fir[1] ); + line[xx - 1] = FT_SHIFTCLAMP( fir[2] ); } } /* vertical in-place FIR filter */ - else if ( mode == FT_RENDER_MODE_LCD_V && height >= 4 ) + else if ( mode == FT_RENDER_MODE_LCD_V && height >= 2 ) { - FT_Byte* column = bitmap->buffer; - FT_Int pitch = bitmap->pitch; - + FT_Byte* column = origin; - /* take care of bitmap flow */ - if ( bitmap->pitch < 0 ) - column -= bitmap->pitch * (FT_Int)( bitmap->rows - 1 ); for ( ; width > 0; width--, column++ ) { FT_Byte* col = column; - FT_UInt fir[4]; /* below, `pix' is used as the 5th element */ - FT_UInt val1, yy; + FT_UInt fir[5]; + FT_UInt val, yy; - val1 = col[0]; - fir[0] = weights[2] * val1; - fir[1] = weights[3] * val1; - fir[2] = weights[4] * val1; - fir[3] = 0; - col += pitch; + val = col[0]; + fir[2] = weights[2] * val; + fir[3] = weights[3] * val; + fir[4] = weights[4] * val; + col -= pitch; - val1 = col[0]; - fir[0] += weights[1] * val1; - fir[1] += weights[2] * val1; - fir[2] += weights[3] * val1; - fir[3] += weights[4] * val1; - col += pitch; + val = col[0]; + fir[1] = fir[2] + weights[1] * val; + fir[2] = fir[3] + weights[2] * val; + fir[3] = fir[4] + weights[3] * val; + fir[4] = weights[4] * val; + col -= pitch; - for ( yy = 2; yy < height; yy++ ) + for ( yy = 2; yy < height; yy++, col -= pitch ) { - FT_UInt val, pix; - - val = col[0]; - pix = fir[0] + weights[0] * val; - fir[0] = fir[1] + weights[1] * val; - fir[1] = fir[2] + weights[2] * val; - fir[2] = fir[3] + weights[3] * val; - fir[3] = weights[4] * val; - - pix >>= 8; - pix |= (FT_UInt)-(FT_Int)( pix >> 8 ); - col[-2 * pitch] = (FT_Byte)pix; - col += pitch; - } - - { - FT_UInt pix; - + fir[0] = fir[1] + weights[0] * val; + fir[1] = fir[2] + weights[1] * val; + fir[2] = fir[3] + weights[2] * val; + fir[3] = fir[4] + weights[3] * val; + fir[4] = weights[4] * val; - pix = fir[0] >> 8; - pix |= (FT_UInt)-(FT_Int)( pix >> 8 ); - col[-2 * pitch] = (FT_Byte)pix; - - pix = fir[1] >> 8; - pix |= (FT_UInt)-(FT_Int)( pix >> 8 ); - col[-pitch] = (FT_Byte)pix; + col[pitch * 2] = FT_SHIFTCLAMP( fir[0] ); } + + col[pitch * 2] = FT_SHIFTCLAMP( fir[1] ); + col[pitch] = FT_SHIFTCLAMP( fir[2] ); } } } @@ -177,9 +143,10 @@ FT_Render_Mode mode, FT_Byte* weights ) { - FT_UInt width = (FT_UInt)bitmap->width; - FT_UInt height = (FT_UInt)bitmap->rows; - FT_Int pitch = bitmap->pitch; + FT_UInt width = (FT_UInt)bitmap->width; + FT_UInt height = (FT_UInt)bitmap->rows; + FT_Int pitch = bitmap->pitch; + FT_Byte* origin = bitmap->buffer; static const unsigned int filters[3][3] = { @@ -191,33 +158,31 @@ FT_UNUSED( weights ); + /* take care of bitmap flow */ + if ( pitch > 0 ) + origin += pitch * (FT_Int)( height - 1 ); + /* horizontal in-place intra-pixel filter */ if ( mode == FT_RENDER_MODE_LCD && width >= 3 ) { - FT_Byte* line = bitmap->buffer; + FT_Byte* line = origin; - /* take care of bitmap flow */ - if ( bitmap->pitch < 0 ) - line -= bitmap->pitch * (FT_Int)( bitmap->rows - 1 ); - - for ( ; height > 0; height--, line += pitch ) + for ( ; height > 0; height--, line -= pitch ) { FT_UInt xx; for ( xx = 0; xx < width; xx += 3 ) { - FT_UInt r = 0; - FT_UInt g = 0; - FT_UInt b = 0; + FT_UInt r, g, b; FT_UInt p; p = line[xx]; - r += filters[0][0] * p; - g += filters[0][1] * p; - b += filters[0][2] * p; + r = filters[0][0] * p; + g = filters[0][1] * p; + b = filters[0][2] * p; p = line[xx + 1]; r += filters[1][0] * p; @@ -237,31 +202,24 @@ } else if ( mode == FT_RENDER_MODE_LCD_V && height >= 3 ) { - FT_Byte* column = bitmap->buffer; - + FT_Byte* column = origin; - /* take care of bitmap flow */ - if ( bitmap->pitch < 0 ) - column -= bitmap->pitch * (FT_Int)( bitmap->rows - 1 ); for ( ; width > 0; width--, column++ ) { - FT_Byte* col = column; - FT_Byte* col_end = col + (FT_Int)height * pitch; + FT_Byte* col = column - 2 * pitch; - for ( ; col < col_end; col += 3 * pitch ) + for ( ; height > 0; height -= 3, col -= 3 * pitch ) { - FT_UInt r = 0; - FT_UInt g = 0; - FT_UInt b = 0; + FT_UInt r, g, b; FT_UInt p; p = col[0]; - r += filters[0][0] * p; - g += filters[0][1] * p; - b += filters[0][2] * p; + r = filters[0][0] * p; + g = filters[0][1] * p; + b = filters[0][2] * p; p = col[pitch]; r += filters[1][0] * p; @@ -275,7 +233,7 @@ col[0] = (FT_Byte)( r / 65536 ); col[pitch] = (FT_Byte)( g / 65536 ); - col[2 * pitch] = (FT_Byte)( b / 65536 ); + col[pitch * 2] = (FT_Byte)( b / 65536 ); } } } @@ -296,7 +254,6 @@ ft_memcpy( library->lcd_weights, weights, FT_LCD_FILTER_FIVE_TAPS ); library->lcd_filter_func = ft_lcd_filter_fir; - library->lcd_extra = 2; return FT_Err_Ok; } @@ -319,7 +276,6 @@ { case FT_LCD_FILTER_NONE: library->lcd_filter_func = NULL; - library->lcd_extra = 0; break; case FT_LCD_FILTER_DEFAULT: @@ -327,7 +283,6 @@ default_weights, FT_LCD_FILTER_FIVE_TAPS ); library->lcd_filter_func = ft_lcd_filter_fir; - library->lcd_extra = 2; break; case FT_LCD_FILTER_LIGHT: @@ -335,7 +290,6 @@ light_weights, FT_LCD_FILTER_FIVE_TAPS ); library->lcd_filter_func = ft_lcd_filter_fir; - library->lcd_extra = 2; break; #ifdef USE_LEGACY @@ -343,7 +297,6 @@ case FT_LCD_FILTER_LEGACY: case FT_LCD_FILTER_LEGACY1: library->lcd_filter_func = _ft_lcd_filter_legacy; - library->lcd_extra = 0; break; #endif diff --git a/thirdparty/freetype/src/base/ftmac.c b/thirdparty/freetype/src/base/ftmac.c index 4b92066da3..4e76585e5f 100644 --- a/thirdparty/freetype/src/base/ftmac.c +++ b/thirdparty/freetype/src/base/ftmac.c @@ -1005,7 +1005,7 @@ /* accepts an FSRef instead of a path. */ /* */ /* This function is deprecated because Carbon data types (FSRef) */ - /* are not cross-platform, and thus not suitable for the freetype API. */ + /* are not cross-platform, and thus not suitable for the FreeType API. */ FT_EXPORT_DEF( FT_Error ) FT_New_Face_From_FSRef( FT_Library library, const FSRef* ref, diff --git a/thirdparty/freetype/src/base/ftmm.c b/thirdparty/freetype/src/base/ftmm.c index 2cb56a39be..43877ece45 100644 --- a/thirdparty/freetype/src/base/ftmm.c +++ b/thirdparty/freetype/src/base/ftmm.c @@ -158,7 +158,7 @@ /* check of `face' delayed to `ft_face_get_mm_service' */ - if ( !coords ) + if ( num_coords && !coords ) return FT_THROW( Invalid_Argument ); error = ft_face_get_mm_service( face, &service ); @@ -194,7 +194,7 @@ /* check of `face' delayed to `ft_face_get_mm_service' */ - if ( !coords ) + if ( num_coords && !coords ) return FT_THROW( Invalid_Argument ); error = ft_face_get_mm_service( face, &service_mm ); @@ -266,7 +266,7 @@ /* check of `face' delayed to `ft_face_get_mm_service' */ - if ( !coords ) + if ( num_coords && !coords ) return FT_THROW( Invalid_Argument ); error = ft_face_get_mm_service( face, &service_mm ); @@ -313,7 +313,7 @@ /* check of `face' delayed to `ft_face_get_mm_service' */ - if ( !coords ) + if ( num_coords && !coords ) return FT_THROW( Invalid_Argument ); error = ft_face_get_mm_service( face, &service_mm ); @@ -402,4 +402,28 @@ } + /* documentation is in ftmm.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_Get_Var_Axis_Flags( FT_MM_Var* master, + FT_UInt axis_index, + FT_UInt* flags ) + { + FT_UShort* axis_flags; + + + if ( !master || !flags ) + return FT_THROW( Invalid_Argument ); + + if ( axis_index >= master->num_axis ) + return FT_THROW( Invalid_Argument ); + + /* the axis flags array immediately follows the data of `master' */ + axis_flags = (FT_UShort*)&( master[1] ); + *flags = axis_flags[axis_index]; + + return FT_Err_Ok; + } + + /* END */ diff --git a/thirdparty/freetype/src/base/ftobjs.c b/thirdparty/freetype/src/base/ftobjs.c index 539116e85c..6db8136cfc 100644 --- a/thirdparty/freetype/src/base/ftobjs.c +++ b/thirdparty/freetype/src/base/ftobjs.c @@ -579,34 +579,42 @@ if ( vertical ) { metrics->horiBearingX = FT_PIX_FLOOR( metrics->horiBearingX ); - metrics->horiBearingY = FT_PIX_CEIL ( metrics->horiBearingY ); + metrics->horiBearingY = FT_PIX_CEIL_LONG( metrics->horiBearingY ); - right = FT_PIX_CEIL( metrics->vertBearingX + metrics->width ); - bottom = FT_PIX_CEIL( metrics->vertBearingY + metrics->height ); + right = FT_PIX_CEIL_LONG( ADD_LONG( metrics->vertBearingX, + metrics->width ) ); + bottom = FT_PIX_CEIL_LONG( ADD_LONG( metrics->vertBearingY, + metrics->height ) ); metrics->vertBearingX = FT_PIX_FLOOR( metrics->vertBearingX ); metrics->vertBearingY = FT_PIX_FLOOR( metrics->vertBearingY ); - metrics->width = right - metrics->vertBearingX; - metrics->height = bottom - metrics->vertBearingY; + metrics->width = SUB_LONG( right, + metrics->vertBearingX ); + metrics->height = SUB_LONG( bottom, + metrics->vertBearingY ); } else { metrics->vertBearingX = FT_PIX_FLOOR( metrics->vertBearingX ); metrics->vertBearingY = FT_PIX_FLOOR( metrics->vertBearingY ); - right = FT_PIX_CEIL ( metrics->horiBearingX + metrics->width ); - bottom = FT_PIX_FLOOR( metrics->horiBearingY - metrics->height ); + right = FT_PIX_CEIL_LONG( ADD_LONG( metrics->horiBearingX, + metrics->width ) ); + bottom = FT_PIX_FLOOR( SUB_LONG( metrics->horiBearingY, + metrics->height ) ); metrics->horiBearingX = FT_PIX_FLOOR( metrics->horiBearingX ); - metrics->horiBearingY = FT_PIX_CEIL ( metrics->horiBearingY ); + metrics->horiBearingY = FT_PIX_CEIL_LONG( metrics->horiBearingY ); - metrics->width = right - metrics->horiBearingX; - metrics->height = metrics->horiBearingY - bottom; + metrics->width = SUB_LONG( right, + metrics->horiBearingX ); + metrics->height = SUB_LONG( metrics->horiBearingY, + bottom ); } - metrics->horiAdvance = FT_PIX_ROUND( metrics->horiAdvance ); - metrics->vertAdvance = FT_PIX_ROUND( metrics->vertAdvance ); + metrics->horiAdvance = FT_PIX_ROUND_LONG( metrics->horiAdvance ); + metrics->vertAdvance = FT_PIX_ROUND_LONG( metrics->vertAdvance ); } #endif /* GRID_FIT_METRICS */ @@ -4549,7 +4557,7 @@ if ( !clazz ) return FT_THROW( Invalid_Argument ); - /* check freetype version */ + /* check FreeType version */ if ( clazz->module_requires > FREETYPE_VER_FIXED ) return FT_THROW( Invalid_Version ); @@ -4973,10 +4981,6 @@ goto Fail; #endif - /* we don't use raster_pool anymore. */ - library->raster_pool_size = 0; - library->raster_pool = NULL; - library->version_major = FREETYPE_MAJOR; library->version_minor = FREETYPE_MINOR; library->version_patch = FREETYPE_PATCH; diff --git a/thirdparty/freetype/src/base/ftoutln.c b/thirdparty/freetype/src/base/ftoutln.c index 464a066dcc..9ceb9cf1ba 100644 --- a/thirdparty/freetype/src/base/ftoutln.c +++ b/thirdparty/freetype/src/base/ftoutln.c @@ -1088,7 +1088,8 @@ v_cur.x = points[n].x >> xshift; v_cur.y = points[n].y >> yshift; - area += ( v_cur.y - v_prev.y ) * ( v_cur.x + v_prev.x ); + area = ADD_LONG( area, + ( v_cur.y - v_prev.y ) * ( v_cur.x + v_prev.x ) ); v_prev = v_cur; } diff --git a/thirdparty/freetype/src/base/ftrfork.c b/thirdparty/freetype/src/base/ftrfork.c index f7b81375dd..f5ad2874d8 100644 --- a/thirdparty/freetype/src/base/ftrfork.c +++ b/thirdparty/freetype/src/base/ftrfork.c @@ -271,7 +271,13 @@ if ( FT_STREAM_SKIP( 4 ) ) /* mbz */ goto Exit; - if ( ref[j].res_id < 0 || temp < 0 ) + /* + * According to Inside Macintosh: More Macintosh Toolbox, + * "Resource IDs" (1-46), there are some reserved IDs. + * However, FreeType2 is not a font synthesizer, no need + * to check the acceptable resource ID. + */ + if ( temp < 0 ) { error = FT_THROW( Invalid_Table ); goto Exit; @@ -281,7 +287,7 @@ FT_TRACE3(( " [%d]:" " resource_id=0x%04x, offset=0x%08x\n", - j, ref[j].res_id, ref[j].offset )); + j, (FT_UShort)ref[j].res_id, ref[j].offset )); } if ( sort_by_res_id ) diff --git a/thirdparty/freetype/src/base/ftsynth.c b/thirdparty/freetype/src/base/ftsynth.c index 66dae6037a..5cf386f48d 100644 --- a/thirdparty/freetype/src/base/ftsynth.c +++ b/thirdparty/freetype/src/base/ftsynth.c @@ -123,7 +123,7 @@ /* * XXX: overflow check for 16-bit system, for compatibility - * with FT_GlyphSlot_Embolden() since freetype-2.1.10. + * with FT_GlyphSlot_Embolden() since FreeType 2.1.10. * unfortunately, this function return no informations * about the cause of error. */ diff --git a/thirdparty/freetype/src/base/ftutil.c b/thirdparty/freetype/src/base/ftutil.c index dccc209f4d..7bd5bee87c 100644 --- a/thirdparty/freetype/src/base/ftutil.c +++ b/thirdparty/freetype/src/base/ftutil.c @@ -135,7 +135,7 @@ ft_mem_free( memory, block ); block = NULL; } - else if ( new_count > FT_INT_MAX/item_size ) + else if ( new_count > FT_INT_MAX / item_size ) { error = FT_THROW( Array_Too_Large ); } @@ -143,13 +143,15 @@ { FT_ASSERT( !block ); - block = ft_mem_alloc( memory, new_count*item_size, &error ); + block = memory->alloc( memory, new_count * item_size ); + if ( block == NULL ) + error = FT_THROW( Out_Of_Memory ); } else { FT_Pointer block2; - FT_Long cur_size = cur_count*item_size; - FT_Long new_size = new_count*item_size; + FT_Long cur_size = cur_count * item_size; + FT_Long new_size = new_count * item_size; block2 = memory->realloc( memory, cur_size, new_size, block ); diff --git a/thirdparty/freetype/src/bdf/bdfdrivr.c b/thirdparty/freetype/src/bdf/bdfdrivr.c index a2242be014..fb77810007 100644 --- a/thirdparty/freetype/src/bdf/bdfdrivr.c +++ b/thirdparty/freetype/src/bdf/bdfdrivr.c @@ -373,7 +373,7 @@ THE SOFTWARE. /* we have a bdf font: let's construct the face object */ face->bdffont = font; - /* BDF could not have multiple face in single font file. + /* BDF cannot have multiple faces in a single font file. * XXX: non-zero face_index is already invalid argument, but * Type1, Type42 driver has a convention to return * an invalid argument error when the font could be @@ -437,46 +437,156 @@ THE SOFTWARE. { FT_Bitmap_Size* bsize = bdfface->available_sizes; FT_Short resolution_x = 0, resolution_y = 0; + long value; FT_ZERO( bsize ); + /* sanity checks */ + if ( font->font_ascent > 0x7FFF || font->font_ascent < -0x7FFF ) + { + font->font_ascent = font->font_ascent < 0 ? -0x7FFF : 0x7FFF; + FT_TRACE0(( "BDF_Face_Init: clamping font ascent to value %d\n", + font->font_ascent )); + } + if ( font->font_descent > 0x7FFF || font->font_descent < -0x7FFF ) + { + font->font_descent = font->font_descent < 0 ? -0x7FFF : 0x7FFF; + FT_TRACE0(( "BDF_Face_Init: clamping font descent to value %d\n", + font->font_descent )); + } + bsize->height = (FT_Short)( font->font_ascent + font->font_descent ); prop = bdf_get_font_property( font, "AVERAGE_WIDTH" ); if ( prop ) - bsize->width = (FT_Short)( ( prop->value.l + 5 ) / 10 ); + { +#ifdef FT_DEBUG_LEVEL_TRACE + if ( prop->value.l < 0 ) + FT_TRACE0(( "BDF_Face_Init: negative average width\n" )); +#endif + if ( prop->value.l > 0x7FFFL * 10 - 5 || + prop->value.l < -( 0x7FFFL * 10 - 5 ) ) + { + bsize->width = 0x7FFF; + FT_TRACE0(( "BDF_Face_Init: clamping average width to value %d\n", + bsize->width )); + } + else + bsize->width = FT_ABS( (FT_Short)( ( prop->value.l + 5 ) / 10 ) ); + } else - bsize->width = (FT_Short)( bsize->height * 2/3 ); + { + /* this is a heuristical value */ + bsize->width = (FT_Short)FT_MulDiv( bsize->height, 2, 3 ); + } prop = bdf_get_font_property( font, "POINT_SIZE" ); if ( prop ) + { +#ifdef FT_DEBUG_LEVEL_TRACE + if ( prop->value.l < 0 ) + FT_TRACE0(( "BDF_Face_Init: negative point size\n" )); +#endif /* convert from 722.7 decipoints to 72 points per inch */ - bsize->size = - (FT_Pos)( ( prop->value.l * 64 * 7200 + 36135L ) / 72270L ); + if ( prop->value.l > 0x504C2L || /* 0x7FFF * 72270/7200 */ + prop->value.l < -0x504C2L ) + { + bsize->size = 0x7FFF; + FT_TRACE0(( "BDF_Face_Init: clamping point size to value %d\n", + bsize->size )); + } + else + bsize->size = FT_MulDiv( FT_ABS( prop->value.l ), + 64 * 7200, + 72270L ); + } + else if ( font->point_size ) + { + if ( font->point_size > 0x7FFF ) + { + bsize->size = 0x7FFF; + FT_TRACE0(( "BDF_Face_Init: clamping point size to value %d\n", + bsize->size )); + } + else + bsize->size = (FT_Pos)font->point_size << 6; + } else - bsize->size = bsize->width << 6; + { + /* this is a heuristical value */ + bsize->size = bsize->width * 64; + } prop = bdf_get_font_property( font, "PIXEL_SIZE" ); if ( prop ) - bsize->y_ppem = (FT_Short)prop->value.l << 6; + { +#ifdef FT_DEBUG_LEVEL_TRACE + if ( prop->value.l < 0 ) + FT_TRACE0(( "BDF_Face_Init: negative pixel size\n" )); +#endif + if ( prop->value.l > 0x7FFF || prop->value.l < -0x7FFF ) + { + bsize->y_ppem = 0x7FFF << 6; + FT_TRACE0(( "BDF_Face_Init: clamping pixel size to value %d\n", + bsize->y_ppem )); + } + else + bsize->y_ppem = FT_ABS( (FT_Short)prop->value.l ) << 6; + } prop = bdf_get_font_property( font, "RESOLUTION_X" ); if ( prop ) - resolution_x = (FT_Short)prop->value.l; + value = prop->value.l; + else + value = (long)font->resolution_x; + if ( value ) + { +#ifdef FT_DEBUG_LEVEL_TRACE + if ( value < 0 ) + FT_TRACE0(( "BDF_Face_Init: negative X resolution\n" )); +#endif + if ( value > 0x7FFF || value < -0x7FFF ) + { + resolution_x = 0x7FFF; + FT_TRACE0(( "BDF_Face_Init: clamping X resolution to value %d\n", + resolution_x )); + } + else + resolution_x = FT_ABS( (FT_Short)value ); + } prop = bdf_get_font_property( font, "RESOLUTION_Y" ); if ( prop ) - resolution_y = (FT_Short)prop->value.l; + value = prop->value.l; + else + value = (long)font->resolution_y; + if ( value ) + { +#ifdef FT_DEBUG_LEVEL_TRACE + if ( value < 0 ) + FT_TRACE0(( "BDF_Face_Init: negative Y resolution\n" )); +#endif + if ( value > 0x7FFF || value < -0x7FFF ) + { + resolution_y = 0x7FFF; + FT_TRACE0(( "BDF_Face_Init: clamping Y resolution to value %d\n", + resolution_y )); + } + else + resolution_y = FT_ABS( (FT_Short)value ); + } if ( bsize->y_ppem == 0 ) { bsize->y_ppem = bsize->size; if ( resolution_y ) - bsize->y_ppem = bsize->y_ppem * resolution_y / 72; + bsize->y_ppem = FT_MulDiv( bsize->y_ppem, resolution_y, 72 ); } if ( resolution_x && resolution_y ) - bsize->x_ppem = bsize->y_ppem * resolution_x / resolution_y; + bsize->x_ppem = FT_MulDiv( bsize->y_ppem, + resolution_x, + resolution_y ); else bsize->x_ppem = bsize->y_ppem; } @@ -545,7 +655,11 @@ THE SOFTWARE. if ( !ft_strcmp( s, "10646" ) || ( !ft_strcmp( s, "8859" ) && !ft_strcmp( face->charset_encoding, "1" ) ) ) - unicode_charmap = 1; + unicode_charmap = 1; + /* another name for ASCII */ + else if ( !ft_strcmp( s, "646.1991" ) && + !ft_strcmp( face->charset_encoding, "IRV" ) ) + unicode_charmap = 1; } { @@ -566,12 +680,6 @@ THE SOFTWARE. } error = FT_CMap_New( &bdf_cmap_class, NULL, &charmap, NULL ); - -#if 0 - /* Select default charmap */ - if ( bdfface->num_charmaps ) - bdfface->charmap = bdfface->charmaps[0]; -#endif } goto Exit; diff --git a/thirdparty/freetype/src/bdf/bdflib.c b/thirdparty/freetype/src/bdf/bdflib.c index 7fd95a7385..bf10887fd4 100644 --- a/thirdparty/freetype/src/bdf/bdflib.c +++ b/thirdparty/freetype/src/bdf/bdflib.c @@ -704,7 +704,15 @@ return 0; for ( v = 0; sbitset( ddigits, *s ); s++ ) - v = v * 10 + a2i[(int)*s]; + { + if ( v < ( ULONG_MAX - 9 ) / 10 ) + v = v * 10 + a2i[(int)*s]; + else + { + v = ULONG_MAX; + break; + } + } return v; } @@ -729,7 +737,15 @@ } for ( v = 0; sbitset( ddigits, *s ); s++ ) - v = v * 10 + a2i[(int)*s]; + { + if ( v < ( LONG_MAX - 9 ) / 10 ) + v = v * 10 + a2i[(int)*s]; + else + { + v = LONG_MAX; + break; + } + } return ( !neg ) ? v : -v; } @@ -746,7 +762,15 @@ return 0; for ( v = 0; sbitset( ddigits, *s ); s++ ) - v = (unsigned short)( v * 10 + a2i[(int)*s] ); + { + if ( v < ( USHRT_MAX - 9 ) / 10 ) + v = (unsigned short)( v * 10 + a2i[(int)*s] ); + else + { + v = USHRT_MAX; + break; + } + } return v; } @@ -771,7 +795,15 @@ } for ( v = 0; sbitset( ddigits, *s ); s++ ) - v = (short)( v * 10 + a2i[(int)*s] ); + { + if ( v < ( SHRT_MAX - 9 ) / 10 ) + v = (short)( v * 10 + a2i[(int)*s] ); + else + { + v = SHRT_MAX; + break; + } + } return (short)( ( !neg ) ? v : -v ); } diff --git a/thirdparty/freetype/src/cache/ftcbasic.c b/thirdparty/freetype/src/cache/ftcbasic.c index 289bd5c430..e804776ab4 100644 --- a/thirdparty/freetype/src/cache/ftcbasic.c +++ b/thirdparty/freetype/src/cache/ftcbasic.c @@ -304,10 +304,18 @@ if ( anode ) *anode = NULL; - if ( (FT_ULong)( type->flags - FT_INT_MIN ) > FT_UINT_MAX ) + /* + * Internal `FTC_BasicAttr->load_flags' is of type `FT_UInt', + * but public `FT_ImageType->flags' is of type `FT_Int32'. + * + * On 16bit systems, higher bits of type->flags cannot be handled. + */ +#if 0xFFFFFFFFUL > FT_UINT_MAX + if ( (type->flags & (FT_ULong)FT_UINT_MAX) ) FT_TRACE1(( "FTC_ImageCache_Lookup:" " higher bits in load_flags 0x%x are dropped\n", (FT_ULong)type->flags & ~((FT_ULong)FT_UINT_MAX) )); +#endif query.attrs.scaler.face_id = type->face_id; query.attrs.scaler.width = type->width; @@ -377,11 +385,18 @@ if ( anode ) *anode = NULL; - /* `FT_Load_Glyph' and `FT_Load_Char' take FT_UInt flags */ + /* + * Internal `FTC_BasicAttr->load_flags' is of type `FT_UInt', + * but public `FT_Face->face_flags' is of type `FT_Long'. + * + * On long > int systems, higher bits of load_flags cannot be handled. + */ +#if FT_ULONG_MAX > FT_UINT_MAX if ( load_flags > FT_UINT_MAX ) FT_TRACE1(( "FTC_ImageCache_LookupScaler:" " higher bits in load_flags 0x%x are dropped\n", load_flags & ~((FT_ULong)FT_UINT_MAX) )); +#endif query.attrs.scaler = scaler[0]; query.attrs.load_flags = (FT_UInt)load_flags; @@ -487,10 +502,18 @@ *ansbit = NULL; - if ( (FT_ULong)( type->flags - FT_INT_MIN ) > FT_UINT_MAX ) + /* + * Internal `FTC_BasicAttr->load_flags' is of type `FT_UInt', + * but public `FT_ImageType->flags' is of type `FT_Int32'. + * + * On 16bit systems, higher bits of type->flags cannot be handled. + */ +#if 0xFFFFFFFFUL > FT_UINT_MAX + if ( (type->flags & (FT_ULong)FT_UINT_MAX) ) FT_TRACE1(( "FTC_ImageCache_Lookup:" " higher bits in load_flags 0x%x are dropped\n", (FT_ULong)type->flags & ~((FT_ULong)FT_UINT_MAX) )); +#endif query.attrs.scaler.face_id = type->face_id; query.attrs.scaler.width = type->width; @@ -562,11 +585,18 @@ *ansbit = NULL; - /* `FT_Load_Glyph' and `FT_Load_Char' take FT_UInt flags */ + /* + * Internal `FTC_BasicAttr->load_flags' is of type `FT_UInt', + * but public `FT_Face->face_flags' is of type `FT_Long'. + * + * On long > int systems, higher bits of load_flags cannot be handled. + */ +#if FT_ULONG_MAX > FT_UINT_MAX if ( load_flags > FT_UINT_MAX ) FT_TRACE1(( "FTC_ImageCache_LookupScaler:" " higher bits in load_flags 0x%x are dropped\n", load_flags & ~((FT_ULong)FT_UINT_MAX) )); +#endif query.attrs.scaler = scaler[0]; query.attrs.load_flags = (FT_UInt)load_flags; diff --git a/thirdparty/freetype/src/cff/cf2blues.c b/thirdparty/freetype/src/cff/cf2blues.c index 250f89e0df..c491f2f9e5 100644 --- a/thirdparty/freetype/src/cff/cf2blues.c +++ b/thirdparty/freetype/src/cff/cf2blues.c @@ -194,8 +194,8 @@ blues->zone[blues->count].csTopEdge = cf2_blueToFixed( blueValues[i + 1] ); - zoneHeight = blues->zone[blues->count].csTopEdge - - blues->zone[blues->count].csBottomEdge; + zoneHeight = SUB_INT32( blues->zone[blues->count].csTopEdge, + blues->zone[blues->count].csBottomEdge ); if ( zoneHeight < 0 ) { @@ -243,8 +243,8 @@ blues->zone[blues->count].csTopEdge = cf2_blueToFixed( otherBlues[i + 1] ); - zoneHeight = blues->zone[blues->count].csTopEdge - - blues->zone[blues->count].csBottomEdge; + zoneHeight = SUB_INT32( blues->zone[blues->count].csTopEdge, + blues->zone[blues->count].csBottomEdge ); if ( zoneHeight < 0 ) { @@ -301,7 +301,7 @@ /* top edge */ flatFamilyEdge = cf2_blueToFixed( familyOtherBlues[j + 1] ); - diff = cf2_fixedAbs( flatEdge - flatFamilyEdge ); + diff = cf2_fixedAbs( SUB_INT32( flatEdge, flatFamilyEdge ) ); if ( diff < minDiff && diff < csUnitsPerPixel ) { @@ -319,7 +319,7 @@ /* top edge */ flatFamilyEdge = cf2_blueToFixed( familyBlues[1] ); - diff = cf2_fixedAbs( flatEdge - flatFamilyEdge ); + diff = cf2_fixedAbs( SUB_INT32( flatEdge, flatFamilyEdge ) ); if ( diff < minDiff && diff < csUnitsPerPixel ) blues->zone[i].csFlatEdge = flatFamilyEdge; @@ -342,7 +342,7 @@ /* adjust edges of top zone upward by twice darkening amount */ flatFamilyEdge += 2 * font->darkenY; /* bottom edge */ - diff = cf2_fixedAbs( flatEdge - flatFamilyEdge ); + diff = cf2_fixedAbs( SUB_INT32( flatEdge, flatFamilyEdge ) ); if ( diff < minDiff && diff < csUnitsPerPixel ) { @@ -408,8 +408,8 @@ /* Note: constant changed from 0.5 to 0.6 to avoid a problem with */ /* 10ppem Arial */ - blues->boost = cf2_floatToFixed( .6 ) - - FT_MulDiv( cf2_floatToFixed ( .6 ), + blues->boost = cf2_doubleToFixed( .6 ) - + FT_MulDiv( cf2_doubleToFixed ( .6 ), blues->scale, blues->blueScale ); if ( blues->boost > 0x7FFF ) @@ -489,17 +489,18 @@ if ( blues->zone[i].bottomZone && cf2_hint_isBottom( bottomHintEdge ) ) { - if ( ( blues->zone[i].csBottomEdge - csFuzz ) <= - bottomHintEdge->csCoord && + if ( SUB_INT32( blues->zone[i].csBottomEdge, csFuzz ) <= + bottomHintEdge->csCoord && bottomHintEdge->csCoord <= - ( blues->zone[i].csTopEdge + csFuzz ) ) + ADD_INT32( blues->zone[i].csTopEdge, csFuzz ) ) { /* bottom edge captured by bottom zone */ if ( blues->suppressOvershoot ) dsNew = blues->zone[i].dsFlatEdge; - else if ( ( blues->zone[i].csTopEdge - bottomHintEdge->csCoord ) >= + else if ( SUB_INT32( blues->zone[i].csTopEdge, + bottomHintEdge->csCoord ) >= blues->blueShift ) { /* guarantee minimum of 1 pixel overshoot */ @@ -514,7 +515,7 @@ dsNew = cf2_fixedRound( bottomHintEdge->dsCoord ); } - dsMove = dsNew - bottomHintEdge->dsCoord; + dsMove = SUB_INT32( dsNew, bottomHintEdge->dsCoord ); captured = TRUE; break; @@ -523,17 +524,18 @@ if ( !blues->zone[i].bottomZone && cf2_hint_isTop( topHintEdge ) ) { - if ( ( blues->zone[i].csBottomEdge - csFuzz ) <= - topHintEdge->csCoord && + if ( SUB_INT32( blues->zone[i].csBottomEdge, csFuzz ) <= + topHintEdge->csCoord && topHintEdge->csCoord <= - ( blues->zone[i].csTopEdge + csFuzz ) ) + ADD_INT32( blues->zone[i].csTopEdge, csFuzz ) ) { /* top edge captured by top zone */ if ( blues->suppressOvershoot ) dsNew = blues->zone[i].dsFlatEdge; - else if ( ( topHintEdge->csCoord - blues->zone[i].csBottomEdge ) >= + else if ( SUB_INT32( topHintEdge->csCoord, + blues->zone[i].csBottomEdge ) >= blues->blueShift ) { /* guarantee minimum of 1 pixel overshoot */ @@ -548,7 +550,7 @@ dsNew = cf2_fixedRound( topHintEdge->dsCoord ); } - dsMove = dsNew - topHintEdge->dsCoord; + dsMove = SUB_INT32( dsNew, topHintEdge->dsCoord ); captured = TRUE; break; @@ -561,13 +563,14 @@ /* move both edges and flag them `locked' */ if ( cf2_hint_isValid( bottomHintEdge ) ) { - bottomHintEdge->dsCoord += dsMove; + bottomHintEdge->dsCoord = ADD_INT32( bottomHintEdge->dsCoord, + dsMove ); cf2_hint_lock( bottomHintEdge ); } if ( cf2_hint_isValid( topHintEdge ) ) { - topHintEdge->dsCoord += dsMove; + topHintEdge->dsCoord = ADD_INT32( topHintEdge->dsCoord, dsMove ); cf2_hint_lock( topHintEdge ); } } diff --git a/thirdparty/freetype/src/cff/cf2blues.h b/thirdparty/freetype/src/cff/cf2blues.h index 96fb60f38d..a6bcd9de57 100644 --- a/thirdparty/freetype/src/cff/cf2blues.h +++ b/thirdparty/freetype/src/cff/cf2blues.h @@ -111,7 +111,7 @@ FT_BEGIN_HEADER * Constant used for hint adjustment and for synthetic em box hint * placement. */ -#define CF2_MIN_COUNTER cf2_floatToFixed( 0.5 ) +#define CF2_MIN_COUNTER cf2_doubleToFixed( 0.5 ) /* shared typedef is in cf2glue.h */ diff --git a/thirdparty/freetype/src/cff/cf2fixed.h b/thirdparty/freetype/src/cff/cf2fixed.h index 2e4b5032fa..a041184bda 100644 --- a/thirdparty/freetype/src/cff/cf2fixed.h +++ b/thirdparty/freetype/src/cff/cf2fixed.h @@ -63,10 +63,10 @@ FT_BEGIN_HEADER ( (FT_Short)( ( (FT_UInt32)(x) + 0x8000U ) >> 16 ) ) #define cf2_fixedRound( x ) \ ( (CF2_Fixed)( ( (FT_UInt32)(x) + 0x8000U ) & 0xFFFF0000UL ) ) -#define cf2_floatToFixed( f ) \ +#define cf2_doubleToFixed( f ) \ ( (CF2_Fixed)( (f) * 65536.0 + 0.5 ) ) #define cf2_fixedAbs( x ) \ - ( (x) < 0 ? -(x) : (x) ) + ( (x) < 0 ? NEG_INT32( x ) : (x) ) #define cf2_fixedFloor( x ) \ ( (CF2_Fixed)( (FT_UInt32)(x) & 0xFFFF0000UL ) ) #define cf2_fixedFraction( x ) \ diff --git a/thirdparty/freetype/src/cff/cf2font.c b/thirdparty/freetype/src/cff/cf2font.c index a86e3619b4..4ac71a8d71 100644 --- a/thirdparty/freetype/src/cff/cf2font.c +++ b/thirdparty/freetype/src/cff/cf2font.c @@ -117,7 +117,7 @@ return; /* protect against range problems and divide by zero */ - if ( emRatio < cf2_floatToFixed( .01 ) ) + if ( emRatio < cf2_doubleToFixed( .01 ) ) return; if ( stemDarkened ) @@ -447,7 +447,7 @@ /* choose a constant for StdHW that depends on font contrast */ stdHW = cf2_getStdHW( decoder ); - if ( stdHW > 0 && font->stdVW > 2 * stdHW ) + if ( stdHW > 0 && font->stdVW > MUL_INT32( 2, stdHW ) ) font->stdHW = FT_DivFix( cf2_intToFixed( 75 ), emRatio ); else { diff --git a/thirdparty/freetype/src/cff/cf2ft.c b/thirdparty/freetype/src/cff/cf2ft.c index eb8472f119..c6c00d1623 100644 --- a/thirdparty/freetype/src/cff/cf2ft.c +++ b/thirdparty/freetype/src/cff/cf2ft.c @@ -267,8 +267,8 @@ if ( *hinted ) { - *x_scale = ( decoder->builder.glyph->x_scale + 32 ) / 64; - *y_scale = ( decoder->builder.glyph->y_scale + 32 ) / 64; + *x_scale = ADD_INT32( decoder->builder.glyph->x_scale, 32 ) / 64; + *y_scale = ADD_INT32( decoder->builder.glyph->y_scale, 32 ) / 64; } else { diff --git a/thirdparty/freetype/src/cff/cf2hints.c b/thirdparty/freetype/src/cff/cf2hints.c index c8f7dfeba6..656eb2cff1 100644 --- a/thirdparty/freetype/src/cff/cf2hints.c +++ b/thirdparty/freetype/src/cff/cf2hints.c @@ -74,8 +74,8 @@ /* cross product of pt1 position from origin with pt2 position from */ /* pt1; we reduce the precision so that the result fits into 32 bits */ - return ( x1 >> 16 ) * ( ( y2 - y1 ) >> 16 ) - - ( y1 >> 16 ) * ( ( x2 - x1 ) >> 16 ); + return ( x1 >> 16 ) * ( SUB_INT32( y2, y1 ) >> 16 ) - + ( y1 >> 16 ) * ( SUB_INT32( x2, x1 ) >> 16 ); } @@ -105,7 +105,7 @@ stemHintArray, indexStemHint ); - width = stemHint->max - stemHint->min; + width = SUB_INT32( stemHint->max, stemHint->min ); if ( width == cf2_intToFixed( -21 ) ) { @@ -185,11 +185,11 @@ /* darkening. Bottoms are not changed; tops are incremented by twice */ /* `darkenY'. */ if ( cf2_hint_isTop( hint ) ) - hint->csCoord += 2 * font->darkenY; + hint->csCoord = ADD_INT32( hint->csCoord, 2 * font->darkenY ); - hint->csCoord += hintOrigin; - hint->scale = scale; - hint->index = indexStemHint; /* index in original stem hint array */ + hint->csCoord = ADD_INT32( hint->csCoord, hintOrigin ); + hint->scale = scale; + hint->index = indexStemHint; /* index in original stem hint array */ /* if original stem hint has been used, use the same position */ if ( hint->flags != 0 && stemHint->used ) @@ -314,6 +314,7 @@ /* start linear search from last hit */ CF2_UInt i = hintmap->lastIndex; + FT_ASSERT( hintmap->lastIndex < CF2_MAX_HINT_EDGES ); /* search up */ @@ -330,9 +331,10 @@ if ( i == 0 && csCoord < hintmap->edge[0].csCoord ) { /* special case for points below first edge: use uniform scale */ - return FT_MulFix( csCoord - hintmap->edge[0].csCoord, - hintmap->scale ) + - hintmap->edge[0].dsCoord; + return ADD_INT32( FT_MulFix( SUB_INT32( csCoord, + hintmap->edge[0].csCoord ), + hintmap->scale ), + hintmap->edge[0].dsCoord ); } else { @@ -340,9 +342,10 @@ * Note: entries with duplicate csCoord are allowed. * Use edge[i], the highest entry where csCoord >= entry[i].csCoord */ - return FT_MulFix( csCoord - hintmap->edge[i].csCoord, - hintmap->edge[i].scale ) + - hintmap->edge[i].dsCoord; + return ADD_INT32( FT_MulFix( SUB_INT32( csCoord, + hintmap->edge[i].csCoord ), + hintmap->edge[i].scale ), + hintmap->edge[i].dsCoord ); } } } @@ -437,14 +440,16 @@ /* is there room to move up? */ /* there is if we are at top of array or the next edge is at or */ /* beyond proposed move up? */ - if ( j >= hintmap->count - 1 || + if ( j >= hintmap->count - 1 || hintmap->edge[j + 1].dsCoord >= - hintmap->edge[j].dsCoord + moveUp + upMinCounter ) + ADD_INT32( hintmap->edge[j].dsCoord, + moveUp + upMinCounter ) ) { /* there is room to move up; is there also room to move down? */ - if ( i == 0 || + if ( i == 0 || hintmap->edge[i - 1].dsCoord <= - hintmap->edge[i].dsCoord + moveDown - downMinCounter ) + ADD_INT32( hintmap->edge[i].dsCoord, + moveDown - downMinCounter ) ) { /* move smaller absolute amount */ move = ( -moveDown < moveUp ) ? moveDown : moveUp; /* optimum */ @@ -455,9 +460,10 @@ else { /* is there room to move down? */ - if ( i == 0 || + if ( i == 0 || hintmap->edge[i - 1].dsCoord <= - hintmap->edge[i].dsCoord + moveDown - downMinCounter ) + ADD_INT32( hintmap->edge[i].dsCoord, + moveDown - downMinCounter ) ) { move = moveDown; /* true if non-optimum move */ @@ -491,9 +497,11 @@ } /* move the edge(s) */ - hintmap->edge[i].dsCoord += move; + hintmap->edge[i].dsCoord = ADD_INT32( hintmap->edge[i].dsCoord, + move ); if ( isPair ) - hintmap->edge[j].dsCoord += move; + hintmap->edge[j].dsCoord = ADD_INT32( hintmap->edge[j].dsCoord, + move ); } /* assert there are no overlaps in device space */ @@ -507,18 +515,20 @@ { if ( hintmap->edge[i].csCoord != hintmap->edge[i - 1].csCoord ) hintmap->edge[i - 1].scale = - FT_DivFix( - hintmap->edge[i].dsCoord - hintmap->edge[i - 1].dsCoord, - hintmap->edge[i].csCoord - hintmap->edge[i - 1].csCoord ); + FT_DivFix( SUB_INT32( hintmap->edge[i].dsCoord, + hintmap->edge[i - 1].dsCoord ), + SUB_INT32( hintmap->edge[i].csCoord, + hintmap->edge[i - 1].csCoord ) ); } if ( isPair ) { if ( hintmap->edge[j].csCoord != hintmap->edge[j - 1].csCoord ) hintmap->edge[j - 1].scale = - FT_DivFix( - hintmap->edge[j].dsCoord - hintmap->edge[j - 1].dsCoord, - hintmap->edge[j].csCoord - hintmap->edge[j - 1].csCoord ); + FT_DivFix( SUB_INT32( hintmap->edge[j].dsCoord, + hintmap->edge[j - 1].dsCoord ), + SUB_INT32( hintmap->edge[j].csCoord, + hintmap->edge[j - 1].csCoord ) ); i += 1; /* skip upper edge on next loop */ } @@ -539,15 +549,18 @@ /* is there room to move up? */ if ( hintmap->edge[j + 1].dsCoord >= - hintmap->edge[j].dsCoord + hintMove->moveUp + CF2_MIN_COUNTER ) + ADD_INT32( hintmap->edge[j].dsCoord, + hintMove->moveUp + CF2_MIN_COUNTER ) ) { /* there is more room now, move edge up */ - hintmap->edge[j].dsCoord += hintMove->moveUp; + hintmap->edge[j].dsCoord = ADD_INT32( hintmap->edge[j].dsCoord, + hintMove->moveUp ); if ( cf2_hint_isPair( &hintmap->edge[j] ) ) { FT_ASSERT( j > 0 ); - hintmap->edge[j - 1].dsCoord += hintMove->moveUp; + hintmap->edge[j - 1].dsCoord = + ADD_INT32( hintmap->edge[j - 1].dsCoord, hintMove->moveUp ); } } } @@ -635,18 +648,19 @@ { /* Use hint map to position the center of stem, and nominal scale */ /* to position the two edges. This preserves the stem width. */ - CF2_Fixed midpoint = cf2_hintmap_map( - hintmap->initialHintMap, - ( secondHintEdge->csCoord + - firstHintEdge->csCoord ) / 2 ); - CF2_Fixed halfWidth = FT_MulFix( - ( secondHintEdge->csCoord - - firstHintEdge->csCoord ) / 2, - hintmap->scale ); - - - firstHintEdge->dsCoord = midpoint - halfWidth; - secondHintEdge->dsCoord = midpoint + halfWidth; + CF2_Fixed midpoint = + cf2_hintmap_map( + hintmap->initialHintMap, + ADD_INT32( secondHintEdge->csCoord, + firstHintEdge->csCoord ) / 2 ); + CF2_Fixed halfWidth = + FT_MulFix( SUB_INT32( secondHintEdge->csCoord, + firstHintEdge->csCoord ) / 2, + hintmap->scale ); + + + firstHintEdge->dsCoord = SUB_INT32( midpoint, halfWidth ); + secondHintEdge->dsCoord = ADD_INT32( midpoint, halfWidth ); } else firstHintEdge->dsCoord = cf2_hintmap_map( hintmap->initialHintMap, @@ -715,7 +729,7 @@ /* insert first edge */ hintmap->edge[indexInsert] = *firstHintEdge; /* copy struct */ - hintmap->count += 1; + hintmap->count += 1; if ( isPair ) { @@ -781,7 +795,7 @@ cf2_arrstack_size( hStemHintArray ) + cf2_arrstack_size( vStemHintArray ) ); if ( !cf2_hintmask_isValid( hintMask ) ) - return; /* too many stem hints */ + return; /* too many stem hints */ } /* begin by clearing the map */ @@ -797,7 +811,7 @@ /* Defense-in-depth. Should never return here. */ if ( bitCount > hintMask->bitCount ) - return; + return; /* synthetic embox hints get highest priority */ if ( font->blues.doEmBoxHints ) @@ -1063,7 +1077,7 @@ cf2_fixedAbs( glyphpath->yOffset ) ); /* .1 character space unit */ - glyphpath->snapThreshold = cf2_floatToFixed( 0.1f ); + glyphpath->snapThreshold = cf2_doubleToFixed( 0.1 ); glyphpath->moveIsPending = TRUE; glyphpath->pathIsOpen = FALSE; @@ -1095,16 +1109,20 @@ FT_Vector pt; /* hinted point in upright DS */ - pt.x = FT_MulFix( glyphpath->scaleX, x ) + - FT_MulFix( glyphpath->scaleC, y ); + pt.x = ADD_INT32( FT_MulFix( glyphpath->scaleX, x ), + FT_MulFix( glyphpath->scaleC, y ) ); pt.y = cf2_hintmap_map( hintmap, y ); - ppt->x = FT_MulFix( glyphpath->font->outerTransform.a, pt.x ) + - FT_MulFix( glyphpath->font->outerTransform.c, pt.y ) + - glyphpath->fractionalTranslation.x; - ppt->y = FT_MulFix( glyphpath->font->outerTransform.b, pt.x ) + - FT_MulFix( glyphpath->font->outerTransform.d, pt.y ) + - glyphpath->fractionalTranslation.y; + ppt->x = ADD_INT32( + FT_MulFix( glyphpath->font->outerTransform.a, pt.x ), + ADD_INT32( + FT_MulFix( glyphpath->font->outerTransform.c, pt.y ), + glyphpath->fractionalTranslation.x ) ); + ppt->y = ADD_INT32( + FT_MulFix( glyphpath->font->outerTransform.b, pt.x ), + ADD_INT32( + FT_MulFix( glyphpath->font->outerTransform.d, pt.y ), + glyphpath->fractionalTranslation.y ) ); } @@ -1154,12 +1172,12 @@ CF2_Fixed denominator, s; - u.x = CF2_CS_SCALE( u2->x - u1->x ); - u.y = CF2_CS_SCALE( u2->y - u1->y ); - v.x = CF2_CS_SCALE( v2->x - v1->x ); - v.y = CF2_CS_SCALE( v2->y - v1->y ); - w.x = CF2_CS_SCALE( v1->x - u1->x ); - w.y = CF2_CS_SCALE( v1->y - u1->y ); + u.x = CF2_CS_SCALE( SUB_INT32( u2->x, u1->x ) ); + u.y = CF2_CS_SCALE( SUB_INT32( u2->y, u1->y ) ); + v.x = CF2_CS_SCALE( SUB_INT32( v2->x, v1->x ) ); + v.y = CF2_CS_SCALE( SUB_INT32( v2->y, v1->y ) ); + w.x = CF2_CS_SCALE( SUB_INT32( v1->x, u1->x ) ); + w.y = CF2_CS_SCALE( SUB_INT32( v1->y, u1->y ) ); denominator = cf2_perp( u, v ); @@ -1168,8 +1186,11 @@ s = FT_DivFix( cf2_perp( w, v ), denominator ); - intersection->x = u1->x + FT_MulFix( s, u2->x - u1->x ); - intersection->y = u1->y + FT_MulFix( s, u2->y - u1->y ); + intersection->x = ADD_INT32( u1->x, + FT_MulFix( s, SUB_INT32( u2->x, u1->x ) ) ); + intersection->y = ADD_INT32( u1->y, + FT_MulFix( s, SUB_INT32( u2->y, u1->y ) ) ); + /* * Special case snapping for horizontal and vertical lines. @@ -1180,25 +1201,29 @@ * */ - if ( u1->x == u2->x && - cf2_fixedAbs( intersection->x - u1->x ) < glyphpath->snapThreshold ) + if ( u1->x == u2->x && + cf2_fixedAbs( SUB_INT32( intersection->x, + u1->x ) ) < glyphpath->snapThreshold ) intersection->x = u1->x; - if ( u1->y == u2->y && - cf2_fixedAbs( intersection->y - u1->y ) < glyphpath->snapThreshold ) + if ( u1->y == u2->y && + cf2_fixedAbs( SUB_INT32( intersection->y, + u1->y ) ) < glyphpath->snapThreshold ) intersection->y = u1->y; - if ( v1->x == v2->x && - cf2_fixedAbs( intersection->x - v1->x ) < glyphpath->snapThreshold ) + if ( v1->x == v2->x && + cf2_fixedAbs( SUB_INT32( intersection->x, + v1->x ) ) < glyphpath->snapThreshold ) intersection->x = v1->x; - if ( v1->y == v2->y && - cf2_fixedAbs( intersection->y - v1->y ) < glyphpath->snapThreshold ) + if ( v1->y == v2->y && + cf2_fixedAbs( SUB_INT32( intersection->y, + v1->y ) ) < glyphpath->snapThreshold ) intersection->y = v1->y; /* limit the intersection distance from midpoint of u2 and v1 */ - if ( cf2_fixedAbs( intersection->x - ( u2->x + v1->x ) / 2 ) > - glyphpath->miterLimit || - cf2_fixedAbs( intersection->y - ( u2->y + v1->y ) / 2 ) > - glyphpath->miterLimit ) + if ( cf2_fixedAbs( intersection->x - ADD_INT32( u2->x, v1->x ) / 2 ) > + glyphpath->miterLimit || + cf2_fixedAbs( intersection->y - ADD_INT32( u2->y, v1->y ) / 2 ) > + glyphpath->miterLimit ) return FALSE; return TRUE; @@ -1446,16 +1471,16 @@ CF2_Fixed* x, CF2_Fixed* y ) { - CF2_Fixed dx = x2 - x1; - CF2_Fixed dy = y2 - y1; + CF2_Fixed dx = SUB_INT32( x2, x1 ); + CF2_Fixed dy = SUB_INT32( y2, y1 ); /* note: negative offsets don't work here; negate deltas to change */ /* quadrants, below */ if ( glyphpath->font->reverseWinding ) { - dx = -dx; - dy = -dy; + dx = NEG_INT32( dx ); + dy = NEG_INT32( dy ); } *x = *y = 0; @@ -1464,8 +1489,9 @@ return; /* add momentum for this path element */ - glyphpath->callbacks->windingMomentum += - cf2_getWindingMomentum( x1, y1, x2, y2 ); + glyphpath->callbacks->windingMomentum = + ADD_INT32( glyphpath->callbacks->windingMomentum, + cf2_getWindingMomentum( x1, y1, x2, y2 ) ); /* note: allow mixed integer and fixed multiplication here */ if ( dx >= 0 ) @@ -1474,13 +1500,13 @@ { /* first quadrant, +x +y */ - if ( dx > 2 * dy ) + if ( dx > MUL_INT32( 2, dy ) ) { /* +x */ *x = 0; *y = 0; } - else if ( dy > 2 * dx ) + else if ( dy > MUL_INT32( 2, dx ) ) { /* +y */ *x = glyphpath->xOffset; @@ -1489,9 +1515,9 @@ else { /* +x +y */ - *x = FT_MulFix( cf2_floatToFixed( 0.7 ), + *x = FT_MulFix( cf2_doubleToFixed( 0.7 ), glyphpath->xOffset ); - *y = FT_MulFix( cf2_floatToFixed( 1.0 - 0.7 ), + *y = FT_MulFix( cf2_doubleToFixed( 1.0 - 0.7 ), glyphpath->yOffset ); } } @@ -1499,24 +1525,24 @@ { /* fourth quadrant, +x -y */ - if ( dx > -2 * dy ) + if ( dx > MUL_INT32( -2, dy ) ) { /* +x */ *x = 0; *y = 0; } - else if ( -dy > 2 * dx ) + else if ( NEG_INT32( dy ) > MUL_INT32( 2, dx ) ) { /* -y */ - *x = -glyphpath->xOffset; + *x = NEG_INT32( glyphpath->xOffset ); *y = glyphpath->yOffset; } else { /* +x -y */ - *x = FT_MulFix( cf2_floatToFixed( -0.7 ), + *x = FT_MulFix( cf2_doubleToFixed( -0.7 ), glyphpath->xOffset ); - *y = FT_MulFix( cf2_floatToFixed( 1.0 - 0.7 ), + *y = FT_MulFix( cf2_doubleToFixed( 1.0 - 0.7 ), glyphpath->yOffset ); } } @@ -1527,13 +1553,13 @@ { /* second quadrant, -x +y */ - if ( -dx > 2 * dy ) + if ( NEG_INT32( dx ) > MUL_INT32( 2, dy ) ) { /* -x */ *x = 0; - *y = 2 * glyphpath->yOffset; + *y = MUL_INT32( 2, glyphpath->yOffset ); } - else if ( dy > -2 * dx ) + else if ( dy > MUL_INT32( -2, dx ) ) { /* +y */ *x = glyphpath->xOffset; @@ -1542,9 +1568,9 @@ else { /* -x +y */ - *x = FT_MulFix( cf2_floatToFixed( 0.7 ), + *x = FT_MulFix( cf2_doubleToFixed( 0.7 ), glyphpath->xOffset ); - *y = FT_MulFix( cf2_floatToFixed( 1.0 + 0.7 ), + *y = FT_MulFix( cf2_doubleToFixed( 1.0 + 0.7 ), glyphpath->yOffset ); } } @@ -1552,24 +1578,24 @@ { /* third quadrant, -x -y */ - if ( -dx > -2 * dy ) + if ( NEG_INT32( dx ) > MUL_INT32( -2, dy ) ) { /* -x */ *x = 0; - *y = 2 * glyphpath->yOffset; + *y = MUL_INT32( 2, glyphpath->yOffset ); } - else if ( -dy > -2 * dx ) + else if ( NEG_INT32( dy ) > MUL_INT32( -2, dx ) ) { /* -y */ - *x = -glyphpath->xOffset; + *x = NEG_INT32( glyphpath->xOffset ); *y = glyphpath->yOffset; } else { /* -x -y */ - *x = FT_MulFix( cf2_floatToFixed( -0.7 ), + *x = FT_MulFix( cf2_doubleToFixed( -0.7 ), glyphpath->xOffset ); - *y = FT_MulFix( cf2_floatToFixed( 1.0 + 0.7 ), + *y = FT_MulFix( cf2_doubleToFixed( 1.0 + 0.7 ), glyphpath->yOffset ); } } @@ -1675,10 +1701,10 @@ &yOffset ); /* construct offset points */ - P0.x = glyphpath->currentCS.x + xOffset; - P0.y = glyphpath->currentCS.y + yOffset; - P1.x = x + xOffset; - P1.y = y + yOffset; + P0.x = ADD_INT32( glyphpath->currentCS.x, xOffset ); + P0.y = ADD_INT32( glyphpath->currentCS.y, yOffset ); + P1.x = ADD_INT32( x, xOffset ); + P1.y = ADD_INT32( y, yOffset ); if ( glyphpath->moveIsPending ) { @@ -1753,19 +1779,20 @@ &yOffset3 ); /* add momentum from the middle segment */ - glyphpath->callbacks->windingMomentum += - cf2_getWindingMomentum( x1, y1, x2, y2 ); + glyphpath->callbacks->windingMomentum = + ADD_INT32( glyphpath->callbacks->windingMomentum, + cf2_getWindingMomentum( x1, y1, x2, y2 ) ); /* construct offset points */ - P0.x = glyphpath->currentCS.x + xOffset1; - P0.y = glyphpath->currentCS.y + yOffset1; - P1.x = x1 + xOffset1; - P1.y = y1 + yOffset1; + P0.x = ADD_INT32( glyphpath->currentCS.x, xOffset1 ); + P0.y = ADD_INT32( glyphpath->currentCS.y, yOffset1 ); + P1.x = ADD_INT32( x1, xOffset1 ); + P1.y = ADD_INT32( y1, yOffset1 ); /* note: preserve angle of final segment by using offset3 at both ends */ - P2.x = x2 + xOffset3; - P2.y = y2 + yOffset3; - P3.x = x3 + xOffset3; - P3.y = y3 + yOffset3; + P2.x = ADD_INT32( x2, xOffset3 ); + P2.y = ADD_INT32( y2, yOffset3 ); + P3.x = ADD_INT32( x3, xOffset3 ); + P3.y = ADD_INT32( y3, yOffset3 ); if ( glyphpath->moveIsPending ) { diff --git a/thirdparty/freetype/src/cff/cf2intrp.c b/thirdparty/freetype/src/cff/cf2intrp.c index 40bd9059a1..a816280748 100644 --- a/thirdparty/freetype/src/cff/cf2intrp.c +++ b/thirdparty/freetype/src/cff/cf2intrp.c @@ -304,10 +304,12 @@ CF2_StemHintRec stemhint; - stemhint.min = - position += cf2_stack_getReal( opStack, i ); - stemhint.max = - position += cf2_stack_getReal( opStack, i + 1 ); + stemhint.min = + position = ADD_INT32( position, + cf2_stack_getReal( opStack, i ) ); + stemhint.max = + position = ADD_INT32( position, + cf2_stack_getReal( opStack, i + 1 ) ); stemhint.used = FALSE; stemhint.maxDS = @@ -348,7 +350,8 @@ { vals[i + 2] = vals[i]; if ( readFromStack[i] ) - vals[i + 2] += cf2_stack_getReal( opStack, idx++ ); + vals[i + 2] = ADD_INT32( vals[i + 2], cf2_stack_getReal( opStack, + idx++ ) ); } if ( isHFlex ) @@ -356,31 +359,34 @@ if ( doConditionalLastRead ) { - FT_Bool lastIsX = (FT_Bool)( cf2_fixedAbs( vals[10] - *curX ) > - cf2_fixedAbs( vals[11] - *curY ) ); + FT_Bool lastIsX = (FT_Bool)( + cf2_fixedAbs( SUB_INT32( vals[10], *curX ) ) > + cf2_fixedAbs( SUB_INT32( vals[11], *curY ) ) ); CF2_Fixed lastVal = cf2_stack_getReal( opStack, idx ); if ( lastIsX ) { - vals[12] = vals[10] + lastVal; + vals[12] = ADD_INT32( vals[10], lastVal ); vals[13] = *curY; } else { vals[12] = *curX; - vals[13] = vals[11] + lastVal; + vals[13] = ADD_INT32( vals[11], lastVal ); } } else { if ( readFromStack[10] ) - vals[12] = vals[10] + cf2_stack_getReal( opStack, idx++ ); + vals[12] = ADD_INT32( vals[10], + cf2_stack_getReal( opStack, idx++ ) ); else vals[12] = *curX; if ( readFromStack[11] ) - vals[13] = vals[11] + cf2_stack_getReal( opStack, idx ); + vals[13] = ADD_INT32( vals[11], + cf2_stack_getReal( opStack, idx ) ); else vals[13] = *curY; } @@ -426,7 +432,10 @@ for ( j = 1; j < blend->lenBV; j++ ) - sum += FT_MulFix( *weight++, cf2_stack_getReal( opStack, delta++ ) ); + sum = ADD_INT32( sum, + FT_MulFix( *weight++, + cf2_stack_getReal( opStack, + delta++ ) ) ); /* store blended result */ cf2_stack_setReal( opStack, i + base, sum ); @@ -759,7 +768,8 @@ FT_TRACE4(( " vmoveto\n" )); if ( cf2_stack_count( opStack ) > 1 && !haveWidth ) - *width = cf2_stack_getReal( opStack, 0 ) + nominalWidthX; + *width = ADD_INT32( cf2_stack_getReal( opStack, 0 ), + nominalWidthX ); /* width is defined or default after this */ haveWidth = TRUE; @@ -767,7 +777,7 @@ if ( font->decoder->width_only ) goto exit; - curY += cf2_stack_popFixed( opStack ); + curY = ADD_INT32( curY, cf2_stack_popFixed( opStack ) ); cf2_glyphpath_moveTo( &glyphPath, curX, curY ); @@ -783,8 +793,10 @@ for ( idx = 0; idx < count; idx += 2 ) { - curX += cf2_stack_getReal( opStack, idx + 0 ); - curY += cf2_stack_getReal( opStack, idx + 1 ); + curX = ADD_INT32( curX, cf2_stack_getReal( opStack, + idx + 0 ) ); + curY = ADD_INT32( curY, cf2_stack_getReal( opStack, + idx + 1 ) ); cf2_glyphpath_lineTo( &glyphPath, curX, curY ); } @@ -810,9 +822,9 @@ if ( isX ) - curX += v; + curX = ADD_INT32( curX, v ); else - curY += v; + curY = ADD_INT32( curY, v ); isX = !isX; @@ -835,13 +847,15 @@ while ( idx + 6 <= count ) { - CF2_Fixed x1 = cf2_stack_getReal( opStack, idx + 0 ) + curX; - CF2_Fixed y1 = cf2_stack_getReal( opStack, idx + 1 ) + curY; - CF2_Fixed x2 = cf2_stack_getReal( opStack, idx + 2 ) + x1; - CF2_Fixed y2 = cf2_stack_getReal( opStack, idx + 3 ) + y1; - CF2_Fixed x3 = cf2_stack_getReal( opStack, idx + 4 ) + x2; - CF2_Fixed y3 = cf2_stack_getReal( opStack, idx + 5 ) + y2; + CF2_Fixed x1, y1, x2, y2, x3, y3; + + x1 = ADD_INT32( cf2_stack_getReal( opStack, idx + 0 ), curX ); + y1 = ADD_INT32( cf2_stack_getReal( opStack, idx + 1 ), curY ); + x2 = ADD_INT32( cf2_stack_getReal( opStack, idx + 2 ), x1 ); + y2 = ADD_INT32( cf2_stack_getReal( opStack, idx + 3 ), y1 ); + x3 = ADD_INT32( cf2_stack_getReal( opStack, idx + 4 ), x2 ); + y3 = ADD_INT32( cf2_stack_getReal( opStack, idx + 5 ), y2 ); cf2_glyphpath_curveTo( &glyphPath, x1, y1, x2, y2, x3, y3 ); @@ -852,8 +866,10 @@ if ( op1 == cf2_cmdRCURVELINE ) { - curX += cf2_stack_getReal( opStack, idx + 0 ); - curY += cf2_stack_getReal( opStack, idx + 1 ); + curX = ADD_INT32( curX, cf2_stack_getReal( opStack, + idx + 0 ) ); + curY = ADD_INT32( curY, cf2_stack_getReal( opStack, + idx + 1 ) ); cf2_glyphpath_lineTo( &glyphPath, curX, curY ); } @@ -1129,7 +1145,10 @@ arg = cf2_stack_popFixed( opStack ); - cf2_stack_pushFixed( opStack, FT_ABS( arg ) ); + if ( arg < -CF2_FIXED_MAX ) + cf2_stack_pushFixed( opStack, CF2_FIXED_MAX ); + else + cf2_stack_pushFixed( opStack, FT_ABS( arg ) ); } continue; /* do not clear the stack */ @@ -1144,7 +1163,9 @@ summand2 = cf2_stack_popFixed( opStack ); summand1 = cf2_stack_popFixed( opStack ); - cf2_stack_pushFixed( opStack, summand1 + summand2 ); + cf2_stack_pushFixed( opStack, + ADD_INT32( summand1, + summand2 ) ); } continue; /* do not clear the stack */ @@ -1159,7 +1180,8 @@ subtrahend = cf2_stack_popFixed( opStack ); minuend = cf2_stack_popFixed( opStack ); - cf2_stack_pushFixed( opStack, minuend - subtrahend ); + cf2_stack_pushFixed( opStack, + SUB_INT32( minuend, subtrahend ) ); } continue; /* do not clear the stack */ @@ -1174,7 +1196,8 @@ divisor = cf2_stack_popFixed( opStack ); dividend = cf2_stack_popFixed( opStack ); - cf2_stack_pushFixed( opStack, FT_DivFix( dividend, divisor ) ); + cf2_stack_pushFixed( opStack, + FT_DivFix( dividend, divisor ) ); } continue; /* do not clear the stack */ @@ -1187,7 +1210,10 @@ arg = cf2_stack_popFixed( opStack ); - cf2_stack_pushFixed( opStack, -arg ); + if ( arg < -CF2_FIXED_MAX ) + cf2_stack_pushFixed( opStack, CF2_FIXED_MAX ); + else + cf2_stack_pushFixed( opStack, -arg ); } continue; /* do not clear the stack */ @@ -1257,7 +1283,8 @@ arg2 = cf2_stack_popFixed( opStack ); arg1 = cf2_stack_popFixed( opStack ); - cf2_stack_pushFixed( opStack, cond1 <= cond2 ? arg1 : arg2 ); + cf2_stack_pushFixed( opStack, + cond1 <= cond2 ? arg1 : arg2 ); } continue; /* do not clear the stack */ @@ -1291,7 +1318,8 @@ factor2 = cf2_stack_popFixed( opStack ); factor1 = cf2_stack_popFixed( opStack ); - cf2_stack_pushFixed( opStack, FT_MulFix( factor1, factor2 ) ); + cf2_stack_pushFixed( opStack, + FT_MulFix( factor1, factor2 ) ); } continue; /* do not clear the stack */ @@ -1305,7 +1333,9 @@ arg = cf2_stack_popFixed( opStack ); if ( arg > 0 ) { - FT_Fixed root = arg; + /* use a start value that doesn't make */ + /* the algorithm's addition overflow */ + FT_Fixed root = arg < 10 ? arg : arg >> 1; FT_Fixed new_root; @@ -1369,7 +1399,8 @@ if ( size > 0 ) { - /* for `cf2_stack_getReal', index 0 is bottom of stack */ + /* for `cf2_stack_getReal', */ + /* index 0 is bottom of stack */ CF2_UInt gr_idx; @@ -1381,7 +1412,8 @@ gr_idx = size - 1 - (CF2_UInt)idx; cf2_stack_pushFixed( opStack, - cf2_stack_getReal( opStack, gr_idx ) ); + cf2_stack_getReal( opStack, + gr_idx ) ); } } continue; /* do not clear the stack */ @@ -1416,7 +1448,8 @@ cf2_stack_count( opStack ) == 5 ) { if ( !haveWidth ) - *width = cf2_stack_getReal( opStack, 0 ) + nominalWidthX; + *width = ADD_INT32( cf2_stack_getReal( opStack, 0 ), + nominalWidthX ); } /* width is defined or default after this */ @@ -1564,7 +1597,8 @@ FT_TRACE4(( " rmoveto\n" )); if ( cf2_stack_count( opStack ) > 2 && !haveWidth ) - *width = cf2_stack_getReal( opStack, 0 ) + nominalWidthX; + *width = ADD_INT32( cf2_stack_getReal( opStack, 0 ), + nominalWidthX ); /* width is defined or default after this */ haveWidth = TRUE; @@ -1572,8 +1606,8 @@ if ( font->decoder->width_only ) goto exit; - curY += cf2_stack_popFixed( opStack ); - curX += cf2_stack_popFixed( opStack ); + curY = ADD_INT32( curY, cf2_stack_popFixed( opStack ) ); + curX = ADD_INT32( curX, cf2_stack_popFixed( opStack ) ); cf2_glyphpath_moveTo( &glyphPath, curX, curY ); @@ -1583,7 +1617,8 @@ FT_TRACE4(( " hmoveto\n" )); if ( cf2_stack_count( opStack ) > 1 && !haveWidth ) - *width = cf2_stack_getReal( opStack, 0 ) + nominalWidthX; + *width = ADD_INT32( cf2_stack_getReal( opStack, 0 ), + nominalWidthX ); /* width is defined or default after this */ haveWidth = TRUE; @@ -1591,7 +1626,7 @@ if ( font->decoder->width_only ) goto exit; - curX += cf2_stack_popFixed( opStack ); + curX = ADD_INT32( curX, cf2_stack_popFixed( opStack ) ); cf2_glyphpath_moveTo( &glyphPath, curX, curY ); @@ -1607,8 +1642,10 @@ while ( idx + 6 < count ) { - curX += cf2_stack_getReal( opStack, idx + 0 ); - curY += cf2_stack_getReal( opStack, idx + 1 ); + curX = ADD_INT32( curX, cf2_stack_getReal( opStack, + idx + 0 ) ); + curY = ADD_INT32( curY, cf2_stack_getReal( opStack, + idx + 1 ) ); cf2_glyphpath_lineTo( &glyphPath, curX, curY ); idx += 2; @@ -1616,13 +1653,15 @@ while ( idx < count ) { - CF2_Fixed x1 = cf2_stack_getReal( opStack, idx + 0 ) + curX; - CF2_Fixed y1 = cf2_stack_getReal( opStack, idx + 1 ) + curY; - CF2_Fixed x2 = cf2_stack_getReal( opStack, idx + 2 ) + x1; - CF2_Fixed y2 = cf2_stack_getReal( opStack, idx + 3 ) + y1; - CF2_Fixed x3 = cf2_stack_getReal( opStack, idx + 4 ) + x2; - CF2_Fixed y3 = cf2_stack_getReal( opStack, idx + 5 ) + y2; + CF2_Fixed x1, y1, x2, y2, x3, y3; + + x1 = ADD_INT32( cf2_stack_getReal( opStack, idx + 0 ), curX ); + y1 = ADD_INT32( cf2_stack_getReal( opStack, idx + 1 ), curY ); + x2 = ADD_INT32( cf2_stack_getReal( opStack, idx + 2 ), x1 ); + y2 = ADD_INT32( cf2_stack_getReal( opStack, idx + 3 ), y1 ); + x3 = ADD_INT32( cf2_stack_getReal( opStack, idx + 4 ), x2 ); + y3 = ADD_INT32( cf2_stack_getReal( opStack, idx + 5 ), y2 ); cf2_glyphpath_curveTo( &glyphPath, x1, y1, x2, y2, x3, y3 ); @@ -1656,18 +1695,18 @@ if ( ( count - idx ) & 1 ) { - x1 = cf2_stack_getReal( opStack, idx ) + curX; + x1 = ADD_INT32( cf2_stack_getReal( opStack, idx ), curX ); idx++; } else x1 = curX; - y1 = cf2_stack_getReal( opStack, idx + 0 ) + curY; - x2 = cf2_stack_getReal( opStack, idx + 1 ) + x1; - y2 = cf2_stack_getReal( opStack, idx + 2 ) + y1; + y1 = ADD_INT32( cf2_stack_getReal( opStack, idx + 0 ), curY ); + x2 = ADD_INT32( cf2_stack_getReal( opStack, idx + 1 ), x1 ); + y2 = ADD_INT32( cf2_stack_getReal( opStack, idx + 2 ), y1 ); x3 = x2; - y3 = cf2_stack_getReal( opStack, idx + 3 ) + y2; + y3 = ADD_INT32( cf2_stack_getReal( opStack, idx + 3 ), y2 ); cf2_glyphpath_curveTo( &glyphPath, x1, y1, x2, y2, x3, y3 ); @@ -1701,17 +1740,17 @@ if ( ( count - idx ) & 1 ) { - y1 = cf2_stack_getReal( opStack, idx ) + curY; + y1 = ADD_INT32( cf2_stack_getReal( opStack, idx ), curY ); idx++; } else y1 = curY; - x1 = cf2_stack_getReal( opStack, idx + 0 ) + curX; - x2 = cf2_stack_getReal( opStack, idx + 1 ) + x1; - y2 = cf2_stack_getReal( opStack, idx + 2 ) + y1; - x3 = cf2_stack_getReal( opStack, idx + 3 ) + x2; + x1 = ADD_INT32( cf2_stack_getReal( opStack, idx + 0 ), curX ); + x2 = ADD_INT32( cf2_stack_getReal( opStack, idx + 1 ), x1 ); + y2 = ADD_INT32( cf2_stack_getReal( opStack, idx + 2 ), y1 ); + x3 = ADD_INT32( cf2_stack_getReal( opStack, idx + 3 ), x2 ); y3 = y2; cf2_glyphpath_curveTo( &glyphPath, x1, y1, x2, y2, x3, y3 ); @@ -1750,15 +1789,15 @@ if ( alternate ) { - x1 = cf2_stack_getReal( opStack, idx + 0 ) + curX; + x1 = ADD_INT32( cf2_stack_getReal( opStack, idx + 0 ), curX ); y1 = curY; - x2 = cf2_stack_getReal( opStack, idx + 1 ) + x1; - y2 = cf2_stack_getReal( opStack, idx + 2 ) + y1; - y3 = cf2_stack_getReal( opStack, idx + 3 ) + y2; + x2 = ADD_INT32( cf2_stack_getReal( opStack, idx + 1 ), x1 ); + y2 = ADD_INT32( cf2_stack_getReal( opStack, idx + 2 ), y1 ); + y3 = ADD_INT32( cf2_stack_getReal( opStack, idx + 3 ), y2 ); if ( count - idx == 5 ) { - x3 = cf2_stack_getReal( opStack, idx + 4 ) + x2; + x3 = ADD_INT32( cf2_stack_getReal( opStack, idx + 4 ), x2 ); idx++; } @@ -1770,14 +1809,14 @@ else { x1 = curX; - y1 = cf2_stack_getReal( opStack, idx + 0 ) + curY; - x2 = cf2_stack_getReal( opStack, idx + 1 ) + x1; - y2 = cf2_stack_getReal( opStack, idx + 2 ) + y1; - x3 = cf2_stack_getReal( opStack, idx + 3 ) + x2; + y1 = ADD_INT32( cf2_stack_getReal( opStack, idx + 0 ), curY ); + x2 = ADD_INT32( cf2_stack_getReal( opStack, idx + 1 ), x1 ); + y2 = ADD_INT32( cf2_stack_getReal( opStack, idx + 2 ), y1 ); + x3 = ADD_INT32( cf2_stack_getReal( opStack, idx + 3 ), x2 ); if ( count - idx == 5 ) { - y3 = cf2_stack_getReal( opStack, idx + 4 ) + y2; + y3 = ADD_INT32( cf2_stack_getReal( opStack, idx + 4 ), y2 ); idx++; } diff --git a/thirdparty/freetype/src/cff/cffgload.c b/thirdparty/freetype/src/cff/cffgload.c index 940804850e..20f3a2c28e 100644 --- a/thirdparty/freetype/src/cff/cffgload.c +++ b/thirdparty/freetype/src/cff/cffgload.c @@ -20,6 +20,7 @@ #include FT_INTERNAL_DEBUG_H #include FT_INTERNAL_STREAM_H #include FT_INTERNAL_SFNT_H +#include FT_INTERNAL_CALC_H #include FT_OUTLINE_H #include FT_CFF_DRIVER_H @@ -1450,8 +1451,8 @@ cff_builder_close_contour( builder ); builder->path_begun = 0; - x += args[-2]; - y += args[-1]; + x = ADD_LONG( x, args[-2] ); + y = ADD_LONG( y, args[-1] ); args = stack; break; @@ -1460,7 +1461,7 @@ cff_builder_close_contour( builder ); builder->path_begun = 0; - y += args[-1]; + y = ADD_LONG( y, args[-1] ); args = stack; break; @@ -1469,7 +1470,7 @@ cff_builder_close_contour( builder ); builder->path_begun = 0; - x += args[-1]; + x = ADD_LONG( x, args[-1] ); args = stack; break; @@ -1486,8 +1487,8 @@ args -= num_args & ~1; while ( args < decoder->top ) { - x += args[0]; - y += args[1]; + x = ADD_LONG( x, args[0] ); + y = ADD_LONG( y, args[1] ); cff_builder_add_point( builder, x, y, 1 ); args += 2; } @@ -1519,9 +1520,9 @@ while ( args < decoder->top ) { if ( phase ) - x += args[0]; + x = ADD_LONG( x, args[0] ); else - y += args[0]; + y = ADD_LONG( y, args[0] ); if ( cff_builder_add_point1( builder, x, y ) ) goto Fail; @@ -1552,15 +1553,18 @@ args -= nargs; while ( args < decoder->top ) { - x += args[0]; - y += args[1]; + x = ADD_LONG( x, args[0] ); + y = ADD_LONG( y, args[1] ); cff_builder_add_point( builder, x, y, 0 ); - x += args[2]; - y += args[3]; + + x = ADD_LONG( x, args[2] ); + y = ADD_LONG( y, args[3] ); cff_builder_add_point( builder, x, y, 0 ); - x += args[4]; - y += args[5]; + + x = ADD_LONG( x, args[4] ); + y = ADD_LONG( y, args[5] ); cff_builder_add_point( builder, x, y, 1 ); + args += 6; } args = stack; @@ -1589,7 +1593,7 @@ if ( nargs & 1 ) { - x += args[0]; + x = ADD_LONG( x, args[0] ); args++; nargs--; } @@ -1599,13 +1603,16 @@ while ( args < decoder->top ) { - y += args[0]; + y = ADD_LONG( y, args[0] ); cff_builder_add_point( builder, x, y, 0 ); - x += args[1]; - y += args[2]; + + x = ADD_LONG( x, args[1] ); + y = ADD_LONG( y, args[2] ); cff_builder_add_point( builder, x, y, 0 ); - y += args[3]; + + y = ADD_LONG( y, args[3] ); cff_builder_add_point( builder, x, y, 1 ); + args += 4; } args = stack; @@ -1633,7 +1640,7 @@ args -= nargs; if ( nargs & 1 ) { - y += args[0]; + y = ADD_LONG( y, args[0] ); args++; nargs--; } @@ -1643,13 +1650,16 @@ while ( args < decoder->top ) { - x += args[0]; + x = ADD_LONG( x, args[0] ); cff_builder_add_point( builder, x, y, 0 ); - x += args[1]; - y += args[2]; + + x = ADD_LONG( x, args[1] ); + y = ADD_LONG( y, args[2] ); cff_builder_add_point( builder, x, y, 0 ); - x += args[3]; + + x = ADD_LONG( x, args[3] ); cff_builder_add_point( builder, x, y, 1 ); + args += 4; } args = stack; @@ -1688,26 +1698,30 @@ nargs -= 4; if ( phase ) { - x += args[0]; + x = ADD_LONG( x, args[0] ); cff_builder_add_point( builder, x, y, 0 ); - x += args[1]; - y += args[2]; + + x = ADD_LONG( x, args[1] ); + y = ADD_LONG( y, args[2] ); cff_builder_add_point( builder, x, y, 0 ); - y += args[3]; + + y = ADD_LONG( y, args[3] ); if ( nargs == 1 ) - x += args[4]; + x = ADD_LONG( x, args[4] ); cff_builder_add_point( builder, x, y, 1 ); } else { - y += args[0]; + y = ADD_LONG( y, args[0] ); cff_builder_add_point( builder, x, y, 0 ); - x += args[1]; - y += args[2]; + + x = ADD_LONG( x, args[1] ); + y = ADD_LONG( y, args[2] ); cff_builder_add_point( builder, x, y, 0 ); - x += args[3]; + + x = ADD_LONG( x, args[3] ); if ( nargs == 1 ) - y += args[4]; + y = ADD_LONG( y, args[4] ); cff_builder_add_point( builder, x, y, 1 ); } args += 4; @@ -1740,23 +1754,27 @@ /* first, add the line segments */ while ( num_lines > 0 ) { - x += args[0]; - y += args[1]; + x = ADD_LONG( x, args[0] ); + y = ADD_LONG( y, args[1] ); cff_builder_add_point( builder, x, y, 1 ); + args += 2; num_lines--; } /* then the curve */ - x += args[0]; - y += args[1]; + x = ADD_LONG( x, args[0] ); + y = ADD_LONG( y, args[1] ); cff_builder_add_point( builder, x, y, 0 ); - x += args[2]; - y += args[3]; + + x = ADD_LONG( x, args[2] ); + y = ADD_LONG( y, args[3] ); cff_builder_add_point( builder, x, y, 0 ); - x += args[4]; - y += args[5]; + + x = ADD_LONG( x, args[4] ); + y = ADD_LONG( y, args[5] ); cff_builder_add_point( builder, x, y, 1 ); + args = stack; } break; @@ -1785,23 +1803,27 @@ /* first, add the curves */ while ( num_curves > 0 ) { - x += args[0]; - y += args[1]; + x = ADD_LONG( x, args[0] ); + y = ADD_LONG( y, args[1] ); cff_builder_add_point( builder, x, y, 0 ); - x += args[2]; - y += args[3]; + + x = ADD_LONG( x, args[2] ); + y = ADD_LONG( y, args[3] ); cff_builder_add_point( builder, x, y, 0 ); - x += args[4]; - y += args[5]; + + x = ADD_LONG( x, args[4] ); + y = ADD_LONG( y, args[5] ); cff_builder_add_point( builder, x, y, 1 ); + args += 6; num_curves--; } /* then the final line */ - x += args[0]; - y += args[1]; + x = ADD_LONG( x, args[0] ); + y = ADD_LONG( y, args[1] ); cff_builder_add_point( builder, x, y, 1 ); + args = stack; } break; @@ -1824,33 +1846,33 @@ start_y = y; /* first control point */ - x += args[0]; - y += args[1]; + x = ADD_LONG( x, args[0] ); + y = ADD_LONG( y, args[1] ); cff_builder_add_point( builder, x, y, 0 ); /* second control point */ - x += args[2]; - y += args[3]; + x = ADD_LONG( x, args[2] ); + y = ADD_LONG( y, args[3] ); cff_builder_add_point( builder, x, y, 0 ); /* join point; on curve, with y-value the same as the last */ /* control point's y-value */ - x += args[4]; + x = ADD_LONG( x, args[4] ); cff_builder_add_point( builder, x, y, 1 ); /* third control point, with y-value the same as the join */ /* point's y-value */ - x += args[5]; + x = ADD_LONG( x, args[5] ); cff_builder_add_point( builder, x, y, 0 ); /* fourth control point */ - x += args[6]; - y += args[7]; + x = ADD_LONG( x, args[6] ); + y = ADD_LONG( y, args[7] ); cff_builder_add_point( builder, x, y, 0 ); /* ending point, with y-value the same as the start */ - x += args[8]; - y = start_y; + x = ADD_LONG( x, args[8] ); + y = start_y; cff_builder_add_point( builder, x, y, 1 ); args = stack; @@ -1873,32 +1895,32 @@ start_y = y; /* first control point */ - x += args[0]; + x = ADD_LONG( x, args[0] ); cff_builder_add_point( builder, x, y, 0 ); /* second control point */ - x += args[1]; - y += args[2]; + x = ADD_LONG( x, args[1] ); + y = ADD_LONG( y, args[2] ); cff_builder_add_point( builder, x, y, 0 ); /* join point; on curve, with y-value the same as the last */ /* control point's y-value */ - x += args[3]; + x = ADD_LONG( x, args[3] ); cff_builder_add_point( builder, x, y, 1 ); /* third control point, with y-value the same as the join */ /* point's y-value */ - x += args[4]; + x = ADD_LONG( x, args[4] ); cff_builder_add_point( builder, x, y, 0 ); /* fourth control point */ - x += args[5]; - y = start_y; + x = ADD_LONG( x, args[5] ); + y = start_y; cff_builder_add_point( builder, x, y, 0 ); /* ending point, with y-value the same as the start point's */ /* y-value -- we don't add this point, though */ - x += args[6]; + x = ADD_LONG( x, args[6] ); cff_builder_add_point( builder, x, y, 1 ); args = stack; @@ -1934,8 +1956,8 @@ /* grab up to the last argument */ for ( count = 5; count > 0; count-- ) { - dx += temp[0]; - dy += temp[1]; + dx = ADD_LONG( dx, temp[0] ); + dy = ADD_LONG( dy, temp[1] ); temp += 2; } @@ -1949,8 +1971,8 @@ for ( count = 5; count > 0; count-- ) { - x += args[0]; - y += args[1]; + x = ADD_LONG( x, args[0] ); + y = ADD_LONG( y, args[1] ); cff_builder_add_point( builder, x, y, (FT_Bool)( count == 3 ) ); args += 2; @@ -1959,13 +1981,13 @@ /* is last operand an x- or y-delta? */ if ( horizontal ) { - x += args[0]; - y = start_y; + x = ADD_LONG( x, args[0] ); + y = start_y; } else { - x = start_x; - y += args[0]; + x = start_x; + y = ADD_LONG( y, args[0] ); } cff_builder_add_point( builder, x, y, 1 ); @@ -1987,8 +2009,8 @@ for ( count = 6; count > 0; count-- ) { - x += args[0]; - y += args[1]; + x = ADD_LONG( x, args[0] ); + y = ADD_LONG( y, args[1] ); cff_builder_add_point( builder, x, y, (FT_Bool)( count == 4 || count == 1 ) ); args += 2; @@ -2066,21 +2088,26 @@ FT_TRACE4(( " abs\n" )); if ( args[0] < 0 ) - args[0] = -args[0]; + { + if ( args[0] == FT_LONG_MIN ) + args[0] = FT_LONG_MAX; + else + args[0] = -args[0]; + } args++; break; case cff_op_add: FT_TRACE4(( " add\n" )); - args[0] += args[1]; + args[0] = ADD_LONG( args[0], args[1] ); args++; break; case cff_op_sub: FT_TRACE4(( " sub\n" )); - args[0] -= args[1]; + args[0] = SUB_LONG( args[0], args[1] ); args++; break; @@ -2094,6 +2121,8 @@ case cff_op_neg: FT_TRACE4(( " neg\n" )); + if ( args[0] == FT_LONG_MIN ) + args[0] = FT_LONG_MAX; args[0] = -args[0]; args++; break; @@ -2350,12 +2379,13 @@ FT_TRACE4(( " hsbw (invalid op)\n" )); - decoder->glyph_width = decoder->nominal_width + ( args[1] >> 16 ); + decoder->glyph_width = + ADD_LONG( decoder->nominal_width, ( args[1] >> 16 ) ); decoder->builder.left_bearing.x = args[0]; decoder->builder.left_bearing.y = 0; - x = decoder->builder.pos_x + args[0]; + x = ADD_LONG( decoder->builder.pos_x, args[0] ); y = decoder->builder.pos_y; args = stack; break; @@ -2367,13 +2397,14 @@ FT_TRACE4(( " sbw (invalid op)\n" )); - decoder->glyph_width = decoder->nominal_width + ( args[2] >> 16 ); + decoder->glyph_width = + ADD_LONG( decoder->nominal_width, ( args[2] >> 16 ) ); decoder->builder.left_bearing.x = args[0]; decoder->builder.left_bearing.y = args[1]; - x = decoder->builder.pos_x + args[0]; - y = decoder->builder.pos_y + args[1]; + x = ADD_LONG( decoder->builder.pos_x, args[0] ); + y = ADD_LONG( decoder->builder.pos_y, args[1] ); args = stack; break; @@ -2384,8 +2415,8 @@ FT_TRACE4(( " setcurrentpoint (invalid op)\n" )); - x = decoder->builder.pos_x + args[0]; - y = decoder->builder.pos_y + args[1]; + x = ADD_LONG( decoder->builder.pos_x, args[0] ); + y = ADD_LONG( decoder->builder.pos_y, args[1] ); args = stack; break; diff --git a/thirdparty/freetype/src/cff/cffload.c b/thirdparty/freetype/src/cff/cffload.c index 3beaeb1c8e..12420384af 100644 --- a/thirdparty/freetype/src/cff/cffload.c +++ b/thirdparty/freetype/src/cff/cffload.c @@ -1352,9 +1352,12 @@ sum = cff_parse_num( parser, &parser->stack[i + base] ) * 65536; for ( j = 1; j < blend->lenBV; j++ ) - sum += FT_MulFix( *weight++, - cff_parse_num( parser, - &parser->stack[delta++] ) * 65536 ); + sum = ADD_INT32( + sum, + FT_MulFix( + *weight++, + cff_parse_num( parser, + &parser->stack[delta++] ) * 65536 ) ); /* point parser stack to new value on blend_stack */ parser->stack[i + base] = subFont->blend_top; diff --git a/thirdparty/freetype/src/cff/cffparse.c b/thirdparty/freetype/src/cff/cffparse.c index e1511bdbd1..9d7bf6d22c 100644 --- a/thirdparty/freetype/src/cff/cffparse.c +++ b/thirdparty/freetype/src/cff/cffparse.c @@ -20,6 +20,7 @@ #include "cffparse.h" #include FT_INTERNAL_STREAM_H #include FT_INTERNAL_DEBUG_H +#include FT_INTERNAL_CALC_H #include "cfferrs.h" #include "cffpic.h" @@ -156,6 +157,22 @@ 1000000000L }; + /* maximum values allowed for multiplying */ + /* with the corresponding `power_tens' element */ + static const FT_Long power_ten_limits[] = + { + FT_LONG_MAX / 1L, + FT_LONG_MAX / 10L, + FT_LONG_MAX / 100L, + FT_LONG_MAX / 1000L, + FT_LONG_MAX / 10000L, + FT_LONG_MAX / 100000L, + FT_LONG_MAX / 1000000L, + FT_LONG_MAX / 10000000L, + FT_LONG_MAX / 100000000L, + FT_LONG_MAX / 1000000000L, + }; + /* read a real */ static FT_Fixed @@ -484,7 +501,15 @@ if ( scaling ) + { + if ( FT_ABS( val ) > power_ten_limits[scaling] ) + { + val = val > 0 ? 0x7FFFFFFFL : -0x7FFFFFFFL; + goto Overflow; + } + val *= power_tens[scaling]; + } if ( val > 0x7FFF ) { @@ -1585,7 +1610,7 @@ val = 0; while ( num_args > 0 ) { - val += cff_parse_num( parser, data++ ); + val = ADD_LONG( val, cff_parse_num( parser, data++ ) ); switch ( field->size ) { case (8 / FT_CHAR_BIT): diff --git a/thirdparty/freetype/src/gxvalid/README b/thirdparty/freetype/src/gxvalid/README index 7201459aaf..200f66cb12 100644 --- a/thirdparty/freetype/src/gxvalid/README +++ b/thirdparty/freetype/src/gxvalid/README @@ -9,7 +9,7 @@ gxvalid: TrueType GX validator additional tables in TrueType font which are used by `QuickDraw GX Text', Apple Advanced Typography (AAT). In addition, gxvalid can validates `kern' tables which have been extended for AAT. Like the - otvalid module, gxvalid uses Freetype 2's validator framework + otvalid module, gxvalid uses FreeType 2's validator framework (ftvalid). You can link gxvalid with your program; before running your own layout diff --git a/thirdparty/freetype/src/pcf/README b/thirdparty/freetype/src/pcf/README index 10eff15fbe..09ea970eda 100644 --- a/thirdparty/freetype/src/pcf/README +++ b/thirdparty/freetype/src/pcf/README @@ -41,8 +41,8 @@ value given as argument into the corresponding glyph number. Known problems ************** -- dealing explicitly with encodings breaks the uniformity of freetype2 - api. +- dealing explicitly with encodings breaks the uniformity of FreeType 2 + API. - except for encodings properties, client applications have no visibility of the PCF_Face object. This means that applications diff --git a/thirdparty/freetype/src/pcf/pcfdrivr.c b/thirdparty/freetype/src/pcf/pcfdrivr.c index 9f4d36d111..169f75e950 100644 --- a/thirdparty/freetype/src/pcf/pcfdrivr.c +++ b/thirdparty/freetype/src/pcf/pcfdrivr.c @@ -387,7 +387,11 @@ THE SOFTWARE. if ( !ft_strcmp( s, "10646" ) || ( !ft_strcmp( s, "8859" ) && !ft_strcmp( face->charset_encoding, "1" ) ) ) - unicode_charmap = 1; + unicode_charmap = 1; + /* another name for ASCII */ + else if ( !ft_strcmp( s, "646.1991" ) && + !ft_strcmp( face->charset_encoding, "IRV" ) ) + unicode_charmap = 1; } } @@ -409,12 +413,6 @@ THE SOFTWARE. } error = FT_CMap_New( &pcf_cmap_class, NULL, &charmap, NULL ); - -#if 0 - /* Select default charmap */ - if ( pcfface->num_charmaps ) - pcfface->charmap = pcfface->charmaps[0]; -#endif } } diff --git a/thirdparty/freetype/src/pcf/pcfread.c b/thirdparty/freetype/src/pcf/pcfread.c index 3eacf2baf6..da216b05f4 100644 --- a/thirdparty/freetype/src/pcf/pcfread.c +++ b/thirdparty/freetype/src/pcf/pcfread.c @@ -1162,6 +1162,20 @@ THE SOFTWARE. accel->fontDescent, accel->maxOverlap )); + /* sanity checks */ + if ( FT_ABS( accel->fontAscent ) > 0x7FFF ) + { + accel->fontAscent = accel->fontAscent < 0 ? -0x7FFF : 0x7FFF; + FT_TRACE0(( "pfc_get_accel: clamping font ascent to value %d\n", + accel->fontAscent )); + } + if ( FT_ABS( accel->fontDescent ) > 0x7FFF ) + { + accel->fontDescent = accel->fontDescent < 0 ? -0x7FFF : 0x7FFF; + FT_TRACE0(( "pfc_get_accel: clamping font descent to value %d\n", + accel->fontDescent )); + } + FT_TRACE5(( " minbounds:" )); error = pcf_get_metric( stream, format & ( ~PCF_FORMAT_MASK ), @@ -1496,8 +1510,16 @@ THE SOFTWARE. if ( face->accel.fontAscent + face->accel.fontDescent < 0 ) FT_TRACE0(( "pcf_load_font: negative height\n" )); #endif - bsize->height = FT_ABS( (FT_Short)( face->accel.fontAscent + - face->accel.fontDescent ) ); + if ( FT_ABS( face->accel.fontAscent + + face->accel.fontDescent ) > 0x7FFF ) + { + bsize->height = 0x7FFF; + FT_TRACE0(( "pcf_load_font: clamping height to value %d\n", + bsize->height )); + } + else + bsize->height = FT_ABS( (FT_Short)( face->accel.fontAscent + + face->accel.fontDescent ) ); prop = pcf_find_property( face, "AVERAGE_WIDTH" ); if ( prop ) @@ -1506,10 +1528,20 @@ THE SOFTWARE. if ( prop->value.l < 0 ) FT_TRACE0(( "pcf_load_font: negative average width\n" )); #endif - bsize->width = FT_ABS( (FT_Short)( ( prop->value.l ) + 5 ) / 10 ); + if ( ( FT_ABS( prop->value.l ) > 0x7FFFL * 10 - 5 ) ) + { + bsize->width = 0x7FFF; + FT_TRACE0(( "pcf_load_font: clamping average width to value %d\n", + bsize->width )); + } + else + bsize->width = FT_ABS( (FT_Short)( ( prop->value.l + 5 ) / 10 ) ); } else + { + /* this is a heuristical value */ bsize->width = (FT_Short)FT_MulDiv( bsize->height, 2, 3 ); + } prop = pcf_find_property( face, "POINT_SIZE" ); if ( prop ) @@ -1519,9 +1551,16 @@ THE SOFTWARE. FT_TRACE0(( "pcf_load_font: negative point size\n" )); #endif /* convert from 722.7 decipoints to 72 points per inch */ - bsize->size = FT_MulDiv( FT_ABS( prop->value.l ), - 64 * 7200, - 72270L ); + if ( FT_ABS( prop->value.l ) > 0x504C2L ) /* 0x7FFF * 72270/7200 */ + { + bsize->size = 0x7FFF; + FT_TRACE0(( "pcf_load_font: clamping point size to value %d\n", + bsize->size )); + } + else + bsize->size = FT_MulDiv( FT_ABS( prop->value.l ), + 64 * 7200, + 72270L ); } prop = pcf_find_property( face, "PIXEL_SIZE" ); @@ -1531,7 +1570,14 @@ THE SOFTWARE. if ( prop->value.l < 0 ) FT_TRACE0(( "pcf_load_font: negative pixel size\n" )); #endif - bsize->y_ppem = FT_ABS( (FT_Short)prop->value.l ) << 6; + if ( FT_ABS( prop->value.l ) > 0x7FFF ) + { + bsize->y_ppem = 0x7FFF << 6; + FT_TRACE0(( "pcf_load_font: clamping pixel size to value %d\n", + bsize->y_ppem )); + } + else + bsize->y_ppem = FT_ABS( (FT_Short)prop->value.l ) << 6; } prop = pcf_find_property( face, "RESOLUTION_X" ); @@ -1541,7 +1587,14 @@ THE SOFTWARE. if ( prop->value.l < 0 ) FT_TRACE0(( "pcf_load_font: negative X resolution\n" )); #endif - resolution_x = FT_ABS( (FT_Short)prop->value.l ); + if ( FT_ABS( prop->value.l ) > 0x7FFF ) + { + resolution_x = 0x7FFF; + FT_TRACE0(( "pcf_load_font: clamping X resolution to value %d\n", + resolution_x )); + } + else + resolution_x = FT_ABS( (FT_Short)prop->value.l ); } prop = pcf_find_property( face, "RESOLUTION_Y" ); @@ -1551,7 +1604,14 @@ THE SOFTWARE. if ( prop->value.l < 0 ) FT_TRACE0(( "pcf_load_font: negative Y resolution\n" )); #endif - resolution_y = FT_ABS( (FT_Short)prop->value.l ); + if ( FT_ABS( prop->value.l ) > 0x7FFF ) + { + resolution_y = 0x7FFF; + FT_TRACE0(( "pcf_load_font: clamping Y resolution to value %d\n", + resolution_y )); + } + else + resolution_y = FT_ABS( (FT_Short)prop->value.l ); } if ( bsize->y_ppem == 0 ) diff --git a/thirdparty/freetype/src/pfr/pfrobjs.c b/thirdparty/freetype/src/pfr/pfrobjs.c index 4b1703f51c..514af8050d 100644 --- a/thirdparty/freetype/src/pfr/pfrobjs.c +++ b/thirdparty/freetype/src/pfr/pfrobjs.c @@ -264,12 +264,6 @@ charmap.encoding = FT_ENCODING_UNICODE; error = FT_CMap_New( &pfr_cmap_class_rec, NULL, &charmap, NULL ); - -#if 0 - /* select default charmap */ - if ( pfrface->num_charmaps ) - pfrface->charmap = pfrface->charmaps[0]; -#endif } /* check whether we have loaded any kerning pairs */ diff --git a/thirdparty/freetype/src/psaux/psconv.c b/thirdparty/freetype/src/psaux/psconv.c index b092482194..d125b0834a 100644 --- a/thirdparty/freetype/src/psaux/psconv.c +++ b/thirdparty/freetype/src/psaux/psconv.c @@ -111,6 +111,10 @@ p++; if ( p == limit ) goto Bad; + + /* only a single sign is allowed */ + if ( *p == '-' || *p == '+' ) + return 0; } num_limit = 0x7FFFFFFFL / base; @@ -215,6 +219,10 @@ p++; if ( p == limit ) goto Bad; + + /* only a single sign is allowed */ + if ( *p == '-' || *p == '+' ) + return 0; } /* read the integer part */ diff --git a/thirdparty/freetype/src/psaux/t1decode.c b/thirdparty/freetype/src/psaux/t1decode.c index 7dd45135de..1250b53f5d 100644 --- a/thirdparty/freetype/src/psaux/t1decode.c +++ b/thirdparty/freetype/src/psaux/t1decode.c @@ -864,7 +864,9 @@ for ( mm = 1; mm < blend->num_designs; mm++ ) - tmp += FT_MulFix( *delta++, blend->weight_vector[mm] ); + tmp = ADD_LONG( tmp, + FT_MulFix( *delta++, + blend->weight_vector[mm] ) ); *values++ = tmp; } @@ -904,7 +906,7 @@ if ( arg_cnt != 2 ) goto Unexpected_OtherSubr; - top[0] += top[1]; /* XXX (over|under)flow */ + top[0] = ADD_LONG( top[0], top[1] ); known_othersubr_result_cnt = 1; break; @@ -915,7 +917,7 @@ if ( arg_cnt != 2 ) goto Unexpected_OtherSubr; - top[0] -= top[1]; /* XXX (over|under)flow */ + top[0] = SUB_LONG( top[0], top[1] ); known_othersubr_result_cnt = 1; break; @@ -1147,11 +1149,13 @@ builder->parse_state = T1_Parse_Have_Width; - builder->left_bearing.x += top[0]; - builder->advance.x = top[1]; - builder->advance.y = 0; + builder->left_bearing.x = ADD_LONG( builder->left_bearing.x, + top[0] ); - orig_x = x = builder->pos_x + top[0]; + builder->advance.x = top[1]; + builder->advance.y = 0; + + orig_x = x = ADD_LONG( builder->pos_x, top[0] ); orig_y = y = builder->pos_y; FT_UNUSED( orig_y ); @@ -1177,13 +1181,16 @@ builder->parse_state = T1_Parse_Have_Width; - builder->left_bearing.x += top[0]; - builder->left_bearing.y += top[1]; - builder->advance.x = top[2]; - builder->advance.y = top[3]; + builder->left_bearing.x = ADD_LONG( builder->left_bearing.x, + top[0] ); + builder->left_bearing.y = ADD_LONG( builder->left_bearing.y, + top[1] ); + + builder->advance.x = top[2]; + builder->advance.y = top[3]; - x = builder->pos_x + top[0]; - y = builder->pos_y + top[1]; + x = ADD_LONG( builder->pos_x, top[0] ); + y = ADD_LONG( builder->pos_y, top[1] ); /* the `metrics_only' indicates that we only want to compute */ /* the glyph's metrics (lsb + advance width), not load the */ @@ -1210,13 +1217,14 @@ if ( FT_SET_ERROR( t1_builder_start_point( builder, x, y ) ) ) goto Fail; - x += top[0]; + x = ADD_LONG( x, top[0] ); goto Add_Line; case op_hmoveto: FT_TRACE4(( " hmoveto" )); - x += top[0]; + x = ADD_LONG( x, top[0] ); + if ( !decoder->flex_state ) { if ( builder->parse_state == T1_Parse_Start ) @@ -1232,12 +1240,14 @@ FT_SET_ERROR( t1_builder_check_points( builder, 3 ) ) ) goto Fail; - x += top[0]; + x = ADD_LONG( x, top[0] ); t1_builder_add_point( builder, x, y, 0 ); - x += top[1]; - y += top[2]; + + x = ADD_LONG( x, top[1] ); + y = ADD_LONG( y, top[2] ); t1_builder_add_point( builder, x, y, 0 ); - y += top[3]; + + y = ADD_LONG( y, top[3] ); t1_builder_add_point( builder, x, y, 1 ); break; @@ -1247,8 +1257,8 @@ if ( FT_SET_ERROR( t1_builder_start_point( builder, x, y ) ) ) goto Fail; - x += top[0]; - y += top[1]; + x = ADD_LONG( x, top[0] ); + y = ADD_LONG( y, top[1] ); Add_Line: if ( FT_SET_ERROR( t1_builder_add_point1( builder, x, y ) ) ) @@ -1258,8 +1268,9 @@ case op_rmoveto: FT_TRACE4(( " rmoveto" )); - x += top[0]; - y += top[1]; + x = ADD_LONG( x, top[0] ); + y = ADD_LONG( y, top[1] ); + if ( !decoder->flex_state ) { if ( builder->parse_state == T1_Parse_Start ) @@ -1275,16 +1286,16 @@ FT_SET_ERROR( t1_builder_check_points( builder, 3 ) ) ) goto Fail; - x += top[0]; - y += top[1]; + x = ADD_LONG( x, top[0] ); + y = ADD_LONG( y, top[1] ); t1_builder_add_point( builder, x, y, 0 ); - x += top[2]; - y += top[3]; + x = ADD_LONG( x, top[2] ); + y = ADD_LONG( y, top[3] ); t1_builder_add_point( builder, x, y, 0 ); - x += top[4]; - y += top[5]; + x = ADD_LONG( x, top[4] ); + y = ADD_LONG( y, top[5] ); t1_builder_add_point( builder, x, y, 1 ); break; @@ -1295,12 +1306,14 @@ FT_SET_ERROR( t1_builder_check_points( builder, 3 ) ) ) goto Fail; - y += top[0]; + y = ADD_LONG( y, top[0] ); t1_builder_add_point( builder, x, y, 0 ); - x += top[1]; - y += top[2]; + + x = ADD_LONG( x, top[1] ); + y = ADD_LONG( y, top[2] ); t1_builder_add_point( builder, x, y, 0 ); - x += top[3]; + + x = ADD_LONG( x, top[3] ); t1_builder_add_point( builder, x, y, 1 ); break; @@ -1310,13 +1323,14 @@ if ( FT_SET_ERROR( t1_builder_start_point( builder, x, y ) ) ) goto Fail; - y += top[0]; + y = ADD_LONG( y, top[0] ); goto Add_Line; case op_vmoveto: FT_TRACE4(( " vmoveto" )); - y += top[0]; + y = ADD_LONG( y, top[0] ); + if ( !decoder->flex_state ) { if ( builder->parse_state == T1_Parse_Start ) @@ -1473,7 +1487,7 @@ /* record vertical hint */ if ( hinter ) { - top[0] += orig_x; + top[0] = ADD_LONG( top[0], orig_x ); hinter->stem( hinter->hints, 0, top ); } break; @@ -1487,9 +1501,9 @@ FT_Pos dx = orig_x; - top[0] += dx; - top[2] += dx; - top[4] += dx; + top[0] = ADD_LONG( top[0], dx ); + top[2] = ADD_LONG( top[2], dx ); + top[4] = ADD_LONG( top[4], dx ); hinter->stem3( hinter->hints, 0, top ); } break; diff --git a/thirdparty/freetype/src/psnames/psmodule.c b/thirdparty/freetype/src/psnames/psmodule.c index 3ff8cb911b..44ba9ec6ab 100644 --- a/thirdparty/freetype/src/psnames/psmodule.c +++ b/thirdparty/freetype/src/psnames/psmodule.c @@ -23,8 +23,21 @@ #include "psmodule.h" + /* + * The file `pstables.h' with its arrays and its function + * `ft_get_adobe_glyph_index' is useful for other projects also (for + * example, `pdfium' is using it). However, if used as a C++ header, + * including it in two different source files makes it necessary to use + * `extern const' for the declaration of its arrays, otherwise the data + * would be duplicated as mandated by the C++ standard. + * + * For this reason, we use `DEFINE_PS_TABLES' to guard the function + * definitions, and `DEFINE_PS_TABLES_DATA' to provide both proper array + * declarations and definitions. + */ #include "pstables.h" #define DEFINE_PS_TABLES +#define DEFINE_PS_TABLES_DATA #include "pstables.h" #include "psnamerr.h" diff --git a/thirdparty/freetype/src/psnames/pstables.h b/thirdparty/freetype/src/psnames/pstables.h index e0f5e30804..2a2b717d8f 100644 --- a/thirdparty/freetype/src/psnames/pstables.h +++ b/thirdparty/freetype/src/psnames/pstables.h @@ -19,7 +19,7 @@ /* This file has been generated automatically -- do not edit! */ -#ifndef DEFINE_PS_TABLES +#ifndef DEFINE_PS_TABLES_DATA #ifdef __cplusplus extern "C" #else @@ -27,7 +27,7 @@ #endif #endif const char ft_standard_glyph_names[3696] -#ifdef DEFINE_PS_TABLES +#ifdef DEFINE_PS_TABLES_DATA = { '.','n','u','l','l', 0, @@ -451,7 +451,7 @@ 'R','o','m','a','n', 0, 'S','e','m','i','b','o','l','d', 0, } -#endif /* DEFINE_PS_TABLES */ +#endif /* DEFINE_PS_TABLES_DATA */ ; @@ -459,7 +459,7 @@ /* Values are offsets into the `ft_standard_glyph_names' table */ -#ifndef DEFINE_PS_TABLES +#ifndef DEFINE_PS_TABLES_DATA #ifdef __cplusplus extern "C" #else @@ -467,7 +467,7 @@ #endif #endif const short ft_mac_names[FT_NUM_MAC_NAMES] -#ifdef DEFINE_PS_TABLES +#ifdef DEFINE_PS_TABLES_DATA = { 253, 0, 6, 261, 267, 274, 283, 294, 301, 309, 758, 330, 340, 351, @@ -490,7 +490,7 @@ 1270,1313,1323,1171,1290,1332,1211,1235,1276, 169, 175, 182, 189, 200, 209, 218, 225, 232, 239, 246 } -#endif /* DEFINE_PS_TABLES */ +#endif /* DEFINE_PS_TABLES_DATA */ ; @@ -498,7 +498,7 @@ /* Values are offsets into the `ft_standard_glyph_names' table */ -#ifndef DEFINE_PS_TABLES +#ifndef DEFINE_PS_TABLES_DATA #ifdef __cplusplus extern "C" #else @@ -506,7 +506,7 @@ #endif #endif const short ft_sid_names[FT_NUM_SID_NAMES] -#ifdef DEFINE_PS_TABLES +#ifdef DEFINE_PS_TABLES_DATA = { 253, 261, 267, 274, 283, 294, 301, 309, 319, 330, 340, 351, 360, 365, @@ -538,12 +538,12 @@ 3418,3430,3442,3454,3471,3483,3498,3506,3518,3530,3542,3559,3574,3586, 3597,3612,3620,3628,3636,3644,3650,3655,3660,3666,3673,3681,3687 } -#endif /* DEFINE_PS_TABLES */ +#endif /* DEFINE_PS_TABLES_DATA */ ; /* the following are indices into the SID name table */ -#ifndef DEFINE_PS_TABLES +#ifndef DEFINE_PS_TABLES_DATA #ifdef __cplusplus extern "C" #else @@ -551,7 +551,7 @@ #endif #endif const unsigned short t1_standard_encoding[256] -#ifdef DEFINE_PS_TABLES +#ifdef DEFINE_PS_TABLES_DATA = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -571,12 +571,12 @@ 0,138, 0,139, 0, 0, 0, 0,140,141,142,143, 0, 0, 0, 0, 0,144, 0, 0, 0,145, 0, 0,146,147,148,149, 0, 0, 0, 0 } -#endif /* DEFINE_PS_TABLES */ +#endif /* DEFINE_PS_TABLES_DATA */ ; /* the following are indices into the SID name table */ -#ifndef DEFINE_PS_TABLES +#ifndef DEFINE_PS_TABLES_DATA #ifdef __cplusplus extern "C" #else @@ -584,7 +584,7 @@ #endif #endif const unsigned short t1_expert_encoding[256] -#ifdef DEFINE_PS_TABLES +#ifdef DEFINE_PS_TABLES_DATA = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -604,7 +604,7 @@ 347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362, 363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378 } -#endif /* DEFINE_PS_TABLES */ +#endif /* DEFINE_PS_TABLES_DATA */ ; @@ -619,7 +619,7 @@ #ifdef FT_CONFIG_OPTION_ADOBE_GLYPH_LIST -#ifndef DEFINE_PS_TABLES +#ifndef DEFINE_PS_TABLES_DATA #ifdef __cplusplus extern "C" #else @@ -627,7 +627,7 @@ #endif #endif const unsigned char ft_adobe_glyph_list[55997L] -#ifdef DEFINE_PS_TABLES +#ifdef DEFINE_PS_TABLES_DATA = { 0, 52, 0,106, 2,167, 3, 63, 4,220, 6,125, 9,143, 10, 23, @@ -4131,7 +4131,7 @@ 182,117, 2,218,167,218,178,232,233,242,225,231,225,238, 97,128, 48, 90,235,225,244,225,235,225,238, 97,128, 48,186 } -#endif /* DEFINE_PS_TABLES */ +#endif /* DEFINE_PS_TABLES_DATA */ ; diff --git a/thirdparty/freetype/src/raster/ftrend1.c b/thirdparty/freetype/src/raster/ftrend1.c index 1a83e9e477..185a7f6fc2 100644 --- a/thirdparty/freetype/src/raster/ftrend1.c +++ b/thirdparty/freetype/src/raster/ftrend1.c @@ -31,12 +31,7 @@ static FT_Error ft_raster1_init( FT_Renderer render ) { - FT_Library library = FT_MODULE_LIBRARY( render ); - - - render->clazz->raster_class->raster_reset( render->raster, - library->raster_pool, - library->raster_pool_size ); + render->clazz->raster_class->raster_reset( render->raster, NULL, 0 ); return FT_Err_Ok; } @@ -194,7 +189,7 @@ bitmap->rows = height; bitmap->pitch = (int)pitch; - if ( FT_ALLOC_MULT( bitmap->buffer, pitch, height ) ) + if ( FT_ALLOC_MULT( bitmap->buffer, height, pitch ) ) goto Exit; slot->internal->flags |= FT_GLYPH_OWN_BITMAP; diff --git a/thirdparty/freetype/src/sfnt/pngshim.c b/thirdparty/freetype/src/sfnt/pngshim.c index b9b296ea5f..560db4835a 100644 --- a/thirdparty/freetype/src/sfnt/pngshim.c +++ b/thirdparty/freetype/src/sfnt/pngshim.c @@ -49,18 +49,82 @@ } - /* Premultiplies data and converts RGBA bytes => native endian. */ + /* Premultiplies data and converts RGBA bytes => BGRA. */ static void premultiply_data( png_structp png, png_row_infop row_info, png_bytep data ) { - unsigned int i; + unsigned int i = 0, limit; + + /* The `vector_size' attribute was introduced in gcc 3.1, which */ + /* predates clang; the `__BYTE_ORDER__' preprocessor symbol was */ + /* introduced in gcc 4.6 and clang 3.2, respectively. */ + /* `__builtin_shuffle' for gcc was introduced in gcc 4.7.0. */ +#if ( ( defined( __GNUC__ ) && \ + ( ( __GNUC__ >= 5 ) || \ + ( ( __GNUC__ == 4 ) && ( __GNUC_MINOR__ >= 7 ) ) ) ) || \ + ( defined( __clang__ ) && \ + ( ( __clang_major__ >= 4 ) || \ + ( ( __clang_major__ == 3 ) && ( __clang_minor__ >= 2 ) ) ) ) ) && \ + defined( __OPTIMIZE__ ) && \ + __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ + +#ifdef __clang__ + /* the clang documentation doesn't cover the two-argument case of */ + /* `__builtin_shufflevector'; however, it is is implemented since */ + /* version 2.8 */ +#define vector_shuffle __builtin_shufflevector +#else +#define vector_shuffle __builtin_shuffle +#endif - FT_UNUSED( png ); + typedef unsigned short v82 __attribute__(( vector_size( 16 ) )); - for ( i = 0; i < row_info->rowbytes; i += 4 ) + /* process blocks of 16 bytes in one rush, which gives a nice speed-up */ + limit = row_info->rowbytes - 16 + 1; + for ( ; i < limit; i += 16 ) + { + unsigned char* base = &data[i]; + + v82 s, s0, s1, a; + + /* clang <= 3.9 can't apply scalar values to vectors */ + /* (or rather, it needs a different syntax) */ + v82 n0x80 = { 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80 }; + v82 n0xFF = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; + v82 n8 = { 8, 8, 8, 8, 8, 8, 8, 8 }; + + v82 ma = { 1, 1, 3, 3, 5, 5, 7, 7 }; + v82 o1 = { 0, 0xFF, 0, 0xFF, 0, 0xFF, 0, 0xFF }; + v82 m0 = { 1, 0, 3, 2, 5, 4, 7, 6 }; + + + memcpy( &s, base, 16 ); /* RGBA RGBA RGBA RGBA */ + s0 = s & n0xFF; /* R B R B R B R B */ + s1 = s >> n8; /* G A G A G A G A */ + + a = vector_shuffle( s1, ma ); /* A A A A A A A A */ + s1 |= o1; /* G 1 G 1 G 1 G 1 */ + s0 = vector_shuffle( s0, m0 ); /* B R B R B R B R */ + + s0 *= a; + s1 *= a; + s0 += n0x80; + s1 += n0x80; + s0 = ( s0 + ( s0 >> n8 ) ) >> n8; + s1 = ( s1 + ( s1 >> n8 ) ) >> n8; + + s = s0 | ( s1 << n8 ); + memcpy( base, &s, 16 ); + } +#endif /* use `vector_size' */ + + FT_UNUSED( png ); + + limit = row_info->rowbytes; + for ( ; i < limit; i += 4 ) { unsigned char* base = &data[i]; unsigned int alpha = base[3]; diff --git a/thirdparty/freetype/src/sfnt/sfobjs.c b/thirdparty/freetype/src/sfnt/sfobjs.c index ac2e620e5d..69bf0a5c3d 100644 --- a/thirdparty/freetype/src/sfnt/sfobjs.c +++ b/thirdparty/freetype/src/sfnt/sfobjs.c @@ -787,6 +787,8 @@ tag != TTAG_OTTO && tag != TTAG_true && tag != TTAG_typ1 && + tag != TTAG_0xA5kbd && + tag != TTAG_0xA5lst && tag != 0x00020000UL ) { FT_TRACE2(( " not a font using the SFNT container format\n" )); @@ -1224,7 +1226,10 @@ goto Exit; } - if ( face->header.Units_Per_EM == 0 ) + /* OpenType 1.8.2 introduced limits to this value; */ + /* however, they make sense for older SFNT fonts also */ + if ( face->header.Units_Per_EM < 16 || + face->header.Units_Per_EM > 16384 ) { error = FT_THROW( Invalid_Table ); @@ -1464,7 +1469,8 @@ /* Polish the charmaps. */ /* */ /* Try to set the charmap encoding according to the platform & */ - /* encoding ID of each charmap. */ + /* encoding ID of each charmap. Emulate Unicode charmap if one */ + /* is missing. */ /* */ tt_face_build_cmaps( face ); /* ignore errors */ @@ -1472,7 +1478,10 @@ /* set the encoding fields */ { - FT_Int m; + FT_Int m; +#ifdef FT_CONFIG_OPTION_POSTSCRIPT_NAMES + FT_Bool has_unicode = FALSE; +#endif for ( m = 0; m < root->num_charmaps; m++ ) @@ -1483,14 +1492,34 @@ charmap->encoding = sfnt_find_encoding( charmap->platform_id, charmap->encoding_id ); -#if 0 - if ( !root->charmap && - charmap->encoding == FT_ENCODING_UNICODE ) - { - /* set 'root->charmap' to the first Unicode encoding we find */ - root->charmap = charmap; - } -#endif +#ifdef FT_CONFIG_OPTION_POSTSCRIPT_NAMES + + if ( charmap->encoding == FT_ENCODING_UNICODE || + charmap->encoding == FT_ENCODING_MS_SYMBOL ) /* PUA */ + has_unicode = TRUE; + } + + /* synthesize Unicode charmap if one is missing */ + if ( !has_unicode ) + { + FT_CharMapRec cmaprec; + + + cmaprec.face = root; + cmaprec.platform_id = TT_PLATFORM_MICROSOFT; + cmaprec.encoding_id = TT_MS_ID_UNICODE_CS; + cmaprec.encoding = FT_ENCODING_UNICODE; + + + error = FT_CMap_New( (FT_CMap_Class)&tt_cmap_unicode_class_rec, + NULL, &cmaprec, NULL ); + if ( error && + FT_ERR_NEQ( error, No_Unicode_Glyph_Name ) ) + goto Exit; + error = FT_Err_Ok; + +#endif /* FT_CONFIG_OPTION_POSTSCRIPT_NAMES */ + } } diff --git a/thirdparty/freetype/src/sfnt/ttcmap.c b/thirdparty/freetype/src/sfnt/ttcmap.c index 5afa6ae4b7..b995e5c050 100644 --- a/thirdparty/freetype/src/sfnt/ttcmap.c +++ b/thirdparty/freetype/src/sfnt/ttcmap.c @@ -23,8 +23,10 @@ #include FT_INTERNAL_VALIDATE_H #include FT_INTERNAL_STREAM_H +#include FT_SERVICE_POSTSCRIPT_CMAPS_H #include "ttload.h" #include "ttcmap.h" +#include "ttpost.h" #include "sfntpic.h" @@ -3622,6 +3624,110 @@ #endif /* TT_CONFIG_CMAP_FORMAT_14 */ + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** SYNTHETIC UNICODE *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + /* This charmap is generated using postscript glyph names. */ + +#ifdef FT_CONFIG_OPTION_POSTSCRIPT_NAMES + + FT_CALLBACK_DEF( const char * ) + tt_get_glyph_name( TT_Face face, + FT_UInt idx ) + { + FT_String* PSname; + + + tt_face_get_ps_name( face, idx, &PSname ); + + return PSname; + } + + + FT_CALLBACK_DEF( FT_Error ) + tt_cmap_unicode_init( PS_Unicodes unicodes, + FT_Pointer pointer ) + { + TT_Face face = (TT_Face)FT_CMAP_FACE( unicodes ); + FT_Memory memory = FT_FACE_MEMORY( face ); + FT_Service_PsCMaps psnames = (FT_Service_PsCMaps)face->psnames; + + FT_UNUSED( pointer ); + + + return psnames->unicodes_init( memory, + unicodes, + face->root.num_glyphs, + (PS_GetGlyphNameFunc)&tt_get_glyph_name, + (PS_FreeGlyphNameFunc)NULL, + (FT_Pointer)face ); + } + + + FT_CALLBACK_DEF( void ) + tt_cmap_unicode_done( PS_Unicodes unicodes ) + { + FT_Face face = FT_CMAP_FACE( unicodes ); + FT_Memory memory = FT_FACE_MEMORY( face ); + + + FT_FREE( unicodes->maps ); + unicodes->num_maps = 0; + } + + + FT_CALLBACK_DEF( FT_UInt ) + tt_cmap_unicode_char_index( PS_Unicodes unicodes, + FT_UInt32 char_code ) + { + TT_Face face = (TT_Face)FT_CMAP_FACE( unicodes ); + FT_Service_PsCMaps psnames = (FT_Service_PsCMaps)face->psnames; + + + return psnames->unicodes_char_index( unicodes, char_code ); + } + + + FT_CALLBACK_DEF( FT_UInt32 ) + tt_cmap_unicode_char_next( PS_Unicodes unicodes, + FT_UInt32 *pchar_code ) + { + TT_Face face = (TT_Face)FT_CMAP_FACE( unicodes ); + FT_Service_PsCMaps psnames = (FT_Service_PsCMaps)face->psnames; + + + return psnames->unicodes_char_next( unicodes, pchar_code ); + } + + + FT_DEFINE_TT_CMAP( + tt_cmap_unicode_class_rec, + + sizeof ( PS_UnicodesRec ), + + (FT_CMap_InitFunc) tt_cmap_unicode_init, /* init */ + (FT_CMap_DoneFunc) tt_cmap_unicode_done, /* done */ + (FT_CMap_CharIndexFunc)tt_cmap_unicode_char_index, /* char_index */ + (FT_CMap_CharNextFunc) tt_cmap_unicode_char_next, /* char_next */ + + (FT_CMap_CharVarIndexFunc) NULL, /* char_var_index */ + (FT_CMap_CharVarIsDefaultFunc)NULL, /* char_var_default */ + (FT_CMap_VariantListFunc) NULL, /* variant_list */ + (FT_CMap_CharVariantListFunc) NULL, /* charvariant_list */ + (FT_CMap_VariantCharListFunc) NULL, /* variantchar_list */ + + ~0U, + (TT_CMap_ValidateFunc)NULL, /* validate */ + (TT_CMap_Info_GetFunc)NULL /* get_cmap_info */ + ) + +#endif /* FT_CONFIG_OPTION_POSTSCRIPT_NAMES */ + #ifndef FT_CONFIG_OPTION_PIC static const TT_CMap_Class tt_cmap_classes[] = @@ -3801,8 +3907,10 @@ FT_CMap cmap = (FT_CMap)charmap; TT_CMap_Class clazz = (TT_CMap_Class)cmap->clazz; - - return clazz->get_cmap_info( charmap, cmap_info ); + if ( clazz->get_cmap_info ) + return clazz->get_cmap_info( charmap, cmap_info ); + else + return FT_THROW( Invalid_CharMap_Format ); } diff --git a/thirdparty/freetype/src/sfnt/ttcmap.h b/thirdparty/freetype/src/sfnt/ttcmap.h index 83f12df241..f7de0437b0 100644 --- a/thirdparty/freetype/src/sfnt/ttcmap.h +++ b/thirdparty/freetype/src/sfnt/ttcmap.h @@ -141,6 +141,8 @@ FT_BEGIN_HEADER #define TT_VALID_GLYPH_COUNT( x ) TT_VALIDATOR( x )->num_glyphs + FT_CALLBACK_TABLE const TT_CMap_ClassRec tt_cmap_unicode_class_rec; + FT_LOCAL( FT_Error ) tt_face_build_cmaps( TT_Face face ); diff --git a/thirdparty/freetype/src/sfnt/ttkern.c b/thirdparty/freetype/src/sfnt/ttkern.c index c97e5789ac..53d2436ae5 100644 --- a/thirdparty/freetype/src/sfnt/ttkern.c +++ b/thirdparty/freetype/src/sfnt/ttkern.c @@ -85,7 +85,7 @@ for ( nn = 0; nn < num_tables; nn++ ) { - FT_UInt num_pairs, length, coverage; + FT_UInt num_pairs, length, coverage, format; FT_Byte* p_next; FT_UInt32 mask = (FT_UInt32)1UL << nn; @@ -107,6 +107,12 @@ if ( p_next > p_limit ) /* handle broken table */ p_next = p_limit; + format = coverage >> 8; + + /* we currently only support format 0 kerning tables */ + if ( format != 0 ) + goto NextTable; + /* only use horizontal kerning tables */ if ( ( coverage & 3U ) != 0x0001 || p + 8 > p_next ) diff --git a/thirdparty/freetype/src/sfnt/ttpost.c b/thirdparty/freetype/src/sfnt/ttpost.c index 540d5f2546..69929c8d45 100644 --- a/thirdparty/freetype/src/sfnt/ttpost.c +++ b/thirdparty/freetype/src/sfnt/ttpost.c @@ -325,7 +325,6 @@ FT_UNUSED( post_limit ); - /* UNDOCUMENTED! This value appears only in the Apple TT specs. */ if ( FT_READ_USHORT( num_glyphs ) ) goto Exit; @@ -408,7 +407,7 @@ /* now read postscript table */ if ( format == 0x00020000L ) error = load_format_20( face, stream, post_limit ); - else if ( format == 0x00028000L ) + else if ( format == 0x00025000L ) error = load_format_25( face, stream, post_limit ); else error = FT_THROW( Invalid_File_Format ); @@ -447,7 +446,7 @@ FT_FREE( table->glyph_names ); table->num_names = 0; } - else if ( format == 0x00028000L ) + else if ( format == 0x00025000L ) { TT_Post_25 table = &names->names.format_25; @@ -543,7 +542,7 @@ *PSname = (FT_String*)table->glyph_names[name_index - 258]; } } - else if ( format == 0x00028000L ) + else if ( format == 0x00025000L ) { TT_Post_25 table = &names->names.format_25; diff --git a/thirdparty/freetype/src/sfnt/ttsbit.c b/thirdparty/freetype/src/sfnt/ttsbit.c index 0c76a55779..f41847b0af 100644 --- a/thirdparty/freetype/src/sfnt/ttsbit.c +++ b/thirdparty/freetype/src/sfnt/ttsbit.c @@ -448,6 +448,15 @@ metrics->max_advance = FT_MulDiv( hori->advance_Width_Max, ppem_ * 64, upem ); + /* set the scale values (in 16.16 units) so advances */ + /* from the hmtx and vmtx table are scaled correctly */ + metrics->x_scale = FT_MulDiv( metrics->x_ppem, + 64 * 0x10000, + face->header.Units_Per_EM ); + metrics->y_scale = FT_MulDiv( metrics->y_ppem, + 64 * 0x10000, + face->header.Units_Per_EM ); + return error; } @@ -1439,10 +1448,17 @@ return FT_THROW( Invalid_Table ); NoBitmap: + if ( recurse_count ) + { + FT_TRACE4(( "tt_sbit_decoder_load_image:" + " missing subglyph sbit with glyph index %d\n", + glyph_index )); + return FT_THROW( Invalid_Composite ); + } + FT_TRACE4(( "tt_sbit_decoder_load_image:" " no sbit found for glyph index %d\n", glyph_index )); - - return FT_THROW( Invalid_Argument ); + return FT_THROW( Missing_Bitmap ); } diff --git a/thirdparty/freetype/src/smooth/ftgrays.c b/thirdparty/freetype/src/smooth/ftgrays.c index e9a3ce7a7c..df645e66c9 100644 --- a/thirdparty/freetype/src/smooth/ftgrays.c +++ b/thirdparty/freetype/src/smooth/ftgrays.c @@ -141,6 +141,16 @@ #define FT_INT_MAX INT_MAX #define FT_ULONG_MAX ULONG_MAX +#define ADD_LONG( a, b ) \ + (long)( (unsigned long)(a) + (unsigned long)(b) ) +#define SUB_LONG( a, b ) \ + (long)( (unsigned long)(a) - (unsigned long)(b) ) +#define MUL_LONG( a, b ) \ + (long)( (unsigned long)(a) * (unsigned long)(b) ) +#define NEG_LONG( a ) \ + (long)( -(unsigned long)(a) ) + + #define ft_memset memset #define ft_setjmp setjmp @@ -264,6 +274,7 @@ typedef ptrdiff_t FT_PtrDist; #include "ftgrays.h" #include FT_INTERNAL_OBJECTS_H #include FT_INTERNAL_DEBUG_H +#include FT_INTERNAL_CALC_H #include FT_OUTLINE_H #include "ftsmerrs.h" @@ -1135,7 +1146,7 @@ typedef ptrdiff_t FT_PtrDist; /* s is L * the perpendicular distance from P1 to the line P0-P3. */ dx1 = arc[1].x - arc[0].x; dy1 = arc[1].y - arc[0].y; - s = FT_ABS( dy * dx1 - dx * dy1 ); + s = FT_ABS( SUB_LONG( MUL_LONG( dy, dx1 ), MUL_LONG( dx, dy1 ) ) ); if ( s > s_limit ) goto Split; @@ -1143,7 +1154,7 @@ typedef ptrdiff_t FT_PtrDist; /* s is L * the perpendicular distance from P2 to the line P0-P3. */ dx2 = arc[2].x - arc[0].x; dy2 = arc[2].y - arc[0].y; - s = FT_ABS( dy * dx2 - dx * dy2 ); + s = FT_ABS( SUB_LONG( MUL_LONG( dy, dx2 ), MUL_LONG( dx, dy2 ) ) ); if ( s > s_limit ) goto Split; diff --git a/thirdparty/freetype/src/smooth/ftsmooth.c b/thirdparty/freetype/src/smooth/ftsmooth.c index 435854e673..963435de15 100644 --- a/thirdparty/freetype/src/smooth/ftsmooth.c +++ b/thirdparty/freetype/src/smooth/ftsmooth.c @@ -31,12 +31,7 @@ static FT_Error ft_smooth_init( FT_Renderer render ) { - FT_Library library = FT_MODULE_LIBRARY( render ); - - - render->clazz->raster_class->raster_reset( render->raster, - library->raster_pool, - library->raster_pool_size ); + render->clazz->raster_class->raster_reset( render->raster, NULL, 0 ); return 0; } @@ -111,9 +106,6 @@ FT_Pos y_shift = 0; FT_Pos x_left, y_top; FT_Pos width, height, pitch; -#ifndef FT_CONFIG_OPTION_SUBPIXEL_RENDERING - FT_Pos height_org, width_org; -#endif FT_Int hmul = ( mode == FT_RENDER_MODE_LCD ); FT_Int vmul = ( mode == FT_RENDER_MODE_LCD_V ); @@ -124,7 +116,6 @@ #ifdef FT_CONFIG_OPTION_SUBPIXEL_RENDERING - FT_Int lcd_extra = 0; FT_LcdFiveTapFilter lcd_weights = { 0 }; FT_Bool have_custom_weight = FALSE; FT_Bitmap_LcdFilterFunc lcd_filter_func = NULL; @@ -152,13 +143,12 @@ { /* * A per-font filter is set. It always uses the default 5-tap - * in-place FIR filter that needs 2 extra pixels. + * in-place FIR filter. */ ft_memcpy( lcd_weights, slot->face->internal->lcd_weights, FT_LCD_FILTER_FIVE_TAPS ); lcd_filter_func = ft_lcd_filter_fir; - lcd_extra = 2; } else { @@ -172,7 +162,6 @@ slot->library->lcd_weights, FT_LCD_FILTER_FIVE_TAPS ); lcd_filter_func = slot->library->lcd_filter_func; - lcd_extra = slot->library->lcd_extra; } #endif /*FT_CONFIG_OPTION_SUBPIXEL_RENDERING */ @@ -201,6 +190,45 @@ /* taking into account the origin shift */ FT_Outline_Get_CBox( outline, &cbox ); +#ifndef FT_CONFIG_OPTION_SUBPIXEL_RENDERING + + /* add minimal padding for LCD rendering */ + if ( hmul ) + { + cbox.xMax += 21; + cbox.xMin -= 21; + } + + if ( vmul ) + { + cbox.yMax += 21; + cbox.yMin -= 21; + } + +#else /* FT_CONFIG_OPTION_SUBPIXEL_RENDERING */ + + /* add minimal padding for LCD filter depending on specific weights */ + if ( lcd_filter_func ) + { + if ( hmul ) + { + cbox.xMax += lcd_weights[4] ? 43 + : lcd_weights[3] ? 22 : 0; + cbox.xMin -= lcd_weights[0] ? 43 + : lcd_weights[1] ? 22 : 0; + } + + if ( vmul ) + { + cbox.yMax += lcd_weights[4] ? 43 + : lcd_weights[3] ? 22 : 0; + cbox.yMin -= lcd_weights[0] ? 43 + : lcd_weights[1] ? 22 : 0; + } + } + +#endif /* FT_CONFIG_OPTION_SUBPIXEL_RENDERING */ + cbox.xMin = FT_PIX_FLOOR( cbox.xMin + x_shift ); cbox.yMin = FT_PIX_FLOOR( cbox.yMin + y_shift ); cbox.xMax = FT_PIX_CEIL( cbox.xMax + x_shift ); @@ -215,11 +243,6 @@ width = (FT_ULong)( cbox.xMax - cbox.xMin ) >> 6; height = (FT_ULong)( cbox.yMax - cbox.yMin ) >> 6; -#ifndef FT_CONFIG_OPTION_SUBPIXEL_RENDERING - width_org = width; - height_org = height; -#endif - pitch = width; if ( hmul ) { @@ -230,26 +253,6 @@ if ( vmul ) height *= 3; -#ifdef FT_CONFIG_OPTION_SUBPIXEL_RENDERING - if ( lcd_filter_func ) - { - if ( hmul ) - { - x_shift += 64 * ( lcd_extra >> 1 ); - x_left -= lcd_extra >> 1; - width += 3 * lcd_extra; - pitch = FT_PAD_CEIL( width, 4 ); - } - - if ( vmul ) - { - y_shift += 64 * ( lcd_extra >> 1 ); - y_top += lcd_extra >> 1; - height += 3 * lcd_extra; - } - } -#endif - /* * XXX: on 16bit system, we return an error for huge bitmap * to prevent an overflow. @@ -353,57 +356,98 @@ #else /* !FT_CONFIG_OPTION_SUBPIXEL_RENDERING */ - /* render outline into bitmap */ - error = render->raster_render( render->raster, ¶ms ); - if ( error ) - goto Exit; - - /* expand it horizontally */ - if ( hmul ) + if ( hmul ) /* lcd */ { - FT_Byte* line = bitmap->buffer; - FT_UInt hh; + FT_Byte* line; + FT_Byte* temp; + FT_Int i, j; - for ( hh = height_org; hh > 0; hh--, line += pitch ) - { - FT_UInt xx; - FT_Byte* end = line + width; + /* Render 3 separate monochrome bitmaps, shifting the outline */ + /* by 1/3 pixel. */ + width /= 3; + FT_Outline_Translate( outline, 21, 0 ); - for ( xx = width_org; xx > 0; xx-- ) - { - FT_UInt pixel = line[xx-1]; + error = render->raster_render( render->raster, ¶ms ); + if ( error ) + goto Exit; + + FT_Outline_Translate( outline, -21, 0 ); + bitmap->buffer += width; + + error = render->raster_render( render->raster, ¶ms ); + if ( error ) + goto Exit; + + FT_Outline_Translate( outline, -21, 0 ); + bitmap->buffer += width; + error = render->raster_render( render->raster, ¶ms ); + if ( error ) + goto Exit; - end[-3] = (FT_Byte)pixel; - end[-2] = (FT_Byte)pixel; - end[-1] = (FT_Byte)pixel; - end -= 3; + FT_Outline_Translate( outline, 21, 0 ); + bitmap->buffer -= 2 * width; + + /* XXX: Rearrange the bytes according to FT_PIXEL_MODE_LCD. */ + /* XXX: It is more efficient to render every third byte above. */ + + if ( FT_ALLOC( temp, (FT_ULong)pitch ) ) + goto Exit; + + for ( i = 0; i < height; i++ ) + { + line = bitmap->buffer + i * pitch; + for ( j = 0; j < width; j++ ) + { + temp[3 * j ] = line[j]; + temp[3 * j + 1] = line[j + width]; + temp[3 * j + 2] = line[j + width + width]; } + FT_MEM_COPY( line, temp, pitch ); } - } - /* expand it vertically */ - if ( vmul ) + FT_FREE( temp ); + } + else if ( vmul ) /* lcd_v */ { - FT_Byte* read = bitmap->buffer + ( height - height_org ) * pitch; - FT_Byte* write = bitmap->buffer; - FT_UInt hh; + /* Render 3 separate monochrome bitmaps, shifting the outline */ + /* by 1/3 pixel. Triple the pitch to render on each third row. */ + bitmap->pitch *= 3; + bitmap->rows /= 3; + FT_Outline_Translate( outline, 0, 21 ); + bitmap->buffer += 2 * pitch; - for ( hh = height_org; hh > 0; hh-- ) - { - ft_memcpy( write, read, pitch ); - write += pitch; + error = render->raster_render( render->raster, ¶ms ); + if ( error ) + goto Exit; - ft_memcpy( write, read, pitch ); - write += pitch; + FT_Outline_Translate( outline, 0, -21 ); + bitmap->buffer -= pitch; - ft_memcpy( write, read, pitch ); - write += pitch; - read += pitch; - } + error = render->raster_render( render->raster, ¶ms ); + if ( error ) + goto Exit; + + FT_Outline_Translate( outline, 0, -21 ); + bitmap->buffer -= pitch; + + error = render->raster_render( render->raster, ¶ms ); + if ( error ) + goto Exit; + + FT_Outline_Translate( outline, 0, 21 ); + + bitmap->pitch /= 3; + bitmap->rows *= 3; + } + else /* grayscale */ + { + error = render->raster_render( render->raster, ¶ms ); + if ( error ) + goto Exit; } #endif /* !FT_CONFIG_OPTION_SUBPIXEL_RENDERING */ diff --git a/thirdparty/freetype/src/truetype/ttgload.c b/thirdparty/freetype/src/truetype/ttgload.c index b7a844a6c7..5e102c6151 100644 --- a/thirdparty/freetype/src/truetype/ttgload.c +++ b/thirdparty/freetype/src/truetype/ttgload.c @@ -87,7 +87,7 @@ /*************************************************************************/ /* */ /* Return the vertical metrics in font units for a given glyph. */ - /* See macro `TT_LOADER_SET_PP' below for explanations. */ + /* See function `tt_loader_set_pp' below for explanations. */ /* */ FT_LOCAL_DEF( void ) TT_Get_VMetrics( TT_Face face, @@ -825,7 +825,7 @@ /* compatibility mode, where no movement on the x axis means no reason */ /* to change bearings or advance widths. */ if ( !( driver->interpreter_version == TT_INTERPRETER_VERSION_40 && - !loader->exec->backward_compatibility ) ) + loader->exec->backward_compatibility ) ) { #endif loader->pp1 = zone->cur[zone->n_points - 4]; @@ -1686,7 +1686,7 @@ /***********************************************************************/ /* otherwise, load a composite! */ - else if ( loader->n_contours == -1 ) + else if ( loader->n_contours < 0 ) { FT_Memory memory = face->root.memory; @@ -1697,6 +1697,9 @@ FT_ListNode node, node2; + /* normalize the `n_contours' value */ + loader->n_contours = -1; + /* * We store the glyph index directly in the `node->data' pointer, * following the glib solution (cf. macro `GUINT_TO_POINTER') with a @@ -1991,12 +1994,6 @@ } } } - else - { - /* invalid composite count (negative but not -1) */ - error = FT_THROW( Invalid_Outline ); - goto Exit; - } /***********************************************************************/ /***********************************************************************/ @@ -2100,8 +2097,8 @@ } /* set glyph dimensions */ - glyph->metrics.width = bbox.xMax - bbox.xMin; - glyph->metrics.height = bbox.yMax - bbox.yMin; + glyph->metrics.width = SUB_LONG( bbox.xMax, bbox.xMin ); + glyph->metrics.height = SUB_LONG( bbox.yMax, bbox.yMin ); /* Now take care of vertical metrics. In the case where there is */ /* no vertical information within the font (relatively common), */ @@ -2137,7 +2134,8 @@ /* table in the font. Otherwise, we use the */ /* values defined in the horizontal header. */ - height = (FT_Short)FT_DivFix( bbox.yMax - bbox.yMin, + height = (FT_Short)FT_DivFix( SUB_LONG( bbox.yMax, + bbox.yMin ), y_scale ); if ( face->os2.version != 0xFFFFU ) advance = (FT_Pos)( face->os2.sTypoAscender - @@ -2339,13 +2337,19 @@ #ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL if ( driver->interpreter_version == TT_INTERPRETER_VERSION_40 ) { - subpixel_hinting_lean = TRUE; - grayscale_cleartype = !FT_BOOL( load_flags & - FT_LOAD_TARGET_LCD || - load_flags & - FT_LOAD_TARGET_LCD_V ); - exec->vertical_lcd_lean = FT_BOOL( load_flags & - FT_LOAD_TARGET_LCD_V ); + subpixel_hinting_lean = + FT_BOOL( FT_LOAD_TARGET_MODE( load_flags ) != + FT_RENDER_MODE_MONO ); + grayscale_cleartype = + FT_BOOL( subpixel_hinting_lean && + !( ( load_flags & + FT_LOAD_TARGET_LCD ) || + ( load_flags & + FT_LOAD_TARGET_LCD_V ) ) ); + exec->vertical_lcd_lean = + FT_BOOL( subpixel_hinting_lean && + ( load_flags & + FT_LOAD_TARGET_LCD_V ) ); } else { @@ -2621,7 +2625,64 @@ IS_DEFAULT_INSTANCE ) { error = load_sbit_image( size, glyph, glyph_index, load_flags ); - if ( !error ) + if ( FT_ERR_EQ( error, Missing_Bitmap ) ) + { + /* the bitmap strike is incomplete and misses the requested glyph; */ + /* if we have a bitmap-only font, return an empty glyph */ + if ( !FT_IS_SCALABLE( glyph->face ) ) + { + TT_Face face = (TT_Face)glyph->face; + FT_Short left_bearing = 0, top_bearing = 0; + FT_UShort advance_width = 0, advance_height = 0; + + + /* to return an empty glyph, however, we need metrics data */ + /* from the `hmtx' (or `vmtx') table; the assumption is that */ + /* empty glyphs are missing intentionally, representing */ + /* whitespace - not having at least horizontal metrics is */ + /* thus considered an error */ + if ( !face->horz_metrics_size ) + return error; + + /* we now construct an empty bitmap glyph */ + TT_Get_HMetrics( face, glyph_index, + &left_bearing, + &advance_width ); + TT_Get_VMetrics( face, glyph_index, + 0, + &top_bearing, + &advance_height ); + + glyph->outline.n_points = 0; + glyph->outline.n_contours = 0; + + glyph->metrics.width = 0; + glyph->metrics.height = 0; + + glyph->metrics.horiBearingX = left_bearing; + glyph->metrics.horiBearingY = 0; + glyph->metrics.horiAdvance = advance_width; + + glyph->metrics.vertBearingX = 0; + glyph->metrics.vertBearingY = top_bearing; + glyph->metrics.vertAdvance = advance_height; + + glyph->format = FT_GLYPH_FORMAT_BITMAP; + glyph->bitmap.pixel_mode = FT_PIXEL_MODE_MONO; + + glyph->bitmap_left = 0; + glyph->bitmap_top = 0; + + return FT_Err_Ok; + } + } + else if ( error ) + { + /* return error if font is not scalable */ + if ( !FT_IS_SCALABLE( glyph->face ) ) + return error; + } + else { if ( FT_IS_SCALABLE( glyph->face ) ) { diff --git a/thirdparty/freetype/src/truetype/ttgxvar.c b/thirdparty/freetype/src/truetype/ttgxvar.c index 0cedb6bdfa..49aa53a687 100644 --- a/thirdparty/freetype/src/truetype/ttgxvar.c +++ b/thirdparty/freetype/src/truetype/ttgxvar.c @@ -60,8 +60,11 @@ #define FT_Stream_FTell( stream ) \ (FT_ULong)( (stream)->cursor - (stream)->base ) -#define FT_Stream_SeekSet( stream, off ) \ - ( (stream)->cursor = (stream)->base + (off) ) +#define FT_Stream_SeekSet( stream, off ) \ + (stream)->cursor = \ + ( (off) < (FT_ULong)( (stream)->limit - (stream)->base ) ) \ + ? (stream)->base + (off) \ + : (stream)->limit /*************************************************************************/ @@ -392,14 +395,14 @@ /* some macros we need */ - #define FT_FIXED_ONE ( (FT_Fixed)0x10000 ) +#define FT_FIXED_ONE ( (FT_Fixed)0x10000 ) - #define FT_fdot14ToFixed( x ) \ - ( (FT_Fixed)( (FT_ULong)(x) << 2 ) ) - #define FT_intToFixed( i ) \ - ( (FT_Fixed)( (FT_ULong)(i) << 16 ) ) - #define FT_fixedToInt( x ) \ - ( (FT_Short)( ( (FT_UInt32)(x) + 0x8000U ) >> 16 ) ) +#define FT_fdot14ToFixed( x ) \ + ( (FT_Fixed)( (FT_ULong)(x) << 2 ) ) +#define FT_intToFixed( i ) \ + ( (FT_Fixed)( (FT_ULong)(i) << 16 ) ) +#define FT_fixedToInt( x ) \ + ( (FT_Short)( ( (FT_UInt32)(x) + 0x8000U ) >> 16 ) ) static FT_Error @@ -1953,6 +1956,7 @@ GX_FVar_Head fvar_head; FT_Bool usePsName; FT_UInt num_instances; + FT_UShort* axis_flags; static const FT_Frame_Field fvar_fields[] = { @@ -2038,14 +2042,16 @@ /* in fvar's table of named instances */ num_instances = face->root.style_flags >> 16; - /* cannot overflow 32-bit arithmetic because of the size limits */ - /* used in the `fvar' table validity check in `sfnt_init_face' */ + /* prepare storage area for MM data; this cannot overflow */ + /* 32-bit arithmetic because of the size limits used in the */ + /* `fvar' table validity check in `sfnt_init_face' */ face->blend->mmvar_len = sizeof ( FT_MM_Var ) + + fvar_head.axisCount * sizeof ( FT_UShort ) + fvar_head.axisCount * sizeof ( FT_Var_Axis ) + num_instances * sizeof ( FT_Var_Named_Style ) + num_instances * fvar_head.axisCount * sizeof ( FT_Fixed ) + - 5 * fvar_head.axisCount; + fvar_head.axisCount * 5; if ( FT_ALLOC( mmvar, face->blend->mmvar_len ) ) goto Exit; @@ -2062,8 +2068,12 @@ /* (or tuples, as called by Apple) */ mmvar->num_namedstyles = num_instances; + + /* alas, no public field in `FT_Var_Axis' for axis flags */ + axis_flags = + (FT_UShort*)&( mmvar[1] ); mmvar->axis = - (FT_Var_Axis*)&( mmvar[1] ); + (FT_Var_Axis*)&( axis_flags[fvar_head.axisCount] ); mmvar->namedstyle = (FT_Var_Named_Style*)&( mmvar->axis[fvar_head.axisCount] ); @@ -2107,6 +2117,8 @@ a->name[3] = (FT_String)( ( a->tag ) & 0xFF ); a->name[4] = '\0'; + *axis_flags = axis_rec.flags; + if ( a->minimum > a->def || a->def > a->maximum ) { @@ -2118,13 +2130,17 @@ a->maximum = a->def; } - FT_TRACE5(( " \"%s\": minimum=%.5f, default=%.5f, maximum=%.5f\n", + FT_TRACE5(( " \"%s\":" + " minimum=%.5f, default=%.5f, maximum=%.5f," + " flags=0x%04X\n", a->name, a->minimum / 65536.0, a->def / 65536.0, - a->maximum / 65536.0 )); + a->maximum / 65536.0, + *axis_flags )); a++; + axis_flags++; } FT_TRACE5(( "\n" )); @@ -2136,8 +2152,16 @@ goto Exit; if ( fvar_head.instanceCount && !face->blend->avar_loaded ) + { + FT_ULong offset = FT_STREAM_POS(); + + ft_var_load_avar( face ); + if ( FT_STREAM_SEEK( offset ) ) + goto Exit; + } + ns = mmvar->namedstyle; nsc = face->blend->normalized_stylecoords; for ( i = 0; i < fvar_head.instanceCount; i++, ns++ ) @@ -2154,8 +2178,11 @@ for ( j = 0; j < fvar_head.axisCount; j++, c++ ) *c = FT_GET_LONG(); + /* valid psid values are 6, [256;32767], and 0xFFFF */ if ( usePsName ) ns->psid = FT_GET_USHORT(); + else + ns->psid = 0xFFFF; ft_var_to_normalized( face, fvar_head.axisCount, @@ -2171,7 +2198,7 @@ SFNT_Service sfnt = (SFNT_Service)face->sfnt; FT_Int found, dummy1, dummy2; - FT_UInt strid = 0xFFFFFFFFUL; + FT_UInt strid = ~0U; /* the default instance is missing in array the */ @@ -2230,13 +2257,15 @@ goto Exit; FT_MEM_COPY( mmvar, face->blend->mmvar, face->blend->mmvar_len ); + axis_flags = + (FT_UShort*)&( mmvar[1] ); mmvar->axis = - (FT_Var_Axis*)&( mmvar[1] ); + (FT_Var_Axis*)&( axis_flags[mmvar->num_axis] ); mmvar->namedstyle = (FT_Var_Named_Style*)&( mmvar->axis[mmvar->num_axis] ); + next_coords = (FT_Fixed*)&( mmvar->namedstyle[mmvar->num_namedstyles] ); - for ( n = 0; n < mmvar->num_namedstyles; n++ ) { mmvar->namedstyle[n].coords = next_coords; @@ -2281,7 +2310,10 @@ GX_Blend blend; FT_MM_Var* mmvar; FT_UInt i, j; - FT_Bool is_default_instance = 1; + + FT_Bool is_default_instance = TRUE; + FT_Bool all_design_coords = FALSE; + FT_Memory memory = face->root.memory; enum @@ -2327,7 +2359,7 @@ } if ( coords[i] != 0 ) - is_default_instance = 0; + is_default_instance = FALSE; } FT_TRACE5(( "\n" )); @@ -2340,6 +2372,9 @@ { if ( FT_NEW_ARRAY( blend->coords, mmvar->num_axis ) ) goto Exit; + + /* the first time we have to compute all design coordinates */ + all_design_coords = TRUE; } if ( !blend->normalizedcoords ) @@ -2388,7 +2423,7 @@ if ( set_design_coords ) ft_var_to_design( face, - num_coords, + all_design_coords ? blend->num_axis : num_coords, blend->normalizedcoords, blend->coords ); @@ -2529,6 +2564,14 @@ blend = face->blend; + if ( !blend->coords ) + { + /* select default instance coordinates */ + /* if no instance is selected yet */ + if ( FT_SET_ERROR( tt_set_mm_blend( face, 0, NULL, 1 ) ) ) + return error; + } + nc = num_coords; if ( num_coords > blend->num_axis ) { @@ -2626,7 +2669,7 @@ num_coords * sizeof ( FT_Fixed ) ); a = mmvar->axis + num_coords; - c = coords + num_coords; + c = blend->coords + num_coords; for ( i = num_coords; i < mmvar->num_axis; i++, a++, c++ ) *c = a->def; @@ -2636,7 +2679,7 @@ if ( !face->blend->avar_loaded ) ft_var_load_avar( face ); - ft_var_to_normalized( face, num_coords, coords, normalized ); + ft_var_to_normalized( face, num_coords, blend->coords, normalized ); error = tt_set_mm_blend( face, mmvar->num_axis, normalized, 0 ); @@ -2686,6 +2729,14 @@ blend = face->blend; + if ( !blend->coords ) + { + /* select default instance coordinates */ + /* if no instance is selected yet */ + if ( FT_SET_ERROR( tt_set_mm_blend( face, 0, NULL, 1 ) ) ) + return error; + } + nc = num_coords; if ( num_coords > blend->num_axis ) { diff --git a/thirdparty/freetype/src/truetype/ttinterp.c b/thirdparty/freetype/src/truetype/ttinterp.c index af31408cbf..ddcc839bb3 100644 --- a/thirdparty/freetype/src/truetype/ttinterp.c +++ b/thirdparty/freetype/src/truetype/ttinterp.c @@ -65,11 +65,15 @@ TT_INTERPRETER_VERSION_40 ) #endif -#define PROJECT( v1, v2 ) \ - exc->func_project( exc, (v1)->x - (v2)->x, (v1)->y - (v2)->y ) +#define PROJECT( v1, v2 ) \ + exc->func_project( exc, \ + SUB_LONG( (v1)->x, (v2)->x ), \ + SUB_LONG( (v1)->y, (v2)->y ) ) -#define DUALPROJ( v1, v2 ) \ - exc->func_dualproj( exc, (v1)->x - (v2)->x, (v1)->y - (v2)->y ) +#define DUALPROJ( v1, v2 ) \ + exc->func_dualproj( exc, \ + SUB_LONG( (v1)->x, (v2)->x ), \ + SUB_LONG( (v1)->y, (v2)->y ) ) #define FAST_PROJECT( v ) \ exc->func_project( exc, (v)->x, (v)->y ) @@ -1676,7 +1680,10 @@ if ( SUBPIXEL_HINTING_INFINALITY && ( !exc->ignore_x_mode || ( exc->sph_tweak_flags & SPH_TWEAK_ALLOW_X_DMOVE ) ) ) - zone->cur[point].x += FT_MulDiv( distance, v, exc->F_dot_P ); + zone->cur[point].x = ADD_LONG( zone->cur[point].x, + FT_MulDiv( distance, + v, + exc->F_dot_P ) ); else #endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */ @@ -1685,12 +1692,18 @@ /* diagonal moves, but only post-IUP. DejaVu tries to adjust */ /* diagonal stems like on `Z' and `z' post-IUP. */ if ( SUBPIXEL_HINTING_MINIMAL && !exc->backward_compatibility ) - zone->cur[point].x += FT_MulDiv( distance, v, exc->F_dot_P ); + zone->cur[point].x = ADD_LONG( zone->cur[point].x, + FT_MulDiv( distance, + v, + exc->F_dot_P ) ); else #endif if ( NO_SUBPIXEL_HINTING ) - zone->cur[point].x += FT_MulDiv( distance, v, exc->F_dot_P ); + zone->cur[point].x = ADD_LONG( zone->cur[point].x, + FT_MulDiv( distance, + v, + exc->F_dot_P ) ); zone->tags[point] |= FT_CURVE_TAG_TOUCH_X; } @@ -1705,7 +1718,10 @@ exc->iupx_called && exc->iupy_called ) ) #endif - zone->cur[point].y += FT_MulDiv( distance, v, exc->F_dot_P ); + zone->cur[point].y = ADD_LONG( zone->cur[point].y, + FT_MulDiv( distance, + v, + exc->F_dot_P ) ); zone->tags[point] |= FT_CURVE_TAG_TOUCH_Y; } @@ -1741,12 +1757,18 @@ v = exc->GS.freeVector.x; if ( v != 0 ) - zone->org[point].x += FT_MulDiv( distance, v, exc->F_dot_P ); + zone->org[point].x = ADD_LONG( zone->org[point].x, + FT_MulDiv( distance, + v, + exc->F_dot_P ) ); v = exc->GS.freeVector.y; if ( v != 0 ) - zone->org[point].y += FT_MulDiv( distance, v, exc->F_dot_P ); + zone->org[point].y = ADD_LONG( zone->org[point].y, + FT_MulDiv( distance, + v, + exc->F_dot_P ) ); } @@ -1769,18 +1791,18 @@ { #ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY if ( SUBPIXEL_HINTING_INFINALITY && !exc->ignore_x_mode ) - zone->cur[point].x += distance; + zone->cur[point].x = ADD_LONG( zone->cur[point].x, distance ); else #endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */ #ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL if ( SUBPIXEL_HINTING_MINIMAL && !exc->backward_compatibility ) - zone->cur[point].x += distance; + zone->cur[point].x = ADD_LONG( zone->cur[point].x, distance ); else #endif if ( NO_SUBPIXEL_HINTING ) - zone->cur[point].x += distance; + zone->cur[point].x = ADD_LONG( zone->cur[point].x, distance ); zone->tags[point] |= FT_CURVE_TAG_TOUCH_X; } @@ -1799,7 +1821,7 @@ exc->backward_compatibility && exc->iupx_called && exc->iupy_called ) ) #endif - zone->cur[point].y += distance; + zone->cur[point].y = ADD_LONG( zone->cur[point].y, distance ); zone->tags[point] |= FT_CURVE_TAG_TOUCH_Y; } @@ -1823,7 +1845,7 @@ { FT_UNUSED( exc ); - zone->org[point].x += distance; + zone->org[point].x = ADD_LONG( zone->org[point].x, distance ); } @@ -1835,7 +1857,7 @@ { FT_UNUSED( exc ); - zone->org[point].y += distance; + zone->org[point].y = ADD_LONG( zone->org[point].y, distance ); } @@ -1873,13 +1895,13 @@ if ( distance >= 0 ) { - val = distance + compensation; + val = ADD_LONG( distance, compensation ); if ( val < 0 ) val = 0; } else { - val = distance - compensation; + val = SUB_LONG( distance, compensation ); if ( val > 0 ) val = 0; } @@ -1915,13 +1937,14 @@ if ( distance >= 0 ) { - val = FT_PIX_ROUND( distance + compensation ); + val = FT_PIX_ROUND_LONG( ADD_LONG( distance, compensation ) ); if ( val < 0 ) val = 0; } else { - val = -FT_PIX_ROUND( compensation - distance ); + val = NEG_LONG( FT_PIX_ROUND_LONG( SUB_LONG( compensation, + distance ) ) ); if ( val > 0 ) val = 0; } @@ -1958,13 +1981,16 @@ if ( distance >= 0 ) { - val = FT_PIX_FLOOR( distance + compensation ) + 32; + val = ADD_LONG( FT_PIX_FLOOR( ADD_LONG( distance, compensation ) ), + 32 ); if ( val < 0 ) val = 32; } else { - val = -( FT_PIX_FLOOR( compensation - distance ) + 32 ); + val = NEG_LONG( ADD_LONG( FT_PIX_FLOOR( SUB_LONG( compensation, + distance ) ), + 32 ) ); if ( val > 0 ) val = -32; } @@ -2001,13 +2027,13 @@ if ( distance >= 0 ) { - val = FT_PIX_FLOOR( distance + compensation ); + val = FT_PIX_FLOOR( ADD_LONG( distance, compensation ) ); if ( val < 0 ) val = 0; } else { - val = -FT_PIX_FLOOR( compensation - distance ); + val = NEG_LONG( FT_PIX_FLOOR( SUB_LONG( compensation, distance ) ) ); if ( val > 0 ) val = 0; } @@ -2044,13 +2070,14 @@ if ( distance >= 0 ) { - val = FT_PIX_CEIL( distance + compensation ); + val = FT_PIX_CEIL_LONG( ADD_LONG( distance, compensation ) ); if ( val < 0 ) val = 0; } else { - val = -FT_PIX_CEIL( compensation - distance ); + val = NEG_LONG( FT_PIX_CEIL_LONG( SUB_LONG( compensation, + distance ) ) ); if ( val > 0 ) val = 0; } @@ -2087,13 +2114,14 @@ if ( distance >= 0 ) { - val = FT_PAD_ROUND( distance + compensation, 32 ); + val = FT_PAD_ROUND_LONG( ADD_LONG( distance, compensation ), 32 ); if ( val < 0 ) val = 0; } else { - val = -FT_PAD_ROUND( compensation - distance, 32 ); + val = NEG_LONG( FT_PAD_ROUND_LONG( SUB_LONG( compensation, distance ), + 32 ) ); if ( val > 0 ) val = 0; } @@ -2134,7 +2162,8 @@ if ( distance >= 0 ) { - val = ( distance - exc->phase + exc->threshold + compensation ) & + val = ADD_LONG( distance, + exc->threshold - exc->phase + compensation ) & -exc->period; val += exc->phase; if ( val < 0 ) @@ -2142,8 +2171,9 @@ } else { - val = -( ( exc->threshold - exc->phase - distance + compensation ) & - -exc->period ); + val = NEG_LONG( SUB_LONG( exc->threshold - exc->phase + compensation, + distance ) & + -exc->period ); val -= exc->phase; if ( val > 0 ) val = -exc->phase; @@ -2183,7 +2213,8 @@ if ( distance >= 0 ) { - val = ( ( distance - exc->phase + exc->threshold + compensation ) / + val = ( ADD_LONG( distance, + exc->threshold - exc->phase + compensation ) / exc->period ) * exc->period; val += exc->phase; if ( val < 0 ) @@ -2191,8 +2222,9 @@ } else { - val = -( ( ( exc->threshold - exc->phase - distance + compensation ) / - exc->period ) * exc->period ); + val = NEG_LONG( ( SUB_LONG( exc->threshold - exc->phase + compensation, + distance ) / + exc->period ) * exc->period ); val -= exc->phase; if ( val > 0 ) val = -exc->phase; @@ -2826,7 +2858,7 @@ static void Ins_ADD( FT_Long* args ) { - args[0] += args[1]; + args[0] = ADD_LONG( args[0], args[1] ); } @@ -2839,7 +2871,7 @@ static void Ins_SUB( FT_Long* args ) { - args[0] -= args[1]; + args[0] = SUB_LONG( args[0], args[1] ); } @@ -2882,7 +2914,8 @@ static void Ins_ABS( FT_Long* args ) { - args[0] = FT_ABS( args[0] ); + if ( args[0] < 0 ) + args[0] = NEG_LONG( args[0] ); } @@ -2895,7 +2928,7 @@ static void Ins_NEG( FT_Long* args ) { - args[0] = -args[0]; + args[0] = NEG_LONG( args[0] ); } @@ -4211,8 +4244,8 @@ p1 = exc->zp1.cur + aIdx2; p2 = exc->zp2.cur + aIdx1; - A = p1->x - p2->x; - B = p1->y - p2->y; + A = SUB_LONG( p1->x, p2->x ); + B = SUB_LONG( p1->y, p2->y ); /* If p1 == p2, SPvTL and SFvTL behave the same as */ /* SPvTCA[X] and SFvTCA[X], respectively. */ @@ -4227,9 +4260,9 @@ if ( ( opcode & 1 ) != 0 ) { - C = B; /* counter clockwise rotation */ - B = A; - A = -C; + C = B; /* counter clockwise rotation */ + B = A; + A = NEG_LONG( C ); } Normalize( A, B, Vec ); @@ -4770,7 +4803,7 @@ K = FAST_PROJECT( &exc->zp2.cur[L] ); - exc->func_move( exc, &exc->zp2, L, args[1] - K ); + exc->func_move( exc, &exc->zp2, L, SUB_LONG( args[1], K ) ); /* UNDOCUMENTED! The MS rasterizer does that with */ /* twilight points (confirmed by Greg Hitchcock) */ @@ -4894,12 +4927,12 @@ } { - FT_Vector* v1 = exc->zp1.org + p2; - FT_Vector* v2 = exc->zp2.org + p1; + FT_Vector* v1 = exc->zp1.org + p2; + FT_Vector* v2 = exc->zp2.org + p1; - A = v1->x - v2->x; - B = v1->y - v2->y; + A = SUB_LONG( v1->x, v2->x ); + B = SUB_LONG( v1->y, v2->y ); /* If v1 == v2, SDPvTL behaves the same as */ /* SVTCA[X], respectively. */ @@ -4915,9 +4948,9 @@ if ( ( opcode & 1 ) != 0 ) { - C = B; /* counter clockwise rotation */ - B = A; - A = -C; + C = B; /* counter clockwise rotation */ + B = A; + A = NEG_LONG( C ); } Normalize( A, B, &exc->GS.dualVector ); @@ -4927,8 +4960,8 @@ FT_Vector* v2 = exc->zp2.cur + p1; - A = v1->x - v2->x; - B = v1->y - v2->y; + A = SUB_LONG( v1->x, v2->x ); + B = SUB_LONG( v1->y, v2->y ); if ( A == 0 && B == 0 ) { @@ -4939,9 +4972,9 @@ if ( ( opcode & 1 ) != 0 ) { - C = B; /* counter clockwise rotation */ - B = A; - A = -C; + C = B; /* counter clockwise rotation */ + B = A; + A = NEG_LONG( C ); } Normalize( A, B, &exc->GS.projVector ); @@ -5392,7 +5425,7 @@ if ( !( SUBPIXEL_HINTING_MINIMAL && exc->backward_compatibility ) ) #endif - exc->zp2.cur[point].x += dx; + exc->zp2.cur[point].x = ADD_LONG( exc->zp2.cur[point].x, dx ); if ( touch ) exc->zp2.tags[point] |= FT_CURVE_TAG_TOUCH_X; @@ -5406,7 +5439,7 @@ exc->iupx_called && exc->iupy_called ) ) #endif - exc->zp2.cur[point].y += dy; + exc->zp2.cur[point].y = ADD_LONG( exc->zp2.cur[point].y, dy ); if ( touch ) exc->zp2.tags[point] |= FT_CURVE_TAG_TOUCH_Y; @@ -5781,14 +5814,17 @@ #ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY /* subpixel hinting - make MSIRP respect CVT cut-in; */ - if ( SUBPIXEL_HINTING_INFINALITY && - exc->ignore_x_mode && - exc->GS.freeVector.x != 0 && - FT_ABS( distance - args[1] ) >= control_value_cutin ) + if ( SUBPIXEL_HINTING_INFINALITY && + exc->ignore_x_mode && + exc->GS.freeVector.x != 0 && + FT_ABS( SUB_LONG( distance, args[1] ) ) >= control_value_cutin ) distance = args[1]; #endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */ - exc->func_move( exc, &exc->zp1, point, args[1] - distance ); + exc->func_move( exc, + &exc->zp1, + point, + SUB_LONG( args[1], distance ) ); exc->GS.rp1 = exc->GS.rp0; exc->GS.rp2 = point; @@ -6027,8 +6063,10 @@ FT_Vector vec; - vec.x = FT_MulFix( vec1->x - vec2->x, exc->metrics.x_scale ); - vec.y = FT_MulFix( vec1->y - vec2->y, exc->metrics.y_scale ); + vec.x = FT_MulFix( SUB_LONG( vec1->x, vec2->x ), + exc->metrics.x_scale ); + vec.y = FT_MulFix( SUB_LONG( vec1->y, vec2->y ), + exc->metrics.y_scale ); org_dist = FAST_DUALPROJ( &vec ); } @@ -6081,8 +6119,8 @@ } else { - if ( distance > -minimum_distance ) - distance = -minimum_distance; + if ( distance > NEG_LONG( minimum_distance ) ) + distance = NEG_LONG( minimum_distance ); } } @@ -6090,7 +6128,7 @@ org_dist = PROJECT( exc->zp1.cur + point, exc->zp0.cur + exc->GS.rp0 ); - exc->func_move( exc, &exc->zp1, point, distance - org_dist ); + exc->func_move( exc, &exc->zp1, point, SUB_LONG( distance, org_dist ) ); Fail: exc->GS.rp1 = exc->GS.rp0; @@ -6265,8 +6303,8 @@ } else { - if ( distance > -minimum_distance ) - distance = -minimum_distance; + if ( distance > NEG_LONG( minimum_distance ) ) + distance = NEG_LONG( minimum_distance ); } } @@ -6290,7 +6328,10 @@ } #endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */ - exc->func_move( exc, &exc->zp1, point, distance - cur_dist ); + exc->func_move( exc, + &exc->zp1, + point, + SUB_LONG( distance, cur_dist ) ); #ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY if ( SUBPIXEL_HINTING_INFINALITY ) @@ -6314,7 +6355,10 @@ } if ( reverse_move ) - exc->func_move( exc, &exc->zp1, point, -( distance - cur_dist ) ); + exc->func_move( exc, + &exc->zp1, + point, + SUB_LONG( cur_dist, distance ) ); } #endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */ @@ -6380,7 +6424,7 @@ distance = PROJECT( exc->zp1.cur + point, exc->zp0.cur + exc->GS.rp0 ); - exc->func_move( exc, &exc->zp1, point, -distance ); + exc->func_move( exc, &exc->zp1, point, NEG_LONG( distance ) ); } exc->GS.loop--; @@ -6437,19 +6481,19 @@ /* Cramer's rule */ - dbx = exc->zp0.cur[b1].x - exc->zp0.cur[b0].x; - dby = exc->zp0.cur[b1].y - exc->zp0.cur[b0].y; + dbx = SUB_LONG( exc->zp0.cur[b1].x, exc->zp0.cur[b0].x ); + dby = SUB_LONG( exc->zp0.cur[b1].y, exc->zp0.cur[b0].y ); - dax = exc->zp1.cur[a1].x - exc->zp1.cur[a0].x; - day = exc->zp1.cur[a1].y - exc->zp1.cur[a0].y; + dax = SUB_LONG( exc->zp1.cur[a1].x, exc->zp1.cur[a0].x ); + day = SUB_LONG( exc->zp1.cur[a1].y, exc->zp1.cur[a0].y ); - dx = exc->zp0.cur[b0].x - exc->zp1.cur[a0].x; - dy = exc->zp0.cur[b0].y - exc->zp1.cur[a0].y; + dx = SUB_LONG( exc->zp0.cur[b0].x, exc->zp1.cur[a0].x ); + dy = SUB_LONG( exc->zp0.cur[b0].y, exc->zp1.cur[a0].y ); - discriminant = FT_MulDiv( dax, -dby, 0x40 ) + - FT_MulDiv( day, dbx, 0x40 ); - dotproduct = FT_MulDiv( dax, dbx, 0x40 ) + - FT_MulDiv( day, dby, 0x40 ); + discriminant = ADD_LONG( FT_MulDiv( dax, NEG_LONG( dby ), 0x40 ), + FT_MulDiv( day, dbx, 0x40 ) ); + dotproduct = ADD_LONG( FT_MulDiv( dax, dbx, 0x40 ), + FT_MulDiv( day, dby, 0x40 ) ); /* The discriminant above is actually a cross product of vectors */ /* da and db. Together with the dot product, they can be used as */ @@ -6459,30 +6503,29 @@ /* discriminant = |da||db|sin(angle) . */ /* We use these equations to reject grazing intersections by */ /* thresholding abs(tan(angle)) at 1/19, corresponding to 3 degrees. */ - if ( 19 * FT_ABS( discriminant ) > FT_ABS( dotproduct ) ) + if ( MUL_LONG( 19, FT_ABS( discriminant ) ) > FT_ABS( dotproduct ) ) { - val = FT_MulDiv( dx, -dby, 0x40 ) + FT_MulDiv( dy, dbx, 0x40 ); + val = ADD_LONG( FT_MulDiv( dx, NEG_LONG( dby ), 0x40 ), + FT_MulDiv( dy, dbx, 0x40 ) ); R.x = FT_MulDiv( val, dax, discriminant ); R.y = FT_MulDiv( val, day, discriminant ); /* XXX: Block in backward_compatibility and/or post-IUP? */ - exc->zp2.cur[point].x = exc->zp1.cur[a0].x + R.x; - exc->zp2.cur[point].y = exc->zp1.cur[a0].y + R.y; + exc->zp2.cur[point].x = ADD_LONG( exc->zp1.cur[a0].x, R.x ); + exc->zp2.cur[point].y = ADD_LONG( exc->zp1.cur[a0].y, R.y ); } else { /* else, take the middle of the middles of A and B */ /* XXX: Block in backward_compatibility and/or post-IUP? */ - exc->zp2.cur[point].x = ( exc->zp1.cur[a0].x + - exc->zp1.cur[a1].x + - exc->zp0.cur[b0].x + - exc->zp0.cur[b1].x ) / 4; - exc->zp2.cur[point].y = ( exc->zp1.cur[a0].y + - exc->zp1.cur[a1].y + - exc->zp0.cur[b0].y + - exc->zp0.cur[b1].y ) / 4; + exc->zp2.cur[point].x = + ADD_LONG( ADD_LONG( exc->zp1.cur[a0].x, exc->zp1.cur[a1].x ), + ADD_LONG( exc->zp0.cur[b0].x, exc->zp0.cur[b1].x ) ) / 4; + exc->zp2.cur[point].y = + ADD_LONG( ADD_LONG( exc->zp1.cur[a0].y, exc->zp1.cur[a1].y ), + ADD_LONG( exc->zp0.cur[b0].y, exc->zp0.cur[b1].y ) ) / 4; } exc->zp2.tags[point] |= FT_CURVE_TAG_TOUCH_BOTH; @@ -6517,7 +6560,7 @@ distance = PROJECT( exc->zp0.cur + p2, exc->zp1.cur + p1 ) / 2; exc->func_move( exc, &exc->zp1, p1, distance ); - exc->func_move( exc, &exc->zp0, p2, -distance ); + exc->func_move( exc, &exc->zp0, p2, NEG_LONG( distance ) ); } @@ -6590,9 +6633,11 @@ FT_Vector vec; - vec.x = FT_MulFix( exc->zp1.orus[exc->GS.rp2].x - orus_base->x, + vec.x = FT_MulFix( SUB_LONG( exc->zp1.orus[exc->GS.rp2].x, + orus_base->x ), exc->metrics.x_scale ); - vec.y = FT_MulFix( exc->zp1.orus[exc->GS.rp2].y - orus_base->y, + vec.y = FT_MulFix( SUB_LONG( exc->zp1.orus[exc->GS.rp2].y, + orus_base->y ), exc->metrics.y_scale ); old_range = FAST_DUALPROJ( &vec ); @@ -6627,9 +6672,11 @@ FT_Vector vec; - vec.x = FT_MulFix( exc->zp2.orus[point].x - orus_base->x, + vec.x = FT_MulFix( SUB_LONG( exc->zp2.orus[point].x, + orus_base->x ), exc->metrics.x_scale ); - vec.y = FT_MulFix( exc->zp2.orus[point].y - orus_base->y, + vec.y = FT_MulFix( SUB_LONG( exc->zp2.orus[point].y, + orus_base->y ), exc->metrics.y_scale ); org_dist = FAST_DUALPROJ( &vec ); @@ -6668,7 +6715,7 @@ exc->func_move( exc, &exc->zp2, (FT_UShort)point, - new_dist - cur_dist ); + SUB_LONG( new_dist, cur_dist ) ); } Fail: @@ -6733,14 +6780,14 @@ FT_F26Dot6 dx; - dx = worker->curs[p].x - worker->orgs[p].x; + dx = SUB_LONG( worker->curs[p].x, worker->orgs[p].x ); if ( dx != 0 ) { for ( i = p1; i < p; i++ ) - worker->curs[i].x += dx; + worker->curs[i].x = ADD_LONG( worker->curs[i].x, dx ); for ( i = p + 1; i <= p2; i++ ) - worker->curs[i].x += dx; + worker->curs[i].x = ADD_LONG( worker->curs[i].x, dx ); } } @@ -6785,8 +6832,8 @@ org2 = worker->orgs[ref2].x; cur1 = worker->curs[ref1].x; cur2 = worker->curs[ref2].x; - delta1 = cur1 - org1; - delta2 = cur2 - org2; + delta1 = SUB_LONG( cur1, org1 ); + delta2 = SUB_LONG( cur2, org2 ); if ( cur1 == cur2 || orus1 == orus2 ) { @@ -6798,10 +6845,10 @@ if ( x <= org1 ) - x += delta1; + x = ADD_LONG( x, delta1 ); else if ( x >= org2 ) - x += delta2; + x = ADD_LONG( x, delta2 ); else x = cur1; @@ -6822,20 +6869,23 @@ if ( x <= org1 ) - x += delta1; + x = ADD_LONG( x, delta1 ); else if ( x >= org2 ) - x += delta2; + x = ADD_LONG( x, delta2 ); else { if ( !scale_valid ) { scale_valid = 1; - scale = FT_DivFix( cur2 - cur1, orus2 - orus1 ); + scale = FT_DivFix( SUB_LONG( cur2, cur1 ), + SUB_LONG( orus2, orus1 ) ); } - x = cur1 + FT_MulFix( worker->orus[i].x - orus1, scale ); + x = ADD_LONG( cur1, + FT_MulFix( SUB_LONG( worker->orus[i].x, orus1 ), + scale ) ); } worker->curs[i].x = x; } @@ -7310,7 +7360,11 @@ K |= 1 << 12; #ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL - if ( SUBPIXEL_HINTING_MINIMAL ) + /* Toggle the following flags only outside of monochrome mode. */ + /* Otherwise, instructions may behave weirdly and rendering results */ + /* may differ between v35 and v40 mode, e.g., in `Times New Roman */ + /* Bold Italic'. */ + if ( SUBPIXEL_HINTING_MINIMAL && exc->subpixel_hinting_lean ) { /********************************/ /* HINTING FOR SUBPIXEL */ @@ -7345,7 +7399,7 @@ /* */ /* The only smoothing method FreeType supports unless someone sets */ /* FT_LOAD_TARGET_MONO. */ - if ( ( args[0] & 2048 ) != 0 ) + if ( ( args[0] & 2048 ) != 0 && exc->subpixel_hinting_lean ) K |= 1 << 18; /********************************/ @@ -7589,11 +7643,21 @@ #endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */ #ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL - /* Toggle backward compatibility according to what font says, except */ - /* when it's a `tricky' font that heavily relies on the interpreter to */ - /* render glyphs correctly, e.g. DFKai-SB. Backward compatibility */ - /* hacks may break it. */ + /* + * Toggle backward compatibility according to what font wants, except + * when + * + * 1) we have a `tricky' font that heavily relies on the interpreter to + * render glyphs correctly, for example DFKai-SB, or + * 2) FT_RENDER_MODE_MONO (i.e, monochome rendering) is requested. + * + * In those cases, backward compatibility needs to be turned off to get + * correct rendering. The rendering is then completely up to the + * font's programming. + * + */ if ( SUBPIXEL_HINTING_MINIMAL && + exc->subpixel_hinting_lean && !FT_IS_TRICKY( &exc->face->root ) ) exc->backward_compatibility = !( exc->GS.instruct_control & 4 ); else @@ -7639,8 +7703,7 @@ FT_MAX( 50, exc->cvtSize / 10 ); else - exc->loopcall_counter_max = FT_MAX( 100, - 10 * exc->cvtSize ); + exc->loopcall_counter_max = 300 + 8 * exc->cvtSize; /* as a protection against an unreasonable number of CVT entries */ /* we assume at most 100 control values per glyph for the counter */ diff --git a/thirdparty/freetype/src/truetype/ttinterp.h b/thirdparty/freetype/src/truetype/ttinterp.h index 55e472091c..abbecfcee3 100644 --- a/thirdparty/freetype/src/truetype/ttinterp.h +++ b/thirdparty/freetype/src/truetype/ttinterp.h @@ -253,23 +253,38 @@ FT_BEGIN_HEADER #ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL /* - * Modern TrueType fonts are usually rendered through Microsoft's - * collection of rendering techniques called ClearType (e.g., subpixel - * rendering and subpixel hinting). When ClearType was introduced, most - * fonts were not ready. Microsoft decided to implement a backward - * compatibility mode that employed several simple to complicated - * assumptions and tricks that modified the interpretation of the - * bytecode contained in these fonts to make them look ClearType-y - * somehow. Most (web)fonts that were released since then have come to - * rely on these hacks to render correctly, even some of Microsoft's - * flagship ClearType fonts (Calibri, Cambria, Segoe UI). + * FreeType supports ClearType-like hinting of TrueType fonts through + * the version 40 interpreter. This is achieved through several hacks + * in the base (v35) interpreter, as detailed below. * - * The minimal subpixel hinting code (interpreter version 40) employs a - * small list of font-agnostic hacks to bludgeon non-native-ClearType - * fonts (except tricky ones[1]) into submission. It will not try to - * toggle hacks for specific fonts for performance and complexity - * reasons. The focus is on modern (web)fonts rather than legacy fonts - * that were made for black-and-white rendering. + * ClearType is an umbrella term for several rendering techniques + * employed by Microsoft's various GUI and rendering toolkit + * implementations, most importantly: subpixel rendering for using the + * RGB subpixels of LCDs to approximately triple the perceived + * resolution on the x-axis and subpixel hinting for positioning stems + * on subpixel borders. TrueType programming is explicit, i.e., fonts + * must be programmed to take advantage of ClearType's possibilities. + * + * When ClearType was introduced, it seemed unlikely that all fonts + * would be reprogrammed, so Microsoft decided to implement a backward + * compatibility mode. It employs several simple to complicated + * assumptions and tricks, many of them font-dependent, that modify the + * interpretation of the bytecode contained in these fonts to retrofit + * them into a ClearType-y look. The quality of the results varies. + * Most (web)fonts that were released since then have come to rely on + * these hacks to render correctly, even some of Microsoft's flagship + * fonts (e.g., Calibri, Cambria, Segoe UI). + * + * FreeType's minimal subpixel hinting code (interpreter version 40) + * employs a small list of font-agnostic hacks loosely based on the + * public information available on Microsoft's compatibility mode[2]. + * The focus is on modern (web)fonts rather than legacy fonts that were + * made for monochrome rendering. It will not match ClearType rendering + * exactly. Unlike the `Infinality' code (interpreter version 38) that + * came before, it will not try to toggle hacks for specific fonts for + * performance and complexity reasons. It will fall back to version 35 + * behavior for tricky fonts[1] or when monochrome rendering is + * requested. * * Major hacks * @@ -347,7 +362,8 @@ FT_BEGIN_HEADER * */ - /* Using v40 implies subpixel hinting. Used to detect interpreter */ + /* Using v40 implies subpixel hinting, unless FT_RENDER_MODE_MONO has been + * requested. Used to detect interpreter */ /* version switches. `_lean' to differentiate from the Infinality */ /* `subpixel_hinting', which is managed differently. */ FT_Bool subpixel_hinting_lean; diff --git a/thirdparty/freetype/src/truetype/ttobjs.c b/thirdparty/freetype/src/truetype/ttobjs.c index 4db0f289f8..081fa2f1a5 100644 --- a/thirdparty/freetype/src/truetype/ttobjs.c +++ b/thirdparty/freetype/src/truetype/ttobjs.c @@ -576,9 +576,11 @@ /* We must also be able to accept Mac/GX fonts, as well as OT ones. */ /* The 0x00020000 tag is completely undocumented; some fonts from */ /* Arphic made for Chinese Windows 3.1 have this. */ - if ( face->format_tag != 0x00010000L && /* MS fonts */ - face->format_tag != 0x00020000L && /* CJK fonts for Win 3.1 */ - face->format_tag != TTAG_true ) /* Mac fonts */ + if ( face->format_tag != 0x00010000L && /* MS fonts */ + face->format_tag != 0x00020000L && /* CJK fonts for Win 3.1 */ + face->format_tag != TTAG_true && /* Mac fonts */ + face->format_tag != TTAG_0xA5kbd && /* `Keyboard.dfont' (legacy Mac OS X) */ + face->format_tag != TTAG_0xA5lst ) /* `LastResort.dfont' (legacy Mac OS X) */ { FT_TRACE2(( " not a TTF font\n" )); goto Bad_Format; @@ -1230,7 +1232,9 @@ /* <Input> */ /* size :: A handle to the target size object. */ /* */ - /* only_height :: Only recompute ascender, descender, and height. */ + /* only_height :: Only recompute ascender, descender, and height; */ + /* this flag is used for variation fonts where */ + /* `tt_size_reset' is used as an iterator function. */ /* */ FT_LOCAL_DEF( FT_Error ) tt_size_reset( TT_Size size, @@ -1277,7 +1281,11 @@ size->ttmetrics.valid = TRUE; if ( only_height ) + { + /* we must not recompute the scaling values here since */ + /* `tt_size_reset' was already called (with only_height = 0) */ return FT_Err_Ok; + } if ( face->header.Flags & 8 ) { diff --git a/thirdparty/freetype/src/truetype/ttpload.c b/thirdparty/freetype/src/truetype/ttpload.c index 70ac15da4a..bcf6b34f67 100644 --- a/thirdparty/freetype/src/truetype/ttpload.c +++ b/thirdparty/freetype/src/truetype/ttpload.c @@ -247,13 +247,13 @@ if ( pos2 > face->glyf_len ) { /* We try to sanitize the last `loca' entry. */ - if ( gindex == face->num_locations - 1 ) + if ( gindex == face->num_locations - 2 ) { FT_TRACE1(( "tt_face_get_location:" - " too large offset (0x%08lx) found for glyph index %ld,\n" + " too large size (%ld bytes) found for glyph index %ld,\n" " " - " truncating at the end of `glyf' table (0x%08lx)\n", - pos2, gindex + 1, face->glyf_len )); + " truncating at the end of `glyf' table to %ld bytes\n", + pos2 - pos1, gindex, face->glyf_len - pos1 )); pos2 = face->glyf_len; } else diff --git a/thirdparty/freetype/src/type1/t1load.c b/thirdparty/freetype/src/type1/t1load.c index f5c661f7de..f569d6bec3 100644 --- a/thirdparty/freetype/src/type1/t1load.c +++ b/thirdparty/freetype/src/type1/t1load.c @@ -329,8 +329,8 @@ for ( i = 0; i < mmaster.num_axis; i++ ) { mmvar->axis[i].name = mmaster.axis[i].name; - mmvar->axis[i].minimum = INT_TO_FIXED( mmaster.axis[i].minimum); - mmvar->axis[i].maximum = INT_TO_FIXED( mmaster.axis[i].maximum); + mmvar->axis[i].minimum = INT_TO_FIXED( mmaster.axis[i].minimum ); + mmvar->axis[i].maximum = INT_TO_FIXED( mmaster.axis[i].maximum ); mmvar->axis[i].def = ( mmvar->axis[i].minimum + mmvar->axis[i].maximum ) / 2; /* Does not apply. But this value is in range */ diff --git a/thirdparty/freetype/src/type1/t1objs.c b/thirdparty/freetype/src/type1/t1objs.c index 97c16b0fdf..5ac1292ae0 100644 --- a/thirdparty/freetype/src/type1/t1objs.c +++ b/thirdparty/freetype/src/type1/t1objs.c @@ -555,12 +555,6 @@ if ( clazz ) error = FT_CMap_New( clazz, NULL, &charmap, NULL ); - -#if 0 - /* Select default charmap */ - if (root->num_charmaps) - root->charmap = root->charmaps[0]; -#endif } } diff --git a/thirdparty/freetype/src/type42/t42objs.c b/thirdparty/freetype/src/type42/t42objs.c index 87e5206b7f..1c4ebd768a 100644 --- a/thirdparty/freetype/src/type42/t42objs.c +++ b/thirdparty/freetype/src/type42/t42objs.c @@ -394,12 +394,6 @@ if ( clazz ) error = FT_CMap_New( clazz, NULL, &charmap, NULL ); - -#if 0 - /* Select default charmap */ - if ( root->num_charmaps ) - root->charmap = root->charmaps[0]; -#endif } } Exit: diff --git a/thirdparty/freetype/src/winfonts/winfnt.c b/thirdparty/freetype/src/winfonts/winfnt.c index 9811fbb05a..4c47962319 100644 --- a/thirdparty/freetype/src/winfonts/winfnt.c +++ b/thirdparty/freetype/src/winfonts/winfnt.c @@ -859,10 +859,6 @@ NULL ); if ( error ) goto Fail; - - /* Select default charmap */ - if ( root->num_charmaps ) - root->charmap = root->charmaps[0]; } /* set up remaining flags */ @@ -1095,7 +1091,7 @@ /* note: since glyphs are stored in columns and not in rows we */ /* can't use ft_glyphslot_set_bitmap */ - if ( FT_ALLOC_MULT( bitmap->buffer, pitch, bitmap->rows ) ) + if ( FT_ALLOC_MULT( bitmap->buffer, bitmap->rows, pitch ) ) goto Exit; column = (FT_Byte*)bitmap->buffer; diff --git a/thirdparty/libpng/LICENSE b/thirdparty/libpng/LICENSE index b7ad4b9eaf..57c366feea 100644 --- a/thirdparty/libpng/LICENSE +++ b/thirdparty/libpng/LICENSE @@ -10,8 +10,8 @@ this sentence. This code is released under the libpng license. -libpng versions 1.0.7, July 1, 2000 through 1.6.23, June 9, 2016 are -Copyright (c) 2000-2002, 2004, 2006-2016 Glenn Randers-Pehrson, are +libpng versions 1.0.7, July 1, 2000 through 1.6.33, September 28, 2017 are +Copyright (c) 2000-2002, 2004, 2006-2017 Glenn Randers-Pehrson, are derived from libpng-1.0.6, and are distributed according to the same disclaimer and license as libpng-1.0.6 with the following individuals added to the list of Contributing Authors: @@ -22,6 +22,9 @@ added to the list of Contributing Authors: Cosmin Truta Gilles Vollant James Yu + Mandar Sahastrabuddhe + Google Inc. + Vadim Barkov and with the following additions to the disclaimer: @@ -127,4 +130,4 @@ any encryption software. See the EAR, paragraphs 734.3(b)(3) and Glenn Randers-Pehrson glennrp at users.sourceforge.net -June 9, 2016 +September 28, 2017 diff --git a/thirdparty/libpng/png.c b/thirdparty/libpng/png.c index 2352df13cb..55134729c7 100644 --- a/thirdparty/libpng/png.c +++ b/thirdparty/libpng/png.c @@ -1,7 +1,7 @@ /* png.c - location for general purpose libpng functions * - * Last changed in libpng 1.6.32 [August 24, 2017] + * Last changed in libpng 1.6.33 [September 28, 2017] * Copyright (c) 1998-2002,2004,2006-2017 Glenn Randers-Pehrson * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) @@ -14,7 +14,7 @@ #include "pngpriv.h" /* Generate a compiler error if there is an old png.h in the search path. */ -typedef png_libpng_version_1_6_32 Your_png_h_is_not_version_1_6_32; +typedef png_libpng_version_1_6_33 Your_png_h_is_not_version_1_6_33; #ifdef __GNUC__ /* The version tests may need to be added to, but the problem warning has @@ -816,14 +816,14 @@ png_get_copyright(png_const_structrp png_ptr) #else # ifdef __STDC__ return PNG_STRING_NEWLINE \ - "libpng version 1.6.32 - August 24, 2017" PNG_STRING_NEWLINE \ + "libpng version 1.6.33 - September 28, 2017" PNG_STRING_NEWLINE \ "Copyright (c) 1998-2002,2004,2006-2017 Glenn Randers-Pehrson" \ PNG_STRING_NEWLINE \ "Copyright (c) 1996-1997 Andreas Dilger" PNG_STRING_NEWLINE \ "Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc." \ PNG_STRING_NEWLINE; # else - return "libpng version 1.6.32 - August 24, 2017\ + return "libpng version 1.6.33 - September 28, 2017\ Copyright (c) 1998-2002,2004,2006-2017 Glenn Randers-Pehrson\ Copyright (c) 1996-1997 Andreas Dilger\ Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc."; @@ -1913,12 +1913,12 @@ png_colorspace_set_sRGB(png_const_structrp png_ptr, png_colorspacerp colorspace, */ if (intent < 0 || intent >= PNG_sRGB_INTENT_LAST) return png_icc_profile_error(png_ptr, colorspace, "sRGB", - (unsigned)intent, "invalid sRGB rendering intent"); + (png_alloc_size_t)intent, "invalid sRGB rendering intent"); if ((colorspace->flags & PNG_COLORSPACE_HAVE_INTENT) != 0 && colorspace->rendering_intent != intent) return png_icc_profile_error(png_ptr, colorspace, "sRGB", - (unsigned)intent, "inconsistent rendering intents"); + (png_alloc_size_t)intent, "inconsistent rendering intents"); if ((colorspace->flags & PNG_COLORSPACE_FROM_sRGB) != 0) { @@ -1979,7 +1979,6 @@ icc_check_length(png_const_structrp png_ptr, png_colorspacerp colorspace, if (profile_length < 132) return png_icc_profile_error(png_ptr, colorspace, name, profile_length, "too short"); - return 1; } @@ -2224,22 +2223,23 @@ png_icc_check_tag_table(png_const_structrp png_ptr, png_colorspacerp colorspace, * being in range. All defined tag types have an 8 byte header - a 4 byte * type signature then 0. */ + + /* This is a hard error; potentially it can cause read outside the + * profile. + */ + if (tag_start > profile_length || tag_length > profile_length - tag_start) + return png_icc_profile_error(png_ptr, colorspace, name, tag_id, + "ICC profile tag outside profile"); + if ((tag_start & 3) != 0) { - /* CNHP730S.icc shipped with Microsoft Windows 64 violates this, it is + /* CNHP730S.icc shipped with Microsoft Windows 64 violates this; it is * only a warning here because libpng does not care about the * alignment. */ (void)png_icc_profile_error(png_ptr, NULL, name, tag_id, "ICC profile tag start not a multiple of 4"); } - - /* This is a hard error; potentially it can cause read outside the - * profile. - */ - if (tag_start > profile_length || tag_length > profile_length - tag_start) - return png_icc_profile_error(png_ptr, colorspace, name, tag_id, - "ICC profile tag outside profile"); } return 1; /* success, maybe with warnings */ @@ -3761,7 +3761,7 @@ png_log16bit(png_uint_32 x) * of getting this accuracy in practice. * * To deal with this the following exp() function works out the exponent of the - * frational part of the logarithm by using an accurate 32-bit value from the + * fractional part of the logarithm by using an accurate 32-bit value from the * top four fractional bits then multiplying in the remaining bits. */ static const png_uint_32 diff --git a/thirdparty/libpng/png.h b/thirdparty/libpng/png.h index 51ac8abe74..a5f142b89c 100644 --- a/thirdparty/libpng/png.h +++ b/thirdparty/libpng/png.h @@ -1,7 +1,7 @@ /* png.h - header file for PNG reference library * - * libpng version 1.6.32, August 24, 2017 + * libpng version 1.6.33, September 28, 2017 * * Copyright (c) 1998-2002,2004,2006-2017 Glenn Randers-Pehrson * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) @@ -12,7 +12,7 @@ * Authors and maintainers: * libpng versions 0.71, May 1995, through 0.88, January 1996: Guy Schalnat * libpng versions 0.89, June 1996, through 0.96, May 1997: Andreas Dilger - * libpng versions 0.97, January 1998, through 1.6.32, August 24, 2017: + * libpng versions 0.97, January 1998, through 1.6.33, September 28, 2017: * Glenn Randers-Pehrson. * See also "Contributing Authors", below. */ @@ -25,7 +25,7 @@ * * This code is released under the libpng license. * - * libpng versions 1.0.7, July 1, 2000 through 1.6.32, August 24, 2017 are + * libpng versions 1.0.7, July 1, 2000 through 1.6.33, September 28, 2017 are * Copyright (c) 2000-2002, 2004, 2006-2017 Glenn Randers-Pehrson, are * derived from libpng-1.0.6, and are distributed according to the same * disclaimer and license as libpng-1.0.6 with the following individuals @@ -213,7 +213,7 @@ * ... * 1.5.28 15 10527 15.so.15.28[.0] * ... - * 1.6.32 16 10632 16.so.16.32[.0] + * 1.6.33 16 10633 16.so.16.33[.0] * * Henceforth the source version will match the shared-library major * and minor numbers; the shared-library major version number will be @@ -241,13 +241,13 @@ * Y2K compliance in libpng: * ========================= * - * August 24, 2017 + * September 28, 2017 * * Since the PNG Development group is an ad-hoc body, we can't make * an official declaration. * * This is your unofficial assurance that libpng from version 0.71 and - * upward through 1.6.32 are Y2K compliant. It is my belief that + * upward through 1.6.33 are Y2K compliant. It is my belief that * earlier versions were also Y2K compliant. * * Libpng only has two year fields. One is a 2-byte unsigned integer @@ -309,8 +309,8 @@ */ /* Version information for png.h - this should match the version in png.c */ -#define PNG_LIBPNG_VER_STRING "1.6.32" -#define PNG_HEADER_VERSION_STRING " libpng version 1.6.32 - August 24, 2017\n" +#define PNG_LIBPNG_VER_STRING "1.6.33" +#define PNG_HEADER_VERSION_STRING " libpng version 1.6.33 - September 28, 2017\n" #define PNG_LIBPNG_VER_SONUM 16 #define PNG_LIBPNG_VER_DLLNUM 16 @@ -318,7 +318,7 @@ /* These should match the first 3 components of PNG_LIBPNG_VER_STRING: */ #define PNG_LIBPNG_VER_MAJOR 1 #define PNG_LIBPNG_VER_MINOR 6 -#define PNG_LIBPNG_VER_RELEASE 32 +#define PNG_LIBPNG_VER_RELEASE 33 /* This should match the numeric part of the final component of * PNG_LIBPNG_VER_STRING, omitting any leading zero: @@ -349,7 +349,7 @@ * version 1.0.0 was mis-numbered 100 instead of 10000). From * version 1.0.1 it's xxyyzz, where x=major, y=minor, z=release */ -#define PNG_LIBPNG_VER 10632 /* 1.6.32 */ +#define PNG_LIBPNG_VER 10633 /* 1.6.33 */ /* Library configuration: these options cannot be changed after * the library has been built. @@ -459,7 +459,7 @@ extern "C" { /* This triggers a compiler error in png.c, if png.c and png.h * do not agree upon the version number. */ -typedef char* png_libpng_version_1_6_32; +typedef char* png_libpng_version_1_6_33; /* Basic control structions. Read libpng-manual.txt or libpng.3 for more info. * @@ -2819,6 +2819,8 @@ typedef struct # define PNG_FORMAT_FLAG_AFIRST 0x20U /* alpha channel comes first */ #endif +#define PNG_FORMAT_FLAG_ASSOCIATED_ALPHA 0x40U /* alpha channel is associated */ + /* Commonly used formats have predefined macros. * * First the single byte (sRGB) formats: diff --git a/thirdparty/libpng/pngconf.h b/thirdparty/libpng/pngconf.h index c0f15547be..e99e827dda 100644 --- a/thirdparty/libpng/pngconf.h +++ b/thirdparty/libpng/pngconf.h @@ -1,7 +1,7 @@ /* pngconf.h - machine configurable file for libpng * - * libpng version 1.6.32, August 24, 2017 + * libpng version 1.6.33, September 28, 2017 * * Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) diff --git a/thirdparty/libpng/pnglibconf.h b/thirdparty/libpng/pnglibconf.h index 9e45f73129..cbf715dd93 100644 --- a/thirdparty/libpng/pnglibconf.h +++ b/thirdparty/libpng/pnglibconf.h @@ -1,8 +1,8 @@ -/* libpng 1.6.32 STANDARD API DEFINITION */ +/* libpng 1.6.33 STANDARD API DEFINITION */ /* pnglibconf.h - library build configuration */ -/* Libpng version 1.6.32 - August 24, 2017 */ +/* Libpng version 1.6.33 - September 28, 2017 */ /* Copyright (c) 1998-2017 Glenn Randers-Pehrson */ diff --git a/thirdparty/libpng/pngread.c b/thirdparty/libpng/pngread.c index e34ddd99a0..da32e9ad9c 100644 --- a/thirdparty/libpng/pngread.c +++ b/thirdparty/libpng/pngread.c @@ -1,7 +1,7 @@ /* pngread.c - read a PNG file * - * Last changed in libpng 1.6.32 [August 24, 2017] + * Last changed in libpng 1.6.33 [September 28, 2017] * Copyright (c) 1998-2002,2004,2006-2017 Glenn Randers-Pehrson * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) @@ -3759,7 +3759,13 @@ png_image_read_direct(png_voidp argument) mode = PNG_ALPHA_PNG; output_gamma = PNG_DEFAULT_sRGB; } - + + if ((change & PNG_FORMAT_FLAG_ASSOCIATED_ALPHA) != 0) + { + mode = PNG_ALPHA_OPTIMIZED; + change &= ~PNG_FORMAT_FLAG_ASSOCIATED_ALPHA; + } + /* If 'do_local_background' is set check for the presence of gamma * correction; this is part of the work-round for the libpng bug * described above. @@ -3985,6 +3991,10 @@ png_image_read_direct(png_voidp argument) else if (do_local_compose != 0) /* internal error */ png_error(png_ptr, "png_image_read: alpha channel lost"); + if ((format & PNG_FORMAT_FLAG_ASSOCIATED_ALPHA) != 0) { + info_format |= PNG_FORMAT_FLAG_ASSOCIATED_ALPHA; + } + if (info_ptr->bit_depth == 16) info_format |= PNG_FORMAT_FLAG_LINEAR; diff --git a/thirdparty/libpng/pngrtran.c b/thirdparty/libpng/pngrtran.c index 9a30ddf22b..c189650313 100644 --- a/thirdparty/libpng/pngrtran.c +++ b/thirdparty/libpng/pngrtran.c @@ -1,7 +1,7 @@ /* pngrtran.c - transforms the data in a row for PNG readers * - * Last changed in libpng 1.6.31 [July 27, 2017] + * Last changed in libpng 1.6.33 [September 28, 2017] * Copyright (c) 1998-2002,2004,2006-2017 Glenn Randers-Pehrson * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) @@ -430,7 +430,7 @@ png_set_quantize(png_structrp png_ptr, png_colorp palette, int i; png_ptr->quantize_index = (png_bytep)png_malloc(png_ptr, - (png_uint_32)((png_uint_32)num_palette * (sizeof (png_byte)))); + (png_alloc_size_t)((png_uint_32)num_palette * (sizeof (png_byte)))); for (i = 0; i < num_palette; i++) png_ptr->quantize_index[i] = (png_byte)i; } @@ -447,7 +447,7 @@ png_set_quantize(png_structrp png_ptr, png_colorp palette, /* Initialize an array to sort colors */ png_ptr->quantize_sort = (png_bytep)png_malloc(png_ptr, - (png_uint_32)((png_uint_32)num_palette * (sizeof (png_byte)))); + (png_alloc_size_t)((png_uint_32)num_palette * (sizeof (png_byte)))); /* Initialize the quantize_sort array */ for (i = 0; i < num_palette; i++) @@ -581,9 +581,11 @@ png_set_quantize(png_structrp png_ptr, png_colorp palette, /* Initialize palette index arrays */ png_ptr->index_to_palette = (png_bytep)png_malloc(png_ptr, - (png_uint_32)((png_uint_32)num_palette * (sizeof (png_byte)))); + (png_alloc_size_t)((png_uint_32)num_palette * + (sizeof (png_byte)))); png_ptr->palette_to_index = (png_bytep)png_malloc(png_ptr, - (png_uint_32)((png_uint_32)num_palette * (sizeof (png_byte)))); + (png_alloc_size_t)((png_uint_32)num_palette * + (sizeof (png_byte)))); /* Initialize the sort array */ for (i = 0; i < num_palette; i++) @@ -592,7 +594,7 @@ png_set_quantize(png_structrp png_ptr, png_colorp palette, png_ptr->palette_to_index[i] = (png_byte)i; } - hash = (png_dsortpp)png_calloc(png_ptr, (png_uint_32)(769 * + hash = (png_dsortpp)png_calloc(png_ptr, (png_alloc_size_t)(769 * (sizeof (png_dsortp)))); num_new_palette = num_palette; @@ -623,7 +625,7 @@ png_set_quantize(png_structrp png_ptr, png_colorp palette, { t = (png_dsortp)png_malloc_warn(png_ptr, - (png_uint_32)(sizeof (png_dsort))); + (png_alloc_size_t)(sizeof (png_dsort))); if (t == NULL) break; @@ -748,9 +750,9 @@ png_set_quantize(png_structrp png_ptr, png_colorp palette, png_size_t num_entries = ((png_size_t)1 << total_bits); png_ptr->palette_lookup = (png_bytep)png_calloc(png_ptr, - (png_uint_32)(num_entries * (sizeof (png_byte)))); + (png_alloc_size_t)(num_entries * (sizeof (png_byte)))); - distance = (png_bytep)png_malloc(png_ptr, (png_uint_32)(num_entries * + distance = (png_bytep)png_malloc(png_ptr, (png_alloc_size_t)(num_entries * (sizeof (png_byte)))); memset(distance, 0xff, num_entries * (sizeof (png_byte))); @@ -3322,7 +3324,7 @@ png_do_compose(png_row_infop row_info, png_bytep row, png_structrp png_ptr) == png_ptr->trans_color.gray) { unsigned int tmp = *sp & (0x0f0f >> (4 - shift)); - tmp |= + tmp |= (unsigned int)(png_ptr->background.gray << shift); *sp = (png_byte)(tmp & 0xff); } diff --git a/thirdparty/libpng/pngrutil.c b/thirdparty/libpng/pngrutil.c index a4fa71457b..8692933bd8 100644 --- a/thirdparty/libpng/pngrutil.c +++ b/thirdparty/libpng/pngrutil.c @@ -1,7 +1,7 @@ /* pngrutil.c - utilities to read a PNG file * - * Last changed in libpng 1.6.32 [August 24, 2017] + * Last changed in libpng 1.6.33 [September 28, 2017] * Copyright (c) 1998-2002,2004,2006-2017 Glenn Randers-Pehrson * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) @@ -314,6 +314,7 @@ png_read_buffer(png_structrp png_ptr, png_alloc_size_t new_size, int warn) if (buffer != NULL) { + memset(buffer, 0, new_size); /* just in case */ png_ptr->read_buffer = buffer; png_ptr->read_buffer_size = new_size; } @@ -673,6 +674,8 @@ png_decompress_chunk(png_structrp png_ptr, if (text != NULL) { + memset(text, 0, buffer_size); + ret = png_inflate(png_ptr, png_ptr->chunk_name, 1/*finish*/, png_ptr->read_buffer + prefix_size, &lzsize, text + prefix_size, newlength); @@ -736,9 +739,7 @@ png_decompress_chunk(png_structrp png_ptr, { /* inflateReset failed, store the error message */ png_zstream_error(png_ptr, ret); - - if (ret == Z_STREAM_END) - ret = PNG_UNEXPECTED_ZLIB_RETURN; + ret = PNG_UNEXPECTED_ZLIB_RETURN; } } @@ -1476,7 +1477,7 @@ png_handle_iCCP(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length) /* Now read the tag table; a variable size buffer is * needed at this point, allocate one for the whole * profile. The header check has already validated - * that none of these stuff will overflow. + * that none of this stuff will overflow. */ const png_uint_32 tag_count = png_get_uint_32( profile_header+128); @@ -1583,19 +1584,11 @@ png_handle_iCCP(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length) return; } } - - else if (size > 0) - errmsg = "truncated"; - -#ifndef __COVERITY__ - else + if (errmsg == NULL) errmsg = png_ptr->zstream.msg; -#endif } - /* else png_icc_check_tag_table output an error */ } - else /* profile truncated */ errmsg = png_ptr->zstream.msg; } @@ -3144,28 +3137,28 @@ png_check_chunk_length(png_const_structrp png_ptr, const png_uint_32 length) { png_alloc_size_t limit = PNG_UINT_31_MAX; - if (png_ptr->chunk_name != png_IDAT) - { # ifdef PNG_SET_USER_LIMITS_SUPPORTED - if (png_ptr->user_chunk_malloc_max > 0 && - png_ptr->user_chunk_malloc_max < limit) - limit = png_ptr->user_chunk_malloc_max; + if (png_ptr->user_chunk_malloc_max > 0 && + png_ptr->user_chunk_malloc_max < limit) + limit = png_ptr->user_chunk_malloc_max; # elif PNG_USER_CHUNK_MALLOC_MAX > 0 - if (PNG_USER_CHUNK_MALLOC_MAX < limit) - limit = PNG_USER_CHUNK_MALLOC_MAX; + if (PNG_USER_CHUNK_MALLOC_MAX < limit) + limit = PNG_USER_CHUNK_MALLOC_MAX; # endif - } - else + if (png_ptr->chunk_name == png_IDAT) { + png_alloc_size_t idat_limit = PNG_UINT_31_MAX; size_t row_factor = (png_ptr->width * png_ptr->channels * (png_ptr->bit_depth > 8? 2: 1) + 1 + (png_ptr->interlaced? 6: 0)); if (png_ptr->height > PNG_UINT_32_MAX/row_factor) - limit=PNG_UINT_31_MAX; + idat_limit=PNG_UINT_31_MAX; else - limit = png_ptr->height * row_factor; - limit += 6 + 5*(limit/32566+1); /* zlib+deflate overhead */ - limit=limit < PNG_UINT_31_MAX? limit : PNG_UINT_31_MAX; + idat_limit = png_ptr->height * row_factor; + row_factor = row_factor > 32566? 32566 : row_factor; + idat_limit += 6 + 5*(idat_limit/row_factor+1); /* zlib+deflate overhead */ + idat_limit=idat_limit < PNG_UINT_31_MAX? idat_limit : PNG_UINT_31_MAX; + limit = limit < idat_limit? idat_limit : limit; } if (length > limit) diff --git a/thirdparty/libpng/pngtrans.c b/thirdparty/libpng/pngtrans.c index 326ac33f0e..6882f0fd7b 100644 --- a/thirdparty/libpng/pngtrans.c +++ b/thirdparty/libpng/pngtrans.c @@ -1,7 +1,7 @@ /* pngtrans.c - transforms the data in a row (used by both readers and writers) * - * Last changed in libpng 1.6.30 [June 28, 2017] + * Last changed in libpng 1.6.33 [September 28, 2017] * Copyright (c) 1998-2002,2004,2006-2017 Glenn Randers-Pehrson * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) @@ -609,7 +609,7 @@ png_do_strip_channel(png_row_infop row_info, png_bytep row, int at_start) return; /* The filler channel has gone already */ /* Fix the rowbytes value. */ - row_info->rowbytes = (unsigned int)(dp-row); + row_info->rowbytes = (png_size_t)(dp-row); } #endif @@ -708,7 +708,7 @@ png_do_check_palette_indexes(png_structrp png_ptr, png_row_infop row_info) * forms produced on either GCC or MSVC. */ int padding = PNG_PADBITS(row_info->pixel_depth, row_info->width); - png_bytep rp = png_ptr->row_buf + row_info->rowbytes; + png_bytep rp = png_ptr->row_buf + row_info->rowbytes - 1; switch (row_info->bit_depth) { diff --git a/thirdparty/libpng/pngwrite.c b/thirdparty/libpng/pngwrite.c index a7662acb71..a16d77ce00 100644 --- a/thirdparty/libpng/pngwrite.c +++ b/thirdparty/libpng/pngwrite.c @@ -1940,7 +1940,7 @@ png_image_write_main(png_voidp argument) int colormap = (format & PNG_FORMAT_FLAG_COLORMAP); int linear = !colormap && (format & PNG_FORMAT_FLAG_LINEAR); /* input */ int alpha = !colormap && (format & PNG_FORMAT_FLAG_ALPHA); - int write_16bit = linear && !colormap && (display->convert_to_8bit == 0); + int write_16bit = linear && (display->convert_to_8bit == 0); # ifdef PNG_BENIGN_ERRORS_SUPPORTED /* Make sure we error out on any bad situation */ diff --git a/thirdparty/zstd/SCsub b/thirdparty/zstd/SCsub new file mode 100644 index 0000000000..e8be1aaf44 --- /dev/null +++ b/thirdparty/zstd/SCsub @@ -0,0 +1,23 @@ +#!/usr/bin/env python + +Import('env') + +thirdparty_zstd_dir = "#thirdparty/zstd/" +thirdparty_zstd_sources = [ + "common/entropy_common.c", + "common/error_private.c", + "common/fse_decompress.c", + "common/pool.c", + "common/threading.c", + "common/xxhash.c", + "common/zstd_common.c", + "compress/fse_compress.c", + "compress/huf_compress.c", + "compress/zstd_compress.c", + "compress/zstdmt_compress.c", + "decompress/huf_decompress.c", + "decompress/zstd_decompress.c", +] +thirdparty_zstd_sources = [thirdparty_zstd_dir + file for file in thirdparty_zstd_sources] +env.add_source_files(env.core_sources, thirdparty_zstd_sources) +env.Append(CPPPATH=["#thirdparty/zstd", "#thirdparty/zstd/common"]) |